Sunteți pe pagina 1din 139

INSTITUTO TECNOLOGICO DEL MAR, Mazatln

APUNTES DE LA MATERA DE: MICROPROCESADORES I

DEPARTAMENTO DE INGENIERIA ELECTRONICA PROF: ING: RUFINO J. DOMINGUEZ ARELLANO

El Microcontrolador 8051

CAP 1

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 bsicas: 8032/31 Memoria de programas externa8052/51 Memoria de programas interna en ROM. 8752/51 Memoria de programas interna en EPROM. Tabla 1.1

Los modelos ms populares de los microcontroladores de INTEL son los 8XX1 y ms 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 ms 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 caractersticas generales son las siguientes: CPU de 8 bits. 2 Ing. Rufino Domnguez Arellano

ITMAR Mazatln

El Microcontrolador 8051

CAP 1

Procesador booleano (operacin 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. Comunicacin asncrona 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 interrupcin de la comunicacin serie. Oscilador interno.

1.3. TERMINALES DE LOS MICROCONTROLADORES 8052/8051


La figura 1.3 muestra la distribucin de terminales del procesador 8051, tpica del resto de esta familia de microcontroladores.

ITMAR Mazatln

Ing. Rufino Domnguez Arellano

El Microcontrolador 8051

CAP 1

Vcc Vss Puerto 0 (P0)

Alimentacin positiva de 5 VDC Conexin a tierra. 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. Tambin recibe los bytes de cdigo durante la programacin del dispositivo, y salen por este puerto los cdigos durante la verificacin de la memoria de programa interna.

Puerto 1 (P1)

Puerto de entrada/salida programable. Tambin recibe la parte baja de las direcciones durante la programacin y verificacin de la memoria de programa interna. En el 8052, los bits P1.0 y P1.1 son usados por el Timer 2.

ITMAR Mazatln

Ing. Rufino Domnguez Arellano

El Microcontrolador 8051 Puerto 2 (P2)

CAP 1

Puerto de entrada/salida programable. Tambin emite la parte alta del bus de direccin en los accesos a memoria externa con direccionamiento de 16 bits. Tambin recibe la parte alta de la direccin durante la programacin y verificacin de la memoria de programa interna. Puerto de entrada/salida programable. Adems, cada bit de este puerto tiene las funciones especiales que se muestran en la tabla 1.3.

Puerto 3 (P3)

Figura 1.3

ITMAR Mazatln

Ing. Rufino Domnguez Arellano

El Microcontrolador 8051

CAP 1

_____ 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 programacin del dispositivo como entrada de los pulsos de programacin. (Program Store Enable) Esta es la seal 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 (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 direccin del programa. Vpp es la tensin de programacin, aplicada solo durante la programacin de la memoria de programa interna. 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

_____ PSEN

__ EA/Vpp

XTAL1 y XTAL 2

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

ITMAR Mazatln

Ing. Rufino Domnguez Arellano

El Microcontrolador 8051

CAP 1

RESET

Seal de inicializacin del sistema. Un nivel alto aplicado a este terminal, durante cierto tiempo, provoca que el microcontrolador pase a su estado inicial.

ITMAR Mazatln

Ing. Rufino Domnguez Arellano

El Microcontrolador 8051

CAP 2

CAPITULO 2 Organizacin 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 slo puede ser leda y tiene como mximo 64K. En el 8052 la memoria de programas interna es de 8K y en el 8051 de 4K. La seal de autorizacin 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 posicin 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 direccin 000H hasta 0FFFH y en la externa de la 1000H a la FFFFH. Si el pin EA es puesto a VSS, la bsqueda de direcciones del programa se dirige a la memoria externa en todo momento.

_________________________________________________________________________ ITMAR Mazatln 8 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

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 seales RD (read) y WR (write) para leer o escribir en la memoria de datos externa. Como anteriormente se deca, 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 seales RD y PSEN a una puerta lgica 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 grficamente estos conceptos.

2.2. MEMORIA DE PROGRAMAS


En la Figura 2.3, se observa la divisin de la memoria de programas, segn 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 vectorizacin de estas interrupciones, as la posicin de memoria 0000 corresponde al RESET y el resto figura sealado al margen. _________________________________________________________________________ ITMAR Mazatln 9 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

Como se puede observar en la Figura 2.4, el intervalo fisico entre dos interrupciones es de 8 bytes, espacio capaz para albergar una pequea rutina, pero si ste no fuera suficiente se desviara el contador de programa (PC) mediante una instruccin 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 seleccin se realiza por hardware, con la seal EA (Extern Access), poniendo este pin a VCC o a VSS respectivamente. La configuracin del hardware para que el 8052/8051, como _________________________________________________________________________ ITMAR Mazatln 10 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

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 lneas de direccin corresponden al Puerto 0 al Puerto 2, que estn dedicados al bus de direcciones; aun ms, el Puerto P0 sirve como bus de direcciones y bus de datos, multiplexados en el tiempo. Esta operacin, caracterstica 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 seal sobre P0, la seal ALE (Address Latch Enab!e) introduce esta direccin dentro del dispositivo latch 74LS373, que pasa a apuntar la direccin 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 cdigo de instruccin a travs del puerto P0. En la figura 2.6(A) se muestra un cronograma de esta operacin.

_________________________________________________________________________ ITMAR Mazatln 11 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

Las secuencias de bsqueda/ejecucin son las mismas, sea la memoria de programas interna o externa al microcontrolador; es decir, los tiempos de ejecucin no dependen de que se utilice la memoria interna o externa. La Figura 2.6 muestra el cronograma de las seales implicadas en la secuencia de bsqueda, cuando la memoria de programas es externa. La seal PSEN se activa dos veces por ciclo mquina, 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. Ms bien utiliza las seales RD (lectura) y WR (escritura). Estas seales son generadas automticamente cuando el nemnico correspondiente al cdigo de instruccin termina en la letra X. Observe cmo el acceso a la memoria de datos toma dos ciclos ms de bus que la memoria de programas. La Figura 2.6 muestra los cronogramas relativos a ambas secuencias de acceso, destacando la emisin de direcciones por parte de P0 y P2, y las seales ALE y PSEN. La seal 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 mquina, pudiendo ser utilizada como seal de reloj externo; no obstante, como se puede ver en la Figura 2.6(B), cuando se accede a un operando utilizando la instruccin MOVX, la seal ALE desaparece. En la Figura 2.6(B) se puede observar cmo se realiza un acceso a la memoria externa de programas para tomar una instruccin y en el segundo ciclo se accede _________________________________________________________________________ ITMAR Mazatln 12 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

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

_________________________________________________________________________ ITMAR Mazatln 13 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

2.3. MEMORIA DE DATOS


El 8052/8051 puede direccionar hasta 64 KB de memoria de datos externa. (La instruccin MOVX se utiliza para acceder a los datos de la memoria externa.) Si utiliza 16 bytes de direccin hgalo con MOVX @ DPTR, y si utiliza 8 bytes, MOVX @ Ri. La Figura 2.7 muestra la configuracin 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 lneas del Puerto 2 completan el direccionamiento d los 2 Kbytes de RAM (memoria paginada). La CPU genera las seales de lectura (RD) y escritura (WR) que necesita la RAM externa. En la operacin de lectura de un dato se podra 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 Funcin Especial (SFR). Como se indica en la Figura 2.7, la memoria externa se puede direccionar utilizando las lneas de E/S del Puerto 2 a voluntad, en funcin 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 _________________________________________________________________________ ITMAR Mazatln 14 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

paginada. Tambin se pueden utilizar 2 bytes de direcciones; byte bajo en el Puerto 0 y byte alto en el Puerto 2. Este es el sistema clsico que permite direccionar un mximo 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 continuacin, se va a analizar las tres reas de memoria interna: , rea de direccionamiento slo 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 estn separados por caminos de acceso diferentes, segn el direccionamiento de las instrucciones*. As, la instruccin: MOV 90H, #ABH _________________________________________________________________________ ITMAR Mazatln 15 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

escribe ABH en la localizacin 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 direccin 90H de la memoria de dalos y por utilizar direccionamiento indirecto escribe en la media pgina que asoma detrs de la media pgina del SFR en la Figura 2.8. Despus de la ejecucin de ambos modos de direccionamiento, se hallar ABH en el registro imagen del Puerto 1 (P1) en el SFR y ABH en la direccin 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 continuacin se explican brevemente las caractersticas de esta rea.

_________________________________________________________________________ ITMAR Mazatln 16 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco

Los registros se localizan desde la direccin 00H a 1FH (32 bytes). Despus de la operacin de inicializacin del microcontrolador, aplicando un nivel alto a la terminal RESET (vase Apartado 2.7 de este captulo), el banco operativo por defecto es el banco 0. La seleccin de otro banco de registros debe hacerse por software escribiendo en el registro de estado PSW (vase Tabla 2.1).

El RESET inicializa el Stack Pinter (SP) en la direccin de memoria 07H y se incrementa inmediatamente a la direccin 08H que es el primer registro R0 del segundo banco de registros. Con el fin de usar ms de un banco de registros, el SP se puede inicializar en otra localizacin 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 tambin direccionado como Byte. _________________________________________________________________________ ITMAR Mazatln 17 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051 Sub rea Scratch Pad

CAP 2

La memoria scratch pad se entiende como la memoria de un block de notas de rpido 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. Adems de la lista se proceder a dar una breve explicacin de los mismos, considerando que un anlisis ms profundo corresponde hacerlo en los ejercicios de aplicacin que se vern ms adelante.

* Direccionable bit a bi!, + Slo para el 8052. Nota: Los nmeros hexadecimales que, como cifra ms significativa tienen un carcter alfabtico, en algunas ocasiones y para evitar equvocos, van precedidos de la cifra cero (0),

_________________________________________________________________________ ITMAR Mazatln 18 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

ACC Acumulador: Es un registro de propsito general de los Microcontroladores 8052/8051 y, por su frecuencia de intervencin, el ms importante. En la programacin de aplicaciones en lenguaje ensamblador se har referencia a l como REGISTRO A. B Registro B: Est especializado en las operaciones de multiplicacin y divisin, adems de ser usado como registro de datos de propsito general. PSW Program Status Word: Contiene informacin del estado del CPU en cada ciclo de instruccin. El cuadro 2.1 muestra el formato de la palabra de estado.

SP Stack Pointer: Es un registro de 8 bits. Despus del RESET, el SP se carga por defecto con la direccin 07H. Al ejecutar la primera instruccin PUSH o CALL el SP se incrementa a la posicin 08H.

DPL y DPH Data Pointer: Su propsito principal es contener la direccin del puntero de datos. Puede ser manipulado como un registro de 16 bits (DPTR) o como dos registros independientes de 8 bits. _________________________________________________________________________ ITMAR Mazatln 19 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

P0, P1, P2 y P3 P1, P2 y P3.

Puertos 0, 1, 2 y 3:

Son los latchs de los puertos P0,

SBUF Serial Data Buffer: Son dos registros buffer fsicamente separados, pero a efectos de programacin es el mismo, buffer de transmisin y buffer de recepcin. Al escribir un dato en SBUF, el mismo comienza a transmitirse por la lnea correspondiente del puerto serie. En el modo recepcin el dato que ingresa por la lnea 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 actan como registros de captura del Timer 2, cuando este trabaja en modo captura. En este modo RCAP2H y RCAP2L responden a la transicin 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 caracterstica de consumo sea crtica, la versin CHMOS ofrece dos modos de trabajo de bajo consumo: el modo POWER DOWN y el IDLE. Tambin ofrece, este registro, posibilidades de variar la velocidad de comunicacin en el canal SERIE. TCON Timer/Counter Control Register: Este es un registro que controla fundamentalmente el modo de operacin de los Timers 0 y 1 en relacin con las interrupciones y los flancos de activacin de las mismas. TMOD Timer /Counter Mode Control Register: Selecciona el Timer 0 o 1, el modo de operacin (Modo 0, 1 o 2), si acta como temporizador o como contador, etc. T2CON Timer/Counter 2 Control Register: TMOD, pero aplicado al Timer 2. Lo mismo que con TCON y

IE Interrupt Enable Register: Es un registro para habilitar las interrupciones. Permite que se atiendan todas las interrupciones por el microcontrolador o slo las que el usuario considere aceptables. _________________________________________________________________________ ITMAR Mazatln 20 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

IP Interrupt Priority Register: Cada interrupcin puede programarse individualmente en el nivel 1 o 2 de prioridad, poniendo a 1 o a 0 los bits de este registro. Una interrupcin de bajo nivel de prioridad se puede interrumpir por otra de un nivel ms alto. Una interrupcin de alto nivel de prioridad no puede ser interrumpida por otra interrupcin de un nivel ms bajo (vase Captulo 10). SCON Serial Port Control Register: Este registro se encarga de establecer los parmetros para la transmisin o recepcin de datos en comunicacin serie; as, si se trata de una transmisin o recepcin, 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 estn en un rea direccionable bit a bit que corresponde a las direcciones 80H, 88H, 90H, 98H, .:., F8H.

Los registros que estn encerrados entre parntesis 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 operacin de inicializacin de los dispositivos internos del microcontrolador. _________________________________________________________________________ ITMAR Mazatln 21 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

Un RESET se alcanza cuando se mantiene en el pin RST, un nivel lgico alto al menos durante dos ciclos mquina (24 perodos de reloj), mientras el oscilador est funcionando. La CPU responde generando un RESET interno, segn el cronograma mostrado en la Figura 2.12. La seal externa de RESET es asncrona al reloj interno. El pin RESET es muestreado durante la fase 2 del estado 5 de cada ciclo mquina. Los pines de los puertos mantendrn sus actividades durante 19 perodos de reloj, despus de que el nivel lgico del pin RESET haya sido detectado; esto es, durante 19 a 31 perodos de reloj, despus de haber aplicado externamente un nivel lgico 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 despus de un RESET.

_________________________________________________________________________ ITMAR Mazatln 22 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 2

El RESET automtico del microcontrolador se produce al aplicar la tensin de alimentacin VCC al terminal RST a travs 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 alimentacin no exceda de un milisegundo y el comienza de los pulsos del reloj no exceda de 10 mS.

_________________________________________________________________________ ITMAR Mazatln 23 Ing. Rufino J. Domnguez Arellano.

El Microcontrolador 8051

CAP 3

CAPITULO 3 Programacin de los Microcontroladores 8052/8051 (I)


3.1. INTRODUCCION
Todos los modelos de la familia 51 ejecutan el mismo conjunto de instrucciones. Estas instrucciones estn optimizadas para el control de aplicaciones en 8 bits. Estn 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 pequea estructura de datos. Permiten la manipulacin directa de control y procesamiento booleano de estructuras de datos del tamafio de un bit. En esta breve introduccin se estudiarn los modos de direccionamiento y el juego de instrucciones agrupadas por especialidades de esta manera: Instrucciones aritmticas. Instrucciones lgicas. 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 instruccin por un campo de direccin de 8 bits. Slo 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 posicin de memoria (38): A (A) + (38)

Nota: Un registro o nmero entre parntesis se refiere al contenido. Asi: (A) es el contenido del acumulador. (38) es el contenido de la posicin de memoria 38.

_________________________________________________________________________ ITMAR Mazatln 24 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

Direccionamiento indirecto
La instruccin especifica un registro que contiene la direccin 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 slo puede ser el Puntero de Datos (Data Pointer = DPTR). Ejemplo:
ADD A,@R0 ; As, si (RO)=38H la operacin 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 (vase Apartado 2.5). El propio cdigo de operacin de la instruccin especifica con qu registro se opera; es decir, cuando la instruccin es ejecutada se accede a uno de los 8 registros del banco seleccionado. Ejemplos:
MOV Rn,A ; operacin: (Rn) (A)

MOV Rn, #dato ; operacin: (Rn) #dato

Direccionamiento implcito
Algunas instrucciones especifican, implcitamente, el registro sobre el que van a operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando porque est implcito en el cdigo de operacin. Ejemplos:
INC A INC DPTR ; Incrementa el contenido del acumulador: A (A) + 1 ; Incrementa puntero de datos: DPTR (DPTR) + 1

_________________________________________________________________________ ITMAR Mazatln 25 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

Direccionamiento inmediato
Al cdigo de operacin le sigue una constante en la memoria de programas. Ejemplo:
MOV A, #255 MOV A, #FFH ; o en binario: MOV A, #11111111B ; Carga en el acumulador el nmero decimal 255. Generalmente se expresan ; ; en hexadecimal:

Direccionamiento indexado
Este direccionamiento slo es posible en la memoria de programas y slo 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 posicin de la tabla. Es decir, la direccin 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 direccin de destino del salto se calcula como la suma del puntero base y el dato del acumulador.

3.3. CICLO DE INSTRUCCION


La ejecucin de un ciclo de instruccin comienza en el estado 1 del ciclo mquina, cuando el cdigo de operacin es almacenado en el Registro de Instruccin. (Para comprender este apartado tener a la vista la Figura 3.1 y la Tabla 4.5, Set de Instrucciones.) Como norma general, una instruccin requiere de uno q ms ciclos mquina, en funcin de: a) El cdigo de operacin Por ejemplo, la instruccin INC A (Figura 3.1 A) tiene 1 byte de instruccin y requiere 1 ciclo mquina, la instruccin INC DPTR, tambin, de 1 byte de instruccin requiere de 2 ciclos mquina (Figura 3.1 C) y la instruccin MUL AB requiere de 4 ciclos mquina para su total ejecucin y ocupa 1 byte en la memoria. b) El nmero de bytes

