Hatte das gleiche Problem, Du mußt bei der Initialisierung des Displays ein "Enable-Bit" setzen (siehe Datenblatt).
Ich habe mir dazu eine Libray erstellt, die ich dann in Bascom als erstes mit aufrufe.
Also so:
Code:
$regfile = "m8def.dat"                  'für ATMEL ATMEGA8
$crystal = 4000000                      'Quarz: 4 MHz
$baud = 19200                            'Baudrate
$lib "DIP_LCD.lib"                        'Libary einbinden
initlcd
...das Programm...
kein "config Lcd" oder so, da das die Libary macht.

Hier noch der Inhalt der Libary:
Code:
;----------------------------------------------------------
;Anschlussbelegung mein LCD
;----------------------------------------------------------
;DB4 = PC3 = PIN11
;DB5 = PC2 = PIN12
;DB6 = PC1 = PIN13
:DB7 = PC0 = Pin14
;E   = PD6 = PIN6
;RS  = PD7 = PIN4
;R/W = GND = Pin5
;----------------------------------------------------------
[_Init_LCD]
;----------------------------------------------------------
;
; RW               liegt auf GND da nur geschrieben wird
; D3, D2, D1, D0   liegen auf GND da nur 4 Bit-Datenlänge
; RS               Low für Befehlsübertragung, High für Datenübertragung
; E                Low-High-Low für Übertragungsaktivierung
;
;Anschlussbelegung LCD
; PD6 | PD7 | PC0 PC1 PC2 PC3 | PC0 PC1 PC2 PC3
; E   | RS  | D7  D6  D5  D4  | D3  D2  D1  D0
;     | 0   | 0   0   1   0   | 0   1   0   0   |  4 Bit-Datenlänge, extension Bit RE=1
;     | 0   | 0   0   0   0   | 1   0   0   1   |  4 Zeilen Modus
;     | 0   | 0   0   1   0   | 0   0   0   0   |  4 Bit-Datenlänge, extension Bit RE=0
;     | 0   | 0   0   0   0   | 0   1   1   0   |  Entry Mode Set Cursor Auto-Increment
;     | 0   | 0   0   0   0   | 0   0   0   1   |  LCD Inhalt löschen und Cursor auf Home
;     | 0   | 0   0   0   0   | 1   1   0   0   |  Display ein, Cursor aus, Blinken aus

_Init_LCD:
mov r1, r18                                     ;Registerinhalte sichern
mov r3, r21
mov r6, r22
mov r7, r23
mov r8, r24
mov r9, r28
                   rcall LCD_Delay_5ms     ; 5ms LCD-Verarbeitungspause einplanen
                   rcall LCD_Delay_5ms     ; 5ms LCD-Verarbeitungspause einplanen
                   rcall LCD_Delay_5ms     ; 5ms LCD-Verarbeitungspause einplanen
                   rcall LCD_Delay_5ms     ; 5ms LCD-Verarbeitungspause einplanen
                   sbi   DDRC, 0           ; PC3 (D3/D7) als Ausgang konfigurieren
                   sbi   DDRC, 1           ; PC2 (D2/D6) als Ausgang konfigurieren
                   sbi   DDRC, 2           ; PC1 (D1/D5) als Ausgang konfigurieren
                   sbi   DDRC, 3           ; PC0 (D0/D4) als Ausgang konfigurieren
                   sbi   DDRD, 6           ; PD4 (E) als Ausgang konfigurieren
                   sbi   DDRD, 7           ; PD5 (RS) als Ausgang konfigurieren
                   ldi   r24, &B00100100   ; 4 Bit-Datenlänge, extension Bit
                   rcall _Lcd_control
                   ldi   r24, &B00001001   ; 4 Zeilen Modus
                   rcall _Lcd_control
                   ldi   r24, &B00100000   ; 4 Bit-Datenlänge, extension Bit RE=0
                   rcall _Lcd_control
                   ldi   r24, &B00000110   ; Entry Mode Set Cursor Auto-Increment
                   rcall _Lcd_control
                   ldi   r24, &B00001100   ; Display ein, Cursor aus, Blinken aus
                   rcall _Lcd_control
mov r18, r1                                    ;alte Registerinhalte wieder zurück
mov r21, r3
mov r22, r6
mov r23, r7
mov r24, r8
mov r28, r9
[END]

;----------------------------------------------------------
[_Write_lcd]
;----------------------------------------------------------
_Write_lcd:
mov r1, r18                               ;Registerinhalte sichern
mov r3, r21
mov r6, r22
mov r7, r23
mov r8, r24
mov r9, r28
                   sbi   PortD, 7          ; RS High für Datenübertragung
                   rjmp  _Write_lcd_Byte   ; weiter zur Datenübertragung
_Lcd_control:
                   cbi   PortD, 7          ; RS Low für Befehlsübertragung
