Also, ich würde das mal so probieren:

$regfile = "m8def.dat"
$crystal = 3686400

Ddrd = &B00000001
Portd = &B00010000

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

Dim ___lcdno As Bit


___lcdno = 0
Initlcd
Cls
Locate 1 , 1
Lcd "Das ist ein Test"
Cursor Off


Do

Debounce Pind.4 , 0 , Programm , Sub

Loop



Programm:

Toggle Portd.0

___lcdno = 0
Locate 1 , 1
Lcd "Programm"

Wait 2

return

End

Der DEBOUNCE befehl ist eine Art GOSUB, die sollte dann vor dem END-Programm stehen.
Eine SUB-Routine steht normalerweise nach dem END und wir mit Declare Sub IRGENDWAS(), declariert und mit CALL IRGENDWAS() aufgerufen.

Gruß CR