_________________________________________________________________________ ITMAR Mazatln 26 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

Por ejemplo, la instruccin MOV A, #data tiene 2 bytes de instruccin y requiere de 1 ciclo mquina (Figura 3.1 B). En cambio la instruccin MOV direct, # data al constar de 3 bytes necesita de 2 ciclos mquina. Esto no ocurre siempre, es decir, a ms bytes ms ciclos mquina, como puede verse en la Figura 3.1 B correspondiente a la instruccin MOV A, #data y en la Figura 3.1 D MOVX A,@Ri, la primera instruccin tiene 2 bytes y la segunda slo 1. en cambio la primera requiere 1 ciclo mquina y la segunda 2. Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del nmero de bytes y ciclo de instruccin se ha editado la Tabla 4.5 con el set completo de instrucciones. Cabe destacar, tambin, en la Figura 3.1, que en cada ciclo mquina se producen 2 accesos a la memoria, el primero, si es comienzo de ciclo de instruccin, siempre leer el cdigo de operacin, el segundo, que normalmente se descarta, se utiliza para leer el segundo byte, operando de la instruccin, como ocurre en la Figura 3.1 B.

3.4. TIPOS DE INSTRUCCIONES


El set de instrucciones del 8052/8051 se puede dividir segn las especialidades: Instrucciones aritmticas. Instrucciones lgicas. Instrucciones de transferencia de datos. Instrucciones booleanas Instrucciones de salto.

Las instrucciones aritmticas, lgicas, de transferencia y de salto son comunes a la mayora de microprocesadores. Los microcontroladores tienen un rea especial de aplicacin, que es el rea del control de procesos; en este campo las operaciones estn orientadas, muy a menudo, al bit. Los microcontroladores leen, procesan, escriben e intercambian informacin 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, estn orientadas al bit>. Esta particularidad, as como su inmunidad al ruido elctrico, le hacen valioso en el mundo del control de procesos industriales

_________________________________________________________________________ ITMAR Mazatln 27 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

3.5. INSTRUCIONES ARITMETICAS.


En la tabla 3.2, se muestra el men de las instrucciones aritmticas 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 ejecucin que se indican en la tabla estn evaluados sobre una frecuencia de relo de 12 MHz.

_________________________________________________________________________ ITMAR Mazatln 28 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

La instruccinb 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 instruccin 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 lgicas, modos de direccionamiento disponibles e indicadores de estado. Observe que en este grupo se incluyen las instrucciones de rotacin a la izquierda y a la derecha.

_________________________________________________________________________ ITMAR Mazatln 29 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

3.7. INSTRUCCIONES DE TRANSFERENCIA DE DATOS


Se consideran tres modalidades, segn 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 instruccin MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM interna o el espacio de localizacin del SFR (referencia Figura 2.8). Este tipo de instruccin permite la transferencia sin afectar el acumulador.

_________________________________________________________________________ ITMAR Mazatln 30 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

Ejemplo:
; Antes de ejecutar la instruccin: ; (3A) = 35H ; (3D) = 78H MOV3AH,3DH .. ; Despues de ejecutarla: ; (3A) = 78H ; (3D) = 78H

La instruccin 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 instruccin PUSH <src> acta incrementando el SP (Stack Pointer = puntero de la pila) y copiando el dato dentro de la pila. La instruccin POP <dest> acta 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 (vase Figura 2.11 ), pero puede posicionarse en el rea SCRA TCH PAD, como se ha indicado en el captulo anterior.

En resumen. stas son las operaciones que realiza la unidad de control del microcontrolador:
PUSH <src> ---------------------------(SP) (SP) + 1 ((SP)) <src> POP <dest> -------------------------------<dest> ((SP)) (SP) (SP) -1

_________________________________________________________________________ ITMAR Mazatln 31 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

La instruccin XCH A, <byte>, intercambia los datos del acumulador y del byte direccionado. La instruccin XCHD A, @Ri es similar a la anterior, pero slo implica en el intercambio el nibble bajo; es una instruccin especializada en la manipulacin de datos en el cdigo BCD.

Ejemplos:
; Antes de ejecutar la instruccin: ; (A) = 37H y (2D) = 23H XCH A, 2DH ; Despus de ejecutarla: ; (A) = 23H y (2D) = 37H ; Antes de ejecutar la instruccin: ; (RO) = 2DH y (2D) = 37H y (A) = 23H XCHD A, @R0 ; Despus 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. Slo 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 instruccin 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 _________________________________________________________________________ ITMAR Mazatln 32 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

registro DPTR (MOVX A,@DPTR o MOVX @DPTR,A) y tener que sacrificar el Puerto 2, cuando slo se va a utilizar un pequeo espacio de memoria RAM. Existe una solucin intermedia que permite direccionar slo unos pocos Kbytes de RAM externa, pero obteniendo algunas lneas hbiles del Puerto 2 como entradas y salidas (E/S). Esta es la solucin que se mostr en la Figura 2.7 del Captulo 2. De todas formas la solucin adecuada debe ser funcin de las caractersticas que necesita la aplicacin, suponiendo, en principio, que la implementacin de la misma sobre la eleccin de los Microcontroladores 8052/8051 sea la correcta. Las lneas de control de lectura y escritura, RD y WR (pines 16 y 17), slo son utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM externa, es obvio que se ganarn unas lneas extras de E/S (Figura 2.7).

Ejemplo: Estudiar la secuencia de instrucciones.


MOVX A, @Rl MOVX@RO,A

Nota: Este ejemplo se podra 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, debera ser implementada esta operacin, 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 sucedera si se tuvieran que implementar estas instrucciones en la zona de memoria por encima de la direccin 2000H? Es decir:

_________________________________________________________________________ ITMAR Mazatln 33 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 sustituida 2085H 20F3H

CAP 3

85H F3H

Se llegara a la conclusin de que no se podran procesar estas instrucciones, contando que los registros R0 y R1 no pueden direccionar por encima de la posicin de memoria FFH. Pero aqu es donde entran en juego las instrucciones MOVX con el DPTR como operando. La sustitucin, en el caso de tener que operar en el espacio de memoria comprendido entre 0000H y FFFFH, sera: sustituida
MOVX A, @Ri MOVX @Ri, A MOVX A, @DPTR MOVX @DPTR, A

Recurdese que en la Tabla 3.4 hay una instruccin que es:


MOV DPTR, #data16

Con la que se podra 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). Obsrvese que las tablas slo pueden ser ledas y no actualizadas. El nemnico es MOVC (Mover Constante). Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la seal de control PSEN (pin 29). Obsrvese la Figura 2.5 del captulo anterior .

_________________________________________________________________________ ITMAR Mazatln 34 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 3

La primera instruccin 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 instruccin es similar a la primera, salvo que es el Pogram Counter (PC) el que acta como indicador de la direccin base de la tabla.
MOVC A, @A+PC ; PC (PC) + 1 ; A ((A) + (PC))

Se presenta esta instruccin dentro de una subrutina, estando la tabla de informacin despus de la instruccin 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.

_________________________________________________________________________ ITMAR Mazatln 35 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

CAPITULO 4 Programacin 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 sealada 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 manipulacin de bits.

_________________________________________________________________________ ITMAR, Mazatln 36 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 Ejemplos:

CAP 4

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 ANL ANL C, P1.0 C, A.7 ; Carga el acarreo (C) con P1.0 ; Operacin AND entre el acarreo (C) y A.7

C, /OV ; Operacin AND entre el acarreo (C) y el ; complemento de OV

B) Efectuar la operacin XOR entre los bits P0.0 y P1.1, dejando el resultado en P2.7.
La instruccin XOR no existe en la familia 8051. Se debe implementar por algoritmo: MOV JNB CPL SALTA: MOV C, P0.0 P1.1, SALTA C P2.7, C ; Cargo P0.0 al acarreo. ; Si P1.1 = 0, C tiene el resultado correcto, y entonces ; salta. Si P1.1 = 1 hay que complementar 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.

_________________________________________________________________________ ITMAR, Mazatln 37 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

SJMP rel (Short Jump). La direccin destino del salto viene dada por un offset relativo, igual que en las instrucciones de salto booleanas. La instruccin tiene dos bytes, correspondientes al cdigo de operacin y al byte de offset relativo. El rango del salto est limitado a -128 y+ 127 bytes relativos al primer byte siguiente a la instruccin de salto.
PC (PC) + 2 PC (PC) + rel

LJMP addr16 (Long Jump). La direccin destino del salto viene dada por una constante de 16 bits. La instruccin est formada por 3 bytes. 1 byte para el cdigo de operacin y 2 para la direccin del salto. Por tanto, la direccin de destino est ubicada dentro del rea de los 64K de la memoria de programa.
PC addr16

AJMP addr11 (4bsolute Jump). La direccin destino del salto viene dada por una constante de 11 bits. La instruccin tiene 2 bytes, uno para el cdigo de operacin que tambin contiene en si misma 3 de los 11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la direccin de destino. Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 KB referenciado respecto a la siguiente instruccin a la del salto.
PC (PC) + 2 (PC.10-0) direccin de la pgina

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

; Valor entre 0 y 4 ; Multiplico por 2. ; Se realiza el salto.

