Download pdf - Microcontrolador 8051

Transcript
Page 1: Microcontrolador 8051

INSTITUTO TECNOLOGICO DEL MAR, Mazatlán

APUNTES DE LA MATERA DE:

MICROPROCESADORES I

DEPARTAMENTO DE INGENIERIA ELECTRONICA

PROF: ING: RUFINO J. DOMINGUEZ ARELLANO

Page 2: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 2 Ing. Rufino Domínguez Arellano

1.1. CARACTERISTICAS DE LA FAMILIA 51 Dentro de los modelos de la familia 51 de microcontroladores (Tabla 1.1) se encuentran los 8XX2 y 8XX1, que presentan las siguientes diferencias básicas:

• 8032/31 → Memoria de programas externa- • 8052/51 → Memoria de programas interna en ROM. • 8752/51 → Memoria de programas interna en EPROM.

Tabla 1.1

Los modelos más populares de los microcontroladores de INTEL son los 8XX1 y más concretamente los 8X51, que han dado nombre a la familia, Las diferencias entre la serie 8XX1 y 8XX2, y en concreto, entre los 8051 y 8052 aparecen en la Figura 1.1.

El 8052 presenta una mayor capacidad de memoria y un Timer más que el 8051, al margen de dichas diferencias y de algunas otras, se puede afirmar «que todo programa que funcione en un 8051 lo hará en un 8052».

1.2. CARACTERISTICAS DE LOS MICROCONTROLADORES 8052/8051. La anterior Figura 1.1 y, de manera mas detallada, la Figura 1.2, muestran los diagramas generales en bloques de los Microcontroladores 8052/8051. Las características generales son las siguientes:

• CPU de 8 bits.

Page 3: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 3 Ing. Rufino Domínguez Arellano

• Procesador booleano (operación sobre bits). • 4 puertos de 8 bits. • Para el 8052,256 bytes de memoria interna RAM útil para el usuario y 384

bytes en total considerando el área de los registros especiales (SFR). Para el 8051, 128 bytes útiles para el usuario y 256 bytes incluyendo el SFR.

• 8K octetos de ROM (8052) o EPROM (8752). 4K para el 8X51. • Espacio de memoria de 64K para programa externo. • Espacio de memoria de 64K para datos externos. • El 8052 contiene tres contadores-temporizadores (timers). El 8051 presenta

dos timers. • Comunicación asíncrona “full-duplex”. • 6 fuentes de interrupciones con niveles de prioridad (5 para el 8051).

o 2 interrupciones externas. o 3 interrupciones de los timers (2 para el 8051 ) o 1 interrupción de la comunicación serie.

• Oscilador interno.

1.3. TERMINALES DE LOS MICROCONTROLADORES 8052/8051

La figura 1.3 muestra la distribución de terminales del procesador 8051, típica del resto de esta familia de microcontroladores.

Page 4: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 4 Ing. Rufino Domínguez Arellano

Vcc Alimentación positiva de 5 VDC Vss Conexión a tierra. Puerto 0 (P0) Puerto de entrada/salida. Como salida soporta 8 cargas TTL –

LS ( el resto de los puertos solo soporta 4). Si se maneja memoria externa, este puerto multiplexea en el tiempo el bus de datos y la parte baja del bus de direcciones. También recibe los bytes de código durante la programación del dispositivo, y salen por este puerto los códigos durante la verificación de la memoria de programa interna.

Puerto 1 (P1) Puerto de entrada/salida programable. También recibe la parte

baja de las direcciones durante la programación y verificación de la memoria de programa interna. En el 8052, los bits P1.0 y P1.1 son usados por el Timer 2.

Page 5: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 5 Ing. Rufino Domínguez Arellano

Puerto 2 (P2) Puerto de entrada/salida programable. También emite la parte alta del bus de dirección en los accesos a memoria externa con direccionamiento de 16 bits. También recibe la parte alta de la dirección durante la programación y verificación de la memoria de programa interna.

Puerto 3 (P3) Puerto de entrada/salida programable. Además, cada bit de

este puerto tiene las funciones especiales que se muestran en la tabla 1.3.

Figura 1.3

Page 6: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 6 Ing. Rufino Domínguez Arellano

_____ ALE/PROG ALE (Address Latch Enable) Este pin genera un pulso para

latchear la parte baja del bus de direcciones durante los accesos a memoria externa. PROG es usada durante la programación del dispositivo como entrada de los pulsos de programación.

_____ PSEN (Program Store Enable) Esta es la señal de strobe para leer en

la memoria de programa externa. Sirve para diferenciar la memoria externa de programa de la memoria externa de datos. No se activa durante el acceso a memoria interna de programa.

__ __ EA/Vpp EA (External Access) Entrada. Cuando se mantiene en nivel

alto, se ejecuta solo el programa de la memoria de programa interna, a menos que el contador de programa exceda de 1FFF (8 K) para el 8052 y de 0FFF (4 K) para el 8051. Si EA se mantiene a nivel bajo, siempre se ejecutará el programa de la memoria externa, independientemente de la dirección del programa. Vpp es la tensión de programación, aplicada solo durante la programación de la memoria de programa interna.

XTAL1 y XTAL 2 Entrada y salida respectivamente del amplificador inversor que

forma parte del oscilador interno. Se puede conectar a estas terminales un cristal de cuarzo, tal como indica la figura 1.5

Para que el microcontrolador trabaje sincronizado con un reloj externo, se pueden conectar XTAL1 y XTAL2 como se muestra en la figura 1.6.

Page 7: Microcontrolador 8051

El Microcontrolador 8051 CAP 1

ITMAR Mazatlán 7 Ing. Rufino Domínguez Arellano

RESET Señal de inicialización del sistema. Un nivel alto aplicado a este terminal, durante cierto tiempo, provoca que el microcontrolador pase a su estado inicial.

Page 8: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 8 Ing. Rufino J. Domínguez Arellano.

CAPITULO 2

Organización de la memoria en los Microcontroladores 8052/8051

2.1. MEMORIA DE PROGRAMAS Y DATOS Los Microcontroladores 8052/8051 tienen separados los espacios de direcciones para memoria de programas y memoria de datos (Figura 2.1).

La memoria de programas sólo puede ser leída y tiene como máximo 64K. En el 8052 la memoria de programas interna es de 8K y en el 8051 de 4K. La señal de autorización de lectura en la memoria de programas externa es PSEN. El pin EA del Microcontrolador 8052 puesto a VCC indica que el puntero de programa busca direcciones desde la posición de memoria 0000H hasta la 1FFFH de la memoria interna y de la 2000H ala FFFFH de la memoria externa mientras que en el 8051 busca en la memoria interna de la dirección 000H hasta 0FFFH y en la externa de la 1000H a la FFFFH. Si el pin EA es puesto a VSS, la búsqueda de direcciones del programa se dirige a la memoria externa en todo momento.

Page 9: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 9 Ing. Rufino J. Domínguez Arellano.

La memoria de datos puede ocupar, si se desea, un espacio separado de la memoria de programas. La memoria de datos admite operaciones de lectura y escritura y, como se puede ver en la Figura 2.1, puede ser interna o externa y puede direccionar, como la memoria de programas, hasta 64K. La CPU genera las señales RD (read) y WR (write) para leer o escribir en la memoria de datos externa. Como anteriormente se decía, la memoria de programa y la memoria de datos pueden coexistir en el mismo espacio de direcciones o en espacios separados; en el primer caso se dice que la memoria es combinada y en el segundo segregada. La memoria combinada se obtiene aplicando las señales RD y PSEN a una puerta lógica AND y utilizando la salida de la puerta como strobe del chip de memoria externa de programas y datos. En la Figura 2.2 se pueden observar gráficamente estos conceptos.

2.2. MEMORIA DE PROGRAMAS En la Figura 2.3, se observa la división de la memoria de programas, según se considere mixta (interna y externa) o completamente externa. En la parte baja de la memoria de programas se encuentran ciertas posiciones de memoria especiales para el tratamiento de las rutinas de interrupciones. En la Figura 2.4 se asignan las posiciones fijas de la vectorización de estas interrupciones, así la posición de memoria 0000 corresponde al RESET y el resto figura señalado al margen.

Page 10: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 10 Ing. Rufino J. Domínguez Arellano.

Como se puede observar en la Figura 2.4, el intervalo fisico entre dos interrupciones es de 8 bytes, espacio capaz para albergar una pequeña rutina, pero si éste no fuera suficiente se desviaría el contador de programa (PC) mediante una instrucción de salto (JMP) a una zona amplia de la memoria de programas capaz de contener dicha rutina.

Figura 2.4

Se ha dicho anteriormente que la memoria de programa puede ser interna (en el propio microcontrolador) o externa (en otro chip). La selección se realiza por hardware, con la señal EA (Extern Access), poniendo este pin a VCC o a VSS respectivamente. La configuración del hardware para que el 8052/8051, como

Page 11: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 11 Ing. Rufino J. Domínguez Arellano.

microprocesador, utilice como memoria de programa la memoria externa, se muestra en la Figura 2.5.

Se observa en la figura 2.5 que las 16 líneas de dirección corresponden al Puerto 0 al Puerto 2, que están dedicados al bus de direcciones; aun más, el Puerto P0 sirve como bus de direcciones y bus de datos, multiplexados en el tiempo. Esta operación, característica de la familia de «micros» de Intel, se realiza de la forma siguiente:

--El Puerto P0 emite el «byte bajo» de la «palabra» del contador de programa (PCL). Una vez estabilizada la señal sobre P0, la señal ALE (Address Latch Enab!e) introduce esta dirección dentro del dispositivo latch 74LS373, que pasa a apuntar la dirección en la memoria externa de programas. Al mismo tiempo, la parte alta del contador de programa (PCH) se emite por P2. Entonces PSEN autoriza la lectura de código de instrucción a través del puerto P0. En la figura 2.6(A) se muestra un cronograma de esta operación.

Page 12: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 12 Ing. Rufino J. Domínguez Arellano.

Las secuencias de búsqueda/ejecución son las mismas, sea la memoria de programas interna o externa al microcontrolador; es decir, los tiempos de ejecución no dependen de que se utilice la memoria interna o externa. La Figura 2.6 muestra el cronograma de las señales implicadas en la secuencia de búsqueda, cuando la memoria de programas es externa. La señal PSEN se activa dos veces por ciclo máquina, para autorizar la lectura en la memoria de programas. Si se produce un acceso a la memoria de datos, como se muestra en la Figura 2.6(B), no se emiten los dos impulsos PSEN, puesto que el acceso a la memoria de datos no los necesita. Más bien utiliza las señales RD (lectura) y WR (escritura). Estas señales son generadas automáticamente cuando el nemónico correspondiente al código de instrucción termina en la letra X. Observe cómo el acceso a la memoria de datos toma dos ciclos más de bus que la memoria de programas. La Figura 2.6 muestra los cronogramas relativos a ambas secuencias de acceso, destacando la emisión de direcciones por parte de P0 y P2, y las señales ALE y PSEN. La señal ALE se utiliza para <latchear> el «byte bajo» de direcciones dentro del latch que se dibuja en las Figuras 2.5 y 2.7. Cuando la CPU está ejecutando un programa en la memoria interna, PSEN no se activa y las direcciones no se emiten por los puertos.-Sin embargo ALE se sigue emitiendo dos veces por cada ciclo máquina, pudiendo ser utilizada como señal de reloj externo; no obstante, como se puede ver en la Figura 2.6(B), cuando se accede a un operando utilizando la instrucción MOVX, la señal ALE desaparece. En la Figura 2.6(B) se puede observar cómo se realiza un acceso a la memoria externa de programas para tomar una instrucción y en el segundo ciclo se accede

Page 13: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 13 Ing. Rufino J. Domínguez Arellano.

a la memoria de datos externa para tomar un dato. En este caso observar que no se activa PSEN.

Page 14: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 14 Ing. Rufino J. Domínguez Arellano.

2.3. MEMORIA DE DATOS El 8052/8051 puede direccionar hasta 64 KB de memoria de datos externa. (La instrucción «MOVX» se utiliza para acceder a los datos de la memoria externa.) Si utiliza 16 bytes de dirección hágalo con MOVX @ DPTR, y si utiliza 8 bytes, MOVX @ Ri. La Figura 2.7 muestra la configuración para acceder a 2 KB de memoria de datos externa. En este caso la CPU tiene el programa interno en la ROM. El Puerto 0 multiplexea en el tiempo direcciones y datos en la RAM, y tres líneas del Puerto 2 completan el direccionamiento dé los 2 Kbytes de RAM (memoria paginada). La CPU genera las señales de lectura (RD) y escritura (WR) que necesita la RAM externa. En la operación de lectura de un dato se podría relacionar el cronograma de la Figura 2.6(B) con la Figura 2.7. En la Figura 2.8, se puede ver el mapa de la memoria de datos. La memoria interna se encuentra dividida en tres bloques, los 128 bytes bajos, los 128 bytes altos y el espacio ocupado, en parte, por los Registros de Función Especial (SFR). Como se indica en la Figura 2.7, la memoria externa se puede direccionar utilizando las líneas de E/S del Puerto 2 a voluntad, en función de la cantidad de memoria a direccionar. Si el direccionamiento es de 8 bytes (no utiliza el Puerto 2), el contenido de P2 permanece durante todo el ciclo para utilizar la memoria

Page 15: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 15 Ing. Rufino J. Domínguez Arellano.

paginada. También se pueden utilizar 2 bytes de direcciones; byte bajo en el Puerto 0 y byte alto en el Puerto 2. Este es el sistema clásico que permite direccionar un máximo de 64 Kbytes. En la memoria de datos interna se puede acceder a un total de 384 bytes para el 8052 y a 256 bytes para el 8051 incluido el área de los registros especiales (SFR), combinando los bloques de memoria de 128 bytes con el modo direccionamiento.

A continuación, se va a analizar las tres áreas de memoria interna: ,

• Área de direccionamiento sólo indirecto (para el 8052). • Área de direccionamiento indirecto y directo. • Área de direccionamiento directo y zona SFR.

2.4. AREA DE DIRECCIONAMIENTO SOLO INDIRECTO (para el 8052) En la Figura 2.8 se observa que el área SFR y el de direccionamiento indirecto (80H a FFH) tienen las mismas direcciones. Sin embargo están separados por caminos de acceso diferentes, según el direccionamiento de las instrucciones*. Así, la instrucción: MOV 90H, #ABH

Page 16: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 16 Ing. Rufino J. Domínguez Arellano.

escribe ABH en la localización 90H de la memoria RAM de datos y concretamente (por utilizar direccionamiento inmediato) en el Puerto 1 (90H = P1 (port1)) del área SFR. En cambio, las instrucciones (en un 8052): MOV R0, #90H MOV @R0, #ABH escnben ABH en la dirección 90H de la memoria de dalos y por utilizar direccionamiento indirecto escribe en la media página que asoma detrás de la media página del SFR en la Figura 2.8. Después de la ejecución de ambos modos de direccionamiento, se hallará ABH en el registro imagen del Puerto 1 (P1) en el SFR y ABH en la dirección 90H (Figura 2.9).

2.5. AREA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO (8052/8051) Los 128 bytes a los que se puede acceder desde ambos direccionamientos, directo e indirecto, pueden ser divididos en tres segmentos (Figura 2.10). A continuación se explican brevemente las características de esta área.

Page 17: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 17 Ing. Rufino J. Domínguez Arellano.

• Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco Los registros se localizan desde la dirección 00H a 1FH (32 bytes). Después de la operación de inicialización del microcontrolador, aplicando un nivel alto a la terminal RESET (véase Apartado 2.7 de este capítulo), el banco operativo por defecto es el banco 0. La selección de otro banco de registros debe hacerse por software escribiendo en el registro de estado PSW (véase Tabla 2.1).

El RESET inicializa el Stack Póinter (SP) en la dirección de memoria 07H y se incrementa inmediatamente a la dirección 08H que es el primer registro R0 del segundo banco de registros. Con el fin de usar más de un banco de registros, el SP se puede inicializar en otra localización de memoria.

• Sub área direccionable bit a bit

Esta área tiene una longitud de 16 bytes (segmento 20H a 2FH). Cada uno de los 128 bits de este segmento se puede direccionar directamente (00H a 7FH). Los bits se pueden referir de dos formas diferentes, bien por sus direcciones (bits 00H a bits 7FH) o por los bytes que los contienen (20H a 2FH). Esto es, los bits 0 al 7 pueden ser referidos como los bits 20.0 a 20.7 y del 8 al F, como 21.0 a 21.7, etc. Cada uno de los 16 bytes de este segmento puede ser también direccionado como Byte.

Page 18: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 18 Ing. Rufino J. Domínguez Arellano.

• Sub área Scratch Pad

La memoria scratch pad se entiende como la memoria de un block de notas de rápido acceso, pero de escasa capacidad. Ocupa las posiciones 30H a 7FH. Es la memoria de trabajo (RAM) del usuario.

2:6. AREA DE REGISTROS O FUNCIONES ESPECIALES (8052/8051) La Tabla 2.1 muestra los registros especiales que utiliza el 8052/8051, así como sus direcciones. Además de la lista se procederá a dar una breve explicación de los mismos, considerando que un análisis más profundo corresponde hacerlo en los ejercicios de aplicación que se verán más adelante.

* Direccionable «bit a bi!», + Sólo para el 8052. Nota: Los números hexadecimales que, como cifra más significativa tienen un carácter alfabético, en algunas ocasiones y para evitar equívocos, van precedidos de la cifra «cero» (0),

Page 19: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 19 Ing. Rufino J. Domínguez Arellano.

ACC Acumulador: Es un registro de propósito general de los Microcontroladores 8052/8051 y, por su frecuencia de intervención, el más importante. En la programación de aplicaciones en lenguaje ensamblador se hará referencia a él como REGISTRO A. B Registro B: Está especializado en las operaciones de multiplicación y división, además de ser usado como registro de datos de propósito general. PSW Program Status Word: Contiene información del estado del CPU en cada ciclo de instrucción. El cuadro 2.1 muestra el formato de la palabra de estado.

SP Stack Pointer: Es un registro de 8 bits. Después del RESET, el SP se carga por defecto con la dirección 07H. Al ejecutar la primera instrucción PUSH o CALL el SP se incrementa a la posición 08H. DPL y DPH Data Pointer: Su propósito principal es contener la dirección del puntero de datos. Puede ser manipulado como un registro de 16 bits (DPTR) o como dos registros independientes de 8 bits.

Page 20: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 20 Ing. Rufino J. Domínguez Arellano.

P0, P1, P2 y P3 Puertos 0, 1, 2 y 3: Son los latchs de los puertos P0, P1, P2 y P3. SBUF Serial Data Buffer: Son dos registros buffer físicamente separados, pero a efectos de programación es el mismo, buffer de transmisión y buffer de recepción. Al escribir un dato en SBUF, el mismo comienza a transmitirse por la línea correspondiente del puerto serie. En el modo ‘recepción’ el dato que ingresa por la línea de entrada del puerto serie se registra en el buffer receptor (SBUF). TH0-TL0, TH1-TL1, TH2-TL2 Timer Registers: Son pares de registros de 16 bits, que pueden actuar como temporizadores o contadores. RCAP2H-RCA2PL Capture Registers: Este par de registros actúan como registros de “captura” del Timer 2, cuando este trabaja en “modo captura”. En este modo RCAP2H y RCAP2L responden a la transición del flanco en el pin T2EX, copiando los valores de TH2 y TL2 sobre ellos mismos. El Timer 2, en el modo de trabajo con «autorrecarga», obtiene los valores de recarga de estos registros. PCON Power Control Register: Para aplicaciones en donde la característica de consumo sea crítica, la versión CHMOS ofrece dos modos de trabajo de bajo consumo: el modo POWER DOWN y el IDLE. También ofrece, este registro, posibilidades de variar la velocidad de comunicación en el canal SERIE. TCON Timer/Counter Control Register: Este es un registro que controla fundamentalmente el modo de operación de los Timers 0 y 1 en relación con las interrupciones y los flancos de activación de las mismas. TMOD Timer /Counter Mode Control Register: Selecciona el Timer 0 o 1, el modo de operación (Modo 0, 1 o 2), si actúa como temporizador o como contador, etc. T2CON Timer/Counter 2 Control Register: Lo mismo que con TCON y TMOD, pero aplicado al Timer 2. IE Interrupt Enable Register: Es un registro para habilitar las interrupciones. Permite que se atiendan todas las interrupciones por el microcontrolador o sólo las que el usuario considere aceptables.

Page 21: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 21 Ing. Rufino J. Domínguez Arellano.

IP Interrupt Priority Register: Cada interrupción puede programarse individualmente en el nivel 1 o 2 de prioridad, poniendo a 1 o a 0 los bits de este registro. Una interrupción de bajo nivel de prioridad se puede interrumpir por otra de un nivel más alto. Una interrupción de alto nivel de prioridad no puede ser interrumpida por otra interrupción de un nivel más bajo (véase Capítulo 10). SCON Serial Port Control Register: Este registro se encarga de establecer los parámetros para la transmisión o recepción de datos en comunicación serie; así, si se trata de una transmisión o recepción, formato de la palabra (bit de start, bits de datos, bit de .Stop), velocidad, etc. Finalmente, en la Tabla 2.2 se hace .referencia al mapa .de memoria de los registros SFR. Los registros que pertenecen a la columna izquierda de la tabla están en un área direccionable «bit a bit» que corresponde a las direcciones 80H, 88H, 90H, 98H, .:., F8H.

