Hallo, erst mal die besten Neujahrswünsche an die Roboter-Gemeinde!!!

Ich habe ein kleines problem mit einem Programm:

eine spezielle abfolge von tasterbetätigungen soll einen port ein-und anschließend wieder schalten. Dann neu starten.

(taster1, dann taster2, und während dieser gedrückt gehalten wird nochmal taster1)
wenn die abfolge 2 mal falsch hintereinander erfolgt, dann soll das Programm stoppen.

Eine LED gibt hierüber auskunft.

das problem: das programm funktioniert anfänglich. wenn es aber längere Zeit auf „bereitschaft“ stehen soll (in der ersten do loop schleife), dann verselbständigt es sich. das äußert sich, indem z. B. nach langer Zeit (z.B. 20 stunden oder so) die LED aufleuchtet und das Programm somit gestoppt ist. oder eine richtige eingabe vom programm als falsch quittiert wird.

es scheint, als würde der taster während der (loop)zeit eine (geisterhafte) betätigung erfahren...

nach reset geht wieder alles einwandfrei, bis zur nächsten längeren wartezeit...

was könnte die ursache für dieses phänomen sein?



gruß

Holger

Code:
$regfile = "m32def.dat"

$crystal = 8000000                                          '=interner Quarz, 9000000 für externen Quarz

$baud = 9600

$hwstack = 64
$swstack = 64
$framesize = 64


 Config Portb = Output
 Config Portd.2 = Output                                    'leds
 Config Portd.3 = Output
 Config Portd.4 = Output
 Config Portd.5 = Input
 Config Portd.6 = Input
 Config Porta = Input                                       'taster

  Porta.0 = 1
  Porta.2 = 1

 Dim A As Word
 Dim B As Word


Program:

Portb.1 = 0                                                 'Led
 Do
 Loop Until Pina.0 = 0 Or Pina.2 = 0
 If Pina.2 = 0 Then
 Portb.1 = 1
 Goto Abbruch
 Else
 End If
 Waitms 300
 Do
 Loop Until Pina.0 = 0 Or Pina.2 = 0
 If Pina.0 = 0 Then
 Portb.1 = 1
 Goto Abbruch
 Else
 End If
 Waitms 10

 Do
 Loop Until Pina.0 = 0 Or Pina.2 = 1
 If Pina.2 = 1 Then
 Portb.1 = 1
 Goto Abbruch
 Else
 End If
 Waitms 100

 Portb.0 = 1
 Waitms 1200                                                'relais an
 Portb.0 = 0

 A = 5

Goto Program

 

Abbruch:

Wait A
A = A + 5
If A >= 15 Then
Stop

Else
Goto Program

End If

End