_________________________________________________________________________ ITMAR, Mazatln 38 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

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 ejecucin del programa. En todos los casos, el salto es relativo, lo que significa que la direccin destino debe localizarse dentro de los -128 y +127 bytes a partir de la siguiente instruccin 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:
LAZO: MOV CONTADOR, #10 ---------------------------------------------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.

_________________________________________________________________________ ITMAR, Mazatln 39 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 Ejemplos:

CAP 4

A) Ejecutar las instrucciones de un lazo hasta que la lectura de un perifrico en P0 coincida con la localidad de memoria 7FH.
LAZO: MOV A, P0 ---------------------------------------------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.

_________________________________________________________________________ ITMAR, Mazatln 40 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

4.3 SET DE INSTRUCCIONES DE LA FAMILIA 8051.

_________________________________________________________________________ ITMAR, Mazatln 41 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

_________________________________________________________________________ ITMAR, Mazatln 42 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

_________________________________________________________________________ ITMAR, Mazatln 43 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

_________________________________________________________________________ ITMAR, Mazatln 44 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

_________________________________________________________________________ ITMAR, Mazatln 45 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 4

_________________________________________________________________________ ITMAR, Mazatln 46 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

CAPITULO 5

Introduccin a la Programacin en Lenguaje Ensamblador.


5.1. INTRODUCCION
Se entiende por modelo de programacin 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 captulo es mostrar estos tres aspectos combinados en varios ejercicios que puedan servir de ayuda al comienzo. Estos ejercicios corresponden a algunos de los modelos estn 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 librera de rutinas operativas profesionalmente; ms bien tienen un sentido didctico, objetivo principal de este captulo. A continuacin se proponen una serie de ejercicios, que irn distribuidos entre este captulo y el siguiente. En total, 13 ejercicios que pueden servir de aperitivo; por esta razn, casi todos los nombres de los archivos de los ejercicios figuran con un nmero terminal, para que el lector pueda mejorarlos, como si de una nueva versin se tratara.

Ejercicio 5.1. Estructura condicional o alternativa


Habitualmente el programa tiene que tomar decisiones en funcin del contenido de una variable (posicin de memoria), de la informacin de un puerto de entrada o salida y/o del estado de un bit o registro. Se produce lo que se conoce por una bifurcacin condicional o alternativa. En este ejercicio se trata de realizar la operacin 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 operacin suma o resta se deposita en la localidad RES (7AH).

_________________________________________________________________________ ITMAR, Mazatln 47 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

CHE DA1 DA2 RES

SAL1: SAL2:

%TITLE ; ORG ; EQU EQU EQU EQU MOV MOV MOV JNZ MOV ADD MOV MOV JZ MOV SUBB MOV NOP ; END

"ESTRUCTURA CONDICIONAL ECON0.ASM" 0200H 77H 78H 79H 7AH DA1, #09H DA2, #06H A, CHE SAL1 A, DA1 A, DA2 RES, A A, CHE SAL2 A, DA1 A, DA2 RES, A

; CARGA DE DATOS ; LEE LA LOCALIDAD 77H ; SI ES CERO SUMA, SI NO SALTA A RESTA ; HACE LA SUMA ; GUARDA RESULTADO

; HACE LA RESTA ; GUARDA RESULTADO

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


Enunciado La localidad MEM (77H) puede contener nmeros comprendidos entre 1 y 9, teniendo en cuenta esta caracterstica, poner las posiciones de memoria comprendidas entre 61 H y 69H a FFH (todos los bits a uno), segn esta relacin: 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

_________________________________________________________________________ ITMAR, Mazatln 48 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

MEM CON SAL:

%TITLE ESTRUCTURA ITERATIVA. ITERAO.ASM ; ORG 0200H ; EQU 778 EQU 78H MOV CON, MEM ; Se transfiere el contenido de MEM a CON 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 posicin ; de memoria DJNZ CON, SAL ; Decrementa CON y salta si CON NOP END ; no es CERO

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


%TITLE ESTRUCTURAITERATIVA. ITERA1.ASM ; ORG 0200H ; EQU 77H EQU 78H MOV CON, MEM ; Se transfiere el contenido de MEM a CON MOV A, CON ; Cargar acumulador JZ SAL1 ; No efecta ninguna accin 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 NOP END

MEM CON SALO:

SAL1:

Ejercicio 5.4.-Comprobacin de bits. Mtodo general


La operacin de comprobacin de bits es una prctica habitual en el control de procesos. La secuencia del programa puede cambiar dependiendo del estado de un bit. Este ejercicio muestra uno de los mtodos.

_________________________________________________________________________ ITMAR, Mazatln 49 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051 Enunciado

CAP 5

Si el bit 2 de la localidad 28H (CHE) es igual a cero, entonces en la direccin 7FH (RES) se sealar poniendo todos sus bits a cero, y si el bit 2 es igual a uno, se sealar 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 ; ORG 0200H ; EQU 28H EQU 7FH MOV A, CHE ANL A, #04H JZ SAL0 MOV RES, #FFH JNZ SALl MOV RES, #00 NOP END BITS. TESBITO.ASM

CHE RES

SALO: SAL1:

; ; ; ; ; ;

Se carga el ACC con el byte a chequear Se detecta el bit. Si es igual a CERO salta Si no es igual a CERO, carga RES con unos ...y sale del proceso Si es igual a CERO. carga RES con ceros

Ejercicio 5.5. Comprobacin de bits. Mtodo particular.


Cuando se estudiaba el set de instrucciones del 8052/8051, en el Apartado 4.1. lnstrucciones booleanas, se deca que haba una zona de memoria interna direccionable bit a bit (20H a 2FH) y una serie de instrucciones que permitan esta forma de proceso (vase Tabla 4.2). Esta prctica 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 ; EQU 28H EQU 7FH SETB C ; Se pone el "flag del Carry" a UNO ANL C, CHE.2 ; Se detecta el bit 28.2 o 42

CHE RES

_________________________________________________________________________ ITMAR, Mazatln 50 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051
JNC MOV JC MOV NOP END SALO RES. # FFH SALl RES, #00 ; ; ; ;

CAP 5
Si es igual a CERO salta Si no es igual a CERO, carga RES con unos ...y sale del proceso Si es igual a CERO, carga RES con ceros

SALO: SAL1:

Ejercicio 5.6. Comprobacin de bytes con la operacin resta o sustraccin


En el control de procesos industriales la informacin que se recibe o enva es compleja y necesita de varios bits. En este caso, la informacin ocupar 8 bits, es decir, 1 byte. Este ejercicio, como los dos siguientes, corresponden al mismo planteamiento, pero utiliza procedimientos distintos de resolucin. As, este ejercicio emplea la operacin resta o sustraccin 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 ledo en la direccin 70H (CHE), es igual a 63H, pone el bit cero (b0) de la localidad 20H (RES) a cero, y si el byte ledo es distinto a 63H, el bit cero (b0) de RES se pone a uno, es decir: Si (70H) = 63H Si (70H) <> 63H implica que 20.0 0 implica que 20.0 1

CHE RES

SAL0: SAL1:

%TITLE TESTEO DE BYTES. TESPAL0.ASM ; ORG 0200H ; EQU 70H 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 JNZ SALl ; ...y sale del proceso CLR RES.0 ; Si es igual a CERO, carga con "0" el ; bit0 del byte RES NOP END

_________________________________________________________________________ ITMAR, Mazatln 51 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

Ejercicio 5.7. Comprobacin de bytes con la operacin EXCLUSIVE-OR


El enunciado de este ejercicio es el mismo que el apartado anterior, pero el procedimiento para la deteccin del byte que desencadena un cambio en el proceso se realiza con la operacin EXCLUSIVE-OR (XRL). Efectivamente, si: 0 1 1 0 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 0 0 0 0 0 = LECTURA BYTE = REFERENCIA: 63H = RESULTADO

El resultado de la operacin ser cero, slo si coinciden el byte ledo 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 0 1 l 0 0 0 1 1 0 0 0 0 0 0 0 l = LECTURA BYTE = REFERENCIA: 63H = RESULTADO

CHE RES

SALO: SAL1:

%TITLE TESTEO DE BYTES. TESPAL1.ASM ; ORG O2OOH ; EQU 7OH EQU 2OH MOV A, 7OH ; Se CARGA el ACC con la localidad a ; chequear XRL A, #63H ; Operacin 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 JNZ SALl ; ...y sale del proceso CLR RES.O ; Si es igual a CERO, carga con "O" el ; bitO del byte RES NOP END

_________________________________________________________________________ ITMAR, Mazatln 52 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

Ejercicio 5.8. Comprobacin de bytes con la instruccin especial


Los ejercicios 5.6 y 5.7 pueden ser resueltos tambin con macroinstrucciones como CJNE A,<byte>,rel estudiada en el apartado 4.2.2,<lnstrucciones de salto condicional>. Esta instruccin compara y salta si el resultado no es igual y su utilidad se puede ver a continuacin. La eficacia de estas macroinstrucciones puede verse amenazada por la falta de flexibilidad, pero se puede fcilmente comprender que en este caso, que es habitual, resulta muy eficaz, por lo que es ventajosa su inclusin en el set de instrucciones.
%TITLE TESTEO DE BYTES. TESPAL2.ASM ; ORG O2OOH ; EQU 7OH 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 SETB RES.O ; Si no es igual a CERO, carga con " I " el ; bitO de la localidad 2OH y finaliza NOP END

CHE RES

SALO: SAL1:

Ejercicio 5.9.Movimiento de tablas de datos en la memoria externa.


En el control de procesos se producen prcticas habitua]es de manipulacin de datos, que el programador debe convertir, gracias a su tcnica e ingenio, en rutinas eficaces. As, el programador deber elaborar rutinas para: El movimiento de datos de una posicin a otra de memoria. Captura y seleccin de datos del exterior a travs de una unidad de E/S y su colocacin en memoria. Bsqueda y seleccin 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. _________________________________________________________________________ ITMAR, Mazatln 53 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

Este ejercicio copia de una posicin a otra de la memoria RAM externa un bloque de datos. Estos bloques, para simplificar el problema, son de tamao fijo, de una pgina de 256 bytes, y comienzan en el primer byte de la pgina seleccionada. As, en nuestro caso, si se quiere copiar un bloque de datos situado en las direcciones 0315H a 0380H (pgina 03H), a la pgina 05H, se copiara todo el contenido de la pgina 03 (0300H a 03FFH) a la pgina 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 continuacin se muestra el listado del programa fuente, tal como se ha previsto. Se invita al usuario a que realice una versin mejorada, indicando el rango de las direcciones acopiar (direccin inicial a direccin final) y la direccin de la primera localidad destino, incluso por encima del rango de una pgina de 256 bytes.
%TITLE MOVIMIENTO DE TABLAS. MOTABLAO.ASM ; ORG O2OOH ; ; RO es el puntero que recorre las pginas ; Rl es la pgina FUENTE ; R2 es la pgina DESTINO ; MOV RO, #OOH ; Inicializa el puntero 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 instruccin JNZ SALO ; Busca el siguiente byte en la pgina ; y si es CERO concluye porque ha ; terminado la pgina NOP END

SALO:

Ejercicio 5.10. Comprobacin de tablas de datos


En algunas ocasiones interesa conocer, para hacer un estudio estadstico, la cantidad de veces que aparece un determinado dato y en qu posicin de la tabla de datos se encuentra localizado.

_________________________________________________________________________ ITMAR, Mazatln 54 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

Este ejercicio muestra cmo se realiza esta operacin 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 nmero de veces que ha sido encontrado y la posicin de memoria en que se encuentran estos datos. R2 = nmero de veces A partir de la localidad 60 = situacin

POS

SALO:

SAL1:

%TITLE CHEQUEO DE TABLAS DE DATOS. CHEQUEO.ASM ; ORG O2OOH ; 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 carcter MOV Rl, #OOH ;Se inicializa R1 con O. ; Contador de tablas MOV DPTR, #O2FFH ; Se inicializa DPTR con el ; comienzo de la tabla INC DPTR ; Se busca otro carcter 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 ; prxima instruccin MOVC A, @A+DPTR ; Se LEE el carcter y se carga en el ACC. CJNE A, #23H, SALO ; Si el carcter no es *23H busca ; siguiente INC R2 ; Si el carcter es * 23H incrementa ; contador MOV @RO, DPH ; Apunta direccin (H) localizacin carcter INC RO MOV @RO, DPL ; Apunta direccin (L) localizacin carcter INC RO JMP SALO ; Busca otro carcter para evaluar NOP END

_________________________________________________________________________ ITMAR, Mazatln 55 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 5

Ejercicio 5.11. Gestin de la pila y rotaciones


Finalmente, para terminar con este apartado dedicado al modelo de programacin 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 automtica, para salvar los registros importantes en los saltos a las subrutinas e interrupciones, si no que tambin 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 despus de un RESET el microcontrolador posiciona. Como se recordar, en el captulo 2, apartado 2.6, se deca que despus de un RESET el microcontrolador situaba .el comienzo de la pila en la direccin 08H. En este ejercicio, como se puede ver en la primera instruccin del programa, la pila se ubica a partir de la direccin 40H y en sentido creciente. El ejercicio planteado pretende que un dato como 01H realice una rotacin completa y que finalice en la misma posicin con la que empez, dicho de otra manera, que el contenido del b0 se desplace a la Izquierda sobre el registro para despus de varios desplazamientos concluya en la misma posicin. Para esta operacin es preciso efectuar como se comprobar, 8 rotaciones bit a bit>.
%TITLE GESTION DE LA PILA Y ROTACIONES. ROTAO.ASM ; ORG O2OOH ; EQU 7OH EQU 6FH MOV SP, #4OH ; Inicializacin de la pila en rea ;SCRATCHPAD MOV A, #OOH ; Carga del ACC con OOH PUSH A ; Se guarda en la pila. Inicializacin ; 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 RL A ; Rotacin 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

