Sei sulla pagina 1di 4

Apuntes de Microprocesadores.

Clase 13

INTERRUPCIONES

El proceso de entrada de datos en un sistema digital regularmente se implementa a través de dos procedimientos: polling o encuestas e
interrupciones.

En las encuestas el procesador escruta periódicamente y según una secuencia preestablecida el estado de todos los periféricos
que dependen del sistema; deteniéndose cuando es necesario a generar las respuestas o procedimientos que sean requeridos en cada
caso. La situación equivale a la de un docente que cesa en el flujo normal de una clase magistral para verificar (¡alumno por alumno!)
si alguien tiene alguna duda o desea hacer una acotación. Luego reanuda su clase magistral, pero de cuando en cuando repite el
procedimiento. Algunos de los asistentes a las clases tendrán participaciones, preguntas y aportes importantes, pero la mayor parte de
las veces, sólo unos pocos tendrán algo que decir, por lo que resulta una pérdida de tiempo y esfuerzo para el docente cuestionarlos a
todos individualmente. Se trata pues para el procesador, de una forma poco eficiente de lograr la interacción con los periféricos.

Mucho más eficiente es el procedimiento conocido como interrupciones. En este caso el procesador no se ocupa de los
periféricos hasta tanto, de manera excepcional, alguno requiera su atención. Para tal evento, un subprogrma especial tiene preparado el
algoritmo o solución particular para solventar la emergencia o requerimiento del periférico que solicita atención, se satisface la
circunstancia y luego se continúa con la labor principal que estaba en curso previamente. Siguiendo con la analogía de la clase
magistral el docente (procesador) se mantiene en el hilo de su discurso hasta que un alumno (periférico) levanta la mano para hacer
una pregunta o plantear una necesidad (interrumpe). El docente suspende momentáneamente su clase, enuncia la respuesta o
aclaratoria preparada (subprograma especial) y luego prosigue con su clase retomando el punto en el que la dejó suspendida. Es obvio
que este procedimiento es mucho más eficiente pues se dirigen los esfuerzos sólo donde se los requiere y si la necesidad llega a
plantearse.

Y ¿qué pasa si suceden varias solicitudes de interrupción simultáneamente? Entonces aplica la máxima del sabio alemán
Goethe: “Lo que importa más nunca debe estar a merced de lo que importa menos”. Un criterio de jerarquización debe privar al
momento de decidir a cuál dispositivo o periférico es necesario atender primero, luego podrá continuarse con aquellos que siguen en
orden de importancia.

El sistema de interrupciones de los PIC

El sistema de interrupciones de los PIC de la gama media (instrucciones de 14 bits) es bastante simple. Se prevén catorce causas
posibles para originarlas, de las cuales las más comunes son:

- Una señal externa introducida a través de RB0/INT


- Colmado (Overflow) en la cuenta del TMR0
- Transiciones en los bits RB7-RB4
- Cuando se culmina el proceso de conversión analógico digital

Para toda eventualidad se tiene definido un Vector de interrupciones en la posición cuatro (4) de la memoria de programa.
Cuando ocurre una interrupción se culmina la ejecución de la instrucción en proceso, se guarda en el Stack la dirección de la
instrucción que queda suspendida y se carga el PC con cuatro. El diseñador debe grabar en esa localidad un GOTO a la dirección
donde inicia la Rutina de Servicio de Interrupción (ISR).

Las interrupciones son atendidas si previamente se han activado el bit GIE de INTCON y el bit correspondiente al tipo de
interrupción por la cual se toma previsión. Los bits, resaltados en la figura 1, son:

- PEIE: Interrupciones de módulos “periféricos” (EEPROM, ADC, USART, etc.)


- TOIE: Interrupciones por desbordamiento del TMR0.
- INTE: Interrupciones externas a través del pin RB0.
- RBIE: Interrupciones por cambio de nivel en los bits RB7-RB4.

Wilmer Sanz F. 1
Apuntes de Microprocesadores. Clase 13

INTCON (0BH, 8BH, 10BH, 18BH)


GIE PEIE TOIE INTE RBIE TOIF INTF RBIF
bit7 bit0
Fig. 1. Bits para habilitación de interrupciones

Los restantes bits de INTCON son banderas que reflejan la ocurrencia concreta de una interrupción. TOIF, INTF y RBIF, adquieren el
valor uno cuando se generan las interrupciones por overflow en el TMR0, una transición alfa en RB0 o un cambio de nivel en los bits
altos del puerto B, respectivamente. Luego de atendida la interrupción, todas estas banderas deben colocarse en nivel cero por
software. La figura 2 muestra la lógica combinacional que permite administrar este sistema de interrupciones.

INTF
INTE GIE
RBIF
RBIE
Interrupciones
TOIF
TOIE
Varias
PEIE

Fig. 2. Sistema de Interrupciones en los PIC16F84 y 16C71

Las fuentes de interrupción identificadas como “Varias” en la representación simplificada de la figura 2, se configuran a
través de dos registros, el PIE1 y el PIE2. Los bits del PIE1 se especifican en la figura 3 y sus correspondientes Flags o banderas,
ubicados en el registro PIR1, en la figura 4.

PIE1 REGISTER (8CH)


- ADIE RCIE TXIE SSPIE CCP1IE TMR2IE TMR1IE

bit7 bit0
Fig. 3. Bits para habilitación de interrupciones

ADIE: Habilitación de interrupciones del Convertidor Analógico/Digital. El bit ADIF del PIR1 se activa cuando culmina una
conversión y genera una interrupción si el ADIE está activado.

