Está en la página 1de 4

Interrupciones en el 8051

Las interrupciones son recursos muy empleados en programación de sistemas digitales, que permiten incluso
la emulación de sistemas multitarea.

Una interrupción es la detención temporal en la ejecución del programa principal, de la tarea principal, debido
a la aparición de un evento ante el cual el sistema digital debe responder de forma inmediata. La respuesta se
realiza en forma de ejecución de una función, llamada función de atención a la interrupción.

El 8051 básico tiene cinco fuentes de interrupción, mientras que la versión 8052 cuenta con seis. Todas estas
fuentes de interrupción son “enmascarables”, es decir, se pueden habilitar o no por software. Después de la
inicialización del microcontrolador, todas las interrupciones están inhibidas. El registro IE sirve para habilitar
o inhibir individualmente las fuentes de interrupción.

Fuentes de Interrupción
Las cinco fuentes de interrupción que posee el microcontrolador 8051 son:

Interrupciones externas INT0 e INT1


Las interrupciones externas son provocadas por eventos externos y son comunicadas al microcontrolador a
través de los niveles de tensión presentes en dos patillas del puerto 3. Estas interrupciones se denominan
INT 0 e INT 1 y se aplican respectivamente mediante las patillas P3.2 y P3.3 en los microcontroladores con
la estructura original del 8051. En otros nuevos microcontroladores, el programador puede configurar las
patillas a través de las que se provocan estas interrupciones.

Se puede definir que ocurra una interrupción externa ante una activación a nivel bajo (interrupción por nivel)
o por la detección de un cambio de estado de alto a bajo (interrupción por flanco negativo o de bajada). Para
definir el modo de activación de la interrupción se emplean los bits IT0 e IT1, que corresponden a los bits 0 y
2 respectivamente del registro TCON.

Otros dos bits del registro TCON reflejan el estado de estas fuentes de interrupción. Se trata de los bits IE0 e
IE1, que ocupan respectivamente los bits 1 y 3 de dicho registro. Estos dos bits se ponen a ‘1’ cuando se
satisface la condición de interrupción (nivel bajo o flanco de bajada según la configuración de la
interrupción) y, a continuación, si está habilitada la fuente de interrupción, la unidad de control tratará de
ejecutar la función de atención a la interrupción externa correspondiente.

Cuando se incia la llamada a esta función, el bit IE0 (o IE1) se vuelve a poner a ‘0’ automáticamente cuando
el evento detectado es un flanco de bajada. Por el contrario, si la interrupción es activo por nivel bajo, el
indicador IE0 (o IE1) permanece a ‘1’ mientras permanezca dicho nivel bajo.

Interrupciones de los Timers 0 y 1


Estas interrupciones son provocadas por el desbordamiento de los timers empleados como temporizadores o
contadores.

Los indicadores TF0 y TF1, que corresponden, respectivamente, a los bits 5 y 7 del registro TCON, reflejan
las peticiones de interrupción de estas dos fuentes. Estos indicadores se ponen a ‘1’ cuando se produce un
desbordamiento del contador (excepto en el caso del timer 1 funcionando en modo 3). Cuando se produce una
interrupción de un timer, el indicador (TF0 o TF1) se vuelve a poner a ‘0’ automáticamente en el momento de
la llamada a la función de atención a la interrupción.

1/4
Informática Industrial Interrupciones en el 8051

Puerto Serie
Hay dos indicadores que reflejan las peticiones de interrupción del puerto serie. Se trata de R1, que indica una
petición de interrupción debida a la recepción de un byte, o de T1, que indica que el buffer de transmisión está
libre y dispuesto para el envío de un nuevo byte. Estos indicadores no se ponen automáticamente a ‘0’ en el
momento en que se atiende a la interrupción. Los dos indicadores dan lugar a la misma interrupción por lo
que en la función de atención a la interrupción debe preguntarse cuál es el flag puesto a ‘1’ para actuar en
consecuencia. Es necesario, por tanto, que la puesta a ‘0’ de este indicador se realice por programa después de
dicha consulta.

Ejecución de una interrupción y tabla de vectores


Los indicadores de interrupción se muestrean durante el periodo S5P2 de cada ciclo de máquina y si en ese
momento está activado alguno de los indicadores, al final del siguiente ciclo el sistema de interrupciones
genera una llamada a la función correspondiente. Como se verá posteriormente, esta llamada puede
bloquearse si la unidad de control está atendiendo a una interrupción de igual o mayor prioridad.

Cuando el procesador acepta una petición de interrupción, se ejecuta una llamada automática a la función de
atención a dicha fuente de interrupción. Posteriormente pone a ‘1’ un indicador interno que señala que está en
curso una interrupción y finalmente, ejecuta la llamada.

La cabecera de la definición de la función de servicio de interrupción debe terminar en interrupt n, donde n


es el valor que aparece como tercera columna de la tabla siguiente. En la segunda columna se indica el flag
cuya activación indica a la unidad de control que existe una petición de interrupción pendiente de ser
atendida:

Fuente de interrupción Indicador Valor de n


INT0 IE0 0
Timer 0 TF0 1
INT1 IE1 2
Timer 1 TF1 3
Puerto Serie R1+T1 4
Timer 2 TF2+EXF2 5

Ejemplo de software de atención de interrupciones


