Jipppiiii es geht!!!
Allerdings muss man den Zähler bisschen weiter hinter setzen, das konntest du aber nicht wissen, da die Drehung bis zum distance=0 geht...
Desweiteren muss man return 0 weglassen, da ja sonst die while-Schleife wieder von vorne beginnt. Also fügt man ein MotorDir(BREAK,BREAK) ein und ASURO bleibt genau nach einem Quadrat stehen.

Hier nochmal mein fertiger Code...
Code:
#include "asuro.h"
//Schwellwert für die Hell/Dunkel-Unterscheidung
//Eventuell muss damit etwas variiert werden
#define TRIGGERLEVEL 680
#define HYSTERESIS 30
#define LOW 0
#define HIGH 1


int main(void)
{
   unsigned int data [2];
   signed int status [2]={0,0};
   unsigned int speed=255;
   //Startwert für halbe Motorgeschwindigkeit
   signed int difference=0;
   unsigned int distance=0;
   int i;
   int zaehler=0;
   
   Init();
   MotorDir(FWD,FWD);
   BackLED(OFF,OFF);
   
   while (zaehler<4)
   {
         
      switch(distance) {
         
         //Am Anfang der Strecke Vollgas
         case 0:MotorDir(FWD,FWD);
         MotorSpeed(speed,speed);
         break;
         //Am Ende langsamer werden...
         case 215:speed=200;
         break;
         case 230:speed=150;
         break;
         //...und stehen bleiben
         case 251:MotorDir(BREAK,BREAK);
            //etwas warten, bis der Roboter wirklich steht
            for (i=0; i<100; i++)
            {
            Sleep(255); }
            //auf der Stelle nach links drehen
            MotorDir(RWD,FWD);
            speed=255;
            //und noch vermeiden, dass die Verzögerung
            //mehrmals aufgerufen wird
            distance=252;
          
break;
         case 282: speed=200;
         break;
         case 288: speed=150;
         break;
         case 292: MotorDir(BREAK,BREAK);
            for (i=0; i<100; i++)
            {
            Sleep(255); }
           
            MotorDir(FWD,FWD);
            speed=255;
            distance=0;
            //und noch vermeiden, dass die Verzögerung
            //mehrmals aufgerufen wird
           zaehler++; 
            break;
            }
                                 
               
         //Helligkeitswerte der Lichtschranken auslesen
         OdometrieData(data);
     
         //Wechsel linker Sensor von niedrig auf hoch?
         if((status[0]==LOW)&&(data[0]>TRIGGERLEVEL+HYSTERESIS)) {
            status[0]=HIGH;
            difference++;
            distance++; }
         //Wechsel linker Sensor von hoch auf niedrig?
         if((status[0]==HIGH)&&(data[0]<TRIGGERLEVEL-HYSTERESIS)) {
            status[0]=LOW;
            difference++;
            distance++; }
         
         //Wechsel rechter Sensor von niedrig auf hoch?
         if((status[1]==LOW)&&(data[1]>TRIGGERLEVEL+HYSTERESIS)) {
            status[1]=HIGH;
            difference--; }
         
         //Wechsel rechter Sensor von hoch auf niedrig?
         if((status[1]==HIGH)&&(data[1]<TRIGGERLEVEL-HYSTERESIS)) {
            status[1]=LOW;
            difference--; }
         
         
         //zur Sicherheit: verhindern, dass der Differenzzähler den erlaubten
         //Wertebereich verlässt
         if(difference<-155) difference=-155;
         if(difference>155) difference=155;
         
         //StatusLED noch entsprechend der erkannten Segmente aufleuchten
         //lassen, grün für links, rot für rechts
         StatusLED(status[0]+status[1]*2);
     
         //Zähldifferenz passemd auf die Motoren verteilen
         if(difference>0) MotorSpeed(155-difference,155);
         else MotorSpeed(155,155+difference);
         
      }
   
   MotorDir(BREAK,BREAK);
}