$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
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.