Ich verstehe deine problem beschreibung nicht.

Was macht er mit das obene program. Und was macht er mit MotorFWD auskommentiert und MotorDir und MotorSpeed wieder eingestellt.

Auserdem söllte die
Code:
unsigned char sw;
nicht (in diesen fall) im inneren der While-schleife stehen. Variabelen sind nur gultig zwischen der gleich daneben stehenden {} klammern. In dein program wird sw jede schleife durchlauf wieder auf neu deklariert. Ich denke nicht das es die ursache ist deiner problem. Aber schön ist es nicht.

Die ganze if-statement kan man auch einkurzen wen er das selbe reagieren mus auf die taster:
Code:
if (sw & 0x3F) /* irgend einer taster? */
  Back(); 
else MotorFWD();
Die tastertest mit PollSwitch ist aber empfindlich fur störung von den motoren. Ein einfache lösung ist mehrfach die PollSwitch abfragen, und nur darauf reagieren wan der wert stabiel ist.

Code:
sw = PollSwitch();
if (sw==PollSwitch()) && (sw & 0x3F)  Back();    /* Auwa, meine nase tut wirklich weh! Doppelt gechecked. */
else MotorFWD();
...