|
Antecedentes: en un tutorial de la sección correspondiente a programación en lenguaje ensamblador, se explica el mecanismo de interrupciones realizado por el 16F84/F628/F88 para el manejo de varios de sus dispositivos internos. En particular, en el proyecto Reloj de Tiempo Real, se desarrolló un programa escrito en lenguaje ensamblador, para mostrar la hora en un LCD, empleando la interrupción del TIMER0. Descripción: en este tutorial, se explican las capacidades que tiene el lenguaje C (compilador CCS), para el manejo de interrupciones y el uso de las mismas en el caso particular del microcontrolador 16F88. Si se le compara con el desarrollo en lenguaje ensamblador, el uso de interrupciones desde C representa un ahorro considerable en tiempo, debido a la gran simplificación en el manejo de bits, registros y variables. |
LISTA DE INTERRUPCIONES DISPONIBLES EN EL 16F88, UTILIZANDO EL COMPILADOR CCS. EXISTEN 12 POSIBLES FUENTES DE INTERRUPCION:
El programa que se usará para ejemplificar el uso de interrupciones en C es el mostrado en la ventana de abajo. Usando el TIMER1, se genera una base de tiempo de 1 segundo, a través del mecanismo de interrupciones. En este ejemplo, el programa principal "main" enciende y apaga el led RB0 cada segundo. Los mismos bloques señalados con las llaves azules en el programa son indispensables incluirlos en caso de manejar rutinas de interrupción para cualquier otro dispositivo. El TIMER1 es un registro que tiene 16 bits. Su carga inicial es de 0x0000 e incrementa cada vez que se genera 1 pulso en su clock. El TIMER genera una interrupción cada vez que existe un "overflow", es decir que la cuenta alcance 0xFFFF y pase a 0x0000. Si se usa el oscilador interno de 4 Mhz, el clock del TIMER1 tiene una frecuencia de FOSC/4, y un período de 1 us. Esto significa que se genera una interrupción cada 65536 us. Observe los 3 comandos de CCS que permiten fácilmente operar el TIMER1. Estos mismos comandos se utilizan también con el resto de los dispositivos mostrados en la tabla de arriba: "setup_timer_1(TI_INTERNAL|TI_DIV_BY_1)" permite configurar bits particulares en el registro de control de 8 bits del temporizador 1. En este caso, se elije el funcionamiento del temporizador con el oscilador interno del 16F88 (T1_INTERNAL) y un preescalador de la frecuencia del temporizador que divide entre 1 (T1_DIV_BY_1). El operador " | " realiza el "OR" de ambos datos de 8 bits, realizando una suma booleana. "enable_interrupts(INT_TIMER1)", habilita la interrupción del temporizador 1. "enable_interrupts(GLOBAL)", habilita las interrupciones en el 16F88 en forma global. La directiva #int_TIMER1 debe escribirse antes de la función de interrupción. La función de interrupción puede llevar cualquier nombre. En este caso se le nombró "TIMER1_isr( )" (isr significa: interrupt subrutine) Cargue el archivo CCSINTSEGUNDOTINY.hex en el sistema EVOLUPIC Bootloader 16F88, usando el software TINY, y compruebe que el programa funciona correctamente. Vea una aplicación de esta rutina en el proyecto Reloj de Tiempo Real de alta precisión para 16F88 PROGRAMA DE PRUEBA INTERRUPCION TIMER 1
|