Forum: Mikrocontroller und Digitale Elektronik Delay Funktion


von jb_dani (Gast)


Angehängte Dateien:

Lesenswert?

Erstmal Hallo alle zusammen!
Ich habe ein Problem mit dem Timer Funktionen unter einem 8051 
Mikrokontroller!
Ich arbeite mit dem Keil Compiler und wollte eine richtige Delay 
Funktion in mein Programm implementieren, der man als Parameter die 
Wartezeit (z.B. in ms oder us) übergibt.
Ich hab ne ganze Weile im Internet nach einer guten Lösung gesucht und 
auch was gefunden, und zwar auf der Keil Homepage (siehe Anhang).
Doch jetzt haben die eine Berechnung ganz am Anfang des Files

#define TIMER0_COUNT 0xDC11 /* 10000h - ((11,059,200 Hz / (12 * FREQ)) - 
17) */

die ich nicht kapiere.

Kann mir mal jemand erklären warum 10000h - ....... ?????????????

von Stefan Hütter (Gast)


Angehängte Dateien:

Lesenswert?

Hi,

Was die berechnung soll, weis ich auch nicht, aber was haltest du von 
dieser Warteschleife(siehe Anhang)?

von Ingo B. (Gast)


Lesenswert?

Wie wäre es damit?

//---------------------------------

unsigned int Set_1ms (unsigned int new_time)
{
  return(Clock_1ms + new_time);
}

bit Check_1ms (unsigned int time)
{
  return((time - Clock_1ms) & 0x8000);
}
//-------------------------
Die Variable Clock_1ms zählst Du im TimerInterrupt hoch.
Die Abfrage sieht dann so aus:


unsigned int Zeit=Set_1ms(150);

 if (Check_1ms(Zeit))
   {
     // mach etwas....
     Zeit = Set_1ms(150);
   }

//--------------------------------

Das hat den Vorteil, das Dein Polling nicht komplett von angehalten 
wird. Im Gegensatz zu einer Warteschleife...

Bis dann,
Ingo!

von Jens Gerdes (Gast)


Lesenswert?

Hallo,

ich möchte die eigentliche Frage beantworten:
10000h deshalb, weil der Timer im 8051 raufzaehlt und nach 0FFFFh seinen 
Ueberlauf hat.

Jens

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.