Hier der Code mit Comments.
Das funktioniert sogar (RS-Toggeln ist nicht nötig, dient nur zur
Kontrolle, ob die Don't cares auch wirklich ignoriert werden)
Datenuebernahme:
mov temp1, temp ;Kopie des Wertes fuer weitere;
; ;Operation unten
andi temp, 0b11110000 ;unteres Nibble ausblenden
ori temp, 0b00000010 ;RS auf "high" maskieren(Pinout PORTB)
out daten, temp ;Ausgabe oberes Nibble auf D4-D7
ldi temp, 0x02 ;RS auf "high" Pinout PORTD
out impuls, temp ;Funktion wie "sbi impuls, 1"
rcall enable
nop
nop
swap temp1 ;Nibble-Vertauschen, Wert aus temp;
; ;kopiert, s.o.
andi temp1, 0b11110000 ;unteres Nibble ausblenden
ori temp1, 0b00000010 ;RS auf "high" maskieren(Pinout PORTB)
out daten, temp1 ;Ausgabe unteres Nibble auf D4-D7
rcall enable
nop
rcall Verzoegerung
ldi temp, 0x02 ;RS kurz auf "high" Pinout PORTD
out impuls, temp
ldi temp, 0x00 ;RS auf "low" Pinout PORTD
out impuls, temp
ret
Kommando:
mov temp1, temp ;Kopie des Wertes fuer weitere;
; ;Operation unten
andi temp, 0b11110000 ;unteres Nibble ausblenden
out daten, temp ;Ausgabe oberes Nibble auf D4-D7
ldi temp, 0x00 ;RS auf "low" Pinout PORTD
out impuls, temp ;Funktion wie "cbi impuls, 1"
rcall enable
nop
nop
swap temp1 ;Nibble-Vertauschen, Wert aus temp;
; ;kopiert, siehe oben
andi temp1, 0b11110000 ;unteres Nibble ausblenden
out daten, temp1 ;Ausgabe unteres Nibble auf D4-D7
rcall enable
rcall Verzoegerung
ldi temp, 0x02 ;RS kurz auf "high" Pinout PORTD
out impuls, temp
ldi temp, 0x00 ;RS auf "low" Pinout PORTD
out impuls, temp
ret
Enable:
nop
sbi impuls, 0 ;Enable auf "high" setzen
nop ;Impulsdauer mindestens
nop ;0,5 Mikrosekunden laut Datenblatt
nop ;lieber ein paar "nops" mehr
nop ;spendieren
nop
nop
nop
cbi impuls, 0 ;Enable auf "low" zurücksetzen
nop
ret
Verzoegerung: ;2+[4x(255-1)+3]x[5x(2-1)]+7=1,276 ms bei 4 MHz
ldi zeit, 0xFF
ldi zeit1, 0x05
Verzoegerungs_Schleife:
dec zeit
cpi zeit, 1
brlt Verzoegerungs_Schleife
ldi zeit, 0xFF
dec zeit1
cpi zeit1, 1
brlt Verzoegerungs_Schleife
ret
Verzoegerung2: ;2+[4x(255-1)+3]x[5x(32-1)]+7= 39,49 ms bei 4 MHz
ldi zeit, 0xFF
ldi zeit1, 0x20
Verzoegerungs_Schleife2:
dec zeit
cpi zeit, 1
brlt Verzoegerungs_Schleife2
ldi zeit, 0xFF
dec zeit1
cpi zeit1, 1
brlt Verzoegerungs_Schleife2
ret