1.4. El Concepto de Interrupciones.
1.4. El Concepto de Interrupciones.
1.4. El Concepto de Interrupciones.
Interrupciones en microcontroladores.
Es una de las caracterasticas de los microcontroladores, de las mas importantes que constituye la
capacidad de sincronizar la ejecucion de programas con acontecimientos externos; es decir,
cuando se produce una interrupcion, el micro automaticamente deja lo que esto haciendo, va a la
direccion 04h de programa y ejecuta lo que encuentre a partir de alli hasta encontrarse con la
instruccion RETFIE que le hara abandonar la interrupcion y volver al lugar donde se encontraba
antes de producirse dicha interrupcion. Hemos de diferenciar entre dos tipos de interrupciones
posibles en un PIC:
1. - Mediante una accion interna. El desbordamiento de la Pila (Stack) por una operacion indebida,
por ejemplo:
2. - Mediante una accion externa, la mas util. Al producirse un cambio del nivel en uno de sus pines
por una accion externa.
Un cambio de nivel en uno de los pines RB4 a RB7 estando configurados como entrada.
Una interrupción 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 interrupción. El pic 16F628 (y el 16F628A) tiene 10
fuentes de interrupción, si las interrupciones están habilitadas cada vez que una de estos
acontecimientos se presente el pic dejará de ejecutar el programa para ir a atender la interrupción
y al termino de la misma continuará ejecutando el programa donde lo había dejado. Las fuentes de
interrupción son:
Cuando ocurre un evento de los descritos anteriormente, se produce una peticion de interrupcion,
guardando el valor actual del PC (contador de programa) en la Pila, sea cual sea la fuente de la
interrupcion, se pone a cero el bit7 GIE (Global Interrupt Enable), con lo cual inhibe cualquier otra
peticion de interrupcion, el registro PC se carga con el valor 0004h que, es la posicion del vector de
interrupcion. Aqui, empieza la ejecucion del programa de atencion a la interrupcion ISR (Rutina
deServicio de Interrupcion). El tiempo de procesamiento de la ISR debe ser lo mas breve posible,
para que se ejecuten las otras interrupciones ya que, pueden habilitarse mas de una de ellas.
Ademas, cualquier tipo de interrupcion tambien puede sacar al micro del modo de reposo (SLEEP).
Una interrupcion puede ser inhibida solo si existe otra interrupcion en curso. Esto se debe a que,
una interrupcion esta controlada por dos bits que indican la fuente de la interrupcion, un bit actua
como bandera (flag) indicando si se ha producido una interrupcion y el otro bit, actua como bit de
inhibicion o prohibicion de la interrupcion en su, debido a que existe otra interrupcion en
ejecucion y todo esto se realiza de forma automatica por parte del micro.
Es decir, el bit GIE es el responsable del permiso de interrupcion que se borra automaticamente
cuando se acepta una interrupcion evitando asi que se produzca ninguna otra interrupcion
mientras se atiende a la primera. Estos bits de control se encuentran en el registro INTCON (0Bh y
8Bh). Estos bits corresponden al registro INTCON que cambia de nivel 0 a 1 cuando se produce la
interrupcion, excepto el ultimo bit (bandera) que se encuentra en el registro EECON1.
Los registros asociados con las interrupciones son el registro de control de interrupcion INTCON, el
registro habilitacion de interrupciones de perifericos PIE1 y el registro de interrupciones de
perifericos PIR1. En el registro INTCON se encuentra el bit de habilitacion global de
interrupcionesGIE, el bit de habilitacion de interrupcion por perifericos PEIE y los bits de
habilitacion de algunas interrupciones como la interrupcion externa del pin RB0 (INTE), la
interrupcion por cambio de estado en los pines RB4 a RB7 (RBIE) y la interrupcion por desborde del
timer 0 (T0IE), asi como las banderas correspondientes a cada interrupcion (INTF, RBIF y T0IF). En el
registro PIE1 se encuentran los bits de habilitacion de las demas interrupciones y en el registro
PIR1 se encuentran las banderas asociadas con cada interrupcion.
En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las
interrupciones con excepcion de INTE y RBIE).
Aunque el pic cuenta con 10 fuentes distintas de interrupción solamente tiene un vector de
interrupción 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.
#fuses HS, NOPROTECT, NOWDT, NOPUT, NOBROWNOUT, NOLVP, NOCPD //ordenes para el
programador
void pulse(){
delay_us(1000);
void main(){
Ahora crearemos en el simulador de proteus nuestro ejemplo para combrobar que funcione.
Al terminar nuestro diagrama en el proteus le damos doble click al pic y le damos click en la
carpeta para asi escoger el .HEX que nos creo el compilador que estemos usando en este caso el
PCW compiler.
Despues le damos click en play en la parte de abajo de proteus donde se encuentra nuestra
simulacion.
Aqui vemos que si esta en funcionamiento nuestro pequeño codigo con interrupciones el led
prende y apaga de manera intermitente
Bibliografias:
http://micropic.wordpress.com/2007/06/08/manejo-de-interrupciones/
http://www.hispavila.com/3ds/chipspic/interrupciones.html