Módulo timer2

Aqui se muestran las funciones para trabajar con el timer2 de los PIC16F87X.

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:

	PRESC_DIV_1
	PRESC_DIV_4		// Frecuencia de ciclo de instrucciones (FOSC/4) del PIC / 4
	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;
}