home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 13 / AACD13.ISO / AACD / Programming / Atmel / Asm / examples / lcd / lcd.asm < prev   
Assembly Source File  |  2000-05-22  |  2KB  |  144 lines

  1.  include "io2313.h"
  2.  
  3. ECLK   def PORTD,5
  4. RS     def PORTD,3
  5. RW     def PORTD,4
  6. CS     def PORTD,6
  7.  
  8.  org RESET_vect
  9.  rjmp start
  10.  
  11.  org ROMSTART
  12.  
  13. start:
  14.  
  15.  ldi R16,$DF
  16.  out SP,R16         ;load stack pointer.
  17.  
  18.  ldi R16,255
  19.  out DDRB,R16       ; Port B, data lines.  All outputs.
  20.  
  21.  ldi R16,$78           ;0111 1000
  22.  out DDRD,R16
  23.  
  24.  rcall SetupLCD
  25.  
  26.  ldi R17,63
  27. loop:
  28.  rcall WaitLCD
  29.  ldi R16,$0C
  30.  rcall WriteCMD
  31.  mov R16,R17
  32.  rcall WriteDAT
  33.  inc R17
  34.  
  35.  ldi R20,10
  36. l1:
  37.  dec R18
  38.  brne l1
  39.  dec R19
  40.  brne l1
  41.  dec R20
  42.  brne l1
  43.  
  44.  rjmp loop
  45.  
  46. ;/\/\/\/\/\/\/\
  47. ;| Subroutines|
  48. ;\/\/\/\/\/\/\/
  49.  
  50. ;--------------------------
  51. ;SetupLCD
  52. ; Sets up the lcd
  53. ;--------------------------
  54. SetupLCD:
  55.  ldi    R30,(SetupInfo * 2) & 255
  56.  ldi    R31,(SetupInfo * 2) >> 8
  57. moresetup:
  58.  rcall  WaitLCD
  59.  lpm
  60.  adiw   R30,1    ;Inc Z
  61.  mov    R16,R0
  62.  cpi    R16,$FF
  63.  brne   isok
  64.  ret
  65. isok:
  66.  rcall  WriteCMD
  67.  lpm
  68.  adiw   R30,1
  69.  mov    R16,R0
  70.  rcall  WriteDAT
  71.  rjmp   moresetup
  72.  ;SetupInfo is in byte pairs: CMD-DATA. Terminate with a CMD of 0xFF
  73. SetupInfo:
  74.  .db 0,$38    ;Mode
  75.  .db 8,0      ;Disp addr. Lo
  76.  .db 9,0      ;Disp addr. Hi
  77.  .db 1,$77    ;Char pitch
  78.  .db 3,5      ;Duty ratio
  79.  .db 2,20     ;Disp width in chars
  80.  .db 10,0     ;Cursor addr Lo
  81.  .db 11,0     ;Cursor addr Hi
  82.  .db $FF,$FF
  83.  
  84. ;--------------------------
  85. ; EClock
  86. ; Does an LCD E clock
  87. ;--------------------------
  88. EClock:
  89.  sbi ECLK
  90.  ldi R16,4
  91. dl1:
  92.  dec R16
  93.  brne dl1
  94.  cbi ECLK
  95.  ret
  96.  
  97. ;-------------------------
  98. ; WriteCMD
  99. ; Write Command R16 to lcd
  100. ;-------------------------
  101. WriteCMD:
  102.  sbi RS
  103.  cbi RW
  104.  cbi CS
  105.  out PORTB,R16
  106.  rcall EClock
  107.  sbi CS
  108.  ret
  109.  
  110. ;------------------------
  111. ; WriteDAT
  112. ; Writes Data R16 to lcd
  113. ;------------------------
  114. WriteDAT:
  115.  cbi RS
  116.  cbi RW
  117.  cbi CS
  118.  out PORTB,R16
  119.  rcall EClock
  120.  sbi CS
  121.  ret
  122.  
  123. ;-------------------------
  124. ; WaitLCD
  125. ; Waits for LCD
  126. ;-------------------------
  127. WaitLCD:
  128.  clr R16
  129.  out DDRB,R16   ;All input.
  130.  sbi RS
  131.  sbi RW
  132.  cbi CS
  133.  sbi ECLK
  134. w1:
  135.  sbic PINB,7      ;wait for pin low (busy flag)
  136.  rjmp w1
  137.  sbi CS
  138.  cbi RS
  139.  cbi RW
  140.  cbi ECLK
  141.  ser R16
  142.  out DDRB,R16     ;Back to all outputs 
  143.  ret
  144.