Hallo... habe ein kleines Problem mit einer globalen Variablen Das Programm ist nur ein Versuch um die Interrupt Funktion zu testen. LED 1 soll leuchten wenn der Interrupt eintritt, zugleich soll die Variable a auf 1 gesetzt werden. Nun wird im Hauptprogramm die Variable a abgefragt, wenn sie 1 ist, soll LED 2 leuchten. Mein Problem: LED 2 leuchtet nicht. Woran könnte das liegen? Ich verwende MyAVR und einen Atmega 8. Hier im Forum lese ich immer nur "volatile" bei ähnlichen Problemen... Wäre schön wenn mir jemand helfen könnte. Vielen Dank schonmal
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | #include <inttypes.h> |
4 | |
5 | volatile char a = 0; |
6 | void init(void) |
7 | {
|
8 | DDRD = 0b11100000; //Pin 765 = Output 0-4 = Input |
9 | DDRC = 0b00111000; //status LED ausgänge (Port C: 3,4,5) |
10 | GICR|=(1<<INT0); //enables ext Interrupt (Pin 4, INT0, PD2) |
11 | MCUCR = 0b00000011; //Steigende Flanke an INT0 Löst aus |
12 | sei (); //Global Interrupt enable |
13 | }
|
14 | ISR(INT0_vect) |
15 | {
|
16 | a = 1; //setzte a auf 1 |
17 | PORTC |= (1 << PC5); //schalte 1. LED ein |
18 | }
|
19 | void main(void) |
20 | {
|
21 | init(); |
22 | while (1); |
23 | {
|
24 | if (a == 1) //wenn a = 1 |
25 | {
|
26 | PORTC |= (1 << PC4); //schalte 2. LED ein |
27 | }
|
28 | }
|
29 | }
|