Ich habe das mal etwas umformatiert, damit die Fehler leichter zu finden sind:

Code:
int main(void)
{
	unsigned char t1, t2;

	Init();

	{
		while(0)
		{
			t1 = PollSwitch();
			t2 = PollSwitch();
			
			if(t1 == 0 && t2 == 0)
			{
				MotorFwd();
				FrontLED(ON);
				BackLED(OFF,OFF);
			}
			else if (t1 & 0x38 || t2 & 0x07)
				MotorRwd();
				
			Msleep(1000);
			break;
		}
		
		MotorStop();
		return 0 ;
	}
}
Was mir auf den ersten Blick ins Auge springt ist das "while(0)", denn wenn ich mich nicht sehr irre dürfte die Schleife so eigentlich garnicht ausgeführt werden. (0 entspricht ja einem logischen "false")

Was mit dieser Formatierung auch leichter sichtbar wird: im "else if"-Zweig wird nur "MotorRwd()" ausgeführt, die beiden folgenden Befehle jedoch werden, unabhängig vom Zustand deiner Variablen, immer ausgeführt.

Außerdem ist der Code nach "Init()" nochmal in einem Block zusammengefasst, was eigentlich nicht nötig wäre.