Quiero cambiar el LED3 del microcontrolador cuando se presiona el botón SW0. Desarrollé este código pero no funciona y no sé qué está mal. Busco en la documentación y en muchos foros tratando de encontrar el error, pero todavía no sé qué está mal. Creo que el problema está en la confguración de la interrupción, pero no estoy seguro de esto. ¿Puede alguien ayudarme? Gracias.
int main(){
EIMSK = 1<<INT0; // Enable INT0
EIFR = (1 << INT0);
MCUCR |= 1<<ISC01 | 1<<ISC00; // Trigger INT0 on rising edge
DDRB = 0x04;//Set port B LED3 as output the other pins as input
PORTB = 0x04; //Pin3 that is output/led turn off, input pull up
DDRD &= ~(1<<PIND2); // Set PD2 as output (Used for interrupt INT0)
PORTD = 1<<PIND2; // Enable PD2 pull-up resistor
sei(); //Set global interrupt flag, to allow SW0 interrupts
while(1) {}; //Infinite loop to wait for the interrupt
return 0;
}
ISR(INT0_vect) {
PORTB ^= 1 << 3; //toggle LED3
}