Hallo
Wenn man auch auf die externe Variable timebase zugreift, hat man einen 40-bit-Timer. So macht es z.B. die Funktion GetTime():
(long ist ein int32_t! [Quelle])volatile unsigned char count36kHz;
volatile unsigned long timebase;
// neue Zeitfunktion
unsigned long Gettime(void)
{
return ((timebase*256)+count36kHz)/36;
}
timebase ist der Überlaufzähler von count36kHz in der Timer2-Overflow-ISR in asuro.c:
Sleep() verwendet auch count36kHz, und Msleep() verwendet Sleep():SIGNAL (SIG_OVERFLOW2)
{
TCNT2 += 0x25;
count36kHz ++;
if (!count36kHz) timebase ++;
Gruß/* uses 36kHz timer => Sleep(x) = x/36kHz [sec] */
void Sleep(unsigned char time36kHz)
{ unsigned char ziel=(time36kHz+count36kHz) & 0x00FF;
while (count36kHz != ziel);
}
void Msleep(int dauer)
{
int z;
for(z=0;z<dauer;z++) Sleep(36);
}
mic
Lesezeichen