Hallo
Also hier ist mal meine selbst geschriebene Drehrichtungsauswertung.
Der Code sollte durch die Kommentare selbsterklärend sein.
Für Tipps und/oder Hinweise bin ich dankbar

Code:
////////////////////Richtungszustände
int d1=0;		 int d2=0;		int d3=0;		//Drehgeber 1....3, Vorwärts=1 Rückwärts=0
int encoder1 [4]={0,0,0,0};					//alte und neue Drehgebersignale
int encoder2 [4]={0,0,0,0};					//[0] Spur A neu    [1] Spur B neu
int encoder3 [4]={0,0,0,0};					//[2] Spur B alt    [3] Spur B alt
 
////////////////////////////////////////////////////////////////////////////////////////////////
   ////   MAIN   //////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////

void main(void){
   	Init_Device();								// Initialisierung des Devices

 		while(TRUE){ 

d1=drehrichtungsauswertung (encoder1,d1);	 	// Aufruf der Funktion zum auswerten der Drehrichtung
d2=drehrichtungsauswertung (encoder2,d2);   
d3=drehrichtungsauswertung (encoder3,d3); 
.
.....
........

int drehrichtungsauswertung (int *encoder,int r){

int neu=00;
int alt=00;

encoder[2]	= encoder[0];		//Speichern der alten Encoderzustände
encoder[3]	= encoder[1];

encoder[0]=A1;		  			//Einlesen der neuen Encoderzustände
encoder[1]=B1;	
  	
 if (encoder[0]==0 && encoder[1]==0) neu=00;		//Wandeln des neuen Zustandes in dez. Zahl
 if (encoder[0]==0 && encoder[1]==1) neu=01;
 if (encoder[0]==1 && encoder[1]==0) neu=10;
 if (encoder[0]==1 && encoder[1]==1) neu=11;

 if (encoder[2]==0 && encoder[3]==0) alt=00;		//Wandeln des alten Zustandes in dez. Zahl
 if (encoder[2]==0 && encoder[3]==1) alt=01;
 if (encoder[2]==1 && encoder[3]==0) alt=10;
 if (encoder[2]==1 && encoder[3]==1) alt=11;

	if (alt!=neu )		//Abfrage ob sich die Zustände des Drehgebers überhaupt geändert haben
	{
	    if (alt==00) {												// Welchen "alten" Zustand hatten wir
	     		switch (neu){									
		   			case 01 :{  r=1;  break;} 						//Je nach neuem Zustand vor oder rückwärts	
					case 10: {	r=0;  break;}  } }					//Je nach neuem Zustand vor oder rückwärts

		if (alt==01) {												// Welchen "alten" Zustand hatten wir
			     switch (neu){									
				    case 11 :{  r=1;  break;} 						//Je nach neuem Zustand vor oder rückwärts	
					case 00: {	r=0;  break;}  } }					//Je nach neuem Zustand vor oder rückwärts

		if (alt==10) {												// Welchen "alten" Zustand hatten wir
			     switch (neu){									
				    case 00 :{  r=1;  break;} 						//Je nach neuem Zustand vor oder rückwärts	
					case 11: {	r=0;  break;}  } }					//Je nach neuem Zustand vor oder rückwärts

		if (alt==11) {												// Welchen "alten" Zustand hatten wir
			     switch (neu){									
				    case 10 :{  r=1;  break;} 						//Je nach neuem Zustand vor oder rückwärts	
					case 01: {	r=0;  break;}  } }					//Je nach neuem Zustand vor oder rückwärts

 								//Mögliche Fehler werden nicht abgefragt. Treten diese auf, bleibt die alte Drehrichtung gespeichert
			}					// Klammer der if (alt!=neu ) Schleife

 
 return r;						// Die Drehrichtung wir zurück gegeben (r=1 Vorwärts, r=0 Rückwärts)
}					 			//	Ende Funktion "drehrichtungsauswertung"