Pièce jointe « capitulo1i.sgml »

Téléchargement

        <sect1 id="timer0" xreflabel="timer0">
                <title>M&oacute;dulo TIMER0</title>
                <para>Autor: Santiago Gonzalez</para>
                <para>Correo: santigoro en gmail.com</para>
                <para>Aqu&iacute; 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&iacute;mulo externo (modo counter).
                </para>
                <screen>
        TIMER_INTERN    :Usa reloj interno.
        COUNTER_EXTERN  :Usa reloj/est&iacute;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&oacute;n de escritura en el registro TMR0 automaticamente
                pone a 0 el contador del prescaler, aunque mantiene su configuraci&oacute;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&oacute;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&oacute;n de las funciones del m&oacute;dulo TIMER0.
v&aacute;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&aacute; en estado alto (Vdd) cuando se pulse 4 veces.
*/

#include &lt;pic/p16f877a.h>
#include &lt;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&iacute;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() &lt; 2);   // Espera aqui mientras la cuenta del timer &lt; 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.
 Tous les fichiers | Fichiers sélectionnés supprimer déplacer vers la page copier vers la page

Vous n'êtes pas autorisé à joindre un fichier à cette page.

Site hébergé sur un Cloud Public IKOULA Ikoula