Forum: Mikrocontroller und Digitale Elektronik ISR Routine ständig aktiv??


von bingast (Gast)


Lesenswert?

Hallo,

Ich versuche mit Timer0 und Interrupt service Routine von Atmega128
zu üben, den Quellcode befindet sich unten.
Das Proramm befindet sich ständig in der ISR Routine.
In der ISR soll die Variable inkremntiert und nach erreichen von
100 soll neu hochzählen.
Wo liegt meine Fehler?

Danke

//----------------------------------
#include <avr/io.h>
#include <avr/interrupt.h>

unsigned int var;

void init_tim0(void)
{
  TCCR0 = (1 << WGM01) | (0 << CS02) | (1 << CS01) | (1 << CS00);
  OCR0 = 114;
  TIMSK = (1<<OCIE0);
}

ISR (SIG_OUTPUT_COMPARE0)
{
  var = var + 1;
}

int main (void)
{

  var  = 0;
  init_tim0();
  sei();

  while(1)
  {
    if (var == 100) var = 0;
  }
  return 0;
}

von Karl H. (kbuchegg)


Lesenswert?

Dein Fehler ist, so seltsam es auch klingen mag:

Du hast bei der Definition von var das volatile vergessen.

Dadurch hat dir der Compiler aus der Hauptschleife alles rausgeworfen 
und dadurch sieht es dann im Debugger so aus, als ob nur noch die ISR 
laufen würde.
1
//----------------------------------
2
#include <avr/io.h>
3
#include <avr/interrupt.h>
4
5
volatile unsigned int var;
6
7
void init_tim0(void)
8
{
9
  TCCR0 = (1 << WGM01) | (0 << CS02) | (1 << CS01) | (1 << CS00);
10
  OCR0 = 114;
11
  TIMSK = (1<<OCIE0);
12
}
13
14
ISR (SIG_OUTPUT_COMPARE0)
15
{
16
  var = var + 1;
17
}
18
19
int main (void)
20
{
21
22
  var  = 0;
23
  init_tim0();
24
  sei();
25
26
  while(1)
27
  {
28
    if (var == 100) var = 0;
29
  }
30
  return 0;
31
}

von Falk B. (falk)


Lesenswert?

1
volatile unsigned int var;

Siehe Interrupt

von bingast (Gast)


Lesenswert?

ja ,

vielen dank an alle

von Falk B. (falk)


Lesenswert?

Und atomar ist dein Zugriff auch nicht.

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.