Sei sulla pagina 1di 11

INTERRUPCIONES EN LOS

MICROCONTROLADORES PIC

Recopilado por: Ing. Rafael O Mendoza A.


Marzo de 2011

INTERRUPCION
Una interrupcin es un evento que hace que el
microcontrolador deje de ejecutar la tarea que est
realizando para atender dicho acontecimiento y luego
regrese y continue la tarea que estaba realizando antes
de que se presentara la interrupcin.
si las interrupciones estn habilitadas cada vez que una
de estos acontecimientos se presente el pic dejar de
ejecutar el programa para ir a atender la interrupcin y al
termino de la misma continuar ejecutando el programa
donde lo haba dejado.

Algunas Interrupciones
Interrupcin externa RB0/INT
Interrupcin por cambio lgico en el puerto B (pines RB7
a RB4)
Interrupcin por desborde del timer 0 (TMR0)
Interrupcin por desborde del timer 1 (TMR1)
Interrupcin por comparacin exitosa exitosa en TMR2
Interrupcin del comparador
Interrupcin del transmisor del USART
Interrupcin del receptor del USART
Interrupcin del mdulo CCP
Interrupcin del EEPROM

Aunque el pic cuenta con 10 fuentes distintas de


interrupcin solamentetiene un vector de interrupcin
por lo que si se habilitan varias interrupciones al
momento de presentarse cualquiera de ellas el
programa saltara a la misma rutina de interrupcion y es
responsabilidad del programador crear una rutina que
identifique
la
fuente
de
la
interrupcion.

PASOS PARA HABILITAR LAS


INTERRUPCIONES
Habilitar el bit correspondiente a cada interrupcion.
Limpiar la bandera correspondiente a la interrupcion
habilitada para evitar falsas interrupciones.
En caso de ser necesario habilitar el bit PEIE del registro
INTCON (necesario para todas las interrupciones con
excepcion de INTE y RBIE).
Habilitar el bit de habilitacion global de interrupciones
GIE del registro INTCON.

VECTOR DE INTERRUPCIN
En el programa tambien es necesario indicar hacia que
rutina debe saltar el programa al presentarse la
interrupcin.
El vector de interrupcin est en la direccin 0x04 por lo
que es necesario agregar las lineas org 0x04 y goto
ISR al programa, donde ISR es la rutina de servicio de
interrupcin y puede, desde luego, tener cualquier otro
nombre.

VENTAJAS AL UTILIZAR
INTERRUPCIONES
La ventaja de utilizar interrupciones es que mientras se
espera a que se presente el evento que produce la
interrupcin el microcontrolador puede estar ejecutando
cualquier otra tarea.
De ese modo el microcontrolador no esta ocupado en
una sola tarea sino que puede seguir trabajando en
otras hasta que una interrupcin haga que el programa
salte y ejecute la tarea que se quiera y al terminarla el
programa continuara su ejecucin en el punto en el que
se encontraba en el momento de presentarse la
interrupcin.

REGISTROS INVOLUCRADOS EN UNA


INTERRUPCIN
INTEDG: flanco activo interrupcin externa.
1- la interrupcin se producir en el flanco ascendente.
0- la interrupcin se producir en el flanco descendente.
GIE: (Habilita las interrupciones globalmente). Este bit permite que
cualquier interrupcin sea posible. Para poder usar cualquier
interrupcin hay que habilitarla globalmente e individualmente.
INTE: Permiso de interrupcin por activacin de la patilla RB0/INT
1- permite la interrupcin
0- prohbe la interrupcin
INTF: bit de sealizacin (solo lectura) de interrupcin externa
RB0/INT

EJEMPLO DE USO DE UNA INTERRUPCION


(ALARMA SIMPLE)
Cuando se pulse el sensor de alarma y est abierto el
interruptor de desactivacin de alarma, se pondr a uno el pin
RB7 del PIC el cual polarizar directamente el transistor Q1 que
a su vez activar el Micro-rel RL1 (Rel auxiliar), este a su vez
activar un rel de potencia que activar una alarma conectada
a 120V.
Una vez activada la alarma, permanecer activa hasta tanto no
la desactivemos por medio del interruptor de desactivacin de
alarma RB1
RB0: Sensores de accionamiento de la alarma
RB1:interruptor de desactivacion (1 activa 0 desactivada)
RB7:pulso de activacion de la alarma

EJEMPLO DE USO DE INTERRUPCION


EXTERNA POR RB0
// Ejemplo uso de interrupcin externa por RB0

#include <16F877A.h>
#FUSES NOWDT,HS,PUT,NOPROTECT
//Identificadores de bits
#bit RB7=0x06.7
#use delay(clock=20M)//Frecuencia de reloj
//****************************************************************************
#int_EXT
void EXT_isr(void)
{
if (PIN_B1==1&& PIN_B7==0)//Si el interruptor RB1 es "1" (alarma activada)
//y la sirena est apagada
{
output_bit( PIN_B7,1); // activar sirena
}
}
//****************************************************************************

EJEMPLO DE USO DE INTERRUPCION


EXTERNA POR RB0 (cont)
void main()
{
set_tris_b(0b01111111); //configura el puerto B (RB7 salida)
RB7=0;//inicializamos RB7
enable_interrupts(GLOBAL);//habilitamos interrupcin global
enable_interrupts(INT_EXT);//habilitamos interrupcin externa
while( true )
{
if( PIN_B1==0 && PIN_B7==1 )/* Si alarma desactivada y sirena en
funcionamiento */
{
output_bit( PIN_B7,0); // se desactiva la sirena
}
}
}

Potrebbero piacerti anche