250 likes | 578 Views
Interrupciones y temporizadores. Programación en C para electrónica. Interrupciones. Programación en C para electrónica. Interrupciones del PIC 16F876A. Las interrupciones permiten la interrupción del programa a cualquier suceso (interno o externo).
E N D
Interrupciones y temporizadores Programación en C para electrónica
Interrupciones Programación en C para electrónica Interrupciones y temporizadores- Programación en C para electrónica
Interrupciones del PIC 16F876A • Las interrupciones permiten la interrupción del programa a cualquier suceso (interno o externo). • Al producirse una interrupción el PIC salta a la dirección del vector (0004h) de interrupción y ejecuta la rutina. • Cuando la rutina de manejo de la interrupción finaliza (RETFIE) el programa retorna al punto donde se interrumpió el programa. Interrupciones y temporizadores- Programación en C para electrónica
Interrupciones del PIC 16F876A • El PIC 16F876A tiene un único vector de interrupción y todas las interrupciones provocan un salto a ese vector. (0004h) • La rutina de manejo de la interrupción debe identificar qué evento interrumpió el programa para ejecutar la rutina correspondiente. • El PIC posee registros con “flags” de interrupción que permiten identificar el evento. Interrupciones y temporizadores- Programación en C para electrónica
Registros de interrupción Interrupciones y temporizadores- Programación en C para electrónica
Registros de interrupción Interrupciones y temporizadores- Programación en C para electrónica
Registros de interrupción Interrupciones y temporizadores- Programación en C para electrónica
Interrupciones en CCS • CCS dispone de directivas para el manejo de interrupciones. • #int_XXXX. • La directiva especifica que la función que la sigue es la función de interrupción correspondiente. • Ejemplo: //interrupción timer 1 #int_TIMER1 void TIMER1_isr (void) { switch (ciclo) { case 0: .... Interrupciones y temporizadores- Programación en C para electrónica
Interrupciones en CCS Interrupciones y temporizadores- Programación en C para electrónica
Funciones para interrupciones • El compilador incluye funciones para facilitar el manejo de interrupciones en C. • enable_interrupts(level) • Activa las interrupciones indicadas por level. • disable_interrupts(level) • desactiva las interrupciones indicadas por level. • clear_interrupts(level) • Borra el flag de interrupción indicado. Interrupciones y temporizadores- Programación en C para electrónica
level • Level es una constante definida en el fichero de cabecera (#include <16F876A.h>). • Genera el código necesario para activar las interrupciones correspondientes modificando los registros ITCON, PIE1 y PIE2. • Cuando se activa alguna interrupción es necesario activar “globalmente” las interrupciones. Interrupciones y temporizadores- Programación en C para electrónica
level Interrupciones y temporizadores- Programación en C para electrónica
Ejemplos: • enable_interrupts(INT_TIMER1); • enable_interrupts(GLOBAL); • disable_interrupts(GLOBAL); • clear_interrupts(INT_RTCC); • enable_interrupts(GLOBAL | INT_RTCC); Nota: Esta ultima solo se puede hacer con interrupciones del mismo registro. Interrupciones y temporizadores- Programación en C para electrónica
Temporizadores Programación en C para electrónica Interrupciones y temporizadores- Programación en C para electrónica
Temporizadores: • El PIC 16F876A dispone de tres temporizadores/contadores: • Timer 0: 8 bits. • Timer 1: 16 bits. • Timer 2: 16 bits. • Pueden funcionar como contadores de flancos externos o como temporizador (contador de ciclos máquina). • Disponen de “prescaler” para ampliar el tamaño de la cuenta (hasta x256). Interrupciones y temporizadores- Programación en C para electrónica
Timer 1: • Cuenta de 16 bits en dos registros de 8 bits: TMR1H (parte alta) y TMR1L (parte baja) • Los registros de cuenta se pueden leer y escribir. • Interrupción por desboradmiento de FFFFh a 0000h. • Controlado por el registro T1CON. • Funcionamiento como: • Temporizador (incrementa cada ciclo máquina). • Contador síncrono. • Contador asíncrono. Interrupciones y temporizadores- Programación en C para electrónica
Timer 1: Interrupciones y temporizadores- Programación en C para electrónica
T1CON: Interrupciones y temporizadores- Programación en C para electrónica
Timer 1 en C: • CCS provee funciones de configuración de los teporizadores: • setup_timer_X (modo) • Programa el modo de funcionamiento del timer X • get_timerX () • Lee el valor de la cuenta. • set_timerX (valor) • Escribe “valor” en los registros de cuenta. Interrupciones y temporizadores- Programación en C para electrónica
setup_timer_1(mode) • Configura el timer 1. • El modo de funcionamiento (mode)es una constante definida en el archivo de cabecera. • Los modos se pueden agrupar con |. Interrupciones y temporizadores- Programación en C para electrónica
set_timer1(value) y get_timer1 • set_timer1 escribe “value” (entero de 16 bits) en los registros de cuenta del timer 1 (TMR1H yTMR1L). • get_timer1() devuelve (16 bits) el valor de los registros TMR1H yTMR1L. • value=get_timer1(); Interrupciones y temporizadores- Programación en C para electrónica