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