_Write_lcd_Byte:
                   ldi r18, 8                   ;Für Schleife 8 x
loop:              mov r23, R24                 ;Zu übertragendes Byte wird in R24 bereitgestellt und in R23 für                                                       Bitmanipulation
                   andi  r28, &B00000001        ;nur LSB wird ausgewertet
                   ror r24                      ;R24 wird nach rechts verschoben
                   rol r22                      ;R22 wird nach links verschoben
                   or   r22,  r28               ;R22 und R28 in Register R25 vereinen
                   Dec r18                      ;-1
                   Brne loop                    ;springe zu Schleife wenn R18 > 0
                   mov   r24, r22		         ;R22 wird in R24 bereitgestellt
                   swap  r24			      ;Nibble tauschen die Daten stehen jetzt gespiegelt an PC0 - PC3!!
                   mov   r22, r24          ; Zu übertragendes Byte wird in R24 bereitgestellt und in R22 für die                                                       ;Übertragung des 2. Nibble gesichert
                                           ; H i g h  Nibble muss zuerst übertragen werden
                   swap  R24               ; Nibble tauschen
                   andi  R24, &B00001111   ; nur die unteren 4 Bit (unteres Nibble) berücksichtigen, obere 4 Bit                                                                 (oberes Nibble) auf Null setzen
                   in    R21, PinC         ; PortC in Register R21 einlesen (wegen PC7, PC6, PC5, PC4) diese sollen                                               ; ja nicht überschrieben werden
                   andi  R21, &B11110000   ; nur die oberen 4 Bit (PC7, PC6, PC5, PC4) berücksichtigen, untere 4 Bit                                                      ; (PC3, PC2, PC1, PC0) auf Null setzen
                   or    R24, R21          ; PortC (PC7, PC6, PC5, PC4) mit LCD (PC3, PC2, PC1, PC0) in Register R24                                               ; vereinen
                   out   PortC, R24        ; PortC aus Register R24 setzen
                   rcall LCD_Write_Enable  ; Übertragungsaktivierung
                                           ; L o w  Nibble muss noch übertragen werden
                   andi  R22, &B00001111   ; nur die unteren 4 Bit (unteres Nibble) berücksichtigen, obere 4 Bit                                                ; (oberes Nibble) auf Null setzen
                   or    R22, R21          ; PortC (PC7, PC6, PC5, PC4) mit LCD (PC3, PC2, PC1, PC0) in Register R22                                               ; vereinen
                   out   PortC, R22        ; PortC aus Register R22 setzen
                   rcall LCD_Write_Enable  ; Übertragungsaktivierung
                   rcall LCD_Delay_50us    ; 50us LCD-Verarbeitungspause einplanen
                   ret

LCD_Write_Enable:
                   sbi   PortD, 6          ; E High Übertragungsaktivierung gestartet
                   nop                     ; 3 Taktzyklen warten
                   nop
                   nop
                   cbi   PortD, 6          ; E Low Übertragungsaktivierung beendet
                   ret                     ; Funktionsende

LCD_Delay_5ms:
                   ldi   R24, 255          ; R24 Register mit Delaywert 100 * 50us vorbelegen
LCD_Delay_5ms2:
                   rcall LCD_Delay_50us    ; 50us Pause
                   dec   R24               ; R24 Registerinhalt um 1 runterzählen
                   brne  LCD_Delay_5ms2    ; Springe bei ungleich zurück zu LCD_Delay_5ms2
                   ret                     ; Funktionsende

LCD_Delay_50us:
                   ldi   R22, 165          ; R22 Register mit Delaywert vorbelegen
LCD_Delay_50us2:
                   dec   R22               ; R22 Registerinhalt um 1 runterzählen
                   brne  LCD_Delay_50us2   ; Springe bei ungleich zurück zu LCD_Delay_50us2
                   ret                     ; 1 Takt (Befehlszyklus)                                          
mov r18, r1                          ;alte Registerinhalte wieder zurück
mov r21, r3
mov r22, r6
mov r23, r7
mov r24, r8
mov r28, r9
[END]

;----------------------------------------------------------
[_CLS]
;----------------------------------------------------------
_Cls:
mov r1, r18                                     ;Registerinhalte sichern
mov r3, r21
mov r6, r22
mov r7, r23
mov r8, r24
mov r9, r2
                   ldi   R24, &B00000001   ; LCD Inhalt löschen und Cursor auf Home
                   rcall _Lcd_control      ; Befehl an LCD senden
                   rcall LCD_Delay_5ms     ; 5ms LCD-Verarbeitungspause einplanen
                   ret
mov r18, r1                                 ;alte Registerinhalte wieder zurück
mov r21, r3
mov r22, r6
mov r23, r7
mov r24, r8
mov r28, r9
[END]
Die Anschlußbelegung steht in der Libary mit drin.

Gruss

Ronny Schmiedel
http://www.ronny-net.de