Timer0 Overflow Interrupt

Gast #3926426
Lesenswert?

Hallo, ich wollte eine Overflow Interrupt mit dem Timer0 erzeugen, es 
wird kein Interrupt erzeugt bzw. das was in der ISR Routine drinn steht 
wird nicht ausgeführt. Ich habe es eigentlich wie im Tut gemacht und 
meine Timer0 Routine ergänzt.

Atmega32

Wenn ich PORTA= 0xFF; so auf rufe bekomme ich mein High Signal.

1
void start_timer0(uint8_t prescale0){
2
  
3
  TCCR0 = 0; //8bit Timer
4
  
5
  if (prescale0 == 0)
6
  {
7
    TCCR0 = (1<<CS00) | (1<<WGM01);
8
  }
9
  
10
  if (prescale0 == 1)
11
  {
12
    TCCR0 = (1<<CS01) | (1<<WGM01);
13
  }
14
  
15
  if (prescale0 == 2)
16
  {
17
    TCCR0 = (1<<CS01) |(1<<CS00) | (1<<WGM01);
18
  }
19
  
20
  if (prescale0 == 3)
21
  {
22
    TCCR0 = (1<<CS02) | (1<<WGM01);
23
  }
24
  
25
  if (prescale0 == 4)
26
  {
27
    TCCR0 = (1<<CS02) | (1<<CS00) | (1<<WGM01);
28
  }
29
  
30
  
31
  TIMSK |= (1<<OCIE0);        //Timerinterrupt für Vergleich aktivieren  
32
  OCR0 = 255 - 1;            //Vergleichswert bis wohin er durchzählt  zählt!(länge des Timers abhängig vom Prescaler)
33
  TIMSK |= (1<<TOIE0);        // Timer Overflow Interrupt freischalten 
34
  sei();                //Interrupt enable
35
  
36
}
37

38

39
void start_clock0(void)
40
{
41
  start_timer0(0);
42
}
43

44

45

46
ISR (TIMER0_OVF_vect)
47
{
48
   PORTA= 0xFF;
49
}
50

51

52

53

54

55

56
______________________________
57

58
Main
59

60
______________________________
61

62
#include <avr/io.h>
63
#include <stdio.h>
64
#define F_CPU 16000000UL
65
#include "avr/interrupt.h"
66

67
int main(void)
68
{
69
  DDRA = 0xFF; //Deklaration 11110000 1=Ausgang 0=Eingang  // X1-4a bis 7c
70
  DDRB = 0xFF; 
71
  DDRC = 0xFF;
72
  DDRD = 0xFF;  
73

74
        start_clock0(); // Timer0 + Overflow Interrupt
75

76
        while(1){
77
        }
78
}
#3926470
Lesenswert?

Jakob schrieb:
> Müsste der Controller nicht beim Überlauf in die ISR springen ?
>
> ISR (TIMER0_OVF_vect)
> {
>    PORTA= 0xFF;
> }
>
> Bzw. wieso findet er die denn nicht ?

Was denkst du tut diese Zeile?

>  TIMSK |= (1<<OCIE0);

Sie aktiviert den Compare Interrupt. Hast du eine ISR dafür? Nein. Also 
springt er zum Reset Vektor. Dein Overflow Interrupt wird nie erreicht.

Warum aktivierst du Interrupts die du nicht willst und keine ISR dafür 
hast?
Gast #3926502
Lesenswert?

Cyblord ---- schrieb:
> Was denkst du tut diese Zeile?
>
>>  TIMSK |= (1<<OCIE0);
>
> Sie aktiviert den Compare Interrupt. Hast du eine ISR dafür? Nein. Also
> springt er zum Reset Vektor. Dein Overflow Interrupt wird nie erreicht.
>
> Warum aktivierst du Interrupts die du nicht willst und keine ISR dafür
> hast?

Danke, ist mir jetzt bewusst geworden. Danke werde es für die nächsten 
male mir merken.

Habe die Zeile deaktiviert.

mfg.

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