Advertisement
Guest User

Untitled

a guest
Nov 23rd, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.07 KB | None | 0 0
  1. ; 1DT301
  2. ; Lab 5, Initialize display JHD202A.
  3. ;
  4. ; Date: 2017-10-11
  5. ; Author, Christian Fagerholm, Amelie Löwe
  6.  
  7. ; Modified:
  8. ;
  9. ; Function
  10. ; --------
  11. ; Initialize display JHD202 connected to PORTE
  12. ;
  13. ; (run @ 1.8432 MHz clk frequency)
  14. ;
  15.  
  16. .include "m2560def.inc"
  17. .def Temp = r16
  18. .def Data = r17
  19. .def RS = r18
  20.  
  21. .equ BITMODE4 = 0b00000010 ; 4-bit operation
  22. .equ CLEAR = 0b00000001 ; Clear display
  23. .equ DISPCTRL = 0b00001111 ; Display on, cursor on, blink on.
  24.  
  25. .cseg
  26. .org 0x0000 ; Reset vector
  27. jmp reset
  28.  
  29. .org 0x0072
  30.  
  31. reset:
  32.  
  33. ldi Temp, HIGH(RAMEND) ; Temp = high byte of ramend address
  34. out SPH, Temp ; sph = Temp
  35. ldi Temp, LOW(RAMEND) ; Temp = low byte of ramend address
  36. out SPL, Temp ; spl = Temp
  37.  
  38. ser Temp ; r16 = 0b11111111
  39. out DDRE, Temp ; port E = outputs ( Display JHD202A)
  40. clr Temp ; r16 = 0
  41. out PORTE, Temp
  42.  
  43.  
  44.  
  45. ; **
  46. ; ** init_display
  47. ; **
  48. init_disp:
  49. rcall power_up_wait ; wait for display to power up
  50.  
  51. ldi Data, BITMODE4 ; 4-bit operation
  52. rcall write_nibble ; (in 8-bit mode)
  53. rcall short_wait ; wait min. 39 us
  54. ldi Data, DISPCTRL ; disp. on, blink on, curs. On
  55. rcall write_cmd ; send command
  56. rcall short_wait ; wait min. 39 us
  57.  
  58. ldi Data, 37
  59. rcall write_char
  60.  
  61. loop: nop
  62. rjmp loop ; loop forever
  63.  
  64.  
  65. clr_disp:
  66. ldi Data, CLEAR ; clr display
  67. rcall write_cmd ; send command
  68. rcall long_wait ; wait min. 1.53 ms
  69. ret
  70.  
  71. ; **
  72. ; ** write char/command
  73. ; **
  74.  
  75. write_char:
  76. ldi RS, 0b00100000 ; RS = high
  77. rjmp write
  78. write_cmd:
  79. clr RS ; RS = low
  80. write:
  81. mov Temp, Data ; copy Data
  82. andi Data, 0b11110000 ; mask out high nibble
  83. swap Data ; swap nibbles
  84. or Data, RS ; add register select
  85. rcall write_nibble ; send high nibble
  86. mov Data, Temp ; restore Data
  87. andi Data, 0b00001111 ; mask out low nibble
  88. or Data, RS ; add register select
  89.  
  90. write_nibble:
  91. rcall switch_output ; Modify for display JHD202A, port E
  92. nop ; wait 542nS
  93. sbi PORTE, 5 ; enable high, JHD202A
  94. nop
  95. nop ; wait 542nS
  96. cbi PORTE, 5 ; enable low, JHD202A
  97. nop
  98. nop ; wait 542nS
  99. ret
  100.  
  101. ; **
  102. ; ** busy_wait loop
  103. ; **
  104. short_wait:
  105. clr zh ; approx 50 us
  106. ldi zl, 30
  107. rjmp wait_loop
  108. long_wait:
  109. ldi zh, HIGH(1000) ; approx 2 ms
  110. ldi zl, LOW(1000)
  111. rjmp wait_loop
  112. dbnc_wait:
  113. ldi zh, HIGH(4600) ; approx 10 ms
  114. ldi zl, LOW(4600)
  115. rjmp wait_loop
  116. power_up_wait:
  117. ldi zh, HIGH(9000) ; approx 20 ms
  118. ldi zl, LOW(9000)
  119.  
  120. wait_loop:
  121. sbiw z, 1 ; 2 cycles
  122. brne wait_loop ; 2 cycles
  123. ret
  124.  
  125. ; **
  126. ; ** modify output signal to fit LCD JHD202A, connected to port E
  127. ; **
  128.  
  129. switch_output:
  130. push Temp
  131. clr Temp
  132. sbrc Data, 0 ; D4 = 1?
  133. ori Temp, 0b00000100 ; Set pin 2
  134. sbrc Data, 1 ; D5 = 1?
  135. ori Temp, 0b00001000 ; Set pin 3
  136. sbrc Data, 2 ; D6 = 1?
  137. ori Temp, 0b00000001 ; Set pin 0
  138. sbrc Data, 3 ; D7 = 1?
  139. ori Temp, 0b00000010 ; Set pin 1
  140. sbrc Data, 4 ; E = 1?
  141. ori Temp, 0b00100000 ; Set pin 5
  142. sbrc Data, 5 ; RS = 1?
  143. ori Temp, 0b10000000 ; Set pin 7 (wrong in previous version)
  144. out porte, Temp
  145. pop Temp
  146. ret
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement