MICROCONTROLADOR PIC INTERRUPCIONES
El microcontrolador PIC se programa para que realice alguna tarea, el programa esta preparado para que se ejecute instrucción tras instrucción de forma ordenada dentro de un ciclo, a esto se llama el programa principal.
Las interrupciones del microcontrolador PIC son eventos que hacen que el programa principal se detenga para permitir que el microcontrolador PIC se dedique a realizar otras tareas que solo realizará si ocurre la interrupción, mientras no ocurra una interrupción el microcontrolador PIC solo realizará las instrucciones indicadas dentro del programa principal.
Al terminar de realizar la tarea encomendada al ocurrir la interrupción, el microcontrolador PIC vuelve al programa principal, vuelve a la instrucción donde se quedo al responder a la interrupción y el programa principal continuará normalmente.
Cada modelo de microcontrolador PIC está preparado para detectar algunos tipos de interrupciones, para ello el microcontrolador PIC cuenta con registros que se encargarán del control de las interrupciones, entre estos registros están los que permiten habilitar el uso de las interrupciones, y los que permiten detectar que se ha producido una interrupción, lo que nos deja conocer cual ha sido la causa de la interrupción.
MICROCONTROLADOR PIC INTERRUPCIONES CON EL XC8
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 que se programa en C/C++, se utilizará este programa porque facilita mucho la comprensión de la forma de utilizar los registros involucrados en el uso de las interrupciones del microcontrolador PIC.
Una vez que se comprenda el uso de las interrupciones, resulta mas fácil realizar otros programas dedicados a los microcontroladores PIC, de ahí la importancia de este tema, por ende nuestra recomendación es dedicarle mucho esfuerzo y aprender a usar las interrupciones.
Para habilitar el uso de las interrupciones con el microcontrolador PIC se utiliza el registro INTCON, cada microcontrolador PIC tiene su registro INTCON, algunos tendrán mas de uno, es necesario revisar la hoja de datos para ver en que caso 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.
El siguiente es el registro INTCON para el 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 del microcontrolador PIC además será necesario la utilización de otros bits y quizás de otros registros, esto dependerá del tipo de interrupción que se quiera habilitar, 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 que son 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 en el registro PIR están los bits que detectan cuando se ha producido la interrupción de esta manera se detecta la fuente que la ha provocado.
A los bits del registro PIR se les conoce como banderas de aviso de 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 en 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 microcontrolador 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:
void __interrupt() nombre(void){//rutina de atención a las interrupciones
if(bandera_de_interrupcion1==1){
//tareas a realizar durante la interrupción1
bandera_de_interrupcion1=0;//muy importante para que se sigan produciendo interrupciones
}//fin de la interrupción1
if(bandera_de_interrupcion2==1){
//tareas a realizar durante la interrupción2
bandera_de_interrupcion2=0;//muy importante para que se sigan produciendo interrupciones
}//fin de la interrupción2
}//fin de la rutina de atención a las interrupciones
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 a 0 la bandera para que siga detectando el tipo de interrupción que puso la 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 de interrupción.
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 en lo 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:
- Al provocar un cambio de estado en el pin RB0/INT, esto viene a ser una interrupción externa.
- Cuando el temporizador TMR0 alcanza su valor máximo que es 255, acto seguido 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.
- Por el cambio de estado en uno de los pines RB4, RB5, RB6 y RB7 del puerto B, son interrupciones externas.
- .Al terminar la escritura de la memoria EEPROM del PIC, es una interrupción externa.
Publicar un comentario