Pièce jointe « capitulo1k.sgml »
Téléchargement <sect1 id="timer2" xreflabel="timer2">
<title>Módulo timer2</title>
<para>Autor: Santiago Gonzalez</para>
<para>Correo: santigoro en gmail.com</para>
<para>Aquí se muestran las funciones para trabajar con el timer2 de los PIC16F.
</para>
<sect2 id="timer2init" xreflabel="timer2_init">
<title>timer2_init</title>
<para>Inicializa timer2.</para>
<screen>
void timer2_init(void);
</screen>
<para>
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.
</para>
</sect2>
<sect2 id="timer2setperiod" xreflabel="timer2_set_period">
<title>timer2_set_period</title>
<para>Establece periodo de timer2.</para>
<screen>
void timer2_set_period(unsigned char set_period);
</screen>
<para>
</para>
<para>
set_period Establece periodo de timer2, debe ser un valor entre 0 y 255.
</para>
</sect2>
<sect2 id="timer2setprescaler" xreflabel="timer2_set_prescaler">
<title>timer2_set_prescaler</title>
<para>
Establece el valor del prescaler del timer2.
</para>
<screen>
void timer2_set_prescaler(unsigned char set_presc);
</screen>
<para>set_presc Establece el valor del prescaler.</para>
<para>Las posibles opciones son: </para>
<screen>
T2_PRESC_DIV_1
T2_PRESC_DIV_4 // Frecuencia de ciclo de instrucciones (FOSC/4) del PIC / 4
T2_PRESC_DIV_16
</screen>
</sect2>
<sect2 id="timer2setpostscaler" xreflabel="timer2_set_postscaler">
<title>timer2_set_postscaler</title>
<para>
Establece el valor del postscaler del timer2.
</para>
<screen>
void timer2_set_postscaler(unsigned char set_postsc);
</screen>
<para>set_postsc Establece el valor del postscaler.</para>
<para>Las posibles opciones son: </para>
<screen>
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
</screen>
<para>
La salida del postscaler pone en alto el flag de interrupciones del timer2 (TMR2IF).
</para>
</sect2>
<sect2 id="timer2write" xreflabel="timer2_write">
<title>timer2_write</title>
<para>Establece (escribe a TMR2) el valor del registro TMR2.</para>
<screen>
void timer2_write(unsigned char set_count);
</screen>
<para>set_count Establece el valor del registro TMR2.</para>
</sect2>
<sect2 id="timer2read" xreflabel="timer2_read">
<title>timer2_read</title>
<para>Lee el valor del registro TMR2.</para>
<screen>
#define timer2_read() TMR2
</screen>
</sect2>
<sect2 id="ejemplotimer2" xreflabel="Ejemplo timer2">
<title>Ejemplo de uso del timer2</title>
<para> para compilar necesitas los siguientes comandos </para>
<para>
<screen>
Ejemplo de compilacion : ./compila.sh ej_timer2.c 16f877a
</screen>
</para>
<para> ej_timer2.c </para>
<screen>
/*
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;
}
</screen>
</sect1>Fichiers joints
Pour vous référer aux pièces jointes d'une page, utilisez attachment:filename, comme indiqué ci-dessous dans la liste de fichiers. N'utilisez pas l'URL du lien [get], car elle peut changer et donc être facilement cassée.Vous n'êtes pas autorisé à joindre un fichier à cette page.

