Ich empfehle, die A u B Signal auf einen Wert zusammenzufassen, dann ist die Auswertung weniger verwirrend
z.B:
Code:
while (1)
{
     newstate = 0;
     if   (PIND & IO_PD6)    newstate |= 2;     // A ist 0/1
     if   (PINC & IO_PC2)    newstate |= 1;     // B ist 0/1
    if    (newstate  == laststate)  
            continue;
//   jetzt enthält newstate die werte 0 , 1, 3, 2 
     switch (newstate)
     {
      case 0:
            if (laststate == 2)      "rechts"
            else                          "links"
            break;
      case 1:
            if (laststate == 0)      "rechts"
            else                          "links"
            break;
      case 3:
            if (laststate == 1)      "rechts"
            else                          "links"
            break;
      case 2:
            if (laststate == 3)      "rechts"
            else                          "links"
            break;
     }     
     laststate = newstate;
}
Links u. rechst muss man ev. je nach polarität auswechseln