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.