Aber das ist doch gerade der Vorteil von IRQ's. Die werden genau dann ausgeführt, wenn das Ereignis auftritt. In diesem Fall, wenn sich der Eingang ändert. Man verzichtet dann einfach auf die Schleife im Hauptprogramm und prüft in der IRQ-Routine am Start gleich den Status der beiden Spuren und kann damit seine Auswertung machen.
Bei mics erstem Code könnte man dann quasi auf folgendes Verzichten:
und statt dessen in die IRQ-Routine nur folgendes schreiben:Code:while (1) { do // warten bis Bitwechsel erkannt wird { SpurA_akt = SpurA; SpurB_akt = SpurB; if (count > 0) { count--; if (count == 0) { Rechts0; Links0; } } } while ((SpurA_akt == SpurA_old) && (SpurB_akt == SpurB_old));
Code:if (SpurA_akt == SpurA_old) // Bitwechsel war bei Spur B { if (SpurA_akt) { if (SpurB_akt) Links1; else Rechts1; } else { if (SpurB_akt) Rechts1; else Links1; } } else // Bitwechsel war bei Spur A { if (SpurB_akt) { if (SpurA_akt) Rechts1; else Links1; } else { if (SpurA_akt) Links1; else Rechts1; } } SpurA_old = SpurA_akt; SpurB_old = SpurB_akt;







Zitieren

Lesezeichen