-
Hallo,
in der Interruptroutiene setze ich ein Flag a=1 richtig
wo setze ich den Flag zurück? a=0
ist mein Bz richtig?
Bz:
Do
'mein Programm
'wait 1
dahin;
'dein programm
If a=1 then
goto
dahin
loop
end
int1: 'interrupt
pinb.1 =0
If pinb.1 = 1 then
a=1
else
a=0
end if
wigbert
-
In der Schleife direkt nach der Abfrage If a=1 die Variable zurücksetzen
Do
'mein Programm
'wait 1
dahin;
'dein programm
If a=1 then
a=0 'variable zurück setzen
goto
dahin
loop
end
(ob die syntax stimmt kann ich Dir leider nicht sagen, aber das Prinzip sollte so funktionieren)
-
Dank Dir Falerion,
jetzt muss aber die Hauptschleife sich bis zur Flagabfrage
durcharbeiten,oder geht das noch anders.
Wigbert
-
Ja, das muss Sie allerdings.
Ich weiß ja nicht, wie Deine Hauptschleife aufgebaut ist, aber evtl. kannst Du die Abfrage ja an mehreren Stellen einfügen.
Vielleicht am besten eine Funktion schreiben, die das prüft und dann gegebenenfalls das goto ausführt. Und diese dann in der Hauptschleife aufrufen. Du mußt abwägen zwischen der Häufigkeit der Prüfung auf das Flag und den anderen Aufgaben, welche Deine Hauptschleife erfüllt.
Was soll nach dem Interupt den ausgeführt werden? Kann man das nicht evtl. auch in eine Funktion packen und somit auf das goto evtl. ganz verzichten?
Falerion
-
Ich hab mal eine rein Flag gesteuerte Hauptroutine in Assembler gebastelt.
Die Hauptroutine bestand nur aus Abfragen, ob bestimmte Flags gesetzt waren und CALL Sprüngen für die entsprechende Verarbeitung.
Die Hauptroutine wird somit sehr schnell durchlaufen und die Subroutinen nur bei Bedarf angesprungen. Die Hauptroutine wird dadurch auch sehr übersichtlich.
Der Vorteil ist auch, das man die Subroutinen anpassen kann ohne die Hauptroutine zu verändern.
-
Hallo,
wkrug +falerion dank Euch.
Es ging mir genenrell um Sprung bzw Flag,
da ich das noch nie gemacht habe.
Wigbert