Hi, ich hab mal ein paar Dinge im Code angemerkt. Vielleicht bringt das ja was.

Code:
 while(true) //Wiederholen bis Akku leer 
   {       
      taskabfrage();
Die zwei Aufrufe aus der Methode taskabfrage() kannst du auch direkt in die while Schleife packen.

Code:
         case status_fahren: 
            task_motionControl();  
            setLEDs(0b001001); 
            Spann=readADC(ADC_BAT); 
            if (Spann<6.5) {            
               moveAtSpeed(0,0); 
               //blink(); 
            } 
            do            
               task_abfrage(); 
                //Nach ACS und Bumpern und RC5 suchen... (in Master-Abfrage) 
                
            while (move_state==status_fahren);// ...bis sich etwas geändert hat! (das gleiche wie: solange status_fahren) 
            break;
Gibt readADC(ADC_BAT) einen Wert > 6.5 aus?
Der task_motionControl() müsste von dem task_RP6System() aufgerufen werden, welchen du schon am Anfang der while Schleife aufrufst.
Die do-while Schleife kannst du entfernen da du task_abfrage() schon vor der switch-case Schleife aufrufst. Dadurch bleibst du auch nicht in der do-while Schleife gefangen und die Akkuspannung wird weiter überprüft. So lange der move_state == status_fahren bleibt, springt die switch-case Schleife auch immer wieder in den status_fahren Block, es gibt also keinen Grund, den Ablauf in diesem Block festzuhalten so lange der Status status_fahren bleibt.

Grüße,
Jan