Pièce jointe « capitulo1i.sgml »
Téléchargement <sect1 id="timer0" xreflabel="timer0">
<title>Módulo TIMER0</title>
<para>Autor: Santiago Gonzalez</para>
<para>Correo: santigoro en gmail.com</para>
<para>Aquí se muestran las funciones para trabajar con el TIMER0 de los PIC16F.
</para>
<sect2 id="timer0init" xreflabel="timer0_init">
<title>timer0_init</title>
<para>Inicializa TIMER0 con reloj interno (modo timer) o externo (modo counter).</para>
<screen>
void timer0_init(unsigned char intern_extern);
</screen>
<para>
intern_extern Establece si se usa reloj interno
o reloj/estímulo externo (modo counter).
</para>
<screen>
TIMER_INTERN :Usa reloj interno.
COUNTER_EXTERN :Usa reloj/estímulo externo (modo counter)
timer0_init(TIMER_INTERN);
</screen>
<para>
Pone a 0 la cuenta del timer0 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="timer0setedge" xreflabel="timer0_set_edge">
<title>timer0_set_edge</title>
<para>Establece si el incremento de contador se produce
en el flanco de subida o en el flanco de bajada (modo counter).</para>
<screen>
void timer0_set_edge(unsigned char set_risfal);
</screen>
<para>
Pone a 0 la cuenta del timer0 y borra flag de interrupciones
El contador se incrementa en cada subida o bajada en el pin RA4
si no se usa prescaler.
</para>
<para>
set_risfal Establece si el incremento de contador se produce
en el flanco de subida o en el flanco de bajada.
</para>
<para>Las posibles opciones son: </para>
<screen>
RIS_EDGE
FAL_EDGE
</screen>
<para>
Donde RIS_EDGE establece incremento de contador en flanco de subida (rising)
y FAL_EDGE en flanco de bajada (falling).
</para>
<screen>
timer0_set_edge(FAL_EDGE);
</screen>
</sect2>
<sect2 id="timer0setprescaler" xreflabel="timer0_set_prescaler">
<title>timer0_set_prescaler</title>
<para>
Asigna prescaler a timer0 (esto anula el uso de prescaler en watchdog)
y establece el valor del prescaler.
</para>
<screen>
void timer0_set_prescaler(unsigned char set_presc);
</screen>
<para>set_presc Establece el valor del prescaler.</para>
<para>Las posibles opciones son: </para>
<screen>
// Frecuencia de ciclo de instrucciones
T0_PRESC_DIV_2 // (FOSC/4) del PIC dividido entre 2
T0_PRESC_DIV_4 // (FOSC/4) del PIC dividido entre 4
T0_PRESC_DIV_8
T0_PRESC_DIV_16
T0_PRESC_DIV_32
T0_PRESC_DIV_64
T0_PRESC_DIV_128
T0_PRESC_DIV_256
T0_PRESC_OFF // asignado a wathdog
</screen>
<para>
Cualquier operación de escritura en el registro TMR0 automaticamente
pone a 0 el contador del prescaler, aunque mantiene su configuración.
</para>
</sect2>
<sect2 id="timer0write" xreflabel="timer0_write">
<title>timer0_write</title>
<para>Establece (escribe a TMR0) el valor del contador TMR0.</para>
<screen>
void timer0_write(unsigned char set_count);
</screen>
<para>set_count Establece el valor del contador TMR0.</para>
</sect2>
<sect2 id="timer0read" xreflabel="timer0_read">
<title>timer0_read</title>
<para>Lee el valor del contador TMR0.</para>
<screen>
#define timer0_read() TMR0
</screen>
</sect2>
<sect2 id="ejemplotimer0" xreflabel="Ejemplo TIMER0">
<title>Ejemplo Módulo TIMER0</title>
<para> para compilar necesitas los siguientes comandos </para>
<para>
<screen>
Ejemplo de compilacion : ./compila.sh ej_timer0.c 16f877a
</screen>
</para>
<para> ej_timer0.c </para>
<screen>
/*
Ejemplo de utilización de las funciones del módulo TIMER0.
válido para la familia 16f87Xa,
En este ejemplo se utiliza el timer0 como contador,
conectar un pulsador entre RA4 y 0V
y una resistencia pull-up de unos 5 Kohm entre RA4 y Vdd (+5v),
conectar un led u otra salida a RB7.
RB7 se pondrá en estado alto (Vdd) cuando se pulse 4 veces.
*/
#include <pic/p16f877a.h>
#include <timer0.h>
int main(void)
{
TRISAbits.TRISA4 = 1;
TRISBbits.TRISB7 = 0;
PORTBbits.RB7 = 0;
timer0_init(COUNTER_EXTERN); // Inicia timer0 modo contador (reloj o
// estímulo externo en RA4)
timer0_set_edge(FAL_EDGE); // Establece incremento de contador en flanco de bajada
timer0_set_prescaler(PRESC_DIV_2); // Establece prescaler en frecuencia
// de instrucciones / 2
while (timer0_read() < 2); // Espera aqui mientras la cuenta del timer < 2
PORTBbits.RB7 = 1;
}
</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.

