MICROCONTROLADOR PIC INTERRUPCIONES

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.

microcontroladores pic interrupciones pic16f877a


El  siguiente  es  el  registro  INTCON  para el PIC18F4550.

microcontroladores pic interrupciones 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:

  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 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.
  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.

SIGUIENTE:

Publicar un comentario

Copyright © Electricidad y Electrónica. Designed by OddThemes