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.

