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:
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));
und statt dessen in die IRQ-Routine nur folgendes schreiben:
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;
Lesezeichen