Das sollte eine Lösung sein:
Code:$crystal = 1000000 Disable Interrupts $regfile = "m16def.dat" 'Atmega 16 $hwstack = 40 $swstack = 40 $framesize = 60 Config Portd.4 = Output 'Ausgang Config Pind.5 = Input 'Taste 1 Config Pind.6 = Input 'Taste 2 Config Pind.7 = Input 'Zündung Ausgang Alias Portd.4 Taste1 Alias Pind.5 Taste2 Alias Pind.6 Zundung Alias Pind.7 Portd.5 = 1 'Pullups, sodass Taster nur auf GND ziehen brauchen Portd.6 = 1 Portd.7 = 0 'Zündung per Pulldown auf GND ziehen und mittel Optokoppler auf High, wenn Zündung an Dim Code As Byte Dim Tickcount As Long 'Lauzeit in 10 mSek Schritten Config Timer0 = Timer , Prescale = 64 '1 mhz On Timer0 Timer_irq Const Timervorgabe = 100 '1 mhz Enable Timer0 Enable Interrupts Do If Zundung = 0 Then Code = 0 Tickcount = 0 Else If Tickcount < 500 Then '5 Sekunden If Code = 0 And Taste1 = 0 And Taste2 = 1 Then Code = 1 'Taste 1 gedrückt If Code = 0 And Taste1 = 1 And Taste2 = 0 Then Tickcount = 500 'falscher Code If Code = 1 And Taste1 = 1 And Taste2 = 1 Then Code = 2 'keine Taste gedrückt If Code = 2 And Taste1 = 1 And Taste2 = 0 Then Code = 3 'Taste 2 gedrückt If Code = 2 And Taste1 = 0 And Taste2 = 1 Then Tickcount = 500 'falscher Code If Code = 3 And Taste1 = 1 And Taste2 = 1 Then Code = 4 'keine Taste gedrückt If Code = 4 And Taste1 = 1 And Taste2 = 0 Then Code = 5 'Taste 2 gedrückt If Code = 4 And Taste1 = 0 And Taste2 = 1 Then Tickcount = 500 'falscher Code If Code = 5 And Taste1 = 1 And Taste2 = 1 Then Code = 6 'keine Taste gedrückt End If End If If Zundung = 0 Or Code = 6 Then Set Ausgang Else Reset Ausgang End If Loop End Timer_irq: Timer0 = Timervorgabe Tickcount = Tickcount + 1 If Tickcount = 2147483647 Then Tickcount = 0 'sollte es eigentlich nie zu kommen Return







Zitieren

Lesezeichen