Pièce jointe « capitulo1j.sgml »
Téléchargement<sect1 id="timer1" xreflabel="timer1"> <title>Módulo timer1</title> <para>Autor: Santiago Gonzalez</para> <para>Correo: santigoro en gmail.com</para> <para>Aquí se muestran las funciones para trabajar con el timer1 de los PIC16F. </para> <sect2 id="timer1init" xreflabel="timer1_init"> <title>timer1_init</title> <para> Inicializa timer1 con reloj interno (modo timer) o externo (modo counter). El modo counter puede ser sincronizado con el reloj del pic o asíncrono. </para> <screen> void timer1_init(unsigned char set_mode); </screen> <para> set_mode Establece el modo de funcionamiento. </para> <screen> TIMER_INTERN :Usa reloj interno. COUNTER_SYNC :Usa reloj/estímulo externo (modo counter), síncrono. COUNTER_ASYNC :Usa reloj/estímulo externo (modo counter), asíncrono. timer1_init(TIMER_INTERN); </screen> <para> Pone a 0 la cuenta del timer1 y borra flag de interrupciones. </para> </sect2> <sect2 id="timer1enable" xreflabel="timer1_enable"> <title>timer1_enable</title> <para>Habilita (inicia la cuenta) el timer1.</para> <screen> #define timer1_enable() T1CONbits.TMR1ON = 1 </screen> <para> En modo timer el contador se incrementa en cada ciclo de intrucciones (Fosc./4) si no se usa el prescaler. En modo COUNTER el incremento se produce en el flanco de subida de la señal de referencia. </para> </sect2> <sect2 id="timer1disable" xreflabel="timer1_disable"> <title>timer1_disable</title> <para>Deshabilita (para la cuenta) el timer1.</para> <screen> #define timer1_disable() T1CONbits.TMR1ON = 0 </screen> </sect2> <sect2 id="timer1oscenable" xreflabel="timer1_osc_enable"> <title>timer1_osc_enable</title> <para>Habilita el uso de oscilador externo, conectado entre T1OSO y T1OSI.</para> <screen> #define timer1_osc_enable() T1CONbits.T1OSCEN = 1 </screen> <para> Los pines T1OSO y T1OSI son configurados como entradas, ingnorando la configuración de TRIS de esos pines. Se toma el flanco de subida de la señal en T1OSI. </para> </sect2> <sect2 id="timer1oscdisable" xreflabel="timer1_osc_disable"> <title>timer1_osc_disable</title> <para>Deshabilita el uso de oscilador externo.</para> <screen> #define timer1_osc_disable() T1CONbits.T1OSCEN = 0 </screen> <para> En este caso se toma el flanco de subida de la señal en T1OSO. </para> </sect2> <sect2 id="timer1setprescaler" xreflabel="timer1_set_prescaler"> <title>timer1_set_prescaler</title> <para> Establece el valor del prescaler. </para> <screen> void timer1_set_prescaler(unsigned char set_presc); </screen> <para>set_presc Establece el valor del prescaler.</para> <para>Las posibles opciones son: </para> <screen> T1_PRESC_DIV_1 // Frecuencia de ciclo de instrucciones (FOSC/4) T1_PRESC_DIV_2 // (FOSC/4) del PIC dividido entre 2 T1_PRESC_DIV_4 // (FOSC/4) del PIC dividido entre 4 T1_PRESC_DIV_8 </screen> <para> Cualquier operación de escritura en el registro TMR1L ó TMR1H automaticamente pone a 0 el contador del prescaler, aunque mantiene su configuración. </para> </sect2> <sect2 id="timer1write" xreflabel="timer1_write"> <title>timer1_write</title> <para>Establece (escribe a TMR1L y TMR1H) el valor del contador del timer1.</para> <screen> void timer1_write(unsigned int set_count); </screen> <para>set_count Establece el valor del contador del timer1.</para> </sect2> <sect2 id="timer1read" xreflabel="timer1_read"> <title>timer1_read</title> <para>Lee el valor del contador del timer1.</para> <screen> unsigned int timer1_read(void); </screen> <para>Devuelve un valor de tipo int (16 bites).</para> </sect2> <sect2 id="ejemplotimer1" xreflabel="Ejemplo timer1"> <title>Ejemplo Módulo timer1</title> <para> para compilar necesitas los siguientes comandos </para> <para> <screen> Ejemplo de compilacion : ./compila.sh ej_timer1.c 16f877a </screen> </para> <para> ej_timer1.c </para> <screen> /** * \file * \brief Ejemplo para trabajar con timer1.h * \author Santiago Gonzalez * \date Enero-2009 * \version v0.01 * \par Leeme: * Diagrama Esquematico: PIC_GCC_LIBRARY_PATH/schematics/pdf/ * Ejemplo de compilacion : ./compila.sh ej_timer1 16f877a . * Ejemplo de utilización de las funciones del módulo TIMER1. * válido para la familia 16f, * En este ejemplo se utiliza el timer1 junto con un contador por software, * para hacer un led parpadeante que varía en velocidad: * conectar un led u otra salida a RB7. * El led parpadeará en ráfagas de 10, acelerando su velocidad en cada ráfaga, * a 4 velocidades distintas, correspondientes a los 4 posibles valores del prescaler. */ #include <pic/p16f877a.h> #include <timer1.h> void parpadeo() // Rutina que hace 10 parpadeos de led { unsigned char contador = 0; while ( contador < 10 ) { while (timer1_read() < 32767) // mitad del tiempo encendido PORTBbits.RB7 = 1; while (timer1_read() > 32767) // mitad del tiempo apagado PORTBbits.RB7 = 0; contador++; } } int main(void) { TRISBbits.TRISB7 = 0; // RB7 como salida PORTBbits.RB7 = 0; timer1_init(TIMER_SYNC); // Inicia timer1 modo timer bucle: timer1_set_prescaler(T1_PRESC_DIV_8); // Establece prescaler en frecuencia de instrucciones / 8 timer1_enable(); // Inicia la cuenta parpadeo(); // LLama a la rutina que hace 10 parpadeos timer1_disable(); // Para el timer1 timer1_write(0); // Pone timer1 a 0 timer1_set_prescaler(T1_PRESC_DIV_4); // Establece prescaler en frecuencia de instrucciones / 4 timer1_enable(); parpadeo(); timer1_disable(); timer1_write(0); timer1_set_prescaler(T1_PRESC_DIV_2); // Establece prescaler en frecuencia de instrucciones / 2 timer1_enable(); parpadeo(); timer1_disable(); timer1_write(0); timer1_set_prescaler(T1_PRESC_DIV_1); // Establece prescaler en frecuencia de instrucciones / 1 timer1_enable(); parpadeo(); timer1_disable(); timer1_write(0); 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.