Ach so, tut mir leid, ich hab' das irgendwie falsch verstanden. (Das EEPROM wirst du aber so oder so bei deinem Problem brauchen.^^)
Hier schon mal ein Ansatz, wie sich das lösen lässt:
(Ich benutze die alte ASURO-Library, also die, die auf der ASURO-CD mitgeliefert wird. Falls du die neue hast, lässt sich das Problem bestimmt ähnlich lösen (hoffe ich...).)
An deiner Stelle würde ich das Zählen einem Interrupt überlassen:
Öffne zuerst die Datei asuro.c (müsste in deinem ASURO-Verzeichnis unter ...\ASURO_src\FirstTry zu finden sein).
Dort müssten ziemlich am Anfang diese Zeilen stehen:
Code:
volatile unsigned char count72kHz;
/* uses timer2 (36kHz for IR communication */
/* counts falling and rising edge => 36kHz*2 = 72kHz */
SIGNAL (SIG_OUTPUT_COMPARE2)
{
count72kHz ++;
}
SIGNAL (SIG_OUTPUT_COMPARE2) ist ein Interrupt, der verwendet wird, um z.B in der Sleep-Funktion die 72kHz-Takte zu zählen. Immer, wenn eine 72.000stel Sekunde vorbei ist, wird der Interrupt ausgelöst, der den Counter inkrementiert. Die Sleep-Funktion sieht nebenbei so aus:
Code:
/* uses 72kHz timer => Sleep(x) = x/72kHz [sec] */
void Sleep(unsigned char time72kHz)
{
count72kHz = 0;
while (count72kHz < time72kHz);
}
Falls du dir den Rest dazu selber ausdenken möchtest, dann lies ab hier nicht mehr weiter .
Code:
Damit du jetzt die Zeit nach dem Einschalten zählen kannst, musst du nur noch in dem oben genannten Interrupt SIGNAL (SIG_OUTPUT_COMPARE2) einen Mechanismus einbauen, der zuerst die Millisekunden, Sekunden und dann die Minuten zählt. Wenn die gewünschte Zeit vorbei ist, sollte ein Flag im Interrupt aktiviert werden, den das Hauptprogramm benutzen kann.
Mehr verrat' ich nicht.^^
MFG D1K0
Lesezeichen