kein Interrupt beim Mega16 - Gedankenfehler?

Gast #831869
Lesenswert?

Hallo Jungs, ich habe eine kleine Routine in C (AVR-GCC) ATmega16 
geschrieben.
Leider funktioniert meine Interrupt-Routine nicht und ich weiß nicht 
warum. Vielleicht habe ich einen Gedankenfehler. Schaut doch mal bitte 
über den Code:
1
#include <avr\io.h>
2
#include <avr\interrupt.h>
3
#include <stdint.h>
4

5
uint8_t zaehler = 0;
6

7
ISR(TIMER0_COMP_vect) //Output Compare Interrupt
8
{
9
  zaehler++;
10
}
11

12
void timer_init(void)
13
{
14
  TCCR0 = (1<<WGM01) | (1<<CS02);   // Prescaler auf 256 --> 1MHz / 256 = 4 kHz
15
                      
16
  TIMSK = (1<<OCIE0);  // Output Compare Interrupt Enable - 
17
                        // -> Interrupt bei Compare mit OCR0 einschalten
18
  OCR0 = 212;           // Zeitpunkt für Interrupt
19
  TCNT0 = 0x00;         // Zählerregister auf 0 setzen
20
}
21

22
int main (void)
23
{
24

25
  uint8_t ergebnis = 0;
26

27
  DDRB = 0xff;  // Port B ist Output
28
  PORTB = 0xff; //LED's ausschalten (invers am Board)
29

30
  timer_init();
31

32
  while(1) // Programmschleife
33
  {
34
    sei();
35
    ergebnis = zaehler % 8; // modulo
36
    PORTB = ~(1<<ergebnis);
37
  }
38
}

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren