Datum:
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!
#include <avr/io.h> #include <avr/interrupt.h> int Test=0; ISR(INT0_vect){ Test++; } int main(void) { DDRB = 0xFF; DDRD = 0x00; GICR |= (1<<INT0); MCUCR |= (1<<ISC01) | (1<<ISC00); sei(); while(1) { PORTB=0x00; if(Test==1){ do{ PORTB=0xFF; }while(Test==1); } } } |
Datum:
volatile fehlt. Also
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
Datum:
Oh ich Dussel!!! Klar, Vielen Dank! Jetzt funktionierts natürlich.