Los registros que están encerrados entre paréntesis pertenecen solamente al 8052.

2.7. OPERACION RESET Conectado al «pin» (9) de entrada RST=RESET se encuentra un Schmitt Trigger que va a propiciar la operación de inicialización de los dispositivos internos del microcontrolador.

Page 22: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 22 Ing. Rufino J. Domínguez Arellano.

Un RESET se alcanza cuando se mantiene en el pin RST, un nivel lógico alto al menos durante dos ciclos máquina (24 períodos de reloj), mientras el oscilador está funcionando. La CPU responde generando un RESET interno, según el cronograma mostrado en la Figura 2.12. La señal externa de RESET es asíncrona al reloj interno. El pin RESET es muestreado durante la fase 2 del estado 5 de cada ciclo máquina. Los pines de los puertos mantendrán sus actividades durante 19 períodos de reloj, después de que el nivel lógico del pin RESET haya sido detectado; esto es, durante 19 a 31 períodos de reloj, después de haber aplicado externamente un nivel lógico alto al pin RESET . El algoritmo del RESET interno escribe «ceros» en todos los registros del SFR, excepto en los latches de los puertos, el Satck Pointer y el registro SBUF. Los latches de los puertos son inicializados a FFH (quedan programados para la lectura), el Stack Pointer a 07H y el SBUF es indeterminado. En la Tabla 2.3 se muestran los valores que toman los registros después de un RESET.

Page 23: Microcontrolador 8051

El Microcontrolador 8051 CAP 2

_________________________________________________________________________ ITMAR Mazatlán 23 Ing. Rufino J. Domínguez Arellano.

El RESET automático del microcontrolador se produce al aplicar la tensión de alimentación VCC al terminal RST a través de un capacitor de 10 µF y una resistencia de 8.2 KΩ, como indica la figura 2.13, procurando que el tiempo de flanco de subida de la alimentación no exceda de un milisegundo y el comienza de los pulsos del reloj no exceda de 10 mS.

Page 24: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 24 Ing. Rufino J. Domínguez Arellano

CAPITULO 3 Programación de los Microcontroladores 8052/8051 (I)

3.1. INTRODUCCION Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones están optimizadas para el control de aplicaciones en 8 bits. Están provistas de una buena variedad de modos de direccionamiento para acceder a la memoria RAM de datos internos del microcontrolador, facilitando operaciones del tipo byte sobre una pequeña estructura de datos. Permiten la manipulación directa de control y procesamiento booleano de estructuras de datos del tamafio de un bit. En esta breve introducción se estudiarán los modos de direccionamiento y el juego de instrucciones agrupadas por especialidades de esta manera:

• Instrucciones aritméticas. • Instrucciones lógicas. • Instrucciones para la transferencia de datos en:

a) RAM interna. b) RAM externa.

• Instrucciones para el tratamiento de tablas. • Instrucciones booleanas. • Instrucciones de salto.

3.2. MODOS DE DIRECCIONAMIENTO

• Direccionamiento directo El operando se especifica en la instrucción por un campo de dirección de 8 bits. Sólo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de esta forma. Ejemplo:

ADD A,3BH ; es decir, suma (ADD) el contenido del acumulador con el contenido de la posición de memoria (38):

A ← (A) + (38)

Nota: Un registro o número entre paréntesis se refiere al contenido. Asi: (A) es el contenido del acumulador. (38) es el contenido de la posición de memoria 38.

Page 25: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 25 Ing. Rufino J. Domínguez Arellano

• Direccionamiento indirecto La instrucción especifica un registro que contiene la dirección del operando. Tanto la memoria RAM interna (256 bytes/128 bytes) como la externa se pueden direccionar indirectamente. Los registros para direccionar sobre el mapa de 8 bits pueden ser el R0 y R1 del banco de registros seleccionado, o el Stack Pointer. El registro para direccionar sobre 16 bits sólo puede ser el Puntero de Datos (Data Pointer = DPTR). Ejemplo:

ADD A,@R0 ; Así, si (RO)=38H la operación será: A ← (A) + (38) Igual que en el ejemplo anterior-

(@) es el identificador del direccionamiento indirecto.

• Direccionamiento por registro Los Microcontroladores 8052/8051, como se ha visto, contiene cuatro bancos de registros seleccionados por los bits 3 y 4 del PSW, y cada banco de registros tiene ocho registros del R0 al R7 (véase Apartado 2.5). El propio código de operación de la instrucción especifica con qué registro se opera; es decir, cuando la instrucción es ejecutada se accede a uno de los 8 registros del banco seleccionado. Ejemplos:

MOV Rn,A ; operación: (Rn) ← (A) MOV Rn, #dato ; operación: (Rn) ← #dato

• Direccionamiento implícito Algunas instrucciones especifican, implícitamente, el registro sobre el que van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando porque está implícito en el código de operación. Ejemplos:

INC A ; Incrementa el contenido del acumulador: A ← (A) + 1

INC DPTR ; Incrementa puntero de datos: DPTR ← (DPTR) + 1

Page 26: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 26 Ing. Rufino J. Domínguez Arellano

• Direccionamiento inmediato Al código de operación le sigue una constante en la memoria de programas. Ejemplo:

MOV A, #255 ; Carga en el acumulador el número decimal 255. Generalmente se expresan ; ; en hexadecimal:

MOV A, #FFH ; o en binario:

MOV A, #11111111B

• Direccionamiento indexado Este direccionamiento sólo es posible en la memoria de programas y sólo permite la lectura. Es utilizado para la lectura de tablas. Un registro base de 16 bits (el DPTR o el contador de programa) apunta a la base de la tabla y el contenido del acumulador es el offset que permite acceder a la lectura de esa posición de la tabla. Es decir, la dirección de la tabla que se va a acceder está formada por la suma del acumulador y el puntero base. Se puede utilizar otro tipo de direccionamiento indexado en las instrucciones de salto. En este caso la dirección de destino del salto se calcula como la suma del puntero base y el dato del acumulador.

3.3. CICLO DE INSTRUCCION La ejecución de un ciclo de instrucción comienza en el estado 1 del ciclo máquina, cuando el código de operación es almacenado en el Registro de Instrucción. (Para comprender este apartado tener a la vista la Figura 3.1 y la Tabla 4.5, Set de Instrucciones.) Como norma general, una instrucción requiere de uno q más ciclos máquina, en función de:

a) El código de operación Por ejemplo, la instrucción INC A (Figura 3.1 A) tiene 1 byte de instrucción y

requiere 1 ciclo máquina, la instrucción INC DPTR, también, de 1 byte de instrucción requiere de 2 ciclos máquina (Figura 3.1 C) y la instrucción MUL AB requiere de 4 ciclos máquina para su total ejecución y ocupa 1 byte en la memoria.

b) El número de bytes

Page 27: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 27 Ing. Rufino J. Domínguez Arellano

Por ejemplo, la instrucción MOV A, #data tiene 2 bytes de instrucción y requiere de 1 ciclo máquina (Figura 3.1 B). En cambio la instrucción MOV direct, # data al constar de 3 bytes necesita de 2 ciclos máquina. Esto no ocurre siempre, es decir, a más bytes más ciclos máquina, como puede verse en la Figura 3.1 B correspondiente a la instrucción MOV A, #data y en la Figura 3.1 D MOVX A,@Ri, la primera instrucción tiene 2 bytes y la segunda sólo 1. en cambio la primera requiere 1 ciclo máquina y la segunda 2.

Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del número de bytes y ciclo de instrucción se ha editado la Tabla 4.5 con el set completo de instrucciones. Cabe destacar, también, en la Figura 3.1, que en cada ciclo máquina se producen 2 accesos a la memoria, el primero, si es comienzo de ciclo de instrucción, siempre leerá el código de operación, el segundo, que normalmente se descarta, se utiliza para leer el segundo byte, operando de la instrucción, como ocurre en la Figura 3.1 B.

3.4. TIPOS DE INSTRUCCIONES El set de instrucciones del 8052/8051 se puede dividir según las especialidades:

• Instrucciones aritméticas. • Instrucciones lógicas. • Instrucciones de transferencia de datos. • Instrucciones booleanas • Instrucciones de salto.

Las instrucciones aritméticas, lógicas, de transferencia y de salto son comunes a la mayoría de microprocesadores. Los microcontroladores tienen un área especial de aplicación, que es el área del control de procesos; en este campo las operaciones están orientadas, muy a menudo, al bit. Los microcontroladores leen, procesan, escriben e intercambian información con los sistemas exteriores, en formato «bit a bit> o «palabra a palabra». Un procesador booleano con un set de instrucciones booleanas muy completo se encarga de realizar este tipo de operaciones, que, como ya hemos dicho, están «orientadas al bit>. Esta particularidad, así como su inmunidad al ruido eléctrico, le hacen valioso en el mundo del control de procesos industriales

Page 28: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 28 Ing. Rufino J. Domínguez Arellano

3.5. INSTRUCIONES ARITMETICAS. En la tabla 3.2, se muestra el menú de las instrucciones aritméticas del 8051. Se indican en la tabla los diferentes modos de direccionamiento que se pueden usar en cada caso y los indicadores de estado que son afectados. Los tiempos de ejecución que se indican en la tabla están evaluados sobre una frecuencia de relo de 12 MHz.

Page 29: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 29 Ing. Rufino J. Domínguez Arellano

La instrucciónb MUL AB multiplica el contenido del acumulador con el dato situado en B y el producto, de 16 bits, aparece en los registros B:A (sobrescribe los operandos) La instrucción DIVAB divide el contenido del acumulador con el dato del registro B, apareciendo el resultado en A (el cociente) y B ( el residuo).

3.6 INSTRUCCIONES LOGICAS. La tabla 3.3 muestra la lista de operaciones lógicas, modos de direccionamiento disponibles e indicadores de estado. Observe que en este grupo se incluyen las instrucciones de rotación a la izquierda y a la derecha.

Page 30: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 30 Ing. Rufino J. Domínguez Arellano

3.7. INSTRUCCIONES DE TRANSFERENCIA DE DATOS Se consideran tres modalidades, según la transferencia se realice sobre:

• La RAM interna. • La RAM externa. • La memoria de programa para el tratamiento de tablas. .

3.7.1. Transferencia de datos sobre la RAM interna En la Tabla 3.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de los espacios de memoria RAM interna, considerando los distintos direccionamientos para cada una de las instrucciones.

• La instrucción MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM interna o el espacio de localización del SFR (referencia Figura 2.8). Este tipo de instrucción permite la transferencia sin afectar el acumulador.

Page 31: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 31 Ing. Rufino J. Domínguez Arellano

Ejemplo:

; Antes de ejecutar la instrucción: ; (3A) = 35H ; (3D) = 78H

MOV3AH,3DH .. ; Despues de ejecutarla: ; (3A) = 78H ; (3D) = 78H

• La instrucción MOV DPTR, #data 16, permite transferir datos de 16 bits para inicializar el DPTR (Data Poimer = puntero de datos) en el tratamiento de tablas en la memoria de programas o para acceder a los datos de la memoria externa.

• La instrucción PUSH <src> actúa incrementando el SP (Stack Pointer =

puntero de la pila) y copiando el dato dentro de la pila. La instrucción POP <dest> actúa decrementando el SP y reponiendo el dato en su registro. La pila está situada dentro de la RAM interna, por defecto en el banco de registros 1 (véase Figura 2.11 ), pero puede posicionarse en el área SCRA TCH PAD, como se ha indicado en el capítulo anterior.

En resumen. éstas son las operaciones que realiza la unidad de control del microcontrolador:

PUSH <src> POP <dest> ---------------------------- --------------------------------

(SP) ← (SP) + 1 <dest> ← ((SP))

((SP)) ← <src> (SP) ← (SP) -1

Page 32: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 32 Ing. Rufino J. Domínguez Arellano

• La instrucción XCH A, <byte>, intercambia los datos del acumulador y del byte direccionado. La instrucción XCHD A, @Ri es similar a la anterior, pero sólo implica en el intercambio el nibble bajo; es una instrucción especializada en la manipulación de datos en el código BCD.

Ejemplos:

; Antes de ejecutar la instrucción: ; (A) = 37H y (2D) = 23H

XCH A, 2DH ; Después de ejecutarla: ; (A) = 23H y (2D) = 37H

; Antes de ejecutar la instrucción: ; (RO) = 2DH y (2D) = 37H y (A) = 23H

XCHD A, @R0 ; Después de ejecutarla: ; (A) =27H y (2D) = 33H

3.7.2. Transferencia de datos sobre la RAM externa La Tabla 3.5 muestra la lista de instrucciones sobre transferencia de datos que acceden a la memoria de datos. Sólo se puede utilizar el direccionamiento indirecto con este grupo de instrucciones.

Conviene observar que para este tipo de accesos siempre interviene el acumulador como registro fuente o destino. El usuario debe escoger entre el tipo de instrucción MOVX A, @Ri o MOVX @Ri,A (siendo Ri, bien el registro R0 o R1 del banco de registros seleccionado), direccionando con 8 bits, o bien utilizar un direccionamiento de 16 bits, usando el

Page 33: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 33 Ing. Rufino J. Domínguez Arellano

registro DPTR (MOVX A,@DPTR o MOVX @DPTR,A) y tener que sacrificar el Puerto 2, cuando sólo se va a utilizar un pequeño espacio de memoria RAM. Existe una solución intermedia que permite direccionar sólo unos pocos Kbytes de RAM externa, pero obteniendo algunas líneas hábiles del Puerto 2 como entradas y salidas (E/S). Esta es la solución que se mostró en la Figura 2.7 del Capítulo 2. De todas formas la solución adecuada debe ser función de las características que necesita la aplicación, suponiendo, en principio, que la implementación de la misma sobre la elección de los Microcontroladores 8052/8051 sea la correcta. Las líneas de control de lectura y escritura, RD y WR (pines 16 y 17), sólo son utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM externa, es obvio que se ganarán unas líneas extras de E/S (Figura 2.7). Ejemplo: Estudiar la secuencia de instrucciones. MOVX A, @Rl MOVX@RO,A

Nota: Este ejemplo se podría realizar con el Microcontrolador 8052, en el espacio de memoria

RAM interna Que se solapa con el área SFR. Si se refiere al Microcontrolador 8051, debería ser implementada esta operación, obligatoriamente. en el espacio de memoria externa. Naturalmente, si utiliza la memoria interna, las instrucciones que debe utilizar son MOV A., @R1 y MOV @R0, A.

¿Qué sucedería si se tuvieran que implementar estas instrucciones en la zona de memoria por encima de la dirección 2000H? Es decir:

Page 34: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 34 Ing. Rufino J. Domínguez Arellano

sustituida 85H → 2085H F3H → 20F3H

Se llegaría a la conclusión de que no se podrían procesar estas instrucciones, contando que los registros R0 y R1 no pueden direccionar por encima de la posición de memoria FFH. Pero aquí es donde entran en juego las instrucciones MOVX con el DPTR como operando. La sustitución, en el caso de tener que operar en el espacio de memoria comprendido entre 0000H y FFFFH, sería:

sustituida MOVX A, @Ri → MOVX A, @DPTR MOVX @Ri, A → MOVX @DPTR, A

Recuérdese que en la Tabla 3.4 hay una instrucción que es:

MOV DPTR, #data16 Con la que se podría acceder a todo el mapa de memoria.

3.7.3. Memoria de programas para el tratamiento de tablas La Tabla 3.6 muestra las dos instrucciones disponibles para la lectura de tablas en la memoria de programa (independientemente del algoritmo que pueda crear el usuario con otras instrucciones). Obsérvese que las tablas sólo pueden ser leídas y no actualizadas. El nemónico es MOVC (Mover Constante). Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la señal de control PSEN (pin 29). Obsérvese la Figura 2.5 del capítulo anterior .

Page 35: Microcontrolador 8051

El Microcontrolador 8051 CAP 3

_________________________________________________________________________ ITMAR Mazatlán 35 Ing. Rufino J. Domínguez Arellano

La primera instrucción de la tabla permite la lectura en tablas con accesos no superiores a 256. El acceso deseado es cargado en el acumulador, y el Data Pointer (DPTR) establece el puntero de comienzo de la tabla. La lectura es cargada dentro del registro acumulador.

MOVC A, @A+DPTR ; A ← ((A) + (DPTR)) La segunda instrucción es similar a la primera, salvo que es el Pogram Counter (PC) el que actúa como indicador de la dirección base de la tabla.

; PC ← (PC) + 1 MOVC A, @A+PC ; A ← ((A) + (PC))

Se presenta esta instrucción dentro de una subrutina, estando la tabla de información después de la instrucción de retorno de la subrutina (RET). Ejemplo: Se trata de demostrar el funcionamiento sobre una tabla de 4 datos. A la izquierda aparece el mapa de memoria del programa.

Page 36: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 36 Ing. Rufino J. Domínguez Arellano

CAPITULO 4 Programación de los Microcontroladores 8052/8051 (II)

4.1. INSTRUCCIONES BOOLEANAS. La familia de microcontroladores 8051 incluye un procesador booleano. Esto es, un procesador especializado en manipular bits. Existen dos áreas dxe memoria que permiten el acceso “bit a bit”; una corresponde al segmentote RAM interna entre las direcciones 20H a 2FH, en total 128 bits, y la otra corresponde a la primera columna de SFR señalada en la tabla 2.2. Esto es de gran utilidad ya que permite el verificar el estado de bits particulares de este grupo de registros. La tabla 4.2 muestra el conjunto de instrucciones que permiten la manipulación de bits.

Page 37: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 37 Ing. Rufino J. Domínguez Arellano

Ejemplos: A) Poner el Acarreo a 1 si el bit 0 del puerto P1 es ‘1’, el bit 7 del acumulador es ‘1’ y la bandera OV = 0. MOV C, P1.0 ; Carga el acarreo (C) con P1.0 ANL C, A.7 ; Operación AND entre el acarreo (C) y A.7

ANL C, /OV ; Operación AND entre el acarreo (C) y el ; complemento de OV

B) Efectuar la operación XOR entre los bits P0.0 y P1.1, dejando el resultado en P2.7. La instrucción XOR no existe en la familia 8051. Se debe implementar por algoritmo: MOV C, P0.0 ; Cargo P0.0 al acarreo.

JNB P1.1, SALTA ; Si P1.1 = 0, C tiene el resultado correcto, y entonces ; salta. Si P1.1 = 1 hay que complementar C.

CPL C SALTA: MOV P2.7, C

4.2. INSTRUCCIONES DE SALTO. Existen dos tipos de salto: los incondicionales y los condicionales. Ahora se detalla cada uno.

4.2.1. Instrucciones de salto incondicional. La tabla 4.3 muestra la lista resumida de saltos incondicionales.

Page 38: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 38 Ing. Rufino J. Domínguez Arellano

SJMP rel (Short Jump). La dirección destino del salto viene dada por un «offset relativo», igual que en las instrucciones de salto booleanas. La instrucción tiene dos bytes, correspondientes al código de operación y al byte de offset relativo. El rango del salto está limitado a -128 y+ 127 bytes relativos al primer byte siguiente a la instrucción de salto.

PC ← (PC) + 2 PC ← (PC) + rel

LJMP addr16 (Long Jump). La dirección destino del salto viene dada por una constante de 16 bits. La instrucción está formada por 3 bytes. 1 byte para el código de operación y 2 para la dirección del salto. Por tanto, la dirección de destino está ubicada dentro del área de los 64K de la memoria de programa.

PC ← addr16

AJMP addr11 (4bsolute Jump). La dirección destino del salto viene dada por una constante de 11 bits. La instrucción tiene 2 bytes, uno para el código de operación que también contiene en si misma 3 de los 11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la dirección de destino. Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 KB referenciado respecto a la siguiente instrucción a la del salto.

PC ← (PC) + 2 (PC.10-0) ← dirección de la página

JMP @A + DPTR Se trata de una instrucción de salto indirecto. Suma el acumulador con los 16 bits del puntero de datos DPTR y carga el resultado en PC. Esta será la dirección para el siguiente ciclo fetch. Ejemplo: Se trata de establecer cinco caminos de ramificación del programa, dependiendo de que el acumulador tome valores entre 0 y 4: MOV DPTR, #TABLA_DE SALTO ; Cargo direccion de tabla. MOV A, VALOR ; Valor entre 0 y 4 RL A ; Multiplico por 2. JMP @A + DPTR ; Se realiza el salto. - - - TABLA_DE SALTO: AJMP SALTO0 AJMP SALTO1 AJMP SALTO2 AJMP SALTO3 AJMP SALTO4

Page 39: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 39 Ing. Rufino J. Domínguez Arellano

4.2.2. Instrucciones de salto condicional. La tabla 4.4 muestra la lista de instrucciones de salto condicional. Estas instrucciones permiten al microcontrolador tomar decisiones en base a condiciones que resulten en el momento de ejecución del programa. En todos los casos, el salto es relativo, lo que significa que la dirección destino debe localizarse dentro de los -128 y +127 bytes a partir de la siguiente instrucción a la del salto condicional.

