-
-
Erfahrener Benutzer
Robotik Einstein
Hallo Hans-Jakob,
wenn Du in Assembler programmierst, dann kannst Du Dir mal meine Assemblerbeispiele unter http://www.domnick-elektronik.de/picasm.htm bei 'EntprTast1' in der 'Isr_TMR2' anschauen.
Die Philosophie ist folgende:
Jede Millisekunde wird per Timer-Interrupt eine ISR aufgerufen. Die wird natürlich so kurz wie möglich gehalten und nur das erledigt, was zeitkritisch ist.
Das Abfragen eines Tasters ist so eine zeitkritische Sache. Immerhin benötigt man 30...80ms Entprellzeit. Bei mir wird das meistens so geregelt, daß bei Taster = aktiv eine Zählervariable jede Millisekunde incrementiert wird, bis sie eben 30...80 erreicht. Dann setze ich ein Flag / Bit und inkrementiere nicht weiter. Ist der Taster inaktiv, wird die Zählvariable bis auf Null dekrementiert und das Flag wieder gelöscht.
Wenn der Taster stark prellt, wird der Zähler rauf ... runter ... rauf ... zählen, bis der Taster nur noch aktiv bleibt und dann bis 30...80 hochgezählt werden kann.
Du benötigst für jeden Taster eine Zählvariable und ein Bit / Flag.
In der Haupschleife kannst Du dann hin und wieder mal nachschauen, ob ein Flag gesetzt ist und dann verzweigen.
Entgehen kann nichts, weil die Taster im Interrupt abgefragt werden. Das ist wie eine Garantie (wenn Du auch aus der ISR wieder raus gehst).
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- Anhänge hochladen: Nein
- Beiträge bearbeiten: Nein
-
Foren-Regeln
Lesezeichen