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;