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

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.