Witam! Napotkałem problem przy obsłudze przerwań zewnętrznych (jestem początkujący). Oto mój programik:
Przycisk spina masę z pinem PD3. Kiedy go naciskam, program wykonywany jest od początku, czyli najprawdopodobniej µC się resetuje, w ogóle nie jest wykonywana funkcja obsługi przerwania (testowałem umieszczając w jej wnętrzu wyświetlanie tekstu na lcd z delayem na wychwycenie rezultatu). Dla INT0 jest ta sama historia. Bardzo proszę o wskazanie błędów, bo nie mogę sobie z tym poradzić.
volatile int przerwanie=0;
ISR(INT1_vect)
{
przerwanie=1;
}
int main()
{
LCD_Initalize();
LCD_WriteText("START");
_delay_ms(1500);
DDRD &= ~(1<<DDD3); //pin PD3 jako wejście
PORTD |= (1<<PORTD3); //wewnętrzny pull-up
MCUCR |= (1<<ISC11)|(0<<ISC10); // Wyzwolenie przerwania zboczem opadającym
GICR |= (1<<INT1); //Załączenie przerwania na INT1
sei();
while(1)
{
LCD_Clear();
LCD_WriteText("Hello!");
_delay_ms(1500);
LCD_Clear();
LCD_WriteText("Witaj!");
_delay_ms(1500);
if(przerwanie==1)
{
LCD_Clear();
LCD_WriteText("Przerwanie");
_delay_ms(1500);
przerwanie=0;
}
}
return 0;
}Przycisk spina masę z pinem PD3. Kiedy go naciskam, program wykonywany jest od początku, czyli najprawdopodobniej µC się resetuje, w ogóle nie jest wykonywana funkcja obsługi przerwania (testowałem umieszczając w jej wnętrzu wyświetlanie tekstu na lcd z delayem na wychwycenie rezultatu). Dla INT0 jest ta sama historia. Bardzo proszę o wskazanie błędów, bo nie mogę sobie z tym poradzić.
