So sieht die Initialisierung des LCD-Moduls in der acht bit Version aus:

LCD_INIT: LDI r16,$05
RCALL DEL_LANG ; Beim Einschalten 60ms warten
RCALL DEL_LANG
LDI r19,0b00110000
OUT PORTB,r19 ; muss 3mal hintereinander gesendet
RCALL LCD_ENABLE ; werden zur Initialisierung
LDI r16,$04 ; Timer / 256 => 7,5 msec
RCALL DEL_LANG
RCALL LCD_ENABLE
RCALL DEL_LANG
RCALL LCD_ENABLE
RCALL DEL_LANG

; hier würde Umstellen auf 4 bit erfolgen

LDI r19,0b00110100 ;RE-bit=1
OUT PORTB,r19
RCALL LCD_COMMAND
LDI r19,0b00001001 ; = 4 Zeilen Modus
RCALL LCD_COMMAND
LDI r19,0b00110000 ; RE-bit=0
RCALL LCD_COMMAND
LDI r19,0b00001100 ; Display Ein / Cursor Aus / Blnken Aus
RCALL LCD_COMMAND ; 0 0 0 0 1 D C B
RCALL LCD_CLEAR
RET

LCD_DATA: SBI PORTA,5 ; RS= High -> Daten
OUT PORTB,r19 ; ausgeben
NOP
NOP
RCALL LCD_ENABLE ; Enable-ROUTine aufrufen
NOP
NOP
CBI PORTA,5 ; zurücksetzen
RET zurück

LCD_COMMAND: CBI PORTA,5 ; RS = Low -> Befehl
NOP
NOP
OUT PORTB,r19 ; ausgeben
NOP
NOP
RCALL LCD_ENABLE ; Enable-ROUTine aufrufen
RET ;zurück

LCD_ENABLE: SBI PORTA,6 ; Enable high
NOP 6Taktzyklen warten
NOP
NOP
NOP ;erzeugt den Enable-Puls
NOP
NOP
CBI PORTA,6 ; Enable wieder low
LDI r16,$02 ; Timer / 8
RCALL Delay_50 ; normale Wartezeit für Ausgabe
RET ;Und wieder zurück

Das funktioniert, danach kann ich Schriftzeichen ausgeben etc.
Wenn ich in der Initialisierung das einfüge

LDI r19,0b00100000 ; 4 bit Modus wählen
OUT PORTB,r19
RCALL LCD_COMMAND

bleibt das Display ohne irgendein Zeichen beim Beschreiben.
Es ist an Port B(4-7) angeschlossen.
Beim Beschreiben in 4 bit-Modus gebe ich zuerst das höhere Nibble mit Enable Puls, dann das untere mit weiterem EN-Puls aus.
Was mache ich falsch??[/quote]