So habe das mit den Tastern verbessert.
Der ganze Code sieht jetzt in etwa so aus:



Code:
#include "asuro.h"
#include <stdlib.h>

unsigned char ir1;

#define PWM_STEP 5 
#define MESSZEIT 500 //ms
#define FULL_L 130
#define FULL_R 130

/* Motor vorwärts */
void MotorFwd(void)
{
  MotorDir(FWD,FWD);
  MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts */
void MotorRwd(void)
{
  MotorDir(RWD,RWD);
  MotorSpeed(FULL_L,FULL_R);
}

/* Motor rückwärts Links */
void MotorRwdL(void)
{
  MotorDir(RWD,RWD);
  MotorSpeed(FULL_L,0);
}

/* Motor rückwärts Rechts */
void MotorRwdR(void)
{
  MotorDir(RWD,RWD);
  MotorSpeed(0, FULL_R);
}

/* Motor stop */
void MotorStop(void)
{
  MotorSpeed(0,0);
}

int main (void)
{

	unsigned int lData[2];
	
	unsigned char sw, speed;
	unsigned char ir;
	int t1, t2;
	int u;
	int Reibung_links;
	int Reibung_rechts;
	unsigned char ir2;
	
	
	Init();
	DDRD |= (1 << DDD1);   // Port D1 als Ausgang
	PORTD &= ~(1 << PD1);   // PD1 auf LOW
	OCR2  = 0xFB;
	speed=130; 
	Encoder_Init();

	for(;;)
    {
		ir=PIND & (1 << PD0); 
		FrontLED(ON);
		LineData(lData);
					
		if (PIND & (1 << PD0))
		{
			if(lData[1] <= 80 && lData[1] >= 10)
			{
				BackLED(ON,ON);
				StatusLED(GREEN);
				MotorDir(RWD, RWD);
				MotorSpeed(190, 190);
				Msleep(500);
				MotorDir(BREAK, RWD);
				MotorSpeed(0, 150);
				Msleep(500);
			
			}
			else
			{
				FrontLED(ON);
				BackLED(OFF,OFF);
				StatusLED(RED);
				MotorDir(FWD, FWD);
				MotorSpeed(140, 140);
			}
			
		}
		else 
		{
			  BackLED(ON,ON);
			  MotorDir(RWD,RWD);
			  MotorSpeed(speed,speed);
			  if (speed > 0) Msleep(500);
			  MotorDir(BREAK,RWD);
			  MotorSpeed(0,speed);
			  if (speed > 0) Msleep(500);
		}
		
		
			
		ir1=ir;
		ir2=ir1; 
		
		sw = PollSwitch();
		
		   if (sw & 0x04)
		   {
			  OCR2  = 0xFC;
		   }
		   if (sw & 0x08)
		   {
			  OCR2  = 0xFB;
		   }
		   
			u=Batterie(); // u=922 entspricht 5.03V
			Encoder_Set(0,0); // Messung starten
			Msleep(500); // 500 ms Messen

			Reibung_links =  PWM*u*10/255-25*encoder[LEFT];
			Reibung_rechts = PWM*u*10/255-25*encoder[RIGHT];
			
			LineData(lData); // nochmals erneut prüfen ob  er eine Tischkante erreicht hat,
//da er ja 0,5 Sekunden für das Messen gebraucht hat.
			
			if(lData[1] <= 80 && lData[1] >= 10) 
			{
				BackLED(ON,ON);
				StatusLED(GREEN);
				MotorDir(RWD, RWD);
				MotorSpeed(190, 190);
				Msleep(500);
				MotorDir(BREAK, RWD);
				MotorSpeed(0, 150);
				Msleep(500);
			}
			
			if(Reibung_links >= 108 || Reibung_rechts >= 108) //Jetzt prüfen ob die Reibung den bestimmten Wert erreicht hat
			{
				BackLED(ON,ON);
				StatusLED(YELLOW);
				MotorDir(RWD, RWD);
				MotorSpeed(150, 150);
				Msleep(800);
				MotorDir(BREAK, RWD);
				MotorSpeed(0, 150);
				Msleep(530);
			}
			
				t1 = PollSwitch();
				t2 = PollSwitch();
				
				if (t1 == 0 && t2 == 0)         
				{
				  MotorFwd();          /* vorwärts fahren */
				  FrontLED(ON);
				  BackLED(OFF,OFF);
				}
				else if (t1 && t2 && t1 == t2)
				{
				  MotorStop();
				  if (t1 & 0x07) /* Tasten links gedrückt? */
				  {
					MotorRwdL();       /* Rückwärtskurve links fahren */
					FrontLED(OFF);
					BackLED(ON,OFF);
				  }
				  if (t1 & 0x38) /* Tasten rechts gedrückt? */
				  {
					MotorRwdR();       /* Rückwärtskurve rechts fahren */
					FrontLED(OFF);
					BackLED(OFF,ON);
				  }
				  Msleep(1000);        /* 1 Sekunde fahren */
				}	
    }
	return 0;
}
Nun kommen aber noch 2 Warnungen:

test.c:136: warning: suggest parentheses around arithmetic in operand of |
test.c:137: warning: suggest parentheses around arithmetic in operand of |

in diesen Zeilen:

Reibung_links = PWM*u*10/255-25*encoder[LEFT];
Reibung_rechts = PWM*u*10/255-25*encoder[RIGHT];