Hallo zusammen,
ich mach jetzt hier schon stundenlang an einem einfachen Timer rum. Kann
mir einer von euch sagen, warum die LED nicht toggelt???
1 | #include <avr/io.h>
|
2 | #include <avr/interrupt.h>
|
3 | //#include <avr/sleep.h>
|
4 | //#include <avr/eeprom.h>
|
5 | //#include <avr/wdt.h>
|
6 |
|
7 | volatile uint8_t millisekunden;
|
8 | volatile uint8_t sekunde;
|
9 |
|
10 | int main(void){
|
11 |
|
12 |
|
13 | // Init PORT A
|
14 | PORTA = (1<<PA1);
|
15 | DDRA = 0xff;
|
16 |
|
17 |
|
18 | // Timer 0 konfigurieren
|
19 | TCCR0A |= (1<<WGM01); // CTC Modus (Clear Timer on compare Match)
|
20 | TCCR0B |= (1<<CS01); // Prescaler 8
|
21 | OCR0A = 125-1; // ((1000000/8)/1000) = 125 Vergleichswert
|
22 |
|
23 | // Compare Interrupt erlauben
|
24 | TIMSK0 |= (1<<OCIE0A);
|
25 |
|
26 | // Global Interrupts aktivieren
|
27 | sei();
|
28 |
|
29 |
|
30 | while(1){
|
31 |
|
32 | }
|
33 | return 0;
|
34 |
|
35 |
|
36 | }
|
37 |
|
38 | /*
|
39 | Der Compare Interrupt Handler
|
40 | wird aufgerufen, wenn
|
41 | TCNT0 = OCR0A = 125-1
|
42 | ist (125 Schritte), d.h. genau alle 1 ms
|
43 | */
|
44 | ISR(TIMER0_COMPA_vect)
|
45 | {
|
46 | millisekunden++;
|
47 | if(millisekunden == 100)
|
48 | {
|
49 | sekunde++;
|
50 | millisekunden = 0;
|
51 | if(sekunde == 10)
|
52 | {
|
53 | PORTA ^= (1<<PA1);
|
54 | sekunde = 0;
|
55 | }
|
56 | }
|
57 |
|
58 | }
|