Irgendwas funktioniert noch nicht ganz so, wie es sollte. Das Problem hat vereinfacht folgende Struktur.
Die Hauptschleife ruft eine Sub auf, welche unter Umständen lange dauern kann. Falls alles läuft wie geplant, beendet die innerhalb einer gewissen Zeit und alles geht weiter wie gewohnt.
Sollte es aber länger dauern als erlaubt, dann wird der Timer0 Overflow aufgerufen. Dieser unterscheidet den Zustand des Pins und springt dann an unterschiedliche Sprungadressen.
Mit Flags wäre die einzige mir in den Sinn kommende Möglichkeit, dass ich in der Routine1 immer wieder ein bestimmtes Flag polle und nur dieses in der ISR setze. Aber das finde ich nicht ganz so elegant. Wie löst man ein solches Problem typischerweise?
Code:
'Mainloop
Do
Label1:
{anweisungen}
Label2:
{anweisungen}
{...}
Gosub Routine1
{...}
Loop
Routine1:
For I = 0 To 100
Start Timer0
{ganz Viele Anweisungen}
Next I
Stop Timer0
Return
Isr_ovf0:
If Pinb.1 = 0 Then
Goto Label1
Else
Goto Label2
End If
Return
Lesezeichen