Hallo Leute, ich bin heute auf die neueste Version von WinAVR (20090313) umgestiegen, seitdem geht mein Programm nicht mehr! Kann mir jemand sagen, warum die if-Anweisung im main() nur beim ersten Durchlauf aufgerufen wird, danach dann nie mehr?
1 | #define F_CPU 1044643
|
2 | |
3 | #include <stdlib.h> |
4 | #include <avr/io.h> |
5 | #include <avr/interrupt.h> |
6 | |
7 | #define IN_MODE 0
|
8 | #define OUT_MODE 1
|
9 | #define READTIMECOUNT 50
|
10 | |
11 | void InitMCU(void); |
12 | void DispTemp(int16_t iTmpRd); |
13 | |
14 | uint8_t flOperationmode = OUT_MODE; |
15 | uint8_t uiActionCounter=0; |
16 | uint8_t flReadTemp = 1; |
17 | |
18 | int main(void) |
19 | {
|
20 | TIMSK |= (1<<TOIE1); // Timer/Counter1 Overflow Interrupt Enable |
21 | TCCR1B |= (1<<CS10); // Start Timer |
22 | |
23 | sei(); // SetInterruptEnable |
24 | |
25 | while(1) |
26 | {
|
27 | if (flReadTemp == 1) |
28 | {
|
29 | cli(); |
30 | // tu was
|
31 | flReadTemp = 0; |
32 | sei(); |
33 | }
|
34 | }
|
35 | return 0; |
36 | }
|
37 | |
38 | ISR(TIMER1_OVF_vect) |
39 | {
|
40 | uiActionCounter++; |
41 | if (uiActionCounter >= READTIMECOUNT) |
42 | {
|
43 | flReadTemp = 1; // Jetzt Auslesen |
44 | uiActionCounter = 0; |
45 | if (flOperationmode == IN_MODE) flOperationmode = OUT_MODE; |
46 | else flOperationmode = IN_MODE; |
47 | }
|
48 | }
|