#include <avr/io.h>
#include <avr/interrupt.h>
void configura_interrupcao_INT0() {
EICRA = (1 << ISC01); // Configura INT0 para gerar interrupção na borda de descida (ISC01=1 e ISC00=0)
EIMSK = (1 << INT0); // Habilita interrupção externa INT0
}
void configura_led() {
DDRB |= (1 << DDB0); // Configura PB0 como saída (LED)
PORTB &= ~(1 << PORTB0); // Inicia LED em PB0 desligado
}
ISR(INT0_vect) {
PORTB ^= (1 << PORTB0); // Alterna o estado do LED em PB0
}
int main(void) {
configura_led(); // Configura PB0 como saída para o LED
configura_interrupcao_INT0(); // Configura INT0 para interrupção na borda de descida
sei(); // Habilita interrupções globais
while (1) {
// Loop principal vazio, o LED é controlado apenas pela interrupção
}
return 0; // Este retorno nunca é alcançado
}