JZ y JNZ. Salta si es cero y salta si no es cero, respectivamente. En este procesador, puesto que no existe un indicador de CERO (como en otros micros), se examina directamente el registro acumulador. DJNZ Decrementa el byte indicado y salta si el resultado NO es cero. Útil para implementar bucles: MOV CONTADOR, #10

LAZO: ---------------- ---------------- ---------------- DJNZ CONTADOR, LAZO CJNE Compara y salta si no son iguales. Se puede comparar A con un byte, que puede ser con direccionamiento indirecto, directo, por registro o inmediato. O bien se puede comparar un byte con una constante.

Page 40: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 40 Ing. Rufino J. Domínguez Arellano

Ejemplos: A) Ejecutar las instrucciones de un lazo hasta que la lectura de un periférico en P0 coincida con la localidad de memoria 7FH. MOV A, P0

LAZO: ---------------- ---------------- ---------------- CJNE A, 7F, LAZO B) Implementar las comparaciones “mayor que” y “menor que”. Si de los dos bytes del campo de operandos, el primero es menos que el segundo, entonces el acarreo (C) se pone a ‘1’. Si el primer byte es mayor o igual que el segundo, el acarreo toma el valor ‘0’.

Page 41: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 41 Ing. Rufino J. Domínguez Arellano

4.3 “SET” DE INSTRUCCIONES DE LA FAMILIA 8051.

Page 42: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 42 Ing. Rufino J. Domínguez Arellano

Page 43: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 43 Ing. Rufino J. Domínguez Arellano

Page 44: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 44 Ing. Rufino J. Domínguez Arellano

Page 45: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 45 Ing. Rufino J. Domínguez Arellano

Page 46: Microcontrolador 8051

El Microcontrolador 8051 CAP 4

_________________________________________________________________________ ITMAR, Mazatlán 46 Ing. Rufino J. Domínguez Arellano

Page 47: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 47 Ing. Rufino J. Domínguez Arellano

CAPITULO 5

Introducción a la Programación en Lenguaje Ensamblador.

5.1. INTRODUCCION Se entiende por modelo de programación al conjunto de registros accesibles por el usuario que junto al set de instrucciones y los modos de direccionamiento constituyen las herramientas imprescindibles para el programador. El objetivo de este capítulo es mostrar estos tres aspectos combinados en varios ejercicios que puedan servir de ayuda al comienzo. Estos ejercicios corresponden a algunos de los modelos están dar que suelen ser habituales en las operaciones de control de procesos industriales pero no tienen el suficiente rigor como para poder ser incorporadas dentro de una librería de rutinas operativas profesionalmente; más bien tienen un sentido didáctico, objetivo principal de este capítulo. A continuación se proponen una serie de ejercicios, que irán distribuidos entre este capítulo y el siguiente. En total, 13 ejercicios que pueden servir de aperitivo; por esta razón, casi todos los nombres de los archivos de los ejercicios figuran con un número terminal, para que el lector pueda mejorarlos, como si de una nueva versión se tratara.

Ejercicio 5.1. Estructura condicional o alternativa Habitualmente el programa tiene que tomar decisiones en función del contenido de una variable (posición de memoria), de la información de un puerto de entrada o salida y/o del estado de un bit o registro. Se produce lo que se conoce por una bifurcación condicional o alternativa. En este ejercicio se trata de realizar la operación suma o resta de dos variables DA1 (78H) y DA2 (79H); si la localidad CHE (77H) es cero, suma el contenido de DA1 y DA2; si el contenido es distinto de cero, entonces resta DA1 de DA2. En cualquier caso, el resultado de la operación suma o resta se deposita en la localidad RES (7AH).

Page 48: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 48 Ing. Rufino J. Domínguez Arellano

%TITLE "ESTRUCTURA CONDICIONAL ECON0.ASM" ; ORG 0200H ; CHE EQU 77H DA1 EQU 78H DA2 EQU 79H RES EQU 7AH MOV DA1, #09H MOV DA2, #06H ; CARGA DE DATOS MOV A, CHE ; LEE LA LOCALIDAD 77H JNZ SAL1 ; SI ES CERO SUMA, SI NO SALTA A RESTA MOV A, DA1 ADD A, DA2 ; HACE LA SUMA MOV RES, A ; GUARDA RESULTADO MOV A, CHE JZ SAL2 SAL1: MOV A, DA1 SUBB A, DA2 ; HACE LA RESTA MOV RES, A ; GUARDA RESULTADO SAL2: NOP ; END

Ejercicio 5.2.- Estructura Iteractiva. Al menos una vez.

• Enunciado La localidad MEM (77H) puede contener números comprendidos entre 1 y 9, teniendo en cuenta esta característica, poner las posiciones de memoria comprendidas entre 61 H y 69H a FFH (todos los bits a uno), según esta relación: Si MEM=1 cargar con FFH la localidad 61H Si MEM=2 cargar con FFH las localidades 61H y 62H Si MEM=3 cargar con FFH las localidades 61H, 62H y 63H ========================================= Si MEM=9 cargar con FFH las localidades de la 61H ala 69H

Page 49: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 49 Ing. Rufino J. Domínguez Arellano

%TITLE “ESTRUCTURA ITERATIVA. ITERAO.ASM” ; ORG 0200H ;

MEM EQU 778 CON EQU 78H

MOV CON, MEM ; Se transfiere el contenido de MEM a CON SAL: MOV A, CON ; Cargar acumulador

ADD A, #60H ; Prepara el dir. indexado por software MOV R0, A ; Carga el puntero MOV @R0, # FFH ; Carga la localidad correspondiente

; Por lo menos carga una posición ; de memoria

DJNZ CON, SAL ; Decrementa CON y salta si CON

; no es CERO NOP END

Ejercicio 5.3.- Estructura iteractiva. Puede que ninguna vez.

%TITLE “ESTRUCTURAITERATIVA. ITERA1.ASM” ; ORG 0200H

; MEM EQU 77H CON EQU 78H

MOV CON, MEM ; Se transfiere el contenido de MEM a CON SALO: MOV A, CON ; Cargar acumulador

JZ SAL1 ; No efectúa ninguna acción si MEM=O ADD A, #60H ; Prepara el dir. indexado por software MOV RO, A ; Carga el puntero MOV @RO, #FFH ; Carga la localidad correspondiente DEC CON ; Decrementa CON JMP SALO ; Salto incondicional

SAL1: NOP END

Ejercicio 5.4.-Comprobación de bits. Método general La operación de comprobación de bits es una práctica habitual en el control de procesos. La secuencia del programa puede cambiar dependiendo del estado de un bit. Este ejercicio muestra uno de los métodos.

Page 50: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 50 Ing. Rufino J. Domínguez Arellano

• Enunciado Si el bit 2 de la localidad 28H (CHE) es igual a cero, entonces en la dirección 7FH (RES) se señalará poniendo todos sus bits a cero, y si el bit 2 es igual a uno, se señalará poniendo todos sus bits a uno. Es decir: 28.2 = 0 implica que: (7FH) ← 00H 28.2 = 1 implica que: (7FH) ← FFH

%TITLE “TESTEO DE BITS. TESBITO.ASM” ;

ORG 0200H ;

CHE EQU 28H RES EQU 7FH

MOV A, CHE ; Se carga el ACC con el byte a chequear ANL A, #04H ; Se detecta el bit. JZ SAL0 ; Si es igual a CERO salta MOV RES, #FFH ; Si no es igual a CERO, carga RES con unos

SALO: JNZ SALl ; ...y sale del proceso MOV RES, #00 ; Si es igual a CERO. carga RES con ceros

SAL1: NOP END

Ejercicio 5.5. Comprobación de bits. Método particular. Cuando se estudiaba el set de instrucciones del 8052/8051, en el Apartado 4.1. «lnstrucciones booleanas», se decía que había una zona de memoria interna direccionable bit a bit (20H a 2FH) y una serie de instrucciones que permitían esta forma de proceso (véase Tabla 4.2). Esta práctica es una muestra de este tipo de instrucciones. El problema es el mismo que el planteado en el ejercicio anterior, pero con la salvedad de utilizar el carry como variable referencia! para establecer las bifurcaciones.

%TITLE “TESTEO DE BITS. TESBIT1.ASM” ; ORG 0200H ;

CHE EQU 28H RES EQU 7FH

SETB C ; Se pone el "flag del Carry" a UNO ANL C, CHE.2 ; Se detecta el bit 28.2 o 42

Page 51: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 51 Ing. Rufino J. Domínguez Arellano

JNC SALO ; Si es igual a CERO salta MOV RES. # FFH ; Si no es igual a CERO, carga RES con unos

SALO: JC SALl ; ...y sale del proceso MOV RES, #00 ; Si es igual a CERO, carga RES con ceros

SAL1: NOP END

Ejercicio 5.6. Comprobación de bytes con la operación resta o sustracción En el control de procesos industriales la información que se recibe o envía es compleja y necesita de varios bits. En este caso, la información ocupará 8 bits, es decir, 1 byte. Este ejercicio, como los dos siguientes, corresponden al mismo planteamiento, pero utiliza procedimientos distintos de resolución. Así, este ejercicio emplea la operación resta o sustracción para detectar el byte que desencadena una secuencia de proceso distinta. En este y en los dos siguientes ejercicios el byte clave es 63H. Si el byte leído en la dirección 70H (CHE), es igual a 63H, pone el bit cero (b0) de la localidad 20H (RES) a cero, y si el byte leído es distinto a 63H, el bit cero (b0) de RES se pone a uno, es decir: Si (70H) = 63H implica que 20.0 ← 0 Si (70H) <> 63H implica que 20.0 ← 1

%TITLE “TESTEO DE BYTES. TESPAL0.ASM” ; ORG 0200H ;

CHE EQU 70H RES EQU 20H

MOV A, 7OH ; Se CARGA el ACC con la localidad a ; chequear.

CLR C ; Se pone el carry a 0 SUBB A, #63H ; Resta de localidad CHE la constante #63H JZ SALO ; Si es igual a CERO salta SETB RES.0 ; Si no es igual a CERO, carga con" 1'

; el bit0 del byte RES SAL0: JNZ SALl ; ...y sale del proceso

CLR RES.0 ; Si es igual a CERO, carga con "0" el ; bit0 del byte RES

SAL1: NOP END

Page 52: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 52 Ing. Rufino J. Domínguez Arellano

Ejercicio 5.7. Comprobación de bytes con la operación EXCLUSIVE-OR El enunciado de este ejercicio es el mismo que el apartado anterior, pero el procedimiento para la detección del byte que desencadena un cambio en el proceso se realiza con la operación EXCLUSIVE-OR (XRL). Efectivamente, si: 0 1 1 0 0 0 1 1 = LECTURA BYTE 0 1 1 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 0 = RESULTADO El resultado de la operación será cero, sólo si coinciden el byte leído y el byte de referencia. Si los bytes difieren al menos en un bit, comoen el siguiente ejemplo: 0 l 1 0 0 0 1 0 = LECTURA BYTE 0 1 l 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 l = RESULTADO

%TITLE “TESTEO DE BYTES. TESPAL1.ASM” ; ORG O2OOH ;

CHE EQU 7OH RES EQU 2OH

MOV A, 7OH ; Se CARGA el ACC con la localidad a ; chequear

XRL A, #63H ; Operación EX-OR entre ACC y la cte. #63H JZ SALO ; Si el resultado es igual a CERO salta SETB RES.O ; Si no es igual a CERO, carga con" 1"

; el pitO del byte RES SALO: JNZ SALl ; ...y sale del proceso

CLR RES.O ; Si es igual a CERO, carga con "O" el ; bitO del byte RES

SAL1: NOP END

Page 53: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 53 Ing. Rufino J. Domínguez Arellano

Ejercicio 5.8. Comprobación de bytes con la instrucción especial Los ejercicios 5.6 y 5.7 pueden ser resueltos también con macroinstrucciones como CJNE A,<byte>,rel estudiada en el apartado 4.2.2,<lnstrucciones de salto condicional>. Esta instrucción compara y salta si el resultado no es igual y su utilidad se puede ver a continuación. La eficacia de estas macroinstrucciones puede verse amenazada por la falta de flexibilidad, pero se puede fácilmente comprender que en este caso, que es habitual, resulta muy eficaz, por lo que es ventajosa su inclusión en el set de instrucciones.

%TITLE “TESTEO DE BYTES. TESPAL2.ASM” ; ORG O2OOH ;

CHE EQU 7OH RES EQU 2OH

MOV A, CHE ; Se carga ACC con el contenido de la ; variable CHE

CJNE A, #63H, SAL0 ; Compara el contenido del ACC con el ;dato #63H y salta a SALO. Si (ACC) es ; distinto de # 63H

CLR RES.O ; En el caso de que sean iguales, pone el ; bitO de la localidad 2OH a "CERO..

JMP SALl : ...y salta al final SALO: SETB RES.O ; Si no es igual a CERO, carga con " I " el

; bitO de la localidad 2OH y finaliza SAL1: NOP

END

Ejercicio 5.9.Movimiento de tablas de datos en la memoria externa. En el control de procesos se producen prácticas habitua]es de manipulación de datos, que el programador debe convertir, gracias a su técnica e ingenio, en rutinas eficaces. Así, el programador deberá elaborar rutinas para:

• El movimiento de datos de una posición a otra de memoria. • Captura y selección de datos del exterior a través de una unidad de E/S y

su colocación en memoria. • Búsqueda y selección sobre tablas de datos, etc.

Este apartado y el siguiente proponen ejercicios de proceso sobre bloques de datos. Para estas rutinas los 8052/8051 cuentan con unas instrucciones muy potentes que van a ser analizadas.

Page 54: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 54 Ing. Rufino J. Domínguez Arellano

Este ejercicio copia de una posición a otra de la memoria RAM externa un bloque de datos. Estos bloques, para simplificar el problema, son de tamaño fijo, de una página de 256 bytes, y comienzan en el primer byte de la página seleccionada. Así, en nuestro caso, si se quiere copiar un bloque de datos situado en las direcciones 0315H a 0380H (página 03H), a la página 05H, se copiaría todo el contenido de la página 03 (0300H a 03FFH) a la página 5 (0500H a 05FFH) y el bloque de datos situado inicialmente en las localidades 0315H a 0380H se encontrará copiado en las localidades 0515H a 0580H. A continuación se muestra el listado del programa fuente, tal como se ha previsto. Se invita al usuario a que realice una versión mejorada, indicando el rango de las direcciones acopiar (dirección inicial a dirección final) y la dirección de la primera localidad destino, incluso por encima del rango de una página de 256 bytes.

%TITLE “MOVIMIENTO DE TABLAS. MOTABLAO.ASM” ; ORG O2OOH ; ; RO es el puntero que recorre las páginas ; Rl es la página FUENTE ; R2 es la página DESTINO ; MOV RO, #OOH ; Inicializa el puntero

SALO: MOV DPL, RO ; Carga RO en el byte bajo del DPTR MOV DPH, Rl ; Carga R l en el byte alto del DPTR

; (FUENTE) MOVX A, @DPTR ; Lee byte apuntado por DPTR MOV DPH, R2 ; Carga el byte alto del DPTR

; (DESTINO) MOVX @DPTR, A ; Escribe byte apuntado por DPTR INC RO ; Incrementa puntero MOV A, RO ; Carga el ACC para la siguiente instrucción JNZ SALO ; Busca el siguiente byte en la página

; y si es CERO concluye porque ha ; terminado la página

NOP END

Ejercicio 5.10. Comprobación de tablas de datos En algunas ocasiones interesa conocer, para hacer un estudio estadístico, la cantidad de veces que aparece un determinado dato y en qué posición de la tabla de datos se encuentra localizado.

Page 55: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 55 Ing. Rufino J. Domínguez Arellano

Este ejercicio muestra cómo se realiza esta operación dentro de la memoria de programas de 8K, pudiendo hacer lo mismo en la memoria RAM externa o interna de los 8052/8051, naturalmente, habrá que hacer referencia a las instrucciones correspondientes, pues claramente se resaltaron en el estudio del set de instrucciones en el Apartado 3.7.1, la «Transferencia de datos sobre la RAM interna», en el Apartado 3.7.2, la «Transferencia de datos sobre la RAM externa», y en el Apartado 3.7.3, «Memoria de programas para el tratamiento de tablas». Concretamente este ejercicio trata de buscar un determinado dato, 23H, en una tabla cuyo rango es 0300H a 03FFH. Los resultados que se han de indicar son el número de veces que ha sido encontrado y la posición de memoria en que se encuentran estos datos. R2 = número de veces A partir de la localidad 60 = situación

%TITLE “CHEQUEO DE TABLAS DE DATOS. CHEQUEO.ASM” ; ORG O2OOH ;

POS EQU 6OH MOV RO, #POS ; Apunta el comienzo de la tabla

; de las localidades en las que ; se van a localizar los caracteres

MOV R2, #OOH ; Se inicializa R2 con O. ; Contador de carácter

MOV Rl, #OOH ;Se inicializa R1 con O. ; Contador de tablas

MOV DPTR, #O2FFH ; Se inicializa DPTR con el ; comienzo de la tabla

SALO: INC DPTR ; Se busca otro carácter MOV Rl, DPH CJNE Rl, #O3H, SALl ; Si se termina la tabla 03xx sale

; del proceso MOV A, #OOH ; El ACC se borra para la

; próxima instrucción MOVC A, @A+DPTR ; Se LEE el carácter y se carga en el ACC. CJNE A, #23H, SALO ; Si el carácter no es *23H busca

; siguiente INC R2 ; Si el carácter es * 23H incrementa

; contador MOV @RO, DPH ; Apunta dirección (H) localización carácter INC RO MOV @RO, DPL ; Apunta dirección (L) localización carácter INC RO JMP SALO ; Busca otro carácter para evaluar

SAL1: NOP END

Page 56: Microcontrolador 8051

El Microprocesador 8051 CAP 5

_________________________________________________________________________ ITMAR, Mazatlán 56 Ing. Rufino J. Domínguez Arellano

Ejercicio 5.11. Gestión de la pila y rotaciones Finalmente, para terminar con este apartado dedicado al modelo de programación del 8052/8051 se dedica un ejercicio al manejo de las instrucciones de acceso a la memoria de pila ya las rotaciones. A la pila, como se puede ver en este ejercicio, no solamente la gestiona el microcontrolador, de una forma automática, para salvar los registros importantes en los saltos a las subrutinas e interrupciones, si no que también puede y debe ser utilizada y gestionada por el programador. En este ejercicio, que por otro lado no tiene otras pretensiones que demostrar estas instrucciones, se ha situado la zona reservada a la pila en otra zona de la memoria interna, distinta a la que por defecto y después de un RESET el microcontrolador posiciona. Como se recordará, en el capítulo 2, apartado 2.6, se decía que después de un RESET el microcontrolador situaba .el comienzo de la pila en la dirección 08H. En este ejercicio, como se puede ver en la primera instrucción del programa, la pila se ubica a partir de la dirección 40H y en sentido creciente. El ejercicio planteado pretende que un dato como 01H realice una rotación completa y que finalice en la misma posición con la que empezó, dicho de otra manera, que el contenido del b0 se desplace a la Izquierda sobre el registro para después de varios desplazamientos concluya en la misma posición. Para esta operación es preciso efectuar como se comprobará, 8 rotaciones «bit a bit>.

%TITLE “GESTION DE LA PILA Y ROTACIONES. ROTAO.ASM” ; ORG O2OOH ;

REF EQU 7OH ROT EQU 6FH

MOV SP, #4OH ; Inicialización de la pila en área ;SCRATCHPAD

MOV A, #OOH ; Carga del ACC con OOH PUSH A ; Se guarda en la pila. Inicialización

; del CONTADOR MOV REF, #OlH ; Se inicializa el registro de REFERENCIA MOV ROT, REF ; Se inicializa el registro de ROTACION MOV A, ROT ; Se carga el ACC con el valor de ROT

SALO: RL A ; Rotación a la izda. del ACC MOV ROT, A ; Se salva el contenido de ACC una vez

; rotado POP A ; Recupera valor contador. El ACC

; es ahora contador INC A ; Incrementa CONTADOR PUSH A ; Guarda contador en la PILA MOV A, ROT ; Recupera el dato rotado CJNE A, REF, SALO ; Compara ACC con REF para salir

; del programa cuando sean iguales NOP END

Page 57: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 57 Ing. Rufino J. Domínguez Arellano

CAPITULO 6

Control de periféricos. Puertos de Entrada/ Salida

6.1. INTRODUCCION En el Capítulo 1 se describía la arquitectura de los puertos de entrada y salida (E/S) de la familia de Microcontroladores 51. En este capítulo, se retorna el tema para recordar, ampliar y mostrar una serie de ejercicios de iniciación en el control de los puertos que van a permitir comunicarse con una buena parte de los periféricos comerciales y con los que el usuario diseñe. Los cuatro puertos del 8052/8051 son bidireccionales, es decir, permiten la lectura y escritura en el periférico correspondiente. Las salidas están <latcheadas», lo que posibilita mantener el dato indefinidamente hasta que sobreescriba la información original. Otra característica importante es que los puertos pueden ser utilizados como buses de direcciones, datos y control, por lo que en estas circunstancias se dice que el microcontrolador trabaja como microprocesador. A esta característica se refiere el siguiente apartado.

