Hallo,
ich möchte für einen ATmega32 einen Timer mit Interrupt programmieren.
Der 8bit Timer0 soll im CTC-Modus arbeiten.
1 | #include <avr/io.h>;
|
2 | #include <avr/interrupt.h>
|
3 |
|
4 | void init(void) {
|
5 |
|
6 | // LED auf PD1
|
7 | DDRD |= 0x01;
|
8 | PORTD |= 0x01;
|
9 |
|
10 | /* CTC aktivieren */
|
11 | TCCR0 &= ~(1<<WGM00);
|
12 | TCCR0 |= (1<<WGM01);
|
13 |
|
14 | /* prescaler 1*/
|
15 | TCCR0 |= (1<<CS00);
|
16 | TCCR0 &= ~(1<<CS01);
|
17 | TCCR0 &= ~(1<<CS02);
|
18 |
|
19 | OCR0 = 100;
|
20 | TIMSK |= (1 << OCIE0);
|
21 |
|
22 | sei();
|
23 | }
|
24 |
|
25 | ISR(TIMER0_COMP_vect) {
|
26 | PORTD &= ~0x01;
|
27 | }
|
28 |
|
29 | int main(void) {
|
30 |
|
31 | init();
|
32 | while(1) {
|
33 | }
|
34 |
|
35 | }
|
Da die LED nicht ausgeschaltet wird, gehe ich davon aus, dass die
Interruptroutine nicht ausgeführt wird. Kann mich vielleicht jemand
helfen und sagen wo mein Fehler bei der Timerinitialisierung ist? Oder
was ich sonst falsch gemacht habe?
Vielen Dank schon mal im Voraus!
Mike