Módulo Interrupción

Este módulo genera las funciones necesarias para trabajar con interrupciones.

	#include <interrupt.h>
		

_ISR_MAIN

_ISR_MAIN Define la función interrupción principal, esta función se ejecutará cuando acurra cualquier interrupción.

Puede escoger cualquier nombre para la función interrupción principal.se utiliza:

	#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
	}
		

ISR_MAIN

ISR_MAIN Define la función/código interrupción principal, esta función/código se ejecutará cuando acurra cualquier interrupción.

Puede escoger cualquier nombre para la función/código interrupción principal. se utiliza:

	#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
	}
		

enable_int_global

Habilita globalmente todas las interrupciones.

	void enable_int_global(void);

	ejemplo:
	enable_int_global();
		

disable_int_global

Deshabilita globalmente todas las interrupciones.

	void disable_int_global(void);

	ejemplo:
	disable_int_global();
		

Interrupción Externa

Las funciones para trabajar con la interrupción externa (RB0) son:

enable_int_ext

Habilita la interrupción externa

	#define  H_TO_L    0
	#define  L_TO_H    1

	void	enable_int_ext(BYTE flanco);

	ejemplo:
	enable_int_global(L_TO_H);
		

H_TO_L indica una interrupción activada por el flanco de bajada

L_TO_H indica una interrupción activada por el flanco de subida

disable_int_ext

Deshabilita la interrupción externa

	void	disable_int_ext(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_ext_flag

Devuelve el estado actual del flag indicador de interrupción externa

	BYTE	int_ext_flag(void);
		

El uso de esta función no modifica el flag

int_ext_free_flag

Limpia el flag indicador de interrupción externa

	void	int_ext_free_flag(void);
		

El uso de esta función modifica el flag, poniendolo a 0

Interrupción TIMER0

Las funciones para trabajar con la interrupción por desbordamiento del TIMER0 son:

enable_int_timer0

Habilita la interrupcion por desbordamiento del TIMER0

	void	enable_int_timer0(void);
		

Para que esta interrupción se habilite tambien deberá activarse la interrupción global

disable_int_timer0

Deshabilita la interrupción por desbordamiento del TIMER0

	void	disable_int_timer0(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_timer0_flag

Devuelve el estado actual del flag indicador de interrupción por desbordamiento de TIMER0

	BYTE	int_timer0_flag(void);
		

El uso de esta función no modifica el flag

int_timer0_free_flag

Limpia el flag indicador de interrupción por desbordamiento del TIMER0

	void	int_timer0_free_flag(void);
		

El uso de esta función modifica el flag, poniendolo a 0

Interrupción RB4 to RB7

Las funciones para trabajar con la interrupción por cambio de estado de los pines RB4 a RB7 son:

enable_int_rb4to7

Habilita la interrupcion por cambio de estado de los pines de Rb4 a RB7

	void	enable_int_rb4to7(void);
		

Para que esta interrupción se habilite tambien deberá activarse la interrupción global

disable_int_rb4to7

Deshabilita la interrupción por cambio de estado de los pines de RB4 a RB7

	void	disable_int_rb4to7(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_rb4to7_flag

Devuelve el estado actual del flag indicador de interrupción por cambio de estado de los pines de RB4 a RB7

	BYTE	int_rb4to7_flag(void);
		

El uso de esta función no modifica el flag

int_rb4to7_free_flag

Limpia el flag indicador de interrupción por cambio de estado de los pines de RB4 a RB7

	void	int_rb4to7_free_flag(void);
		

El uso de esta función modifica el flag, poniendolo a 0

Interrupción Rx UART

Las funciones para trabajar con la interrupción por recepcion de caracter en el UART son:

enable_int_uart

Habilita la interrupción por recepcion de caracter en el UART

	void	enable_int_uart(void);
		

Para que esta interrupción se habilite tambien deberá activarse la interrupción global

disable_int_uart

Deshabilita la interrupción por recepcion de caracter en el UART

	void	disable_int_uart(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_uart_flag

Devuelve el estado actual del flag indicador de interrupción por recepcion de caracter en el UART

	BYTE	int_uart_flag(void);
		

El uso de esta función no modifica el flag, es mas no puede.

int_uart_free_flag

esta función no existe

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.

Interrupción ADC

Las funciones para trabajar con la interrupción por finalización de la conversión analógica a digital son:

enable_int_adc

Habilita la interrupción por finalización de la conversión analogica a digital

	void	enable_int_adc(void);
		

Para que esta interrupción se habilite tambien deberá activarse la interrupción global

disable_int_adc

Deshabilita la interrupción por finalizacion de la conversión analógica a digital

	void	disable_int_adc(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_adc_flag

Devuelve el estado actual del flag indicador de interrupción por rfinalización de la conversión analógica a digital

	BYTE	int_adc_flag(void);
		

El uso de esta función no modifica el flag.

Interrupción Comparador

Las funciones para trabajar con la interrupción por finalización de comparación son:

enable_int_comp

Habilita la interrupción por finalización de la comparación

	void	enable_int_comp(void);
		

Para que esta interrupción se habilite tambien deberá activarse la interrupción global

disable_int_comp

Deshabilita la interrupción por finalización de la comparación

	void	disable_int_comp(void);
		

Al deshabilitar la interrupción no modifica el habilitador de interrupción global

int_comp_flag

Devuelve el estado actual del flag indicador de interrupción por r finalización de la comparación

	BYTE	int_comp_flag(void);
		

El uso de esta función no modifica el flag.

Ejemplo de Módulo Interrupcion Externa

Para compilar necesitas los siguientes comandos

Ejemplo de compilacion : ./compila.sh ej_intext 16f877a
		

ej_intext.c

	#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;
	}