nabend, ich hätte da mal ne frage zu interrupts unter bascom: ist es normal das der Prozessor das Programm weiter ausführt(wenn auch stak verlangsamt) wenn int0 anliegt? Und auch weiter macht wenn meine Bedingung nicht erfüllt ist! Programm : $regfile = "m8515.dat " $framesize = 24 $swstack = 8 $hwstack = 32 $crystal = 3680000 Config Portd.1 = Input Pind.1 = 1 Ddrb = &B11111111 Portb = &B11111111 Config Int0 = Low Level On Int0 Label1 Enable Interrupts Enable Int0 Do Portb.0 = 0 Waitms 100 Portb.0 = 1 Waitms 100 Loop End Label1: If Pind.1 = 0 Then End If Return wenn ich als Bedingung eine Schleife mit Do Loop until mache funktionert das ganze. kann ich auch an eine bestimmte stelle in meiner "Hauptschleife" springen? und wenn ja wie geht das? gruss
du kannst das ganze als sub deklarieren. Also zB Du deklarierst verschiedene Subs in denen du deine Programmteile hinterlegst und springst dann in der Hauptschleife in die Subs:
1 | Declare Sub Unterprogramm |
2 | |
3 | Do |
4 | Gosub Unterprogramm |
5 | Loop |
6 | |
7 | Sub Unterprogramm: |
8 | 'dein Code bzw. Programmteil |
9 | End Sub |
Mit den Interrupts, versuchs mal mit dem Befehl debounce. Dabei sobald der Taster betätigt wurde, wird die Hauptschleife unterbrochen und springt in den definierten Sub:
1 | Do |
2 | Debounce Pind.2 , 0 , InterruptSub, Sub |
3 | Loop |
4 | |
5 | InterruptSub: |
6 | 'Dein Code bei betätigtem Taster |
7 | return |
Zur erklärung:
1 | Debounce Pind.2 , 0 , InterruptSub, Sub |
In der Hauptschleife wird überprüft welcher Zustand sich am Pind.2 befindet. In den Debounceparameter steht 0, also wird dieser bei eine Low Pegel in die Interruptroutine springen die den Namen "InterruptSub" trägt. Einmal in der Interrupt Routine wird er den dort den Code ausführen und wenn dieser ausgeführt wurde, springt er automatisch zurück zu dem Punkt an der die Hauptschleife unterbrochen wurde. Wie du siehst ist es nicht allzu schwer. Sop und ich geh jetzt auch mal ins Bettchen. Grüße
>ist es normal das der Prozessor das Programm weiter ausführt(wenn auch >stak verlangsamt) wenn int0 anliegt? Wie mir scheint, liegt INT0 konstant an. Das sorgt dafür, dass der Prozessor die Interrupt-Routine bedient, zurück ins Hauptprogramm springt, dort einen Befehlt ausführt und wieder in die Interrupt-Routine springt, weil immer noch das Interrupt-Flag gesetzt ist. >Und auch weiter macht wenn meine Bedingung nicht erfüllt ist! Die Abfrage kostet auch Zeit... >kann ich auch an eine bestimmte stelle in meiner "Hauptschleife" >springen? und wenn ja wie geht das? Geht nicht. PS: Du solltest dir den Text noch mal durchlesen, bevor du ihn abschickst.
Hi >Wie mir scheint, liegt INT0 konstant an. Das sorgt dafür, dass der >Prozessor die Interrupt-Routine bedient, zurück ins Hauptprogramm... Ein externer Interrupt verschieden Modi: Level- und Flankengesteuert. Bei levelgesteuerten Interrupt wird der IR solange immer wieder ausgelöst, solange der Pegel (meist L) anliegt. Flanken gesteuerte IR lösen nur bei ensprechenden Flanke (L-H oder H-L) aus. Weitere Hilfe im Datenblatt. MfG Spess
>>Wie mir scheint, liegt INT0 konstant an. Das sorgt dafür, dass der >>Prozessor die Interrupt-Routine bedient, zurück ins Hauptprogramm... >Ein externer Interrupt verschieden Modi: Level- und Flankengesteuert. >Bei levelgesteuerten Interrupt wird der IR solange immer wieder >ausgelöst, solange der Pegel (meist L) anliegt. >Config Int0 = Low Level ... und ich hab (vorhin) nicht mal richtig ins PRogramm geguckt...
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.