6.2. EL MICROCONTROLADOR COMO MICROPROCESADOR Los drivers de salida de los Puertos P0 y P2 y los buffers de entrada del Puerto P0 se pueden utilizar para acceder a la memoria externa del sistema. En estas condiciones, el Puerto P0 se configura como salida del byte bajo del bus de direcciones (A0 a A7), de un bus que consta de 16 bits (capacidad de direccionamiento 64K), multiplexado en el tiempo como bus de datos bidireccional (D0 a D7). El Puerto P2 se configura como salida del byte alto del bus de direcciones (A8 a A15). De esta manera e] microcontrolador se configura a modo de CPU de un sistema externo con unas capacidades de expansión definibles por el usuario. Naturalmente, en estas condiciones, le queda como puerto íntegro, para el control de periféricos, el Puerto P1 y parte del Puerto P3. puesto que hay señales que se utilizan para el control del sistema (bus de control). En la Figura 6.1 se muestran los cronogramas correspondientes aun ciclo de lectura en la memoria externa de programas ya un ciclo de lectura y escritura en la memoria de datos externa. También, se hace referencia a los parámetros representados en la Figura 6.1 y en el Cuadro 6.1, sin hacer mención a los tiempos reales que dependen del tipo de microcontrolador y de la frecuencia de trabajo.

Page 58: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 58 Ing. Rufino J. Domínguez Arellano

Figura 6.1

Page 59: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 59 Ing. Rufino J. Domínguez Arellano

Para un mejor entendimiento y seguimiento de los cronogramas anteriores, en la Figura 6.2 se dibuja un esquema en el que aparece el microcontrolador comandando una memoria RAM (43256C) y una memoria EPROM (2764).

Cuadro 6.1.

Símbolo Parámetro TLHLL ALE Pulse Width (Anchura pulso ALE) TAVLL Address Valid to ALE Low (Dirección válida a ALE bajo) TLLAX Address Hold After ALE Low (Dirección mantenida después de ALE

bajo) TLLIV ALE Low to Valid Instruction In (ALE bajo a Instr. In. válida) TLLPL ALE Low to PSEN Low (ALE bajo a PSEN bajo) TPLPH PSEN Pulse Width (Anchura pulso PSEN) TPLIV PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. válida) TPXIX Input Instr. Hold After PSEN (Mantenimiento de Instr. In.

después de PSEN) TPXIZ Input Instr. Float After PSEN (Bus flotante de Instr. In. después

de PSEN) TPXAV PSEN to Address Valid / PSEN a Dirección válida TAVIV Addres to Valid Instr. In. / Dirección a Instr. In. válida TPLAZ PSEN Low to Addres Float / PSEN bajo a bus dirección flotante TRLRH RD Pulse Width / Anchura del pulso de lectura TWLWH WR Pulse Widht / Anchura del pulso de escritura. TRLDV RD Low to Valid Data In / RD bajo a Dato In. válido TRHDX Data Hold After RD / Mantenimiento de Dato después de RD TRHDZ Data Float After RD / Bus Datos flotante después de RD TLLDV ALE Low to Valid Data In / ALE bajo a Dato In. válido TAVDV Addres to Valid Data In / Dirección a Dato In. válido TLLWL ALE Low to RD or WR Low / ALE bajo a RD o WR bajo TAVWL Addres to RD or WR Low / Dirección a RD o WR bajo TQVWX Data Valid to WR Transition / Dato válido a transición WR TQVWH Data Valid to WR High / Dato válido a WR alto TWHQX Data Hold After WR (Mantenimiento de Dato después de WR) TRLAZ RD Low to Addres Float (RD bajo a bus flotante Dirección) TWHLH RD or WR High to ALE Hight (RD o WR alto a ALE alto) El acceso a la memoria externa puede hacerse o bien a la memoria de programas o a la memoria de datos y esta última puede ser para leer o escribir un dato. Estos tres aspectos se van a desarrollar someramente a continuación.

Page 60: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 60 Ing. Rufino J. Domínguez Arellano

6.2.1. Ciclo de lectura en la memoria externa de programas Para acceder a la memoria externa de programas utiliza la señal PSEN (Program Store Enable) como señal de autorización de lectura (Figuras 6.1 (A) y 6.2). La señal ALE «latchea» el byte bajo del bus de direcciones en el primer estado (ciclo de reloj), y así permite direccionar, duranté todo el ciclo de instrucción, mientras esas mismas líneas son utilizadas, en el resto del ciclo de instrucción, como bus de datos. En la Figura 6.2 se puede observar que la lectura en la memoria de programas se realiza cuando PSEN está a nivel bajo y las líneas A13, A14 y A15 se encuentran a nivel alto, siendo el resto de las líneas de dirección las que establecen la localidad exacta del byte de instrucción u operando que ha de ser leído. (La actuación del PSEN elimina cualquier incompatibilidad que podría producirse al estar los dos «chips» seleccionados, es decir, CE complementado y CS = 0.) Para el acceso a la memoria de programas, utiliza los 16 bits del bus de direcciones, su posición en el mapa general de memoria es la que se encuentra al final de los 64 Kbytes puesto que A15=A14=A13=1, concretamente comienza en la dirección 1110 0000 0000 0000 = E000H y termina en la dirección FFFFH, en total 8 Kbytes. A la memoria de programas externa se accede bajo dos condiciones:

I. Cuando la señal EA es activa, caso de la Figura 8.2. 2. Cuando el contador de programa (PC) contiene un número más grande que 0FFFH para el 8051 o 1 FFFH para el 8052.

En las versiones de microcontroladores sin ROM (8031 y 8032) tienen la señal de control EA puesta a nivel bajo permanentemente para leer el programa en la memoria externa.

6.2.2. Ciclo de lectura en la memoria externa de datos Para el acceso a la memoria externa de datos utiliza la señal de control RD (función alternativa de P3.7) y puede utilizar los 16 bits de dirección (MOVX A, @DPTR) o bien 8 bits (MOVX A, @Ri) (véase Figura 6.1(B)). En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la señal de control RD que autoriza la lectura sea desactivada.

Page 61: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 61 Ing. Rufino J. Domínguez Arellano

+5 VEPROM

2764

A0A1A2A3A4A5A6A7A8A9A10A11A12

Vpp

O7O6O5O4O3O2O1O0

CEOEPGW

U3

RAM

43256C

A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14

Q7Q6Q5Q4Q3Q2Q1Q0

CS

OEWR

U2

8052

P1.0/T2P1.1/T2XP1.2P1.3P1.4P1.5P1.6P1.7

RESET

T0T1

X2X1

P2.5P2.6P2.7

P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0EA/Vpp

P2.0P2.1P2.2P2.3P2.4

ALE/PTXDRXD

INT0INT1

PSENWRRD

U1 74LS373D7D6D5D4D3D2D1D0

Q7Q6Q5Q4Q3Q2Q1Q0

OE E

U4

+5 V

+5 VEPROM

2764

A0A1A2A3A4A5A6A7A8A9A10A11A12

Vpp

O7O6O5O4O3O2O1O0

CEOEPGW

U3

RAM

43256C

A0A1A2A3A4A5A6A7A8A9A10A11A12A13A14

Q7Q6Q5Q4Q3Q2Q1Q0

CS

OEWR

U2

8052

P1.0/T2P1.1/T2XP1.2P1.3P1.4P1.5P1.6P1.7

RESET

T0T1

X2X1

P2.5P2.6P2.7

P0.7P0.6P0.5P0.4P0.3P0.2P0.1P0.0EA/Vpp

P2.0P2.1P2.2P2.3P2.4

ALE/PTXDRXD

INT0INT1

PSENWRRD

U1 74LS373D7D6D5D4D3D2D1D0

Q7Q6Q5Q4Q3Q2Q1Q0

OE E

U4

+5 V

Figura 6.2

6.2.3. Ciclo de escritura en la memoria externa de datos Para la escritura en la memoria externa de datos utiliza la señal de control WR (función alternativa P3.6) y puede utilizar los 16 bits de dirección (MOV @DPTR, A) o bien 8 bits (MOV @Ri, A) (Figura 6.1.(C)). En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y después de que la señal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una dirección de 16 bits es utilizada (MOVX @DPTR), el byte alto de dirección sale por el Puerto P2 donde permanecerá mientras dura el ciclo de lectura o escritura. Si se utiliza una dirección de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa. Esto facilita la paginación (véase Apartado 2.3). Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarán en esta situación:

Page 62: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 62 Ing. Rufino J. Domínguez Arellano

P0: Bus de direcciones de menos peso (A0 a A 7) y bus de datos (D0 a D7) multiplexados en el tiempo. P1: Puerto de E/S. P2: Bus de direcciones de más peso (A8 a A15). P3: Bus de control.

6.3. OPERACIÓN DE ESCRITURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operación de escritura, utilizando los puertos del 8052/8051, puede ser realizada por cualquiera de ellos; no obstante, el Puerto P0 es el que presenta una mayor cargabilidad, permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro cargas TTL-LS. En la ejecución de una instrucción que cambia el valor del latch del puerto, el nuevo valor llega al latch durante el estado 6, fase 2 del final del ciclo de instrucción, según indica la Figura 6.3. Antes de comenzar con el estudio y comprobación de los puertos de E/S, se dibuja el interface para la conexión de los puertos a los dispositivos de salida, que en este caso pueden servir unos simples LED (Figura 6.4). Para comandar cargas de mayor consumo energético, como relés, se recomienda utilizar, entre el puerto y la carga, drivers no inversores, como el ULN 2003, o inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50 v. Como ya se sabe, el 8052/8051 presenta dos señales de control, una para ejecutar la lectura (RD) y otra para la escritura (WR). Por esto la activación de estas señales depende del formato de la instrucción. Para la operación de ESCRITURA en el puerto, la instrucción más habitual es la siguiente:

MOV PX, <DATO> ; X toma valores 0, 1, 2 y 3 según el puerto. Admitiendo <DATO> todos los tipos de direccionamiento estudiados en el Capítulo 3.

Page 63: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 63 Ing. Rufino J. Domínguez Arellano

Figura 6.3

Figura 6.4 Ejercicio 6.1. El puerto P0 en modo salida Este ejercicio muestra cómo se deben tratar los cuatro puertos cuando se tiene que enviar una información de salida del microcontrolador. Se refiere, comúnmente, a una operación de escritura. El ejercicio se realiza con el Puerto P0 pero el usuario puede comprobar que el programa funcionará igual si sustituye el Puerto P0 por el P1 , P2 o P3. El programa muestra distintas formas de escritura en el puerto. Así:

• En las primeras instrucciones, mediante una máscara, se ponen todos los bits del Puerto P0 a CERO.

• Se incrementa el acumulador y se transfiere al Puerto P0. por lo que el contenido de dicho puerto se incrementará, así hasta contar hasta 5.

Page 64: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 64 Ing. Rufino J. Domínguez Arellano

• .Direccionando directamente los bits 0 y 2 del Puerto P0. que en la última operación habían quedado a UNO, se ponen a CERO. En este instante todos los bits de P0 están a CERO.

• Se pone a UNO el bit 7 de P0 y con direccionamiento inmediato se carga P0 con 55H.

• Finalmente, se complementa (operación lógica NOT) la información de P0 cambiando los UNOS por CEROS y los CEROS por UNOS.

Se observará que entre las distintas operaciones se ha incluido un lazo de retardo para poder seguir la evolución de la secuencia anteriormente descrita. La rutina de retardo es la misma que la estudiada en el Ejercicio 5.1, con la diferencia del valor asignado al registro R0 y, también, que dicha rutina se ubica a partir de la localidad 0300H para que no coincida con el programa principal. Una última observación antes de pasar a realizar el ejercicio. Si se necesita activar o desactivar un bit de un puerto (se puede hacer extensivo a todos los registros direccionales «bit a bit» del SFR), puede hacerlo utilizando las instrucciones booleenas (ver Tabla 4.2).

CLR bit SETB bit CPL bit

Así, por ejemplo, para activar el bit0 del Puerto P0:

SETB P0.0

o también

SETB 80 o el bit 1 del Puerto P0:

SETB P0.1

o también

SETB 81 Efectivamente, por esta razón sólo son direccionables «bit a bit» los registros correspondientes a la primera columna (ver Tabla 4.1 ).

Page 65: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 65 Ing. Rufino J. Domínguez Arellano

; Escribe en el puerto P0 configurado como salida ; ORG 0200H ;

RETAR1 EQU 0300H MOV A, #00H ANL P0, A ; Escribe CERO en el puerto P0 CALL RETAR1 ; Producir retardo

SAL0: INC A ; Incrementa ACC MOV P0, A ; Escribe en el puel1o P0 CALL RETAR1 CJNE A, #05H , SAL0 ; Si se han realizado 5 incrementos de P0 sale CLR P0.0 ; Pone el bit 0 de P0 a CERO CLR P0.2 ; Pone el bit 2 de P0 a CERO CALL RETAR1 SETB P0.7 ; Pone el bit7 de P0 a UNO CALL RETAR1 MOV P0, #55H ; Carga P0 con 55H CALL RETAR1 MOV A, #FFH XRL P0, A ; Complementa P0 NOP END ; ORG 0300H

; MOV R0, #40H ; Se CARGA el registro R0 con #40H

SAL0: MOV R1, #85H ;Se CARGA R1 con #85H SAL1: MOV R2, #FFH ;Se CARGA R2 con #FFH SAL2: DJNZ R2, SAL2 ; Decrementa R2 y repite el lazo hasta que R2=0

DJNZ R1, SAL1 ; Lo mismo que la instrucción anterior, pero por cada ; lazo de R1, ejecuta FFH veces el lazo R2 DJNZ R0, SAL0 ; Lo mismo que las instrucciones anteriores, pero por ; cada lazo de R0, ejecuta 85H lazos de R1 y

; 85H * FFH lazos de R0 NOP RET END

6.4. OPERACION DE LECTURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051 La operación de lectura o de adquisición de datos no representa ningún tipo de problema; solamente se deberá cambiar el orden de los operandos en la instrucción respecto a la operación de escritura. Para la operación de lectura, el formato de la instrucción más habitual es el siguiente:

MOV <destino>, PX

Page 66: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 66 Ing. Rufino J. Domínguez Arellano

Se presentan dos circuitos de interface muy sencillos para poder introducir datos a los puertos del microcontrolador, cuando éste trabaja en modo lectura. El primero, muy simple, es útil para la comprobación de la mayor parte de los ejercicios qué aquí se exponen; no obstante, tiene el problema de los «rebotes» (Figura 6.5). El segundo circuito está pensado especialmente para los ejercicios que se refieren al tema de las interrupciones. Este circuito es, hasta cierto punto, inmune a los rebotes de los contactos (Figura 6.6).

Ejercicio 6.2. Operación de lectura en el puerto P0 y de escritura en el puerto P1 Este ejercicio trata de mostrar cómo se manipula el Puerto P0 para utilizarlo como entrada y el P1 como salida, de tal forma que la información leída por el Puerto P0 y después de ser tratada adecuadamente sale escrita por P1. En este caso concreto, la información leída por P0 sale intacta por el Puerto P1.

Figura 6.5 Este es el listado del programa: Lazo: MOV A, P0 MOV P1, A AJMP Lazo

Page 67: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 67 Ing. Rufino J. Domínguez Arellano

Figura 6.6

Ejercicio 6.3. Control de un proceso industrial elemental El siguiente ejercicio muestra cómo realizar el control de un proceso industrial muy simple, utilizando la CPU del microcontrolador para la toma de decisiones, la memoria para almacenar las instrucciones del programa y los datos, y los puertos, uno (de lectura) para comprobar la situación de los sensores y el otro (de escritura) para enviar la señal a los actuadores. Se ha escogido este ejercicio resuelto en el libro Sistemas Microprocesadores, de J. M. Angulo Usategui, por considerar que es conocido entre muchos profesionales y entusiastas de los «micros», y es interesante ver su resolución desde la perspectiva de los Microcontroladores 8052/8051.

• Proceso Se trata de controlar el nivel de liquido de un depósito, utilizando tres sondas detectoras de niveles A, B y C, y dos bombas B1 y B2 (Figura 6.7). He aquí una descripción del proceso, desde el punto de vista de su relación con el mundo exterior, según los tres tipos de señales principales:

Page 68: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 68 Ing. Rufino J. Domínguez Arellano

Figura 6.7

• Entrada de información: SENSORES (sondas). • Actuación sobre los elementos finales: ACTUADORES. • Señalización del proces): INDICADORES.

1. SONDAS (entradas) La sonda A señala el nivel mínimo de agua. Por debajo de este nivel, se indicará «VACIO» en el cuadro de INDICADORES. La sonda B señala el nivel óptimo y cuando se alcance se indicará «LLENO». La sonda C señala el nivel peligroso e indica «REBOSE». Las sondas serán leídas por el Microcontrolador a través del Puerto P0.

P0.0 - A P0.1- B P0.2 - C

Page 69: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 69 Ing. Rufino J. Domínguez Arellano

2. ACTUADORES (salidas) Cuando ninguna de las sondas está mojada, se entiende que el depósito está vacío y los actuadores activarán las dos bombas B1 y B2 (P1.0 y P1.1). Cuando el nivel del líquido toque la sonda B, se desactivará la bomba B2, quedando la bomba B1 activada en modo mantenimiento. Si el nivel del líquido moja la sonda C (rebose), se desactivará la bomba B1, quedando las dos bombas, de momento, fuera de servicio.

3. INDICADORES (salidas) La señalización utiliza el Puerto P1.

P1.2 -- VACIO P1.3 -- LLENO P1.4 -- REBOSE

y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada –por ejemplo, que la sonda B (P0.1 ) se active cuando la A (P0.0), por debajo de la B, no lo está- se excita en el cuadro de indicadores una señal de ALARMA.

P1.5 --ALARMA La Figura 6.8 muestra la disposición de los actuadores, indicadores y sondas.

Figura 6.8

Page 70: Microcontrolador 8051

El Microcontrolador 8051 CAP. 6

_________________________________________________________________________ ITMAR, Mazatlán 70 Ing. Rufino J. Domínguez Arellano

Este es el listado:

; Controla el nivel de líquido de un depósito. ; ORG 0300H ; .BYTE 07H,03H,20H,09H,20H,20H,20H,18H ;

ORG 0200H ;

MOV DPTR, #0300H ;inicializa puntero de TABLA

SAL0: MOV A, P0 ; LEE puerto PO ANL A, #07H ; Enmascara MOVC A, @A+DPTR ; Direcciona y captura dato MOV Pl, A ;Actúa JMP SAL0 END

Page 71: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 71 Ing. Rufino J. Domínguez Arellano

CAPITULO 7

Temporizadores y contadores

7.1. INTRODUCCION. El Microcontrolador 8052 tiene tres registros temporizadores-contadores denominados Timer 0 (T0), Timer 1 (T1) y Timer 2 (T2). El Microcontrolador 8051 tiene sólo dos Timers. el T0 y el T1, de las mismas caracteristicas que los del 8052. Por esta razón, todo lo que se diga con relación a los Timers 0 y 1 del 8052 es válido para los del 8051 y viceversa. Los tres limers pueden ser configurados para que operen como temporizadores o como contadores. Cuando el dispositivo opera como Timer, el registro contador se incrementa cada ciclo máquina (la temporización se produce contando los ciclos máquina hasta sobrepasar el valor prefijado). Así, se puede considerar que funciona como un contador de ciclos máquina, de tal forma que, como a cada ciclo máquina le corresponden 12 periodos de reloj, la razón de conteo es 1/12 de la frecuencia del oscilador. En la función contador, el registro es incrementado en respuesta a la transición del nivel alto de tensión al nivel bajo (flanco descendente) de la señal externa aplicada al (pin 14) para el contador T0, al (pin 15) para T1 y al (pin 1) para el T2, este último pertenece al 8052. La entrada externa es muestreada durante el estado 5 de la fase 2 (S5P2) de cada ciclo máquina. El contador se incrementa cuando la muestra señala un nivel alto de la señal de entrada en un ciclo y un nivel bajo en el ciclo siguiente. El nuevo valor de la cuenta aparece en el registro correspondiente durante el estado 3 de la fase 1 (S3PI) del siguiente ciclo en que la transición ha sido detectada. Puesto que necesita dos ciclos máquina (24 ciclos de reloj) para reconocer la transición del flanco descendente, la máxima razón de conteo es 1/24 de la frecuencia del oscilador. Mientras que el Timer 0 y 1 tienen cuatro modos de operación, el Timer 2 tiene tres modos como se va a ver en el Apartado 7.2 y 7.3. Antes de pasar al estudio de los distintos tipos Timers, de su configuración y de realizar algunos ejercicios de aplicación, se va a analizar el circuito general que representa a los Timers presentes en los Microcontroladores 8052/8051. En 1a Figura 7.1 se observan cuatro bloques fundamentales que de izquierda a derecha se van a exponer a continuación:

Page 72: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 72 Ing. Rufino J. Domínguez Arellano

