Hallo zusammen Ich befasse mich gerade mit der Interruptprogrammierung in Bascom. Dazu möchte in Abhängigkeit von einer Tasterstellung einen Interrupt auslösen; ist der Taster gedrückt, soll ein Interrupt eine LED ein- bzw. ausschalten (je nach vorigem Zustand); falls nicht -> dann nicht. Was jedoch leider tatsächlich passiert, ist, dass die LED dauerhaft blinkt, und zwar sehr schnell. Der Interrupt wird dauerhaft aufgerufen. Eine Änderung der Tasterstellung bewirkt keine Änderung. Das Programmlisting: =========================== $regfile = "m8def.dat" $crystal = 3686400 Config Pinb.0 = Input Taster Alias Pinb.0 Config Pinc.0 = Output Led Alias Portc.0 Const True = 1 Const False = 0 Led = False Enable Int0 Enable Interrupts Do If Taster = False Then On Int0 Int0_isr End If Loop Int0_isr: Toggle Led Return End ============================ Ich hoffe jemand kann mir helfen Gruß Gerrit
Ja, Pullups hab ich Ich befürchte, dass ich die Schreibweise für die Interrupts falsch verstanden habe. Kann es eventuell sein, dass man die Interrupt-Service-Routine gar nicht im Hauptprogramm aufrufen kann, habe nämlich im Netz dazu kein Beispiel gefunden. Obwohl ich mir dass gar nicht vorstellen kann. Schließlich sollen doch auch externe Ereignisse zu einem Interrupt führen können, nicht nur interne (wie z.B. Timeroverflow). So ein scheinbar einfaches Problem und trotzdem fällt mir schon nichts mehr ein...
Ich denke der Ansatz ist falsch. Ich würde das so machen: Interrupt erlauben in der ISR als erstes den Taster abfragen Taste gedrückt => irgendwas machen Taste nicht gedrückt => Rücksprung ins Hauptprogramm Gruß Reinhard
Hallo, probiers mal so: ..... Enable Int0 Enable Interrupts Do If Taster = False Then On Int0 Int0_isr End If if Taster = true Then on Int0 Int1_isr end if Loop Int0_isr: Toggle Led Return int1_isr: return ......
Nein! Falsch wo steht denn Bitteschön die bezeichnung des Sprungs zum Interrup! Woher soll der denn wissen wie du das Label für den Interupt bezeichnet! Das geht so: ..... config INT0 = low level (oder wobei der interrupt starten soll) On INT0 int1_isr Enable INT0 Enable Interrupts Do If Taster = False Then On Int0 Int0_isr End If if Taster = true Then on Int0 Int1_isr end if Loop Int0_isr: Toggle Led Return int1_isr: return
Wie wäre es mit: If Taster = False Then enable Int0 else disable int0 End If Funktioniert so natürlich nicht, aber den rest findest du auch selbst zusammen.
Das ist ja furchtbar programmiert. Schon mal was von enable/disable Int0 gehört? Und lass den Unsinn mit true und false weg. Außerdem reicht eine If then.. If ... then .... else .... end if
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.