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
Lesezeichen