ISR Routine ständig aktiv??

Gast #1741951
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;
}
#1741959
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
}

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.