Mooment.
Wenn ich das richtig sehe, hast du doch nur statt Pin0-3 die Pinne 4-7
benutzt oder?
ist doch ganz easy:
Tutorial Routine:
lcd_data:
mov temp2, temp1 ;"Sicherungskopie" für
;die Übertragung des 2.Nibbles
swap temp1 ;Vertauschen
andi temp1, 0b00001111 ;oberes Nibble auf Null setzen
sbr temp1, 1<<4 ;entspricht 0b00010000
out PORTD, temp1 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
;2. Nibble, kein swap da es
schon
;an der richtigen stelle ist
andi temp2, 0b00001111 ;obere Hälfte auf Null setzen
sbr temp2, 1<<4 ;entspricht 0b00010000
out PORTD, temp2 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
rcall delay50us ;Delay-Routine aufrufen
ret ;zurück zum Hauptprogramm
Es wird das untere Nibble auf 0 gesetzt (Pin0-3) und die oberen werden
übernommen. du machsts wie folgt:
lcd_data:
mov temp2, temp1 ;"Sicherungskopie" für
;die Übertragung des 2.Nibbles
andi temp1, 0b11110000 ;oberes Nibble auf Null setzen
sbr temp1, 1<<4 ;entspricht 0b00010000
out PORTD, temp1 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
;2. Nibble, kein swap da es
schon
;an der richtigen stelle ist
swap temp1 ;Vertauschen
andi temp2, 0b11110000 ;obere Hälfte auf Null setzen
sbr temp2, 1<<4 ;entspricht 0b00010000
out PORTD, temp2 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
rcall delay50us ;Delay-Routine aufrufen
ret
Oder lieg ich falsch?
Nun wird nämlich alles auf die oberen Pins umgebastelt. Hab lediglich
das Swap verschoben und die ANDI bitmaske geändert, damit auch die
richtigen Ports angesprochen werden.