$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
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Dim A As Single
Dim B As Bit
Dim C As Bit
Dim B1 As Bit
Dim C1 As Bit
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
Elseif C = 0 Then
Gosub Sub3
Else
Gosub Sub4
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
Sub3:
If A = 2 Then
Toggle Led
Toggle Led4
Toggle Led6
A = 0
End If
If A = 0 Then
Led7 = 1
End If
Return
Sub4:
If A = 2 Then
Toggle Led
Toggle Led4
Toggle Led7
A = 0
End If
If A = 0 Then
Led7 = 1
End If
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
Hab momentan das Problem das sich 2 Schleifen überlagern und komm nicht
auf die Lösung. Ich hoffe ihr könnt helfen
Hi Soviel wie ich von Basic verstehe, sehe ich nur eine Schleife, do -- Loop. Könnt es sein, das ein Elseif else If heißt? Gruß oldmax
Hi
Hab nochmal drübergeschaut. Vermutlich meinst du, das die ISR_Int0 die
Variable B und ISR_Int1 C die VAriable C beackert. In der Hauptschleife
kommt dann das besagte Elseif. Auch wenn Elseif richtig bearbeitet wird,
ist Cvon B abhängig, d. H. Ist B=0 ist der Wert in C uninteressant. Du
mußt "Nur" die Variable B bearbeiten (setzen oder löschen) und C in Ruhe
lassen. Dann genügt ein Else.
Willst du sowas wie ein Puls-Pausenverhältnis, mußt du einen
Flankenmerker und zwei Variablen zum Zählen haben. Dann in der ISR in
Abhängigkeit der Flanke die Zähler bearbeiten. Der Flankenmerker wird in
der Loop statt B eingesetzt.
Angenommen, B und C sind Integer, dann setzt du einen Flankenmerker und
die Zählvariablen vor der Hauptschleife auf die Werte.
FM=0
B=200
C=150
dann die ISR
ISR_Int0
If FM = 1 then
Dec B
if B=0 then
C=150
FM=0
endIf
endif
If FM=0 then
Dec C
If C=0 then
B=200
FM=1
endIf
endIf
Return ' return von ISR ! Ich kenn den Syntax nicht
Gruß oldmax
$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
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Dim Fm As Single
Dim A As Single
Dim B As Single
Dim C As Bit
Dim D As Bit
Dim C1 As Bit
Config Portd.2 = Input
Config Portd.3 = Input
On Timer1 Timer_irq
Config Int0 = Rising
Config Int1 = Rising
B = 350
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 = 100 Then
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Toggle Led
Toggle Led2
Toggle Led3
Toggle Led4
Led7 = 0
A = 0
End If
If B = 200 Then
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
End If
If B = 350 Then
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Toggle Led
Toggle Led4
Toggle Led6
End If
If B = 400 Then
Led = 0
Led7 = 0
Led3 = 0
Led2 = 0
Led4 = 0
Led5 = 0
Led6 = 0
Toggle Led
Toggle Led4
Toggle Led7
End If
Loop
Timer_irq:
Timer1 = Timervorgabe
Incr A
Return
Isr_von_int0:
If C = 0 Then
Set C
Else
Reset C
End If
If C = 0 Then
B = 400
Else
B = 350
End If
Return
Isr_von_int1:
If D = 0 Then
Set D
Else
Reset D
End If
If D = 0 Then
B = 200
Else
B = 100
End If
Return
So gehts nu nur noch die LEDs richtig zu ordnen und mit Case arbeiten
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.