ISR für INT0 wird nicht ausgeführt

#2375158
Lesenswert?

Hallo,

bin Neuling in sachen µc programmierung in C.

Habe zum Test folgendes vor.

LED 1 ist ständig an
Bei Steigender Flanke an INt0 soll meine 2. LED leuchten.

ZUm Einsatz kommt ein Atmega16 auf einen Pollin Experimentiertboard.
Die Port Einstellungen für die LEDS sind korrekt, auch bekomm ich einen 
Highpegel an PD2 wenn ich meinen Taser drücke.

Hier mein Code:
1
 
2
 
3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5

6

7
           
8
ISR(INT0_vect) // Folgende Code wird bei Interrupt VON int0 AUSGEFÜHRT
9
  {
10
  
11
    PORTD = 0b01000000;// LED 2 ist an
12

13
  }
14

15
int main (void) {            
16
  DDRD  = 0b01100000;//POrtD.6 und portD.7 auf Ausgang, rest von PortD auf Eingang
17
  
18
  
19
  //KOnfig INT0
20
  MCUCR |= (1<< ISC01); //Interrupt bei Steigener Flanke
21
  MCUCR |= (1<< ISC00); //Interrupt bei Steigener Flanke
22
  
23
  GCICR |= (1<<INT0);   // INT0 Interrupt einschalten
24
  
25
  
26
  //Hauptschleife
27
  while(1)
28
     {
29
     sei(); // schaltet global Interrupts ein
30
   
31
      
32
                  
33
    PORTD = 0b00100000;// LED 1 ist an
34
  
35
  }
36
   return 0;               
37
}

Hoffe jemand kann mir meinen Fehler zeigen.


MFG
Gast #2375193
Lesenswert?

>     PORTD = 0b00100000;// LED 1 ist an

Schaltet sofort LED2 aus!
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
ISR(INT0_vect) 
5
{
6
  PORTD |= (1<<PD6); // LED 2 ist an
7
}
8

9
int main (void) 
10
{            
11
  DDRD = (1<<PD7) | (1<<PD6);
12
 
13
  // Konfig INT0
14
  MCUCR |= (1<< ISC01); // Interrupt bei Steigener Flanke
15
  MCUCR |= (1<< ISC00); // Interrupt bei Steigener Flanke
16
  GCICR |= (1<<INT0);   // INT0 Interrupt einschalten
17
  sei(); // schaltet global Interrupts ein
18
  
19
  //Hauptschleife
20
  while(1)
21
  {
22
    PORTD |= (1<<PD6); // LED 1 ist an
23
  }
24
  return 0;               
25
}

Konfig INT0 habe ich nicht geprüft.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren