Hallo

Ich sitze jetzt schon einige Tage an meinem Code und es stellt sich allmählich eine gewisse Betriebsblindheit ein.
Findet jemand den Fehler in meinem Code?


Folgendes Problem: Ich habe hier ein 2x16-LCD, das jedoch keine Zeichen anzeigen will.
Ich kann es zwar initialisieren (obere Balkenreihe verschwindet), jedoch zeigt es keine Zeichen an.

Kann mal wer über den Code rüberschauen?

Code:
.equ LCD_DAT_PORT       =PORTC    ;Port für Datenleitungen definieren
.equ LCD_STRG_PORT      =PORTA    ;Port definieren, an dem RS, RW und E angeschlossen sind
.equ LCD_DDR            =DDRC     ;Datenrichtungsregister LCD-Datenport
.equ LCD_PIN            =PINC     ;Pin-Register LCD-Datenport
.equ LCD_E              =7        ;Enable-Pin definieren
.equ LCD_RS             =5        ;Register-Select-Pin definieren
.equ LCD_RW             =6        ;Read-Write-Pin definieren
.equ Schlussmarke       =0        ;Schlussmarke für längeren Text, ASCII-Wert
.def LCD_Puffer			=R16      ;Register für Daten/Befehlübergabe
.def LCD_TMP1			=R17      ;Arbeitsregister für LCD-Routinen, wird bei Verwendung auf dem Stack gesichert
.def LCD_TMP2			=R18      ;Arbeitsregister für LCD-Routinen, wird bei Verwendung auf dem Stack gesichert
.equ LCD_FunctionSet    =0b00101110    ;FunctionSet: 0b001 DL N F * *     DL=8/4-Bit, N=1/2 Zeilen, 5x8/5x10  
.equ LCD_Display        =0b00001000    ;Display Ein/Aus: 0b00001 D C B    D=Display Ein/Aus, C=Kursor Ein/Aus, B=Blinken Ein/Aus
.equ LCD_EntryMode      =0b00000110    ;Entry Mode Set: 0b000001 I S      I=Kursor Laufrichtung, S=Shift Ein/Aus


;============
;Ports konfigurieren
;Stack initialisieren, usw
;============


rcall LCD_initialisieren
rcall Warte_50ms
rcall Warte_50ms

ldi LCD_Puffer, 'W'
rcall LCD_Befehluebergabe
rcall Warte_50ms

Ende:
rjmp Ende


;==================================================================
;..................................................................
;LCD initialisieren - 8-Bit-Modus
;..................................................................
;==================================================================

LCD_initialisieren:

     push LCD_TMP1
     
     ldi LCD_TMP1, 0b00110000
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     rcall Warte_1ms
     rcall Warte_1ms
     rcall Warte_1ms
     rcall Warte_1ms
     rcall Warte_10us
     
     ldi LCD_TMP1, 0b00110000
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     rcall Warte_100us
     
     ldi LCD_TMP1, 0b00110000
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     
     ldi LCD_TMP1, LCD_FunctionSet      ;Function Set
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     rcall Warte_10us
     rcall Warte_10us
     rcall Warte_25us
     
     ldi LCD_TMP1, LCD_Display          ;Display und Kursor einstellen
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     rcall Warte_10us
     rcall Warte_10us
     rcall Warte_25us
     
     ldi LCD_TMP1, LCD_EntryMode       ;Entry Mode Set
     out LCD_DAT_PORT, LCD_TMP1
     rcall LCD_Enable
     rcall Warte_1ms
     rcall Warte_1ms

	 pop LCD_TMP1

     ret


;==================================================================
;..................................................................
;LCD Befehl uebergeben
;..................................................................
;==================================================================

LCD_Befehluebergabe:
     out LCD_DAT_PORT, LCD_Puffer
     cbi LCD_STRG_PORT,LCD_RS
	 nop
	 nop
	 nop
     rcall LCD_Enable
     rcall LCD_BusyFlag
     ret 


;==================================================================
;..................................................................
;LCD Daten uebergeben
;..................................................................
;==================================================================

LCD_Datenuebergabe:
     out LCD_DAT_PORT, LCD_Puffer
     sbi LCD_STRG_PORT,LCD_RS
	 nop
	 nop
	 nop
     rcall LCD_Enable
     rcall LCD_BusyFlag
     cbi LCD_STRG_PORT,LCD_RS
     ret 


;==================================================================
;..................................................................
;LCD Enable-Routine
;..................................................................
;==================================================================

LCD_Enable:
     sbi LCD_STRG_PORT, LCD_E
	 nop
	 nop
	 nop
     cbi LCD_STRG_PORT, LCD_E
     ret


;==================================================================
;..................................................................
;LCD Busyflag abwarten
;..................................................................
;==================================================================

LCD_BusyFlag:
     push LCD_TMP1
     ldi LCD_TMP1, 0b00000000           ;Portpin 7 als Eingang konfigurieren um das BF auszulesen
	 cbi LCD_STRG_PORT,LCD_RS
     sbi LCD_STRG_PORT,LCD_RW
     out LCD_DDR, LCD_TMP1
     
LCD_WarteBF:                            ;Warteschleife, wird verlassen sobald Pin 7 gesetzt wird
     sbic LCD_PIN, 7
     jmp LCD_WarteBF
     
     ldi LCD_TMP1, 0b11111111
     out LCD_DDR, LCD_TMP1
     pop LCD_TMP1
     ret