Pièce jointe « capitulo1h.sgml »

Téléchargement

        <sect1 id="interrupt" xreflabel="interrupt">
                <title>M&oacute;dulo Interrupci&oacute;n</title>
                <para> Este m&oacute;dulo genera las funciones necesarias para trabajar con interrupciones.</para>

                <para>
                <screen>
        #include &lt;interrupt.h>
                </screen>
                </para>

                <sect2 id="isrmain" xreflabel="_ISR_MAIN">
                <title>_ISR_MAIN</title>
                <para> 
                        _ISR_MAIN Define la funci&oacute;n interrupci&oacute;n principal, esta funci&oacute;n se ejecutar&aacute; cuando acurra cualquier interrupci&oacute;n.
                </para>
                <para>
                        Puede escoger cualquier nombre para la funci&oacute;n interrupci&oacute;n principal.se utiliza: </para>
                <screen>
        #include &lt;interrupt.h>

        _ISR_MAIN void nombre_de_la_funcion(void);

        //Esta funci&oacute;n se ejecutar&aacute; cuando ocurra cualquier interrupci&oacute;n.
        //Dentro de su c&oacute;digo se deber&aacute; verivicar los FLAG, para saber 
        //que interrupci&oacute;n ocurri&oacute;.
        void nombre_de_la_funcion(void)
        { 
                //c&oacute;digo gen&eacute;rico
                //cuando termines debes limpiar el FLAG de la interrupci&oacute;n que usaste
        }

        int main(void)
        { 
                //En la funci&oacute;n principal se deber&aacute; habilitar la interrupci&oacute;n GLOBAL
        }
                </screen>
                </sect2>

                <sect2 id="isrmain1" xreflabel="ISR_MAIN">
                <title>ISR_MAIN</title>
                <para> 
                        ISR_MAIN Define la funci&oacute;n/c&oacute;digo interrupci&oacute;n principal, esta funci&oacute;n/c&oacute;digo se ejecutar&aacute; cuando acurra cualquier interrupci&oacute;n.
                </para>
                <para>
                        Puede escoger cualquier nombre para la funci&oacute;n/c&oacute;digo interrupci&oacute;n principal. se utiliza: </para>
                <screen>
        #include &lt;interrupt.h>

        //Esta funci&oacute;n/c&oacute;digo se ejecutar&aacute; cuando acurra cualquier interrupci&oacute;n.
        //Dentro de su c&oacute;digo se deber&aacute; verivicar los FLAG, para saber 
        //que interrupci&oacute;n ocurri&oacute;.
        ISR_MAIN(nombre_de_la_funcion)
        { 
                //c&oacute;digo gen&eacute;rico
                //cuando termines debes limpiar el FLAG de la interrupci&oacute;n que usaste
        }
        
        int main(void)
        { 
                //En la funci&oacute;n principal se deber&aacute; habilitar la interrupci&oacute;n GLOBAL
        }
                </screen>
                </sect2>

                <sect2 id="enableintglobal" xreflabel="enable_int_global">
                <title>enable_int_global</title>
                <para> Habilita globalmente todas las interrupciones. </para>
                <screen>
        void enable_int_global(void);

        ejemplo:
        enable_int_global();
                </screen>
                </sect2>

                <sect2 id="disableintglobal" xreflabel="disable_int_global">
                <title>disable_int_global</title>
                <para> Deshabilita globalmente todas las interrupciones. </para>
                <screen>
        void disable_int_global(void);

        ejemplo:
        disable_int_global();
                </screen>
                </sect2>

                <sect2 id="intexterna" xreflabel="interrupcion externa">
                <title>Interrupci&oacute;n Externa</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n externa (RB0) son:</para>
                <sect3 id="enableintext" xreflabel="enable_int_ext">
                <title>enable_int_ext</title>
                <para>Habilita la interrupci&oacute;n externa</para>
                <screen>
        #define  H_TO_L    0
        #define  L_TO_H    1

        void    enable_int_ext(BYTE flanco);

        ejemplo:
        enable_int_global(L_TO_H);
                </screen>
                <para>H_TO_L indica una interrupci&oacute;n activada por el flanco de bajada</para>
                <para>L_TO_H indica una interrupci&oacute;n activada por el flanco de subida</para>
                </sect3>
                <sect3 id="disableintext" xreflabel="disable_int_ext">
                <title>disable_int_ext</title>
                <para>Deshabilita la interrupci&oacute;n externa</para>
                <screen>
        void    disable_int_ext(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="intextflag" xreflabel="int_ext_flag">
                <title>int_ext_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n externa</para>
                <screen>
        BYTE    int_ext_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag</para>
                </sect3>
                <sect3 id="intextfreeflag" xreflabel="int_ext_free_flag">
                <title>int_ext_free_flag</title>
                <para>Limpia el flag indicador de interrupci&oacute;n externa</para>
                <screen>
        void    int_ext_free_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n modifica el flag, poniendolo a 0</para>
                </sect3>
                </sect2>

                <sect2 id="inttimer0" xreflabel="interrupcion TIMER0">
                <title>Interrupci&oacute;n TIMER0</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n por desbordamiento del TIMER0 son:</para>
                <sect3 id="enableinttimer0" xreflabel="enable_int_timer0">
                <title>enable_int_timer0</title>
                <para>Habilita la interrupcion por desbordamiento del TIMER0</para>
                <screen>
        void    enable_int_timer0(void);
                </screen>
                <para>Para que esta interrupci&oacute;n se habilite tambien deber&aacute; activarse la interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="disableinttimer0" xreflabel="disable_int_timer0">
                <title>disable_int_timer0</title>
                <para>Deshabilita la interrupci&oacute;n por desbordamiento del TIMER0</para>
                <screen>
        void    disable_int_timer0(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="inttimer0flag" xreflabel="int_timer0_flag">
                <title>int_timer0_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n por desbordamiento de TIMER0</para>
                <screen>
        BYTE    int_timer0_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag</para>
                </sect3>
                <sect3 id="inttimer0freeflag" xreflabel="int_timer0_free_flag">
                <title>int_timer0_free_flag</title>
                <para>Limpia el flag indicador de interrupci&oacute;n por desbordamiento del TIMER0</para>
                <screen>
        void    int_timer0_free_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n modifica el flag, poniendolo a 0</para>
                </sect3>
                </sect2>

                <sect2 id="intrb4to7" xreflabel="interrupcion RB4 to RB7">
                <title>Interrupci&oacute;n RB4 to RB7</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n por cambio de estado de los pines RB4 a RB7 son:</para>
                <sect3 id="enableintrb4to7" xreflabel="enable_int_rb4to7">
                <title>enable_int_rb4to7</title>
                <para>Habilita la interrupcion por cambio de estado de los pines de Rb4 a RB7</para>
                <screen>
        void    enable_int_rb4to7(void);
                </screen>
                <para>Para que esta interrupci&oacute;n se habilite tambien deber&aacute; activarse la interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="disableintrb4to7" xreflabel="disable_int_rb4to7">
                <title>disable_int_rb4to7</title>
                <para>Deshabilita la interrupci&oacute;n por cambio de estado de los pines de RB4 a RB7</para>
                <screen>
        void    disable_int_rb4to7(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="intrb4to7flag" xreflabel="int_rb4to7_flag">
                <title>int_rb4to7_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n por cambio de estado de los pines de RB4 a RB7</para>
                <screen>
        BYTE    int_rb4to7_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag</para>
                </sect3>
                <sect3 id="intrb4to7freeflag" xreflabel="int_rb4to7_free_flag">
                <title>int_rb4to7_free_flag</title>
                <para>Limpia el flag indicador de interrupci&oacute;n por cambio de estado de los pines de RB4 a RB7</para>
                <screen>
        void    int_rb4to7_free_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n modifica el flag, poniendolo a 0</para>
                </sect3>
                </sect2>

                <sect2 id="intuart" xreflabel="interrupcion Rx UART">
                <title>Interrupci&oacute;n Rx UART</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n por recepcion de caracter en el UART son:</para>
                <sect3 id="enableintuart" xreflabel="enable_int_uart">
                <title>enable_int_uart</title>
                <para>Habilita la interrupci&oacute;n por recepcion de caracter en el UART</para>
                <screen>
        void    enable_int_uart(void);
                </screen>
                <para>Para que esta interrupci&oacute;n se habilite tambien deber&aacute; activarse la interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="disableintuart" xreflabel="disable_int_uart">
                <title>disable_int_uart</title>
                <para>Deshabilita la interrupci&oacute;n por recepcion de caracter en el UART</para>
                <screen>
        void    disable_int_uart(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="intuartflag" xreflabel="int_uart_flag">
                <title>int_uart_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n por recepcion de caracter en el UART</para>
                <screen>
        BYTE    int_uart_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag, es mas no puede.</para>
                </sect3>
                <sect3 id="intuartfreeflag" xreflabel="int_uart_free_flag">
                <title>int_uart_free_flag</title>
                <para>esta funci&oacute;n no existe</para>
                <para>El flag no se limpiar&aacute; hasta leer con la funci&oacute;n uart_getc el caracter entrante, esta funci&oacute;n tiene que colocarse dentro de la funci&oacute;n interrupci&oacute;n pues de lo contrario el flag nunca se limpiar&aacute; y nunca saldras de la funci&oacute;n interrupci&oacute;n, pues esta se invocar&aacute; hasta el fin de los tiempos.</para>
                </sect3>
                </sect2>

                <sect2 id="intadc" xreflabel="interrupcion ADC">
                <title>Interrupci&oacute;n ADC</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n por finalizaci&oacute;n de la conversi&oacute;n anal&oacute;gica a digital son:</para>
                <sect3 id="enableintadc" xreflabel="enable_int_adc">
                <title>enable_int_adc</title>
                <para>Habilita la interrupci&oacute;n por finalizaci&oacute;n de la conversi&oacute;n analogica a digital</para>
                <screen>
        void    enable_int_adc(void);
                </screen>
                <para>Para que esta interrupci&oacute;n se habilite tambien deber&aacute; activarse la interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="disableintadc" xreflabel="disable_int_adc">
                <title>disable_int_adc</title>
                <para>Deshabilita la interrupci&oacute;n por finalizacion de la conversi&oacute;n anal&oacute;gica a digital</para>
                <screen>
        void    disable_int_adc(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="intadcflag" xreflabel="int_adc_flag">
                <title>int_adc_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n por rfinalizaci&oacute;n de la conversi&oacute;n anal&oacute;gica a digital</para>
                <screen>
        BYTE    int_adc_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag.</para>
                </sect3>
                </sect2>

                <sect2 id="intcomp" xreflabel="interrupcion COMPARADOR">
                <title>Interrupci&oacute;n Comparador</title>
                <para> Las funciones para trabajar con la interrupci&oacute;n por finalizaci&oacute;n de comparaci&oacute;n son:</para>
                <sect3 id="enableintcomp" xreflabel="enable_int_comp">
                <title>enable_int_comp</title>
                <para>Habilita la interrupci&oacute;n por finalizaci&oacute;n de la comparaci&oacute;n</para>
                <screen>
        void    enable_int_comp(void);
                </screen>
                <para>Para que esta interrupci&oacute;n se habilite tambien deber&aacute; activarse la interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="disableintcomp" xreflabel="disable_int_comp">
                <title>disable_int_comp</title>
                <para>Deshabilita la interrupci&oacute;n por finalizaci&oacute;n de la comparaci&oacute;n</para>
                <screen>
        void    disable_int_comp(void);
                </screen>
                <para>Al deshabilitar la interrupci&oacute;n no modifica el habilitador de interrupci&oacute;n global</para>
                </sect3>
                <sect3 id="intcompflag" xreflabel="int_comp_flag">
                <title>int_comp_flag</title>
                <para>Devuelve el estado actual del flag indicador de interrupci&oacute;n por r finalizaci&oacute;n de la comparaci&oacute;n</para>
                <screen>
        BYTE    int_comp_flag(void);
                </screen>
                <para>El uso de esta funci&oacute;n no modifica el flag.</para>
                </sect3>
                </sect2>

                <sect2 id="ejemplomodulointext" xreflabel="Ejemplo_Modulo_int_ext">
                <title>Ejemplo de M&oacute;dulo Interrupcion Externa</title>
                <para> Para compilar necesitas los siguientes comandos </para>
                <para>
                <screen>
Ejemplo de compilacion : ./compila.sh ej_intext 16f877a
                </screen>
                </para>
                <para> ej_intext.c </para>

                <screen>
        #include &lt;pic/p16f877a.h>

        #define FOSC_HZ 20000000

        #include &lt;pinio.h>
        #include &lt;delayms.h>
        #include &lt;interrupt.h>

        BYTE bandera=0;

        void funcion_con_mucho_codigo(void)
        {
                //codigo
                bandera=0;
        }

        ISR_MAIN(funcion_interrupcion_global)
        { 
                if(int_ext_flag()==TRUE)
                {
                        bandera=1;
                        int_ext_free_flag();
                }
        }

        int main (void)
        {
                delayms(100);
        
                enable_int_ext(L_TO_H);
                enable_int_global();

                set_pullup_portb(TRUE);

                while(TRUE)
                {
                        if(bandera==1) funcion_con_mucho_codigo();
                }

                disable_int_ext();
                return 0;
        }
                </screen>
                </sect2>                
                
        </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