Hallo Weiti

Ich habe dein Program etwas umgestellt:
Code:
#include "asuro.h"
//#include <stdlib.h>

#define taste (!(PINC & (1<<PC4))) // Tastenabfrage
#define keine_taste (PINC & (1<<PC4))

void MSleep (int dauer) // 1/1000 sek
{
  int z;
  for (z = 0; z < dauer; z++)
    Sleep (36); // bei der orginalen Library muss hier 72 stehen
}

int main(void)
{
	Init();

	StatusLED(RED); // vorwärts bis Hinderniss
	BackLED(OFF,OFF);
	MotorDir(FWD,FWD);
	MotorSpeed(120,120);
	while (keine_taste);

	BackLED(ON,ON); // zurück
	MotorDir(RWD,RWD);
	MotorSpeed(120,120);
	MSleep(1080); // 36*30
	MotorSpeed(0,0);
	Msleep(200);

	MotorDir(RWD,RWD); // drehen
	MotorSpeed(0,120);
	MSleep(2000); // 250*36=9000?
	MotorSpeed(0,0);
	Msleep(200);
	BackLED(OFF,OFF);

	MotorDir(FWD,FWD); // vorwärts bis nächstes Hinderniss
	MotorSpeed(120,120);
	StatusLED(YELLOW);
	while (keine_taste);

	StatusLED(GREEN); // fertig
   MotorSpeed(0,0);
   while (1);
	return(0);
}
Deine Version lief mit meinem asuro auch nicht. Msleep() benötigt als Parameter die Zeit in Millisekunden (1/1000). Der wiederholte Aufruf von MotorSpeed() könnte dazu führen, das die PWM-Register nicht richtig funktionieren. Deshalb keine Schleife, sondern erst Motor setzen und dann warten.

Gruß

mic

warum machst du nicht einfach:
Weil PollSwitch() nicht immer das erwartete zurückliefert