Interrupciones con el PIC


Compartir: Share on Facebook1Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0

Interrupciones con el PIC intcon

Interrupciones con el PIC, los microcontroladores PIC se programan para que realicen tareas de acuerdo a lo que interese, normalmente realizarán esas tareas en forma ordenada una tras otra en forma cíclica, a esto se le conoce como el programa principal; las interrupciones microcontroladores con el PIC son eventos que hacen que el programa principal se detenga, para que el microcontrolador PIC se dedique ha realizar otras tareas, mientras no ocurra una interrupción el microcontrolador solo realizará las tareas indicadas dentro del programa principal.

Cada modelo de microcontrolador PIC tendrá una serie de interrupciones que podrá detectar, para que se detecten las interrupciones con el PIC, es necesario programar algunos registros dependiendo de cual se quiere que sea la causa de las interrupciones, se tienen registros para habilitar las interrupciones con el PIC y registros para detectar cuando se han producido interrupciones.

Para la programación de los microcontroladores PIC y por tanto de las interrupciones con el PIC, se utilizará el XC8 en el MPLABX, con el cual se programa en C/C++, se utilizará este programa porque fácilita mucho la comprención de la forma de utilizar los registros involucrados en el uso de las interrupciones con el PIC, una vez que se comprenda el uso de las interrupciones con el PIC es fácil hacer lo mismo con otros programas dedicados a los microcontroladores PIC.

Para habilitar el uso de las interrupciones con el PIC se utiliza el registro INTCON, cada microntrolador PIC tiene su registro INTCON, algunos tendrán mas de uno, es necesario revisar su hoja de datos para verificar para que se utilizan cada uno de sus bits, pero lo que si es común en ellos es el bit7 o bit GIE.

El siguiente es el registro INTCON para el PIC16F877A

interrupciones con el pic intcon pic16f877a

El siguiente es el registro INTCON para el PIC18F4550

interrupciones con el pic intcon pic18f4550

 😎 El bit7 GIE del registro INTCON es conocido como el bit de habilitación de las interrupciones globales, cuando este bit es puesto a 1 se habilita el uso de cualquier interrupción, cuando es puesto a 0 no se pueden utilizar las interrupciones.

Para habilitar el uso de las interrupciones con el PIC además será necesario la utilización de otros bits que dependerán del tipo de interrupción que se quiera utilizar, por ejemplo si se quiere utilizar la interrupción externa, será necesario poner a 1 también el bit4 del registro INTCON.

Ademas del registro INTCON que es del que siempre  se pondrá a 1 su bit7 para  habilitar las interrupciones con el PIC, se tienen otros registros relacionados con las interrupciones como los registros PIE y PIR, el registro PIE es para escoger el tipo de interrupción o la fuente que se quiere que provoque la interrupción, y el registro PIR están los bits que detectan cuando se ha producido la interrupción y la fuente que la ha provocado, a los bits del registro PIR se les conoce como banderas de aviso que ha ocurrido una interrupción.

Los bits de detección de interrupciones o banderas de interrupción se tienen que poner a 0 para que detecten las interrupciones, si están a 1 no detectan la interrupciones con el PIC, cuando son puestas a 0 y ocurre alguna interrupción, dependiendo de cual sea la fuente de interrupción su respectiva bandera se pondrá a 1, luego dentro de la rutina de atención a las interrupciones este bit bandera tendrá que ponerse nuevamente a 0 para que se sigan detectando mas interrupciones.

Los registros que le  correspondan a cada tipo de interrupción a utilizar se verán en sus respectivas secciones en los enlaces que se tendrán mas abajo o en el menú superior o lateral de está página.

Para la programación de las interrupciones con el PIC se utilizará como se comento líneas arriba el XC8, en el que la rutina de atención a las interrupciones, o la función que se encarga de realizar las tareas del PIC cuando ocurre alguna interrupción se realiza dentro de la siguiente función:

Donde nombre es el nombre que se le quiera dar a la rutina de atención de las interrupciones con el PIC, la detección de la bandera de la interrupción se hace con la condicional if, dentro de esta condicional se programan las tareas que se quieren que haga el PIC cuando ocurre la interrupción, al finalizar se pone la bandera a 0 para que siga detectando el tipo de interrupción que puso su bandera a 1, caso contrario no se podrá detectar mas interrupciones de ese tipo, si se tienen habilitadas varias interrupciones, se utilizarán mas condicionales if para detectar sus respectivas banderas.

En tareas a realizar dentro de la rutina de interrupciones hay que procurar en lo posible que sean lo mas cortas posibles, ya que el programa principal estará detenido en ese momento, evitar si es posible utilizar bucles.

Se recomienda revisar la hoja de datos del microcontrolador PIC utilizado para ver cuales son las fuentes que pueden provocar interrupciones en ese PIC, por ejemplo para el PIC16F84A se puede detener su programa principal o provocar interrupciones por los siguientes motivos:

  1. Al provocar un cambio de estado en el pin RB0/INT, esto viene a ser una interrupción externa.
  2. Cuando el temporizador TMR0 alcanza su valor máximo esto es 255, luego del cual vuelve a 0, se dice que el TMR0 se ha desbordado, a esto se conoce como interrupción por desborde del TMR0, es una interrupción interna.
  3. Por el cambio de estado en uno de los pines RB4, RB5, RB6 y RB7 del puerto B, son interrupciones externas.
  4. Al terminar la escritura de la memoria EEPROM del PIC, es una interrupción externa.

Otros microcontroladores PIC tienen muchas otras fuentes de interrupción.

INTERRUPCIONES CON EL PIC

En los siguientes enlaces se comentarán las características  de algunas de las interrupciones para el microcontrolador PIC, para su programación se utilizará lo descrito líneas arriba con el XC8.

.

Compartir: Share on Facebook1Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn0