Guten Abend allerseits, Ich versuche schon den ganzen Tag die externen Interrupts des Atmega8 zu benutzen. Ich habe dazu ein kleines Testprogramm geschrieben bei dem nach dem Starten des Controllers LED 1 und 2, also PORTC0 und PORTC1 aus sind. Sobald zum ersten Mal ein Int request kommt soll die entsprechende LED bis zum Reset des Controllers angehen. Leider funktioniert das Ganze aus irgendeinem Grund nicht. Kann mir eventuell irgendjemand helfen? Vielen Dank im Vorraus Marco B Hier mein Testprogramm:
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | |
4 | |
5 | |
6 | void portinit (void); |
7 | void ext_int (void); |
8 | |
9 | |
10 | |
11 | ISR( INT0_vect ) |
12 | {
|
13 | PORTC &= ~(_BV(PC0)); //LED on -> Bit löschen (invertiert[STK500]) |
14 | }
|
15 | |
16 | |
17 | |
18 | ISR( INT1_vect ) |
19 | {
|
20 | PORTC &= ~(_BV(PC1)); //LED on -> Bit löschen (invertiert[STK500]) |
21 | }
|
22 | |
23 | |
24 | void main(void) |
25 | {
|
26 | |
27 | portinit(); |
28 | ext_int(); |
29 | |
30 | PORTC |= _BV(PC0); //LED off -> Bit setzen (invertiert[STK500]) |
31 | PORTC |= _BV(PC1); //LED off -> Bit setzen (invertiert[STK500]) |
32 | |
33 | sei(); // interrups global aktiviert |
34 | |
35 | while (1); |
36 | |
37 | }
|
38 | |
39 | |
40 | void portinit () |
41 | {
|
42 | |
43 | DDRD |= _BV(DDD2)|_BV(DDD3); //PD2 & PD3 als input |
44 | PORTD |= _BV(PD2)|_BV(PD3); //PUllupwiderstände aktivieren |
45 | |
46 | }
|
47 | |
48 | |
49 | void ext_int () |
50 | {
|
51 | |
52 | MCUCR |= _BV(ISC11)|_BV(ISC01); //INT0 & INT1 interrupt request bei falling edge |
53 | GICR |= _BV(INT1)|_BV(INT0); //INT0 & INT1 interrupt enable |
54 | |
55 | }
|