Módulo timer2 Autor: Santiago Gonzalez Correo: santigoro en gmail.com Aquí se muestran las funciones para trabajar con el timer2 de los PIC16F. timer2_init Inicializa timer2. void timer2_init(void); Pone a 0 la cuenta del timer2 y borra flag de interrupciones. El contador se incrementa en cada ciclo de intrucciones (Freq.Osc. / 4) si no se usa el prescaler. timer2_set_period Establece periodo de timer2. void timer2_set_period(unsigned char set_period); set_period Establece periodo de timer2, debe ser un valor entre 0 y 255. timer2_set_prescaler Establece el valor del prescaler del timer2. void timer2_set_prescaler(unsigned char set_presc); set_presc Establece el valor del prescaler. Las posibles opciones son: T2_PRESC_DIV_1 T2_PRESC_DIV_4 // Frecuencia de ciclo de instrucciones (FOSC/4) del PIC / 4 T2_PRESC_DIV_16 timer2_set_postscaler Establece el valor del postscaler del timer2. void timer2_set_postscaler(unsigned char set_postsc); set_postsc Establece el valor del postscaler. Las posibles opciones son: POSTSC_DIV_1 POSTSC_DIV_2 // TMR2IF en alto cada 2 desbordamientos de TMR2. POSTSC_DIV_3 POSTSC_DIV_4 POSTSC_DIV_5 POSTSC_DIV_6 POSTSC_DIV_7 POSTSC_DIV_8 POSTSC_DIV_9 POSTSC_DIV_10 POSTSC_DIV_11 POSTSC_DIV_12 POSTSC_DIV_13 POSTSC_DIV_14 POSTSC_DIV_15 POSTSC_DIV_16 La salida del postscaler pone en alto el flag de interrupciones del timer2 (TMR2IF). timer2_write Establece (escribe a TMR2) el valor del registro TMR2. void timer2_write(unsigned char set_count); set_count Establece el valor del registro TMR2. timer2_read Lee el valor del registro TMR2. #define timer2_read() TMR2 Ejemplo de uso del timer2 para compilar necesitas los siguientes comandos Ejemplo de compilacion : ./compila.sh ej_timer2.c 16f877a ej_timer2.c /* Ejemplo de utilización de las funciones del módulo TIMER2. válido para la familia 16f87Xa, En este ejemplo se utiliza el timer2 junto con un copntador por software, para hacer un led parpadeante: conectar un led u otra salida a RB7. RB7 se pondrá en estado alto (Vdd) durante aprox. 1 segundo con reloj de 4 MHz, y en estado bajo durante otro segundo. */ #include <pic/p16f877a.h> #include <timer2.h> int main(void) { unsigned char contador; TRISBbits.TRISB7 = 0; PORTBbits.RB7 = 0; timer2_init(); // Inicia timer2 timer2_set_prescaler(PRESC_DIV_16); // Establece prescaler en frecuencia de instrucciones / 16 timer2_set_period(255); // Establece periodo en 255 contador = 0; bucle: while (timer2_read() < 255); // Espera aqui mientras la cuenta del timer < 250 contador = contador + 1; // Incrementa contador if (contador == 255) // Si contador = 255 invierte estado de RB7 { if (PORTBbits.RB7 == 0) PORTBbits.RB7 = 1; else PORTBbits.RB7 = 0; contador = 0; // Reinicia contador } goto bucle; }