REF ROT

SALO:

_________________________________________________________________________ ITMAR, Mazatln 56 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

CAPITULO 6

Control de perifricos. Puertos de Entrada/ Salida


6.1. INTRODUCCION
En el Captulo 1 se describa la arquitectura de los puertos de entrada y salida (E/S) de la familia de Microcontroladores 51. En este captulo, se retorna el tema para recordar, ampliar y mostrar una serie de ejercicios de iniciacin en el control de los puertos que van a permitir comunicarse con una buena parte de los perifricos comerciales y con los que el usuario disee. Los cuatro puertos del 8052/8051 son bidireccionales, es decir, permiten la lectura y escritura en el perifrico correspondiente. Las salidas estn <latcheadas, lo que posibilita mantener el dato indefinidamente hasta que sobreescriba la informacin original. Otra caracterstica 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 caracterstica 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 expansin definibles por el usuario. Naturalmente, en estas condiciones, le queda como puerto ntegro, para el control de perifricos, el Puerto P1 y parte del Puerto P3. puesto que hay seales 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. Tambin, se hace referencia a los parmetros representados en la Figura 6.1 y en el Cuadro 6.1, sin hacer mencin a los tiempos reales que dependen del tipo de microcontrolador y de la frecuencia de trabajo. _________________________________________________________________________ ITMAR, Mazatln 57 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

Figura 6.1

_________________________________________________________________________ ITMAR, Mazatln 58 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

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.

Smbolo
TLHLL TAVLL TLLAX TLLIV TLLPL TPLPH TPLIV TPXIX TPXIZ TPXAV TAVIV TPLAZ TRLRH TWLWH TRLDV TRHDX TRHDZ TLLDV TAVDV TLLWL TAVWL TQVWX TQVWH TWHQX TRLAZ TWHLH

Parmetro
ALE Pulse Width (Anchura pulso ALE) Address Valid to ALE Low (Direccin vlida a ALE bajo) Address Hold After ALE Low (Direccin mantenida despus de ALE bajo) ALE Low to Valid Instruction In (ALE bajo a Instr. In. vlida) ALE Low to PSEN Low (ALE bajo a PSEN bajo) PSEN Pulse Width (Anchura pulso PSEN) PSEN Low to Valid Instruction In (PSEN bajo a Instr. In. vlida) Input Instr. Hold After PSEN (Mantenimiento de Instr. In. despus de PSEN) Input Instr. Float After PSEN (Bus flotante de Instr. In. despus de PSEN) PSEN to Address Valid / PSEN a Direccin vlida Addres to Valid Instr. In. / Direccin a Instr. In. vlida PSEN Low to Addres Float / PSEN bajo a bus direccin flotante RD Pulse Width / Anchura del pulso de lectura WR Pulse Widht / Anchura del pulso de escritura. RD Low to Valid Data In / RD bajo a Dato In. vlido Data Hold After RD / Mantenimiento de Dato despus de RD Data Float After RD / Bus Datos flotante despus de RD ALE Low to Valid Data In / ALE bajo a Dato In. vlido Addres to Valid Data In / Direccin a Dato In. vlido ALE Low to RD or WR Low / ALE bajo a RD o WR bajo Addres to RD or WR Low / Direccin a RD o WR bajo Data Valid to WR Transition / Dato vlido a transicin WR Data Valid to WR High / Dato vlido a WR alto Data Hold After WR (Mantenimiento de Dato despus de WR) RD Low to Addres Float (RD bajo a bus flotante Direccin) 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 continuacin.

_________________________________________________________________________ ITMAR, Mazatln 59 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

6.2.1. Ciclo de lectura en la memoria externa de programas


