Pièce jointe « capitulo1h.sgml »
Téléchargement<sect1 id="interrupt" xreflabel="interrupt"> <title>Módulo Interrupción</title> <para> Este módulo genera las funciones necesarias para trabajar con interrupciones.</para> <para> <screen> #include <interrupt.h> </screen> </para> <sect2 id="isrmain" xreflabel="_ISR_MAIN"> <title>_ISR_MAIN</title> <para> _ISR_MAIN Define la función interrupción principal, esta función se ejecutará cuando acurra cualquier interrupción. </para> <para> Puede escoger cualquier nombre para la función interrupción principal.se utiliza: </para> <screen> #include <interrupt.h> _ISR_MAIN void nombre_de_la_funcion(void); //Esta función se ejecutará cuando ocurra cualquier interrupción. //Dentro de su código se deberá verivicar los FLAG, para saber //que interrupción ocurrió. void nombre_de_la_funcion(void) { //código genérico //cuando termines debes limpiar el FLAG de la interrupción que usaste } int main(void) { //En la función principal se deberá habilitar la interrupción GLOBAL } </screen> </sect2> <sect2 id="isrmain1" xreflabel="ISR_MAIN"> <title>ISR_MAIN</title> <para> ISR_MAIN Define la función/código interrupción principal, esta función/código se ejecutará cuando acurra cualquier interrupción. </para> <para> Puede escoger cualquier nombre para la función/código interrupción principal. se utiliza: </para> <screen> #include <interrupt.h> //Esta función/código se ejecutará cuando acurra cualquier interrupción. //Dentro de su código se deberá verivicar los FLAG, para saber //que interrupción ocurrió. ISR_MAIN(nombre_de_la_funcion) { //código genérico //cuando termines debes limpiar el FLAG de la interrupción que usaste } int main(void) { //En la función principal se deberá habilitar la interrupció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ón Externa</title> <para> Las funciones para trabajar con la interrupción externa (RB0) son:</para> <sect3 id="enableintext" xreflabel="enable_int_ext"> <title>enable_int_ext</title> <para>Habilita la interrupció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ón activada por el flanco de bajada</para> <para>L_TO_H indica una interrupció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ón externa</para> <screen> void disable_int_ext(void); </screen> <para>Al deshabilitar la interrupción no modifica el habilitador de interrupció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ón externa</para> <screen> BYTE int_ext_flag(void); </screen> <para>El uso de esta funció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ón externa</para> <screen> void int_ext_free_flag(void); </screen> <para>El uso de esta función modifica el flag, poniendolo a 0</para> </sect3> </sect2> <sect2 id="inttimer0" xreflabel="interrupcion TIMER0"> <title>Interrupción TIMER0</title> <para> Las funciones para trabajar con la interrupció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ón se habilite tambien deberá activarse la interrupción global</para> </sect3> <sect3 id="disableinttimer0" xreflabel="disable_int_timer0"> <title>disable_int_timer0</title> <para>Deshabilita la interrupción por desbordamiento del TIMER0</para> <screen> void disable_int_timer0(void); </screen> <para>Al deshabilitar la interrupción no modifica el habilitador de interrupció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ón por desbordamiento de TIMER0</para> <screen> BYTE int_timer0_flag(void); </screen> <para>El uso de esta funció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ón por desbordamiento del TIMER0</para> <screen> void int_timer0_free_flag(void); </screen> <para>El uso de esta función modifica el flag, poniendolo a 0</para> </sect3> </sect2> <sect2 id="intrb4to7" xreflabel="interrupcion RB4 to RB7"> <title>Interrupción RB4 to RB7</title> <para> Las funciones para trabajar con la interrupció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ón se habilite tambien deberá activarse la interrupción global</para> </sect3> <sect3 id="disableintrb4to7" xreflabel="disable_int_rb4to7"> <title>disable_int_rb4to7</title> <para>Deshabilita la interrupció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ón no modifica el habilitador de interrupció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ó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ó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ó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ón modifica el flag, poniendolo a 0</para> </sect3> </sect2> <sect2 id="intuart" xreflabel="interrupcion Rx UART"> <title>Interrupción Rx UART</title> <para> Las funciones para trabajar con la interrupció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ón por recepcion de caracter en el UART</para> <screen> void enable_int_uart(void); </screen> <para>Para que esta interrupción se habilite tambien deberá activarse la interrupción global</para> </sect3> <sect3 id="disableintuart" xreflabel="disable_int_uart"> <title>disable_int_uart</title> <para>Deshabilita la interrupción por recepcion de caracter en el UART</para> <screen> void disable_int_uart(void); </screen> <para>Al deshabilitar la interrupción no modifica el habilitador de interrupció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ón por recepcion de caracter en el UART</para> <screen> BYTE int_uart_flag(void); </screen> <para>El uso de esta funció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ón no existe</para> <para>El flag no se limpiará hasta leer con la función uart_getc el caracter entrante, esta función tiene que colocarse dentro de la función interrupción pues de lo contrario el flag nunca se limpiará y nunca saldras de la función interrupción, pues esta se invocará hasta el fin de los tiempos.</para> </sect3> </sect2> <sect2 id="intadc" xreflabel="interrupcion ADC"> <title>Interrupción ADC</title> <para> Las funciones para trabajar con la interrupción por finalización de la conversión analógica a digital son:</para> <sect3 id="enableintadc" xreflabel="enable_int_adc"> <title>enable_int_adc</title> <para>Habilita la interrupción por finalización de la conversión analogica a digital</para> <screen> void enable_int_adc(void); </screen> <para>Para que esta interrupción se habilite tambien deberá activarse la interrupción global</para> </sect3> <sect3 id="disableintadc" xreflabel="disable_int_adc"> <title>disable_int_adc</title> <para>Deshabilita la interrupción por finalizacion de la conversión analógica a digital</para> <screen> void disable_int_adc(void); </screen> <para>Al deshabilitar la interrupción no modifica el habilitador de interrupció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ón por rfinalización de la conversión analógica a digital</para> <screen> BYTE int_adc_flag(void); </screen> <para>El uso de esta función no modifica el flag.</para> </sect3> </sect2> <sect2 id="intcomp" xreflabel="interrupcion COMPARADOR"> <title>Interrupción Comparador</title> <para> Las funciones para trabajar con la interrupción por finalización de comparación son:</para> <sect3 id="enableintcomp" xreflabel="enable_int_comp"> <title>enable_int_comp</title> <para>Habilita la interrupción por finalización de la comparación</para> <screen> void enable_int_comp(void); </screen> <para>Para que esta interrupción se habilite tambien deberá activarse la interrupción global</para> </sect3> <sect3 id="disableintcomp" xreflabel="disable_int_comp"> <title>disable_int_comp</title> <para>Deshabilita la interrupción por finalización de la comparación</para> <screen> void disable_int_comp(void); </screen> <para>Al deshabilitar la interrupción no modifica el habilitador de interrupció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ón por r finalización de la comparación</para> <screen> BYTE int_comp_flag(void); </screen> <para>El uso de esta función no modifica el flag.</para> </sect3> </sect2> <sect2 id="ejemplomodulointext" xreflabel="Ejemplo_Modulo_int_ext"> <title>Ejemplo de Mó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 <pic/p16f877a.h> #define FOSC_HZ 20000000 #include <pinio.h> #include <delayms.h> #include <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.Vous n'êtes pas autorisé à joindre un fichier à cette page.