Hi,
bei mir läuft das so hier ohne Probleme:
Code:
$regfile = "m8def.dat"                                      'Mega8
$crystal = 8000000
Declare Sub Lcdinit
Declare Sub Lcdwrite(byval Zeichen As Byte)
Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.2 , Rs = Portd.3
Config Lcd = 20 * 4a
Waitms 100 'damit das LCD etwas Zeit bekommt um nach dem Einschalten empfangsbereit zu sein...
Call Lcdinit
Cls

do
.....
loop

Sub Lcdinit
     Call Lcdwrite(&B00101100)
     Call Lcdwrite(&B00001001)
     Call Lcdwrite(&B00101000)
     Call Lcdwrite(&B00000110)
     Call Lcdwrite(&B00001100)
   End Sub


   Sub Lcdwrite(byval Zeichen As Byte)
     ' Höherwertiges Nibble setzen
     If Zeichen.4 = 1 Then Portd.4 = 1 Else Portd.4 = 0
     If Zeichen.5 = 1 Then Portd.5 = 1 Else Portd.5 = 0
     If Zeichen.6 = 1 Then Portd.6 = 1 Else Portd.6 = 0
     If Zeichen.7 = 1 Then Portd.7 = 1 Else Portd.7 = 0
     ' Höherwertiges Nibble übertragen
     Portd.2 = 1
     Waitms 1
     Portd.2 = 0
     Waitms 1
     ' Niederwertiges Nibble setzen
     If Zeichen.0 = 1 Then Portd.4 = 1 Else Portd.4 = 0
     If Zeichen.1 = 1 Then Portd.5 = 1 Else Portd.5 = 0
     If Zeichen.2 = 1 Then Portd.6 = 1 Else Portd.6 = 0
     If Zeichen.3 = 1 Then Portd.7 = 1 Else Portd.7 = 0
     ' Niederwertiges Nibble übertragen
     Portd.2 = 1
     Waitms 1
     Portd.2 = 0
     Waitms 1
   End Sub