Para acceder a la memoria externa de programas utiliza la seal PSEN (Program Store Enable) como seal de autorizacin de lectura (Figuras 6.1 (A) y 6.2). La seal 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 instruccin, mientras esas mismas lneas son utilizadas, en el resto del ciclo de instruccin, 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 lneas A13, A14 y A15 se encuentran a nivel alto, siendo el resto de las lneas de direccin las que establecen la localidad exacta del byte de instruccin u operando que ha de ser ledo. (La actuacin del PSEN elimina cualquier incompatibilidad que podra 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 posicin 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 direccin 1110 0000 0000 0000 = E000H y termina en la direccin FFFFH, en total 8 Kbytes. A la memoria de programas externa se accede bajo dos condiciones: I. Cuando la seal EA es activa, caso de la Figura 8.2. 2. Cuando el contador de programa (PC) contiene un nmero ms grande que 0FFFH para el 8051 o 1 FFFH para el 8052. En las versiones de microcontroladores sin ROM (8031 y 8032) tienen la seal 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 seal de control RD (funcin alternativa de P3.7) y puede utilizar los 16 bits de direccin (MOVX A, @DPTR) o bien 8 bits (MOVX A, @Ri) (vase Figura 6.1(B)). En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de que la seal de control RD que autoriza la lectura sea desactivada. _________________________________________________________________________ ITMAR, Mazatln 60 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

U2
A0 Q0 A1 Q1 A2 Q2 A3 Q3 A4 Q4 A5 Q5 A6 Q6 A7 Q7 A8 A9 A10 RAM A11 A12 A13 A14 CS OE WR

U3
A0 O0 A1 O1 A2 O2 A3 O3 A4 O4 A5 O5 A6 O6 A7 O7 A8 A9 EPROM A10 A11 A12 CE OE PGW Vpp

U4
D0 D1 D2 D3 D4 D5 D6 D7 OE Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 E

U1
EA/Vpp X1 P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P2.0 P2.1 P2.2 P2.3 P2.4 P2.5 P2.6 P2.7 RD WR PSEN ALE/P TXD RXD

74LS373

+5 V

+5 V

X2 RESET INT0 INT1 T0 T1

43256C

2764

8052
P1.0/T2 P1.1/T2X P1.2 P1.3 P1.4 P1.5 P1.6 P1.7

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 seal de control WR (funcin alternativa P3.6) y puede utilizar los 16 bits de direccin (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 despus de que la seal de control de escritura WR sea desactivada. En general, tanto para la lectura como para la escritura, cuando una direccin de 16 bits es utilizada (MOVX @DPTR), el byte alto de direccin sale por el Puerto P2 donde permanecer mientras dura el ciclo de lectura o escritura. Si se utiliza una direccin 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 paginacin (vase Apartado 2.3). Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarn en esta situacin:

_________________________________________________________________________ ITMAR, Mazatln 61 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

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 ms peso (A8 a A15). P3: Bus de control.

6.3. OPERACIN DE ESCRITURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051


La operacin 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 ejecucin de una instruccin 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 instruccin, segn indica la Figura 6.3. Antes de comenzar con el estudio y comprobacin de los puertos de E/S, se dibuja el interface para la conexin 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 energtico, como rels, 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 seales de control, una para ejecutar la lectura (RD) y otra para la escritura (WR). Por esto la activacin de estas seales depende del formato de la instruccin. Para la operacin de ESCRITURA en el puerto, la instruccin ms habitual es la siguiente:
MOV PX, <DATO> ; X toma valores 0, 1, 2 y 3 segn el puerto.

Admitiendo <DATO> todos los tipos de direccionamiento estudiados en el Captulo 3.

_________________________________________________________________________ ITMAR, Mazatln 62 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

Figura 6.3

Figura 6.4

Ejercicio 6.1. El puerto P0 en modo salida Este ejercicio muestra cmo se deben tratar los cuatro puertos cuando se tiene que enviar una informacin de salida del microcontrolador. Se refiere, comnmente, a una operacin 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 mscara, 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.

_________________________________________________________________________ ITMAR, Mazatln 63 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

.Direccionando directamente los bits 0 y 2 del Puerto P0. que en la ltima operacin haban quedado a UNO, se ponen a CERO. En este instante todos los bits de P0 estn a CERO. Se pone a UNO el bit 7 de P0 y con direccionamiento inmediato se carga P0 con 55H. Finalmente, se complementa (operacin lgica NOT) la informacin 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 evolucin 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, tambin, que dicha rutina se ubica a partir de la localidad 0300H para que no coincida con el programa principal. Una ltima observacin 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 tambin
SETB 80

o el bit 1 del Puerto P0:


SETB P0.1

o tambin
SETB 81

Efectivamente, por esta razn slo son direccionables bit a bit los registros correspondientes a la primera columna (ver Tabla 4.1 ).

_________________________________________________________________________ ITMAR, Mazatln 64 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

RETAR1

SAL0:

SAL0: SAL1: SAL2:

; Escribe en el puerto P0 configurado como salida ; ORG 0200H ; EQU 0300H MOV A, #00H ANL P0, A ; Escribe CERO en el puerto P0 CALL RETAR1 ; Producir retardo 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 MOV R1, #85H ;Se CARGA R1 con #85H MOV R2, #FFH ;Se CARGA R2 con #FFH DJNZ R2, SAL2 ; Decrementa R2 y repite el lazo hasta que R2=0 DJNZ R1, SAL1 ; Lo mismo que la instruccin 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 operacin de lectura o de adquisicin de datos no representa ningn tipo de problema; solamente se deber cambiar el orden de los operandos en la instruccin respecto a la operacin de escritura. Para la operacin de lectura, el formato de la instruccin ms habitual es el siguiente:
MOV <destino>, PX

_________________________________________________________________________ ITMAR, Mazatln 65 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

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 comprobacin 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. Operacin de lectura en el puerto P0 y de escritura en el puerto P1


Este ejercicio trata de mostrar cmo se manipula el Puerto P0 para utilizarlo como entrada y el P1 como salida, de tal forma que la informacin leda por el Puerto P0 y despus de ser tratada adecuadamente sale escrita por P1. En este caso concreto, la informacin leda 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

_________________________________________________________________________ ITMAR, Mazatln 66 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

Figura 6.6

Ejercicio 6.3. Control de un proceso industrial elemental


El siguiente ejercicio muestra cmo 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 situacin de los sensores y el otro (de escritura) para enviar la seal 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 resolucin desde la perspectiva de los Microcontroladores 8052/8051. Proceso

Se trata de controlar el nivel de liquido de un depsito, utilizando tres sondas detectoras de niveles A, B y C, y dos bombas B1 y B2 (Figura 6.7). He aqu una descripcin del proceso, desde el punto de vista de su relacin con el mundo exterior, segn los tres tipos de seales principales:

_________________________________________________________________________ ITMAR, Mazatln 67 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

Figura 6.7

Entrada de informacin: SENSORES (sondas). Actuacin sobre los elementos finales: ACTUADORES. Sealizacin del proces{): INDICADORES.

1. SONDAS (entradas)
La sonda A seala el nivel mnimo de agua. Por debajo de este nivel, se indicar VACIO en el cuadro de INDICADORES. La sonda B seala el nivel ptimo y cuando se alcance se indicar LLENO. La sonda C seala el nivel peligroso e indica REBOSE. Las sondas sern ledas por el Microcontrolador a travs del Puerto P0. P0.0 - A P0.1- B P0.2 - C

_________________________________________________________________________ ITMAR, Mazatln 68 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP. 6

2. ACTUADORES (salidas)
Cuando ninguna de las sondas est mojada, se entiende que el depsito est vaco y los actuadores activarn las dos bombas B1 y B2 (P1.0 y P1.1). Cuando el nivel del lquido toque la sonda B, se desactivar la bomba B2, quedando la bomba B1 activada en modo mantenimiento. Si el nivel del lquido moja la sonda C (rebose), se desactivar la bomba B1, quedando las dos bombas, de momento, fuera de servicio.

3. INDICADORES (salidas)
La sealizacin 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 seal de ALARMA. P1.5 --ALARMA La Figura 6.8 muestra la disposicin de los actuadores, indicadores y sondas.

Figura 6.8

_________________________________________________________________________ ITMAR, Mazatln 69 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 Este es el listado:


; Controla el nivel de lquido de un depsito. ; ORG 0300H ; .BYTE 07H,03H,20H,09H,20H,20H,20H,18H ; ORG 0200H ; SAL0: MOV MOV ANL MOVC MOV JMP END DPTR, #0300H ;inicializa puntero de TABLA A, P0 ; LEE puerto PO A, #07H ; Enmascara A, @A+DPTR ; Direcciona y captura dato Pl, A ;Acta SAL0

CAP. 6

_________________________________________________________________________ ITMAR, Mazatln 70 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 slo dos Timers. el T0 y el T1, de las mismas caracteristicas que los del 8052. Por esta razn, todo lo que se diga con relacin a los Timers 0 y 1 del 8052 es vlido 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 mquina (la temporizacin se produce contando los ciclos mquina hasta sobrepasar el valor prefijado). As, se puede considerar que funciona como un contador de ciclos mquina, de tal forma que, como a cada ciclo mquina le corresponden 12 periodos de reloj, la razn de conteo es 1/12 de la frecuencia del oscilador. En la funcin contador, el registro es incrementado en respuesta a la transicin del nivel alto de tensin al nivel bajo (flanco descendente) de la seal 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 mquina. El contador se incrementa cuando la muestra seala un nivel alto de la seal 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 transicin ha sido detectada. Puesto que necesita dos ciclos mquina (24 ciclos de reloj) para reconocer la transicin del flanco descendente, la mxima razn de conteo es 1/24 de la frecuencia del oscilador. Mientras que el Timer 0 y 1 tienen cuatro modos de operacin, 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 configuracin y de realizar algunos ejercicios de aplicacin, 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 continuacin: _________________________________________________________________________ ITMAR, Mazatln 71 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

-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 opcin establece aplicaciones generales de tipo timer (temporizador) y la segunda de tipo counter (contador). -En la parte inferior izquierda se encuentra un circuito lgico que acciona el interruptor (smil elctrico) 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 estudiarn, o bien se acciona por hardware con la seal 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 segn 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 seala el overflow o sobrepasamiento del registro contador. -Finalmente, si la interrupcin correspondiente est habilitada, se producira una interrupcin, tema que ser tratado en el prximo captulo.

Figura 7.1

7.2. TIMER 0 (T0) y TIMER 1 (T1)


La funcin timer (temporizador) o counter (contador) es seleccionada por el bit de control C/T perteneciente al registro TMOD (Timer/Counter Mode Control _________________________________________________________________________ ITMAR, Mazatln 72 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 operacin, como se indica a continuacin, que se seleccionan mediante los pares de bt (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 operacin 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 estn configurados con registros de 13 bits, repartindose 8 bits para TH0 o TH 1 y los 5 bits de menor peso para TL0 o TL1 (los 3 bits de ms 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 interrupcin TFx (x=0 si se trata del Timer 0 y x=1 si se trata del Timer 1), siendo ste un bit _________________________________________________________________________ ITMAR, Mazatln 73 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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

Figura 7.2

CUADRO 7.2

_________________________________________________________________________ ITMAR, Mazatln 74 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

La autorizacin de cuenta de pulsos, procedentes de la seal 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 aplicacin podra ser, para medir el ancho de pulsos a travs del pin INT1. As, mientras INT1 =1 los impulsos internos o externos de cuenta llegaran al contador TH1-TL1. Cuando INT1 =0 el valor del contador permanecer sin cambios, puesto que no llegarn mas pulsos de cuenta. Para ello es necesario que GATE = 1 y TR1 = 1. El Modo 0 de operacin es el mismo para el Timer 1 que para el Timer 0, sustituyendo los bits o seales con el subndice 1 por el subndice 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 funcin de los valores del Timer 0. Los pasos a seguir son: 1-. Programar TMOD

2.3.4.5.-

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

_________________________________________________________________________ ITMAR, Mazatln 75 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 La rutina Tempo realiza lo siguiente:

CAP 7

1.Carga de los registros del Timer 0 a sus valores mnimos correspondiendo con la mxima temporizacin. 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 temporizacin considerando lo indicado en el Apartado 7.1, es decir, se incrementa a la razn de 1/12 de la frecuencia de reloj. Podemos adelantar que la temporizacin es muy pequea. 2.Se programa TCON.

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


ETIQUETA B0203 MOV CODIGO MOV TMOD, #00 B, #01 MOV PO.B ACALL Tempo MOV B, #00 MOV PO.B ACALL Tempo AJMP B0203 ; MOV TLO, #00 MOV THO, #00 MOV TCON, #10 A, TCON ANL A. #20 JZ B0309 RET

Tempo B0309 MOV

_________________________________________________________________________ ITMAR, Mazatln 76 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 temporizacin es ms larga, por lo que el ritmo de conmutacin ser menor. Recurdese 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, despus de contar 65.536 ciclos mquina. El arranque del Timer 1 se produce, como en el ejercicio anterior, al poner a 1 el bit 6 del registro TCON.

_________________________________________________________________________ ITMAR, Mazatln 77 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

ETIQUETA B0203 SETB

CODIGO MOV TMOD, #10 P0.0 ACALL Tempo CLR P0.0 ACALL Tempo AJMP ; MOV MOV MOV ANL JZ RET B0203 TL1, #00 TH1, #00 TCON, #40 A,TCON A, #80 B0309

Tempo B0309 MOV

Ejercicio 7.3. Timer 1 en Modo 1 (16 bits) como temporizador hardware y software. Arranque por software
Este ejercicio permite ver la interaccin de la temporizacin de los Timers fisicos con la temporizacin, ya estudiada en el Captulo 5 -Ejercicio 5.1-, por software; de esta manera se pueden conseguir tiempos ms 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 perodos completos de ciclos de conteo del Timer 1 ms los ciclos mquina que implica la ejecucin del programa, es decir, aproximadamente: 15 x 65536 ciclos mquina. Los registros TMOD y TCON estn configurados como en el ejercicio anterior, por lo que no se hace ningn comentario.
ETIQUETA CODIGO MOV RO, #0F MOV TMOD, # 11 SETB P0.0 ACALL Tempo CLR P0.0 ACALL Tempo AJMP B0205 ; MOV TL1, #00 MOV TH1, #00 MOV TCON, #40 MOV A,TCON

B0205

Tempo B0309

_________________________________________________________________________ ITMAR, Mazatln 78 Ing. Rufino J. Domnguez Arellano

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

CAP 7

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 haca va 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 configuracin 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 tensin alto desde el exterior. La figura 7.3 muestra las conexiones externas para este ejercicio. Configuracin de TMOD. b7 1 GATE Control Por Hardware C/T Es un Timer M1= 0 y M0 = 1 Modo 1 TH1 + TL1 = 16 bits 0 0 1 b0 = 90H

Figura 7.3

_________________________________________________________________________ ITMAR, Mazatln 79 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 Este es el listado del programa :


ETIQUETA CODIGO MOV TMOD, # 90 MOV R0, #0F CLR P0.0 ACALL Tempo SETB P0.0 NOP ; MOV TL1, #00 MOV TH1, #00 MOV TCON, #40 MOV A,TCON ANL A, #80 JZ B0309 DJNZ R0, B0300 RET

CAP 7

Tempo B0309

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 automtica (Figura 7.4). El desbordamiento de TL1 no slo activa el bit de flag (TF1), sino que tambin recarga 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

_________________________________________________________________________ ITMAR, Mazatln 80 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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; autorrecargndose 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 automticamente 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 conexin precisa del microcontrolador con las seales exteriores para este ejercicio.

Figura 7.5

A continuacin se muestra la configuracin de TCON y TMOD para este ejercicio.

_________________________________________________________________________ ITMAR, Mazatln 81 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

Configuracin de TMOD. b7 1 1 1 0 b0 = E0H

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

Configuracin de TCON. b7 ? 1 b0 = 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 MOV P0,TL1 AJMP B020C NOP

BO20C:

_________________________________________________________________________ ITMAR, Mazatln 82 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 lgica de control que ha sido comn hasta ahora (GATE, pin INT0 y TR0) permitiendo la operacin de temporizacin con los ciclos mquina del microcontrolador y el conteo de pulsos a travs del pin 14 (T0). El registro TH0 (8 bits) slo permite la temporizacin con la seal de 1/12 de la frecuencia del oscilador utilizando como bit de CONTROL (TR1) y como flag (TF1); ambas seales 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 slo cuenta con registros de 8 bits, producindose 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 aplicacin que no necesite interrupciones. La cuestin es, en el caso del Microcontrolador 8052, que el Timer 2 ha sido diseado especialmente para utilizarlo como generador de frecuencia en las comunicaciones del puerto serie. No obstante, es la imaginacin y creatividad del usuario la que va a determinar lo que es til para su aplicacin.

Figura 7.6

_________________________________________________________________________ ITMAR, Mazatln 83 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 accin sobre el interruptor CONTROL es exterior a travs del pin 12 (IT0). 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 comprobacin de este ejercicio.
ETIQUETA CODIGO MOV TMOD, #07 MOV TCON, # l0 MOV TL0, #F0 MOV P0, TL0 MOV A, TCON ANL A, #20 JZ B0209 MOV A, #55 MOV P0, A NOP

B0209:

Figura 7.7

_________________________________________________________________________ ITMAR, Mazatln 84 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

7.3. EL TIMER 2
El Microcontrolador 8052, con relacin 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 travs 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

_________________________________________________________________________ ITMAR, Mazatln 85 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

El Timer 2 tiene tres modos de operacin, pero slo los dos primeros sern tratados en este captulo. Modo captura. Modo autorrecarga. Modo generador seal comunicacin serie. Siendo la seleccin establecida segn los valores asignados, a los bits correspondientes del registro T2CON (vase 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 interrupcin si sta est habilitada. Si EXEN2= 1 el Timer 2 puede hacer lo sealado anteriormente, pero adems cuando se produce una transicin

Figura 7.8

_________________________________________________________________________ ITMAR, Mazatln 86 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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). Adems, el flanco descendente en el pin T2EX, siendo EXEN2= 1, pone a 1 el flag de EXF2 y puede generar una interrupcin, 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 cmo al modificar el contenido de los registros TL2 + TH2 se pueden conseguir distintas temporizaciones. La mxima se consigue con 0000H. El registro T2CON queda configurado de la siguiente forma: b7 b0

ETIQUETA B0200:

SUB1: B0309 :

CODIGO SETB P0.0 ACALL SUB1 CLR P0.0 ACALL SUB1 AJMP B 0200 ; MOV TL2, #99 MOV TH2, #99 MOV T2CON, #04 MOV A.T2CON ANL A., #80 JZ B0309 RET

_________________________________________________________________________ ITMAR, Mazatln 87 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 caractersticas que el Timer 0 o el Timer 1. Observar cmo 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 continuacin se pasa a comentar las tareas que efecta el programa. -Primero se configura el Timer 2 como contador y en modo captura. b7 TCON2 TF2 EXF2 0 0 1 1 1 b0 1 = 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 algn 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 visualizacin del contenido de CAP2L est temporizado por el Timer 1 en la rutina Tempo. -Al regresar de la rutina de temporizacin se borra el flag EXF2, correspondiente a la transicin 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:

_________________________________________________________________________ ITMAR, Mazatln 88 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

Figura 7.9

Este es el listado del programa:


ETIQUETA CODIGO MOV T2CON, #0F MOV TH2, #FF MOV TL2, #F0 MOV P0, TL2 MOV A, T2CON ANL A, #40 JZ B021B MOV A, CAP2L SWAP A MOV P0, A ACALL Tempo CLR .EXF2 MOV A, T2CON ANL A, #E0 JZ B0209 MOV P0, #55 NOP ; MOV RO, #50 MOV TMOD, #10 MOV TL1, #00 MOV TH1, #00 MOV TCON, #40 MOV A, TCON ANL A, #80 JZ B030E DJNZ R0, B0305 RET

B0209:

B021B:

Tempo: B0305: B030E

_________________________________________________________________________ ITMAR, Mazatln 89 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 slo 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 slo 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:

_________________________________________________________________________ ITMAR, Mazatln 90 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

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 MOV P0, TL2 SETB C ANL C, TF2 JNC B020F CLR .TF2 AJMP B020F

BO20F:

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 tambin se produce al generar un flanco descendente en el pin 2 (T2EX) del microcontrolador. Los impulsos de conteo entran por el pin 1 (T2).

_________________________________________________________________________ ITMAR, Mazatln 91 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

El esquema del montaje es el mismo que el de la Figura 7.9 del Ejercicio 7.8. En aqul se produca una captura al flanco descendente en el pin T2EX, mientras que en este caso se produce una recarga.

La configuracin 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 MOV P0, TL SETB C ANL C, .EXF2 JNC B021B CLR .EXF2 JC B020F SETB C ANL C,.TF2 JNC B020F CLR .TF2 AJMP B 020F

BO20F:

BO21B:

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 instruccin: MOV T2CON, #0EH por MOV T2CON, #0FH

_________________________________________________________________________ ITMAR, Mazatln 92 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 7

se producir la captura al producirse un flanco descendente por la lnea T2EX (pin 2). Si tambin se sustituye la instruccin: 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 visualizndose en el Puerto P0.

_________________________________________________________________________ ITMAR, Mazatln 93 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

CAPITULO 8

Interrupciones
8.1. INTRODUCCION
La comunicacin asncrona de los sistemas perifricos con la CPU, en ambos sentidos, se puede establecer de dos maneras fundamentales: a) Consultas (polling): Se comprueban cclicamente, mediante instrucciones del programa los registros de estado de los dispositivos de E/S. Unas lneas de dilogo (handshake) establecen el protocolo de comunicacin. As. en la Figura 8.1 se muestra cmo se establece el dilogo entre un sistema microcomputador o microcontrolador y dos perifricos mediante el procedimiento de consultas. Primero el programa pregunta si el bit del Puerlo 0 est activo, esto quiere decir que el Perifrico 1 solicita la atencin del sistema, en ese caso la CPU atiende al Perifrico 1. Cuando el proceso termina, el programa activa el bit 1 del Puerlo 0 para indicar, al Perifrico 1, que el proceso ha finalizado. El mismo procedimiento para el Perifrico 2. Las desventajas de este mtodo son: -En cada ciclo de programa ste tiene que interrogar los bits de consulta. -Al perifrico se le atiende despus de realizar la consulta y no cuando solicita la intervencin de la CPU. b) Interrupcin: Servicio directo entre perifricos y CPU, siempre que sta desee establecer el dilogo. Este servicio tiene la caracterstica de la inmediatez, pueden eliminarse total o parcialmente los ciclos de consulta y permite inhibir la interrupcin 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 Perifrico 1 requiere la intervencin del sistema microcomputador o microcontrolador activa la interrupcin INT1, si est habilitada el sistema atender la peticin y ejecutar el proceso correspondiente de atencin en la RUTINA 1. El mismo procedimiento se establecera para el Perifrico 2.

_________________________________________________________________________ ITMAR, Mazatln 94 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

La importancia de las interrupciones nace de la necesidad de ejecutar un subproceso en el instante preciso, y por tanto se considera su intervencin urgente. Cuando termina la ejecucin de este subproceso, la CPU vuelve al programa principal, continuando su tarea cclica justo donde la dej.

Figura 8.1

Figura 8.2

_________________________________________________________________________ ITMAR, Mazatln 95 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Una interrupcin puede ser inciada: Por un perifrico o circuito externo ajeno al microprocesador o microcontrolador a travs de los pines especficos del mismo. En estas condiciones la interrupcin es externa. Dentro del propio chip microprocesador o microcontrolador. Entonces la interrupcin es interna.

Toda interrupcin aceptada conduce a la ejecucin de un subprograma especfico cuya direccin de comienzo se indica en las posiciones de memoria de una tabla, que recibe el nombre de tabla de vectorizacin.

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, sealando la falta de los indicadores que activan TF2 y EXF2 en el 8051 por no tener implementado el Timer 2.

Figura 8.3

_________________________________________________________________________ ITMAR, Mazatln 96 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

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

_________________________________________________________________________ ITMAR, Mazatln 97 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

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 atencin a la interrupcin o, como es habitual, mediante un JMP<dir> se desva a una zona de memoria de programas lo suficientemente extensa para albergar la rutina de tratamiento de la interrupcin detectada. As por ejemplo, si se habilita la interrupcin 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 vectorizacin contendr en la localidad 0003H el cdigo de operacin de la instruccin de salto (y la parte alta de la direccin del salto si es un salto absoluto AJMP), en la siguiente localidad 0004H el byte alto de la direccin de salto y en la direccion 0005H el byte bajo de la direccin del salto (Figura 8.4).

Figura 8.4
10.3. EL PROCESO DE INTERRUPCION

_________________________________________________________________________ ITMAR, Mazatln 98 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

8.3. EL PROCESO DE INTERRUPCION EN LOS MICROCONTROLADORES 8052-/8051


Los indicadores de interrupcin son muestreados en el estado 5, fase 2 (S5P2) de cada ciclo mquina. Las muestras son escrutadas durante el siguiente ciclo mquina. El sistema de interrupciones del microcontrolador genera un LCALL al apropiado vector de interrupciones. Esta situacin se produce salvo que: Una interrupcin de igualo mayor nivel de prioridad est en ese momento en proceso. No haya finalizado la instruccin que en ese momento est procesndose. La instruccin en proceso es una RETI (retorno de interrupcin) o se est produciendo un acceso a los registros IE o IP; entonces asegura que una instruccin ms, al menos ser ejecutada antes de que la interrupcin sea procesada.

El ciclo de escrutinio se repite con cada ciclo mquina y los valores escrutados son los que corresponden a la activacin de la interrupcin presente en el S5P2 del ciclo mquina anterior. Puede suceder que una bandera de interrupcin 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 situacin de bloqueo y que la solicitud de interrupcin siga activa. En este caso la interrupcin ser tratada por el microcontrolador. b) Que desaparezca la situacin de bloqueo, pero que en ese intervalo la seal de solicitud de interrupcin se haya desactivado. En ese caso la interrupcin ser denegada y deber ser solicitada nuevamente. El ciclo completo es mostrado en la Figura 8.5, considerando las condiciones idneas, es decir, cuando el ciclo mquina C2 coincide con el ltimo ciclo de instruccin que se est ejecutando y que esta instruccin no sea una RETI o un acceso a los registros IE o IP. Puede suceder tambin que una interrupcin de un nivel de prioridad mas alto se active antes del estado S5P2 del ciclo de mquina etiquetado C3 en la Figura 8.5; de acuerdo con lo dicho anteriormente, esta interrupcin ser vectorizada durante los ciclos C5 y C6, sin que ninguna instruccin de la rutina de prioridad ms baja haya sido ejecutada.

_________________________________________________________________________ ITMAR, Mazatln 99 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Con relacin al borrado de los indicadores, una vez servida la rutina de interrupcin, se ha de decir que en algunos casos, el borrado es automtico, 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 estn activadas por nivel, ste debe volver a su estado de no activacin> para que salga de la rutina de interrupcin. Una vez validada la interrupcin 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 interrupcin debe finalizar con la instruccin RETI, que informa a la CPU de que la rutina ha finalizado. A rengln seguido se recuperan de la memoria de pila los dos bytes de direccin del programa principal, instruccin siguiente a la que en proceso recibi la interrupcin 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 ms que sufrir una relativa pequea prdida de tiempo.

8.4. NIVELES DE PRIORIDAD DE LAS INTERRUPCIONES


Cada fuente de interrupcin 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 interrupcin la sita en el nivel de prioridad ms alto y un 0 en el nivel ms bajo. _________________________________________________________________________ ITMAR, Mazatln 100 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Los bits b6 y b7 no estn asignados, y lo mismo pasa con el b5 para el Microcontrolador 8051, puesto que no tiene Timer2. Una interrupcin 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 interrupcin de prioridad alta no puede ser interrumpida por otra fuente de interrupcin, salvo por la interrupcin externa RESET.
Cuadro 8.2

Si dos peticiones de interrupcin de distintos niveles de prioridad son recibidas simultneamente la interrupcin de nivel de prioridad alto es servida. Si la peticin corresponde a interrupciones del mismo nivel de prioridad y se producen simultneamente, un escrutinio interno da secuencia al servicio de una manera predeterminada segn se muestra en la tabla 8.3
Tabla 8.3

_________________________________________________________________________ ITMAR, Mazatln 101 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

As, dentro del mismo nivel de prioridad, hay una segunda estructura de prioridades determinada por el orden de escrutinio segn la tabla anterior. Esta prioridad, dentro del mismo nivel, solamente es utilizada para resolver estas peticiones simultneas. La Figura 8.6 resume y esquematiza los aspectos ms importantes que han sido tratados con relacin al tema: ____ ____ INT0 e INT1 pueden ser activas por nivel o flanco. El registro IE (Interrupt Enable) permite interrupciones o habilitarlas individualmente. inhabilitar todas las

El registro IP (Interrupt Priority) puede disponer cada interrupcin, 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 continuacin se estudia cada uno de los tipos de interrupciones, exceptuando las de los puertos de comunicaciones.

Figura 8.6

_________________________________________________________________________ ITMAR, Mazatln 102 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

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), tambin del registro TCON. Cuando se genera una interrupcin 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 ejecucin de la rutina, entonces se dice que lo ha borrado el hardware del microcontrolador. Si la interrupcin ha sido generada por nivel, la seal externa activa el indicador y la puesta a cero del mismo se hace por software, mediante una instruccin que pone el indicador a cero actuando sobre el propio bit en el registro correspondiente, naturalmente, una vez que la seal de activacin de la interrupcin 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 interrupcin. En este apartado se muestran las interrupciones externas y prioridades.

Ejercicio 8.1. Interrupciones externas. DESPLA0.ASM


Descripcin 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 temporizacin permite modificar la frecuencia de desplazamiento del bit. ____ En estas condiciones se tiene el efecto referido, pero cuando por el pin 12 (INT0), interrupcin externa del microcontrolador, se produce un flanco descendente, y dado que est habilitado este tipo de interrupcin, el microcontrolador ejecuta una rutina, asociada a la interrupcin, cuyos efectos externos son hacer parpadear diez veces y simultneamente todos los leds del Puerto 0 (P0) para, una vez concluida esta secuencia, continuar con el programa principal del bit deslizante. A continuacin se indican, someramente, las operaciones que van a tener lugar de una manera secuenciada: --Cuando el microcontrolador recibe la interrupcin y sta es aceptada, por estar habilitada (IE), el contador de programas (PC) no se incrementa para ejecutar la _________________________________________________________________________ ITMAR, Mazatln 103 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

siguiente instruccin, sino que consulta la tabla de vectorizaciones en la localidad correspondiente al tipo de interrupcin. --El contador de programas salta a ejecutar la rutina situada en la direccin sealada en la tabla de vectorizacin. -Antes de proceder a la ejecucin de la rutina asociada a la interrupcin, guarda en la pila el PC de la instruccin siguiente en la que fue interrumpido el sistema para, una vez concluida la rutina de interrupcin, conocer la instruccin que le corresponda 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 atencin a los registros y variables que son utilizados en comn y no se encuentre con que los valores que utilizaba en el programa principal han sido modificados por la rutina, lo que rompera 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 efecta colocando al final de la misma, y justo despus de recuperar los valores de los registros y variables de la pila, la instruccin RETI. A continuacin 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 interrupcin sea antirrebote) (vase Figura 6.6).

