Forum: Mikrocontroller und Digitale Elektronik Delay-Funktion mit Interrupts?


von Owen S. (senmeis)


Lesenswert?

Servus,

ich möchte eine Delay-Funktion mit Interrupts realisieren.

Wie wär's mit folgendem Code mit einem Timer?
1
unsigned char timer_ticks = 0;
2
3
void delay_ms(unsigned char number_of_ms)
4
{
5
  timer_ticks = 0;  // Zähler zurücksetzen
6
while(timer_ticks != number_of_ms);  // wiederholen, bis gewünschte Zeit abgelaufen ist
7
}
8
9
ISR()
10
{
11
  timer_ticks++;
12
}

Cu
Owen

von Falk B. (falk)


Lesenswert?

@  Owen Senmeis (senmeis)

>Wie wär's mit folgendem Code mit einem Timer?

Sinnlos, dein Programm hängt dort genauso fest. Wie man es richtig 
macht, siehe Multitasking. Ja, dort ist kein Interrupt drin, aber 
das Prinzip.

MFG
Falk

von Justus S. (jussa)


Lesenswert?

Vor allem dürfte das Programm so wahrscheinlich ewig in der Schleife 
hängen, da timer_ticks sich nicht ändert...

von test (Gast)


Lesenswert?

@Justus
Dann musst Du aber auch sagen warum (Stichwort "volatile").
1
volatile unsigned char timer_ticks = 0;

@Falk:
Warum sinnlos? So bekommt man lange und genaue Wartezeiten hin.
Man kann dann auch in Sleep gehen, um Strom zu sparen:
1
set_sleep_mode(SLEEP_MODE_xxxx);
2
while(timer_ticks != number_of_ms) 
3
      sleep_mode();

von Falk B. (falk)


Lesenswert?

@  test (Gast)

>Warum sinnlos? So bekommt man lange und genaue Wartezeiten hin.

Ja, aber ein CPU mach nichts weiter als Däumchen drehen oder pennen.
Meistens will man gerade das nicht, sondern andere Dinge tun.

MFG
Falk

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.