image/svg+xml

Interrupciones

Las interrupciones pausan la ejecuci贸n del programa principal, llama a una Rutina de Servicio de Interrupci贸n (ISR). Luego continua con la ejecuci贸n del programa donde lo dej贸.

Las ISR son escritas en una direcci贸n de memoria llamada el Vector de interrupci贸n. Dependiendo del microcontrolador puede haber varios vectores de interrupci贸n.

Tipos de interrupciones

|||
|-|-|
|Reset|Algunos microcontroladores manejan su reset como interrupci贸n|
|Software|Hay condiciones especiales que al cumplirse durante la ejecuci贸n del c贸digo, generan una interrupci贸n|
|Hardware|Llegan por medio de los I/O del dispositivo|

Prioridad en las interrupciones

Las iterrupciones pueden, ellas mismas ser interrumpidas por otra interrupci贸n (interrupciones mascarables) de m谩s jerarqu铆a o no (interrupciones no mascarables).

Interrupciones en el PIC16F887

Cuenta con diferentes fuentes de interrupci贸n, TODAS del tipo NO mascarable.

Vector de interrupci贸n

Al tener la misma prioridad, el PIC cuenta con un solo vector de interrupci贸n y es la direcci贸n 0x0004 de la FLASH. Por eso, dentro de la ISR se debe preguntar por la fuente de la interrupci贸n.

En este microcontrolador, las interrupciones externas, pueden tardar hasta 4 c.m. para ejecutarse.

Permisos de interrupciones

Todas las fuentes de interrupci贸n requieren de un permiso individual de interrupci贸n. Dicho permiso termina en IE (Interrupt Enable). Ejemplo: ADIE.

Adem谩s, existe un permiso global de interrupciones que es el bit GIE del registro INTCON.

Algunas fuentes, adicionalemente, requieren de un permiso m谩s para interrumpir.

Mecanismo

Todas las fuentes cuentan tambi茅n con una bandera de interrupci贸n, que termina en IF (Interrupt Flag). La interrupci贸n se da cuando se levanta la bandera de interrupci贸n.

Cuando se ingres贸 a una instrucci贸n se utiliza la instrucci贸n RETFIE para retornar.

Proceso de interrupci贸n en el PIC16F887

  1. Levanta la bandera de interrupci贸n asignada.
  2. Termina la ejecuci贸n de la instrucci贸n en curso.
  3. Pone GIE en 0.
  4. Se guarda en la PILA el contenido del PC.
  5. El apuntador de la PILA se incrementa en 1.
  6. El PC se carga con la direcci贸n 0x0004.

Proceso de la instrucci贸n RETFIE

Cuando se hace RETFIE, tiene el mismo efecto que hacer:

  1. Decrementa en 1 al apuntador de la PILA.
  2. Carga al PC con el contenido de la PILA que se帽ala el apuntador de la PILA.
  3. Pone GIE en 0.

Nota importante

Las banderas de interrupci贸n *IF no se ponen en 0 de forma autom谩tica. Es obligaci贸n del programador ponerlas en 0 antes de retornar de la ISR.

Las interrupciones utilzan espacio en la PILA y por lo tanto reducen el n煤mero de subrutinas anidadas que se pueden hacer.

Al entrar a una subrutina se debe respaldar W, STATUS y PCLATCH.

Interrupci贸n por la terminal RB0/INT

La terminal RB0/INT puede ser fuente de interrupci贸n. Para eso se deben cumplir las siguientes condiciones:

Se puede configurar para activarse en flanco ascendente o descendente por medio del bit INTEDG (Interrupt Edge Select Bit) del registro OPTION_REG (Option Register). Donde:

Cuando ocurre la interrupci贸n, se levanta la bandera INTCON,INTF y entra en la interrpci贸n. De nuevo, la bandera la debe bajar el programador.

Interrupci贸n por el PORTB

Todo el puerto B puede ser fuente de interrupci贸n. Para configurarlo se debe colocar 1 en los bits correspondientes a la terminal del PORTB, con el registro IOCB.

As铆, se levanta la bandera INTCON,RBIF cuando se cambia cualquiera de los pines del PORTB y ocurre la interrupci贸n.