-En la parte superior izquierda aparece un dispositivo conmutador que selecciona la forma de efectuar el conteo, bien mediante el oscilador reloj del microcontrolador, o con un reloj externo. La primera opción establece aplicaciones generales de tipo timer (temporizador) y la segunda de tipo counter (contador). -En la parte inferior izquierda se encuentra un circuito lógico que acciona el interruptor (símil eléctrico) que permite el paso de los impulsos que incrementan los registras de conteo. Este circuito permite dos opciones: bien se acciona el interruptor por software, para ello GATE=0 y TR1=1, que son bits imagen pertenecientes a unos registros de control que se estudiarán, o bien se acciona por hardware con la señal de nivel alto, aplicada al pin INT 1, estando GATE=1 y TR1=1. -En la parte central se encuentran los registros de conteo, que pueden ser de 8, 13 o 16 bits según el modo de trabajo (TL 1, TH 1). -A la derecha del registro de conteo se encuentra el biestable representativo del bit de bandera, TF1, que señala el overflow o sobrepasamiento del registro contador. -Finalmente, si la interrupción correspondiente está habilitada, se produciría una interrupción, tema que será tratado en el próximo capítulo.

Figura 7.1

7.2. TIMER 0 (T0) y TIMER 1 (T1) La función timer (temporizador) o counter (contador) es seleccionada por el bit de control C/T perteneciente al registro TMOD (Timer/Counter Mode Control

Page 73: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 73 Ing. Rufino J. Domínguez Arellano

Register), de los SFR (Special Function Register). El registro TMOD no es direccionable «bit a bit> (Cuadro 7.1). Estos dos timer/counters tienen cuatro modos de operación, como se indica a continuación, que se seleccionan mediante los pares de bít (M0,M1) en el registro TMOD.

CUADRO 7.1

7.2.1. Modo 0: Temporizador/contador de 13 bits Poniendo los bits M0 = MI = 0 en el registro TMOD se selecciona el modo de operación cero (Modo 0). El timer/counter 0 y el 1 se ven como indica la Figura 7.2. Como se puede ver en la Figura 7.2 los Timers 0 y 1 están configurados con registros de 13 bits, repartiéndose 8 bits para TH0 o TH 1 y los 5 bits de menor peso para TL0 o TL1 (los 3 bits de más peso de TL0 o TL1 son indeterminados y deben ser ignorados). Cuando la cuenta, en e! registro de conteo, da una vuelta pasando desde todos «unos» a todos «ceros», activa el indicador de interrupción TFx (x=0 si se trata del Timer 0 y x=1 si se trata del Timer 1), siendo éste un bit

Page 74: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 74 Ing. Rufino J. Domínguez Arellano

que pertenece a! registro TCON (Timer/ Counter Control Regisler), registro que es direccionable «bit a bit) (véase Cuadro 7.2).

Figura 7.2

CUADRO 7.2

Page 75: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 75 Ing. Rufino J. Domínguez Arellano

La autorización de cuenta de pulsos, procedentes de la señal de reloj (actuando como temporizador) o bien del pin 15 (T1) (actuando como contador), se produce en el Timer 1, cuando TR1 = 1 y las entradas GATE=0 o INT1 = 1. Una aplicación podría ser, para medir el ancho de pulsos a través del pin INT1. Así, mientras INT1 =1 los impulsos internos o externos de cuenta llegarían al contador TH1-TL1. Cuando INT1 =0 el valor del contador permanecerá sin cambios, puesto que no llegarán mas pulsos de cuenta. Para ello es necesario que GATE = 1 y TR1 = 1. El Modo 0 de operación es el mismo para el Timer 1 que para el Timer 0, sustituyendo los bits o señales con el subíndice 1 por el subíndice 0. Así, el registro TMOD está dividido en dos partes iguales para el control del Timer 0 y el Timer 1; lo mismo sucede con TCON. Ejercicio 7.1. Timers 0 y 1 en Modo 0 como temporizador. Arranque por software. Este ejercicio prueba el funcionamiento del timer 0 en Modo 0, con la puyesta en marcha por software. El bit 0 del puerto P0 conmutará entre cero y uno en función de los valores del Timer 0. Los pasos a seguir son: 1-. Programar TMOD

2.- Se activa el bit 0 del Puerlo 0. 3.- Se llama a la rutina Tempo para temporizar. 4.- Se desactiva el bit 0 del Puerto 0. 5.- Se llama a la rutina Tempo y se salta incondicionalmente al paso 2.

Page 76: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 76 Ing. Rufino J. Domínguez Arellano

La rutina Tempo realiza lo siguiente: 1.- Carga de los registros del Timer 0 a sus valores mínimos correspondiendo con la máxima temporización. Se entiende que el flag TF0 se activará (0 → 1) cuando la cuenta rebase: XXX0 0000 0000 0000 XXX1 1111 1111 1111 = 1FFFH Se sugiere al lector que calcule la temporización considerando lo indicado en el Apartado 7.1, es decir, se incrementa a la razón de 1/12 de la frecuencia de reloj. Podemos adelantar que la temporización es muy pequeña. 2.- Se programa TCON.

3.- Verifica si ha ocurrido un desbordamiento en la cuenta. Si así es, sale de la rutina.

ETIQUETA CODIGO MOV TMOD, #00

B0203 MOV B, #01 MOV PO.B ACALL Tempo MOV B, #00 MOV PO.B ACALL Tempo AJMP B0203 ;

Tempo MOV TLO, #00 MOV THO, #00 MOV TCON, #10

B0309 MOV A, TCON ANL A. #20 JZ B0309 RET

Page 77: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 77 Ing. Rufino J. Domínguez Arellano

7.2.2. Modo 1: Temporizador/contador de 16 bits El funcionamiento de los Timers en Modo 1 es el mismo que en Modo 0, exceptuando que los registros de conteo son de 16 bits (TL0+ TH0) o (TL1 + TH1). Ejercicio 7.2. Timer 1 en Modo 1 (16 bits) como temporizador: Arranque por software. Este ejercicio es similar al anterior en cuanto a los resultados, pues el bit 0 del Puerto P0 (P0.0) va a conmutar al ritmo del Timer 1, pero éste, al estar programado en Modo 1, utiliza los 16 bits de TH1+ TL1; si se carga con 0000H, la temporización es más larga, por lo que el ritmo de conmutación será menor. Recuérdese que el indicador de desbordamiento, al utilizar el Timer 1, es TF1 (bit 7 del registro TCON) y que éste se produce al pasar TH1- TL1 de FFFFH a 0000H, es decir, después de contar 65.536 ciclos máquina. El arranque del Timer 1 se produce, como en el ejercicio anterior, al poner a «1» el bit 6 del registro TCON.

Page 78: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 78 Ing. Rufino J. Domínguez Arellano

ETIQUETA CODIGO

MOV TMOD, #10

B0203 SETB P0.0 ACALL Tempo

CLR P0.0 ACALL Tempo

AJMP B0203

; Tempo MOV TL1, #00

MOV TH1, #00 MOV TCON, #40

B0309 MOV A,TCON ANL A, #80 JZ B0309 RET

Ejercicio 7.3. Timer 1 en Modo 1 (16 bits) como temporizador hardware y software. Arranque por software Este ejercicio permite ver la interacción de la temporización de los Timers fisicos con la temporización, ya estudiada en el Capítulo 5 -Ejercicio 5.1-, por software; de esta manera se pueden conseguir tiempos más largos. El algoritmo de funcionamiento de este programa es el siguiente: por cada unidad de decremento del registro R0 se establece un ciclo de cuenta del Timer 1, de tal forma que si se carga el registro R0 con 0FH, y el Timer 1 con 0000H., se establecen 15 períodos completos de ciclos de conteo del Timer 1 más los ciclos máquina que implica la ejecución del programa, es decir, aproximadamente: 15 x 65536 ciclos máquina. Los registros TMOD y TCON están configurados como en el ejercicio anterior, por lo que no se hace ningún comentario.

ETIQUETA CODIGO

MOV RO, #0F MOV TMOD, # 11

B0205 SETB P0.0 ACALL Tempo CLR P0.0 ACALL Tempo AJMP B0205 ;

Tempo MOV TL1, #00 MOV TH1, #00 MOV TCON, #40

B0309 MOV A,TCON

Page 79: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 79 Ing. Rufino J. Domínguez Arellano

ANL A, #B0 JZ B0309 DJNZ R0, Tempo MOV R0, #0F RET

Ejercicio 7.4. Timer 1 en Modo 1 (16 bits) como temporizador: Arranque por hardware desde el exterior Este ejercicio es similar al anterior, salvo en la forma de arrancar el Timer 1. En el ejercicio anterior, el arranque se hacía vía software al poner el bit 6 (TR1 ) del registro TCON a «1», estando el bit 7 (GATE) del registro TMOD a «0», como se puede observar en la Figura 7.2. Entonces el interruptor CONTROL se cerraba y llegaban los impulsos a los registros de conteo. Ahora la nueva configuración parte de que GATE=1 y TR1=1, pero no es suficiente para arrancar el Timer 1; se necesita aplicar al pin 13 (INT1) un nivel de tensión alto desde el exterior. La figura 7.3 muestra las conexiones externas para este ejercicio.

• Configuración de TMOD.

= 90H GATE Control Por Hardware C/T M1= 0 y M0 = 1 Es un Timer Modo 1

TH1 + TL1 = 16 bits

Figura 7.3

1 0 0 1 - - - -

b7 b0

Page 80: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 80 Ing. Rufino J. Domínguez Arellano

Este es el listado del programa : ETIQUETA CODIGO

MOV TMOD, # 90 MOV R0, #0F CLR P0.0 ACALL Tempo SETB P0.0 NOP ;

Tempo MOV TL1, #00 MOV TH1, #00 MOV TCON, #40

B0309 MOV A,TCON ANL A, #80 JZ B0309 DJNZ R0, B0300 RET

7.2.3. Modo 2: Temporizador/contador de 8 bits con auto-recarga Puesto que el funcionamiento es el mismo para el Timer 1 que para el Timer 0, los comentarios se hacen para el Timer 1. El Modo2 configura el registro Timer como un contador de 8 bits (TL1) con recarga automática (Figura 7.4). El desbordamiento de TL1 no sólo activa el bit de flag (TF1), sino que también «re- carga» TL1 con el contenido de TH1, el cual es inicializado por software. La recarga de TL1 por TH1 es una copia por lo que TH1 mantiene el dato inicial con que fue cargado.

Figura 7.4

Page 81: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 81 Ing. Rufino J. Domínguez Arellano

Ejercicio 7.5. Timer 1 en Modo 2 como contador con autorrecarga Este ejercicio trata de observar el funcionamiento del Timer 1 como contador de impulsos externos; autorrecargándose al producirse el desbordamiento con el dato situado en TH1, como muestra la arquitectura del Timer 1 en Modo 2 en la Figura 7.4. A cada flanco descendente de los impulsos de conteo exteriores, aplicados al pin 15 (T1) el registro TL1 se incrementa en una unidad a partir del valor inicial de carga, que en este caso es F0H. Cuando este valor alcanza FFH, el impulso siguiente, que produce el desbordamiento, activa el indicador TF1 y recarga automáticamente el contenido del registro TH1, que en el ejercicio contiene el mismo valor inicial de TL1, es decir, F0H. Para que puedan llegar los impulsos de conteo a TL1, es preciso que CONTROL=1; para ello se necesita que GA TE= 1, TR 1= 1 (por software) y que el pin 13 (INT1) esté a nivel alto. En la Figura 7.5 se puede ver la conexión precisa del microcontrolador con las señales exteriores para este ejercicio.

Figura 7.5 A continuación se muestra la configuración de TCON y TMOD para este ejercicio.

Page 82: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 82 Ing. Rufino J. Domínguez Arellano

• Configuración de TMOD.

= E0H GATE Control por Hardware C/T M1 = 1 y M0=0 Es contador Modo 2 TL1 = contador, TH1 = cargador

• Configuración de TCON.

= 40H

FLAG TF1 Se pone a uno al Ocurrir desbordamiento SET Timer 1 Habilita el conteo Este es el listado del programa:

ETIQUETA CODIGO MOV TMOD, #E0 MOV TL1, #F0 MOV TH1, #F0 MOV TCON, #40

BO20C: MOV P0,TL1 AJMP B020C NOP

1 1 1 0 - - - -

b7 b0

? 1 - - - - - -

b7 b0

Page 83: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 83 Ing. Rufino J. Domínguez Arellano

7.2.4. Modo 3: Varios contadores El Modo 3 está previsto para aquellas aplicaciones que requieran un temporizador o contador extra. Así, TL0 y TH0 son dos contadores de 8 bits independientes (Figura 7.6). En este modo el Timer 1 cede el flag de tratamiento de interrupciones (TF1) y el bit de control (TR1). El registro TL0 (8 bits) utiliza la lógica de control que ha sido común hasta ahora (GATE, pin INT0 y TR0) permitiendo la operación de temporización con los ciclos máquina del microcontrolador y el conteo de pulsos a través del pin 14 (T0). El registro TH0 (8 bits) sólo permite la temporización con la señal de 1/12 de la frecuencia del oscilador utilizando como bit de CONTROL (TR1) y como flag (TF1); ambas señales pertenecen al Timer 1. En realidad el Modo 3, en cuanto a su funcionamiento, es similar a los modos anteriores, con la salvedad de que sólo cuenta con registros de 8 bits, produciéndose el desbordamiento al incrementarse en una unidad del valor FFH. De esta manera, el Microcontrolador 8052 puede tener hasta cuatro temporizadores/contadores, y el 8051 hasta tres; es decir, cuando el Timer 0 está en Modo 3, el Timer 1 puede ser utilizado, por ejemplo, como generador de base de tiempos en las comunicaciones serie o en cualquier aplicación que no necesite interrupciones. La cuestión es, en el caso del Microcontrolador 8052, que el Timer 2 ha sido diseñado especialmente para utilizarlo como generador de frecuencia en las comunicaciones del puerto serie. No obstante, es la imaginación y creatividad del usuario la que va a determinar lo que es útil para su aplicación.

Figura 7.6

Page 84: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 84 Ing. Rufino J. Domínguez Arellano

Ejercicio 7.6. El Timer 0 en Modo 3 como contador de 8 bits Se trata de mostrar el funcionamiento del Timer 0 en Modo 3, como contador. Los impulsos de conteo exteriores se aplican al pin 14 (T0). La acción sobre el interruptor CONTROL es exterior a través del pin 12 (IÑT0). El valor inicial de TL0 es F0H y el estado de la cuenta se presenta al exterior por el Puerlo P0. Cuando se produce el desbordamiento se carga en el Puerlo P0 un 55H. La Figura 7.7 muestra el conexionado externo para la comprobación de este ejercicio.

ETIQUETA CODIGO MOV TMOD, #07 MOV TCON, # l0 MOV TL0, #F0

B0209: MOV P0, TL0 MOV A, TCON ANL A, #20 JZ B0209 MOV A, #55 MOV P0, A NOP

Figura 7.7

Page 85: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 85 Ing. Rufino J. Domínguez Arellano

7.3. EL TIMER 2 El Microcontrolador 8052, con relación al 8051, presenta un temporizador/contador extra de 16 bits (el timer 2). Al igual que los Timers 0 y I, puede operar como temporizador o como contador de eventos. Dentro de los registros especiales (SFR), el registro (T2CON) puede configurarlo como Timer (C/T2=0) o como Counter (C/T2= 1) contador de flancos descendentes, introduciendo los mismos a través del pin 1 (T2) del Microcontrolador 8052. El registro T2CON (Timer/Counter 2 Control Regisler) es un registro direccionable “bit a bit”. y su estructura aparece en el Cuadro 7.3. Es conveniente seguir el Cuadro 7.3 teniendo presentes las Figuras 7.8 y 7.10.

Cuadro 7.3

Page 86: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 86 Ing. Rufino J. Domínguez Arellano

El Timer 2 tiene tres modos de operación, pero sólo los dos primeros serán tratados en este capítulo.

• Modo captura. • Modo autorrecarga. • Modo generador señal comunicación serie.

Siendo la selección establecida según los valores asignados, a los bits correspondientes del registro T2CON (véase Cuadro 7.4).

Cuadro 7.4

7.3.1. El Timer 2 en modo captura Hay dos opciones que .son seleccionadas por el bit 3 (EXEN2) del registro de control T2CON. Si EXEN2=0, el Timer 2 puede trabajar como temporizador o contador, poniendo el flag TF2 a nivel alto cuando se produce el desbordamiento y generando interrupción si ésta está habilitada. Si EXEN2= 1 el Timer 2 puede hacer lo señalado anteriormente, pero además cuando se produce una transición

Figura 7.8

Page 87: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 87 Ing. Rufino J. Domínguez Arellano

en la entrada externa T2EX en «flanco descendente» el valor que en ese instante está presente en los registros de conteo TL2 y TH2 es capturado dentro de los registros de captura RCAP2L y RCAP2H, respectivamente (RCAP2L y RCAP2H ocupan las posiciones de memoria CAH y CBH en el área de los SFR). Además, el flanco descendente en el pin T2EX, siendo EXEN2= 1, pone a « 1 » el flag de EXF2 y puede generar una interrupción, si está habilitada (Figura 7.8).

Ejercicio 7.7. Timer 2 como temporizador Este ejercicio tiene la misma estructura que el Ejercicio 7.2, por lo que se remite al lector a revisar dicho ejercicio. Observar cómo al modificar el contenido de los registros TL2 + TH2 se pueden conseguir distintas temporizaciones. La máxima se consigue con 0000H. El registro T2CON queda configurado de la siguiente forma: b7 b0

ETIQUETA CODIGO B0200: SETB P0.0

ACALL SUB1 CLR P0.0 ACALL SUB1 AJMP B 0200 ;

SUB1: MOV TL2, #99 MOV TH2, #99 MOV T2CON, #04

B0309 : MOV A.T2CON ANL A., #80 JZ B0309 RET

Page 88: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 88 Ing. Rufino J. Domínguez Arellano

Ejercicio 7.8. Timer 2 en modo “captura” como contador Con este ejercicio se pretenden alcanzar los siguientes objetivos:

• Observar el Timer 2 como contador de 16 bits, con las mismas características que el Timer 0 o el Timer 1.

• Observar cómo se produce el modo captura. • Integrar en el mismo ejercicio el Timer 1 y el Timer 2. El primero como

temporizador y el segundo como contador. A continuación se pasa a comentar las tareas que efectúa el programa. -Primero se configura el Timer 2 como contador y en modo «captura». TCON2 = 0FH CONTROL DE FLANCO CONTROL TR2 = 1 Es un CONTADOR C/T2 = 1 Captura por flanco negativo en TEX2 -Enseguida se cargan los registros de conteo TL2 y TH2. -El contenido de TL2 se saca por el Puerto P0, por lo que el byte bajo de la cuenta de pulsos va apareciendo en el Puerto P0. -Pregunta si ha llegado algún flanco descendente en el pin T2EX. Si es así, y puesto que está programado en modo captura, pasa el contenido de TL2 y TH2 a RCAP2L y RCAP2H, respectivamente. -El contenido de RCAP2L se saca por el Puerto P0. pero se intercambian los nibbles (SWAP A). El tiempo de visualización del contenido de CAP2L está temporizado por el Timer 1 en la rutina Tempo. -Al regresar de la rutina de temporización se borra el flag EXF2, correspondiente a la transición negativa. -Se pregunta por el flag de desbordamiento y si se activa quiere decir que el Timer 2 ha sobrepasado el valor FFFFH. -En estas condiciones el programa termina visualizando por el Puerto P0 el dato 55H. En la Figura 7.9 se muestra el esquema del montaje exterior:

TF2 EXF2 0 0 1 1 1 1

b7 b0

Page 89: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 89 Ing. Rufino J. Domínguez Arellano

Figura 7.9 Este es el listado del programa:

ETIQUETA CODIGO

MOV T2CON, #0F MOV TH2, #FF MOV TL2, #F0

B0209: MOV P0, TL2 MOV A, T2CON ANL A, #40 JZ B021B MOV A, CAP2L SWAP A MOV P0, A ACALL Tempo CLR .EXF2

B021B: MOV A, T2CON ANL A, #E0 JZ B0209 MOV P0, #55 NOP

; Tempo: MOV RO, #50

MOV TMOD, #10 B0305: MOV TL1, #00

MOV TH1, #00 MOV TCON, #40

B030E MOV A, TCON ANL A, #80 JZ B030E DJNZ R0, B0305 RET

Page 90: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 90 Ing. Rufino J. Domínguez Arellano

7.3.2. Timer 2 en modo autorrecarga En el modo autorrecarga hay, de nuevo, dos opciones, que se seleccionan con el bit EXEN2 del registro T2CON. Si EXEN2 = 0, entonces, cuando en el Timer 2 se produce el desbordamiento, no sólo pone a «I» el flag TF2, sino que «recarga» los valores de los registros RCAP2L y RCAP2H, cargados inicialmente por software, en los registros de conteo TL2 y TH2, respectivamente. Si EXEN2=1, entonces el Timer 2 no sólo hace lo anterior, sino que al producirse un flanco descendente, en la entrada externa T2EX, dispara la recarga y activa el flag EXF2 (Figura 7.10).

Figura 7.10

Ejercicio 7.9. Timer 2 con autorrecarga al producirse el overflow (desbordamiento) En este ejercicio se configura el Timer 2 como contador de los impulsos que le llegan exteriormente por el pin 1 (T2), al producirse el desbordamiento los registros TH2 y TL2 se recargan con los valores situados en RCAP2H y RCAP2L. En este caso el registro T2CON queda configurado de la siguiente forma:

Page 91: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 91 Ing. Rufino J. Domínguez Arellano

La Figura 7.10 muestra las conexiones externas necesarias para este ejercicio.

