Hi gandalfsz,

das Problem ist der Zähler, der nach 512 mal hochzählen die Routine zum Umdrehen einleitet. Außerdem würde ich noch ein paar Sachen anders machen. Schau mal hier und probiere damit weiter. Ist aber ohne Gewähr, da ungetestet:

Code:
#include "asuro.h" 

int main(void) { 

  // zuerst die benötigten Variablen deklarieren... 
  unsigned int i;       // ist in diesem Fall ausreichend und spart ein Byte 
                             // IST ES NATÜRLICH NICHT, DA I WEITER ALS 
                             // BIS 255 LÄUFT - also int ist schon OK 
  unsigned char t1, t2;  //Tastenwerte es ist notwendig mindestens zweimal 
                         //abzufragen, um Störungen zu eleminieren 

  Init ();
  
  // OK, jetzt fahren wir los bis ein Hindernis kommt... 
  MotorSpeed (100,100); 
  MotorDir (FWD,FWD);  

  while(1)
  {   
    // Abfragen, ob wir an ein Hindernis gestoßen sind: 
    t1 = PollSwitch(); 
    t2 = PollSwitch(); // zur Sicherheit    
    if (t1 && t2 && (t1 == t2)) // Taster war beide Male gedrückt und der gleiche Wert kam zurück 
    { 
    	
      // fahre ein Stück zurück 
      StatusLED (RED); 
      MotorDir (RWD,RWD); 
      for (i = 0; i < 282; i++) 
      { 
        Sleep (255); 
      } 
        
      // wenden        
      MotorDir (FWD,RWD); 
      for (i =0;i< 282;i++) 
      { 
        Sleep (255); 
      }    
    } 
  
    // und wieder vorwärts fahren 
    StatusLED (YELLOW); 
    MotorDir (FWD,FWD); 
    
  }// end while(1) 

  return 0; 
}
Viel Spaß,

_HP_