Forum: Compiler & IDEs Interrupt für Overflow


von Matthias (Gast)


Lesenswert?

Hallo!
Kann sich mal bitte jemand dieses mini Progrämmchen ansehen und mir
sagen, warum das nicht geht?
Möchte nur eine LED anschalten wenn der 8-Bit Counter überläuft!

#include <avr/io.h>
#include <avr/delay.h>
#include <avr/interrupt.h>
#include <avr/signal.h>


SIGNAL (SIG_OVERFLOW0)
{
  unsigned int i;
  PORTA = 1;
  for (i=0;i<50000;i++);
}


int main (void)
{
  unsigned int i;
  DDRA = 0xff;
  sei();
  TCCR0 = (1<<CS00)|(1<<CS02);
  while (1)
  {
    PORTA = 2;
    for (i=0;i<50000;i++);
    PORTA = 4;
    for (i=0;i<50000;i++);
  }
}

Vielen Dank!

Matthias

von Robert (Gast)


Lesenswert?

Matthias,

Du mußt das Timer0 Overflow Interrupt aktivieren,

TIMSK |= (1<<TOIE0);

Du hasst nur den Teiler für den Timer eingestellt falls
ich es Richtig sehe....

Dann soll es klappen.

Robert

von OldBug (Gast)


Lesenswert?

Aber immer noch nicht so, wie er das will, denn sämtliche for-Schleifen
werden, bei eingeschalteter Optimierung, vom Compiler wegoptimiert.

Siehe dazu avr-libc-FAQ (IIRC sogar Punkt 1)...

von Jörg Wunsch (Gast)


Lesenswert?

Nicht ganz Punkt 1 (das ist "volatile"), aber wie immer hier
der Hinweis auf <avr/delay.h>.

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.