Figura 8.7

_________________________________________________________________________ ITMAR, Mazatln 104 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Configuracin de registros:

Programa Fuente:
; DESPLA0.ASM ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) ; EQU 0300H ; Comienzo de la RUTINA de RETARDO. EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. ; ORG JMP ; ORG MOV MOV MOV SETB RLC 0003H ; Vectorizacin de la RUTINA DE INTERRUPCION (INT0). INT0 ; Llamada a la RUTINA DE INTERRUPCION. 0200H TCON, #01H IE, #81H A, #00H C A ; Se programa la INTO por flanco. ; Habilitada interrupcin INTO. ; Se pone el CARRY a 1. ; Rotacin de un bit ala izda.

RETARDO INT0

SAL0:

_________________________________________________________________________ ITMAR, Mazatln 105 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051
MOV P0, A CALL RETARDO JNB A, 7, SAL0 SAL1: RRC MOV CALL JNB JMP ; ORG PUSH MOV PUSH MOV MOV MOV DJNZ DJNZ DJNZ POP MOV POP RET ; ORG PUSH MOV PUSH MOV PUSH MOV MOV CALL MOV CALL DJNZ POP MOV POP MOV POP A RETI END A P0, A RETARDO A,0, SAL1 SAL0 0300H A A, R0 A R0, #04H R1, #20H R2, #FFH R2, SAL4 R1, SAL3 R0, SAL2 A R0, A A ; Comienzo de la rutina de RETARDO. ; Se guarda el ACC en el stack (PILA). ; Se escribe en el Puerto 0 (P0). ; Se llama a la rutina de RETARDO. ; Se testea el bit 8. Si es < > O se comienza el ; desplazamiento a la dcha.

CAP 8

SAL2: SAL3: SAL4:

; Se recupera ACC del stack.

0400H A A, PSW A A, R0 A R0, #0AH P0, #FFH RETARDO P0, #00H RETARDO R0, SAL5 A R0, A A PSW, A

; Comienzo de la rutina de interrupcin INT0. ; pone en intermitencia todos los bits del P0. ; Se guarda en el stack el registro de estado. ; Se guarda. tambin, el registro R0.

SAL5:

; Se recuperan los registros del stack.

_________________________________________________________________________ ITMAR, Mazatln 106 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

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 demostracin, con una interrupcin ms, la correspondiente a la entrada exterior activa por flanco descendente (T2EX), asociada al Timer 2 (ver Figura 7.8). Cuando se active esta interrupcin 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 ejecucin de esta rutina (T2EX) produce el intercambio alternativo de los nibbles bajo y alto del Puerto 0, como se indica a continuacin:

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 simultneamente las dos interrupciones INT0 y T2EX, ambas activas, como se podr ver en la inicializacin en flanco descendente. En funcin del valor escrito en el registro de prioridades (IP) se estudian dos opciones: ____ a) Que se ejecute la interrupcin INT0 y posteriormente T2EX, pulsando una sola vez. b) Que se invierta el orden de ejecucin. _________________________________________________________________________ ITMAR, Mazatln 107 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Figura 8.8

Mapa de memoria

Algoritmo

Como se ha sealado antes, han de observarse, de momento, dos opciones a) y b). Para que se cumpla la primera opcin, no es necesario programar el registro de prioridades (IP), puesto que, por defecto, segn se estudi, INT0 tiene mayor prioridad que T2EX, por esta razn, en este programa: IP 00H Para que se cumpla la segunda opcin, a T2EX se le da la prioridad alta ya lNT0 la prioridad baja, es decir:

_________________________________________________________________________ ITMAR, Mazatln 108 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 PT2 1 IP 20H PX0 0 Programa fuente

CAP 8

RETARDO INT0 T2EX

; PRIOR0.ASM. ; Desplaza un bit de izda. a dcha. en el Puerto 0 (P0) , ; adems, presenta otros programas alternativos ; EQU 0300H ; Comienzo de la RUTINA de RETARDO. EQU 0400H ; Comienzo de la RUTINA de INTERRUPCION. EQU 0500H ; Comienzo de la RUTINA de INTERRUPCION (T2EX). ; ; -------------------------------------------------------------------------------------------------------ORG 0003H ; Vectorizacin de la RUTINA de INTERRUPCION ; (INT0). ; Llamada a la RUTINA DE INTERRUPCION.

