Forum: Mikrocontroller und Digitale Elektronik Timer Interrupt ATMega 16


von René (Gast)


Lesenswert?

Hm...

Ich wäre für einen Tipp dankbar, warum die Interrupt-routine nicht 
durchlaufen wird. Oder wird gar am Ende der Timer nicht mal gestartet?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#define F_CPU 8000000UL
4
5
6
7
int main (void)
8
{
9
DDRD=0xE2;
10
PORTD|=(1<<7);      // LED an
11
sei();        // global IR enable
12
TCNT0=0x04;      // Timer preload
13
while(1){
14
TCCR0|=((1<<0)|(1<<2));   // presacaler 1024, run
15
    }            
16
}
17
18
19
ISR(TIMER0_OVF_vect)
20
{
21
TCNT0=0x04;           // btimer preload 4
22
PORTD^=(1<<7);      // toggle LED
23
}
24
25
26
// Timer müsste alle 32 msec die ISR auslösen

von René (Gast)


Lesenswert?

schongutschongut... ich schätze mal, weil der timer pausenlos in der 
while gestartet wird : )

von René (Gast)


Lesenswert?

hm.. aber es geht auch nicht, wenn ich die while weglasse...

von Gast (Gast)


Lesenswert?

das auch, aber Timerinterrupt muss freigegeben werden,
TIMSK |= _BV(TOIE0);

von Michael K. (mmike)


Lesenswert?

Und die while Schleife brauchts danach immer noch, sonst ist Dein 
Programm ja beendet!

von René (Gast)


Lesenswert?

Ja sowas... Das Register ist mir im Datenblatt gar nicht begegnet. Danke 
aber dafür!

von Gast (Gast)


Lesenswert?

Gern geschehen!

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.