Figura 7.10

Este es el listado del programa

ETIQUETA CODIGO MOV T2CON, #06 MOV CAP2L, # F5 MOV CAP2H, #FF MOV TL2, #F0 MOV TH2, #FF

BO20F: MOV P0, TL2 SETB C ANL C, TF2 JNC B020F CLR .TF2 AJMP B020F

Ejercicio 9.10. Timer 2 con autorrecarga al producirse un flanco descendente en el pin T2EX La diferencia con el ejercicio anterior consiste en que, en este caso, la «recarga» también se produce al generar un flanco descendente en el pin 2 (T2EX) del microcontrolador. Los impulsos de conteo entran por el pin 1 (T2).

Page 92: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 92 Ing. Rufino J. Domínguez Arellano

El esquema del montaje es el mismo que el de la Figura 7.9 del Ejercicio 7.8. En aquél se producía una captura al flanco descendente en el pin T2EX, mientras que en este caso se produce una recarga. La configuración del registro TCON2 es la siguiente:

Este es el listado del programa:

ETIQUETA CODIGO MOV T2CON, #0E MOV CAP2L, #F5 MOV CAP2H, #FF MOV TL2, #F0 MOV TH2, #FF

BO20F: MOV P0, TL SETB C ANL C, .EXF2 JNC B021B CLR .EXF2 JC B020F

BO21B: SETB C ANL C,.TF2 JNC B020F CLR .TF2 AJMP B 020F

Ejercicio 7.11. Timer 2 con captura al producirse un flanco descendente en el pin T2EX Si en el Ejercicio 7.10 se sustituye la instrucción:

MOV T2CON, #0EH por MOV T2CON, #0FH

Page 93: Microcontrolador 8051

El Microcontrolador 8051 CAP 7

_________________________________________________________________________ ITMAR, Mazatlán 93 Ing. Rufino J. Domínguez Arellano

se producirá la captura al producirse un flanco descendente por la línea T2EX (pin 2). Si también se sustituye la instrucción:

MOV P0, TL2 por MOV P0, CAP2L se observará, al pulsar sucesivamente, y en el siguiente orden:

que el incremento producido en TH2 + TL2 «pasa» al registro RCAP2H + RCAP2L visualizándose en el Puerto P0.

Page 94: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 94 Ing. Rufino J. Domínguez Arellano

CAPITULO 8

Interrupciones

8.1. INTRODUCCION La comunicación asíncrona de los sistemas periféricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales:

a) Consultas (polling): Se comprueban cíclicamente, mediante instrucciones del programa los registros de estado de los dispositivos de E/S. Unas líneas de diálogo (handshake) establecen el protocolo de comunicación.

Así. en la Figura 8.1 se muestra cómo se establece el diálogo entre un sistema microcomputador o microcontrolador y dos periféricos mediante el procedimiento de consultas. Primero el programa pregunta si el bit del Puerlo 0 está activo, esto quiere decir que el Periférico 1 solicita la atención del sistema, en ese caso la CPU atiende al Periférico 1. Cuando el proceso termina, el programa activa el bit 1 del Puerlo 0 para indicar, al Periférico 1, que el proceso ha finalizado. El mismo procedimiento para el Periférico 2. Las desventajas de este método son: -En cada ciclo de programa éste tiene que interrogar los bits de consulta. -Al periférico se le atiende después de realizar la consulta y no cuando solicita la intervención de la CPU.

b) Interrupción: Servicio directo entre periféricos y CPU, siempre que ésta desee establecer el diálogo. Este servicio tiene la característica de la inmediatez, pueden eliminarse total o parcialmente los ciclos de consulta y permite inhibir la interrupción cuando se considera que es «inoportuna» y, por tanto, perjudicial para la marcha del proceso.

Esta forma de trabajo es inherente al control de procesos en tiempo real. Así, en la Figura 8.2, cuando el Periférico 1 requiere la intervención del sistema microcomputador o microcontrolador activa la interrupción INT1, si está habilitada el sistema atenderá la petición y ejecutará el proceso correspondiente de atención en la RUTINA 1. El mismo procedimiento se establecería para el Periférico 2.

Page 95: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 95 Ing. Rufino J. Domínguez Arellano

La importancia de las interrupciones nace de la necesidad de ejecutar un subproceso en el instante preciso, y por tanto se considera su intervención «urgente». Cuando termina la ejecución de este subproceso, la CPU vuelve al programa principal, continuando su tarea cíclica justo donde la dejó.

Figura 8.1

Figura 8.2

Page 96: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 96 Ing. Rufino J. Domínguez Arellano

Una interrupción puede ser iníciada:

• Por un periférico o circuito externo ajeno al microprocesador o microcontrolador a través de los pines específicos del mismo. En estas condiciones la interrupción es externa.

• Dentro del propio chip microprocesador o microcontrolador. Entonces la

interrupción es interna. Toda interrupción aceptada conduce a la ejecución de un subprograma específico cuya dirección de comienzo se indica en las posiciones de memoria de una tabla, que recibe el nombre de tabla de vectorización.

8.2. ASPECTOS GENERALES y TIPOS DE INTERRUPCIONES El Microcontrolador 8052 tiene seis interrupciones, mientras que el 8051 tiene cinco. La Figura 8.3 muestra los distintos tipos de interrupciones, señalando la falta de los indicadores que activan TF2 y EXF2 en el 8051 por no tener implementado el Timer 2.

Figura 8.3

Page 97: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 97 Ing. Rufino J. Domínguez Arellano

Los bits de bandera que generan las interrupciones pueden ser cancelados. en algunas interrupciones por hardware cuando éstas son vectorizadas; no obstante todos los bits pueden cancelarse por software escribiendo ceros en el registro correspondiente. Cada una de estas fuentes de interrupción pueden ser individualmente habilitadas o inhabilitadas poniendo á «uno» o a «cero» el bit correspondiente del registro IE (Interrupt Enable Regisler) perteneciente a SFR (Special Funclion Register) (Cuadro 8.1).

Cuadro 8.1

Tabla 8.1

Page 98: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 98 Ing. Rufino J. Domínguez Arellano

Las interrupciones, hacen uso de una tabla, tabla de vectorizacion, en la que se reservan 8 localidades para cada una de las interrupciones en la memoria de programas (Tabla 8.2).

Tabla 8.2 En estas 8 direcciones se puede escribir el programa de atención a la interrupción o, como es habitual, mediante un JMP<dir> se desvía a una zona de memoria de programas lo suficientemente extensa para albergar la rutina de tratamiento de la interrupción detectada. Así por ejemplo, si se habilita la interrupción exterior (bit EX0 correspondiente al pin INT0) y el comienzo del programa de tratamiento de la rutina está ubicado en la direccion 0450H, la tabla de vectorización contendrá en la localidad 0003H el código de operación de la instrucción de salto (y la parte alta de la dirección del salto si es un salto absoluto AJMP), en la siguiente localidad 0004H el byte alto de la dirección de salto y en la direccion 0005H el byte bajo de la dirección del salto (Figura 8.4).

Figura 8.4

10.3. EL PROCESO DE INTERRUPCION

Page 99: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 99 Ing. Rufino J. Domínguez Arellano

8.3. EL PROCESO DE INTERRUPCION EN LOS MICROCONTROLADORES 8052-/8051 Los indicadores de interrupción son muestreados en el estado 5, fase 2 (S5P2) de cada ciclo máquina. Las muestras son escrutadas durante el siguiente ciclo máquina. El sistema de interrupciones del microcontrolador genera un LCALL al apropiado vector de interrupciones. Esta situación se produce salvo que:

• Una interrupción de igualo mayor nivel de prioridad esté en ese momento en proceso.

• No haya finalizado la instrucción que en ese momento está procesándose. • La instrucción en proceso es una RETI (retorno de interrupción) o se esté

produciendo un acceso a los registros IE o IP; entonces asegura que una instrucción más, al menos será ejecutada antes de que la interrupción sea procesada.

El ciclo de «escrutinio» se repite con cada ciclo máquina y los valores escrutados son los que corresponden a la activación de la interrupción presente en el S5P2 del ciclo máquina anterior. Puede suceder que una bandera de interrupción sea activada y no pueda responder el sistema por encontrarse en una de las situaciones de bloqueo comentadas anteriormente. En estas condiciones puede suceder lo siguiente: a) Que desaparezca la situación de bloqueo y que la solicitud de interrupción siga activa. En este caso la interrupción será tratada por el microcontrolador. b) Que desaparezca la situación de bloqueo, pero que en ese intervalo la señal de solicitud de interrupción se haya desactivado. En ese caso la interrupción será denegada y deberá ser solicitada nuevamente. El ciclo completo es mostrado en la Figura 8.5, considerando las condiciones idóneas, es decir, cuando el ciclo máquina C2 coincide con el último ciclo de instrucción que se está ejecutando y que esta instrucción no sea una RETI o un acceso a los registros IE o IP. Puede suceder también que una interrupción de un nivel de prioridad mas alto se active antes del estado S5P2 del ciclo de máquina etiquetado C3 en la Figura 8.5; de acuerdo con lo dicho anteriormente, esta interrupción será vectorizada durante los ciclos C5 y C6, sin que ninguna instrucción de la rutina de prioridad más baja haya sido ejecutada.

Page 100: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 100 Ing. Rufino J. Domínguez Arellano

Con relación al borrado de los indicadores, una vez servida la rutina de interrupción, se ha de decir que en algunos casos, el borrado es automático, aspecto denominado como «borrado por hardware»; en el otro caso, es el programador el que debe estar pendiente de su borrado; modalidad de «borrado por software».

Figura 8.5 No se produce borrado por hardware en las interrupciones del puerto serie y del Timer 2. Los flags de las interrupciones exteriores (INT0 e INT1) son borrados por hardware cuando se activan por flanco. Si están activadas por «nivel», éste debe volver a su estado de «no activación> para que «salga» de la rutina de interrupción. Una vez validada la interrupción y producido el salto a la rutina de servicio, la CPU guarda en la memoria pila (stack) el contenido del contador de programa (PC = Program Counter) y no salvaguarda el registro de estado (PSW). La rutina de interrupción debe finalizar con la instrucción RETI, que informa a la CPU de que la rutina ha finalizado. A renglón seguido se recuperan de la memoria de pila los dos bytes de dirección del programa principal, instrucción siguiente a la que en proceso recibió la interrupción y que concluyó antes de pasar al proceso de tratamiento. Estos dos bytes recargados en el contador de programa (PC) permiten que se siga ejecutando el programa principal, sin más que sufrir una relativa pequeña pérdida de tiempo.

8.4. NIVELES DE PRIORIDAD DE LAS INTERRUPCIONES Cada fuente de interrupción puede programarse individualmente en dos niveles de prioridad, poniendo a «1» o a «0» su bit correspondiente en el registro IP (Cuadro 8.2) del banco de registros SFR. Como se puede observar en la figura, un «1» en el bit correspondiente a la interrupción la sitúa en el nivel de prioridad más «alto» y un «0» en el nivel más «bajo».

Page 101: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 101 Ing. Rufino J. Domínguez Arellano

Los bits b6 y b7 no están asignados, y lo mismo pasa con el b5 para el Microcontrolador 8051, puesto que no tiene Timer2. Una interrupción con nivel de prioridad bajo puede ser interrumpida por otra de nivel de prioridad alto, pero no por otra de nivel de prioridad bajo. Una interrupción de prioridad alta no puede ser interrumpida por otra fuente de interrupción, salvo por la interrupción externa RESET.

Cuadro 8.2

Si dos peticiones de interrupción de distintos niveles de prioridad son recibidas simultáneamente la interrupción de nivel de prioridad alto es servida. Si la petición corresponde a interrupciones del mismo nivel de prioridad y se producen simultáneamente, un escrutinio interno da secuencia al servicio de una manera predeterminada según se muestra en la tabla 8.3

Tabla 8.3

Page 102: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 102 Ing. Rufino J. Domínguez Arellano

Así, dentro del mismo nivel de prioridad, hay una segunda estructura de prioridades determinada por el orden de escrutinio según la tabla anterior. Esta prioridad, dentro del mismo nivel, solamente es utilizada para resolver estas peticiones simultáneas. La Figura 8.6 resume y esquematiza los aspectos más importantes que han sido tratados con relación al tema: ____ ____

• INT0 e INT1 pueden ser activas por nivel o flanco.

• El registro IE (Interrupt Enable) permite «inhabilitar» todas las interrupciones o «habilitarlas» individualmente.

• El registro IP (Interrupt Priority) puede disponer cada interrupción,

individualmente, en la «cola» de interrupciones de alta o baja prioridad.

Hasta aquí se ha tratado el tema de las interrupciones de una forma general. A continuación se estudia cada uno de los tipos de interrupciones, exceptuando las de los puertos de comunicaciones.

Figura 8.6

Page 103: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 103 Ing. Rufino J. Domínguez Arellano

8.5. INTERRUPCIONES EXTERNAS (INT0) E (INT1) Estas interrupciones externas, como se pueden observar en la Figura 8.6, pueden ser activas por nivel o por flanco descendente, dependiendo del estado del bit 0 (IT0) para INT0 y del bit 2 (IT1 ) para INT1 en el registro TCON (Cuadro 7.2). Los flags que activan estas interrupciones son los bit 1 (IE0) y bit 3 (IE1), también del registro TCON. Cuando se genera una interrupción externa por flanco del tipo INT0 o INT1, el indicador se activa (se pone a «1») y se desactiva (se pone a «0»), cuando el servicio de interrupciones vectoriza para la ejecución de la rutina, entonces se dice que lo ha borrado el hardware del microcontrolador. Si la interrupción ha sido generada por nivel, la señal externa activa el indicador y la puesta a «cero» del mismo se hace por software, mediante una instrucción que pone el indicador a cero actuando sobre el propio bit en el registro correspondiente, naturalmente, una vez que la señal de activación de la interrupción puesta a nivel bajo se desactiva pasando a nivel alto. Para ilustrar el funcionamiento y manejo de las interrupciones se propone una serie de ejercicios significativos para cada tipo de interrupción. En este apartado se muestran las interrupciones externas y prioridades.

Ejercicio 8.1. Interrupciones externas. DESPLA0.ASM

• Descripción del programa El programa consta de un cuerpo principal que pretende simular el funcionamiento de la pantalla de luces deslizantes del «Auto Increible». Un bit se desplaza de izquierda a derecha y de derecha a izquierda y excitará 8 leds situados a la salida del Puerto 0 (P0). Una rutina de temporización permite modificar la frecuencia de desplazamiento del bit. ____ En estas condiciones se tiene el efecto referido, pero cuando por el pin 12 (INT0), interrupción externa del microcontrolador, se produce un flanco descendente, y dado que está habilitado este tipo de interrupción, el microcontrolador ejecuta una rutina, asociada a la interrupción, cuyos efectos externos son hacer «parpadear» diez veces y simultáneamente todos los leds del Puerto 0 (P0) para, una vez concluida esta secuencia, continuar con el programa principal del bit deslizante. A continuación se indican, someramente, las operaciones que van a tener lugar de una manera secuenciada: --Cuando el microcontrolador recibe la interrupción y ésta es aceptada, por estar habilitada (IE), el contador de programas (PC) no se incrementa para ejecutar la

Page 104: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 104 Ing. Rufino J. Domínguez Arellano

siguiente instrucción, sino que consulta la tabla de vectorizaciones en la localidad correspondiente al tipo de interrupción. --El contador de programas salta a ejecutar la rutina situada en la dirección señalada en la tabla de vectorización. -Antes de proceder a la ejecución de la rutina asociada a la interrupción, guarda en la pila el PC de la instrucción siguiente en la que fue interrumpido el sistema para, una vez concluida la rutina de interrupción, conocer la instrucción que le correspondía ejecutar y permitir, de esta manera, no romper la secuencia del programa principal. -En este punto se recuerda al usuario que guarde en la pila el registro de estado (PSW) por si es modificado por la rutina y preste atención a los registros y variables que son utilizados en común y no se encuentre con que los valores que utilizaba en el programa principal han sido modificados por la rutina, lo que rompería la secuencia del programa principal. En este caso, proceda a guardarlos, justo al comienzo del programa de la rutina, ya recuperarlos antes de que ésta concluya. -El regreso de la rutina se efectúa colocando al final de la misma, y justo después de recuperar los valores de los registros y variables de la pila, la instrucción RETI. A continuación se muestra el circuito (Fig. 8.7), el mapa de memoria, y el programa fuente del ejercicio. Nota: Es importante Que el interruptor o pulsador utilizado para producir la interrupción sea «antirrebote») (véase Figura 6.6).

Figura 8.7

Page 105: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 105 Ing. Rufino J. Domínguez Arellano

• Configuración de registros:

• Programa Fuente:

; DESPLA0.ASM ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0)

; RETARDO EQU 0300H ; Comienzo de la RUTINA de RETARDO. INT0 EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. ;

ORG 0003H ; Vectorización de la RUTINA DE INTERRUPCION (INT0). JMP INT0 ; Llamada a la RUTINA DE INTERRUPCION.

; ORG 0200H MOV TCON, #01H ; Se programa la INTO por flanco. MOV IE, #81H ; Habilitada interrupción INTO. MOV A, #00H SETB C ; Se pone el CARRY a 1.

SAL0: RLC A ; Rotación de un bit ala izda.

Page 106: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 106 Ing. Rufino J. Domínguez Arellano

MOV P0, A ; Se escribe en el Puerto 0 (P0). CALL RETARDO ; Se llama a la rutina de RETARDO. JNB A, 7, SAL0 ; Se testea el bit 8. Si es < > O se comienza el

; desplazamiento a la dcha. SAL1: RRC A

MOV P0, A CALL RETARDO JNB A,0, SAL1 JMP SAL0 ;

ORG 0300H ; Comienzo de la rutina de RETARDO. PUSH A ; Se guarda el ACC en el «stack» (PILA). MOV A, R0 PUSH A MOV R0, #04H

SAL2: MOV R1, #20H SAL3: MOV R2, #FFH SAL4: DJNZ R2, SAL4

DJNZ R1, SAL3 DJNZ R0, SAL2 POP A MOV R0, A POP A ; Se recupera ACC del «stack». RET ;

ORG 0400H ; Comienzo de la rutina de interrupción INT0.

; pone en intermitencia todos los bits del P0. PUSH A MOV A, PSW PUSH A ; Se guarda en el «stack» el registro de estado. MOV A, R0 PUSH A ; Se guarda. también, el registro R0. MOV R0, #0AH

SAL5: MOV P0, #FFH CALL RETARDO MOV P0, #00H CALL RETARDO DJNZ R0, SAL5 POP A ; Se recuperan los registros del «stack». MOV R0, A POP A MOV PSW, A POP A RETI END

Page 107: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 107 Ing. Rufino J. Domínguez Arellano

Ejercicio 8.2. Prioridades. PRIOR0.ASM Se trata de ilustrar con un ejercicio el manejo del registro de prioridades en las interrupciones (IP). Puesto que el usuario está familiarizado con el funcionamiento del ejercicio anterior, se va a utilizar el mismo para esta demostración, con una interrupción más, la correspondiente a la entrada exterior activa por flanco descendente (T2EX), asociada al Timer 2 (ver Figura 7.8). Cuando se active esta interrupción se observará un cambio en la secuencia de las luces; si el programa principal genera un deslizamiento de las luces y la primera rutina (INT0) produce una secuencia de intermitencia de todos los bits del Puerto 0, la ejecución de esta rutina (T2EX) produce el intercambio alternativo de los nibbles bajo y alto del Puerto 0, como se indica a continuación:

Así estará oscilando entre los dos estados hasta ocho veces.

• Esquema del circuito (Figura 8.8) Como se puede observar en la figura, el pulsador pone en marcha simultáneamente las dos interrupciones INT0 y T2EX, ambas activas, como se podrá ver en la «inicialización» en flanco descendente. En función del valor escrito en el registro de prioridades (IP) se estudian dos opciones: ____ a) Que se ejecute la interrupción INT0 y posteriormente T2EX, pulsando una sola vez. b) Que se invierta el orden de ejecución.

Page 108: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 108 Ing. Rufino J. Domínguez Arellano

Figura 8.8

• Mapa de memoria

• Algoritmo Como se ha señalado antes, han de observarse, de momento, dos opciones a) y b). Para que se cumpla la primera opción, no es necesario programar el registro de prioridades (IP), puesto que, por defecto, según se estudió, INT0 tiene mayor prioridad que T2EX, por esta razón, en este programa:

IP ← 00H Para que se cumpla la segunda opción, a T2EX se le da la prioridad «alta» ya lNT0 la prioridad «baja», es decir:

Page 109: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 109 Ing. Rufino J. Domínguez Arellano

PT2 ← 1 IP ←20H

PX0 ← 0

• Programa fuente

; PRIOR0.ASM. ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) , ; además, presenta otros programas alternativos

; RETARDO EQU 0300H ; Comienzo de la RUTINA de RETARDO. INT0 EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. T2EX EQU 0500H ; Comienzo de la RUTINA de INTERRUPCION (T2EX). ; ; --------------------------------------------------------------------------------------------------------

ORG 0003H ; Vectorización de la RUTINA de INTERRUPCION ; (INT0).

JMP INT0 ; Llamada a la RUTINA DE INTERRUPCION. ; ; --------------------------------------------------------------------------------------------------------

