Hallo!
Hab gerade angefangen den INT0 des ATMega8 auszuprobieren.
Dazu verwende ich folgenden Code:
1 | #include <avr/io.h>
|
2 | #include <stdint.h>
|
3 | #include <avr/interrupt.h>
|
4 |
|
5 | ISR(_VECTOR(1)) { // INT0
|
6 | cli(); // Interrupts abschalten
|
7 | PORTB |= (1<<PB1); // PB.1 setzen
|
8 |
|
9 | }
|
10 |
|
11 | int main(void)
|
12 | {
|
13 |
|
14 | DDRB = 0b00000011; // 0-1: Ausgang
|
15 | DDRD = 0x00; // Eingänge
|
16 | GIMSK |= (1<<INT0); // INT0 aktivieren
|
17 | MCUCR |= ((1<<ISC01) | (1<<ISC00)); // bei steigender Flanke
|
18 |
|
19 | sei(); // Interrupts aktivieren
|
20 |
|
21 | while (1) {
|
22 | PORTB ^= (1<<PB0); // PB.0 toggeln
|
23 | }
|
24 |
|
25 | }
|
Den PB.0 toggle ich, um zu sehen dass das Programm rennt. Wenn ich dann
denn Pin D.2 auf high setze, wird auch die richtige Funktion aufgerufen
aber es passiert dort nichts. Den PB1 kann ich nicht auf high setzen und
eigentlich sollten ja die Interrups dann golbal deaktiviert sein, oder?
Wenn ich dann aber den INT0 Pin wieder auf 0 und dann auf 1 setze, wird
der Interrupt erneut aufgerufen und es passiert nichts.
Was mache ich falsch?
Danke schonmal,
wulf