Parpadeo de LED mediante interrupciones y el Timer1 del Curiosity PIC18F57Q43
Descripción: Programa del PIC18F57Q43 listo para el encendido y apagado de un LED. Mediante un osciloscopio, cómo la señal cuadrada cambia de estado de alto a bajo. Asimismo, el tiempo en alto y en bajo de la señal cambia cada 260 ms con cada interrupción generada en el PIC.
Especificaciones: En datasheet indica que el módulo Timer1 es un contador de 16 bits que incrementa y se accede a través del registro TMRx. Cuando se utiliza con una fuente de reloj interna, el módulo funciona como un temporizador que incrementa en cada ciclo de instrucción. El registro TMR1 incrementa hasta FFFFh y se reinicia a 0000h. Cuando TMR1 se reinicia, se establece el bit de la bandera de interrupción de Timer1 del registro PIR3.
Funcionamiento: Se carga el time1, para una Escritura directa para los cual utiliza :
TMR1H = 0x00;
TMR1L = 0x00;
Para conseguir una interrupción cada 260ms en TIMER1 usando Oscilador interno de 4Mhz.
T1CLK = 0x01; // Clock = Fosc/4
T1CON = 0x23; // Prescaler 1:4, Timer1 ON
Función interrupción, para encendido y apagado del LED.
void __interrupt(irq(IRQ_TMR1) TMR1_ISR(void)
{
if (PIR3bits.TMR1IF)
{
PIR3bits.TMR1IF = 0; // Limpiar bandera
LATFbits.LATF3 ^= 1; // Cambiar estado del LED
}
}