ORG 002BH ; Vectorización de RUTINA T2EX JMP T2EX ;

; --------------------------------------------------------------------------------------------------------

ORG 0200H ; Programa principal. MOV TCON, #0lH ; (TCON←01H flanco); (TCON←00H nivel). MOV T2CON, #08H ; Se programa la T2EX por flanco. MOV IE, #A1H ; Habilitada interrupción INT0 y T2EX. MOV IP, #00H ; Define prioridad. IP= O por defecto.

: IP= 20H alta prioridad para T2EX. MOV A, #00H ; Pone a “0" ACC. SETB C ; Se pone el CARRY a “1".

SAL0: RLC A ; Rotación de un bit a la izda. MOV P0, A : Se escribe en el Puerto 0 (P0). CALL RETARDO ; Se llama a la rutina de RETARDO. JNB A. 7, SAL0 ; Se testea el bit 8. Si es < > 0 se comienza el

; desplazamiento a la dcha. SAL1: RRC A ; Rotación de un «bit» a la dcha.

MOV P0, A ; Se escribe en el (P0). CALL RETARDO JNB A,O, SAL1 ;Salta si el bit ACC.O es <> de «0». JMP SAL0 ; ; -------------------------------------------------------------------------------------------------------- ORG 030H ; Comienzo de la rutina de RETARDO. PUSH A ; Se guarda el ACC en el «stack» (PILA). MOV A, R0 PUSH A MOV A, PSW PUSH A

Page 110: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 110 Ing. Rufino J. Domínguez Arellano

MOV R0, #15H ; Rutina comentada en el Ejercicio 5.5. SAL2: MOV R1, #2OH SAL3: MOV R2, #FFH SAL4: DJNZ R2, SAL4

DJNZ R1, SAL3 DJNZ R0, SAL2 POP A MOV PSW, A POP A MOV R0, A POP A ; Se recupera ACC del «stack». RET ; ; -------------------------------------------------------------------------------------------------------- ORG 0400H ; Comienzo de la rutina de interrupción INT0

; poniendo en intermitencia todos los bits del P0. PUSH A MOV A, PSW PUSH A ; Se guarda en el «stack» el registro de estado. MOV A, R0 PUSH A ; Se guarda, también, el registro R0. MOV R0, #0AH ; Contador de eventos.

SAL5: MOV P0, #0FFH CALL RETARDO MOV P0, #00H CALL RETARDO DJNZ R0, SAL5 POP A ; Se recuperan los registros del «stack». MOV R0, A POP A MOV PSW, A POP A RETI ; -------------------------------------------------------------------------------------------------------- ORG 0500H ; Comienzo de la rutina de interrupción (T2EX). ANL T2CON, #BFH ; Se borra el flag EXF2 por «soft». PUSH A MOV A, PSW PUSH A MOV A, R0 PUSH A : Hasta aquí guardar registros en el «stack». MOV R0, #08H ; Contador de eventos.

SAL6: MOV P0, #0F0H CALL RETARDO MOV P0, #0FH CALL RETARDO DJNZ R0, SAL6 POP A : Se recuperan los registros del «stack». MOV R0, A POP A MOV PSW, A POP A RETI ; END

Page 111: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 111 Ing. Rufino J. Domínguez Arellano

En este ejercicio es interesante comprobar, además de las interrupciones simultaneas, los siguientes aspectos:

• En el caso de que se esté ejecutando una interrupción, ¿qué sucederá si se activa otra de menor o igual prioridad ?

-Lógicamente. la segunda interrupción no interrumpirá la ejecución de la primera, pero será ejecutada, una vez finalizada la primera, porque la memoriza en la cola de ejecución de rutinas.

• .¿Qué sucederá si ejecutando el programa de la rutina de interrupción se activa otra de mayor prioridad?

-Abandona la rutina de interrupción para ejecutar la segunda, y una vez finalizada ésta regresará a completar la ejecución de la primera. Para comprobar este comportamiento se deberá independizar las interrupciones colocando para cada entrada un pulsador.

8.6. INTERRUPCIONES INTERNAS PRODUCIDAS POR EL TIMER 0 y 1 Las interrupciones de los Timers 0 y 1 son generadas por TF0 y TF1 respectivamente (Figura 8.3), al producirse un desbordamiento en el registro de conteo del Timer correspondiente. Con la intención de servir de repaso y a modo de resumen se muestran a continuación los registros de conteo, los indicadores que son afectados según el Timer, y los modos de trabajo. En cualquier caso, el flag activo es borrado por hardware cuando sea vectorizada la rutina de atención a la interrupción.

Page 112: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 112 Ing. Rufino J. Domínguez Arellano

Ejercicio 8.3. Interrupción Timer 1 en Modo 1 (16 bits). DESPLA1.ASM Este ejercicio produce el desplazamiento de un bit a la izda. y se visualiza en el Puerto 0. El desplazamiento es siempre en la misma dirección. La velocidad de desplazamiento del bit depende del valor que el usuario le ponga en el Puerto P1 con los ocho conmutadores, según el peso de los bits.

• Objetivos -Repasar la programación de los Timers. -Ver cómo se activa una interrupción al producirse el «desbordamiento» en los Timers. -Observar el mecanismo de la vectorización. En este caso se utiliza el Timer 1, pudiendo sustituirse sin ningún inconveniente por el Timer 0.

Page 113: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 113 Ing. Rufino J. Domínguez Arellano

• Esquema del circuito (Figura 8.9)

Figura 8.9

• Programa fuente

; DESPLA1.ASM. ; Desplaza un bit en el puerto P0, con velocidad variable en ; función del dato leído en el puerto de entrada P1 ; ORG 001BH JMP 030H ; Vector de la interrupción Timer 1. ; ORG 0200H MOV TMOD, #10H ; Timer 1 como «temporizador» en Modo 1. MOV IE, #88H ; Validación de interrupción Timer 1. MOV IP, #08H ; Prioridad para el Timer 1 (no es necesaria). MOV A, #01H ; Se carga el ACC con 01H. MOV TH1, #00H ; Se carga la parte alta del Timer 1. MOV TL1, #00H ; Se carga la parte baja del Timer 1. MOV TCON, #40H ; Se arranca el Timer 1.

SAL0: NOP JMP SAL0 ; Se cierra en un bucle que «no hace nada». ; ; --------------------------------------------------------------------------------------------------------- ORG 0300H ; Rutina de desplazamiento y lectura de P1 RL A ; Desplazamiento a la izq. del ACC. MOV P0, A ; Saca dato por el P0 MOV TL1, P1 ; Lee P1 MOV TH1, P1 RETI ; END

Page 114: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 114 Ing. Rufino J. Domínguez Arellano

8.7. INTERRUPCIONES INTERNAS DEL TlMER 2 (sólo 8052) En el microcontrolador 8052 la interrupción del Timer 2 puede producirse por dos caminos, según se active TF2 o/y EXF2. En el Ejercicio 8.2 se estudió la interrupción exterior por flanco descendente (T2EX), dentro del contexto de las prioridades. Ahora le toca el turno al análisis del funcionamiento de la interrupción producida por el Timer/ counter 2. El flag activado por el Timer 2 deberá ser borrado por software, accediendo previamente al registro T2CON (Cuadro 7.3 y Figura 7.8).

Ejercicio 8.4. El Timer 2 como generador de interrupciones Este ejercicio es una variante del Ejercicio 8.1 (DESPLA0.ASM). En él se trata de variar la frecuencia de desplazamiento, según los datos fijos almacenados previamente en una tabla de tal forma que el desplazamiento se haga “rápido” en los extremos y “lento” en el centro (Figura 8.10). El Ejercicio 6.4 también utilizaba una tabla. El valor en hexadecimal que figura entre los bits del puerto de salida (P0) (ver Figura 8.10) es el que se recargará en los registros contadores TL2 y TH2; estos valores deberán ser cargados previamente en una tabla de datos.

• Objetivos

-Estudiar las interrupciones del Timer 2. -Cargar los registros de conteo con los datos procedentes de una tabla. -Observar el borrado del flag de interrupción del Timer 2 por software

Figura 8.10

Page 115: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 115 Ing. Rufino J. Domínguez Arellano

. • Esquema del circuito (Figura 8.11)

Figura 8.11

• Programá fuente

; INTETIM2.ASM. ; ; Igual que DESPLA0.ASM, pero la velocidad de desplazamiento ; es función de los valores registrados en una TABLA. ;

TABLA EQU 0500H ; Comienzo de la TABLA. AUX EQU 40H ; Variable que indica el sentido de ROTACION. ROTA EQU 41H ; Variable dato de salida por P0. TIMER2 EQU 0300H ; Comienzo rutina Timer 2. ; ; ------------------------------------------------------------------------------------------------------------

ORG 0500H ;Comienzo de los datos de la TABLA. .BYTE FFH, 80H, 40H, 00H, 40H, 80H, FFH ORG 002BH ; Vector de rutina interrupción (Timer 2). JMP TIMER2 ; ; ------------------------------------------------------------------------------------------------------------- ORG 020H ; Programa de inicialización y principal. MOV DPTR, #TABLA : Se carga inicio de TABLA en puntero DPTR. MOV AUX, #01H ; Se inicia movimiento rotación a izda. MOV ROTA, #00H ; Se inicia valor salida leds por puerto PO. SETB C ; C ← 1. Este es el bit que se desplaza. MOV IE, #A0H ; Se habilita interrupción Timer 2. MOV IP, #40H ; Máxima prioridad Int. Time,2 (no es necesario). MOV TL2, #00H ; Se carga registro contador Timer 2. MOV TH2, #00H

Page 116: Microcontrolador 8051

El Microcontrolador 8051 CAP 8

_________________________________________________________________________ ITMAR, Mazatlán 116 Ing. Rufino J. Domínguez Arellano

MOV T2CON, #04H ; Se arranca Time,2. SAL0: NOP ; Simula el programa principal.

JMP SAL0 ; ; -------------------------------------------------------------------------------------------------------------

ORG 0300H ; Comienzo de la rutina de interrupción. ANL T2CON, #BFH ; Se borra la bandera de interrupción. PUSH A ; Guardar registros programa principal. MOV A, AUX ; Para saber el sentido de rotación que ... JZ SAL1 ; ...corresponde. Si AUX = 01H a la izda ... MOV A, ROTA ;...si AUX=00H a la dcha. RLC A MOV ROTA, A JMP SAL2

SALl: MOV A, ROTA RRC A MOV ROTA, A

SAL2: MOV P0, ROTA ; El contenido de ROTA se saca por el P0. MOV A, #00H ; Se inicializa ACC. MOVC A, @A+DPTR ; Se obtiene dato de temporización de TABLA. MOV TL2, A ; Se carga dato TABLA en Time,2. MOV TH2, A MOV T2CON, #04 ;Se arranca Timer2. INC DPTR ; Se incrementa puntero de TABLA. MOV A, AUX ; Si el bit que se desplaza llegó al extremo ... JZ SAL3 ; ...del recorrido se cambia el sentido de la ... MOV A, ROTA ; ...rotación. cambiando el valor de AUX. CJNE A, #80H, SAL4 MOV AUX, #00H MOV DPTR, #TABLA ; Se inicializa puntero de TABLA. JMP SAL4

SAL3: MOV A, ROTA CJNE A, #01H,SAL4 MOV AUX, #01H MOV DPTR, #TABLA

SAL4: CLR C POP A RETI ; END

Page 117: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 117 Ing. Rufino J. Domínguez Arellano

CAPITULO 9

Comunicaciones

9.1. INTRODUCCION El puerto serie de los Microcontroladores 8052/8051 trabaja en el modo full-duplex, lo que significa que puede recibir y transmitir simultáneamente. Como receptor tiene un buffer que le permite recibir un segundo byte, antes de que el byte previamente recibido haya sido leído por el registro receptor. (Sin embargo, si el primer byte no ha sido leído en el tiempo en que el segundo byte se completa, uno de los dos bytes se pierde.) A los registros receptor y transmisor de los puertos serie se accede por un único registro que se denomina SBUF, estando situado en la dirección 99H del SFR (Special Function Register). Escribiendo en el SBUF carga el byte a transmitir y leyendo del SBUF se accede al byte recibido. El puerto serie puede operar en cuatro modos seleccionados utilizando los bit 6 = SM1 y bit 7 = SM0 del registro SCON (Apartado 9.3):

• Modo 0: Los datos en serie entran y salen a través de la línea RXD. TXD presenta los impulsos de desplazamiento del reloj. La palabra de información a transmitir o recibir es de 8 bits, siendo el primero en salir o en llegar el bit menos significativo. La velocidad de transmisión expresada en baudios (baudio = bits/seg) está dada por la relación 1/12 de la frecuencia de reloj del microcontrolador .

• Modo 1: Es una comunicación más acorde con los estándares habituales.

Utiliza 10 bits que son transmitidos a través de TXD o recibidos a través de RXD. Los bits utilizados tienen la siguiente función: - 1 bit de start (0) (señala el comienzo). - 8 bits de datos (LSB = primero). -1 bit de stop ( 1 ). La velocidad de transmisión puede ser ajustada por el usuario dentro de un amplio rango.

• Modo 2: Transmite a través de TXD y recibe por RXD como en el caso anterior. Utiliza 11 bits distribuidos de la siguiente forma: -1 bit de slart (0). -8 bits de datos (LSB primero). -1 bit de dato (9.0 bit) (programable). -1 bit de Stop (1)

Page 118: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 118 Ing. Rufino J. Domínguez Arellano

El noveno bit, en la transmisión, puede ser «0» o «1» y es la imagen del bit TB8 en el registro SCON. Así, el bit de paridad (P, en PSW) puede ser cargado en TB8 y asignado a este noveno bit en la transmisión. En la recepción este noveno bit se refleja en el bit RB8 del registro SCON, mientras el bit de Stop es ignorado. La velocidad de transmisión es programable bien a 1/32 o 1/64 de la frecuencia del oscilador.

• Modo 3: Como en el caso anterior, 11 bits son transmitidos a través de TXD

o recibidos por RXD, de la siguiente manera: -1 bit de slart (0). -8 bits de datos (LSB primero). -1 bit de dato (9.o bit). -1 bIt de stop ( 1).

Como se puede observar, el Modo 3 es igual al Modo 2 excepto en la velocidad de transmisión. En el Modo 3 la velocidad de transmisión puede ser ajustada por el usuario dentro de un amplio rango.

En los cuatro modos, la transmisión es iniciada mediante cualquier instrucción que use el registro SBUF como destino. La recepción se inicia en MODO 0 por la condición R1=0 y REN=1 y en los otros modos Modo 1, 2 y 3, cuando se recibe el bit start y REN=1.

9.2. COMUNICACIONES EN EL ENTORNO MULTIPROCESADOR Los Modos 2 y 3 tienen una especial adaptabilidad para las comunicaciones en el entorno multiprocesador. En estos modos se reciben 9 bits de datos, siendo capturado el noveno para el indicador RB8 del registro SCON y finaliza con el bit de stop. El puerto puede ser programado de tal manera que, cuando el bit de stop se recibe, la interrupción del puerto serie se activará, sólo si RB8 =1. Esta opción es permitida activando el bit SM2 en el registro SCON. Veamos seguidamente una forma de utilizar esta opción en el entorno multiprocesador. Cuando el procesador «maestro» quiere transmitir un bloque de datos a uno de los «esclavos», primero envía un byte de dirección que identifica el «esclavo». Un byte de dirección difiere de un byte de datos en que el «noveno bit» es «1» en el byte de dirección, y «0» en el byte de datos. Con SM2 =1, ningún «esclavo» será interrumpido por el byte de datos. Un byte de dirección, sin embargo, interrumpirá a todos los «esclavos», de manera que cada uno pueda examinar el byte recibido y ver si se refiere a su dirección para entrar en comunicación con el «maestro». El «esclavo» direccionado borrará el bit SM2 y se preparará para recibir el byte de datos que le será enviado. Los procesadores «esclavos» que no han sido direccionados dejan activo su bit SM2 y continúan sus procesos ignorando el byte de datos que es enviado por el «maestro».

Page 119: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 119 Ing. Rufino J. Domínguez Arellano

SM2 no tiene ningún efecto en Modo 0, y en Modo 1 puede utilizarse para compro- bar la validez del bit de Stop. En una recepción en Modo 1, si SM2=1, la interrupción de la recepción no se verá activada a no ser que se reciba un bit de Stop válido, es decir, a nivel alto.

9.3. EL REGISTRO DE CONTROL DEL PUERTO SERIE (SCON) El registro SCON (Serial PorI Control Register) (Cuadro 9.1) es el registro de control y de estado del puerto serie, situado en el SFR. Este registro contiene:

-Modo de trabajo Modo 0, 1, 2 y 3) y de selección de velocidad de comunicación. -Noveno bit de dato para transmitir y recibir (TB8 y RB8). -Gestión de interrupciones del puerto serie (TI y RI).

CUADRO 9.1

Page 120: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 120 Ing. Rufino J. Domínguez Arellano

9.4. VELOCIDAD DE COMUNICACION La velocidad en baudios de comunicación en Modo 0 se fija por la relación:

12oladosmicrocontr deloscilador del frecuencia 0 modoen BAUDIOS =

Los baudios en, Modo 2 dependen del valor del bit 7 (SMOD) del registro PCON en el SFR. Si SMOD =0 (valor por defecto después del RESET) los baudios son 1/64 de la frecuencia del oscilador-reloj del microcontrolador. Si SMOD = 1 la velocidad de comunicación es 1/32 de la frecuencia del oscilador-reloj del microcontrolador, es decir:

oscilador) del frecuencia(64

2 2 modoen BAUDIOSSMOD

=

En el 8051, los baudios en, Modo 1 y 3 son determinados por la relación de «desbordamiento» del Timer 1. En el 8052 la velocidad de comunicación puede ser obtenida utilizando el Timer 1 o el Timer 2 o con ambos (uno para transmitir y el otro para ret:ibir).

9.4.1. El Timer 1 como generador de baudios Cuando el Timer 1 es utilizado como generador de baudios, éstos son obtenidos en Modo 1 y 3, por el valor de carga y «desbordamiento» del registro contador del Timer y el valor de SMOD como sigue:

1)Timer entodesbordami derelación (32

2 3y 1 modosen BAUDIOSSMOD

=

El Timer 1I puede ser configurado bien como temporizador o como contador y en cualquiera de sus tres modos. Se aconseja, porque así se utiliza en la mayoría de las aplicaciones, configurarlo como temporizador en modo autorrecarga (TMOD = 20H). En este caso los baudios vienen dados por la fórmula:

=

TH1) - 12(256oscilador del frecuencia

322 3y 1 modosen BAUDIOS

SMOD

Page 121: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 121 Ing. Rufino J. Domínguez Arellano

Se pueden lograr velocidades de comunicación muy bajas con el Timer 1, permitiendo la interrupción y configurando el Timer para el conteo con 16 bits (TMOD = 10H) y usando la interrupción del Timer para efectuar la recarga sobre el registro de conteo. La Tabla 9.1 lista algunas de las velocidades de comunicación comúnmente utilizadas y cómo pueden ser obtenidas utilizando el Timer 1.

TABLA 9.1

Así, por ejemplo, para obtener una velocidad de comunicación de 9.600 baudios con el Timer 1 en modo «autorrecarga» como temporizador. Es decir, con el Timer 1 en Modo 2. Si SMOD = 0, y TH1 = FDH = 253, y aplicando la fórmula:

=

TH1) - 12(256oscilador del frecuencia

322 3y 1 modosen BAUDIOS

SMOD

960083.9599253) - 12(256

11059x10321 BAUDIOS

3

≅=

=

9.4.2. El Timer 2 como generador de baudios En el 8052 el Timer 2 es configurado como generador de baudios inicializando TCLK y/o RCLK en el registro T2CON tal como se indica en el Cuadro 9.2

Page 122: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 122 Ing. Rufino J. Domínguez Arellano

CUADRO 9.2

Se puede observar a la derecha de la Figura 9.1, que las velocidades en baudios para la transmisión y recepción pueden ser diferentes, según se active RCLK y/o TCLK y así poder actuar simultáneamente con el Timer 1 y el Timer 2. EI modo generador de baudios actúa de forma similar que el modo «autorrecarga» estudiado en el Capítulo 7. Al producirse el ciclo de «desbordamiento» en TH2, los registros de conteo del Timer 2 son recargados con los valores de 16 bits de los registros RCAP2H y RCAP2L que previamente fueron inicializados por software. Los baudios en Modo 1 y 3 son determinados por la relación de desbordamiento del Timer 2. De una forma general se pueden expresar así:

162Timer entodesbordami deRelación 3y 1 modosen BAUDIOS =

Figura 9.1

Page 123: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 123 Ing. Rufino J. Domínguez Arellano

Concretando, el Timer 2 puede ser configurado bien como temporizador o como contador. En la mayoría de las aplicaciones se configura como Timer (C/T2 =0). La operación como Timer en el modo «generador de baudios» es un poco diferente de la estudiada como «temporizador» en el Apartado 7.3.2. Normalmente como «temporizador común» el registro de conteo se incrementaba cada ciclo máquina, es decir, a 1/12 de la frecuencia del oscilador. Como «generador de baudios» se incrementa cada periodo de estado, es decir, a 1/2 de la frecuencia del oscilador. En este caso los baudios están dados por la fórmula:

RCAP2L):RCAP2H - (65536 32oscilador del frecuencia 3y 1 modosen BAUDIOS =

donde (RCAP2H:RCAP2L) es el contenido de dichos registros en formato de 16 bits, como enteros y sin signo. Un estudio más detallado de la Figura 9.1 indica que para que actúe como «generador de baudios» debe ser RCLK = TCLK = 1 en T2CON, como indica la figura. El ciclo de «desbordamiento» en TH2 no activa el indicador TF2 ni produce interrupción, aspecto este que podría darse en los timers del Capítulo 7. Por consiguiente, cuando se utilice el Timer 2 como «generador de baudios» no se debe desactivar la interrupción del Timer 2. Obsérvese además que, si EXEN2 se activa, una transición descendente en el pin T2EX activará la bandera EXF2, pero no causará recarga del Timer 2. Así pues, cuando el Timer 2 se utilice como generador de baudios, T2EX puede ser empleado, si se desea, como un generador de interrupciones externas. Se aconseja no leer ni escribir los registros TH2 y TL2 cuando el Timer 2 está trabajando TR2=1) como «generador de baudios». Bajo estas condiciones el registro de conteo se incrementa cada periodo de «estado» y el resultado de una lectura o escritura puede producir una pérdida de exactitud en la evaluación del tiempo. Los registros RCAP pueden ser leídos, pero no deben ser escritos, puesto que se podría producir solapamiento en la «recarga» y originar errores de escritura y/o recarga. Si se desean hacer estas operaciones, desconéctese el Timer 2 (desactivar TR2) antes de acceder al Timer 2 o a los registros RCAP. A continuación describiremos en detalle los cuatro modos de operación.