JMP INT0 ; ; -------------------------------------------------------------------------------------------------------ORG 002BH ; Vectorizacin de RUTINA T2EX JMP T2EX ; ; -------------------------------------------------------------------------------------------------------ORG MOV MOV MOV MOV MOV SETB RLC MOV CALL JNB 0200H TCON, #0lH T2CON, #08H IE, #A1H IP, #00H A, #00H C A P0, A RETARDO A. 7, SAL0 ; Programa principal. ; (TCON01H flanco); (TCON00H nivel). ; Se programa la T2EX por flanco. ; Habilitada interrupcin INT0 y T2EX. ; Define prioridad. IP= O por defecto. : IP= 20H alta prioridad para T2EX. ; Pone a 0" ACC. ; Se pone el CARRY a 1". ; Rotacin de un bit a la izda. : Se escribe en el Puerto 0 (P0). ; Se llama a la rutina de RETARDO. ; Se testea el bit 8. Si es < > 0 se comienza el ; desplazamiento a la dcha. ; Rotacin de un bit a la dcha. ; Se escribe en el (P0).

SAL0:

SAL1:

RRC A MOV P0, A 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

_________________________________________________________________________ ITMAR, Mazatln 109 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

SAL2: SAL3: SAL4:

SAL5:

SAL6:

MOV R0, #15H ; Rutina comentada en el Ejercicio 5.5. MOV R1, #2OH MOV R2, #FFH 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 interrupcin 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, tambin, el registro R0. MOV R0, #0AH ; Contador de eventos. 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 interrupcin (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. 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

_________________________________________________________________________ ITMAR, Mazatln 110 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

En este ejercicio es interesante comprobar, adems de las interrupciones simultaneas, los siguientes aspectos: En el caso de que se est ejecutando una interrupcin, qu suceder si se activa otra de menor o igual prioridad ?

-Lgicamente. la segunda interrupcin no interrumpir la ejecucin de la primera, pero ser ejecutada, una vez finalizada la primera, porque la memoriza en la cola de ejecucin de rutinas. .Qu suceder si ejecutando el programa de la rutina de interrupcin se activa otra de mayor prioridad?

-Abandona la rutina de interrupcin para ejecutar la segunda, y una vez finalizada sta regresar a completar la ejecucin 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 y1


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 intencin de servir de repaso y a modo de resumen se muestran a continuacin los registros de conteo, los indicadores que son afectados segn el Timer, y los modos de trabajo. En cualquier caso, el flag activo es borrado por hardware cuando sea vectorizada la rutina de atencin a la interrupcin.

_________________________________________________________________________ ITMAR, Mazatln 111 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Ejercicio 8.3. Interrupcin 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 direccin. La velocidad de desplazamiento del bit depende del valor que el usuario le ponga en el Puerto P1 con los ocho conmutadores, segn el peso de los bits. Objetivos

-Repasar la programacin de los Timers. -Ver cmo se activa una interrupcin al producirse el desbordamiento en los Timers. -Observar el mecanismo de la vectorizacin. En este caso se utiliza el Timer 1, pudiendo sustituirse sin ningn inconveniente por el Timer 0. _________________________________________________________________________ ITMAR, Mazatln 112 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

Esquema del circuito (Figura 8.9)

Figura 8.9

Programa fuente
; DESPLA1.ASM. ; Desplaza un bit en el puerto P0, con velocidad variable en ; funcin del dato ledo en el puerto de entrada P1 ; ORG 001BH JMP 030H ; Vector de la interrupcin Timer 1. ; ORG 0200H MOV TMOD, #10H ; Timer 1 como temporizador en Modo 1. MOV IE, #88H ; Validacin de interrupcin 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. 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

SAL0:

_________________________________________________________________________ ITMAR, Mazatln 113 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

8.7. INTERRUPCIONES INTERNAS DEL TlMER 2 (slo 8052)


En el microcontrolador 8052 la interrupcin del Timer 2 puede producirse por dos caminos, segn se active TF2 o/y EXF2. En el Ejercicio 8.2 se estudi la interrupcin exterior por flanco descendente (T2EX), dentro del contexto de las prioridades. Ahora le toca el turno al anlisis del funcionamiento de la interrupcin 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, segn los datos fijos almacenados previamente en una tabla de tal forma que el desplazamiento se haga rpido en los extremos y lento en el centro (Figura 8.10). El Ejercicio 6.4 tambin 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 debern 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 interrupcin del Timer 2 por software

Figura 8.10

_________________________________________________________________________ ITMAR, Mazatln 114 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051 . Esquema del circuito (Figura 8.11)

CAP 8

Figura 8.11

Program fuente
; INTETIM2.ASM. ; ; Igual que DESPLA0.ASM, pero la velocidad de desplazamiento ; es funcin de los valores registrados en una TABLA. ; EQU 0500H ; Comienzo de la TABLA. EQU 40H ; Variable que indica el sentido de ROTACION. EQU 41H ; Variable dato de salida por P0. 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 interrupcin (Timer 2). JMP TIMER2 ; ; ------------------------------------------------------------------------------------------------------------ORG 020H ; Programa de inicializacin y principal. MOV DPTR, #TABLA : Se carga inicio de TABLA en puntero DPTR. MOV AUX, #01H ; Se inicia movimiento rotacin 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 interrupcin Timer 2. MOV IP, #40H ; Mxima prioridad Int. Time,2 (no es necesario). MOV TL2, #00H ; Se carga registro contador Timer 2. MOV TH2, #00H

TABLA AUX ROTA TIMER2

_________________________________________________________________________ ITMAR, Mazatln 115 Ing. Rufino J. Domnguez Arellano

El Microcontrolador 8051

CAP 8

SAL0:

MOV T2CON, #04H ; Se arranca Time,2. NOP ; Simula el programa principal. JMP SAL0 ; ; ------------------------------------------------------------------------------------------------------------ORG ANL PUSH MOV JZ MOV RLC MOV JMP MOV RRC MOV MOV MOV MOVC MOV MOV MOV INC MOV JZ MOV CJNE MOV MOV JMP MOV CJNE MOV MOV CLR POP RETI ; END 0300H ; Comienzo de la rutina de interrupcin. T2CON, #BFH ; Se borra la bandera de interrupcin. A ; Guardar registros programa principal. A, AUX ; Para saber el sentido de rotacin que ... SAL1 ; ...corresponde. Si AUX = 01H a la izda ... A, ROTA ;...si AUX=00H a la dcha. A ROTA, A SAL2 A, ROTA A ROTA, A P0, ROTA ; El contenido de ROTA se saca por el P0. A, #00H ; Se inicializa ACC. A, @A+DPTR ; Se obtiene dato de temporizacin de TABLA. TL2, A ; Se carga dato TABLA en Time,2. TH2, A T2CON, #04 ;Se arranca Timer2. DPTR ; Se incrementa puntero de TABLA. A, AUX ; Si el bit que se desplaza lleg al extremo ... SAL3 ; ...del recorrido se cambia el sentido de la ... A, ROTA ; ...rotacin. cambiando el valor de AUX. A, #80H, SAL4 AUX, #00H DPTR, #TABLA ; Se inicializa puntero de TABLA. SAL4 A, ROTA A, #01H,SAL4 AUX, #01H DPTR, #TABLA C A

SALl: SAL2:

SAL3:

SAL4:

_________________________________________________________________________ ITMAR, Mazatln 116 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

CAPITULO 9

Comunicaciones
9.1. INTRODUCCION
El puerto serie de los Microcontroladores 8052/8051 trabaja en el modo fullduplex, lo que significa que puede recibir y transmitir simultneamente. Como receptor tiene un buffer que le permite recibir un segundo byte, antes de que el byte previamente recibido haya sido ledo por el registro receptor. (Sin embargo, si el primer byte no ha sido ledo 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 direccin 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 travs de la lnea RXD. TXD presenta los impulsos de desplazamiento del reloj. La palabra de informacin a transmitir o recibir es de 8 bits, siendo el primero en salir o en llegar el bit menos significativo. La velocidad de transmisin expresada en baudios (baudio = bits/seg) est dada por la relacin 1/12 de la frecuencia de reloj del microcontrolador . Modo 1: Es una comunicacin ms acorde con los estndares habituales. Utiliza 10 bits que son transmitidos a travs de TXD o recibidos a travs de RXD. Los bits utilizados tienen la siguiente funcin: - 1 bit de start (0) (seala el comienzo). - 8 bits de datos (LSB = primero). -1 bit de stop ( 1 ). La velocidad de transmisin puede ser ajustada por el usuario dentro de un amplio rango. Modo 2: Transmite a travs 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)

_________________________________________________________________________ ITMAR, Mazatln 117 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

El noveno bit, en la transmisin, 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 transmisin. En la recepcin este noveno bit se refleja en el bit RB8 del registro SCON, mientras el bit de Stop es ignorado. La velocidad de transmisin 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 travs 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 transmisin. En el Modo 3 la velocidad de transmisin puede ser ajustada por el usuario dentro de un amplio rango. En los cuatro modos, la transmisin es iniciada mediante cualquier instruccin que use el registro SBUF como destino. La recepcin se inicia en MODO 0 por la condicin 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 interrupcin del puerto serie se activar, slo si RB8 =1. Esta opcin es permitida activando el bit SM2 en el registro SCON. Veamos seguidamente una forma de utilizar esta opcin en el entorno multiprocesador. Cuando el procesador maestro quiere transmitir un bloque de datos a uno de los esclavos, primero enva un byte de direccin que identifica el esclavo. Un byte de direccin difiere de un byte de datos en que el noveno bit es 1 en el byte de direccin, y 0 en el byte de datos. Con SM2 =1, ningn esclavo ser interrumpido por el byte de datos. Un byte de direccin, sin embargo, interrumpir a todos los esclavos, de manera que cada uno pueda examinar el byte recibido y ver si se refiere a su direccin para entrar en comunicacin 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 continan sus procesos ignorando el byte de datos que es enviado por el maestro. _________________________________________________________________________ ITMAR, Mazatln 118 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

SM2 no tiene ningn efecto en Modo 0, y en Modo 1 puede utilizarse para comprobar la validez del bit de Stop. En una recepcin en Modo 1, si SM2=1, la interrupcin de la recepcin no se ver activada a no ser que se reciba un bit de Stop vlido, 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 seleccin de velocidad de comunicacin. -Noveno bit de dato para transmitir y recibir (TB8 y RB8). -Gestin de interrupciones del puerto serie (TI y RI). CUADRO 9.1

_________________________________________________________________________ ITMAR, Mazatln 119 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

9.4. VELOCIDAD DE COMUNICACION


La velocidad en baudios de comunicacin en Modo 0 se fija por la relacin:

BAUDIOS en modo 0 =

frecuencia del oscilador del microcontrolados 12

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

BAUDIOS en modo 2 =

2SMOD (frecuencia del oscilador) 64

En el 8051, los baudios en, Modo 1 y 3 son determinados por la relacin de desbordamiento del Timer 1. En el 8052 la velocidad de comunicacin 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:

BAUDIOS en modos 1 y 3 =

2SMOD (relacin de desbordamiento Timer 1) 32

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 mayora de las aplicaciones, configurarlo como temporizador en modo autorrecarga (TMOD = 20H). En este caso los baudios vienen dados por la frmula:
2SMOD frecuencia del oscilador 32 12(256 TH1)

BAUDIOS en modos 1 y 3 =

_________________________________________________________________________ ITMAR, Mazatln 120 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Se pueden lograr velocidades de comunicacin muy bajas con el Timer 1, permitiendo la interrupcin y configurando el Timer para el conteo con 16 bits (TMOD = 10H) y usando la interrupcin del Timer para efectuar la recarga sobre el registro de conteo. La Tabla 9.1 lista algunas de las velocidades de comunicacin comnmente utilizadas y cmo pueden ser obtenidas utilizando el Timer 1. TABLA 9.1

As, por ejemplo, para obtener una velocidad de comunicacin 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 frmula:
BAUDIOS en modos 1 y 3 = 2SMOD frecuencia del oscilador 32 12(256 - TH1)

BAUDIOS =

1 11059x103 = 9599.83 9600 32 12(256 - 253)

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

_________________________________________________________________________ ITMAR, Mazatln 121 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

CUADRO 9.2

Se puede observar a la derecha de la Figura 9.1, que las velocidades en baudios para la transmisin y recepcin pueden ser diferentes, segn se active RCLK y/o TCLK y as poder actuar simultneamente con el Timer 1 y el Timer 2. EI modo generador de baudios acta de forma similar que el modo autorrecarga estudiado en el Captulo 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 relacin de desbordamiento del Timer 2. De una forma general se pueden expresar as:

BAUDIOS en modos 1 y 3 =

Relacin de desbordamiento Timer 2 16

Figura 9.1

_________________________________________________________________________ ITMAR, Mazatln 122 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Concretando, el Timer 2 puede ser configurado bien como temporizador o como contador. En la mayora de las aplicaciones se configura como Timer (C/T2 =0). La operacin 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 comn el registro de conteo se incrementaba cada ciclo mquina, 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 estn dados por la frmula:

BAUDIOS en modos 1 y 3 =

frecuencia del oscilador 32 (65536 - RCAP2H : RCAP2L)

