jueves, 4 de junio de 2009

MANEJO DE INTERRUPCIONES.

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 continúe 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:


o Interrupción externa RB0/INT
o Interrupción por cambio lógico en el puerto B (pines RB7 a RB4)
o Interrupción por desborde del timer 0 (TMR0)
o Interrupción por desborde del timer 1 (TMR1)
o Interrupción por comparación exitosa exitosa en TMR2
o Interrupción del comparador
o Interrupción del transmisor del USART
o Interrupción del receptor del USART
o Interrupción del módulo CCP
o Interrupción del EEPROM

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 interrupción y es responsabilidad del programador crear una rutina que identifique la fuente de la interrupción.

Los registros asociados con las interrupciones son el registro de control de interrupción INTCON, el registro habilitación de interrupciones de periféricos PIE1 y el registro de interrupciones de periféricos PIR1. En el registro INTCON se encuentra el bit de habilitación global de interrupciones GIE, el bit de habilitación de interrupción por periféricos PEIE y los bits de habilitación de algunas interrupciones como la interrupción externa del pin RB0 (INTE), la interrupción por cambio de estado en los pines RB4 a RB7 (RBIE) y la interrupción por desborde del timer 0 (T0IE), así como las banderas correspondientes a cada interrupción (INTF, RBIF y T0IF). En el registro PIE1 se encuentran los bits de habilitación de las demás interrupciones y en el registro PIR1 se encuentran las banderas asociadas con cada interrupción.

Para habilitar las interrupciones se deben seguir los siguientes pasos:


o Habilitar el bit correspondiente a cada interrupción.
o Limpiar la bandera correspondiente a la interrupción habilitada para evitar falsas interrupciones.
o En caso de ser necesario habilitar el bit PEIE del registro INTCON (necesario para todas las interrupciones con excepción de INTE y RBIE).
o Habilitar el bit de habilitación global de interrupciones GIE del registro INTCON.

En el código también es necesario indicar hacia que rutina debe saltar el programa al presentarse la interrupción. Ya se dijo que el vector de interrupción está en la dirección 0×04 por lo que es necesario agregar las líneas org 0×04 y goto ISR al programa, donde ISR es la rutina de servicio de interrupción y puede, desde luego, tener cualquier otro nombre.

La ventaja de utilizar interrupciones es que mientras se espera a que se presente el evento que produce la interrupción el microcontrolador puede estar ejecutando cualquier otra tarea. De ese modo el micro no esta ciclado en una sola tarea sino que puede seguir trabajando en otras hasta que una interrupción haga que el programa salte y ejecute la tarea que se quiera y al terminarla el programa continuara su ejecución en el punto en el que se encontraba en el momento de presentarse la interrupción.

2 comentarios:

  1. laneta esta bien hecha pero esta muy saturada de informacion ya me aburriste y eso que no lo leei.
    aaa y ponle unque sea una foto para que sepan quien es el chiodo de la pagina

    ResponderEliminar
  2. Se ve muy bien el fondo que acomodaste y tu información esta bien hecha pro creo que falta quizás una imagen o algo

    ResponderEliminar