$regfile = "m8def.dat" $crystal = 4000000 Config Timer1 = Timer, Prescale = 64 Config Portc = Output Config Portd.4 = Output Led Alias Portc.0 Led2 Alias Portc.1 Led3 Alias Portc.2 Led4 Alias Portc.3 Led5 Alias Portc.4 Led6 Alias Portc.5 Led7 Alias Portd.4 Dim A As Single Dim B As Single Dim C As Single Config Portd.2 = Input Config Portd.3 = Input On Timer1 Timer_irq Config Int0 = Rising Config Int1 = Rising Const Timervorgabe = 39886 Portd.2 = 1 Portd.3 = 1 Enable Timer1 Enable Interrupts Enable Int0 Enable Int1 On Int0 Isr_von_int0 On Int1 Isr_von_int1 Do If B = 1 Then Gosub Sub1 End If If B = 2 Then B = 0 End If Loop Sub1: If A = 2 Then Toggle Led Toggle Led2 Toggle Led3 Toggle Led4 Led7 = 0 A = 0 End If If A = 0 Then Led7 = 1 End If Return Timer_irq: Timer1 = Timervorgabe Incr A Return Isr_von_int0: Incr B Return Isr_von_int1: Incr C Return Irgendwie hab ich nen Brett vorm Kopf Atmega 8 4 MHZ intern
:
Verschoben durch User
ich drück auf den Taster der an INT0 hängt und nix passiert setz ich B von anfang an auf 1 geht alles andere
Liegt u.a. möglicherweise daran, dass in der ISR von INT0 B gewaltig schnell hochgezählt wird (Taster prellt). D.h. es kann durchaus bzw. ziemlich sicher passieren, dass B in der Do-Loop-Schleife grösser als 2 ist.
Dim A As Bit Dim S As Bit Isr_von_int0: Toggle A Return Isr_von_int1: Toggle S Return
Wäre eine Möglichkeit. Alternativ natürlich auch If B >= 2 Then. Oder: Isr_von_int0: If B < 2 Then Incr B Return
$regfile = "m8def.dat" $crystal = 4000000 Config Timer1 = Timer, Prescale = 64 Config Portc = Output Config Portd.4 = Output Led Alias Portc.0 Led2 Alias Portc.1 Led3 Alias Portc.2 Led4 Alias Portc.3 Led5 Alias Portc.4 Led6 Alias Portc.5 Led7 Alias Portd.4 Dim A As Single Dim B As Bit Dim C As Single Config Portd.2 = Input Config Portd.3 = Input On Timer1 Timer_irq Config Int0 = Rising Config Int1 = Rising Const Timervorgabe = 39886 Portd.2 = 1 Portd.3 = 1 Enable Timer1 Enable Interrupts Enable Int0 Enable Int1 On Int0 Isr_von_int0 On Int1 Isr_von_int1 Do If B = 0 Then Gosub Sub1 End If If B = 1 Then Gosub Sub2 End If Loop Sub1: If A = 2 Then Toggle Led Toggle Led2 Toggle Led3 Toggle Led4 Led7 = 0 A = 0 End If If A = 0 Then Led7 = 1 End If Return Sub2: Led = 0 Led7 = 0 Led3 = 0 Led2 = 0 Led4 = 0 Led5 = 0 Led6 = 0 Return Timer_irq: Timer1 = Timervorgabe Incr A Return Isr_von_int0: If B = 1 Then Reset B Else Set B End If Return Isr_von_int1: If C = 1 Then Reset C Else Set C End If Return So funzt es un nu noch INT1
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.