Hallo! Versuche im folgenden Programm Timer0 zum laufen zu bringen. Timer1 funktioniert so wie es sein soll, aber die LED im Timer0 wird nicht getoggelt. Helft mir mal auf die Sprünge, was hab ich übersehen. mfg, Bjoern
1 | #include <avr/interrupt.h> |
2 | #include <avr/pgmspace.h> |
3 | #include <avr/io.h> |
4 | #include <avr/wdt.h> |
5 | |
6 | #define F_CPU 7372800L // Systemtakt in Hz
|
7 | |
8 | #define LEDPORT PORTB
|
9 | #define LEDPIN PINB
|
10 | #define LEDDIR DDRB
|
11 | |
12 | #define LED_INIT() LEDDIR = 0xFF
|
13 | |
14 | #define LED1_ON() PORTB &=~(1<<0)
|
15 | #define LED1_OFF() PORTB |= (1<<0)
|
16 | #define LED2_ON() PORTB &=~(1<<1)
|
17 | #define LED2_OFF() PORTB |= (1<<1)
|
18 | #define LED3_ON() PORTB &=~(1<<2)
|
19 | #define LED3_OFF() PORTB |= (1<<2)
|
20 | |
21 | |
22 | #define LED1_TOGGLE() PORTB ^= (1<<0);
|
23 | #define LED2_TOGGLE() PORTB ^= (1<<1);
|
24 | #define LED3_TOGGLE() PORTB ^= (1<<2);
|
25 | |
26 | #define SELECT_POWERDOWN MCUCR |= (1<<SM1) | (1<<SM0) | (1<<SE) // Macro to select powerdown sleep mode
|
27 | #define SELECT_IDLESLEEP MCUCR &= ~(1<<SM1) // Macro to select idle sleep mode
|
28 | |
29 | #define DISABLE_AC() ACSR |= (1<<ACD) // Disable Analog Comperator
|
30 | |
31 | // Watchdog reset handling
|
32 | |
33 | |
34 | //------------------------------------------------------------------------
|
35 | // T0 Interrupt
|
36 | //------------------------------------------------------------------------
|
37 | ISR(TIMER0_OVF_vect){ |
38 | |
39 | LED1_TOGGLE(); |
40 | |
41 | }
|
42 | |
43 | ISR(TIMER1_OVF_vect) { |
44 | |
45 | LED2_TOGGLE() |
46 | |
47 | }
|
48 | |
49 | int main(void) { |
50 | |
51 | LEDPORT=0xFF; |
52 | LED_INIT(); |
53 | |
54 | TCNT0 = (1<<CS02) | (1<<CS00); //divide by 1024 - 28 Hz @ 7.372800 Mhz |
55 | //TCCR1B = (1<<CS12) | (1<<CS10); //divide by 1024
|
56 | TCCR1B = (1<<CS10); // - 112 Hz @ 7.372800 Mhz |
57 | TIMSK = (1<<TOIE0) | (1<<TOIE1); //enable timer interrupt |
58 | |
59 | sei(); |
60 | |
61 | |
62 | while(1) |
63 | {
|
64 | LED3_TOGGLE(); |
65 | for(long a = 0;a<80000;a++){asm("nop");}; |
66 | |
67 | }
|
68 | |
69 | return 0; |
70 | |
71 | }
|