Habe folgenden Code für den ATmega644:
1 | #ifndef F_CPU
|
2 | #define F_CPU 16000000UL
|
3 | #endif
|
4 | |
5 | #include <avr/io.h> |
6 | #include <util/delay.h> |
7 | #include <avr/interrupt.h> |
8 | #include <stdio.h> |
9 | #include "lib_lcd.h" |
10 | |
11 | #ifndef TIMER1_OVF_vect
|
12 | #endif
|
13 | |
14 | #define TASTER1 (PORTC&1)==1
|
15 | #define TASTER2 (PORTC&1)==1
|
16 | |
17 | char Sekunden = 0; |
18 | char Minuten = 0; |
19 | char Stunden = 0; |
20 | |
21 | |
22 | // INTERRUPT
|
23 | |
24 | ISR (TIMER1_OVF_vect) //Interrupt-Routine |
25 | {
|
26 | cli(); //Interrupt abschalten |
27 | |
28 | Sekunden++; |
29 | |
30 | if (Sekunden >= 59) |
31 | {
|
32 | Sekunden = 0; |
33 | Minuten++; |
34 | |
35 | if (Minuten >= 59) |
36 | {
|
37 | Minuten = 0; |
38 | Stunden++; |
39 | |
40 | if (Stunden >= 23) |
41 | {
|
42 | Stunden = 0; |
43 | }
|
44 | }
|
45 | }
|
46 | }
|
47 | |
48 | sei(); //Interrupt zulassen |
49 | }
|
50 | |
51 | |
52 | int main () |
53 | {
|
54 | char text_buffer[17]; |
55 | |
56 | TCCR1B = 0x02; //Timer System Frequency Prescaler 8 |
57 | TIMSK0 |= (1<<TOIE1); //Interrupt alle 100ms (Timer 1) |
58 | sei(); //Interrupt erlauben |
59 | |
60 | lcd_init(); |
61 | |
62 | while (1) |
63 | {
|
64 | if (TASTER1) |
65 | {
|
66 | Minuten++; |
67 | }
|
68 | |
69 | if (TASTER2) |
70 | {
|
71 | Stunden++; |
72 | }
|
73 | |
74 | sprintf(text_buffer,"%02u:%02u:%02u",Stunden,Minuten,Sekunden); |
75 | lcd_string_xy(0,1,text_buffer); |
76 | }
|
77 | |
78 | }
|
Wie muss ich nun den Timer-Interrupt parametrieren um jede Sekunde den Interrupt auszulösen?