Hallo,

ich verzeifele fast an meinem LCD. Ich hab hier mal einen kleinen Teil meines Programms geposted. Darin soll momentan nichts anderes passieren, als dass wenn ich einen Taster drücke (von H zu L), die Subroutine aufgerufen werden soll und etwas anderes ins Display geschrieben wird.
Macht es aber nicht. Der Zustandswechsel an Portd.0 funktioniert, aber mit dem Display passiert nichts. Warum?
Komischerweise funktioniert es, wenn ich das ganze als Interrupt programmiere.

Code:
$regfile = "m8def.dat"
$crystal = 3686400                                          'Quarz: 3,6864 MHz

Ddrc = &B00000000
Ddrd = &B00000001                                           'Int0 als Eingang konfiguriert - Programmiertaste
Portc = &B00001111
Portd.4 = 1                                                 'Pull-Up von Int0 an
Portd.3 = 1                                                 'Pull-Up von PD3 an

Config Scl = Portc.5                                        'SCL-Port auf Port C.5
Config Sda = Portc.4                                        'SDA-Port auf Port C.4


Config Lcd = 40 * 4                                         'Anzeigemodus 40 x 4 Zeichen
Config Lcdpin = Pin , Db4 = Portd.5 , Db5 = Portd.6 , Db6 = Portd.7 , Db7 = Portb.0 , E = Portb.1 , E2 = Portb.2 , Rs = Portb.3


Declare Sub Temperaturen                                    'Sub für Programmierung in zweiter Ebene
Declare Sub Schaltzeiten                                    'Sub für Programmierung in zweiter Ebene
Declare Sub Prog_auswahl                                    'Sub für Programmier-Auswahl
Declare Sub Wert_hoch                                       'Sub Temperatur hochzählen
Declare Sub Wert_runter                                     'Sub Temperatur runterzählen
Declare Sub Speichern                                       'Werte speichern
Declare Sub Pfeil_rechts                                    'Auswahl für Programmiermodus Pfeil nach rechts
Declare Sub Pfeil_links                                     'Auswahl für Programmiermodus Pfeil nach links
Declare Sub Programm


Dim ___lcdno As Bit                                         'Umschaltbyte für Anzeige 0=Chip 1; 1=Chip 2
Dim W_adr_1 As Byte                                         'Schreibadresse vom PCF8574(1)
Dim R_adr_1 As Byte                                         'Leseadresse vom PCF8574(1)
Dim Dat_1 As Byte                                           'Datenwerte vom PCF8574(1)
Dim W_adr_2 As Byte                                         'Schreibadresse vom PCF8574(2)
Dim R_adr_2 As Byte                                         'Leseadresse vom PCF8574(2)
Dim W_adr_3 As Byte                                         'Schreibadresse vom PCF8591(1)
Dim R_adr_3 As Byte                                         'Leseadresse vom PCF8591(1)
Dim T_boiler As Byte                                        'Temperatur vom Boiler
Dim T_puffer As Byte                                        'Temperatur vom Puffer


'******************** LCD initialisieren 
___lcdno = 0                                                'auf Chip 1 schalten
Initlcd                                                     'die beiden oberen Zeilen initialisieren
Cls
Locate 1 , 1
Lcd "Ausen Vorlauf Boiler Puffer"                           'Beschriftung der ersten Zeile
Cursor Off





Do

   ___lcdno = 0                                             'auf Chip 1 schalten
   Locate 2 , 1
      Lcd "Test Test Test"

   Debounce Pind.4 , 0 , Programm , Sub

Loop



'******************** Programm 
Sub Programm

Portd.0 = Not Portd.0

   ___lcdno = 0                                                'auf Chip 1 schalten
Initlcd                                                     'die beiden oberen Zeilen initialisieren
Cls
Locate 1 , 1
Lcd "Programm"                                              'Beschriftung der ersten Zeile
Waitms 200

End Sub

End
Wäre super, wenn mir da jemand einen Tip geben kann.

Grüße
Enrico