Pièce jointe « capitulo1k.sgml »

Téléchargement

        <sect1 id="timer2" xreflabel="timer2">
                <title>M&oacute;dulo timer2</title>
                <para>Autor: Santiago Gonzalez</para>
                <para>Correo: santigoro en gmail.com</para>
                <para>Aqu&iacute; 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 &lt;pic/p16f877a.h>

#include &lt;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.
 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