Forum: Mikrocontroller und Digitale Elektronik Multitask ???


von Sven (Gast)


Lesenswert?

Hallo an alle,

Hab da mal ne Frage an euch,
in einer do Routine frage ich Portpins ab,
wird jetzt eine Taste gedrückt springt das programm in eine 
unterroutine...
meine Frage ist jetzt, wie kann ich in die unterroutine springen und 
sofort wieder in die Portpinabfrage, ohne das die auszuführende 
unterroutine abgebrochen wird ?????


P.S. Programmiere mit bascom AVR


Vielen Dank schon mal

von Günther (Gast)


Lesenswert?

wenn die tastenabfrage im hauptprogramm erfolgt, kann der nächste 
tastendruck erst wieder nach rücksprung aus der unterroutine erkannt 
werden. dauert diese länger als die zeit bis zum nächsten tastendruck, 
so geht dieser verloren. die echtzeitbedingung ist nicht erfüllt.
ein ausweg könnte sein, mit dem tastendruck einen interrupt zu erzeugen 
und im interruptprogramm nur das ereignis "taste gedrückt" in eine 
warteschlage zu schreiben. das geht sehr schnell und der interrupt ist 
wieder bereit. die aufwendige abarbeitung der warteschlage kann dann das 
hauptprogramm übernehmen.

von Matthias (Gast)


Lesenswert?

hi,

das selbe versuche ich gerade mit einer fensterhebersteuerung unter dem 
thread "starthilfe programmierung". es geht darum ein fenster z.b. acht 
sek. fahren zu lassen und während dieser zeit noch auf andere fenster 
(schalter) reagieren zu können. uwe hat mir da sehr geholfen, code ist 
in den beiträgen enthalten oder angehängt.

gruß,
matthias

von Frankl (Gast)


Lesenswert?

Timertask mit dem Timeroverflow dort werden die Events gesteuert (mit 
Flags)dadurch kannst du die einzelnen Tasks = Abfrage Taste mit 
Prelldelay und das Hauptprogramm "parallel" abarbeiten lassen. Wenn das 
Hauptprogramm auf Zeitevents warten muß, springe übers Hauptprogramm und 
dann die Tastenabfrage mit Prelldelay.

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
Noch kein Account? Hier anmelden.