El ejemplo que sigue se muestra cómo sería el código de un ejercicio muy simple donde se emplea la
interrupción externa INT0:

#include <reg51.h> // Simplemente suma 1 al puerto P1


P1 ++;
void main (void) { }
}
long int i;
//----------------------------------------------------------
IE = 0x81; --------------------------
TCON = 0x01; // Rutina de interrupción externa
//----------------------------------------------------------
P1 = 0; --------------------------

while (1) void Externa0_ISR (void) interrupt 0


{ {
// Establece un retardo P1 = 255 - P1;
for (i = 0; i < 10000; i++); }

2/4
Habilitación y prioridad de las interrupciones
Después de la inicialización del microcontrolador, todas las fuentes de interrupción están inhibidas debido a
que se han puesto a cero los bits del registro IE. El registro IE es un registro de función especial con dirección
0A8h. Al ser una dirección múltiplo de 8, sus bits son direccionables individualmente. Para poder utilizar el
mecanismo de interrupciones es necesario, por tanto, comenzar por habilitar la o las fuentes de interrupción
empleadas por la aplicación. La función de los 8 bits del registro IE se muestra a continuación.

AFh AEh ADh ACh ABh AAh A9h A8h


EA -- ET2 ES ET1 EX1 ET0 EX0

Posición Símbolo Función


IE.7 EA Inhibición de todas las interrupciones (al poner a 0)
IE.6 -- Sin función en el 8051 y en el 8052
IE.5 ET2 Interrupción del Timer 2
IE.4 ES Interrupción del Puerto Serie
IE.3 ET1 Interrupción del Timer 1
IE.2 EX1 Interrupción externa por la patilla INT1
IE.1 ET0 Interrupción del Timer0
IE.0 EX0 Interrupción externa por la patilla INT0

Es posible con una única instrucción modificar uno sólo de estos bits sin modificar el estado de los otros. Y
por otro lado, cualquiera que sea el estado de los otros 7 bits, es posible suspender completamente la atención
de interrupciones poniendo EA a 0. Posteriormente, la puesta a 1 de este mismo bit permite de nuevo la
atención de las interrupciones de acuerdo con el estado de los otros 7 bits.

Ejemplo

En un programa se desea atender las interrupciones procedentes del puerto serie y de una fuente externa
conectada a la patilla INT0.

En este caso se debería asignar a IE el valor binario 00010001B que prepara la atención de las dos fuentes
elegidas. Posteriormente la activación de EA permite la atención de las interrupciones, mientras que su
desactivación suspendería esta atención sin modificar IE.0 ni IE.4

Es recomendable dejar a ‘0’ los bits no utilizados (bit IE.6 e IE.5) para que el programa sea compatible con
microcontroladores 8052 u otros núcleos más modernos. En general, no han de habilitarse interrupciones que
no vayan a utilizarse

En el ejemplo, el microcontrolador puede atender a dos fuentes de interrupción. Es importante saber cuál de
estas dos fuentes sería atendida en caso de ser detectadas ambas en el mismo ciclo de máquina. El orden de
comprobación por defecto es:

IE0 prioridad más alta


TF0
IE1
TF1
R1+T1
TF2+EXF2 prioridad más baja

En el ejemplo anterior, si la aparición de ambas interrupciones coincide en el mismo ciclo de máquina, se


atenderá primero a la interrupción externa, y sólo cuando retorne de la misma, se atenderá a la provocada por
el canal serie.

3/4
Informática Industrial Interrupciones en el 8051

En el caso de de que la aparición suceda en ciclos de máquina diferentes, se atenderán por orden de aparición.

Modificación del orden de prioridades


Se puede modificar el nivel de prioridad implícito de las seis fuentes de interrupción atribuyendo a una o
varias de las mismas un nivel más alto de prioridad. Esta modificación se realiza programando los bits del
registro IP (“Interrupt Priority”). La puesta a ‘1’ de un bit de este registro da una prioridad mayor a las
peticiones provenientes de la fuente correspondiente que a las peticiones de fuentes de interrupción cuyos bits
de prioridad están a ‘0’.

El registro IP es un registro de función especial con dirección 0B8H. Sus bits son direccionables de forma
individual.

En caso de que dos indicadores de interrupción con igual nivel de prioridad se activen a la vez, la jerarquía
implícita determinada por la secuencia de comprobación es la que determina el orden en que se atienden estas
dos interrupciones.

BFh BEh BDh BCh BBh BAh B9h B8h


-- -- PT2 PS PT1 PX1 PT0 PX0

Posición Símbolo Función


IP.7 -- Reservado
IP.6 -- Reservado
IP.5 PT2 Prioridad de interrupción del Timer 2
IP.4 PS Prioridad de interrupción del Puerto Serie
IP.3 PT1 Prioridad de interrupción del Timer 1
IP.2 PX1 Prioridad de interrupción externa por la patilla INT1
IP.1 PT0 Prioridad de interrupción del Timer0
IP.0 PX0 Prioridad de interrupción externa por la patilla INT0

Si una interrupción con nivel de prioridad ‘1’ aparece durante la ejecución de la función de atención a una
interrupción de prioridad ‘0’, la ejecución de esta función es interrumpida y se atenderá a la interrupción de
nivel de prioridad superior.

4/4

También podría gustarte