PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Interrupt benutzen, um Sub zu beenden?



bnitram
18.04.2013, 16:41
Hallo Forum,
ich habe folgendes Problem:
Ich habe einen Taster und 3 verschiedene Programme, die nacheinander über den Taster wählbar sein sollen.
Die jeweiligen Programme besitzen jeweils einen Sub.
Bei mir sieht das jetzt so aus:
Der Taster löst einen Interrupt aus und zählt eine Variable um eins hoch. In der Hauptschleife wird über ein Case-Select der entsprechende Sub angesprochen.
Jetzt ist aber mein Problem das in den Sub(die etwas länger dauern) auch schleifen drin sind. Wie kann ich das machen, das sobald der Interrupt ausgelöst wird, auch den Sub mitten drin abbricht?

Ich würde mich sehr über hilfreiche Antworten freuen.
Mfg
bnitram

Searcher
18.04.2013, 17:39
Ohne Code kann man nicht so leicht antworten. Prinzipiell würde ich in dem Interrupt, der den Abbruch einer Sub auslösen soll, ein Flag setzten. In der Schleife der entsprechenden Sub wird auch immer dieses Flag abgefragt und im Abbruchfall zB mit Goto zum Ende (Return) der Sub gesprungen.

Gruß
Searcher

peterfido
18.04.2013, 19:39
Wozu mit Goto zum Return springen? Einfach gleich ein Return rein.



$regfile = "m88Adef.dat"
$baud = 19200
$crystal = 8000000

Config Watchdog = 512

$hwstack = 160
$swstack = 100
$framesize = 100

Ddrb = &B00011100

Led1 Alias Portb.2
Led2 Alias Portb.3
Led3 Alias Portb.3

Config Int0 = Falling
On Int0 Isr_int0

Dim Bstop As Bit
Dim L As Long
Enable Int0
Enable Interrupts

Do
Gosub Prg1
Waitms 100 'entprellen
Gosub Prg2
Waitms 100 'entprellen
Gosub Prg3
Waitms 100 'entprellen
Loop
End

Prg1:

Reset Bstop
Do
Toggle Led1
For L = 1 To 1000
Waitms 1
If Bstop = 1 Then
Return
End If
Next L
Loop

Return

Prg2:

Reset Bstop
Do
Toggle Led2
For L = 1 To 1000
Waitms 1
If Bstop = 1 Then
Return
End If
Next L
Loop

Return

Prg3:

Reset Bstop
Do
Toggle Led3
For L = 1 To 1000
Waitms 1
If Bstop = 1 Then
Return
End If
Next L
Loop

Return

Isr_int0:
Set Bstop
Return

bnitram
18.04.2013, 19:43
Hallo,
danke für die Antworten.
Ich denke ich werde mal die 2. Möglichkeit testen.
Ich melde mich morgen nochmal.

Mfg
bnitram