$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
Gast
#1504089
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
Gast
#1504092
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
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.