Hallo

In der erweiterten Lib gab es mal die Funktion Gettime(). Ich gehe davon aus, dass diese Funktion auch in der aktuellen Library vorhanden ist. Sie zählt die Millisekunden seid dem Programmstart in einer 32-Bit-Longint-Variablen. Damit kann man wunderbar einfach nichtblockierende Zeitverzögerungen basteln:

Code:
#include "asuro.h"

unsigned long umschaltpunkt, blinken;
unsigned char statusled, backled;

int main(void)
{
	Init();

	statusled = 1; 								// 1 ist grün, 2 ist rot, 3 ist gelb
	umschaltpunkt = Gettime() + 5000; 		// nach 5 Sekunden StatusLED umschalten

	BackLED(ON, OFF);
	backled = 0;
	blinken = Gettime() + 500; 				// BackLEDs mit 1Hz blinken
	
	while(1)
	{
		if(Gettime() > umschaltpunkt)       // Umschaltzeitpunkt überschritten?
		{
		   umschaltpunkt = Gettime() + 3000;// neuen Umschaltzeitpunkt festlegen
		   statusled++;
		   if(statusled > 3) statusled=1;
		   StatusLED(statusled);
		}
		
		if(Gettime() > blinken)
		{
		   blinken = Gettime() + 500; 		// Blinkintervall neu laden
		   backled = !backled; 					// bisschen schummeln :)
		   if(backled) BackLED(OFF, ON);
		      else BackLED(ON, OFF);
		}
		if(Gettime() & (1<<7)) FrontLED(ON);// mit 7 blinkt die FrontLED mit ca. 2Hz
		   else FrontLED(OFF);              // 0 wäre 36kHz (theoretisch)
		   
		// Ab hier ist dann Platz für weitere Funktionen

	}
	return(0);
}
(ungetestet)

Gruß

mic

P.S.: Warum schreibst du eigentlich nicht in der asuro-Rubrik?

Und noch ein Edit:

Um es nicht unnötig ungenau zu machen, müsste man es wohl so formulieren:
Code:
		if(Gettime() > umschaltpunkt)       // Umschaltzeitpunkt überschritten?
		{
		   umschaltpunkt += 3000;				// neuen Umschaltzeitpunkt festlegen