Hallo

Eine einfache Variante deines Programms (ungetestet):
Code:
 #include "asuro.h"
int main(void)
{
   int p;

   Init(); // muss immer aufgerufen werden!
   while(1) // Endlosschleife
   {
      StatusLED(RED);
      while(PollSwitch()>2) // Tasten immer wieder neu einlesen und auswerten
      {
         StatusLED(GREEN);
         for(p=1;p<300;p++) Sleep(72);
         StatusLED(YELLOW);
         for(p=1;p<300;p++) Sleep(72);
      }
   }
   return 0; // wird nie erreicht
}
Was mach ich denn falsch?
Du verwendest kein Code-Tag und zuviele "?" ;)

Deine Programmversion wurde nur einmal ausgeführt und blieb dann in der Endlos-While()-Schleife vor dem return stecken. Außerdem wurde bei while(taste>2) der Wert für taste nicht mehr neu eingelesen. Wenn die Schleife einmal betreten wurde, konnte sie nie mehr abgebrochen werden:

Code:
#include "asuro.h"
int main(void)
{
	int p;
	int taste;

	Init(); // muss immer aufgerufen werden!
	while(1) // Endlosschleife
	{
		StatusLED(RED);
		taste=PollSwitch(); // Tasten einlesen
		while(taste>2) // in dieser Schleife wird taste nicht mehr aktuallisiert!
		{
			StatusLED(GREEN);
			for(p=1;p<300;p++) Sleep(72);
			// taste=PollSwitch(); // nur wenn die Tasten erneut eingelesen werden
		}                         // kann die Schleife wieder verlassen werden!
	}
	return 0; // wird nie erreicht
}
Gruß

mic