Forum: Compiler & IDEs Interrupt ATMEGA8515


von Steff (Gast)


Lesenswert?

Hi :) Ich versuche gerade einen Interrupt in mein Programm einzubauen. 
Leider hat es nicht funktioniert, weshalb ich ein kleines Testprogramm 
erstellt habe.
Mein Problem. Er löst den Interrpt aus und erhöht auch das Reset auf 1.
Springt aber dann in der Main nicht ins If rein. Bin am verzweifeln.
Zum Testprogramm, er soll mir da nur alle LEDs ausschaulten und bei 
Interrupt einschalten.
Vielen Dank schonmal!


1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
4
int Test=0;
5
6
7
ISR(INT0_vect){  
8
  
9
  Test++;
10
}
11
12
13
int main(void)
14
{
15
16
  DDRB = 0xFF;                    
17
  DDRD = 0x00;  
18
  
19
  GICR |= (1<<INT0);                    
20
  MCUCR |= (1<<ISC01) | (1<<ISC00);          
21
  sei();                      
22
  while(1)
23
  {  
24
    PORTB=0x00;
25
26
    if(Test==1){
27
      do{
28
        PORTB=0xFF;
29
      }while(Test==1);
30
    }
31
  
32
  }
33
}

von Christian F. (cmf) Benutzerseite


Lesenswert?

volatile fehlt. Also
1
volatile int Test=0;

Dein Compiler kapiert nämlich sonst nicht, dass TEST extern verändert 
werden kann und optimiert das if im Main weg.

Siehe auch FAQ: Was hat es mit volatile auf sich

von Steff (Gast)


Lesenswert?

Oh ich Dussel!!! Klar, Vielen Dank! Jetzt funktionierts natürlich.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.