donde (RCAP2H:RCAP2L) es el contenido de dichos registros en formato de 16 bits, como enteros y sin signo. Un estudio ms detallado de la Figura 9.1 indica que para que acte 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 interrupcin, aspecto este que podra darse en los timers del Captulo 7. Por consiguiente, cuando se utilice el Timer 2 como generador de baudios no se debe desactivar la interrupcin del Timer 2. Obsrvese adems que, si EXEN2 se activa, una transicin 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 prdida de exactitud en la evaluacin del tiempo. Los registros RCAP pueden ser ledos, pero no deben ser escritos, puesto que se podra producir solapamiento en la recarga y originar errores de escritura y/o recarga. Si se desean hacer estas operaciones, desconctese el Timer 2 (desactivar TR2) antes de acceder al Timer 2 o a los registros RCAP. A continuacin describiremos en detalle los cuatro modos de operacin.

9.5. COMUNICACIONES EN MODO 0.


Este modo se establece desde los bits 6 y 7 {SM0-SM1) de SCON {Vase Cuadro 9.1 ).

_________________________________________________________________________ ITMAR, Mazatln 123 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Como se ha dicho anteriormente la entrada y salida de datos en serie se produce a travs 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 comunicacin en Modo 0, utilcense los cronogramas de la Figura 9.3 al tiempo que se lee el siguiente texto. La transmisin es iniciada por cualquier instruccin que utiliza SBUF como registro de destino. La seal de escritura en SBUF en el estado S6P2, tambin carga un 1 en la posicin novena del registro de desplazamiento de transmisin e indica al bloque control TX que comience la transmisin. El intervalo de tiempo que transcurre desde la escritura en SBUF y la activacin de la seal de control SEND es igual aun ciclo mquina completo. SEND autoriza la salida del dato contenido en el registro de desplazamiento de una forma alternada a travs del pin 10 {RXD =P3.0) y tambin autoriza la salida de la seal de reloj simtrica (Shjft Clock) a travs del pin 11 {TXD =P3.1 ). La seal TXD {SHIFT CLOCK) est a nivel bajo durante los estados S3, S4 y S5 de cada ciclo mquina, ya nivel alto durante los estados S6, S1 y S2. En la fase S6P2 de cada ciclo mquina en el que SEND es activa, el contenido del registro de desplazamiento transmisor se desplaza a la derecha una posicin. Por cada bit de dato que se desplaza al exterior por la derecha un bit cero ingresa por la izquierda. Cuando el bit ms significativo {MSB) del byte de datos est en la posicin de salida del registro de desplazamiento, entonces el 1 que fue inicialmente cargado en la posicin novena se encuentra a la izquierda del MSB y todas las posiciones a la izquierda de ste contienen ceros. Esta condicin previene al bloque de control TX para que haga un ltimo desplazamiento, desactive SEND y active la seal de interrupcin TI. Estas acciones ocurren en la fase S1P1 del dcimo ciclo mquina despus de escribir en SBUF. La recepcin es iniciada por la condicin REN =1 y R1 =0. En la fase S6P2 del siguiente ciclo mquina, 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 seal de control RECEIVE autoriza la salida de la seal de reloj simtrica SHIFT CLOCK por la lnea TXD. SHIFT CLOCK efecta la transicin en la fase S3P1 y S6P1 de cada ciclo mquina. En la fase S6P2 de cada ciclo mquina en que la seal de control RECEIVE es activa, el contenido del registro de desplazamiento receptor es desplazado a la izquierda una posicin. El bit que

_________________________________________________________________________ ITMAR, Mazatln 124 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

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

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 dcimo ciclo mquina despus de la escritura en SCON, la seal de control RECEIVE es borrada y la bandera de interrupcin RI es puesta a 1.

_________________________________________________________________________ ITMAR, Mazatln 125 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Figura 9.3

9.5.1. Resumen comunicaciones en Modo 0


-Longitud palabra dato: 8 bits. Primero el bit LSB. -Formato palabra dato:

_________________________________________________________________________ ITMAR, Mazatln 126 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Esquema simplificado de comunicaciones:

Figura 9.4

Ejercicio 9.1. Transmisin 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 seal de sincronismo y visualizarla por el pin TXD.

Esquema

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

_________________________________________________________________________ ITMAR, Mazatln 127 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Figura 9.5, la seal 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 CLR P2.0 MOV A, P0 MOV SBUF, A SETB P2.0 MOV A, SCON JZ B020B CLR P2.0 LCALL SUB1 CLR .TI SJMP ; MOV MOV MOV DJNZ DJNZ B0205 R0, #01 R1, # 03 R2, #05 R2, B0306 R1, B0304 ; Pto. Serie en Modo 0. Transmisin. ; Bit de aviso de transmision en cero. ; Dato a transmitir. ; Inicia la transmisin. ; Avisa que inicia la transmisin. ; Ya se transmiti el 8 bit ? ; Borra bit de aviso de transmisin. ; Solo un retardo. ; Borro bandera de interrupcion. ; Esto permite que haya otra transmisin ; Empiezo de nuevo. ; Rutina de retardo.

B0205: B020B:

SUB1: B0302: B0304: B0306:

DJNZ R0, B0302 RET

_________________________________________________________________________ ITMAR, Mazatln 128 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Ejercicio 9.2. Recepcin en Modo 0

Objetivos

-Programar el puerto serie como receptor en Modo 0. -Recibir en el puerto serie el byte que se enva desde el exterior por el pin RXD. -Efectuar el tratamiento de la comunicacin utilizando interrupciones.

Esquema del montaje

En la Figura 9.6 se observa cmo el dato se introduce utilizando un pulsador; la frecuencia de captura en el pin RXD es tan elevada que slo se puede observar la presencia de unos o ceros en el Puerto 0 de salida.

Figura 9.6

_________________________________________________________________________ ITMAR, Mazatln 129 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

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

Listado del programa


ETIQUETA CODIGO ORG 0023H

B0200:

LJMP 0400 ; ;------------------------------------------------------------------------; Inicializacin ORG 200H MOV IE, #90 MOV SCON, #10 LCALL RETARDO SJMP B0200 ; ;-----------------------------------------------------------------------; Rutina de RETARDO ORG 300H MOV R0, #02 MOV R1, #FF MOV R2, #FF DJNZ R2, B0306 DJNZ R1, B0304 DJNZ R0, B0302 RET ; ;----------------------------------------------------------------------; Rutina de Interrupcin ; Realiza las siguientes tareas: ; 1) Sale del modo de recepcin. ; 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 MOV PUSH MOV SCON, #00 A.R0 ACC A, R1

RETARDO: B0302: B0304: B0306:

_________________________________________________________________________ ITMAR, Mazatln 130 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051
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

CAP 9

9.6. COMUNICACIONES EN MODO 1


Seleccionado desde el registro SCON (Cuadro 9.1 ). En esta opcin 10 bits se transmiten a travs del pin 11I (TXD=P3.1) o se reciben a travs 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 recepcin el indicador RB8 del registro SCON es la imagen del bit de stop. En el 8051 los baudios vienen dados por la razn de desbordamiento del Timer 1 .En el 8052, vienen dados bien por la razn 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 transmisin y recepcin. La transmisin se inicia con cualquier instruccin que utilice SBUF como registro destino. La escritura en SBUF tambin carga un 1 en la posicin del noveno bit del registro de desplazamiento transmisor y alerta a la unidad de control TX que una peticin de transmisin ha sido solicitada. La transmisin comienza realmente en la fase S1P1 del siguiente ciclo mquina que resulta despus 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 seal de escritura en SBUF).

_________________________________________________________________________ ITMAR, Mazatln 131 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Figura 9.7

La primera operacin de la unidad de control TX es activar la seal de control SEND que pone el bit de start en el pin TXD. Un tiempo de bit ms tarde, la seal DATA se activa, lo que autoriza la salida del bit del registro de desplazamiento transmisor a travs del pin TXD. El primer pulso de desplazamiento ocurre un tiempo de bit ms 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 posicin de salida del registro de desplazamiento, entonces el 1, que ha sido inicialmente cargado en la novena posicin, est a la izquierda del bit MSB y el resto de posiciones a su izquierda estn cargadas con ceros. Estas condiciones alertan a la unidad de control TX para que realice un ltimo

_________________________________________________________________________ ITMAR, Mazatln 132 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

desplazamiento y desactive la seal SEND y active el indicador TI (peticin de interrupcin). Esto ocurre en el dcimo ciclo de desbordamiento del contador divisor por 16 despus de la instruccin de escritura en SBUF.

Figura 9.8 La recepcin es iniciada al detectar la transicin (flanco descendente) en el pin RXD. Por este motivo este pin es muestreado a razn de 16 veces independientemente de la velocidad en baudios que haya sido establecida. Cuando una transicin 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 ledo en al menos dos de las tres muestras. Esto se hace para rechazar el ruido elctrico. 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 transicin 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 hara 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 posicin novena, la ms 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 seal RI (interrupcin). La seal para cargar SBUF y RB8, y para

_________________________________________________________________________ ITMAR, Mazatln 133 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

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 ubicarn 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 comunicacin:

-Velocidad de comunicacin:

Modo de carga y desbordamiento del Timer 1:

BAUDIOS =

2SMOD (desbordamiento) 32

_________________________________________________________________________ ITMAR, Mazatln 134 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051
Timer I como temporizador con autorrecarga:
BAUDIOS = 2SMOD frecuencia del oscilador 32 12 (256 - TH1)

CAP 9

Tambin utilizando el Timer 2 (vase Apartado 9.4.2), Comienza: Escribiendo el dato en SBUF Termina: Activando el indicador TI Comienza: Cuando REN=1 y descendente (bit start) en RXD. Termina: Activando la bandera RI se detecta un flanco

-Transmisin : - Recepcin :

9.7. COMUNICACIONES EN LOS MODOS 2 Y 3

En esta opcin 11 bits se transmiten a travs de TXD, o se reciben a travs 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 operacin de transmisin el noveno bit de datos es la imagen del bit TB8 perteneciente al registro SCON, pudiendo asignarle el valor 0 o 1. En recepcin 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 mnimas, como se desprende de las explicaciones que siguen a continuacin.

_________________________________________________________________________ ITMAR, Mazatln 135 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Figura 9.9 El cronograma representado en la Figura 9.10 muestra las operaciones secuenciadas en el tiempo para la transmisin y recepcin en el Modo 2 y 3. Las diferencias, como se aclararn en las explicaciones que siguen, residen en la velocidad de comunicacin que en el Modo 2 es fija, mientras que en el Modo 3 la velocidad de comunicacin es variable.

_________________________________________________________________________ ITMAR, Mazatln 136 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

Figura 9.10 Como en los otros modos, la transmisin se inicia por una instruccin que utilice el registro SBUF como destino. La seal de escritura en SBUF, tambin carga TB8 en la posicin del noveno bit del registro desplazamiento transmisor y alerta a la unidad de control TX para que proceda a la transmisin una vez sea solicitada. La transmisin comienza en la fase S1P1 del ciclo de mquina 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 seal de escritura en SBUF) (Figura 9.10). La unidad de control TX comienza su gestin con la activacin de SEND que pone el bit de Starl en el pin TXD. Un tiempo de bit ms tarde DATA se activa autorizando la salida de los bits del registro de desplazamiento de transmisin a travs de TXD. El primer pulso de desplazamiento ocurre un tiempo de bit despus de la salida del primer bit de datos. Tambin, en ese mismo instante, el registro de desplazamiento enva un 1 (bit de Stop), que ocupa la posicin del noveno bit en el registro de desplazamiento. Despus, slo 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 posicin 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 condicin alerta a la unidad de control TX para que haga el ltimo desplazamiento y entonces desactive SEND y active el indicador TI (interrupcin en la transmisin). Esto sucede en el undcimo ciclo de desbordamiento del contador-divisor por 16 despus de la escritura en SBUF.

_________________________________________________________________________ ITMAR, Mazatln 137 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

La recepcin se inicia al detectar en el pin RXD una transicin descendente. Por este motivo el pin RXD es muestreado a razn de 16 veces, independientemente de la velocidad en baudios establecida. Cuando una transicin 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 ledo 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 transicin 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 posicin ms 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 (interrupcin en e] modo receptor). La seal 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 alojarn dentro del registro SBUF. Un tiempo de bit> ms tarde, se cumplan o no las condiciones indicadas ms arriba, la unidad vuelve a comprobar la transicin descendente en la entrada RXD. Obsrvese 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:

_________________________________________________________________________ ITMAR, Mazatln 138 Ing. Rufino J. Domnguez Arellano

El Microprocesador 8051

CAP 9

- Velocidad de comunicacin: Se puede utilizar el Tirner 1 o el Tirner 2.

Para el Modo 2:

BAUDIOS =

2SMOD (frecuencia del oscilador) 64

Para el Modo 3 (velocidad variable):


BAUDIOS = 2SMOD frecuencia del oscilador 32 12 (256 - TH1)

- Transmisin:

Comienza: Escribiendo en SBUF TermIna: ActIvando el indicador TI Comienza: Cuando REN=1 y se detecta un flanco descendente (bit Start) en RXD Termina: Activando el indicador RI

- Recepcin :

_________________________________________________________________________ ITMAR, Mazatln 139 Ing. Rufino J. Domnguez Arellano

S-ar putea să vă placă și