Hi,
ich bin ziemlich unerfahren was die Programmierung von µC betrifft, da
ich mir erst vor ein paar Tagen das Atmel Evaluationboard (von Pollin)
bestellt habe, dazu einen ATtiny2313.
Nun versuche ich die LED die auf diesem Board ist zum Blinken zu
bringen.
Das Blinken selbst ist nicht das Problem - mein Problem liegt darin:
Entferne ich all den Code, der zu INT1_vect "gehört", dann funktioniert
das Schalten der LED per INT0_vect wunderbar (beim Drücken auf Taster1
fängt die LED das blinken an).
Füge ich nun den Code für INT1_vect ein, compile und flashe, dann ist
Taster1 nicht mehr funktionstüchtig, Taster2 dahingegen funktioniert.
Kann der ATtiny2313 nur einen Interrupt "verwalten" oder liegt mein
Fehler wo anders ?
Ich nutze avr-gcc 4.3.2 unter Debian Lenny.
1 | #include <avr/io.h>
|
2 | #include <util/delay.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | volatile uint8_t led = 0;
|
6 |
|
7 | ISR(INT0_vect)
|
8 | {
|
9 | led = ~led; // Toggle "led"
|
10 | }
|
11 |
|
12 | ISR(INT1_vect)
|
13 | {
|
14 | led = ~led;
|
15 | }
|
16 |
|
17 | int main(void)
|
18 | {
|
19 | DDRD |= _BV(PD5); // PD5 -> Output
|
20 | DDRD &=~ _BV(PD2); // PD2 -> Input
|
21 | DDRD &=~ _BV(PD3); // PD3 -> Input
|
22 |
|
23 | GIMSK = _BV(INT0); // Enable INT0 at PD2
|
24 | MCUCR = _BV(ISC01); // INT0 at release of button
|
25 |
|
26 | GIMSK = _BV(INT1); // Enable INT1 at PD3
|
27 | MCUCR = _BV(ISC11); // INT1 at release of button
|
28 |
|
29 | sei(); // Enable INTs
|
30 |
|
31 | while(1)
|
32 | {
|
33 | if(led)
|
34 | {
|
35 | PORTD ^= _BV(PD5);
|
36 | _delay_ms(500);
|
37 | }
|
38 | }
|
39 | return 0;
|
40 | }
|
Grüße Chris