9.5. COMUNICACIONES EN MODO 0. Este modo se establece desde los bits 6 y 7 SM0-SM1) de SCON Véase Cuadro 9.1 ).

Page 124: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 124 Ing. Rufino J. Domínguez Arellano

Como se ha dicho anteriormente la entrada y salida de datos en serie se produce a través del pin 10 RXD) del microcontrolador. El pin 11 (TXD) es la salida de los pulsos de desplazamiento Shift Clock). Ocho bits de datos se transmiten o reciben comenzando por el menos significativo LSB). La velocidad es fija y corresponde a 1/12 de la frecuencia del oscilador del microcontrolador. En la Figura 9.2 se muestra un diagrama simplificado y funcional del puerto serie en Modo 0. Para poder seguir mejor el proceso de comunicación en Modo 0, utilícense los cronogramas de la Figura 9.3 al tiempo que se lee el siguiente texto. La transmisión es iniciada por cualquier instrucción que utiliza SBUF como registro de destino. La señal de «escritura en SBUF» en el estado S6P2, también carga un «1» en la posición novena del registro de desplazamiento de transmisión e indica al bloque control TX que comience la transmisión. El intervalo de tiempo que transcurre desde «la escritura en SBUF» y la activación de la señal de control SEND es igual aun ciclo máquina completo. SEND autoriza la salida del dato contenido en el registro de desplazamiento de una forma alternada a través del pin 10 RXD =P3.0) y también autoriza la salida de la señal de reloj simétrica (Shjft Clock) a través del pin 11 TXD =P3.1 ). La señal TXD SHIFT CLOCK) está a nivel bajo durante los estados S3, S4 y S5 de cada ciclo máquina, ya nivel alto durante los estados S6, S1 y S2. En la fase S6P2 de cada ciclo máquina en el que SEND es activa, el contenido del registro de desplazamiento transmisor se desplaza a la derecha una posición. Por cada bit de dato que se desplaza al exterior por la derecha un bit «cero» ingresa por la izquierda. Cuando el bit más significativo MSB) del byte de datos está en la posición de salida del registro de desplazamiento, entonces el «1» que fue inicialmente cargado en la posición novena se encuentra a la izquierda del MSB y todas las posiciones a la izquierda de éste contienen «ceros». Esta condición previene al bloque de control TX para que haga un último desplazamiento, desactive SEND y active la señal de interrupción TI. Estas acciones ocurren en la fase S1P1 del décimo ciclo máquina después de «escribir en SBUF». La recepción es iniciada por la condición REN =1 y R1 =0. En la fase S6P2 del siguiente ciclo máquina, la unidad de control RX escribe los bits 11111110 en el registro de desplazamiento receptor, y en la siguiente fase de reloj activa RECEIVE. La señal de control RECEIVE autoriza la salida de la señal de reloj simétrica SHIFT CLOCK por la línea TXD. SHIFT CLOCK efectúa la transición en la fase S3P1 y S6P1 de cada ciclo máquina. En la fase S6P2 de cada ciclo máquina en que la señal de control RECEIVE es activa, el contenido del registro de desplazamiento receptor es desplazado a la izquierda una posición. El bit que

Page 125: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 125 Ing. Rufino J. Domínguez Arellano

ingresa desde el exterior por la derecha es el bit de dato que ha sido muestreado en el pin 10 (RXD=P3.0) en la fase S5P2 del mismo ciclo máquina.

Figura 9.2 Como los bits de datos entran por la derecha, los «unos» cargados inicialmente son desplazados «afuera» por la izquierda. Cuando el «0» cargado inicialmente se encuentre en el extremo izquierdo del registro de desplazamiento, entonces el bloque de control RX hace un último desplazamiento y carga SBUF, con el byte ingresado. En el estado S1P1 del décimo ciclo máquina después de la escritura en SCON, la señal de control RECEIVE es borrada y la bandera de interrupción RI es puesta a «1».

Page 126: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 126 Ing. Rufino J. Domínguez Arellano

Figura 9.3

9.5.1. Resumen comunicaciones en Modo 0 -Longitud palabra dato: 8 bits. Primero el bit LSB. -Formato palabra dato:

Page 127: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 127 Ing. Rufino J. Domínguez Arellano

- Esquema simplificado de comunicaciones:

Figura 9.4

Ejercicio 9.1. Transmisión en Modo 0

• Objetivos

-Programar el puerto serie como transmisor en Modo 0. -Transmitir por el puerto serie el byte que se introduce en paralelo por el Puerto 0. -Obtener la señal de sincronismo y visualizarla por el pin TXD.

• Esquema Como se ha indicado en los objetivos, por la línea RXD se obtiene el byte de datos que previamente se captura en paralelo por el Puerto 0, como se indica en la

Page 128: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 128 Ing. Rufino J. Domínguez Arellano

Figura 9.5, la señal de sincronismo se obtiene en el pin TXD. El dato que se transmite en el ejemplo es AAH.

Figura 9.5

ETIQUETA CODIGO

MOV SCON, #00 ; Pto. Serie en Modo 0. Transmisión. CLR P2.0 ; Bit de aviso de transmision en cero.

B0205: MOV A, P0 ; Dato a transmitir. MOV SBUF, A ; Inicia la transmisión. SETB P2.0 ; Avisa que inicia la transmisión.

B020B: MOV A, SCON JZ B020B ; ¿Ya se transmitió el 8º bit ? CLR P2.0 ; Borra bit de aviso de transmisión. LCALL SUB1 ; Solo un retardo. CLR .TI ; Borro bandera de interrupcion. ; Esto permite que haya otra transmisión

SJMP B0205 ; Empiezo de nuevo. ;

SUB1: MOV R0, #01 ; Rutina de retardo. B0302: MOV R1, # 03 B0304: MOV R2, #05 B0306: DJNZ R2, B0306

DJNZ R1, B0304

DJNZ R0, B0302 RET

Page 129: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 129 Ing. Rufino J. Domínguez Arellano

Ejercicio 9.2. Recepción en Modo 0

• Objetivos -Programar el puerto serie como receptor en Modo 0. -Recibir en el puerto serie el byte que se envía desde el exterior por el pin RXD. -Efectuar el tratamiento de la comunicación utilizando interrupciones.

• Esquema del montaje En la Figura 9.6 se observa cómo el dato se introduce utilizando un pulsador; la frecuencia de captura en el pin RXD es tan elevada que sólo se puede observar la presencia de «unos» o «ceros» en el Puerto 0 de salida.

Figura 9.6

Page 130: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 130 Ing. Rufino J. Domínguez Arellano

En el pin TXD se tendrán los impulsos de sincronismo que se corresponden con los pulsos de reloj del registro de desplazamiento.

• Listado del programa

ETIQUETA CODIGO ORG 0023H

LJMP 0400 ; ;------------------------------------------------------------------------- ; Inicialización ORG 200H

B0200: MOV IE, #90 MOV SCON, #10 LCALL RETARDO SJMP B0200 ; ;------------------------------------------------------------------------ ; Rutina de RETARDO ORG 300H

RETARDO: MOV R0, #02 B0302: MOV R1, #FF B0304: MOV R2, #FF B0306: DJNZ R2, B0306

DJNZ R1, B0304 DJNZ R0, B0302 RET ; ;----------------------------------------------------------------------- ; Rutina de Interrupción

; Realiza las siguientes tareas: ; 1) Sale del modo de recepción. ; 2) Salva registros en el slack. ; 3) Carga el contenido de SBUF en el ACC. ; 4) Visualiza el dato en paralelo en el Pulerlo P0 ; 5) Temporiza su visualizaci6n. ; 6) Repone los registros del slack. . ; ORG 400H MOV SCON, #00 MOV A.R0 PUSH ACC MOV A, R1

Page 131: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 131 Ing. Rufino J. Domínguez Arellano

PUSH ACC MOV A, R2 PUSH ACC MOV A, SBUF MOV P0, A LCALL RETARDO POP ACC MOV R2, A POP ACC MOV R1, A POP ACC MOV R0, A RETI

9.6. COMUNICACIONES EN MODO 1 Seleccionado desde el registro SCON (Cuadro 9.1 ). En esta opción 10 bits se transmiten a través del pin 11I (TXD=P3.1) o se reciben a través del pin 10 (RXD=P3.0), de la siguiente manera: - 1 bit de Start (0). - 8 bits de datos (el primero, el LSB). - 1 bit de stop (1). En recepción el indicador RB8 del registro SCON es la imagen del bit de stop. En el 8051 los baudios vienen dados por la razón de desbordamiento del Timer 1 .En el 8052, vienen dados bien por la razón de desbordamiento del Timer 1 o del Timer 2, o de ambos (uno para transmitir y el otro para recibir). La Figura 9.7 muestra, de forma simplificada, un diagrama en bloques del puerto serie en Modo 1 y la Figura 9.8 presenta el cronograma de las operaciones secuenciadas en el tiempo de transmisión y recepción. La transmisión se inicia con cualquier instrucción que utilice SBUF como registro destino. La escritura en SBUF también carga un «1» en la posición del noveno bit del registro de desplazamiento transmisor y alerta a la unidad de control TX que una petición de transmisión ha sido solicitada. La transmisión comienza realmente en la fase S1P1 del siguiente ciclo máquina que resulta después del ciclo de desbordamiento del contador del timer dividido por 16 (así pues, «el tiempo de bit» está sincronizado por el contador divisor por 16 y no por la señal de «escritura en SBUF»).

Page 132: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 132 Ing. Rufino J. Domínguez Arellano

Figura 9.7

La primera operación de la unidad de control TX es activar la señal de control SEND que pone el bit de start en el pin TXD. Un tiempo de bit más tarde, la señal DATA se activa, lo que autoriza la salida del «bit» del registro de desplazamiento transmisor a través del pin TXD. El primer pulso de desplazamiento ocurre un «tiempo de bit» más tarde de la salida del primer bit de dato, como se puede ver en el cronograma. Como los bits de datos son desplazados al exterior por la derecha, sus lugares son reemplazados por ceros por la izquierda. Cuando el MSB del byte de datos está en la posición de salida del registro de desplazamiento, entonces el «1», que ha sido inicialmente cargado en la novena posición, está a la izquierda del bit MSB y el resto de posiciones a su izquierda están cargadas con ceros. Estas condiciones alertan a la unidad de control TX para que realice un último

Page 133: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 133 Ing. Rufino J. Domínguez Arellano

desplazamiento y desactive la señal SEND y active el indicador TI (petición de interrupción). Esto ocurre en el décimo ciclo de desbordamiento del contador divisor por 16 después de la instrucción de «escritura en SBUF».

Figura 9.8 La recepción es iniciada al detectar la transición (flanco descendente) en el pin RXD. Por este motivo este pin es muestreado a razón de 16 veces independientemente de la velocidad en baudios que haya sido establecida. Cuando una transición ha sido detectada, el contador divisor por 16 es inmediatamente puesto a «cero» y el dato 1FFH se escribe en el registro de desplazamiento. Poniendo a «cero» el contador divisor por 16, sincroniza los ciclos de desbordamiento con los tiempos de bit entrantes. Los 16 estados del contador dividen cada «tiempo de bit» en 16 intervalos. En los estados 7, 8 y 9 de cada «tiempo de bit>, el «bit detector» muestrea el valor de RXD. El valor aceptado es el que ha sido leído en al menos dos de las tres muestras. Esto se hace para rechazar el ruido eléctrico. Si el valor aceptado durante el primer «tiempo de bit> no es «cero», los circuitos receptor son reseteados y la unidad vuelve a alertarse para detectar otra transición de flanco descendente. Esto está previsto para rechazar falsos bits de start. Si el bit de start resulta correcto, se desplaza dentro del registro de desplazamiento y lo mismo haría con el resto de la cadena de bits. Como los bits de datos ingresan en el registro de desplazamiento por la derecha, los «unos» son desplazados fuera por la izquierda. Cuando el bit de Start llega a la posición novena, la más extrema a la izquierda del registro de desplazamiento, alerta al bloque de control RX para hacer un último desplazamiento, carga SBUF y RB8, y activa la señal RI (interrupción). La señal para cargar SBUF y RB8, y para

Page 134: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 134 Ing. Rufino J. Domínguez Arellano

activar RI, se generará si las siguientes condiciones son satisfechas en el momento en que el pulso final de desplazamiento se genera: -- 1) R1=0, y -- 2) bien SM2=0, o el bit de Stop recibido es igual a «1». Si cualquiera de estas dos condiciones no se cumplen, la cadena de bits se pierde irremediablemente. Si ambas condiciones se cumplen, el bit de Stop se alojará en el indicador RBI, los 8 bits se ubicarán en el registro SBUF, y RI se activará. En este intervalo de tiempo, tanto si las condiciones indicadas se cumplen como si no, la unidad vuelve a muestrear el pin RXD para ver si se produce un flanco descendente.

9.6.1, Resumen comunicaciones en Modo I - Longitud palabra dato: 10 bits. Primero el bit LSB. - Formato palabra dato:

- Esquema simplificado de comunicación:

-Velocidad de comunicación:

• Modo de carga y desbordamiento del Timer 1:

)(32

2 BAUDIOSSMOD

entodesbordami=

Page 135: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 135 Ing. Rufino J. Domínguez Arellano

• Timer I como temporizador con «autorrecarga»:

=

TH1) - (256 12oscilador del frecuencia

322 BAUDIOS

SMOD

• También utilizando el Timer 2 (véase Apartado 9.4.2),

-Transmisión : Comienza: Escribiendo el dato en SBUF

Termina: Activando el indicador TI

- Recepción : Comienza: Cuando REN=1 y se detecta un flanco descendente (bit start) en RXD. Termina: Activando la bandera RI

9.7. COMUNICACIONES EN LOS MODOS 2 Y 3 En esta opción 11 bits se transmiten a través de TXD, o se reciben a través de RXD, de la siguiente manera: - 1 bit de slart (0) - 8 bits de datos (el primero el LSB), - 1 bit noveno programable. - 1 bit de Stop (1). En la operación de transmisión el noveno bit de datos es la imagen del bit TB8 perteneciente al registro SCON, pudiendo asignarle el valor «0» o «1». En recepción el noveno bit de datos se refleja en el bit RB8 del registro SCON. La Figura 9.9 muestra el diagrama en bloques del puerto serie en el Modo 2. El Modo 3 presenta el mismo diagrama en bloques que el Modo 1 (Figura 9.7), siendo las diferencias mínimas, como se desprende de las explicaciones que siguen a continuación.

Page 136: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 136 Ing. Rufino J. Domínguez Arellano

Figura 9.9 El cronograma representado en la Figura 9.10 muestra las operaciones secuenciadas en el tiempo para la transmisión y recepción en el Modo 2 y 3. Las diferencias, como se aclararán en las explicaciones que siguen, residen en la velocidad de comunicación que en el Modo 2 es fija, mientras que en el Modo 3 la velocidad de comunicación es variable.

Page 137: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 137 Ing. Rufino J. Domínguez Arellano

Figura 9.10 Como en los otros modos, la transmisión se inicia por una instrucción que utilice el registro SBUF como destino. La señal de escritura en SBUF, también carga TB8 en la posición del noveno bit del registro desplazamiento transmisor y alerta a la unidad de control TX para que proceda a la transmisión una vez sea solicitada. La transmisión comienza en la fase S1P1 del ciclo de máquina siguiente que resulta a partir del desbordamiento del contador del timer dividido por 16 (así pues, el «tiempo de bit» está sincronizado con el contador divisor por 16, no con la señal de «escritura en SBUF») (Figura 9.10). La unidad de control TX comienza su gestión con la activación de SEND que pone el bit de Starl en el pin TXD. Un «tiempo de bit» más tarde DATA se activa autorizando la salida de los bits del registro de desplazamiento de transmisión a través de TXD. El primer pulso de desplazamiento ocurre un «tiempo de bit» después de la salida del primer bit de datos. También, en ese mismo instante, el registro de desplazamiento envía un «1» (bit de Stop), que ocupa la posición del noveno bit en el registro de desplazamiento. Después, sólo «ceros» se almacenan en dicho registro. Así pues, como los bits de dalos son desplazados al exterior por la derecha, por la izquierda se introducen bits «ceros». Cuando el bit reflejado de TB8 en el registro de desplazamiento está en la posición de salida, entonces el bit de Stop se encuentra justo a la izquierda del TB8 y todos los bits a la izquierda de éste son «ceros». Esta condición alerta a la unidad de control TX para que haga el último desplazamiento y entonces desactive SEND y active el indicador TI (interrupción en la transmisión). Esto sucede en el undécimo ciclo de desbordamiento del contador-divisor por 16 después de la «escritura en SBUF».

Page 138: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 138 Ing. Rufino J. Domínguez Arellano

La recepción se inicia al detectar en el pin RXD una transición descendente. Por este motivo el pin RXD es muestreado a razón de 16 veces, independientemente de la velocidad en baudios establecida. Cuando una transición ha sido detectada, el contador-divisor por 16 es inmediatamente puesto a «cero» y el dato 1FFH se escribe en el registro de desplazamiento. En los eslados 7, 8 y 9, correspondientes al intervalo de un «tiempo de bit», el «detector de bit» muestrea el valor de RXD. El valor aceptado es el que ha sido leído en al menos dos de las tres muestras. Si el valor aceptado durante el primer «tiempo de bit> no es «cero», los circuitos receptores son puestos a «cero» y la unidad vuelve a alertarse para detectar una nueva transición de flanco descendente. Si el bit de start resulta correcto, éste es ingresado en el registro de desplazamiento, y lo mismo sucederá con el resto de la cadena. Como los bits de datos ingresan en el registro de desplazamiento por la derecha, los «unos» son desplazados al exterior por la izquierda. Cuando el bit de Stara llega a la posición más extrema ala izquierda del registro de desplazamiento (que en los Modos 2 y 3 es el noveno bit), alerta al bloque de control RX para hacer un último desplazamiento, carga SBUF y RB8 y activa el indicador RI (interrupción en e] modo receptor). La señal para cargar SBUF y RB8, y para activar RI, se genera si las siguientes condiciones son satisfechas en el momento en que el pulso final de desplazamiento se produce: - 1) RI =-O y - 2) bien SM2 =0; o el noveno bit recibido es igual a «1». Si cualquiera de estas condiciones no se cumple, la cadena recibida se pierde y RI no se activa. Si ambas condiciones se cumplen, el noveno bit de datos se alojará en la bandera RBI, y los primeros 8 bits de datos se alojarán dentro del registro SBUF. Un «tiempo de bit> más tarde, se cumplan o no las condiciones indicadas más arriba, la unidad vuelve a comprobar la transición descendente en la entrada RXD. Obsérvese que el valor del bit de Stop recibido es irrelevante para SBUF, RB8 o RI.

9.7.1. Resumen comunicaciones Modo 2 y 3 - Longitud palabra dato: 11 bits. - Formato palabra dato:

Page 139: Microcontrolador 8051

El Microprocesador 8051 CAP 9

_________________________________________________________________________ ITMAR, Mazatlán 139 Ing. Rufino J. Domínguez Arellano

- Velocidad de comunicación: Se puede utilizar el Tirner 1 o el Tirner 2.

• Para el Modo 2:

)oscilador del frecuencia(64

2 BAUDIOSSMOD

=

• Para el Modo 3 (velocidad variable):

=

TH1) - (256 12oscilador del frecuencia

322 BAUDIOS

SMOD

- Transmisión: Comienza: Escribiendo en SBUF

TermIna: ActIvando el indicador TI

- Recepción : Comienza: Cuando REN=1 y se detecta un flanco

descendente (bit Start) en RXD

Termina: Activando el indicador RI


Recommended