Quiero aprender a trabajar con interrupciones y he hecho mi primer intento.
He hecho un circuito muy simple basado en ATtiny13.
Hay un led en PB1 y un botón en PB3. Cuando se presiona el botón, el pin PB3 cambia su estado de nivel bajo a nivel alto, esto produce una interrupción externa. El código de esta interrupción hace que el led se encienda durante 500 ms.
Este es mi código, ¿qué está mal aquí? Estoy recibiendo esta advertencia:
'PCINT3_vect' parece ser un manejador de señales mal escrito, falta __vector prefijo [-Wmisspelled-isr]
¿Qué está mal aquí?
#define F_CPU 9600000UL
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
ISR(PCINT3_vect)
{
PORTB |= (1<<PB1);
_delay_ms(500);
PORTB &= ~(1<<PB1);
_delay_ms(500);
}
void SystemInit(void)
{
PCMSK |= (1<<PCINT3); // pin change mask: listen to portb, pin PB3
GIMSK |= (1<<PCIE); // enable PCINT interrupt
sei(); // enable all interrupts
}
int main(void)
{
DDRB |= (1<<PB1);
DDRB |= (1<<PB3);
SystemInit();
while (1)
{
}
}
Gracias chicos!