mikrocontroller.net

Forum: PC-Programmierung interrupts in bascom


Autor: Zi Ppo (zippo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: El Jefe (bastihh)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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:
Declare Sub Unterprogramm

Do                                                        
Gosub Unterprogramm
Loop

Sub Unterprogramm:
'dein Code bzw. Programmteil
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:
Do
Debounce Pind.2 , 0 , InterruptSub, Sub 
Loop

InterruptSub:
'Dein Code bei betätigtem Taster
return

Zur erklärung:
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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>>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...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.