RCIE: Habilitación de interrupciones por recepción de la USART. El bit RCIF del PIR1 se activa cuando el buffer de la
USART está lleno y genera una interrupción si el RCIE está activado.

TXIE: Habilitación de interrupciones por transmisión de la USART. El bit TXIF del PIR1 se activa cuando el buffer de la
USART está vacío y genera una interrupción si el TCIE está activado.

SSPIE: Habilitación de interrupciones por transmisión/recepción del puerto para modos de interconexión serial. El bit SSPIF
del PIR1 se activa cuando ha ocurrido una operación de comunicación serial SPI o I2C.

CCP1IE, TMR2IE, TMR1IE: Habilitación de interrupciones por causa delo módulo CCP1 (Captura, comparación y PWM) y
los Timers 2 y 1. Los bits correspondientes del registro PIR1 se activan cuando han ocurrido las condiciones culminantes en
el funcionamiento del módulo CCP1 y los Timers 1 y 2.

Wilmer Sanz F. 2
Apuntes de Microprocesadores. Clase 13

PIR1 REGISTER (0CH)


- ADIF RCIF TXIF SSPIF CCP1IF TMR2IF TMR1IF

bit7 bit0
Fig. 4. Bits para habilitación de interrupciones

Las restantes causas de interrupción se habilitan en el registro PIE2 (8DH) y se concretan con la activación de las
correspondientes banderas del registro PIR2 (0DH). Ellas son:

EEIE: Habilitación de interrupciones por culminación del proceso de escritura en la memoria de datos EEPROM. El bit EEIF
del PIR2 se activa cuando culmina la escritura de en la EEPROM de datos si el EEIE está activado.

BCLIE: Habilitación de la interrupciones por causas de colisiones en el bus de interconexión serial para los modos SPI e I2C.
El bit BCLIF se activa una colisión ocurre y el BCLIE está activado.

CCP2IE: Su funcionamiento es análogo al del CCP1IE.

La Rutina de Servicio de Interrupción (ISR) es, como su nombre indica, una rutina que incluye el código destinado a dar
respuesta a la eventualidad causante de la interrupción. Dos elementos deben estar presentes en toda ISR: una puesta a cero (reset) de
los bits TOIF, INTF, RBIF del registro INTCON y un retorno con la instrucción RETFIE (figura 5). Lo primero se debe a que el bit se
activa con la interrupción pero no se desactiva automáticamente; y lo segundo encuentra razón en el hecho de que esta instrucción, a
diferencia de RETURN, restaura el valor uno en GIE.

Configuración general GIE:=1 Resto del programa


Vector de Reset: GOTO Inic INTE (ADIE, TOIE, RBIE):=1
Vector de Int: GOTO ISR

Cuerpo de la ISR INTF (ADIF, TOIF, RETFIE


ISR RBIF):=0

Fig. 5. Elementos básicos de un programa con Interrupciones y de una ISR

Ejemplo. Manejo de Interrupciones externas

En el siguiente ejemplo se utiliza al PIC16F887 como un monostable que genera una ventana de 1ms cuando se introduce una señal de
disparo a través del terminal RB0. Tal señal genera una interrupción que es atendida llamando 10 veces a la rutina de retardo
implementada en el ejemplo anterior con el TMR0.

;*****************************************************************
;*** Monostable con salida de 1ms, basado en interrupciones ***
;*****************************************************************

#include p16f887.inc

; Definiciones particulares
RA0 EQU 0x0 ; Salida del generador de pulso.

ORG 0x4 ; Vector de interrupción


GOTO ISR

ORG 0x0 ; Vector de Reset

Wilmer Sanz F. 3
Apuntes de Microprocesadores. Clase 13

GOTO Main ; En 10 inicia el programa principal

ORG 0x10
Main BSF STATUS,RP0 ; Se escoge el banco 1
; para configurar
MOVLW b'11111110' ; Programación del Puerto A
MOVWF TRISA
MOVLW 0xFF
MOVWF TRISB
MOVLW 0x47 ;Pull-up´s del Puerto B habilitadas y Timer0 prescalado por 256.
MOVWF OPTION_REG
BSF STATUS, RP1 ; Banco 3
CLRF ANSEL ; No hay entradas analógicas
BCF STATUS,RP1
BCF STATUS,RP0 ;Se escoge el banco 0 para operar
BSF INTCON,GIE ;Habilitación de las Interrupciones
BSF INTCON,INTE ;Habilitación de interrupciones mediante RB0

Sinfin ; El programa principal no hace nada


GOTO Sinfin ; Solo espera interrupciones.

ORG 0x100 ; Ésta es la ISR


ISR MOVLW 0xA
BSF PORTA,RA0 ;Se enciende la salida durante 10 ms
CALL Retardo
BCF PORTA,RA0 ;Se apaga la salida
BCF INTCON,INTF ;Se resetea el señalizador de interrupción
RETFIE

;*** Rutina de Retardo ***

Retardo
MOVLW 0x3D
MOVWF TMR0
Ciclo BTFSS INTCON,TOIF
GOTO Ciclo
BCF INTCON,TOIF
RETURN

Actividades sugeridas:
- Simule el programa ejemplificado en el MPLAB y utilice los estímulos asíncronos para implementar la entrada en el bit RP0.

Bibliografía

- Microchip Technology Inc. (2007). Data Sheet del PIC16F8XX. Documento 41291D,
http://ww1.microchip.com/downloads/en/DeviceDoc/41291D.pdf [En línea] Último acceso: 29-09-2017
- Criollo, O. (1998). Laboratorio de Microprocesadores. Universidad de Carabobo

Wilmer Sanz F. 4

Potrebbero piacerti anche