;Initialisierungstest fuer LCD-Anzeige
;mit KS0066U-kompatiblem Controllerchip
;8-Bit-Mode; 4-Zeilen
;Daten-/Steuerbits auf PORTA, Bit D0 bis D7
;Enableimpuls erster Controller auf PORTC, Bit D0
;RS-Impuls auf PORTC, Bit D1
;Enableimpuls zweiter Controller auf PORTC, Bit D2
;R/WQuer auf Masse fest verdrahtet;
;Routine wird einmal durchlaufen und
;sistiert dann beim Label "Schleife"
;mit Ausgabe TEXT*TEXT*TEXT* etc...
;CPU Takt 1 MHz
;Verzögerung1 = 510µs
;Verzögerung2 = 5ms
;Verzögerung3 = 1,1s
.nolist
.include "m128def.inc"
.list
.def zeit = r16
.def zeit1 = r17
.def zeit2 = r18
.def temp = r19
.def temp1 = r20
.equ daten = porta
.equ impuls = portc
;Stack Initialisierung:
ldi temp, low(ramend)
out SPL, temp
ldi temp, high(ramend)
out SPH, temp
;Initialisierung
;Datenrichtungsregister auf 8-Bit-Breite
;setzen und interne Pull-up-Widerstaende aktivieren:
ldi temp, 0xFF
out ddra, temp
ldi temp, 0xFF
out ddrc, temp
rjmp Start
Start:
rcall Einschaltverzoegerung
rjmp Hauptprogramm
Einschaltverzoegerung:
rcall Verzoegerung2
rcall Verzoegerung2
rcall Verzoegerung2
rcall LCD_Initialisierung
Hauptprogramm:
rcall Text_Ausgabe
LCD_Initialisierung:
;LCD Reset, Acht-Bit-Modus initialisieren:
ldi temp, $30
out daten, temp
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
rcall Verzoegerung2
ldi temp, $30
out daten, temp
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
rcall Verzoegerung1
ldi temp, $30
out daten, temp
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
rcall Verzoegerung1 ;Aller guten Dinge sind drei
;Zeilenzahl vier, Display einschalten:
ldi temp, $38 ;Extension D/L, N "und" F
out daten, temp
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
;Anzeige ON/OFF Control definieren:
ldi temp, $08 ;Display off, 4-zeilig ein
out daten, temp ;"und" Hex01 => 4 Zeilen
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
;Display clear, cursor home:
ldi temp, $01 ;es werden "space", Hex 20
out daten, temp ;in alle Display-RAM-Stellen
sbi impuls, 0 ;geschrieben, dauert laenger
rcall Verzoegerung1
cbi impuls, 0
rcall Verzoegerung2
rcall Verzoegerung2
rcall Verzoegerung2
;Entry Mode Set:
ldi temp, $04 ;Cursor increment, no shift
out daten, temp
sbi impuls, 0
rcall Verzoegerung1
cbi impuls, 0
ret
;Anzeige ON/OFF Control definieren:
; ldi temp, 0b00111000 ;4-zeilig wieder aus
; out daten, temp ;Acht-Bit-Modus ein
; sbi impuls, 0
; rcall Verzoegerung1
; cbi impuls, 0
; rcall Verzoegerung2
; nop
;Cursor move, display shift:
; ldi temp, 0b00010000 ;Cursor increment, no shift
; out daten, temp ;Diese Aktion wird jedesmal ohne
; sbi impuls, 0 ;Schreib-Lese-Funktion
; rcall Verzoegerung1 ;ausgeführt
; cbi impuls, 0 ;dient zur "Suchfunktion"
; rcall Verzoegerung2 ;und, um den Inhalt zu "lesen"
;Display on, cursor on:
; ldi temp, 0b00001111 ;Cursor on/increment, no blink
; out daten, temp
; sbi impuls, 0
; rcall Verzoegerung1
; cbi impuls, 0
; rcall Verzoegerung2
;Display clear, cursor home:
; ldi temp, 0b00000001 ;es werden "space", Hex 20
; out daten, temp ;in alle Display-RAM-Stellen
; sbi impuls, 0 ;geschrieben, dauert laenger
; rcall Verzoegerung1
; cbi impuls, 0
; rcall Verzoegerung2
; rcall Verzoegerung2
Text_Ausgabe:
rcall Verzoegerung2
nop
sbi impuls, 1
rcall Verzoegerung1
sbi impuls, 0
ldi temp1, $54 ;T
out daten, temp1
; rcall Verzoegerung2
nop
nop
cbi impuls, 0
rcall Verzoegerung1
cbi impuls, 1
sbi impuls, 1
sbi impuls, 0
ldi temp1, $65 ;e
out daten, temp1
; rcall Verzoegerung2
nop
nop
cbi impuls, 0
rcall Verzoegerung1
cbi impuls, 1
sbi impuls, 1
sbi impuls, 0
ldi temp1, $78 ;x
out daten, temp1
; rcall Verzoegerung2
nop
nop
cbi impuls, 0
rcall Verzoegerung1
cbi impuls, 1
sbi impuls, 1
sbi impuls, 0
ldi temp1, $74 ;t
out daten, temp1
; rcall Verzoegerung2
nop
nop
cbi impuls, 0
rcall Verzoegerung1
cbi impuls, 1
sbi impuls, 1
sbi impuls, 0
ldi temp1, $2A ;*
out daten, temp1
; rcall Verzoegerung2
nop
nop
cbi impuls, 0
rcall Verzoegerung1
cbi impuls, 1
nop
nop
rcall Text_Ausgabe
; rcall Ende
Verzoegerung1:
ldi zeit, 0xFF
Verzoegerungs_Schleife:
dec zeit
cpi zeit, 1
brlt Verzoegerungs_Schleife
ret
Verzoegerung2:
ldi zeit, 0xDF
ldi zeit1, 0x89
Verzoegerungs_Schleife2:
dec zeit
cpi zeit, 1
brlt Verzoegerungs_Schleife2
ldi zeit, 0xFF
dec zeit1
cpi zeit1, 1
brlt Verzoegerungs_Schleife2
ret
Verzoegerung3:
ldi zeit, 0xFF
ldi zeit1, 0xE0
ldi zeit2, 0x90
rjmp Verzoegerungs_Schleife3
Verzoegerungs_Schleife3:
dec zeit
cpi zeit, 1
brlt Verzoegerungs_Schleife3
ldi zeit, 0xFF
dec zeit1
cpi zeit1, 1
brlt Verzoegerungs_Schleife3
ldi zeit1, 0xFF
dec zeit2