Hallo,
nach folgendem Code (M1284P) habe ich erwartet, auf dem Logicanalyzer
ein Signal von 25 ms zu sehen. Mein Ziel war es eigentlich einen
Interrupt alle 25 ms zu bekommen, aber der Timer springt nicht in die
Interrupt-Routine. Beim M16 hat es bei mir immer geklappt, was habe ich
Übersehen im Datenblatt?
1 | #include <avr/io.h>
|
2 | #include <stdlib.h>
|
3 | #include <inttypes.h>
|
4 | #include <avr/interrupt.h>
|
5 |
|
6 | int main(void)
|
7 | {
|
8 | DDRB = 255;
|
9 | PORTB = 255;
|
10 |
|
11 | TIMSK0 = (1<<OCIE0A); // Interrupt Timer 0 einschalten Match A
|
12 | TCCR0A = (1<<WGM01); // Mode 2 = CTC
|
13 | TCCR0B = (1<<CS02); // Prescaler 256, 8Mhz / 256 = 31250
|
14 | OCR0A = 124; // 31250 / 125 = 250
|
15 |
|
16 | sei();
|
17 |
|
18 | while(1)
|
19 | {
|
20 | }
|
21 |
|
22 | }
|
23 |
|
24 | ISR(TIMER0_COMPA_vect) // Overflow Interrupt Vector
|
25 | {
|
26 | PORTB = PORTB ^ 255; // Port B toggeln
|
27 | }
|
Vielen Dank für einen Tip. Mfg Sven