Você está na página 1de 296

CAPITULO

La familia 51

1.1. CARACTERISTICAS DE LA FAMILIA 51


Si el lector desconoce las familias de microcontroladores de INTEL, debe leer el Apndice, A, situado al final del libro, para tener una visin de conjunto y situarse en el contexto en el que se ha realizado el siguiente trabajo. Dentro de los modelos de la familia 5 1 de microcontroladores (Tabla 1.1) se encuentran los 8XX2 y 8XX 1, que presentan las siguientes diferencias bsicas: 8032/3 1 + Memoria de programas externa. 8052/5 1 + Memoria de programas interna en ROM. ?? 8752/5 1 + Memoria de programas interna en EPROM.
?? ??

Tabla 1.1.

Los modelos ms populares de los microcontroladores de INTEL son los 8XXl y ms concretamente los 8X5 1, que han dado nombre a la familia. Las diferencias entre la serie 8XX 1 y 8XX2 y en concreto, entre los 805 1 y 8052 aparecen en la Figura 1.1. Como habr observado, el 8052 presenta una mayor capacidad de memoria y un Timer ms que el 805 1 *, al margen de dichas diferencias y de otras que resultan de stas, se puede afirmar que todo programa que funcione en un 805 1 lo har en un 8052~; * pero no siempre se puede decir lo mismo si se intercambian los nombres de los dispo* En este libro, cuanto se indique y diga respecto al 8052/805 1 vale tambin para el 8752/875 1.

Introduccin a los Microcontroladores

Direcciones/Datos i A \ PO P2 Pl P3

l l

7 CONTROL /,&-&i&&ij~.
RXD TXD 7 Interrupciones

Entradas Contador

externas

Figura 1.1.

sitivos en la frase. No obstante, el lector debe estar tranquilo, pues se matizarn las diferencias, y al final del libro reconocer perfectamente las caractersticas de uno y otro dispositivo. 1.2. CARACTERISTICAS DE LOS MICROCNTROLADORES 8052/8051

3 La anterior Figura 1.1 y, de una forma exhaustiva para comenzar, la Figura .2, muestran los diagramas generales en bloques de los Microcontroladores 8052/805 1. Las caractersticas generales son las siguientes: CPU de 8 bits. Procesador booleano (operacin sobre bits). ?? 4 puertos de 8 bits. ?? Para el 8052,256 bytes de memona interna RAM til para el usuario y 384 bytes en total considerando el rea de los registros especiales (SFR). Para el 805 1, 128 bytes tiles para el usuario y 256 bytes incluyendo el SFR. ?? 8 Koctetos de ROM (8052) o EPROM (8752). 4K para el 8X5 1. ?? Espacio de memoria de 64K para programa externo. ?? Espacio de memoria de 64K para datos externos. ?? El 8052 contiene tres contadores-temporizadores (timen). El 805 1 presenta dos timers. ?? Comunicacin asncrona full-duplex. ?? 6 fuentes de interrupciones con niveles de prioridad (5 para el 805 1).
?? ??

L~--~~--~~~~--P1.0-P1.7

- - - -

w------------------DRIVERS PUERTO 3 P3.0-P3.7

J *Residente solo en el 8052

Figura

1.2.

- 2 interrupciones externas. - 3 interrupciones de los timers (2 para el 805 1). - 1 interrupcin de la comunicacin serie. ?? Oscilador interno. PATILLAJE DE LOS MICROCONTROLADORES 8052/8051 \! En la, Figura 1.3. se procede a una breve identificacin de los pines de los Microcontroladores 8052/805 1, segn los formatos de presentacin pin DIP y pin PLCC. vcc El: Alimentacin positiva de +5 voltios. vss III : Conexin a tierra (0 voltios). 1.3.

<

Introduccin

a los Microcontroladores

P1.0lz 1 P1.l c 2 Pl2C 3 P1.3 c 4 P1.4 c 5 P15c6 Pi.6 c 7 P1.7 c 0

403Vcc 39 3 PO.O (AD0) 3 8 , P0.1 (ADl) 37 7 PO 2 (AD2) 3 6 , P0.3 (AD3) 35 3 P0.4 (AD4) 34 3 P0.5 (AIE) 33 3 P0.6 (AD) 32 3 P0.7 (AD7) 3 1 3 EA/wp* 30 II ALE/PROG -* 29 II P S E N 26 , P2.7 (A15) 27 3 P2.6 (A14) 26 3 P2.5 (A13) 25 2 P2.4 ( A l ? ) 24 II P2.3 (All) 23 7 P2.8 (Al0) 22 3 P2.1 (Ag) 2 1 3 P Z . O (A6) (TXD)
(imi) (INT1)

P0.4 (AD4)

36
37 38

RESET c 9 6751BH (RXD) P3.0 C 10 (TXD) P3.lC 11 :ii% $Ei) P3.2 4 12 P3.3 c 13

P0.5 (AD5) P0.6 (AD6) P0.7 (AD7)

6751BH P 3 . 1 13
P3.2 14 P3.3 15

(T(D) P3.4 C 14 (Tl) P3.5 c 15 (6) (66) P3.6 c 16 P3.7 C 17 XTALZ C 18 XTALi C 19 vss c 20

(TQ)

P3.4 4 16

P 0.4

(AD4)

P1.6 P1.7 (RXD) Pt: (TXD) (i@%%) (mi) (TO) (Tl) Pi? P3.2 P3.3 P3.4 P3.5

DIP
+ Solamente EPROM

PLCC
Figura 1.3.

DIP = Dual in Line Package PLCC = Plastic Leaded Chip Camier

La familia 51

: Los Microcontroladores 8052/805 1 tienen 4 puertos de 8 bits bidireccionales (PO, Pl, P2 y P3). Esto quiere decir quepueden programarse como entrada o salida. Como salida los drivers del Puerto 0 pueden soportar una cargabilidad, es decir, un nmero de entradas aplicadas a sus pines de salida, de 8 cargas TTL-LS, el resto de los puertos slo admiten 4 cargas TTL-LS. Para que los puertos acten como entradas de alta impedancia, es preciso escribir en los Zatch de cada pin un nivel de tensin alto (+5v), es decir un l. Este punto se estudiar ms adelante. Adems de este comportamiento como puertos de E/S para enviar o recibir informacin de los perifricos, stos estn capacitados para realizar las siguientes funciones: 1PuertoO(P0) 1: Multiplexa en el tiempo por sus 8 lneas la parte baja del bus de direcciones durante el acceso a la memoria externa de programas y datos, y el bus de datos. El Puerto 0 tambin recibe los bytes de cdigo durante la programacin de la memoria EPROM integrada y salen a travs de l los bytes de cdigo durante la verificacin de la memoria EPROM o ROM (Figura 1.4 A). 1Puerto 1 (Pl) 1: El Puerto 1 tambin recibe la parte baja de direcciones, durante la I programacin y verificacin de la memoria EPROM (Figura& .7 y 1.9).1: Los bits PV .O y Pl . 1 tienen otra funcin especial, slo para el Microcontrolador 8052 (Tabla 1.2).
Tabla 1.2.

PORTs o PUERTOS

PI.0 P1.l * Vase Figura 1.4 C).

T2 (Timer/Contador 2. Entrada externa) T2EX (Timer/Contador 2. Captura e impulso de recarga)

1Puerto 2 (P2) 1: El Puerto 2 emite la parte alta del bus de direcciones en los accesos de memoria externa (memoria de programa) cuando utilizan 16 bits de direccin y en los accesos a la memoria de datos que usa tambin 16 bits de direccin (MOVX @DPTR). Durante el acceso a la memoria de datos externa con direccionamiento de 8 bits (MOVX @Ri), los pines del Puerto 2 emiten el contenido del registro P2 del SFR (Special Function Register) (vase Figura 1.4 B). El Puerto 2 recibe la parte alta de la direccin, durante la programacin y verificacin de la memoria EPROM (Figuras 1.7 y 1.9).

Introduccin a los Microcontroladores

1Puerto 3 (P3)] : Este puerto tiene otras funciones especiales, como se muestra en la Tabla 1.3. .
Tabla 1.3.

P3.0 P3.1 P3.2 P3.3 P3.4 P3.5 P3.6 P3.7

RXD (Entrada puerto serie) TXD (Salida puerto serie) INTO (Interrupcin 0. Externa) * INTI (Interrupcin 1. Externa) TO (Entrada externa. Timer 0) T 1 (Entrada externa. Timo 1) WR (Autorizacin escritura en memoria de datos externa) RD (Autorizacin lectura en memoria de datos externa)

En la Figura 1.4 se muestran los dispositivos de entrada/salida por bit de los Microcontroladores 8052/8051. Como se ha dicho son bidireccionales y contienen un latch, un driver de salida y un buffer de entrada. Es interesante observar que el Puerto 0 y el Puerto 2 presentan una lgica adicional formada por un conmutador que permite seleccionar, bien la operacin sobre el bus de direcciones/datos del microcontrolador o bien la entrada/salida de datos del perifrico. El Puerto 0 puede adoptar el estado de alta impedancia (triestado) por la disposicin de los transistores en estado de no conduccin, mientras que en los otros tres puertos, en estado de reposo, la salida toma el valor alto a travs de la resistencia de carga (pu&up) integrada. En cualquier caso, el latch memoriza la informacin de entrada o salida. En la operacin de lectura, el latch debe cargarse con un nivel alto (l), para que el transistor MOS inferior permanezca en estado de no conduccin y de esta forma obtener la impedancia elevada de entrada antes referida. En el Captulo 8 se ampliar la informacin sobre los mismos.

: ALE (Address Latch Enable) es un pulso que emite el microcontrolador para enclavar el byte bajo del bus de direcciones en el acceso a la memoria externa. ALE se emite con una frecuencia de 1/6 de la frecuencia de emisin del reloj. PROG es la patilla de entrada de pulsos de programacin de la memoria EPROM.

: PSEN (Program Store Enable) es la seal de strobe para leer e? la memoria de programa externo. La memoria externa tiene dos modalidades, de programa y de datos. Para diferenciarlas, utiliza la seal PSEN. PSEN no se activa cuando se est ejecutando el programa de la ROM o EPROM interna. : EA (External Access), cuando se mantiene a nivel alto, se ejecuta slo el programa de la ROM interna, a menos que el contador de programa exceda de 1FFF

DIREC/DATOg C;ONTROL v;C DIRECCIONES

Lectura e n el LATCH

Pin d e LECTURA

Pin d e LECTURA

A) Pin del PUERTO 0 (PO.X)

B) Pin del PUERTO 2 (P2.X)


Funcion alternativa de SALIDA

Lectura en el LATCH

VCC PULL-UP INTERNA

BUS INTERNO f Escribe en e l IATCH LATCH CL Q

Pin d e LECTURA

Pin d e LECTURA

Funcion alternativa de ENTRADA

C) Pin del PUERTO 1 (P1.X)

_ D) Pin del PUERTO 3 (P3.X) Figura 1.4.

(8K) para el 8052 y de OFFF (4K) para el 8051. Si EA se mantiene a nivel bajo, se ejecuta el programa de la memoria externa, independientemente de la direccin del programa. Es decir: EA = 1 acta como microcontrolador. EA = 0 acta como microprocesador. VPP es la tensin de programacin de la EPROM.

?
T2

: Entrada externa del temporizador/contador (Timer 2) (slo para el 8052). : Captura y recarga de disparo (Timer 2) (para el 8052).

Introduccin

los

Microcontroladores

RXD El : Comnmente (segn modos) entrada del puerto serie. TXD : El Comnmente (segn modos) salida del puerto serie. : Entrada de la interrupcin externa 0.
pq

: Entrada de la interrupcin externa 1.

: Entrada externa del temporizador/contador (Timer 0). : Entrada externa del temporizador/contador (Timer 1). WR ITI : Seal de escritura para dispositivos externos. : Seal de lectura para dispositivos externos. XTALI y XTAL2 : XTALI y XTAL2 son la entrada y la salida, respectivamente, de un amplificador inversor &e puede ser configurado para su uso como un chip oscilador (Figura 1.5). Se puede utilizar indistintamente un cristal de cuarzo o un resonador cermico.

XTALB

XTALl

Cl,C2=30pF+/-10pF para Cristales Cl,C2=40pF+/-10pF para Resonadores Ceramicos

Figura 1.5.

La familia 51

Para que el microcontrolador sea conducido por un reloj externo, se debe conectar la entrada de reloj como se indica a continuacin (Figura 1.6).

Seal Externa de Oscilador

61 XTAL2

<> XTAL 1

Figura 1.6.

: Seal de inicializacin del sistema. Un reset interno al sistema se produce cuando se pone el pin RST=RESET a nivel alto durante un cierto tiempo (para ms informacin, vase Apartado 2.7 del Captulo 2).

1 RESET 1

1.4. CARACTERISTICAS DE LAS MEMORIAS EPROM INTEGRADAS EN LOS MICROCONTROLADORES 8752/8751 1.4.1. Introduccin
En la familia 51 se consideran que llevan memoria EPROM aquellos microcontroladores que en su nmero de identificacin incorporan la cifra 7 en el lugar que ocupan las centenas. As, en nuestros dispositivos objeto de estudio el 8752 y el 87.5 1 llevan memoria EPROM de 8Kbytes y 4Kbytes, respectivamente. . El 875 1 se programa a una tensin VPP=21V, con unos pulsos de 50 milisegundos, por byte a travs de la lnea PROG. Considerando que el 875 1 tiene 4Kbytes de memoria, resulta en total un tiempo de programacin de 4 minutos, y el 8752 de 8 minutos, puesto que tiene una memoria EPROM con el doble de capacidad. El microcontrolador 8752BH y el 87C51 usan el algoritmo de programacin QUICK-PULSE, que permite programar estos dispositivos con una tensin de VPP=12.75 V y una serie de 25 pulsos de 100 microsegundos por cada byte programado por la lnea PROG. Esto implica un tiempo de programacin total de 26 segundos, aproximadamente, para el 8752BH (8K) y de 13 segundos para 87C5 1 (4K).

10

Introduccin a los Microcontroladores

1.4.2.

Programacin de la EPROM

La Figura 1.7 muestra el montaje para programar las EPROMS de los modelos de Microcontroladores 8752/875 1 indicados en el apartado anterior.

Direcciones

vcc -l
PO EA4 RST XTALZ 6752 ALE t ZQVPP ALE/PROG Lineas de Configuracion (Ver Tabla 1.3) PSEN -

4 - 6 MHzi XTAL 1 VSS

-l-i____ -

Figura 1.7

:&Las operaciones que han de efectuarse son las siguientes: Aplicar una seal de reloj entre 4 y 6 MHz a los pines XTALI y XTAL2. Direccionar las posmem* de la EPROM donde va a ser grabada la informacin. Para ello se utilizan el Puerto PI y los pines P2.0 a P2.4 del Puerto P2. 9 :Aplicar a los pines de control los niveles de tensin indicados en la Tabla 1.4. ?? %kponer la informacin a grabar en el Puerto PO. ?? Enviar los pulsos de programacin a travs del pin ALE/PROG. ?? Aplicar al pin EA/Vpp una tensin que oscila entre +5v y la tensin de prqgramacin VPP (Tabla 1.4).
?? ??

* Posmem se refiere, de una forma resumida, a posicin/es

de memoria.

La familia 51

ll

Tabla 1.4.

Blts cerrojo (LBx)


NOTAS: 1 = Pin a nivel alto. 0 = Pin a nivel bajo. VPP = +12,75v f 0,25v. * ALE/PROG se pone a nivel bajo durante 100 ps 25 veces (25 pulsos).

En la Figura 1.8 se representan los cronogramas de las operaciones descritas en la programacin y los de la verificacin que se estudian a continuacin.

PROGRAMACION Pl.0-P1.7 P2.0-P2.4

VERIFICACION

PUERTO 0

-\DATA OUT

ALE/PROG

EA/vpp

Figura 1.8.

12 1.4.3.

Introduccin a los Microcontroladores

Verificacin de los Datos Programados

Siempre que el sistema de proteccin de lectura de la memoria EPROM no haya sido activado, el programa grabado en la EPROM podr ser ledo con diversos propsitos, como puede ser la verificacin del programa durante o despus de la programacin. En la Figura 1.9 se muestra el esquema de conexionado para esta operacin.

l
Direcciones PO EA Nivel Alto ,-, 4 - 6 MHzU A XTALl VSS b RST XTAL2 6752 ALE P2.6 P2.7 P3.6 P3.7 ___ PSEN 4 t 4 4 -T

P
I

+5v
RESISTENCIAS 1 OK PULLUPS

Nivel Alto

Lineas de Configuracion (Ver Tabla 1.3)

Figura 1.9.

Las direcciones de localizacin de la informacin en la memoria son aplicadas al puerto 1 (Pl) y pines P2.0 a P2.4 (como en la fase de programacin). Los otros pines sern llevados a los niveles de tensin indicados en la Tabla 1.4. Los contenidos de las direcciones de localizacin salen por el Puerto 0 (es necesario colocar resistencias pull-ups a la salida de estas lneas). En la Figura 1.8 se dibuja el cronograma correspondiente a la operacin de verificacin.

Si la cadena de encriptacin ha sido programada y los bits cerrojo no estn programados, los datos presentes en el Puerto 0 (PO) sern datos wriptografiadow segn la operacin lgica XNOR, entre los cdigos de datos y la cadena de encriptacin. El usuario debe conocer la cadena de encriptacin para desencriptar los datos, durante la operacin de verificacin. A este aspecto se refieren los siguientes apartados.

La familia 51

13

1.4.4.

Sistemas de proteccin de la informacin en la EPROM

Para proteger el programa grabado en la EPROM contra el intrusismo se han establecido dos niveles de proteccin consistentes, el primero, en una cadena de encriptacin (encryption array) y, el segundo, en dos bits cerrojo (lock bits). La siguiente descripcin es aplicable al 8752/875 1. Se dispone de la misma opcin para el 8052/805 1, pero programada en fbrica. W Nivel 1 de proteccin: Cadena de encriptacin

Dentro de la memoria EPROM hay 32 bytes que forman la cadena de encriptacin, que inicialmente est desprogramado. Cada vez que un byte es direccionado durante la verificacin, se utilizan 5 lneas de direccin para seleccionar un byte de la cadena de encriptacin. Este byte es sometido a la operacin lgica XNOR con el cdigo byte de informacin creando un byte encriptado. Si la cadena de encriptacin est desprogramada (todos los bits a UNO), al efectuar la operacin XNOR con el dato ste no resultar modificado y podr ser ledo fcilmente.
?

Nivel 2 de proteccin: Bits cerrojo

Tambin en el chip hay dos bits cerrojo que pueden ser programados (P) o desprogramados (D) para obtener los resultados que se indican en la siguiente tabla de caractersticas (Tabla 1.5).
Tabla 1.5. D
D I \ P P D P < Funcionamiento sin proteccin. < No se permite acceder externamente a los cdigos de la memoria de programa interno. < Adems no permite ser programada. < Externamente no puede accederse a la informacin de la memoria interna de programas. -C No permite ser programada. < Adems no permite la verificacin del programa.

Al borrar la EPROM tambin se borra la cadena de encriptacin y los bits cerrojo, lo que permite al usuario una nueva reprogramacin. Cuando se programa el bit cerrojo 1 el nivel lgico en el pin i% es muestreado y latcheado durante el RESET. Si el microcontrolador se pone a tensin sin RESET, el latch inicializa un valor aleatorio y mantiene dicho valor hasta que la seal reset sea activada. Es necesario que el valor latcheado de EA est de acuerdo con el nivel lgico externo de ese pin, para que el dispositivo funcione normalmente.

14 1.45

Introduccin a los Microcontroladores

Borrado de la informacin en la EPROM

El borrado de la EPROM se produce cuando el microcontrolador es expuesto a una luz con una longitud de onda corta entre 2.000 y 4.000 Angstroms. La exposicin a la luz del sol y a la luz artificial de un tubo fluorescente, que tienen longitudes de onda dentro de este rango, durante un tiempo prolongado (alrededor de una semana para la luz del sol o tres aos a un nivel bajo de luz fluorescente) pueden causar el borrado accidental de la memoria EPROM. Se recomienda que se coloque una etiqueta opaca en la ventana que, al mismo tiempo que protege de la luz, sirva para identificar el programa, la versin y la fecha de su grabacin. Para proceder al borrado de la EPROM, por parte del usuario, se recomienda su exposicin a la luz de una lmpara ultravioleta (2.537 Angstroms) de 12.000 uW/cm2, durante 20 o 30 minutos, a una distancia de la ventana de la EPROM de 2 a 3 centmetros. El borrado de la EPROM deja la cadena de bits a UNO.

Presentar distintos modelos de aplicaciones para que el estudiante elija el microcontrolador ptimo. As en una aplicacin para implementar en 50 unidades de fabricacin, 25Kbytes de programa y 25 bytes de RAM (variables que se utilizan) y sin limitaciones de consumo de energa, jsera rentable utilizar el Microcontrolador 805 l? Justificar la respuesta. 2. Observar la Figura 1.2 ;.El registro T2CON pertenece al Microcon~rolador 805 l? Justificar la respuesta. 3. Si el 8052 tiene seis fuentes de interrupcin y el 805 1 slo cinco, jcul es la que le falta a este ltimo? 4. A la vista del patillaje de los microcontroladores 8052 y 805 1 de la Figura 1.3, iqu diferencias se observan? 5. En la Figura 1.4 se ve la estructura de los puertos de EJS. El Puerto 0 es uno de los ms complejos, puesto que acta como bus de datos y direcciones, adems de puerto de E/S. Explicar, desde el punto de vista electrnico, el funcionamiento.

Analizar segn los siguientes modos de trabajo: a) Lectura como bus de datos. b) Lectura como puerto de entrada. c) Escritura como bus de datos. d) Escritura como bus de direcciones. e) Escritura como puerto de entrada. 6. Explicar las diferencias de las seales ALE, PSEN y EA. 7. iPor qu se necesita una seal de reloj entre 4 y 6 MHz para programar la EPROM? 8. Explicar el funcionamiento de cada uno de los puertos en las operaciones de grabacin y verificacin de la memoria EPROM del microcontrolador. 9. iEntre qu valores de tensin oscila el pin EA/Vpp en la operacin de programacin de la EPROM? 10. Sealar los dos niveles de proteccin de la informacin en la EPROM del microcontrolador y en qu consiste dicha proteccin.

CAPITULO

Organizacin de la memoria en los Microcontroladores

8052,8051
2.1. MEMORIA DE PROGRAMAS Y DATOS
Los Microcontroladores 8052/805 1 * tienen separados los espacios de direcciones para memoria de programas y memoria de datos (Figura 2.1).
MEMORIA DE PROGRAMA (SOLO DE LECTURA) ---------------_ MEMORIA DE DATOS @~TURA/ESCRITURA) FFFFH. I l I I l l , l / 7 1 l

EXTERNA-

PSEN

-RD WR

Figura 2.1.

* En este captulo el lector debe saber que todo lo que se diga para el 8052 es aplicable para el 805 1 considerando la limitacin de la memoria tanto de programas como de datos, como ya se indic en el Captulo 1.

15

16

Introduccin a los Microcontroladores

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 805 1 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 1 FFFH de la memoria interna y de la 2000H a la FFFFH de la memoria externa y en el 805 1 busca en la memoria interna de la posmem OOOH hasta OFFFH 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. 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 (reud) 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.

I
/

CPU

I
l

CPU

l
I

PROGRAMA

DATOS

PROGRAMA Y DATOS

MEMORIA SEGREGADA

MEMORIA
Figura 2.2.

COMBINADA

Organizacin de la memoria en los Mio ocontroladores 8052/8051

17

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) 0 completamente externa.

FFFF

MEM.

EXTERNA o bien _____)

64K BYTES MEM. EXTERNA

MEM. INTERNA 0000

Figura 2.3. 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. Como se puede observar en la Figura 2.4, el intervalo fsico 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. 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 (Externa1 Access), poniendo este pin a VCC o a VSS respectivamente. La configuracin del hard para que el 8052/805 1, como microprocesador, utilice como memoria de programa la memoria externa, se muestra en la Figura 2.5. Se observa en la figura que las 16 lneas de direccin corresponden al Puerto 0 y al Puerto 2, que estn dedicados al bus de direcciones; aun ms, el Puerto PO 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 PO emite el byte bajo de la palabra del contador de programa (PCL). Una vez estabilizada la seal sobre PO, la seal ALE (Address Latch Enable) introduce esta direccin dentro del dispositivo latch 74LS373, que pasa a apuntar la

18

Introduccin a los Microcontroladores

Flag que se activan

,lFFFH (OFFFH para el 8051 (En el caso de utilizar memoria interna) I I I I


I I

1 TF2 Y EXFZ RI Y TI TFl IEl TFO IE RESET

+002BH 0023H __. 00lBH .0013H

del TIMER 2 PUERTO SERIE

t<. T I M E R 1 __. EXTERIOR 1

OOOBH TIMER 0 0003H .__ OOOOH EXTERIOR 0

Figura 2.4.

r
_ EPROM
INSTR INSTR.

8052/5 1 ALE P2 P3 PSEN b OE

? \

DIREC.

EA-l
Figura 2.5.

direccin en la memoria externa de programas. Al mismo tiempo que el microcontrolador emite el PCL por PO, la parte alta del contador de programa (PCH) se emite por P2. Entonces PSEN autoriza la lectura al microcontrolador del cdigo de instruccin a travs del Puerto PO. En la Figura 2.6(A), aparece el cronograma de esta operacin.

Organizacin

de la memoria en los Microcontroladores

8052/8051

19

CICLO MAQUINA: Un ciclo mquina, para esta familia de microcontroladores, consiste en una secuencia de 6 estados, nombrados Sl a S6. Cada estado est formado por dos perodos de la seal de reloj que se denominan fases (fase 1 y fase 2). Teniendo en cuenta que cada ciclo mquina tiene 12 perodos (6 estados por 2 fases), si oscilador genera una seal de reloj de una frecuencia de 12 MHz, la duracin del ciclo mquina ser de 1 usegundo.

Sl PI P2 Pl

s2 P2

s3 I Pl P 2

s4 I Pl P2

S5 I PI P 2

S6 I Pl P2 I

CICLO MAQUINA

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 y utiliza, como se ver en el siguiente apartado, 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. Observar 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 PO y P2, y las seales ALE y PSEN. La seal ALE se utiliza para latchean> 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 a la memoria de datos externa para tomar un dato.
* Ciclo de bus, en este contexto, es el tiempo utilizado en direccionar la posmem, activar la seal de lectura y depositar el dato en el bus.

20

Introduccin

los

Microcontroladores

CICLO MAQUINA SllSZlS3 IS IS IS Sl ALE PSEN RD p2 PO


PCH OUTX

CICLO MAQUINA IS2lS3 IS IS5lS6

I
I
; PCH OUT x PCH OUT

I
I
I I P C H OUT

I
I
I IPCH OUT

I I
PCH fXJT

A) Busqueda

en la Memoria de Programa Externa

CICLO MAQUINA 1
SllS2lS3 IS IS5lS6

CICLO MAQUINA 2 Sl
IS2lS3 IS IS5lS6

ALE PSEN -Fm P2


PCH OUT

I I
I PCH OUT PCH OUT

I
1 PCH OUT

I
fCH OUT

I
IN
PCL valido

IN ADDR!valido

PCL valido

B) Busqueda en la Memoria de Programas y en la memoria de Datos (Instruccion MOVX). Figura 2.6.

El siguiente apartado complementa a ste refirindose a la memoria de datos.

Organizacin de la memoria en los Microcontroladores 8052/8051

21

2.3. MEMORIA DE DATOS


El 8052/805 1 puede direccionar hasta 64 Kbytes de memoria de datos externa. (La instruccin MOVX se utiliza para acceder a los datos de la memoria externa.) La Figura 2.7 muestra la configuracin para acceder a 2 Kbytes de memoria de datos externa. En este caso la CPU tiene el programa interno en la ROM. El Puerto 0 multiplexa en el tiempo direcciones y datos en la RAM, y tres lneas del Puerto 2,completan el direccionamiento de 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.

8052/51 con ROM interna , t

RAM

I
PZ
Pagina .OE

DIREC.

'WE E/S
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 funcinde la cantidad de memoria a direccionar (concepto de memoria 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 805 1 incluido el rea de los registros especiales (SFR), combinando los bloques de memoria de 128 bytes con el direccionamiento. En el siguiente captulo se explicarn los distintos tipos de direccionamiento.

22

Introduccin a los Microcontrolacfores

-FF FF 64K BYTES y tambien & solo DIRECTO MEM. EXTERNA

solo

1 6052

FFFF

80 7F

Figura 2.8.

A continuacin, se va a analizar las tres reas de memoria interna: Area de direccionamiento slo indirecto (para el 8052). Area de direccionamiento indirecto y directo. ?? Area 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 9OH,
#ABH

escribe ABH en la localizacin 90H de la memoria RAM de datos y concretamente (por utilizar direccionamiento inmediato) en el Puerto I (90H = Pl (portl)) del rea SFR. En cambio, las instrucciones (en un 8052):
MOV MO+ RO, #90H @RO, #ABH

* Aunque se va a hacer referencia a las instrucciones de los Microcontroladores 8052/805 1, para aclarar algunos conceptos, somos conscientes de la dificultad de comprender sin conocer el conjunto de instrucciones y los modos de direccionamiento; pero se puede confiar en conseguir en esta primera lectura una aproximacin a la realidad y en posteriores lecturas, una vez estudiado el captulo que hace referencia al software, un conocimiento amplio de lo que se intenta explicar.

Organizacin de la memoria en los Microcontroladores 8O52/8051

23

escriben ABH en la posmen 90H de la memoria de datos 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 (PI) en el SFR y ABH en la posmem 90H (Figura 2.9).

FF

FF Pl j AB 1

80 AREA 80 S.F.R.

Figura 2.9.

Naturalmente que si ha intentado hacer este ejercicio con un Microcontrolador 805 1, no lo habr conseguido, pues la posmem 90H con direccionamiento indirecto no existe. Puede utilizar una posmem comprendida entre OO y 7FH que s admite el direccionamiento indirecto en el 805 1.

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

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

Los registros se localizan desde la direccin OOH a 1FH (32 bytes). Despus de la operacin de inicializacin del microcontrolador, aplicando un nivel alto al pin 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).

24

Introduccin a los Microcontroladores

------j1 AREA SCRATCH PAD / I I I 30 28 20 18 10 08 00


L

2F 27 BANCO 3 BANCO BANCO BANCO 0 2 1 4 17 OF

SEGMENTO DIRECCIONABLE BIT A BIT

BANCO DE REGISTROS

Figura 2.10. El RESET inicializa el Stack Poder (SP) en la posmen 07H y se incrementa inmediatamente a la posmem 08H, que es el primer registro RO 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.

Subrea 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 (OOH a 7FH). Los bits se pueden referir de dos formas diferentes, bien por sus direcciones (bits OOH 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 2 1 .O a 2 1.7, etc. Cada uno de los 16 bytes de este segmento puede ser tambin direccionado como byte.

H Subrea Scratch Pad La memoria scrutch pad se entiende como la memoria de un block de notas de rpido acceso, pero de escasa capacidad. Ocupa las posmem 30H a 7FH. Es la memoria de trabajo (RAM) del usuario.

Organizacin

de

la

memoria

en

los

Microcontroladores 8052/8051

25

2.6.

AREA DE REGISTROS 0 FUNCIONES ESPECIALES (8052/8051)

La Tabla 2.1 muestra los registros especiales que utiliza el 8052/805 1, 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.

L, ~~~~~,,;,,

*ACC *B *psw SP DPTR DPL DPH *Po *PI *P2 *P3 *IP *IE TMOD *TCON *+T2CON TH0 TL0 TH1 TL1 +TH2 +TL2 +RCAP2H +RCAP2L *SCON SBUF PCON

Accumulator B Register Program Status Word Stack Pointer Data Pointer 2 Bytes Low Byte High Byte Port 0 Port 1 Port 2 Port 3 Interrupt Priority Control Interrupt Enable Control Timer/Counter Mode Control Timer/Counter Control Timer/Counter 2 Control Timer/Counter 0 High Byte Timer/Counter 0 Low Byte Timer/Counter 1 High Byte Timer/Counter 1 Low Byte Timer/Counter 2 High Byte Timer/Counter 2 Low Byte T/C 2 Capture Reg. High Byte T/C 2 Capture Reg. Low Byte Serial Control Serial Data Buffer Power Control

Acumulador Registro B Palabra de Estado Programa Puntero de la memoria de PILA Puntero de datos Byte bajo Byte alto Puerto 0 Puerto 1 Puerto 2 Puerto 3 Control Prioridad Interrupciones Control Autorizacin Interrupciones Control Modo Temporizador/Contador Control Temporizador/Contador Control Temporizador/Contador 2 Byte Alto Temp./Contador 0 Byte Bajo Temp./Contador 0 Byte Alto Temp./Contador 1 Byte Bajo Temp./Contador 1 Byte Alto Temp./Contador 2 Byte Bajo Temp./Contador 2 Byte Alto Reg. Captura T/C 2 Byte Bajo Reg. Captura T/C 2 Control Comunicaciones Serie Buffer Datos Comun. Serie Control Consumo de Potencia

~~~~~ OEOH OFOH ODOH 81H 82H 83H 80H 90H OAOH OBOH OB8H OA8H 89H 88H OC8H 8CH 8AH 8DH .8BH OCDH OCCH OCBH OCAH 98H 99H 87H

* = Direccionable bit a bit. + = 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).

ACC El Acumulador:frecuencia de intervencin, elgeneralimportante. En la prograEs un registro de propsito de los Microcontroladores 8052/805 1 y, por su ms macin de aplicaciones en lenguaje ensamblador se har referencia a l como REGISTRO A.

26 B

Introduccin a los Microcontroladores

l Registro B: Est especializado en las operaciones de multiplicacin y divisin, no obstante puede ser utilizado como un registro de propsito general. c

Program Status Word: Contiene informacin de estado de la CPU en cada ciclo de instruccin. El Cuadro 2.1 muestra el formato de la palabra de estado. Cuadro 2.1. PSW
b C
BIT bo

PSW EI

bb AC

b5 FO

bq RS,

b3 RSo

bz OV

b, -

bo P

NOMBRE Y COMENTARIO

: Flag de paridad del Acumulador (ACC). - Si P = 1 entonces el nmero de unos del ACC es impar. - Si P = 0 entonces el nmero de unos del ACC es par. Flag disponible y definible por el usuario. : Flag de Overflow (sobrepasamiento) (ver Apndice B). : Seleccin del banco de registros.

b,

: Flag 0. De propsito general. Definible por el usuario. bb b7

? ?

: Flag Acarreo Auxiliar. Operaciones en BCD. : Flag de Acarreo. (Ver Apndice B).

: Stack Pointer. Es un registro de 8 bits. Iniciahzado el microcontrolador por la operacin Reset, por defecto el SP se carga con la direccin 07H (SP t 07). Al ejecutar la primera instruccin PUSH o CALL el SP se carga con 08H, apuntando a dicha posicin de memoria (Figura 2.11).

Organizacin de la memoria en los Microcontroladores 8052/8051

27

FF

S.F.R.

00 7F

PILA

BANCO REG. 0

08 0 7 +TA~K POINTERI 00

Figura

2.11.

LDPL y DPH 1 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. 1 LPO,PI,P2yP3 Son los latchs de los Puertos PO, Pl, P2 y P3.

1SBUF 1 Serial Data Buffer: Son dos registros buffer aparentemente separados, pero fisicamente el mismo, buffer de transmisin y bu& de recepcin. Al escribir un dato en SBUF, el mismo comienza a transmitirse por la lnea correspondiente del puerto serie acompasado por la seal de reloj. En el modo recepcin el dato que ingresa por la lnea.de entrada del puerto serie se registra en el bu@& receptor (SBUF). El Captulo 12 trata en exclusiva este tema. Timer Registers: Son pares de registros de 16 bits, que pueden actuar como temporizadores o contadores. Posteriormente se estudiar la forma de trabajar con ellos en el Captulo 9. Registers: Este par de registros actan como registros de captura del Timer 2, cuando ste trabaja en modo captura. En este modo, THO-TLO, TH 1 -TL 1, TH2-TL2

1-1Capture

28

Introduccin a los Microcontroladores

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. 1PCON 1 Power Control Register: Para aplicaciones en donde la caracterstica de consumo sea cltica, 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. Todo esto se estudiar ms z elante. 1TCON 1 Timer/Counter Control Register: Este es un registro que controla fundamentalmente el modo de operacin de los Timen 0 y 1 en relacin con las interrupciones y los flancos de activacin de las mismas. 1TMOD 1 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. 1 T2COM 1 Timer/Counter 2 Control Register: Lo mismo que TCON y TMOD, pero aplicado al Timer 2. IE L-l

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. IP puede El Interrupt oPriority Register: Cada interrupcin los bitsprogramarse individualmente en el nivel 1 2 de prioridad, poniendo a 1 o a 0 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). 1 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 posmem 80H, 88H, 90H, 98H, . . . . F8H.

1SCON

Organizacin de la memoria en los Microcontroladores 3052/8051

29

Tabla 2.2. 8 Bytes


F8 FO E8 EO D8 DO C8 co B8 BO A8 AO 98 90 88 80 FF Fl EF E7 DF D7 CF c7 BF B7 AF A7 9F 97 8F 81

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. Un RESET se alcanza cuando se mantiene en el pin RST=RESET, 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 3 1 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.

30

Introduccin a los Microcontroladores

IC 1 2

PERIODOS

0Sc.1

/ 55 / S 1 Sl 1S2 / 53 / S4 155 1S6 1 Sl 1 S2 1S3 1S4 1S5 1S6 1 Sl 1S2 1 S3 1S4 1

RST: Muestky Pin R S T Muestrea

l L SENAL Pin R S T RESET INTERNO

ALE:

PSEN: I PO: I l Lc 11 NOTA: G Significa que puede cambiar de Nivel Bajo a Nivel Alto l PERIODOS OXl

19 PERIODOS

0SC.d

Figura 2.12.

Tabla 2.3.
TCON PC ACC B PSW SP DPTR PO-P3 IP (805 1) IP (8052) IE (805 1) IE (8052) TMOD OOOOH OOH OOH OOH 07H OOOH FFH XXXOOOOOB XXOOOOOOB OXXOOOOOB OXOOOOOOB OOH TH0 TL0 TH1 TL1 TH2 (8052) TL2 (8052) RCAP2H (8052) RCAP2L (8052) SCON SBUF PCON (HMOS) PCON (CHMOS) OOH OOH OOH OOH OOH OOH OOH OOH OOH OOH Indeterminado OXXXXXXXB OXXXOOOOB

Organizacin de la memoria en los Microcontroladores

8052/8051

31

El RESET automtico del microcontrolador se produce al aplicar la tensin de alimentacin VCC al pin RESET a travs de un condensador de 10 microfaradios y una resistencia de 8K2 ohmios, como indica la Figura 2.13, procurando que el tiempo del flanco de subida de la alimentacin no exceda de un milisegundo y el comienzo de los impulsos del reloj no exceda de 10 milisegundos.

Figura 2.13.

En el siguiente captulo se comenzar el estudio de las instrucciones de los Microcontroladores 8052/805 1, dejando para captulos posteriores otros aspectos especficos del hardware.

1. iQu se entiende por memoria combinada y por memoria segregada? Explicar el procedimiento que se utiliza para convertir la memoria segregada en combinada. 2. Si el programa que tuviera que ejecutar el Microcontrolador 8752 ocupara una ca-

pacidad superior a los 8K, por ejemplo 15K, iqu modificacin realizara en el sistema? 3. Explicar estado a estado los cronogramas mostrados en la Figura 2.6. 4. Si el sistema necesitara una memoria
RAM de 4 Kbytes para soportar la apli-

32

Introduccin

los

Microcontroladores qu modificacin hara para trabajar con el banco 3.


8.

cacin, iqu configuracin establecera a la vista del diagrama en bloques de la Figura 2.7? Dibujar el esquema.
5.

Puede observarse que no hay indicador o


flag de nmero negativo en el registro de

Identificar las distintas partes de que consta la memoria de datos interna e indicar la misin que cumple en el sistema. Indicar en qu zona o zonas, segn la Figura 2.8, se escribe el dato implcito en las siguientes instrucciones:
a) MOV25H,#46H b)MOVRO,#25Hy MOV@RO,#46H C ) MOV 85H,#3AH 6) MOVR1,#85HyMOV@R1,#3AH

estado PSW. iCmo podra sealizarse? 9. Indicar el rea de la memoria de PILA inicializada por defecto en los Microcontroladores 80521805 1. 10. Explicar la funcin de la seal de RESET e indicar cmo inicializa los registros:
PC ACC B PSW SP DPTR PO-P3 = = = = = = =

6.

7.

iCuntos bancos de registros tienen los Microcontroladores 8052 y 805 l? Indicar cul es el banco de registros por defecto y

CAPITULO

Programacin de los Microcontroladores 8052/8051(I)

3.1. INTRODUCCION
Todos los modelos de lafamilia ejecutan el mismo set de instrucciones. Estas instruc51 ciones 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 tamao de un bit. En esta breve introduccin se estudiarn los modos de direccionamiento y el set de instrucciones agrupadas por especialidades de esta manera: 0 Instrucciones aritmticas. 0 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. . 33

34

Introduccin a l o s M i c r o c o n t r o l o d o r e s

--

--=--xi

Ejemplo:
ADD A,3BH ;

es decir, suma (ADD) el contenido del acumulador con el contenido de la posicin de memoria (3B): A t (A) + (3B)

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

?? 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 RO y Rl 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:
A D D A,@RO ;

As, si (RO)=3BH la operacin ser: A t(A) + (3B) Igual que en el ejemplo anterior.

(@) es el identificador del direccionamiento indirecto. PI Direccionamiento por registro . Los Microcontroladores 8052/805 1, 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 RO al R7 (vase Apartado 2.5). El propio cdigo de operacin de la instruccibn especifica con qu registro se opera; es decir, cuando la instruccin es ejecutada se accede a uno de los 8 registros del banco seleccionado. Ejemplo:
MOV Rn,A

Bytes: 1 Ciclos: 1 1 1 1 1 1 r r r

cdigo:

operacin: (Rn) t (A) Dependiendo del registro implicado el cdigo de instruccin tomar distintos valores. As:

de

MOV R, A i--> 1111 1lllB = FFH Otro ejemplo: Bytes: 2


MOVRn,#data

Ciclos: 1 1 rrr

cdigo:

0 1 1 1

operacin: (Rn) t #data H 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. Ejemplo:
INC A ;

Incrementa el contenido del acumulador: A t (A) + 1 Incrementa puntero de datos: DPTR t (DPTR) + 1 inmediato

INC DPTR ;

?? Direccionamiento

Al cdigo de operacin le sigue una constante en la memoria de programas. Ejemplo.


MOV A, #255 ;

Carga en el acumulador el nmero decimal 255.

Generalmente se expresan en hexadecimal:


MOV A,#FFH

o en binario:
MOV A,#11111111B

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

36

Introduccin a los Microcontroladores

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 los saltos de instruccin. En este caso la direccin de destino del salto se computa 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 I 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 o ms ciclos mquina, en funcin de: a) El cdigo de operacin Por ejemplo, la instruccin INC A (Figura 3.1A) 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.lC) 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 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 I 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.1B.

3.4. TIPOS DE INSTRUCCIONES El set de instrucciones del 8052/805 1 se puede dividir segn las especialidades: 0 Instrucciones aritmticas. 0 Instrucciones lgicas. ?? Instrucciones de transferencia de datos.

Programacin de los Microcontroladores 8052/8051 (1)

37

ADDR. /
V

DATOS

Acceso a la Memoria Externa (D) 1 Byte. 2 Ciclos Maquina. Eje.: ,MOVX A,@Ri

Figura 3.1.

38
?? ??

Introduccin a los Microcontroladores

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. En este captulo y en el siguiente se aborda el estudio de las instrucciones por especialidades, aconsejando se haga una lectura rpida y global de estos dos captulos. Al Iinal del Captulo 4 se encontrar la tabla 4.5 en la que aparece todo el ???? de instrucciones, ll 1 en total, de la familia 51; en cambio, en las tablas simplificadas que sirven de estudio en los siguientes apartados se contabilizan 69 instrucciones. La razn de esta diferencia est en la propia tabla y justamente en la columna encabezada por Modos de direccionamiento. Esto quiere decir que segn los direccionamientos una instruccin puede tener hasta cuatro cdigos de operacin y operandos distintos. Esta situacin se resuelve utilizando la palabra <byte>, que tomar el siguiente significado (Tabla 3.1):
Tabla 3.1.

<byte> <byte> <bvte> <bvte>

direct @Ri Ri #data

Direccionamiento directo. Se refiere a una posmem. Direccionamiento indirecto a travs del registro RO y Rl . Direccionamiento por registro. [ Direccionamiento inmediato. Constante de 8 o 16 bits.
I _ -

La Tabla 4.5, a la que se haca referencia anteriormente, presenta los mismos smbolos para identificar, en el formato de la instruccin, los distintos operandos segn el modo de direccionamiento. En las tablas simplificadas tambin se indica el posibleflag (C=Carry, OV=Overflow, AC=Auxiliar Carry) afectado por la instruccin segn el siguiente cdigo: No es afectado . . . . . . . . . . . . S es afectado . . . . . . . . . . . . . Afectado ponindolo a . . . . . Afectado ponindolo a . . . . . EI 1 X 1(lo pone a 1 0 a 0) 0 0 1 r - l

Programacin de los Microcontroladores 8052/8051 (f,J

39

En algunas tablas no son afectados IosJlags, y esto se indica con un mensaje en la parte inferior de las mismas. Los tiempos de ejecucin se han tomado utilizando como referencia una frecuencia de reloj de 12 MHz.

3.5. INSTRUCCIONES, ARITMETICAS


En la Tabla 3.2, se muestra el men de las instrucciones aritmticas. Se indican en la tabla los modos de direccionamiento que permite la instruccin y losflugs afectados. Los tiempos de ejecucin que se indican en la tabla estn evaluados sobre una frecuencia de reloj de 12 MHz.
Tabla 3.2.

MUL AB DIV AB DA A

B:A = B x A A = int [A/B] B = Mod [A/B]

ACC and B only ACC and B only

4 4

0 0

x x

Decimal Adjust

Accumulator

only

x cl= s;

?? ???

Al leer dicha tabla se observa que: Se puede incrementar o decrementar un byte en la memoria de datos interna sin el concurso del acumulador. ? Una de las instrucciones INC opera sobre los 16 bits del puntero de datos (DPTR). ?? La instruccin MUL AB multiplica el contenido del acumulador con el dato situado en el registro B y el producto, en formato 16 bits, aparece en los registros Acumulador y B (sobreescribe a los operandos). ?? La instruccin DIV AB divide el contenido del acumulador con el dato sito en B, apareciendo el resultado, cociente, en el acumulador y el resto en el registro B.
??

40

Introduccin a los Microcontroladores

Ejemplo.
A=5FH
DIVAB

B=OAH 0101 1111 1


---_-------

0101
??

1001 +.A B

La instruccin DA A ajusta el resultado en binario puro producido por las instrucciones ADD y ADDC a formato BCD. Esta instruccin no convierte el contenido del acumulador en BCD, sino que hace el ajuste BCD de la suma (resultado), por lo tanto, esta instruccin debe ir inmediatamente despus de la instruccin ADD o ADDC.

Esta es, de forma simplificada, la operacin que realiza:


[
KA3-0)

> 91 . OR . [(AC) = ll ]

entonces
@3-o)

643-o)

y si entonces

KA7-4)

> 91 *OR . [(Cj = ll ]

(A7-4)

@7-4)

3.6. INSTRUCCIONES LOGICAS


La Tabla 3.3 muestra la lista de instrucciones lgicas y los modos de direccionamiento que permiten as como 1osflag.r afectados. La duracin de ejecucin de 1 o 2 microsegundos es sobre la base de una frecuencia de trabajo de 12 MHz.
??

Las primeras instrucciones corresponden a las operaciones AND, OR, EXOR y NOT. <byte> = (3A) = 1001 0011

Ejemplo:
ANL <byte>,#3F

#3F=OOll 1111 00010011 = 13H

(<byte> se refiere, en este caso, a una posicin de memoria.)

Programacin de los Microcontroladores 8052/8051 (1)

41

Tabla 3.3.

XRL

<byte>, A

tbyte> = <byte> .XOR. A <byte> = <byte> .XOR. #data A=OOH A = .NOT. A Rotate ACC Left 1 bit Rotate Left through Carry Rotate ACC Right 1 bit Fotate Right through Carry Swap Nibbles in A

X X Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only Accumulator only

1 2 1 1 1 1 1 1 1 X X

XRL <byte>, #data CLR A CPL A RL RR A A RLC A RRC A SWAP A

???????? ???????
??

Continuando con el ???? de instrucciones, aparecen instrucciones de manipulacin de la informacin, como las instrucciones de Rotacin y de Intercambio (SWAP). ?? Las instrucciones de Rotacin RL A y RR A desplazan el acumulador 1 bit a la izquierda y derecha, respectivamente, sin afectar al bit de acarreo.

Ejemplo: Rotacin a la izquierda (LejI) (A) = OC5H = 1100 OlOlB (antes de ejecutarla)
RL A

(A) = 8BH = 1000 101 IB (despus) Las instrucciones de Rotacin RLC -4 y RRC A desplazan el contenido del acumulador implicando al bit de acarreo.

??

42
??

Introduccin a los Microcontroladores

La instruccin SWAP A intercambia los nibbles en el acumulador. Generalmente se utiliza en las manipulaciones de nmeros en BCD.

Ejemplo: SWAPA (A) = 3H = 0000 001 1B (antes de la operacin) A c 0011 0000 (despus)

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.
Tabla 3.4.

No son afectados losf2ugs.

?? ???? ?????

??

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 el concurso del acumulador.

Programacin

de

los

Microcontroladores

8052/8051

(1)

43

Ejemplo: Antes de ejecutar la instruccin:


MOV 3AH,3DH

(3A)= 35H ; (3D) = 78H Despus de ejecutarla: (3A) = 78H ; (3D) = 78H

La instruccin MOV DPTR, #data 16 bits, permite transferir datos de 16 bits para inicializar el DPTR (Data Pointer = 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 cdest> 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.1 l), pero puede posicionarse en el rea SCRATCH 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> 0 (SP) c (SP) + 1 0 ((SP)) t <src>
?? ?? ??

POP <dest> <dest> t ((SP)) (SP) t (SP) - 1

??

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:


XCHA,2DH

(A) = 37H y (2D) = 23H Despus de ejecutarla: (A) = 23H y (2D) = 37H Antes de ejecutar la instruccin:

XCHDA,@RO

(RO) = 2DH y (2D) = 37H y (A) = 23H Despus de ejecutarla: (A) = 27H y (2D) = 33H

44 3.7.2.

Introduccin CI /os Microconfroladores

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.
Tabla 3.5.

MOVX A @Ri

No son afectados losflugs.

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 RO o Rl del banco de registros seleccionado), direccionando con 8 bits, o bien utilizar un direccionamiento de 16 bits, usando el 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/805 1 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, @IR1 MOVX @RO, A

Programacin de los Microcontroladores 8052/8051 (1)

45

antes: (Rl) = F3H


F3H MOVX A, @Rl

ejecucin: A t (F3H) despus: (A) = 3AH

85H

antes: (A) = 3AH y (RO) = 85H


MOVX @RO, A Rl RO F3H 85H t Nota: Este ejemplo se ha realizado con el Microcontrolador 8052, en el espacio de memoria RAM interna que se solapa con el rea SFR. Si se refiere al Microcontrolador 805 1, debera ser implementada esta operacin, obligatoriamente, en el espacio de memoria externa.

ejecucin: (RO) c (A) despus: (85H) = 3AH -,

Qu sucedera si se tuvieran que implementar estas instrucciones en la zona de memoria por encima de la direccin 2000H? Es decir: sustituida 85H F3H > > 2085H 20F3H

Se llegara a la conclusin de que no se podran procesar estas instrucciones, contando que los registros RO y Rl 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 OOOOH y FFFFH, sera: sustituida
MOVX A, @Ri MOVX @Ri , A > + ~ovx A, @DPTR ~ovx @DPTR, A

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


MOVDPTR,#datal

con la que se podra acceder a todo el mapa de memoria.

46

Introduccin

los

Microcontroladores

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 el programa de memoria (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.
Tabla 3.6.

A,@A+DPTR

No son afectados losflags.

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 Poirtter (DPTR) establece el puntero de comienzo de la tabla. La lectura es cargada dentro del registro acumulador.

Movc

A,

@A+DPTR

A t ((A) + (DPTR))

La segunda instruccin es similar a la primera, salvo que es el Pogrum Counter (PC) el que acta como indicador de la direccin base de la tabla. PC t (PC) + 1
A + KA) + (PC))

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

Programacin de los Microcontroladores 8052/8051 (1)

47

90H 91H 92H 93H

MOV A, #OlH CALL dire. r u t i n a TABLA:

MOVA,#OlH CALL TABLA -----_---INCA MOVC A,@A+PC RET DATO0 DATO1 DATO2 DATO3 -----

AOH A1 H A2H A3H A4H A5H 1

INC A MOVC A,@A+PC RET 20H 21H 22H

1 1
I

Se pretende acceder inicialmente al DATOl, por esta razn se carga al acumulador con 0 1 H. Se salta a la rutina de tratamiento de la tabla. Ya en la rutina, se incrementa el acumulador, con lo que su valor ser: (N -+ W+l 02H c OlH+ 1 En la instruccin MOVC A,@A+PC el valor del acumulador es 02 y el PC apunta a la instruccin RET, por lo que la suma A2H + 02H = A4H, luego: A c (A4H) p(a)=Z1HI

*tl

Explicar con ejemplos la diferencia entre el direccionamiento directo y el indirecto. 2. iQu limitaciones presenta el direccionamiento indexado en los Microcontroladores 8052/805 l? 3. Explicar, observando la Figura 3.1, el significado de la seal ALE. (Puede recabarse informacin en el Captulo 1 sobre esta seal.) 4. iQu ventajas tiene un s e t de instrucciones orientadas al procesamiento de informacin bit a bit? 5. La columna de la derecha de la Tabla 3.1 seala como tiempo de ejecucin de la instruccin MUL AB 4 microsegundos. Considerando que la frecuencia de reloj es igual a 12 MHz, jcuntos ciclos mquina tiene dicha instruccin? 6, Indicar el orden exacto de las instrucciones para una operacin suma en el for-

mato BCD entre el registro A (ACC) y el registro B. 7. iQu diferencias hay entre las dos primeras instrucciones de la Taela 3.2? ANL A, <byte> ANL <byte>, A 8. Con relacin a las instrucciones PUSH <src> y POP <dest> detallar la operacin que se realiza. En la columna Operacin de la Tabla 3.3, se especifica, de una forma esquematizada con nemnicos, dicha operacin. 9. iQu utilidad tiene la instruccin MOV DPTR, # data 16? 10. iQu instruccin o instrucciones se emplean para inicializar la memoria Pila en el banco de registros nmero 3? ll. iQu diferencias hay entre las instrucciones MOVX A, @DPTR y MOVC A, @A+DPTR?

CAPITULO

Programacin de los Microcontroladores 8052/8051 (II)


4.1. INSTRUCCIONES BOOLEANAS La familia de Microcontroladores 5 1 y concretamente los Microcontroladores 8052/805 1 tienen un procesador booleano incluido en el chip. Estos microcontroladores poseen dos reas que permiten el direccionamiento bit a
Tabla 4.1. 8 Bytes
F8 FO E8 EO D8 DO I C8 co B8 BO A8 AO 98 90 88 80 LRegistros direccionables bit a bit FF F7 EF E7 DF D7 CF c7 BF B7 AF A7 9F 97 8F 87

Programacin de los Microcontroladores 8052/8051

(ll)

49

bit: una corresponde al segmento de RAM interna de direccin comprendida entre la posmem 20 a 2FH, en total 128 bits (Figura 2. lo), y la otra corresponde a la primera columna del SFR que est sealada en la Tabla 4.1, de gran utilidad para el testeo de bits en los registros referidos. El conjunto de instrucciones que permiten este tipo de proceso, tan interesante para las aplicaciones industriales, se encuentra relacionado en la Tabla 4.2.
Tabla 4.2.

????? ? ??? ??
Las instrucciones que aparecen en las tablas son: MOVE, SET, CLEAR, NOT, OR y AND. Se observa cmo en casi todas las instrucciones se hace referencia alJlag Carry (C). Se podra decir que cumple todas las caractersticas que tiene el acumulador en el procesamiento de palabras. ElflasCarry se direcciona directamente dentro de la palabra de estado PSW, en la posicin bit 7. Para mayor informacin vase el Apndice B.
b C b5 bo

FO P s w

50

Introduccin

a los

Microcontroladores

Todos los bits del PSW son direccionables bit a bit, como todos los registros sealados del SFR. Es importante resear la presencia del jlag FO (b5 del PSW) de propsito general, disponible comoflas del usuario. Por qu no utilizarlo como indicador, en las operaciones aritmticas de signo (flas N)? Comentario aparte exige el tratamiento de las instrucciones booleanas de salto. Hay instrucciones que producen el salto cuando el bit direccionado est en estado l, como son las instrucciones JC, JB y JBC; tambin estn las que producen el salto cuando el bit direccionado est puesto a O, como son las instrucciones JNC y JNB. JBC produce el salto si el bit direccionado es l y pone a O este bit, siendo la nica instruccin que detecta y pone a O el bit direccionado. Secuencias de operaciones: JC re1 . (PC) c (PC) + 2 0 Si(C) = 1 entonces (PC) t (PC) + re1 JNC re1 0 (PC) c (PC) + 2 0 Si(C) = 0 entonces (PC) t (PC) f re1

JB bit, re1 : 0 (PC) c (PC) + 3; ?? Si (bit) = 1 entonces (PC) t (PC) + re1

JNB bit, re1 0 (PC) c (PC) + 3; ?? Si (bit) = 0 entonces (PC) t (PC) + re1

JBC bit, re1 0 (PC) t (PC) + 3; ?? Si (bit) = 1 entonces (bit) t 0 (PC) t (PC) + re1

A) Poner el Carry a set (1) si el bit0 del Puerto I es l (PI .O = l), el bit7 del acumulador es l (A.7 = 1) y elflag OV = 0. 0 Programa..
MOV C,Pl.O

; Carga ~1 Carry (C) con el bit0 del Puerto 1. ; c t (P1.0) ; Operacin AND con el Carry (C) y el bit7 ; del acumulador, es decir: C t (C).AND.(A.7) ; Operacin AND con el Carry (C) y el valor ; complementado del flag de Overflow (OV) ; del registro PSW. C t (C).AND./NOT.OV

ANL C,A.7

ANL C,/OV

Programacin de los Microcontroladores 8052/8051 (ll)

B) Realizar la operacin EXOR bit a bit, entre el b0 del Puerto 0 (PO.0) y el bl del Puerto 1 (P 1 . 1 ), depositando el resultado en el b7 del Puerto 2. Para realizar la operacin EXOR, el usuario debe crear un algoritmo, puesto que la instruccin EXOR no la tienen implementada los microcontroladores de la familia 5 1. La operacin a realizar es: P2.7 t PO.0 .EXOR. PI. 1
??

Programa.,
M O V C,PO.O

; Carga el bit0 del Puerto PO en elJlag Carry ; c t (PO.0) ; Si P 1.1 = 0, C contiene el resultado ; correcto y entonces salta; pero si Pl. l=l ; el complemento de C es el resultado correcto. ; Complementa C. ; El contenido del Carry (C) lo almacena en ; el bit7 del Puerto P2. ; P7.2 t (C)

JNB Pl.l,SALTA

CPL c SALTA: MOV P7.2,C

La direccin del destino del salto, en la memoria de programa, viene especificada, cuando el programa est escrito en Ensamblador, por una etiqueta. As, en el ejemplo anterior, la etiqueta (SALTA:) indica el origen y el destino del salto. Una vez ensamblado el programa del usuario, la direccin del salto se convierte en un nmero (OFFSET) del tamao de un byte, que representa una direccin relativa, representada en el sistema de numeracin binario en complemento a dos. El rango del salto (operando de la instruccin) puede estar comprendido entre - 128 y + 127 bytes. Si el operando es positivo, el salto es adelante (direcciones crecientes de memoria); si es negativo, el salto es atrs (direcciones decrecientes de memoria). 4.2. INSTRUCCIONES DE SALTO Un programa es una secuencia de instrucciones que el Contador de Programa (PC) rompe en funcin de: a) Haber concluido la secuencia de instrucciones y salta a otra o recomienza la misma. Este es un Salto Incondicional. b) La Palabra de Estado del Programa (PSW) o del estado de uno o ms bits de la entrada/salida de perifricos. Este es un Salto Condicional.

4.2.1. Instrucciones de salto incondicional


La Tabla 4.3 muestra la lista resumida de los saltos incondicionales. Aunque slo figure la instruccin JMP addr, de hecho hay tres tipos: SJMP, LJMP y AJMP, que difieren en el formato de la direccin de salto.

52

Introduccin a los Microcontroladores

Tabla 4.3.

JMP addr JMP @A + DPTR CALL a d d r RET RETI NOP No son afectados losflags.

Jump to addr Jump to A + DPTR Cal1 subroutine at addr Return from subroutine Return from interrupt No operation

2 2 2 2 2 1

] SJMP re1 1: (Short Juwlp). 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 t (PC) + 2 PC e (PC) + re1

: (Long hmp). 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 t addr16 pziEzq (Absolute Jump). La direccin destino del salto viene dada : por una constante de ll bits. La instruccin tiene 2 bytes, uno para el cdigo de operacin que tambin contiene en s mism 3 de los ll bits de direcciones, y otro byte que contiene los 8 bits bajos de la direccin de destino. El cdigo de la instruccin y el operando es:
al0 a9 a8 0 0 0 0 1 a7 a6 a5 a4 a3 a2 al a0

CODIGO DE OPERACION

OPERANDO

Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 Kbytes referenciado respecto a la siguiente instruccin a la del salto.

PC t (PC) + 2 (PC 10-O) t direccin de la pgina

Programacin

de los Microcontroladores 8052/8051 (ll)

53

En cualquier caso, el programador especifica la direccin de destino, bien como una etiqueta o como una direccin constante de 16 bits, en el programa escrito en lenguaje ensamblador. Este se encarga de darle el destino, en el formato correcto, segn el cdigo de operacin. Si este formato no soporta la distancia del salto, aparecer un mensaje como ste: Destination out of range, que nos previene del error. JMP @A + DPTR

: Se trata de una instruccin de salto indirecto. Suma el byte contenido en el acumulador con los 16 bits del puntero de datos (DPTR) y carga el resultado de la suma en el contador de programa (PC). Esta ser la direccin para la subsiguiente bsqueda de la instruccin. Ejemplo: Se trata de establecer cinco caminos de ramificacin del programa, dependiendo de que el acumulador tome valores comprendidos entre 0 y 4.
??

programa.
MOV DPTR,#TABLA-SALTO

; Se carga el DPTR con la direccin ; de la tabla de saltos. ; Se carga el acumulador con la variable ; ndice (INDI). 0 6 INDI < 4. ; El valor cargado sufre ; un desplazamiento de un bit ; a la izquierda (multiplica por 2 ; el contenido del acumulador). ; Se efecta la suma: PC c (A) + (DPTR) ; y se produce el salto a otra instruccin ; de salto que a su vez saltar al ; subprograma a ejecutar.

MOV A,INDI RL A

JMP @A + DPTR

INDI:

---------__ --------___ ----___---AJMP SALTOO< AJMP SALTOlq AJMP SALT02<

-1

54

Introduccin

los Microcontroladores

La instruccin RL A convierte la variable INDI (valor comprendido entre 0 y 4) en un nmero par de rango entre 0 y 8 para salvar, en el salto, los dos bytes de longitud que tiene cada entrada de salto, AJMP SALTOO, AJMP SALTOl,... - Siguiendo con las instrucciones incondicionales, de la Tabla 4.3, sta muestra la instruccin CALL addr que tiene 2 formatos, LCALL y ACALL, que difieren en la forma en la que la CPU implementa la direccin donde se encuentra la subrutina.
Nota: CALL es el nombre genrico con que el programador se refiere a estas instrucciones de salto, y que se traducen en una llamada (generalmente suelen producirse varias llamadas desde el programa principal, de ah su inters, por el ahorro de memoria para la mquina y de trabajo para el programador) a un subprograma (subrutina), que en s mismo tiene su identidad para realizar una tarea definida.

1LCALL addrl 1: Utiliza un formato de 16 bits para direccionar la subrutina y esa rea de direccionamiento es el mximo de 64 Kbytes de la memoria de programas. Secuencia de operaciones: 0 (PC) t (PC) + 3 0 (SP) t (SP) + 1
?????? ?? ?w7-0)

0 (SP) t (SP) + 1 . ((sp)) +


?? (PclS-8)

(PC) t addrl5-0

: Utiliza un formato de direccionamiento de ll bits, por lo que la subrutina debe estar dentro del rea de los 2 Kbytes, a partir de la siguiente instruccin. Secuencia de operaciones: . (PC) c (PC) + 2 . (SP) t (SP) + 1 . ((W) + (PC,,> . (SP) t (SP) + 1
?? ? ? ?? ?w15-8) ?

1 ACALL addrll 1

1-1

._

_.

Programacin de los Microcontroladores 8052/8051 (ll)

55

Lo mismo que se indic en los saltos incondicionales, el programador cuando trabaja en ensamblador slo debe preocuparse de colocar la etiqueta; el programa ensamblador determinar la longitud del salto y el formato que debe dar al cdigo de instruccin segn la longitud del salto.

: Las subrutinas terminan su ejecucin con la instruccin RET, que es la instruccin que indica la vuelta al programa principal, justo en la direccin de memoria de la instruccin siguiente a la instruccin CALL. Secuencia de operaciones:
?? ???? ? ???? ?? ? ? ? ?

. (SP) t (SP) - 1
?? w7-0)

+ (WN . (SP) t (SP) - 1

Utilizada para retornar de las rutinas del servicio de interrupciones. Las interrupciones se estudian de forma especial en el Captulo 10. Secuencia de operaciones:

1 RETI 1:

(PCIS-8)

+ ((sp)) + KW)

. (SP) t (SP) - 1
?? (PC,-0)

. (SP) t (SP) - 1

4.2.2. Instrucciones de salto condicional


La Tabla 4.4 muestra la lista de las instrucciones de salto condicional. Estas instrucciones son las que van a permitir al microcontrolador tomar decisiones (siguiendo secuencialmente una parte del programa u otra) ante una propuesta binaria, que en el lenguaje coloquial se contesta con una afirmacin o negacin. La propuesta de bifurcacin de la secuencia del programa se halla implcita dentro del cdigo de operacin y es el operando el que seala la direccin del salto en el formato de offset relativo, por lo que la distancia del salto est limitada a - 128 y + 127 bytes referida a la instruccin siguiente a la del salto condicional. Trabajando con el programa ensamblador es suficiente sealar con una etiqueta la direccin del salto o con una constante de 16 bits.

56

Introduccin CI los Microcontroladores

Tabla 4.4

JZ re1 JNZ re1 DJNZ <byte>,rel


I

JumpifA=O Jump if A <> 0 Decrement and jump if not zero Jump if A <> <byte> , Jump if <byte> <> #data

Accumulator Accumulator x
I

only only

2 2 2
I I I

CJNE,A,<byte>,rel CJNE <byte>, # data,rel

X
I x x

2 I 2

X I x I

Nota: En la Tabla 4.4 se seala como posible operando <byte>, pudiendo ser <byte>:
a) b)

El acumulador. Los registros RO a R7 con direccionamiento directo. c) Los registros RO y R 1 con direccionamiento indirecto.

: Salta si es cero y salta si no es cero. Para determinar si cumple las condiciones de las instrucciones JZ y JNZ, la CPU no pasa revista al registro de estado como ocurre en otros micros, sino que inspecciona directamente el registro acumulador, pues este microcontrolador no tiene @ug cero en el registro de estado. Secuencias de operaciones: JZ re1 . (PC) t (PC) + 2 ?? Si (A) = 0 entonces (PC) t (PC) + re1 JNZ re1 0 (PC) t (PC) + 2 ?? Si(A) <> 0 entonces (PC) c (PC) + re1

: Decrementa y salta si no es cero. Esta instruccin est especializada en lazos de control. Para que ejecute un lazo y1 veces se carga un contadon> con y1 y, cada vez que se ejecute el contenido del lazo, el contador decrementa una unidad, saliendo del lazo cuando el contenido del contador sea cero.

Programacin de los Microcontroladores 8052/8051 (llj

57

Secuencias de operaciones: . (PC) t (PC) + 2 ?? (<byte>) t (<byte>) - 1 ?? Si (<byte>) > 0 o (<byte>> < 0 entonces (PC) t (PC) + re1 Ejemplo. Ejecutar el lazo 10 veces.
MOVCONTADOR,#lO LAZO:

-------------------_----_-----_-------_---__----__----_--(findellazo) DJNZ CONTADOR, LAZO

(comienzodellazo) -------------------- ,

+ Instrucciones que se van a ejecutar mientras CONTADOR sea distinto de cero.

CJNE Compara y salta, si es igual. El :dos formatos, segnellaresultado de la comparacin no acumulador o En este caso hay comparacin se haga con el con un operando tipo <byte>, que puede ser:
??

Con direccionamiento indirecto (registros RO y RI).

0 Con direccionamiento directo (registros RO a R7). CASO l.MODELO +CJNEA, <byte>, salto relativo Secuencia de operaciones: . (PC) c (PC) + 3 ?? Si (A) <> (<byte>) entonces (PC) c (PC) + re1 Si (A) < (<byte>) entonces K) + 1 sino

58

Introduccin a los Microcontroladores

Ejemplo: Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del perifrico a travs del Puerto 0 (PO), se corresponda con el valor de la posmem 7FH. LAZO: MOV A, PO __----

------

CJNE A, 7F, LAZO CASO2.:MODELO +CJNE <byte>,#dato, salto relativo

Otra aplicacin de estas instrucciones es la comparacin mayor que y menor que. Si de los dos bytes del campo de operandos el primero es menor que el segundo, entonces el flag CARRY del PSW se pone a uno. Si el primer byte es mayor o igual que el segundo, entonces el @zg CARRY es cero. stos y otros aspectos estn aclarados en el Apndice A.

Secuencia de operaciones: Segn se trate de direccionamiento indirecto (registros RO y Rl (8Ri)) o direccionamiento directo (registros RO y R7 (Rn)) es: CJNE @Ri, #data, re1 . (PC) t (PC) + 3 ?? Si ((Ri)) odata entonces (PC) t (PC) + re1 ?? Si ((Ri)) <data entonces cc> +- 1 sino cc> + 0 CJNE Rn, #data, re1 . (PC) t (PC) + 3 ?? Si (Rn) odata entonces (PC) t (PC) + re1 ?? Si (Rn) <data entonces cc> + 1 sino m+0

Seguidamente, y como resumen, se muestra el set de instrucciones de la familia 51 (Tabla 4.5). Al comienzo de estas tablas se sealan las instrucciones que afectan a 1osJlags del PSW, as como unas notas sobre los smbolos utilizados en estas tablas, y a continuacin todas las instrucciones con todos los tipos de direccionamientos que admiten; por esta razn la lista aparece muy dilatada.

Programacin de los Microcontroladores 8052/8051 (ll)

59

4.3. SET DE INSTRUCCIONES FAMILIA-51


Tabla 4.5. Instrucciones que afectan a los flags: Flag Instruccin ADD ADDC SUBB MUL DIV DA RRC RLC SETB C C x x x 0 0 X X X 1

Flag AC x x x

OV x x x x x

Instruccin CLR C CPL c ANL C, bit ANL C,/bit ORL C, bit ORL C,/bit MOV C, bit CJNE

C
0 X X X X X X X

OV

AC

Notas sobre el simificado de los operandos de las instrucciones que se describen a continuacin: Rn . . . . . . . . . . . . . direct . . . . . . . . . . . Registros RO-R7 del banco de registros seleccionado. Direccin del dato de 8 bits de la memoria interna. Puede ser un dato de la RAM interna (0- 127 para el 805 1 o O-255 para el 8052) o un registro del SFR (por ejemplo, Puerto de E/S, registro de control, registro de estado (128-255). Se refiere a los registros RO y Rl, que permiten el direccionamiento indirecto para acceder a los datos de 8 bits de la RAM interna (80-FFH) solapada con el SFR para el 8052 y (OO-7FH) para el 8052/805 1. Operando constante de 8 bits Operando constante de 16 bits. Direccin destino de 16 bits. Utilizada por las instrucciones de salto LCALL y LJMP para permitir el salto dentro del espacio de 64Kbytes de la memoria de programas. Direccin destino de 11 bits. Utilizada por las instrucciones de salto ACALL y AJMP para permitir el salto dentro de la pgina de 2Kbytes de la memoria de programas a partir del primer byte de la siguiente instruccin. Salto relativo en formato de 8 bits en complemento a 2. Utilizado por la instruccin SJMP y todos los saltos condicionales. El rango del salto (8 bits) est comprendido entre -128 a +127 bytes a partir del primer byte de la siguiente instruccin.

@Ri . . . . . . . . . . . .

#data . . . . . . . . . . #data16 . . . . . . . . addr 16 . . . . . . . . .

addr ll . . . . . . . . .

re1 . . . . . . . . . . . . .

60

Introduccin a los Microcontrolodores

Tabla 4.5. (continuacin) bit . . . . . . . . . . . . . rrr . . . . . . . . . . . . . Direccionamiento directo bit a bit dentro del rea de la memoria RAM interna y de los registros SFR que lo permiten. En la columna de Codificacin indica el registro implicado en la instruccin (Rn). As: Registro r r r 0 0 0 RO 00 1 Rl R2 0 1 0 ================ R7 111 En la columna de Codificacin indica el registro implicado en la instruccin de direccionamiento indirecto (@Ri). As: i 0 1 Registro @RO @Rl

i..............

Tabla 4.6. Instrucciones aritmticas

\DD \DD 1DD 4DD

A,Rn A,direct A,@Ri A,#data

4DDC A,Rn 4DDC A,direct 4DDC A,@Ri ADDC A,#data SUBB A,Rn SLJBB A,direct

SUBB A,@Ri SUBB INC A,#data A

Add register to Accumulator Add direct byte to Accumulator Add indirect RAM to Accumtdator Add immediate data to Accumulator Addregister to Accumulator with Carry Add direct byte to Accumulator with Carry Add indirect RAM to Accumulator with Cany Add immediate data to Acc with Cany Subtract Register from Acc with borrow Subtmct direct byte from Acc with borrow Subtract indirect RAM from ACC witb borrow Subtract immediate data from Acc with borrow Increment Accumulator

pciiqq pjiG$Kq~l fiiiiqm pi-+iiq~] /iiiqiq [001i101011(1 ljiizpq (001i(01001(1 p.tiipq 11001)0101) )1oo11011i] pE7qzii1~1 piiizpq )]

12 12 12 12 12 12 12 12 12 12 12 12 12

2 I 2 1 2 1 2 I 2 1 2 1

Programacin de los Microcontroladores 8052/8051 (Il)

61

Tabla 4.6. Instrucciones

aritmticas

(continuacin)

INC INC INC DEC DEC DEC DEC INC MUL DIV DA

Rn direct @Ri A Rn direct @Ri DPTR AB AB A

Incrementregister Increment direct byte Increment direct RAM Decrement Accumulator

l-i%qGA [0000101011-l pli] p7iiiqq ~OOOl~lrrr~ piii$Eq~l p\ ~1010~0011~ 11010101001 11000101001 piiipiq

I 2 1 1
1

12 12 12 12 12 12 12 24 48 48 12

DecrementRegister Decrement direct byte Decrement indirect RAM Increment Data Pointer Multiply A&B Divide A by B Decimal Adjust Accumulator

2 1 1 1 1 1

Tabla 4.7. Instrucciones lgicas

4NL 4NL 4NL 4NL ANL ANL ORL ORL )RL )RL )RL

A,Rn A,direct A,@Ri A,#data direct,A direct, #data A,Rn A,direct A,@Ri A,#data direct,A

AND Register to Accumulator AND direct byte to Accumulator AND indirect RAM to Accumulator AND immediate data to Accumulator AND Accumulator to direct byte AND immediate data to direct byte OR register to Accumulator OR direct byte to Accumulator OR indirect RAM to Accumulator OR immediate data to Accumulator OR Accumulator to direct byte

..

62

Introduccin

Q los Microcontroladores

Tabla 4.7. Instrucciones

lgicas

(continuacin)

ORL XRL XRL XRL XRL XRL

direct, #data A,Rn A,direct A,@Ri A, #data direct,A

XRL CLR CPL RL RLC RR RRC SWAP

direct, #data

OR immediate data to direct byte Exclusive-OR register to Accumulator Exclusive-OR direct byte to Accumulator Exclusive-OR indirect RAM to Accumulator Exclusive-OR immediate data to Accumulator Exclusive-OR Accumulator to direct byte Exclusive-OR immediate data to direct byte Clear Accumulator Complement Accumulator Rotate AccumulatorLeft

2 ~1~1~13 ~111~0100~ [Illllolooj 10 0 I 0 10 0 I II 1 1 1 1 1 1 1

4 12 12 12 12 12 12 12

Rotate AccumulatorLeR, w] through the Can-y Rotate Accumulator Right 10000100111 Rotate AccumulatorRight -1 thrdugh the Carry fi-iK@El Swap nibbles within the Accumulator

Tabla 4.8. Instrucciones de transferencia de datos

MOV MOV MOV MOV MOV

A,Rn A,direct A,@Ri A,#data Rn,A

Move register to Accumulator Move direct byte to Accumulator Move indirect RAM to Accumulator Move immediate data to Accumulator Move Accumulator to
wokttpr

-1 p7Tqi-q f.--GGq WI pi7qizGl~l Illllllrrrl

1 2 1 2 1

12 12 12 12 12

Programacin de los Microcontroladores ?052/8051

(ll)

63

Tabla 4.8.

Instrucciones de transferencia de datos (continuacin)

MOV MOV MOV MOV MOV MOV

Rn,direct Rn,#data diWt,A direct,Rn direct,direct direct,@Ri

Move direct byte to l-izpq riiizzq register Move immediate data to -1 -1 register Move Accumulator to /.iKpiq~~ directbvte Move register to direct p7iiqiGl~j byte Movedirect byte to direct3-1 -1 -1 piiTqq riiizGq

2 2

24 12 12

24 24

Move indirect RAM to direct byte MOV direct, # data Move immediate data to direct byte MOV @Ri,A Move Accumulator to indirect RAM MOV @Ri,direct Move direct byte to indirect RAM MOV @Ri,#data Move immediate data to indirect RAM MOV DPTR, # data1 6 Load Data Pointer with a l-bitconstant MOVC A,@AtDPTR Move Code byte relative to DPTR to Acc MOVC A,@AtPC Move Code byte relative to PC to Acc MOVX- A,@Ri Move Extemal RAM (8bit addr) to Acc MOVX A,@DPTR Move Externa1 RAM (16bit addr) to Acc M O V X @Ri,A Move Acc to Extemal RAM (8-bit addr) MOVX @DPTR,A Move Acc to Extemal RAM (l-bit addr) PUSH direct Push direct byte into stack POP XCH XCH XCH direct A,Rn A,diWt A,@Ri

24 24 12 24 12 24 24 24 24 24 24

10]lIV] 3 pi+Zl pLii$mlIdirectaddressI p.EipTl~] 1 2 2

1001 0000 tmmed data158 tmmed data7-0 r-/---j~II7l 3 liiz$iq WI wl j?G$GFj /.hi$Zl [1111100001 m -1 1 2 2 1 2 1 l 1
1

1 1

24 24 24 12

Pop direct byte from stack m -1 Exchange register with Ac- -1 cumulator Exchange direct byte with 11100101011 m] Accumulator Exchange indirect RAM with Accumulator Exchangelow-arder Digit WI indirect RAM with Acc

XCHD A,@Ri

64

Introduccin a los Microcontroladores

Tabla 4.9. Instrucciones booleanas

CLR CLR SETB SETB CPL CPL ANL ANL ORL ORL MOV MOV JC JNC JB JNB JBC

C
bit C bit C bit C,bit C,/bit C,bit C,/bit C,bit bit,C rel rel bit,rel bit,rel bit,rel

Clear Cany
Clear direct bit SetCany Set direct bit Complement Carry Complement direct bit AND direct bit to CARRY AND complement of direct bit to Carry OR direct bit to Cany OR complement of direct bit toCany Move direct bit to Carry Move Carry to direct bit Jump if Carry is set Jump if Cany not set Jump if direct Bit is set Jump if direct Bit is Not set Jump if direct Bit is set & clear bit

!pjqiq
111001001QllJ l-izipq l-iTqGq~l 11o11(00111 l-iiqE%l~l pi?zp-E[~l 2 l-it+GGl~l liizpiq r.izGq m\ (1 pjTi-py~l [100110010l~l piz$q r--&iGq piiTq%q~l l-?zzpq~l(Il3

I
2 1 2 1 2

12 12 12 12 12 12 24

2 2 2 2 2 2 2

24 24 24 12 24 24 24 24 24 24

10011/00001~1~13 [000110000/~j~l3

Tabla 4.10.

Instrucciones de salto

ACALL addrl I LCALL addrl RET RBTI AJMP addrll UMP SJMP addrl rel

Absolute SubroutineCall Long Subroutine Call Retum from Subroutine Retum frominterrupt Absolute Jump Long Jump Short Jump (relative

-1 a7 ~36 a5 a4

a3 a2 al ao

24 4 24 24 24 4 24

2 ml&l&, 3 ploloolO] liKpEj &.iZ$Kj a7 a6


a5

1 I h a3 a2 al ao 2

Ilil&,&] 3 2 WI-1 2

Programacin

8052/8051

(Il)

65

Tabla 4.10. Instrucciones de salto (continuacin)

JMP JZ JNZ

@AtDPTR re1 re1

Jump indirectrelative to the DPTR Jump if Accumulator is


k0

lpi-qicq /TixqcGl(l /iTixpq~l 2 j%-$%ij~j~I 2 f%+iiiil~/-%%%-j (~l~I(I 2 [~l~l)) 2

I 2 2 3 3 3 3 2 3 I

24 24 24 4 4 4 4 24 4 12

CJNE A,direct,rel

CJNE

A,#data,rel

Jump if Accumulator is Not Zem Compare direct byte to Acc and Jump if Not EuuaI Compare immediate to Acc and Jump if Not

Eqd
CJNE Compare immediate to register and Jump if NotEqual CINE @RI, # data,rel Compare immediate to indirect and Jump if Not EqUd DJNZ Rn,rel Decrementregister and Jump if Not Zero DJNZ direct,rel Decrement direct byte and Jump if Not Zero NOP No Operation Rn,#data,rel

f-riiqqlIl [1101)0101lldirectaddress))l 2 (ooooloooo(

1. Escribir la instruccin que resuelva la condicin de salto relativo cuando elflas FO (overflow) se halla activado. 2. Los saltos relativos estn situados dentro del rango comprendido entre - 128 y + 127 bytes. $mo se procedera si el salto que tuviese que realizar fuese de 300 bytes? Ilustrar con un ejemplo la forma de proceder. 3. Establecer las diferencias entre las instrucciones JMP con los prefijos S, L y A. 4. Comentar la diferencia entre las instrucciones RET y RETI.

5. Escribir las instrucciones para efectuar un salto a una subrutina si el programa principal y la subrutina utilizan comnmente el registro B. Nota: Hay varias soluciones, pero se aconseja guardar el registro B en la memoria de PILA
LIFO (Sta&).

iQu chequea la CPU para realizar los saltos condicionales JZ y JNZ? Justificar la respuesta. Sealar las diferencias entre las instrucciones: CJNE A, <byte>, #data, re1 y CJNE <byte>, # data, re1

CAPITULO

Presentacin del equipo emulador para el desarrollo de aplicaciones


5.1. INTRODUCCION
Hay en el mercado varios sistemas de desarrollo de aplicaciones de diferentes caractersticas. El equipo, MICE-IIS es potente, verstil y econmico, este ltimo aspecto porque utiliza como unidad central un PC al que va unido mediante una lnea de comunicacin serie B-232. En este captulo no se pretende dar caractersticas del equipo y menos estudiar todas las posibilidades de utilizacin. Es evidente que el equipo tiene su manual de usuario en donde figuran muchos ms aspectos de los que en este breve captulo se van a ver. Nuestro objetivo es iniciarle en el manejo de esta importante herramienta para que pueda seguir con menos dificultad los ejercicios que acompaan a las explicaciones de la familia de Microcontroladores-5 1. Los ejercicios que se van a presentar en este libro y los que el propio usuario elabore, pueden ser comprobados utilizando un emulador o un simulador. La diferencia, adems del precio, es que en un simulador las pruebas se realizan sobre dispositiiros (generalmente en la pantalla de su PC) que no son los reales sobre los que va a corren> la aplicacin. El emulador, en cambio, desarrolla el diseo sobre los componentes reales que posteriormente se emplearn para implementar el prototipo. Todos los ejercicios de este libro han sido probados con el emulador MICE-11s.

Nota: En este captulo se han establecido los siguientes criterios: a) b) cios de blador,
Los

Los comandos y notas de inters se han recuadrado. Tambin se han recuadrado las imgenes de la pantalla en la que aparecen listados de los ejerciaplicacin y los procesos que debe afrontar el usuario interactivamente con los programas EnsamEnlazador (Linker) y de Emulacin.

recuadros b) difieren de los a), en que los primeros son adyacentes al margen izquierdo.

El dilogo del usuario con el Emulador, cuando se realiza en la direccin usuario a Emulador, se realza con letra negrita. As, por ejemplo, si se quiere modificar el contenido de la posmem interna 90 H escribiendo en ella 33 H se teclear:

66

Presentacin del equipo emulador para el desarrollo de aplicaciones


>M190

67

y el 0090 0090 para

Emulador contesta 55; es decir, que contiene 55 H. 55 33; en la posmem 90 H se escribe 33 H. comprobar la operacin...

>MI90 0090 33 (La orden MI xx se utiliza para leer y escribir en la memoria interna del emulador, que es como si lo hiciera en la del microcontrolador.)

5.2.

COMANDOS DEL MICE-11% PARA CONFIGURAR LA MEMORIA DE TRABAJO

En este apartado se pasa revista a los principales comandos con objeto de poder desarrollar una aplicacin con microcontroladores utilizando el sistema de desarollo MICE-11s. Todos los comandos se escriben recuadrados y comienzan con el smbolo del prompt (>), que es el aviso con que el MICE-IIS indica que est listo para recibir comandos y por tanto no se debe escribir.

>? El : Men de ayuda.

?? ?
1: I>*?

: Indica el tipo de microcontrolador que el sistema est emulando.

I>!Ml : Selecciona el Microcontrolador 8052.


Muestra el men de comandos para configurar la memoria de emulacin SUEM* y otras utilidades (vase manual del usuario).

: Indica el estado de la memoria de emulacin. A continuacin se muestran algunos de los atributos de configuracin de la memoria de emulacin. 1 : Memoria de emulacin interna con permiso de lectura y escritura. IR : Memoria de emulacin interna con permiso de lectura solamente.
* SUEM: Super Universal Emulation Memory.

68

Introduccin a los Microcontroladores

E : Memoria externa (tarjeta prototipo), con permiso de lectura y escritura. ER : Memoria externa (tarjeta prototipo), con permiso de lectura solamente. G : Acceso no permitido. Por ejemplo:
>*MOlFFFIR >*M Rango: 0 a1MbconlKderesolucin 000000 a OOlFFFinterna slo lectura (IR) 002000 a OlFFFFinternalectura/escritura (1) 020000aOEEFFFexternalectura/escritura (E) OEFOOO a OFFFFFprotegida (G)

Por defecto, stos son los atributos que presenta la memoria de emulacin despus de un Rket:
>*M Rango: 0 a1Mb con 1Kde resolucin 000000aO1FFFFinternalectura/escritura (1) 020000aOEEFFFexternalectura/escritura (E) OEFOOO a OFFFFFprotegida (G)

5.3.

EJECUCION Y ESTUDIO ELEMENTAL DE UN PROGRAMA EN EL EMULADOR MICE-IIS

La primera operacin a realizar es la escritura del programa en la memoria de emulacin. Esta operacin se puede realizar de dos formas diferentes: a) Utilizando el ensamblador del propio emulador. b) Utilizando un macroensamblador. La primera opcin es ms rpida para pequeos programas. La segunda es ms profesional y necesaria para generar aplicaciones de ms envergadura.

5.3.1.

El ensamblador del emulador MICE-IIS

Este ensamblador se encuentra incluido dentro del software del propio emulador, en el que adems se incluyen otras utilidades como:

Presentacin del equipo emulador para el desarrollo de aplicaciones

69

Comandos para acceder a memoria, puertos y registros. Comandos para el control de seales. ?? Comandos de emulacin y traza. ?? Comandos de emulacin paso a paso. ?? Comandos para integrar el emulador dentro de otros sistemas.
?? ??

A continuacin se hace una entrada en este entorno, no para comentar comando tras comando, sino para aprender a utilizar un sistema de desarrollo, y ms que detenemos a explicar el emulador MICE-IIS, se indican las operaciones imprescindibles que deben realizarse. Casi todas estas operaciones son comunes a todos los sistemas de desarrollo. Para entrar en el entorno de trabajo se ejecuta el archivo USD.

: Para llamar al Universal Symbolic Debugger (USD).

El : Para habilitar la memoria de emulacin y as permitir la lectura y escritura del programa en la SUEM (Super Universal Emulation Memo&.
>*M E

Para inhabilitarla se utilizara el comando Para comprobar su estado


>*M El

El

>*M D

Estos comandos son importantes para permitir la lectura en la memoria de emulacin del MICE-IIS o en la memoria externa de la tarjeta prototipo, segn el proyecto est en la etapa de desarrollo o en la de verificacin sobre el hard desarrollado.
>EA El: Autoriza (enable) memoria interna. Posibilita el trabajo con la memoria interna, y por tanto acta como microcontrolador. En el caso contrario actuara como microprocesador, utilizando la memoria de pro-

gramas EPROM externa. En este caso se utilizara el comando

>DA : Desautoriza El

(disable) memoria interna. Estos dos ltimos comandos tienen una importancia trascendente para seleccionar el tipo de microcontrolador. As: El Microcontrolador 8032 no tiene memoria de programas interna accesible al usuario; por esta razn hay que hacer trabajar al microcontrolador con memoria externa (como microprocesador).y habilitar dicha memoria externa. Estos son los pasos que hay que dar:
>*M E >DA >1 8032

70

Introduccin a los Microcontroladores

El Microcontrolador 8052 tiene memoria de programas accesible al usuario, aunque sea del tipo EPROM (el emulador la emula utilizando la memoria de RAM de emulacin) (SUEM); por esta razn, para trabajar con la memoria interna (como microcontrolador), se deben dar los siguientes pasos:

Estos comandos se corresponden con la seal aplicada a la patilla (3 1) del microcontrolador: EA = 1 (+5 voltios) Memoria interna. EA = 0 ( 0 voltios) Memoria externa. Seguidamente se procede a cargar el programa en la memoria de programas del Microcontrolador 8052, trabajando con el ensamblador incorporado en el USD. Se llama al USD:
C: >USD Linking serialport: COMl 9600 baudrate, 8 databit, NONEparity Ctrl-Cto returnDOS, andchangelinking "USD . INS" file >

status

byediting

Se prepara para trabajar con el Microcontrolador 8052:


>! EP80154V3.2 > >IM52 > >! EP8032V3.2 > >EA > >1 EP8052V3.2

Presentacin del equipo emulador para el desarrollo de aplicaciones

71

Obsrvese cmo se ha cambiado del Microcontrolador 8032 al 8052 con el comando EA. A continuacin se escribe el programa utilizando un: editor muy elemental que incorpora el USD. Este es un ensamblador directo, en el sentido de que segn se van tecleando los nemnicos de las instrucciones y los operandos, se van cargando directamente en memoria. El inconveniente que tiene es que no se pueden insertar lneas en el programa y los erroresque hubiere obligan a reescribir el programa desde ese punto al final. No obstante, es muy cmodo para escribir pequeos programas, pues las operaciones a realizar son pocas y sencillas. Para los que hayan trabajado con el programa DEBUG del DOS-PC les diremos que es muy parecido. A este ensamblador directo se le llama con el comando LINE ASSEMBLY, que tiene el siguiente formato:

>A

[direccincomienzoprograma]

> >A0200 LOC 0200 0202 0204 0206 0207 OBJ 7433 257F 7890 F6 LINE 0001 0002 0003 0004 0005 LABEL SOURCECODE MOVA,#33 ADDA,7F MOVRO,#90 MOV@RO,A

El programa, en la memoria del emulador, puede ser grabado en el disco para su archivo y almacenamiento con el comando UPLOAD (UP):

1 UP [nomfich. HEX] 1

Indicando el rango, esto es, la posicin de memoria de comienzo del programa y la posmem de la ltima instruccin.
>UPPRUEBA.EXE Uploadmemoryrange: Uploadmemory range: Uploadcompleted! >

0200, <CR>

0206

(retornodecarro)

72

Introduccin a los Microcontroladores

Como se puede observar, el programa muestra el formato del direccionamiento inmediato, directo e indirecto, adems de realizar operaciones de transferencia de datos y una operacin aritmtica.

Los datos slo pueden ser suministrados en cdigo de numeracin hexadecimal, por esta razn no se escribe al lina1 de los mismos la letra (H).

INSTRUCCIN MOV A, # 33 ADD A,7F MOV RO, # 90 MOV @RO,A

1 DIRECCIONAMIENTO 1 Inmediato Directo Inmediato Indirecto

OPERACIN A t33 A t (7F) +33 t 90 (k& tA

El programa ya est almacenado en el disco y listo para ser cargado en la memoria central y ejecutarlo.

C:>DIRPRUEBA.* VolumenenunidadC sinetiqueta DirectoriodeC: \USD PRUEBA HEX 40 lArchivo 21/01/91 2:03 372736byteslibres

Ahora se puede ejecutar el programa. Hay varios modos de ejecutar el programa. El normal sera utilizando el comando:

>G

[direccincomienzoprograma]

o tambin, situando el puntero o contador de programa en la direccin de comienzo del programa y a continuacin ejecutando (G), as:

>J >G

[direccincomienzoprograma]

Presentacin

del

equipo

emulador

para

el

desarrollo

aplicaciones

73

El primer inconveniente que tiene esta forma de trabajo, que es la habitual, es que no permite hacer un seguimiento exhaustivo, instruccin por instruccin, que es, en estos momentos de familiarzacin con el equipo, la que importa. El segundo inconveniente es parar la ejecucin en la instruccin que interesa, bien porque sea el final del programa o porque se quiere ver algn registro de estado en cualquiera de las instrucciones. Esta dificultad se soslaya utilizando los puntos de ruptura, que a continuacin se van a analizar; no obstante, la importancia que tienen y los distintos formatos que presentan nos obliga advertir al lector consulte el manual del emulador para mayor informacin. La letra (x) significa que puede ser cualquiera de los dos puntos de ruptura que presenta H 1 y H2. Si el equipo cuenta con la tarjeta BPP*, puede tener ms puntos de ruptura. [direccinde stop] : Breakpoint 1 o 2. Para la parada del programa en la instruccin siguiente a la sealada en el comando. Se pueden poner los dos puntos de ruptura simultneamente para que se detenga en el primero, y al volver a ejecutarlo, en el segundo, y as sucesivamente.
>Hx

[contador] [direccinde stop] : Permite hacer la parada en la instruccin indicada en la pasada nmero (segn indicacin del contador) comprendida entre 1 y 4000 H.
>Hx

: Borra todos los puntos de ruptura programados. HI y H2, sin ningn parmetro, nos informan de la situacin on-CJJ~ del punto de ruptura referido. Seguidamente se muestra la ejecucin del programa con este mtodo, partiendo del momento del arranque del microcontrolador para que pueda servir de repaso. Puesto que el programa se encuentra en el disco, se puede transferir a la memoria del emulador con el comando DOWNLOAD (DO), y para comprobar que el programa est ah, se hace un desensamblado:

>DO [nomfich. EXE] >Z [posmem.inicio

posmem.final]

* BPP= BREAKPOINTPROCESSOR= ProcesadordePuntosdeRuptura.

74

Introduccin

los

Microcontroladores

>1

EP8052V3.2 >*MD Map: emulationmemorygloballydisabled > >DOPRUEBA.HEX Download completed! > >Z 0200 0206 LOC OBJ 0200 7433 0202 257F 0204 7890 0206 F6 DISASSEMBLYCOMPLETED

LIN 0001 0002 0003 0004

LABEL

SOURCE MOV ADD MOV MOV

CODE A,#33 A,7F RO,+90 @ROA

Tambin puede desensamblarse del modo siguiente: situar el puntero en la primera instruccin a desensamblar y ejecutar el comando (Z) sin ningn parmetro.

>DO [pos.mem.inicio] >JO200 >Z

Seguidamente se carga la posicin de memoria interna 7F (comando MI) con el dato 70.

>MI 7F 007F 5570


0080 55

>MI 7F
007F 70

Se programa el punto de ruptura para que detenga la ejecucin del programa en la ltima instruccin y poder ver el resultado.

Presentacin del equipo emulador para el desarrollo de aplicaciones

75

>Hl
Hl= >H10206 >Hl H1=0206

I >

Se ejecuta y se revisan los registros principales:


>G OiOO

PROGRAMBROKEATADDRESS 0207 >R ACC B PSW SP DPH DPL RO RlR2 R3 R4 R5 R6 R7 (EO)(FO)(DO)(81)(83)(82) A3 00 04 07 00 00 9055575555555500 >MI 90 0090A3 >

PC PSW CAFBBO-P 00000100 0207

La solucin, como puede verse en la posicin de memoria interna 90, es A3. EJECUCIN PASO A PASO: Permite hacer el seguimiento del programa instruccin a instruccin, lo que facilita la bsqueda de errores. Adems de la informacin que se ofrece directamente, puede consultar cualquier registro o posicin de memoria, sin que se pierda el puntero del programa. El modo de ejecucin paso a paso puede realizarse fundamentalmente de dos maneras, en funcin de que se pretenda ms o menos informacin; as, el formato:

da la mxima informacin, como se puede observar a continuacin:


>JO200 >SR IFADDR 0200 ACC B (EO) (FO) 33 00 0202

ADDRESSDATA 0200 74 PSW SP DPH DPL

SOURCECODE MOV A,#33 RO RlR2 R3 R4 R5 R6 R7 75 55 5155 55 55 55 55 ADD A,lF

(D0)(81)(83)(82)
00 07 0202 00 00 25

PSW CAFBBO-P 00000000

PC 0202

76

Introduccin Q los Microcontroladores

ACC B (EO) A3 OO 0204 ACC B (EO) A3 OO 0206 ACC B (EO) (FO) A3 OO > >MI 90 0090A3

PSW

SP

DPH DPL

RO RlR2 R3 R4 RS R6 R7 755557 5555 5555 55 MOV RO,#90 RO RlR2 R3 R4 R5 R6 R7 90 5557 5555 5555 55 MOV @R~,A RO RlR2 R3 R4 R5 R6 R7 9055 57 55 5555 5555

(D0)(81)(83)(82)
04 07 0 0 0 0 0204 78 PSW SP DPH DPL

PSW CAFBBO-P 00000100 PSW CAFBBO-P 00000100 PSW CAFBBO-P 00000100

PC 0204 PC 0206 PC 0207

(D0)(81)(83)(82)
04 07 00 00 0206 F6 PSW SI? DPH DPL

(D0)(81)(fJ3)(82)
04 07 00 00

El resultado se encuentra en la posmem 90 H. El otro formato para realizar la ejecucin paso a paso es utilizando el comando:

>J >sz

[direccindecomienzo]

Esta modalidad permite hacer el seguimiento del programa paso a paso manejando una informacin ms simplificada, de esta manera no aparece el estado de los registros. Pero este inconveniente se soslaya haciendo un escape (tecla ESCAPE) y pulsando la tecla R aparece el estado de los registros. Tecleando nuevamente SZ y <CR> vuelve a entrar en el modo paso a paso justo donde se sali. Seguidamente se muestra el aspecto que tiene la informacin. Se observa cmo en un determinado momento, en la instruccin MOV RO, # 90, hace una parada para visualizar el estado de los registros principales.

>JO200 >sz IFADDR 0200 0202 0204 >R

ADDRESS 0200 0202 0204

DATA 74 25 78

SOURCECODE M O V A,#33 ADD A,7F M O V RO,#90 PC 0206

PSW ACC B PSW SP DPH DPL RORlR2 R3 R4 R5 R6R7 CAFBBO-P (EO) (DO)(81)(83)(82) A3 OO 04 07 00 00 905557555555550000000100

Presentacin del equipo emulador para el desarrollo de aplicaciones

77

>sz
1 FADDR 0206 0207 ADDRESS 0206 0207 DATA F6 55 SOURCECODE MOV 62~0,~ ANL A, 7E

>
>MI 90 0090 A3 >

Como se dijo anteriormente, en la fase de aprendizaje es conveniente utilizar el ensamblador directo, pero la dificultad de no poder modificar, insertar y suprimir con la comodidad necesaria cuando se trabaja con programas de aplicacin grandes obliga, sin suponer un coste econmico grande, a utilizar un macroensamblador. Seguidamente se pasa a comentar el modo de trabajo con el Macroensamblador 2500, que puede adquirir en la misma casa donde haya comprado el emulador.

5.3.2. El Macroensamblador 2500AD Para trabajar con el macroensamblador se deben seguir ciertas normas perfectamente secuenciadas de este modo: Operacin de editado: En esta fase se escribe el programa FUENTE. Para esta operacin es preciso utilizar un editor de textos que permita escribir el programa utilizando exclusivamente caracteres ASCII. El archivo as obtenido se salvar con la extensin (.ASM). ? Operacin de ensamblado: Con la operacin de ensamblado se convierte el archivo que contiene el cdigo fuente (archivo fuente) en un archivo objeto (extensin .OBJ). Este proceso de traduccin se realiza con la ayuda de un programa llamado ensamblador. ?? Operacin de linkado (Enlazado): El archivo *.OBJ se convierte en un archivo formato INTEL.HEX, que es perfectamente ejecutable por el emulador MICE-11s. Este paso se realiza con la ayuda de un programa llamado editor de enlaces o linker. ?? Operacin de ejecucin: Para ejecutar el programa hay que cargarlo en la memoria de emulacin con el comando DOWNLOAD, el mismo que fue utilizado anteriormente con el ensamblador directo (DO nomfich:HEX).
?

Hay en el mercado simuladores que permiten ejecutar y depurar los programas. Es un software que facilita el seguimiento preciso de las instrucciones, e incluso se pueden programar las entradas y salidas, aunque no son reales. Es evidente que su fin es el entrenamiento, y ste lo cumple con creces.

78

Introduccidn a los Microcontroladores

H Operacin de editado A continuacin se muestra el programa ejecutado anteriormente, escrito para ser procesado por el Macroensamblador 2500AD, que utiliza las directivas comunes a los macroensambladores ms estndares del mercado. En general, las sentencias de los programas fuente escritos en el lenguaje ensamblador se organizan, cuando se imprimen o visualizan en pantalla, en cuatro columnas. La primera contiene los rtulos o etiquetas que definen posiciones de memoria relativas utilizadas por los saltos y llamadas a subrutinas, o simplemente como identificadores de posiciones de datos particulares. La segunda columna contiene los nemnicos (nombres de instrucciones), que reciben el nombre de cdigos de operacin. La tercera columna contiene los operandos. La cuarta y ltima columna se reserva a comentarios. A estas columnas, con ms propiedad llamadas campos, se las separa con uno o varios espacios en blanco de tabulador. El programa no debe, necesariamente, tener los cuatro campos; as, el ejemplo que se edita a continuacin no tiene el campo de etiquetas.

C:>TYPE

PRUEBA.ASM

TITLE COMMENT

ORIGIN SYMBOLS CODE MEM EQU MOV ADD MOV MOV END

OPERACINDEENSAMBLADOYENLACE * Direccionamientoinmediato, 16.1.91 * 0200H ON 7FH A,#33H A,MEM RO,#90H @R~,A ; ; ;

directoeindirecto

Direccionamientoinmediato Direccionamientodirecto Direccionamientoindirecto

En el programa anterior tambin se utilizan directivas, que son comandos que afectan al ensamblador, no al microprocesador o microcontrolador. Las sentencias de las directivas, como las ejecutadas por el microprocesador o microcontrolador, tienen cuatro campos como mximo. Estos son: [nombre] directiva [operando] [;comentario] Recuerde que las sentencias ejecutables por el microcontrolador eran: [etiqueta] cdigo de operacin [operando] [;comentario] Los corchetes indican que estos campos no son obligatorios.

Presentacin del equipo emulador para el desarrollo de aplicaciones

79

Las directivas se pueden usar para preparar procedimientos (por ejemplo, subrutinas), definir smbolos, almacenar datos en memoria y efectuar otras tareas rutinarias. En este programa y en otros posteriores se utilizan las DIRECTIVAS DE CONTROL:

[-YEl : Para dar ttulos a los programas. pGiGF1


1 ORIGIN 1:

: Comentarios generales (entre dos asteriscos).

Indicativo de la posicin de memoria a partir de la cual el programa FICHERO OBJETO se enmarca en la memoria real.

: Permite la utilizacin de smbolos, a los cuales se hace referencia en el proceso de emulacin. 1: Permite asignar nombres comunes a posiciones de memoria, subrutinas y a otros subprogramas que son llamados desde el programa principal. En d ejemplo, se asigna a la posmem 7FH el nombre MEM, ms fcil de recordar e identificar. MEM EQU 7FH

1 EQU

: Fin del programa (fin del archivo).

: Almacenamiento de datos en formato de byte en la memoria. Estas directivas, con la ventaja de poder utilizar comentarios, al final de cada instruccin (separando los campos de operandos y comentarios con (;)), permiten que programas largos puedan ser ledos, estudiados y modificados sin dificultad por el autor del programa y otros programadores.
Nota: Esta es una muestra mnima del macroensamblador, por lo que animamos al lector a que estudie y utilice otras directivas que le permitirn rentabilizar mejor el trabajo.

?? Operacin de ensamblado

El archivo editado anteriormente est preparado para ser procesado por el macroensamblador, convirtindolo en un archivo mquina de extensin (.OBJ).

80

Introduccin CI los Microcontroladores

Esta operacin se realiza desde el DOS llamando al programa ensamblador:

El
>X8051 El ensamblador pregunta por el destino del fchero,*.OBJ. Si se toma la opcin por defecto (NONE = <CR>) se obtendr solamente el archivo objeto si no se detecta algn error. Si se toma la opcin D (Disk), el ensamblador pregunta si tiene que generar el archivo de referencias cruzadas (tablas de smbolos). El archivo de referencias cruzadas informa de la lnea de programa en que se hace referencia a variables y etiquetas de saltos. A continuacin pregunta el nombre del archivo fuente, que no precisa ser escrito con su extensin (.ASM). Finalmente, pregunta por el nombre del archivo de salida. Si pulsamos (CR = Retorno de carro), el archivo de salida tomar el mismo nombre que el archivo fuente, pero con la extensin (.OBJ). Esta es la opcin que se recomienda. Obsrvese que adems del archivo *.OBJ genera el archivo *.LST, que contiene la informacin del archivo fuente con los cdigos de instruccin en hexadecimal, paginado, con la fecha de proceso, la lista de referencias cruzadas y, si contiene errores, nos indica el error y nmero de lnea de programa en que se encuentra. Si se ensambla con la opcin (T = Terminal), se tendr la misma informacin que con la opcin anterior (D) en el monitor de CRT y no genera el archivo *.LST. A continuacin se muestra la forma de proceder para ensamblar el programa anterior, tal como se ha indicado. El nombre del programa es PRUEBA.ASM.

J:>X8051 8051MacroAssembler Versin4.05a Copyright(C)1985by2500A.D.Software, Inc. Listingdestination (N, T, D, E, L, P, <CR>=N) : D,. SenerateCrossReference? (Y/N <CR>=No) :Y Input Filename : PRUEBA.ASM Dutput Filename : 2500A.D. 8051MacroAssembler - Versin4.05a -_----------_----_~----~~---~~~--~~~~~~~~~~ Input Filename : PRUEBA. asm Output Filename : PRUEBA. obj Lines Assembled: 21 AssemblyErrors : 0

Presentacin del equipo emulador para el desarrollo de aplicaciones

81

Despus de la operacibn de ensamblado stos son los archivos que se han generado:

C:>DIRPRUEBA.* Volumenenunidadc sinetiqueta DirectoriodeC:\USD PRUEBA PRUEBA PRUEBA 26/01/91 3:59 ASM 512 OBJ 588 26/01/91 4:lO LST 2096 26/01/91 4:lO 3Archivo(s) 278528byteslibres

Este es un listado del archivo PRUEBA.LST:

C:>TYPEPRUEBA.LST TueJan 26 199104:lO

OPERACINDEENSAMBLADOYLINKADO 2500A.D. 8051MacroAssembler- Versin4.05a ____-_----_______----~~~~~~~~------------Input Filename : PRUEBA.asm Output Filename : PRUEBA.obj 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0000 TITLE COMMENT OPERACINDEENSAMBLADOYENLAZADO *
*

Direccionamientoinmediato, Directoeindirecto. 16.1.91

0200

ORIGIN SYMBOLS

0200H ON

0200

CODE 007F MEM EQU 7FH A,#33H ; ; Direccionamiento inmediato.

0200

74 33 MOV

82 18 19 20 21

Introduccin a los Microcontroladores

0202 0204 0206 0207

25 7F ADD 78 90 MOV MOV F6 END

A,MEM RO,#90H @R~,A

; Direccionamientodirecto. ; Direccionamientoindirecto.

Y la tabla de referencias cruzadas (tabla de smbolos):

TueJan Defined Pre Pre Pre 15 Pre

26

199104:lO Symbol Name BSECT CODE DATA MEM RSECT Value 0000 0200 000.0 007F 0000 Referentes 13 18

Lines Assembled: 21

AssemblyErrors

:0

R Operacin de enlazado Una vez obtenido el archivo PRUEBA.OBJ, para obtener el archivo ejecutable por el microcontrolador, hay que enlazar este archivo. El programa Enlazador o editor de enlaces, adems de ser til para fusionar distintos programas y rutinas escritas en lenguaje ensamblador, resulta imprescindible para unir programas escritos en distintos lenguajes de programacin. As, por ejemplo, un programa escrito en Pascal que utiliza rutinas escritas en ensamblador. El enlazador (linkador) que se suministra con el ensamblador, se le llama desde el DOS, como:

El
>LINK Este programa hace interactivamente al usuario las siguientes preguntas:
?? ??

Archivo de entrada: PRUEBA.OBJ Desplazamiento: 0

Este desplazamiento se suma al nmero expresado en la directiva de control ORIGIN para situar el archivo ejecutable *.HEX en la posicin de memoria elegida por el usuario. En este caso: 0200 + 0 (desplazamiento) = 0200 posmem

Presentacin del equipo emulador para el desarrollo de aplicaciones

8 3

Despus de pedir del desplazamiento, el enlazador pide ms archivos *.OBJ para <dinkarlow (enlazarlos), con el archivo anterior, formando un nico fichero ejecutable.

Se recomienda que el programa de aplicacin est formado por pequeos subprogramas perfectamente estructurados.

En este caso, como no hay ms archivos que enlazar, a la pregunta: - Input filename: <~~>(retorno de carro).

Qu nombre recibir el archivo de salida? -0utputfilename: <CR> Indicando que servir el mismo nombre, pero el enlazador le pondr la extensin (.HEX). A continuacin preguntar si se hace uso de la librera de rutinas, a la que se hara referencia en el archivo fuente. En este caso, como no se utiliza ninguna rutina: -Library filename: <CR> El enlazador ofrece diversos formatos para obtener archivos de salida ejecutables, por lo que emplazamos al lector para que consulte el manual. Esta es, secuencialmente, la operacin de enlace del fichero PRUEBA.OBJ:

C:>LINK 2500A.D.Linker Copyright(C)1985-Versin4.05a

Input Filename : PRUEBA.OBJ Input Enter Offset For "CODE" : 0 Library Filename : Options (D, P, S, A, M, N, 2, X, H, E, T, 1, 2, 3, <CR>=Default Linker Output Filename : PRUEBA.HEX Disk Listing Filename : <NoneSpecified> Symbol Table Filename : <None Specified> LinkErrors : 0

:H

Output Format : Intel Hex

84

Introduccin a los Microcontroladores

Los archivos que se han generado hasta este momento son stos:

C:>DIRPRUEBA.* VolumenenunidadC sinetiqueta Directoriode c:\USD PRUEBA PRUEBA PRUEBA PRUEBA ASM 512 OBJ 588 LST 2096 HEX 40 4Archivo(s) 26/01/91 3:59 26/01/91 4:lO 26/01/91 4:lO 26/01/91 4:12 274432byteslibres

El archivo ejecutable que se ha generado es tipo formato INTEL HEX. Este archivo es suficiente para ejecutarlo desde el emulador y para realizar un debugging completo del funcionamiento del programa con las utilidades que presenta el emulador. Tambin puede ser ejecutado directamente por el microcontrolador si se le hace pasar por el archivo conversar y convertir el archivo *.HEX en el archivo *.BIN grabable en EPROM (vase Captulo ll).

4 Operacin de ejecucin Como se ha explicado al principio de este captulo, el microcontrolador puede trabajar con la memoria segregada...

otra, tambin de 64 K, ocupada por la memoria de datos o con la memoria combinada.

. . . El ; en donde una pgina de 64 K es ocupada por la memoria de programa y


>EX

los datos. Para efectuar la carga del programa PRUEBA.HEX en la memoria de emulacin, hay que tener en cuenta las observaciones realizadas en el Apartado 5.3.1. Si la memoria es segregada, el programa que se va a cargar ser introducido en la pgina de 64 K de la memoria de programas, y si la memoria es combinada, compartir espacio con la memoria asignada a los datos en una nica pgina de 64 K. A continuacin se carga el programa en la memoria de emulacin, estando conligurado el microcontrolador como un 8032, y como este chip no tiene memoria interna de

. . . El ; en donde slo hay una pgina de 64 K compartida por los programas y


>DX

Presentacin del equipo emulador para el desarrollo de aplicaciones

85

programas, se utiliza la memoria externa de emulacin del sistema de desarrollo. Se muestra la operacin completa, incluida la ejecucin.

>1 EP8052V3.2 >*ME Map: emulationmemoryis >DA >1 EP8032V3.2 > >DOPRUEBA.HEX

enabled

Downloadcompleted! > >MI 7F 007F 70 > >Z 0200 0206 LOC OBJ LINE LABEL SOURCE CODE 0200 7433 0001 MOV A,#33 0202 257F 0002 ADD A,7F 0204 7890 0003 MOV RO,#90 0206 F6 0004 MOV @R~,A DISASSEMBLYCOMPLETED > >Hl 0206 >Hl Hl= 0206 > >JO200 >G PROGRAMBROKEATADDRESS 0207 >R ACC B PSW SP DPH DPL RORlR2R3R4RSR6R7 PSW PC CAFBBO-P (EO)(FO)(DO)(81)(83)(82) A3 OO 04 07 OO OO 90 55 57 55 55 55 55FF 00000100 0207 > >MI 90 0090A3

86

Introduccin a los Microcontroladores

La operacin completa considerando la memoria interna del microcontrolador, sera:

>l
EP8032V3.2 >*MD Map: emulationmemorygloballydisabled >EA >1 EP8052V3.2 > >DOPRUEBA.HEX Downloadcompleted! > >Z 0200 0206 LOC OBJ 0200 7433 0202 257F 0204 7890 0206 F6 DISASSEMBLYCOMPLETED >

LINE 0001 0002 0003 0004

LABEL

SOURCE MOV ADD MOV MOV

CODE A,#33 A,7F RO,+90 @R~,A

>MI 7F
007F90 70 0080 55 >MI 7F 007F70 > >H10206 >Hl H1=0206 >, >JO200 >G PROGRAMBROKEATADDRESS 0207 >R ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 PSW PC CAFBBO-P (Eo)(Fo)(Do)(8l)(83)(82) A3 OO 04 07 OO OO 90555755555555FF 00000100 0207 > >MI 90 0090 A3

Presentacin del equipo emulador para el desarrollo de aplicaciones

87

5.4. EXPLORACION DE LA MEMORIA DEL SISTEMA


Este apartado se inscribe en el contexto de las aclaraciones, tratando de insistir en los conceptos de memoria de programas y datos, memoria externa e interna, cundo funciona el 8052 como microcontrolador y cundo como microprocesador (8032) y cmo se accede a las distintas partes de la memoria. Para hacer esta exploracin se utilizar el dibujo de la Figura 2.1 del Captulo 2 y que aqu se presenta en la Figura 5.1; para hacer la exploracin ms interesante se tratar de buscan) el resultado de la ejecucin del programa anterior.
MEMORIA r PROGRAMAS h MEMORIA DE DATOS A EXTERNA r7 I I I I /

FFFFH ,=, I I l /

INTERNA 1FFFH :~FFFH)

90H

OOOOH
MICRO~ONTROLADOR

MICROPROCESADOR

EA=1 (EA) t

H
6F EA=0 (DA) t
I

L---PT,

MI

IL
MX

Figura 5.1.

Se inicia la bsqueda configurando el sistema con memoria segregada (EX) y sobre las siguientes zonas: a) Memoria de programas a.1) Como microcontrolador (8052): 33 t- (90) a.2) Como microprocesador (8032): 6F t (90) b) Memoria de datos interna: b.1) Como microcontrolador (8052): A3 c- (90)

88

Introduccin a los Microcontroladores

b.2) Como microprocesador (8032): A3 t (90) En este caso utiliza la memoria de emulacin (memoria externa), como memoria interna. b) Memoria de datos externa: c. 2) Como microcontrolador (8052): 6F c- (90) c.2) Como microprocesador (8032): 6F f- (90)
A continuacin se muestran los datos recogidos, despus de la bsqueda, que coinciden con los de la Figura 5.1.

>EX >EA >MP 90 0090 33 >1 EP8052V3.2 >DA >l ELk8032V3.2 P 90 0090 6F > >EA >l EP8052V3.2 >MI 90 0090A3 >DA >1 EP8032V3.2 >MI 90 0090A3 > >EA >I EP8052V3.2 >Mx 90 0090 6F >DA >I EP8032V3.2 >MX 90 0090 6F >

Presentacin del equipo emulador para el desarrollo de aplicaciones

89

OBSERVACION: Es habitual que un programa de aplicacin conste de un nmero grande de subprogramas. En la fase de pruebas cualquier modificacin en uno o ms subprogramas trae como consecuencia tener que enlazar (linkar) todos los subprogramas para conformar el programa principal *.HEX. Esta operacin resulta tediosa. Para evitar esta prdida de tiempo se aconseja utilizar un archivo de textos en ASCII, en el que figuren todos los subprogramas, como se indica seguidamente. El programa final, de nombre PROCESO.HEX, consta de los siguientes subprogramas: MEDIDA. OBJ REALIMEN.OBJ CALCULO.OBJ SALIDA.OBJ 3 El archivo de texto para el enlazador tendr este aspecto:

MEDIDA.OBJ<CR> <CR> REALIMEN.OBJ<CR> <CR> CALCULO.OBJ<CR> <CR> SALIDA. <CR> <CR> PROCESO OBJ<CR>

Obsrvese cmo la ltima palabra precedida de dos retornos de carro hace referencia al nombre del archivo que contiene al resto de los archivos (subprogramas). Ese archivo-programa final es PROCESO.HEX. Este archivo de datos puede recibir cualquier nombre, por ejemplo: ENCADENA.DAT Una vez realizada una operacin de modificacin en uno de los archivos, por ejemplo, en CALCULA.ASM, se ensambla, con lo que se obtiene el archivo CALCULA.OBJ. Seguidamente se llama al enlazador con el archivo de datos a continuacin, as:
C:>LINKENCADENA.DAT

El resultado ser el archivo ejecutable por el emulador: PROCESO.HEX. En la bibliografa se hace referencia a las herramientas que se han utilizado para elaborar este captulo y los que siguen. Y con esta aclaracin se concluye el Captulo 5. En los prximos dos captulos se hace referencia fundamentalmente a la programacin de los Microcontroladores 8052/5 1.

90

Introduccin a los Microconfroladores zonfroladores

1. &)u diferencias hay entre un emulador y un simulador? 2. ;:rCJ; utilidad tienen los puntos de rup3. iPara qu se utiliza el modo traza? 4. iQu es el modo paso a paso y qu utilidad tiene? 5. Indicar y definir las operaciones para ob-

tener un archivo (.HEX) ejecutable por el emulador o simulador. 6. Definir lo que es una directiva y poner ejemplos de directivas. 7. Nombrar las extensiones que presentan los archivos a resultas de las operaciones de editado, ensamblado y enlace. 8. iQu significado tiene un archivo con extensin (.LST)?

CAPITULO

Modelo de programacin (1)

6.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 estndar 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.

Habitualmente el programa tiene que tomar decisiones en funcin del contenido de una variable (posicin de memoria => posmem) 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 DAT 1 (78H) y DAT2 (79H); si la posmem CHE (77H) es cero, suma el contenido de DATl y DAT2; si el contenido es distinto de cero, entonces resta DATI de DAT2. En cualquier caso, el resultado de la operacin suma o resta se deposita en la posmem RES (7AH). 91

92

Introduccin

a los Microcontroladores

A continuacin se muestra el flujograma del proceso y el listado del programa fuente.


??

Flujograma

??

Listado
ESTRUCTURAALTERNATIVA. ALTERO.ASM * Operaciones aritmticas 6.2.91 * 0200H ON

TITLE COMMENT

ORIGIN SYMBOLS CODE

NO

SUMAR DATOS

DAl, #09H MOV DA2, #06H ; Carga datos CHE ; Lee la posicin de mem. 77H MOV A, JNZ SAL1 ; Si es igual a CERO realiza la SUMA y si NO salta a efectuar la resta DA1 MOV A, DA2 ADD A, ; Realiza la suma y guarda MOV RES, A
MOV

; el resultado
MOV JZ SAL1:MOV SUBB MOV SAL2:NOP END CHE A, SAL2 A, DA1 A, DA2 RES, A

RESTAR DATOS

; Realiza la resta y guarda ; el resultado

??

Ejecucin

Con el programa ensamblado y enlazado, como se indic en el captulo anterior, se pasa a la operacin de carga del programa en el microcontrolador y a su desensamblado. El listado muestra, en la primera columna, las posiciones de memoria ocupadas por el programa; en la segunda columna, los cdigos de instruccin y operandos; en la tercera columna, el nmero de lnea; en la cuarta, las direcciones de los saltos, y en la quinta y ltima columna, los cdigos de instruccin y operandos en nemnicos.
>1 EP8052V3.2 >Z 0200021A

Modelo de programacin (1) LOC 0200 0203 0206 0208 020A 02oc 020E 0210 0212 0214 0216 0218 021A OBJ 757809 757906 E577 700A E578 2579 F57A E577 6006 BS78 9579 F57A 00 DISASSEMBLYCOMPLETED LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 LABEL SOURCE MOV MOV MOV JNZ MOV ADD MOV MOV JZ MOV SUBB MOV .NOP CODE 78, #09 79,#06 A,77 0214 A,78 A,79 7A,A A,77 021A A,78 A,79 7A,A

93

B0214

B021A

A continuacin se inicializa la posmem 77H con OOH, se coloca un punto de ruptura en la posmem 021AH y se ejecuta. El resultado es OFH. Si en la posmem 77H se coloca el dato 12H y se procede a la ejecucin, como anteriormente, el resultado es 03H, tal como estaba previsto.
> >MI 77 0077 23 OO 0078 09 >H1021A >JO200 >G PROGRAMBROKEATADDRESS 021B >MI 7A

>MI 77 0077 0012 0078 09 >Hl H1=021A >JO200 >G PROGRAMBROKEATADDRESS 021B >MI7A

94

Introduccin a los Microcontroladores

La estructura de programacin iterativa por lo menos una vez realiza el proceso en cuestin al menos una vez, diferencindose de la estructura de programacin iterativa puede que ningtma vez (que se ver en el Ejercicio 6.3.), en que en esta ltima el proceso puede que no se ejecute ni una sola vez. Este es el aspecto que presentan ambas estructuras vistas desde el cuadro de flujogramas:

PROCESO

PROCESO

ITERATIVA por lo menos una vez

ITERATIVA puede que ninguna vez

??

Enunciado

La posmem MEM (77H) puede contener nmeros comprendidos entre 1 y 9, teniendo en cuenta esta caracterstica, poner las posiciones de memoria comprendidas entre 6 1 H y 69H a FFH (todos los bits a uno), segn esta relacin: Si MEM= 1 cargar con FFH las posmem 6 1 H Si MEM=2 cargar con FFH las posmem 61H y 62H Si MEM=3 cargar con FFH las posmem 61H, 62H y 63H ========================================= Si MEM=9 cargar con FFH las posmem de la 61H a la 69H

Modelo de programacin (IJ

95

o Flujograma

??

Listado
ESTRUCTURAITERATIVA. ITERAO.ASM * Por lo menos el proceso se realiza

(T)

TITLE COMMENT

una vez. *
ORIGIN SYMBOLS MEM CON CODE EQU
EQU

cl
CON <--(MEM) A <--(CON) J1 (60+CON) <--FF 4 DEC (CON) SI 7

7.2.91

0200H ON

MOV

17H 78H CON, MEM

CON SAL: MOV A, #60H ADD A, MOV RO, A MOV @RO, #FFH

DJNZ CON, SAL NOP END

; Se transfiere el contenido de MEM ;aCON ; Cargar acumulador ; Prepara el dir. indexado por soft ; Carga el puntero ; Carga la posmem. correspondiente ; Por lo menos carga una posicin ; de memoria ; Decrementa CON y salta si CON ; no es CERO

En el listado resalta el direccionamiento indirecto para cargar las posmem implicadas en el cambio y tambin la eficacia de la instruccin DJNZ, que decrementa y cambia la secuencia del programa en funcin de que el contador (CON) sea o no distinto de cero. Como se puede ver, no es preciso hacer intervenir al acumulador para decrementar y efectuar el salto condicional.
??

Ejecucin

En la inicializacin del ejercicio, previa a la ejecucin del problema, se observa que en la posmem 77H se carga el dato 05H, por lo que, consecuentemente y despus de ejecutado el programa, aparecen las posmem 61 a 65 cargadas con FFH.
Linking serialport: COMl 9600 baudrate, 8databit, NONEparity Ctrl-CtoreturnDOS, andchangelinkingstatus byediting"USD.INS"

file

96
>I

Introduccin a los Microcontroladores

EP8052V3.2 >DO ITERAO.HEX 0200 Downloadinprocess: Downloadcompleted! >Z 0200020D LOC OBJ 0200 857778 0203 E578 0205 2460 0207 F8 0208 76FF 020A D578F6 020D 00 * DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL B0203

SOURCE MOV MOV ADD MOV MOV DJNZ NOP

CODE 78,77 A,78

A, #CO
RO,A @RO,#FF 78,0203

A continuacin sc inicializan las posmem y se ejecuta el programa:


>MI 77
0077 08 05 007800 > >Iil H1=020D >JO200 >G PROGRAMBROKEATADDRESS020E > >MI6169

Con objeto de establecer las diferencias entre las dos estructuras, se va a realizar el ejercicio anterior, considerando que MEM (77H) toma valores comprendidos entre 0 y 9. Cuando (MEM) toma el valor cero sale del programa sin realizar el proceso, cuando O<MEM<=9 el programa funcionar como en el ejercicio anterior.

Modelo de
??

programacin (l)

97

Flujograma

(,,,,,)
CON <-- (MEM)

NOP

I
??

FIN

Listado

TITLE COMMENT

ESTRUCTURAITERATIVA. ITERI+l.ASM * Puedequenoejecute, proceso 8.2.91 ningunavez, el

* ORIGIN SYMBOLS CODE MEM CON


??? ???

0200H ON

MOV SALO:MOV JZ ADD MOV MOV DEC JMP SAL1:NOP END

77H 78H CON, MEM


A

CON

SAL1 #60H RO, A @RO, #FFH CON SALO


A,

; Se transfiere el contenido de MEM ;aCON ; Cargar acumulador ; No efecta ninguna accin ; si MEM=0 ; Prepara el dir. indexado por soft ; Carga el puntero ; Carga la posmem. correspondiente ; Decrementa CON ; Salto incondicional

98
??

Introduccin a los Microcontroladores

Ejecucin

En la primera ejecucin, cuando la posmem 77H es igual a OOH, el programa aborta sin efectuar ningn cambio en las posmem comprendidas entre 6 1H y 69H. Si (77) +05H, las primeras 5 posmem (de la 6 1H a la 65H) aparecen con todos los bits puestos a uno. >1
EP8052V3.2 >z 0200 0210 LOC OBJ 0200 857778 0203 E578 0205 6009 0207 2460 0209 F8 020A 76FF 02oc 1578 020E 4103 0210 00 DISASSEMBLYCOMPLETED >MI6169 OO 0102 03 04 05 06 07 0060 55 5555 555555 55 55 > >MI 77 l 0077 07 00 007800 > >H10210 >JO200 >G PROGRAMBROKEATADDRESS 0211 >MI 6169 * LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 LABEL B0203 SOURCE MOV MOV JZ ADD MOV MOV DEC AJMP NOP CODE 78,77 A,78 0210

A, #60
RO,A @RO,#FF 78 0203

B0210

08 09 OAOBOCODOEOF 55

ASCII-CODE uuuuuuuuu

>MI

77

0077 00 05 0078 OO > >JO200 >G PROGRAMBROKEATADDRESS 0211 >MI6169

Modelo de programacin (1)

99

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

Enunciado

Si el bit 2 de la posmem 28H (CHE) es igual a cero, entonces en la posmem 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) c- OOH 28.2 = 1 implica que: (7FH) t FFH b7 b6 b5 b4 b3 b2 28.2? bl bO Posmem 28H

??

Flujograma

??

Listado
TITLE COMMENT TESTEODEBITS.TESBITO.ASM * Detecta el estado de unbitparatomardecisiones 9.2.91 * 0200H ON

ORIGIN SYMBOLS CODE CHE RES


EQU EQU

MOV ANL JZ MOV SALO:JNZ MOV SAL1:NOP END

28H 7FH A, A, SALO RES, SAL1 RES,

CHE #04H #FFH

#OO

; Se carga el ACC con el byte a che; quear ; 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

100

Introduccin a los Microcontroladores

Se observa cmo para detectar el bit 2 utiliza el procedimiento general de colocar una mscara (ANL # 04), de forma que esconde todos los bits excepto el que se trata de comprobar, as: 1001 0x10 0000 0100 c- mscara 0000 0x00 ? del estado de este bit depender que se produzca o no un cambio en la secuencia del proceso.
??

Ejecucin

La ejecucin del programa es como sigue: 1. Se carga la posmem 28H (CHE) con 05H (b2 = 1) y se ejecuta el programa. a posmem 7FH (RES) se carga con FFH. 2 . Se carga la posmem 28H (CHE) con OlH (b2 = 0) y se ejecuta el programa. La posmem 7FH (RES) se carga con OOH.
>1

EP8052V3.2 >DOTESBITO.HEX Downloadinprocess: 0200 Downloadcompleted! > >z 0200 02OE LOC OBJ 0200 E528 0202 5404 0204 6003 0306 757FFF 0209 7003 020B 757FOO 020E 00 DISASSEMBLYCOMPLETED >MI28 0028 05 >HlOZOE >JO200 >G PROGRAMBROKEATADDRESS020F >MI 7F

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL

B0209 B020E

SOURCE MOV ANL Li2 MOV JNZ MOV NOP

CODE A,28 A,#O4 0209 7F,#FF 020E 7F,#OO

Modelo de programacin (1)

101

>
>MI28 0028 05 01 0029D5 >JO200 >G PROGRAMBROKEATADDRESS 020F >MI 7F

Cuando se estudiaba el set de instrucciones del 8052/805 1, en el Apartado 4.1. Instrucciones booleanaw, 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 referencia1 para establecer las bifurcaciones.
??

Flujograma

??

Listado
TESTEODEBITS.TESBITl.ASM * En este caso detecta el bit con el modo de direccionamiento especial "bit abit". 9.2.91 * 0200H ON

TITLE COMMENT

ORIGIN SYMBOLS CODE CHE RES EQU EQU SETB ANL JNC MOV 28H 7FH C C, SALO RES,

;Sepone el flagdelCarryaUN0 CHE.2 #FFH

SALO:JC MOV SAL1:NOP END

SAL1 RES, #OO

; 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

102
??

lntroducci% a ios Microconfroladores

Ejecucin

En primer lugar, como en todos los ejercicios, se muestra el desensamblado del programa: >1
EP8052V3.2

>DOTESBITl.HEX
Downloadinprocess: Download completed!
>Z020002OD

0200

LOC 0200 0201 0203 0205 0208 020A 0200 >

OBJ D3 8242 5003 757FFF 4003 757FOO 00 DISASSEMBLY

LINE 0001 0002 0003 0004 0005 0006 0007 COMPLETED

LABEL

B0208 B020D

SOURCE SETB ANL JNC MOV JC MOV NOP

CODE C C,28.2 0208 7F,#FF 020D 7F,#OO

En .la ejecucin del programa se observa que, en primer lugar, se testea el bit2 del byte de informacin 07H y como el bit2 = 1, el resultado, como era de prever, es (7FH t FFH) y cuando el byte de 03H, en este caso el bit2 = 0, el resultado = (7FH t OOH).
>MI28
002807 >HlOZOD

>JO200 >G
PROGRAMBROKEATADDRESS 020E

>MI 7F

>MI 28
0028 07 03 0029D5

>JO200 >G
PROGRAMBROKEATADDRESS 020E >MI7F

Modelo de programacin (l,l

103

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 posmem 70H (CHE), es igual a 63H, pone el bit cero (b0) de la posmem 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 implica que 20.0 w 0 Si (70H) <> 63H implica que 20.0 w 1
??

Flujograma

??

Listado

(Y)
TITLE COMMENT TESTEODEBYTES.TESPALO.ASM * Eneste casodetectaunbyte (carcter)utilizandolainstruccinresta (SUBB). 9.2.91 * 0200H ON

A. SUBB.

63H

ORIGIN SYMBOLS CODE CHE RES

EQU EQU
MOV

70H 20H A,

70H

; Se CARGA el ACC con la posmem a


;chequear ;SeponeelcarryaO

CLR C SUBB A, JZ SETB SALO:JNZ CLR SALl:NOP END SALO RES.0 SAL1 RES.0

#63H

; Resta de posmem CHE la constante


; #63H ; Si es igual a CERO salta ; Si no es igual a CERO, carga con 1 ; el bit0 del byte RES ; . . . y sale del proceso ; Si es igual a CERO, carga con 0 el ; bit0 del byte RES
0200

104
??

Introduccin a los Microcontroladores

Ejecucin

Esta es la operacin de carga del programa en la memoria de emulacin y la operacin de desensamblado: >1
EP8052V3.2 >DOTESPALO.HEX 0200 Downloadinprocess: Download completed! >Z 0200020D LOC OBJ 0200 E570 0202 c3 0203 9463 0205 6002 0207 D200 0209 7002 020B c200 020D 00 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007 0008

LABEL

BOZO9 BOZOD

SOURCE MOV CLR SUBB JZ SETB JNZ CLR NOP

CODE A,70 C A,#63 0209 20.0 020D 20.0

En la ejecucin del programa se observa lo siguiente: 1. Inicialmente el contenido de la posmem 70H es 55H, y el resultado del bit0 de la posmem 20H es uno, despus de la ejecucin del programa. 2. Cuando el contenido de la posmem 70H es 63H, el resultado del bit 20.0 es cero.
>MI 70 007055 >MI 20 OOZOBFOO OO2155 >H1020D >JO200 >G PROGRAMBROKEATADDRESS >MI 20

020E

>MI 70
0070 55 63 007155

>JO200 >G
PROGRAMBROKEATADDRESS >MI20 020E

Modelo de programacin (1)

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 = LECTURABYTE 0 1 1 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 0 = 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, como en el siguiente ejemplo: 0 1 1 0 0 0 1 0 = LECTURABYTE 0 1 1 0 0 0 1 1 = REFERENCIA: 63H 0 0 0 0 0 0 0 1 = RESULTADO

El resultado es distinto de cero.


??

Flujograma

??

Listado
TESTEODEBYTES.TESPALl.ASM * Eneste casodetectaunbyte (carcter) utilizando la instruccin EXCLUSIVE-OR (XRL).

El flujograma de este ejercicio es el mismo que el del ejercicio anterior. Sustituir en el segundo bloque la instruccin A.SUBB.63H por XRL A, # 63H.

TITLE COMMENT

*
ORIGIN SYMBOLS CODE CHE RES
EQU EQU

9.2.91

0200H ON

70H 20H A, 70H #63H

MOV

; Se CARGA el ACC con la posmem a

XRL A,

; chequear ; Operacin EX-OR entre ACC y la


; cte. #63H

JZ
SETB SALO:JNZ CLR SAL1:NOP END

SALO RES.0 SAL1 RES.0

; Si el resultado es igual a CERO salta ; Si no es igual a CERO, carga con 1 ; el bit0 del byte RES > * . . y sale del proceso . ; Si es igual a CERO, carga con 0 el ; bit0 del byte RES

106
??

Introduccin <I los Microcontroladores

Ejecucin

En primer lugar la carga y el desensamblado.


>1 EP8052V3.2 >DOTESPALl.HEX Downloadinprocess: 0200 Downloadcompleted! >Z 0200 020D LOC OBJ 0200 ES70 0202 6463 0204 6002 0206 D200 0208 7002 c200 020A 02oc 00 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL

B0208 B020C

SOURCE MOV XRL JZ SETB JNZ CLR NOP

CODE A,70 A,#63 0208 20.0 02oc 20.0

En la ejecucin se observa: 1. Que el byte a detectar inicialmente situado en la posmem 70H es 55H, por lo que el resultado, despus de la ejecucin es, para el bit 20.0, igual a uno. 2 . Que el byte a detectar despus es 63H, como coincide con el byte de referencia, el resultado del bit 20.0 es cero.
>MI 70 0070 55 >MI 20 0020 00 >H102OC >JO200 >G PROGRAMBROKEATADDRESS 020D >MI20

>MI 70 0070 55 63

Modelo de programacin (1)

107

0070 55 63 007155 >J 0200 >G PROGRAMBROKEATADDRESS 020D x4120

Los ejercicios 6.6 y 6.7 pueden ser resueltos tambin con macroinstrucciones como CJNE A,<byte>,rel estudiada en el apartado 4.2.2, Instrucciones 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.
??

Flujograma
TESPAL2.ASM

COMP.(A)

con

63H

NO (SALO:) L

V
CLR 20.0 SETB l 20.0

108
??

Introduccin a los Merocontroladores

Listado
TITLE COMMENT TESTEODE.BYTES. TESPAL2.ASM * Eneste caso detecta unbyte (carcter) utilizando la instruccin especialdela familia 51 (CJNE). 9.2.91 * 0200H ON

ORIGIN SYMBOLS CODE CHE RES 70H EQU 20H EQU MOV A, CJNE A, CLR RES.0

CHE ; Se carga ACC con el contenido de la variable CHE #63H, SALO ; Compara el contenido del ACC con el dato # 63H y salta

JMP SAL1 SALO:SETB RES.0 SAL1:NOP END

; a SALO, si (ACC) es distinto de # 63H ; En el caso de que sean iguales, pone el bit0 de la posmem ; 20H a CERO ; . . . y salta al final ; Si no es igual a CERO, carga con 1 el bit0 de la posmem ; 20H y finaliza

Se puede observar cmo esta instruccin CJNE compara y salta, presenta un algoritmo similar al Ejercicio 6.6, en donde se utilizaba la operacin resta y una toma de decisin en funcin del resultado.
??

Ejecucin

La ejecucin del programa es similar a los dos apartados anteriores en los que se ha comentado profusamente, por lo que se suprime el comentario en este ejercicio.
>1 EP8052V3.2 >DOTESPAL!.HEX Downloadinprocess: 0200 Download completed! >2 0200 02oc LOC OBJ 0200 E570 0202 B46305 0205 c200 0207 0202oc 020A D200 02oc 00 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006

LABEL

B020A B020C

SOURCE MOV CJNE CLR LJMP SETB NOP

CODE A,70 A,#63,020A 20.0 02oc 20.0

Modelo de programacin (1)

109

>MI 70 0070 55 >MI20 0020 00

>Ii102OC >JO200 >G PROGRAMBROKEATADDRESS 020D >MI20

>MI70 0070 55 63 007155 >JO200 >G PROGRAMBROKEATADDRESS 020D >MI 20

En el siguiente captulo se estudiarn algunas estructuras de inters un poco ms complejas a las vistas en este captulo, pero que se complementan. Al finalizar el estudio del siguiente captulo, ya se puede dar por concluida la etapa de iniciacin en el conocimiento de la familia de Microcontroladores 5 1.

110

Introduccin a los Microcontroladores

Hacer una nueva versin del Ejercicio 6.1 (se sugiere poner por nombre al nuevo tichero ALTERl .ASM) sustituyendo la operacin suma por multiplicacin y la resta por divisin. Estas operaciones se explican en el Apartado 3.5 (instrucciones aritmticas). Seguir los programas ITERA0 e INTERA 1 .ASM paso a paso (instruccin a instruccin), indicando los cambios que se producen en los registros y posiciones de memoria hasta concluir los programas. As, por ejemplo, para el Ejercicio ITERAO.ASM: C O N <--- 0 5 A C C <--- ( C O N ) A C C <--- ACC+OH R O <--- 6 5 H ( 6 5 ) <--- F F H C O N <--- C O N - l

punto anterior por los tres mtodos que se proponen en los Ejercicios 6.6, 6.7 y 6.8. Ahora se deber tratar el dato en formato de byte.
5.

Cargar la posmem 22H con 34H si las posmem 35H y 36H contienen nmeros consecutivos, y si no cumple esta condicin ponerla a cero. Restar las posmem 38H (minuendo) y 39H (sustraendo). Si el resultado es igual o mayor que cero, poner el resultado en la posmem 70H y si es menor, poner la suma de dichas posmem.

6.

7. Complementar a 1 y a 2 el dato contenido en la posmem 60H y depositar el resultado en las posmem 61H y 62H respectivamente. 8. Cargar las posmem 20H a 29H con los diez primeros nmeros ordenados de menor a mayor. 9. Se tiene un grupo de datos situados en las posmem SOH, 52H, 54H, 56H y 58H. Realizar un programa que indique, en la posmem impar siguiente al dato, si el dato que le precede es par o impar. As, si es par, se indicar con OOH, y si es impar, con OlH. Por ejemplo, si el dato situado en la posmem 50H es 85H (impar) en la posmem 5 lH, deber contener 0 1H. Hacer el mismo ejercicio, pero indicando si el dato es positivo o negativo.

(Recurdese que los parntesis se leen como el contenido de...). 3. Realizar lo que se propone en el Ejercicio 6.4 (comprobacin de bits), pero detectar los bits 0 y 7 (X000000X) cargando FFH en RES solamente si ambos bits son 1. Utilizar los dos mtodos que se proponen en dicho ejercicio. 4. Hacer el mismo ejercicio indicado en el

CAPITULO

Modelo de programacin (II)

Como en los ejercicios anteriores, es habitual realizar retardos, aunque, bien es verdad que, los retardos de mayor precisin y los que no impiden a la CPU mantener el control de los perifricos son los retardos producidos con la ayuda de los timers fsicos. El 8052 tiene tres timers programables y el 805 1 dos, pero de su utilizacin y programacin se tratar en captulos posteriores, por lo que en este apartado slo se har referencia a los retardos producidos por software. Para obtener estos retardos recurrimos al algoritmo de cargar varios registros, tantos ms cuanto mayor es el retardo a producir, con valores que son directamente proporcionales al retardo a conseguir. El decremento sucesivo de los mismos de una forma anidada produce estos tiempos de espera. En este ejercicio se utilizan tres registros de 8 bits: el RO, RI y R2, cargados con valores iniciales comprendidos entre FFH y 0 1 H. Naturalmente, si se utilizaran registros de 16 bits, se conseguira mayor efectividad con menos registros implicados. En este caso, cada registro se carga con el valor siguiente: RO t- 55H Rl f- 85H R2 c- FFH consiguiendo un retardo de aproximadamente 6 segundos. Para valores superiores de retardo hay que incrementar la constante de carga de los registros, y para valores todava mayores, aumentar el nmero de registros anidados, como se ha explicado.

111

112
??

Introduccin

los

Microcontroladores

Flujograma

??

Listado
TITLE COMMENT RETARDO. RETARO.ASM * Permite realizar retardos en relacinconlosvaloresque secarguenen los registros RO, RlyR2. 9.2.91 * 0200H ON

ORIGIN SYMBOLS CODE MOV SALO:MOV SAL1:MOV SAL2:DJNZ RO, Rl, R2, R2,

# 5 5H ; Se CARGA el registro RO con # 55H #85H ;SeCARGARl con #85H # FFH ; Se CARGA R2 con # FFH SAL2 ; Decrementa R2 y repite el lazo hasta ; que R2=0 DJNZ Rl, SAL1 ; Lo mismo que la instruccin anterior, ; pero bar cada lazo de RI, ejecuta FFH ; veces el lazo R2 DJNZ RO, SALO ; Lo mismo que las instrucciones ; anteriores, pero por cada vez que ; decrementa RO, decrementa 85H veces ; RI y 85H*FFH veces R2 NOP .) . . . y sale del proceso
END

Obsrvese la estructura de lazos anidados y cmo, para decrementar una vez el registro R 1, debe decrementar FFH veces el registro R2 y cmo, para decrementar una vez RO, debe decrementar 85H veces Rl .
??

Ejecucin

Una vez dada la orden de ejecucin del programa, se observar un retardo en el tiempo de comparecencia en la pantalla del smbolo mayor que (>) que indica la finalizacin del programa. >I
EP8052V3.2 >DO RETARO.HEX Downloadinprocess: Downloadcompleted! >z 0200 02oc LOC OBJ 0200 7855 0202 7985 0204 7AFF 0200

LINE 0001 0002 0003

LABEL B0202 B0204

SOURCE MOV MOV MOV

CODE RO,+55 R1,#85 R2,#FF

Modelo de programacin (Il)

113

0206 0208 020A 02oc

DAFE D9FA D8F6 00 DISASSEMBLYCOMPLETED

0004 0005 0006 0007

B0206

DJNZ DJNZ DJNZ NOP

R2,0206 R1,0204 RO,0202

>Hl H1=020C >JO200 >G PROGRAMBROKEATADDRESS 020D >TIEMPODE RETARDOAPROXIMADAMENTE

SEGUNDOS

Ejercicio7.2. Movimiento de tabb de datos en la memoria externa


En el control de procesos se producen prcticas habituales 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 SO52/805 1 cuentan con unas instrucciones muy potentes que van a ser analizadas. 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 posmem 03 15H a 0380H (pgina 03H), a la pgina 05H, se copiara todo el contenido de la pgina 03 (posmem 0300H a 03FFH) a la pgina 5 (posmem 0500H a OSFFH) y el bloque de datos situado inicialmente en las posmem 0315H a 0380H se encontrar copiado en las posmem 05 15H a 0580H. A continuacin se muestra el flujograma y 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 posmem a copiar (posmem inicial a posmem final) y la direccin de la primera posmem destino, incluso por encima del rango de una pgina de 256 bytes.

FUENTE

COPIA

0300H

0400H

0500H

0600H

114
??

Introduccin a los Microcontroladores

Flujogram

??

Listado
TITLE COMMENT MOVIMIENTO DE TABLAS. MOTABLAO.ASM * Trasladapginas de 256 bytes 9.2.91 * 0200H ON

MOTABLAO.ASM

ORIGIN SYMBOLS

CODE ; RO es elpunteroque recorre las pginas : RleslapginaFUENTE ; R2 eslapginaDESTIN0 MOV RO, # 0 OH ; Inicializa el puntero SALO:MOV DPL, RO ; Carga RO en el byte bajo del DPTR MOV DPH, Rl ; Carga Rl en el byte alio del DPTR

; (FUENTE)
DPH <-- (Rl) 4 A <-- (DPTR) LECTURA

MOVX A, MOV DPH,


MOVX

@DPTR ; Lee byte apuntado por DPTR R2 ; Carga el byte alto del DPTR

@DPTR,A INC RO MOV A, RO JNZ SALO

I-I
DPH <-- (R2) M O V X @DPTR,A

; (DESTINO) ; Escribe byte apuntado por DPTR ; Incrementa puntero ; Carga el ACC para la siguiente ; instruccin ; Busca el siguiente byte en la pgina ; y si es CERO concluye porque ha ; terminado la pgina

NOP END
ESCRITURP I

Modelo de programacin (11)

115

??

Ejecucin

Puesto que este ejercicio utiliza la memoria externa, lo primero que se debe hacer es habilitarla. En nuestro sistema de desarrollo se utiliza la memoria de emulacin (SUEM) como memoria externa (*M E).
>*ME Map: emulationmemoryisenabled >DA >DOMO'lYABLAO.HEX Downloadin process: Downloadcompleted! 0200

>z 0200020E LOC OBJ 0200 7800 0202 8882 0204 8983 0206 EO 0207 8A83 0209 FO 020A 08 020B Ea 02oc 70F4 020E 00 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010

LABEL B0202

SOURCE MOV MOV MOV MOVX MOV MOVX INC MOV JNZ NOP

CODE RO,+=00 DPL,RO DPH,Rl A,@DPTR DPH,RZ @DPTR,A RO A,RO 0202

Se cargan los registros RI y R2 con las pginas fuente y destino, respectivamente.


>
>RRl Rl R2 R3 (01) 00 03 (02)0005 (03) 55

En la pgina 0300H se cargan en sus primeros bytes los nmeros 0, 1, 2, . . . . 9 y en las ltimas posmem de la pgina los nmeros 0, 1, 2, . . . . D, E, F, que han de servir para confirmar que la copia se ha llevado a cabo. Obsrvese cmo se efecta la lectura de la memoria externa con el comando (MX).
>MX0300030F OO 0102 03 04 05 06 07 08 09 OAOBOCODOE OF 0300 30313233343536373839OAOBOCOOFBDF >MX03FO 03FF OO 0102 03 04 05 06 07 08 09 OAOB OC ODOE OF 0300 3031323334353637 3839414243 44 4546 ASCII-CODE 0123456789......

ASCII-CODE 0123456789ABCDEF

116

Introduccin

a los Microcontroladores

Se ejecuta el programa y se comprueba que el traspaso se ha llevado a cabo.


>
>H1020E

>
>JO200 >G PROGRAMBROKEATADDRESS 020F

>
>MX0500050F OO 0102 0500 30 3132 >MX05FO05FF OO 0102 05F0 30 3132 03 04 05 06 07 08 09 OAOBOCODOEOF 33 34 35 36 37 38 39 OAOBOCOOFBDF 03 04 050607 0809OAOBOCODOEOF 33 34 35 36 37 38 39 4142 43 44 4546 ASCII-CODE 0123456789...... ASCII-CODE 0123456789ABCDEF

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. 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/805 1, 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 posmem 60 = situacin

Modelo de
??

programacin (II)

117

Flujograma

??

Listado
TITLE COMMENT CHEQUEODE TABLAS DE DATOS. CHEQUEO.ASM * Busca el carcter marcado dentro del rango de memoria (0300F-03FF) indicando el nmero de los encontrados y sus posiciones. El carcter abuscar esel#23H. Las posmem en las que previamente se haescritodichocarcter son: 0323-0343-03F3 *

INC (DPTR)

0
Rl c-- (DPH)

ORIGIN 0200H SYMBOLS ON CODE #POS ; Apunta el comienzo de la tabla ; de las posmem en las que ; se van a localizar los caracteres ; Se inicializa R2 con 0. ; Contador de carcter ; Se inicializa Rl con 0. ; Contador de tablas ; Se inicializa DPTR con el ; comienzo de la tabla ; Se busca otro carcter

-MOV

E
A <-- (AtDPTR)

R2 I Rl,

#OOH #OOH

MOV MOV

DPTR, #02FFH

I
INC (RO)

SALO:INC DPTR MOV Rl, DPH CJNE Rl, # 03H, SAL1 ; Si se termina la tabla 03xx sale ; del proceso #OOH ; El ACC apunta al registro R3 MOV A, ; que est a CERO MOVC A, @A+DPTR ; Se LEE el carcter y se carga ; en el ACC. # 2 3 H , SALO ; Si el carcter no es # 23H busca CJNE A, ; siguiente INC R2 ; Si el carcter es # 23H ; incrementa contador ; Apunta pos. de mem. (H) MOV @RO, DPH ; localizacin carcter INC RO ; Apunta posmem (L) MOV @RO, DPL ; localizacin carcter INC RO JMP SALO ; Busca otro carcter para ; evaluar SAL1:NOP END

118
??

I n t r o d u c c i n o l o s Mcrocontrolodores

Ejecucin

Despus del desensamblado se introduce el dato 23H en las posmem 0323H, 0343H y 03F3H, que el programa deber descubrir, y tambin se ponen a cero las posmem a partir de la 60H.
>1

EP8052V3.2 >DOCHEQUEO.HEX Downloadcompleted! > >Z 0200 021E LOC OBJ 0200 7860 0202 7AOO 0204 7900 0206 9002FF 0209 A3 020A A983 02oc B9030F 020F 7400 0211 93 0212 B423F4 0215 OA 0216 A683 0218 08 0219 A682 021B 08 021c 4109 021E 00 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017

LABEL

B0209

B021E

SOURCE MOV MOV MOV MOV INC MOV CJNE MOV MOVC CJNE INC MOV INC MOV INC AJMP NOP

CODE RO,#60 R2,#00 Rl,#OO DPTR,#02FF DPTR Rl,DPH R1,#03,021E A, #OO A,@A+DPTR A,#23,0209 R2 @RO,DPH RO @RO,DPL RO 0209

>
>M0323 0323 23
>M 0 3 4 3 0343 23

>M03F3 03F3 23

>
>MI 60 6F OO 0102 03 04 05 06 07 08 09 OAOBOCODOE OF 0060 00000000000000000000000000000000 ASCII-CODE . . . .......... .

Esta vez en la ejecucin se ha establecido una diferencia respecto a las de anteriores ejercicios y es que se ha colocado un punto de ruptura del programa en la posmem 02 11 H, pero en la pasada o vuelta nmero lOOH, que es justo cuando el programa realiza la salida del mismo, porque ha llegado a su fin. Esta circunstancia se aprovecha

Modelo de programacin (ll)

119

para hacer un seguimiento de las ltimas instrucciones paso a paso, observando los registros.
>H10211100 >JO200 >G PROGRAMBROKEATADDRESS 0212 >SR IFADDRADDRESSDATA SOURCECODE C J N E A,#23,0209 0212 0212 B4 ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 (EO)(FO)(DO)(8l)(83)(82) 02 OO 81 40 03 FF 6603030055EODO02 0209 0209 A3 INC DPTR ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 (EO)(FO)(DO)(8l)(83)(82) 02 OO 81 40 04 OO 6603 030055EODO02 020A 020A A9 MOV Rl,DPH ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 (EO)(FO)(DO)(8l)(83)(82) 02 OO 81 40 04 OO 6604 030055EODO02 02oc 02OC B9 CJNE R1,#03,021E ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 (EO)(FO)(DO)(8l)(83)(82) 02 OO 01 40 04 OO 66 04 03 OO 55EODO02 021E 021E OO NOP ACC B PSW SP DPH DPL RORlR2R3R4R5R6R7 (EO)(FO)(DO)(8l)(83)(82) 02 OO 01 40 04 OO 660403 0055EODO02

PSW PC CAFBBO-P 100000010209 PSW PC CAFBBO-P 10000001020A PSW PC CAFBBO-P 10000001020c PSW PC CAFBBO-P 00000001021E PSW PC CAFBBO-P 00000001021F

Una vez concluido el programa, se buscan las soluciones. En el registro R2 se encuentra el dato que nos dice el nmero de veces que apareci el dato 23H, y a partir de la posmem interna 60H, indica en qu posmem estaba situado el dato.
>
>RR2

>MI 60 6F OO 0102 03 04 05 06 07 08 09 OAOBOCODOE OF 0060 0323 03 43 03 F3 OO OO OO 000000 OO OO OO OO

ASCII-CODE .#.C . . . . . . . . .

120

Introduccin a los Microcontroladores

En cualquier programa aparecen bloques repetitivos que repercuten en su crecimiento y, por tanto, en la memoria utilizada y en la claridad y sencillez de interpretacin para revisarlo, ampliarlo o estudiarlo. Dada la importancia del tema se proponen dos mtodos de trabajo con las subrutinas: METODO 1: Incluir en el mismo archivo el programa principal y las subrutinas. METODO 2: Crear un fichero para el programa principal y otro/s para las subrutinas. Un ejemplo muy sencillo, pero demostrativo de la utilizacin de las subrutinas, es el ejercicio que se propone a continuacin resuelto por los dos mtodos. Se pide escribir en memoria el nmero, permtasenos llamarlo as, mgico, del Microcontrolador 8052, a partir de la posmem 60H de la memoria interna, pero incluyendo entre las cifras un guin (-), as 8-O-5-2.
??

Flujograma (+z)
CALL GUION

JI
RO <-- PUNTERO ESCRIBIR 5 JI ESCRIBIR 8 CALL GUION J1 CALL GUION ESCRIBIR 4 ESCRIBIR 0 2 ESCRIBIR - INC PUNTERO

1 0

JI

cl (i
INC PUNTERO RET

Modelo de programacin (ll)

121

Resuelto por el mtodo 1:


??

Listado
TITLE COMMENT SUBRUTINAS. * SUBRUO.ASM Escribecaracteresylos separaconunguin. Esteguines una subrutina 16.2.91

* ORIGIN SYMBOLS CODE PUN EQU GUION EQU MOV MOV CALL MOV CALL MOV CALL MOV NOP 60H 0300H RO, #PUN @RO, #38H GUION @RO, #30H GUION @RO, #35H GUION @RO, #32H 0300H #2DH 0200H ON

; Inicializa el puntero ; Carga en la posmem PUN el carcter decimal 8 ; Llama a la subrutina GUION ; Carga en la posmem PUN + INC el carcter 0 ; Carga en la posmem PUN + INC el carcter 5 ; Carga en la posmem PUN + INC el carcter 2

ORIGIN INC RO MOV @RO, INC RO RET END

; Incrementa RO = PUN + 1 ; Carga en la posmem PUN + INC el carcter - ; Prepara la posmem para depositar el siguiente ; Retorno al programa principal

Obsrvese que tanto el programa principal como la subrutina forman un nico programa, con el matiz de que el programa principal comienza en la posmem 0200H y la subrutina en la posmem 0300H. Resuelto por el mtodo 2:
??

Listado

Con este mtodo se abre un fichero para contener el programa principal (PROGRA.ASM)...
TITLE COMMENT PROGRAMAPRINCIPAL. PROGRA.ASM

* En este ejercicio se separa el PROGRAMAdela SUBRUTINA. 16.2.91 *

122

Introduccin
ORIGIN SYMBOLS CODE

los

Microcontroladores

0200H ON

PUN EQU GUION EQU MOV MOV CALL MOV CALL MOV CALL MOV NOP END

60H 0300H RO, @RO, GUION @RO, GUION @RO, GUION @RO,

#PUN #38H #30H #35H #32H

; Inicializa el puntero ; Carga en la posmem PUN el carcter decimal 8 ; Llama a la subrutina GUION ; Carga en la posmem PUN + INC el carcter 0 ; Carga en la posmem PUN + INC el carcter 5 ; Carga en la posmem PUN + INC el carcter 2

y otro archivo/s para cada subrutina, en este caso (SUBRU.ASM)


TITLE COMMENT SUBRUTINA. SUBRU.ASM * Esta es una SUBRUTINA perteneciente al programaPROGRA.ASM. 16.2.91 * 0300H ON

ORIGIN SYMBOLS CODE INC RO MOV @RO, #2DH INC RO RET END

; Incrementa RO = PUN + 1 ; Carga en la posmem PUN + INC el carcter - ; Prepara la posmem para depositar el siguiente ; Retorno al programa principal PROGRAM

En el primer caso se ensambla y enlaza el nico archivo como se ha estado realizando hasta ahora y, segn el mtodo 2, se ensamblan separadamente, obteniendo dos archivos:

PRoGuAsh4
SUBRU.ASM

--+ PROGRA.OBJ __, SUBRU.OBJ

La operacin de enlace se efecta en el enlazador (linker) como se indica a continuacin. Obsrvese cmo se adicionan los dos archivos para crear un nico archivo al que se llama FUSION. PROGRA.OBJ + SUBRU.OBJ w FUSION.HEX

Modelo de programacin (ll)

c:>
LINK 2500A.D.Linker Input Input Input Output Copyright(C)1985 Version4.05a :O :o

Filename : PROGRA. OBJ Enter Offset For 'CODE' Filename : SUBRU. OBJ EnterOffset For 'CODE' Filename : Filename : FUSION :

Library Filename

Options (D, P, S, A, M, N, 8, X, H, E, T, 1, 2, 3, Linker Output Filename Disk Listing Filename Symbol Table Filename LinkErrors : 0

<CR>=Default) :

: FUSION.hex : <NoneSpecified> : <None Specified> IntelHex

Output Format :

??

Ejecucin

Para ejecutar el programa, primero debe cargarse en la memoria del microcontrolador. Esta operacin, realizada por el mtodo 1, se lleva a cabo como siempre:
>DOSUBRUO.HEX Downloadinprocess: 0300 Download completed! > >z 0200 0210 LOC OBJ 0200 7860 0202 7638 0204 7100 0206 7630 7100 0208 020A 7635 02oc 7100 020E 7632 0210 00 DISASSEMBLYCOMPLETED >z 0300 0304 LOC OBJ 0300 08 0301 762D 0303 08 0304 22 DISASSEMBLYCOMPLETED >

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009

LABEL

SOURCE MOV MOV ACALL MOV ACALL MOV ACALL MOV NOP

CODE RO,+60 @RO,+38 0300 @RO,#30 0300 @RO,+35 0300 @RO,+32

LINE 0001 0002 0003 0004

LABEL

SOURCE INC MOV INC RET

CODE RO @RO,#2D RO

124

Introduccin a los Microcontroladores

Utilizando el mtodo 2: >!


EP8052V3.2 >DOFUSION.HEX Download completed! >z 02000210 OBJ LOC 0200 7860 0202 7638 7100 0204 0206 7630 0208 7100 020A 7635 02oc 7100 020E 7632 0210 00 DISASSEMBLYCOMPLETED >zo300 0304 LOC OBJ 0300 08 0301 762D 0303 08 0304 22 DISASSEMBLYCOMPLETED >

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009

LABEL

SOURCE MOV MOV ACALL MOV ACALL MOV ACALL MOV NOP

CODE RO,#60 @RO,#38 0300 @RO,+30 0300 @RO,#35 0300 @RO,#32

LINE 0001 0002 0003 0004

LABEL

SOURCE INC MOV INC RET

CODE RO @RO,#2D RO

Este es el resultado de la ejecucin:


>JO200 >Ii10210 >G PROGRAMBROKEATADDRESS 0211 >MI60 66 OO 0102 03 04 05 06 07 08 09 OAOBOCODOEOF 0060 >

ASCII-CODE

Modelo de programacin (11)

125

Finalmente, para terminar con este apartado dedicado al modelo de programacin del 8052/805 1, se dedica un ejercicio al manejo de las instrucciones de acceso a la memoria de pila y a 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, sino 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 posmem 08H. En este ejercicio, como se puede ver en la primera instruccin del programa, la pila se direcciona a partir de la posmem 40H y en sentido creciente. iPor qu utilizar la pila? Porque el registro de rotacin y el contador de rotaciones que se necesitan para este ejercicio utilizan el mismo registro fsico, el acumulador (ACC). Para conseguir esta capacidad del acumulador se utiliza la pila, que permite salvaguardar los valores de los registros, en este caso concreto del acumulador. Es innegable que si se necesita un contador se recurre directamente a uno de los registros de trabajo, pero se ha preferido hacerlo as para ver las caractersticas de la pila. El ejercicio planteado pretende que un dato como 0 1 H realice una rotacin completa y que finalice en la misma posicin con la que empez o, 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. b7 0 b6 0 b5 0 b4 0 b3 b2 bl b0

Despus de ocho rotaciones, en el sentido de las flechas, el registro tendr el mismo valor. Recurdese que hay otra instruccin que implica en la rotacin al carry y que junto con las instrucciones de salto condicional (alternativa), constituye una herramienta muy importante para la toma de decisiones. Adems estn las instrucciones de rotacin a la derecha con carry y sin l, en este caso no se implica en la rotacin al carry.

126
??

htroduccin a los Microcontroladores

Flujograma

??

Listado
TITLE COMMENT GESTION DE ROTAO.ASM LA PILA Y ROTACIONES.

* Utiliza el Acumulador como registro contadorycomoregistroderotacin. Para conseguir estos resultados debe de gestionarla guarda delos valores enlamemoriade pila. 23.2.91
*

(41)~.- OOH

(PUSH A)

ORIGIN SYMBOLS CODE REF ROT


EQU EQU

0200H ON

j.
A <-- (ROT)

4
RLA

JROT<-- A

j.
A <-- (41) (POPA)

4
INC (A)

4
(41) c--A j. A <-- (ROT) (PUSH A)

j.

; Inicializacin de la pila en rea ; SCRATCH-PAD ; Carga del ACC con OOH MOV A, #OOH ; Se guarda en la pila. Inicializacin PUSH A ; del CONTADOR ; Se inicializa el registro de MOV REF,#OlH ; REFERENCIA ; Se inicializa el registro de MOV ROT,REF ; ROTACION ; Se carga el ACC con el valor de ROT MOV A, ROT ; Rotacin a la izda. del ACC SALO:RL A ; Se salva el contenido de ACC una ROT,A MOV ; vez ; rotado ; Recupera valor contador. El ACC POP A ; es ahora contador ; Incrementa CONTADOR INC A ; Guarda contador en la PILA PUSH A ; Recupera el dato rotado MOV A, ROT CJNE A, REF, SALO; Compara ACC con REF para salir ; del programa cuando sean iguales
MOV NOP END

70H 6FH SP, #40H

Modelo de programacin (Il)

127

??

Ejecucin

Una vez cargado el programa en la memoria del microcontrolador, se efecta un desensamblado y se procede a la ejecucin paso a paso, hasta completar el primer ciclo de programa. A partir de esta posmem 02 lOH, se procede a la ejecucin normal, simplemente pulsando (G), habiendo colocado previamente un punto de ruptura en la posmem 02 1 CH. La visin de los registros demuestra que el acumulador ha quedado cargado con el mismo valor que tena al comenzar la rotacin v aue el contador de rotaciones (posmem 4 1 H) seala ocho rotaciones.
>1 EP8052V3.2 >DOROTAO.?IEX Downloadinprocess: 0200 Download completed! > >z 0200 021c LOC OBJ 0200 758140 0203 7400 0205 COEO 0207 757001 020A 85706F 020D E56F 020F 23 0210 F56F 0212 DOEO 0214 04 0215 COEO 0217 E56F 0219 B570F3 021c 00 DISASSEMBLYCOMPLETED >JO200 >SR IFADDRADDRESS DATA 75 0200 0200 ACC B PSW SP DPH DPL (EO)(FO)(DO)E8l)(83)(82) 01 OO 01 40 OO OO 74 0203 0203 ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) OO OO OO 40 OO OO CO 0205 0205

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014

LABEL

B020F

SOURCE MOV MOV PUSH MOV MOV MOV RL MOV POP INC PUSH MOV CJNE NOP

CODE SP,#40 A, #OO ACC 70,#01 6F,70 A,6F A 6F,A ACC A ACC A,6F A,70,020F

SOURCECODE M O V SP,#40 RORlR2R3R4R5R6R7 7502 57 55 55 55 5500 MOV A, #OO RORlR2R3R4R5R6R7 7502575555555500 PUSH ACC

PSW CAFBBO-P

PC

000000010203 PSW PC CAFBBO-P 000000000205

128

Introduccin a los Microcontroladores

ACC B PSW SP DPH DPL (EO)(FO)(DO)(81)(83)(82) 00 00 00 41 00 00 0207 0207 75 ACC B PSW SP DPH DPL RO (EO) (FO (DO)(81)(83)(82) 00 00 00 41 00 00 020A 020A 85 ACC B PSW SP DPH DPL RO (EO) (FO (DO)(81)(83)(82) 00 00 OO 41 OO OO 020D 020D E5 ACC B PSW SP DPH DPL
(EO)(FO)(DO)(8l)(83)(82)

RORlR2R3R4R5R6R7 7502575555555500 M O V 70,#01 RlR2 R3 R4 R5 R6 R7 7502575555555500 MOV 6F,70 RlR2 R3 R4 R5 R6 R7 7502575555555500 MOV A,6F RO RlR2 R3 R4 R5 R6 R7 7502575555555500 RL A RORlR2R3R4RSR6R7 7502 575555555500 MOV 6F,A RORlR2R3R4R5R6R7 7502575555555500 POP ACC RORlR2R3R4R5R6R7 7502575555555500 INC A RORlR2R3R4R5R6R7 7502575555555500 PUSH ACC RORlR2R3R4RSR6R7 7502575555555500 MOV A,6F RORlR2R3R4R5R6R7 7502575555555500 CJNE A,70,020F RORlR2R3R4R5R6R7 7502 57 55 55 55 5500 RL A RO RlR2 R3 R4 R5 R6 R7 7502 57 55 55 55 5500

PSW PC CAFBBO-P 000000000207 PSW CAFBBO-P 00000000 PSW CAFBBO-P 00000000 PC 020A PC 020D

- 01 00 01 41 00 00 020F 020F 23 ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) -02 0 0 01 41 00 00 0210 0210 F5 ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 02 00 01 41 00 00 0212 0212 DO ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 00 00 00 40 00 00 0214 0214 04 ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 01 00 01 40 00 00 0215 0215 CO ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 01 00 01 41 00 00 0217 0217 ES ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 02 00 01 41 00 00 '0219 0219 B5 ACC B PSW SP DPH DPL (EO)(FO)(DO)(8l)(83)(82) 02 00 01 41 00 OO 23 DPH DPL )(83 )(82) 04 00 01 41 00 OO

PSW PC CAFBBO-P 00000001020F PSW PC CAFBBO-P 000000010210 PSW PC CAFBBO-P 000000010212 PSW PC CAFBBO-P 00000000 0214 PSW PC CAFBBO-P 000000010215 PSW PC CAFBBO-P 000000010217 PSW PC CAFBBO-P 000000010219 PSW PC CAFBBO-P 00000001020F PSW PC CAFBBO-P 000000010210

>G

, Modelo de programacin (ll)

129

PROGRAMBROKEATADDRESS 021D

>R
B PSW SP DPH DPL RO RlR2 R3 R4 R.5 R6 R7 (FO)(DO)(81)(83)(82) OO 01 41 OO OO 7502 575555555500 >MI 41 PSW PC CAFBBO-P 00000001021D

En el acumulador se encuentra el dato despus de ocho rotaciones. El nmero de rotaciones se lee en la primera posmem de la memoria de pila.

1. Realizar el clculo del retardo en funcin del contenido de los registros y del tiempo de ejecucin de las instrucciones correspondientes en el Ejercicio 7.1, Retardo por software, considerando que la frecuencia de reloj del microcontrolador que ejecuta este programa es de 12MHz. Nota: Como se indica en el ejercicio, el tiempo aproximado es de 6 segundos y los valores de los registros son: RO = 55H RI = 85H R2 = FFH 2 . Realizar una nueva versin del Ejercicio 7.2 MOTABLAO.ASM con las siguientes condiciones: a) En dos registros o posmem indicar - posmem de comienzo y posmem final de la tabla de datos a copiar. b) En un registro o posmem indicar primera posmem destino de la tabla. 3 . Se tiene una tabla de datos, en la memoria de programas, de la posmem 1000H a 1050H. Escribir un programa para buscar el dato de mayor valor de la tabla y situarlo en la posmem 60H de la memoria RAM interna. 4 . En la tabla del ejercicio anterior, determi-

nar el nmero de datos pares e impares. Colocar el nmero de datos pares en la posmem 50H y el de los impares en la 5 1H. Hacer el mismo ejercicio considerando esta vez los datos positivos y negativos. Realizar una suma de dos nmeros de 16 bits. el primer sumando se encuentra en las posmem 60H (byte bajo) y 6 1 H (byte alto) y el segundo en las posmem 62H (byte bajo) y 63H (byte alto). El resultado se sita en la posmem 64H (byte bajo), 65H (byte alto) y 66H (posible acarreo). Realizar el ejercicio anterior en mltiple precisin con datos y resultados en decimal codificado en binario (BCD). Convertir diez nmeros codificados en ASCII en decimal. Los nmeros estn situados en las posmem comprendidas entre la 60H y 69H. Colocar los resultados en las posmem 70H y 79H. Nota: Utilizar una rutina para la conversin del nmero ASCII en decimal. Realizar el ejercicio anterior modificando la rutina de conversin. En esta ocasin: a) Conversin de caracteres ASCII a nmeros en hexadecimal. b) Conversin de nmeros en hexadecimal a caracteres ASCII.

CAPITULO

Control de perifricos. Puertos de Entrada/Salida

8.1. INTRODUCCION
En el Captulo 1 se describa la arquitectura de los puertos de entrada y salida (E/S) de la familia de Microcontroladores 5 1. 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/805 1 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.

8.2.

EL MICROCONTROLADOR COMO MICROPROCESADOR

Los drivers de salida de los Puertos PO y P2 y los bz@rs de entrada del Puerto PO se pueden utilizar para acceder a la memoria externa del sistema. En estas condiciones, el Puerto PO se configura como salida del byte bajo del bus de direcciones (AO a A7), de un bus que consta de 16 bits (capacidad de direccionamiento 64K), multiplexado en el tiempo como bus de datos bidireccional (DO a D7). El Puerto P2 se configura como salida del byte alto del bus de direcciones (A8 a A 15). De esta manera el 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 PI y parte del Puerto P3, puesto que hay seales que se utilizan para el control del sistema (bus de control). En la Figura 8.1 se muestran los cronogramas correspondientes a un ciclo de lectura en la memoria externa de programas y a un ciclo de lectura y escritura en la memoria de datos externa. Tambin, se hace referencia a los parmetros representados en la Figu-

130

Control de perifricos. Puertos de Entrada/Salida

FORMA DE ONDA ENTRADA SALIDA


DEBE SER MANTENIDA PUEDE CAMBIAR D E H A L PUEDE CAMBIAR DELAH SE PERMITE CUALQUIER CAMBIO No SE APLICA %YT%c? * DESCONOCIDO LA LINEA DEL CENTRO ESTA EN ALTA IMPEDANCIA

SERA MANTENIDA ESTARA CAMBIANDO ESTARA CAMBIANDO DE H A L DELAH I-TLHLL-I

TAVIV Ai

PUERTO 2
A) Ciclo

I x
de Lectura en

AB-Al5 .
Memoria de

A8-Al5
Externa

Programas

ALE PSEN

PUERTO 0 'UERTO 2
B) Ciclo de Lectura en Memoria de Datos Externa

ALE PSEN
-

\,
-TLHLL-

/ /
- TLLWL-------TwLwH,

WR

PUERTO 0 PUERTO 2

/ x
C)

P2.0-P2.i' 0 A8-Al5 DESDE EL DPH


Ciclo de Escritura en Memoria -de

x A8-Al5 DESDE EL PCH


Datos Externa

Figura 8.1.

132

Introduccin a los Microcontrokrdores

ra 8.1 y en el Cuadro 8.1, sin hacer mencin a los tiempos reales que dependen del tipo de microcontrolador y de la frecuencia de trabajo. Para una mayor informacin solicite a su vendedor las hojas de caractersticas en donde se establecen los tiempos de los parmetros segn condiciones y las caractersticas elctricas de las seales. Para un mejor entendimiento y seguimiento de los cronogramas anteriores, en la Figura 8.2 se dibuja un esquema en el que aparece el microcontrolador comandando una memoria RAM (43256C) y una memoria EPROM (2764).
Cuadro 8.1. TLHLL ALE @se Width (Anchura pulso ALE) 1 I

I
I

TAVLL Addmss Valid to ALE Low (Direccin vlida a ALE baio) TLLAX ~ )Addmss Hold After ALE Low (Direccin mantenida despus de ALE bajo) TLLIV TLLPL TPLPH TPLIV ALE Low to Valid Instruction In (ALE bajo a Instr. In. valida) ALE Low to PSEN Low (ALE bajo a PSEN bajo) PSEN Pulse Width (Anchura pulso PSEN) PSEN Low to Valid Instruction In (PSEN baio a Instr. In. vlida) 1Input 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 baio a bus direccin flotante 1RD Pulse Width / Anchura del pulso de lectura
I

TPXIX TPXIZ TPXAV TAVIV TPLAZ TRLRH TWLWH TRLDV TRHDX TRHDZ TLLDV TAVDV TLLWL TAVWL TQVWX TQVWH 1 TWHQX TRLAZ TWHLH

I
1

1WR 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 Ploat 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 I%D or WR Low / Direccin a RD o WR bajo
I

Data Valid to WR Transition / Dato vlido a transicin WR I

( Data Valid to WR High / Dato vlido a WR alto 1Data 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)

Control de perifricos. Puertos de Entrada/Salida

133

Antes de continuar con la lectura de este apartado, conviene, repasar los tres primeros apartados del Captulo 2. 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.

8.2.1.

Ciclo de lectura en la memoria externa de programas

Para acceder a la memoria externa de progamas utiliza la seal PSEN (Program Store Enable) como seal de autorizacin de lectura (Figuras 8.1 (A) y 8.2). La seal ALE latchea el byte bajo del bus de direcciones en el primer estado (ciclo de reloj), y as permite direccionar, durante 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 8.2 se puede observar que la lectura en la memoria de programas se realiza cuando PSEN est a nivel bajo y las lneas A13, AI4 y Ai5 se encuentran a nivel alto, siendo el resto de las lneas de direccin las que establecen la posmem exacta del byte de instruccin u operando que ha de ser ledo. 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 A 15=A 14=A 13= 1, concretamente comienza en la posmen ll 10.0000. 0000.0000=EOOOH y termina en la posmen FFFFH, en total 8 Kbytes. Si el usuario escribe en el Puerto PO durante el ciclo de bsqueda en la memoria externa, el byte de cdigo puede ser modificado. Se recomienda no escribir en el Puerto PO si es utilizado para leer en la memoria de programa externa. A la memoria de programas externa se accede bajo dos condiciones: 1. Cuando la sena1 % es activa, caso de la Figura 8.2. 2 . Cuando el contador de programa (PC) contiene un nmero ms grande que OFFFH para el 8051 o 1FFFH 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.

8.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 8.1(B)). En un ciclo de lectura el byte de entrada es aceptado en el Puerto PO justo antes de que la seal de control RD que autoriza la lectura sea desactivada.

Control de perifricos. Puertos de Entrada/Salida

135

8.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 8.1 .(C)). t-NY. En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto PO antes y waw 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). No se insiste ms en este tema por considerar que la potencia de los 8052/8051 se produce cuando trabajan como microcomputadores monopastilla (microcontrolador) y a ese aspecto se refieren los ejercicios que se muestran a continuacin. No obstante no se debe desdear la importancia que puede tener en algunas aplicaciones especiales como microprocesador. Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface, los puertos quedarn en esta situacin: PO: Bus de direcciones de menos peso (AO a A7) y bus de datos (DO a D7) multiplexados en el tiempo. Pl: Puerto de E/S. P2: Bus de direcciones de ms peso (A8 a A 15). P3: Bus de control.

8.3.

OPERACION DE ESCRITURA EN LOS PUERTOS DE LOS MICROCONTROLADORES 8052/8051

La operacin de escritura, utilizando los puertos del 8052/805 1, puede ser realizada por cualquiera de ellos; no obstante, el Puerto PO 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 lutch del puerto, el nuevo valor llega al Zutch durante el estado 6, fase 2 del final del ciclo de instruccin, segn indica la Figura 8.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 8.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, e inversores, como el ULN 2803, que tienen una cargabilidad de 500 mA y soportan hasta 50 v. Como ya se sabe, el 8052/805 1 presenta dos seales de control, una para ejecutar la

Control de perifricos. Puertos de Entrada/Salida

137

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 PO, pero el usuario puede comprobar que el programa funcionar igual si sustituye el Puerto PO por el Pl, 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 PO a CERO. ?? Se incrementa el acumulador y se transfiere al Puerto PO, por lo que el contenido de dicho puerto se incrementar, as hasta contar hasta 5. ?? Direccionando directamente los bits 0 y 2 del Puerto PO, que en la ltima operacin haban quedado a UNO, se ponen a CERO. En este instante todos los bits de PO estn a CERO. ?? Se pone a UNO el bit 7 de PO y con direccionamiento inmediato se carga PO con 55H. ?? Finalmente, se complementa (operacin lgica NOT) la informacin de PO 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 7.1, con la diferencia del valor asignado al registro RO y, tambin, que dicha rutina se ubica a partir de la posmen 0300H para que no coincida con el programa principal.

Control de perifricos. Puertos de Entrada/Salida

139

DJNZ Rl,

SAL1

DJNZ RO,

SALO

; Lo mismo que la instruccin an; terior, pero por cada lazo de R 1, ; ejecuta FFH veces el lazo R2 ; Lo mismo que las instrucciones ; anteriores, pero por cada lazo de ; RO, ejecuta 85H lazos de Rl y ; 85H*lTH lazos de RO

NOP RET END

Se considera que la carga y ejecucion del programa ya han sido comentados suticientemente en ejercicios anteriores.

8.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<DATO>, PX ;

<DATO> t- PX

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 que aqu se exponen; no obstante, tiene el problema de los rebotes (Figura 8.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 8.6). Si tiene un entrenador de circuitos lgicos podr comprobar sin ningn reparo todos los ejercicios que se hacen y se proponen en este libro.

Este ejercicio trata de mostrar cmo se manipula el Puerto PO para utilizarlo como entrada y el Pl como salida, de tal forma que la informacin leda por el Puerto PO y despus de ser tratada adecuadamente sale escrita por P 1. En este caso cqncreto, la informacin leda por PO sale intacta por el Puerto PI. En la Figura 8.7 se muestra la disposicin de ambos puertos.

140

Introduccin a los Microcontroladores

a052/51 a l pin del

Figura 8.5.

220 R

Figura 8.6.

Control de perifricos. Puertos de Entrada/Salida

141

8052/51
-+ P0.7 -P1.7 P1.6 -+ -W

- P1.5 -+ C.P.U. P1.4 -+ A P1.3 --+ - P1.2 ---+ -+ P0.1 P1.l ---+ P1.O --+ k. A

Figura 8.7.

??

Flujograma

??

Listado

>
>Z 0200,0204 LOC OBJ LINE LABEL B0200 0200 E580 0001 0002 0202 F590 0003 0204 4100 DISASSEMBLY COMPLETED > SOURCE MOV MOV AJMP CODE A,!?O P1,A 0200

Escrib; Pl

142

Introduccin

los

Microcontroladores

Este programa se ha escrito y ensamblado directamente con el ensamblador directo del emulador. Para este tipo de programas tan sencillos resulta ms til este ensamblador elemental, como se explic en el Captulo 5. A partir de este momento, casi todos los programas que se utilicen para demostrar algn aspecto o caracterstica de un subsistema del microcontrolador sern realizados con el ensamblador directo. No obstante, en algunas ocasiones, por la complejidad del programa o por la necesidad de adjuntar comentarios al margen de las instrucciones, se utilizar el macroensamblador. En la lnea 0001, se lee la informacin del Puerto PO (entrada) y se carga en el acumulador. En la lnea 0002, se carga el Puerto PI (salida) con el contenido del acumulador. En la lnea 0003, se hace un salto incondicional al comienzo del programa para efectuar una nueva lectura.

Este ejercicio muestra cmo se puede realizar la operacin de lectura y escritura por el mismo Puerto PO. Para ello dividimos el Puerto PO en dos nibbles, el nibble bajo (PO.0 a P0.3) leer la informacin que sacar por el nibble alto (PO.4 a P0.7) (Figura 8.8).

8052/5 1
f- P 0 . 7 f- P 0 . 6 f- P 0 . 5 f- P 0 . 4 C.P.U.

I --+ P 0 . 2

Figura 8.8.

Control de uerifricos. Puertos de Entrada/Salida


??

143

Flujograma

??

Listado

>
>Z 0200,0205 LOC OBJ LINE LABEL 0200 E580 0001 B0200 0202 c4 0002 0203 F580 0003 0205 4100 0004 DISASSEMBLY COMPLETED >
INTERCAMBIO de:

SOURCE MOV SWAP MOV AJMP

CODE A,PO A PO,A 0200

nibble alto PO

En la lnea 1, se hace la lectura del Puerto PO y su contenido pasa al acumulador. En la lnea 2, se intercambian los nibbles. En la lnea 3, el contenido del acumulador se carga en el Puerto PO, con lo que la lectura del nibble bajo pasar al nivel alto del Puerto PO, y viceversa. La lnea 4 es un salto incondicional al comienzo del programa.

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. Angula 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/805 1.
??

Proceso

Se trata de controlar el nivel de lquido de un depsito, utilizando tres sondas detectoras de niveles A, B y C, y dos bombas BI y B2 (Figura 8.9).

Introduccin a los Microcontroladores

Alarma Rebose 2 !2 3 ADAS p Lleno Vacio Bomba 2 Bomba

Figura 8.9. 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: Entrada de informacin: SENSORES (sondas). Actuacin sobre los elementos finales: ACTUADORES. ?? Sealizacin del proceso: 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 PO. PO.0 t- A PO.1 +-B PO.2 f- c

Control

de perifricos.

Puertos de Entrada/Salida

145

2. ACTUADORES (salidas) Cuando ninguna de las sondas est mojada, se entiende que el depsito est vaco y los actuadores activarn las dos bombas B 1 y B2 (P 1 .O y P 1.1). Cuando el nivel del lquido toque la sonda B, se desactivar la bomba B2 (P 1 .O t 0), quedando la bomba B 1 activada en modo mantenimiento. Si el nivel del lquido moja la sonda C (rebose), se desactivar la bomba Bl, quedando las dos bombas, de momento, fuera de servicio. 3. INDICADORES (salidas) La sealizacin utiliza el Puerto PI. PI .2 t- VACIO P1.3 t-LLENO P1.4 t- REBOSE Y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada -por ejemplo, que la sonda B (PO.l) se active cuando la A (PO.O), por debajo de la B, no lo est- se excita en el cuadro de indicadores una seal de ALARMA. P1.5 + ALARMA La Figura 8.10 muestra la disposicin de los actuadores, indicadores y sondas.
MICROCONTROLADOR 6052 /5 1

P0.7 P0.6 P0.5 P0.4 P0.3 C.P.U.

P1.7 ~ P1.6 ALARMA ~P 1 . 5 --+ REBOSE P1.4 L-b LLENO ____ P 1 . 3 ---+ VACIO ~P 1 . 2 --+

C
B

P0.2

P0.1

B2 P 1 . l ---+ Bl ----1 P1.O -+

Figura 8.10.

146
??

Introduccin a /os Microcontroladores

Flujograma

??

Listado
TITLE COMMENT CONTROLDEPROCESOS. DEPOSITO.ASM

* Controla elnivelde lquido de un depsito. 12.3.91 * ON

DPTR <--- 0300H

V mscara: A.AND.07H

4
A <---(@A+DPTR)

0300H .BYTE 07H,03H,20H,09H,20H,2OH,2OH,l8H ORIGIN 0200H MOV DPTR,#0300H ; Inicializa puntero de TABLA SALO:MOV A, PO ; LEE puerto PO ANL A, #07H ; Enmascara MOVC A, @A+DPTR ; Direcciona y captura dato I MOV Pl, A ; Acta
JMP SALO
END

CODE ORIGIN

4 Pl <--- (A) SALO:

Nota: A la directiva *BYTE se hace referencia en el Apartado 5.2.2.

Como se puede observar, el programa utiliza el direccionamiento indexado para acceder a la informacin escrita previamente en la tabla de datos, situada en las posiciones de memoria comprendidas entre la 0300H y 0307H. El primer bloque del flujograma inicializa el puntero DPTR en la direccin de comienzo de la tabla de datos. ?? El segundo bloque lee la informacin de las sondas a travs del Puerto PO. ?? El tercer bloque enmascara la informacin del Puerto PO, dejando solamente los tres primeros bits tiles de PO. ?? El cuarto bloque direcciona a la posicin de memoria de la tabla relativa al contenido de las sondas (ACC) ms (suma aritmtica) el puntero DPTR. El contenido de esa posicin de memoria direccionada pasa al acumulador.
?

Es decir, si el estado de las sondas seala A=l,B=l y C=O (03H), se realiza el siguiente acceso a la tabla de datos: A t- @A + DPTR, es decir, A c- (03H + 0300H) El contenido de la posmem 0303H para el acumulador.

Control de perifricos.

Puertos

de

EntradalSalida

147

??

El quinto bloque escribe la informacin leda de la tabla en el Puerto Pl.

El contenido de la tabla, segn las directrices dictadas por el algoritmo de control de la planta, es el siguiente:

0300HI07HI ; Activa Bl - B2 y seala VACIO 0301H 03H ; Activa Bl - B2 y no seala VACIO 0302H 20H -k-i ; Seala ALARMA 0303H 1 09H 1 ; Desactiva B2 y seala LLENO 0304H 20H ; Seala ALARMA 0305H t - 20H i ; Seala ALARMA - ; Seala ALARMA ; Seala LLENO y REBOSE

Este algoritmo, que ha sido tratado en el Captulo 3, Apartado 3.7.3: Memoria de programas para el tratamiento de tablas, resulta interesante por la simplicidad y la facilidad con que permite modificar las configuraciones de salida, con slo cambiar la tabla sin modificar el programa. A continuacin se muestra el programa desensamblado y la tabla de datos, estando el programa listo para su ejecucin:

020A >z 0200, LOC OBJ 900300 0200 0203 E580 5407 0205 0207 93 0208 F590 020A 4103 DISASSEMBLY

LINE 0001 .0002 0003 0004 0005 0006 COMPLETED

LABEL B0203

SOURCE MOV MOV ANL MOVC MOV AJMP

CODE DPTR,#0300 A,PO A,#O7 A,@A+DPTR P1,A 0203

>M 0300,0307 OO 0102 03 04 05 06 07 08 09 OAOBOCODOEOF 0300 0703200920202018 >

ASCII-CODE . . . .

Con este ejercicio se da fin al captulo correspondiente al tratamiento de los puertos de los Microcontroladores 8052/805 1.

148

htroduccin a los Microcontroladores lntr

1. iQu quiere decir, en el texto, que las salidas estn latcheadas? Proponer otra palabra o expresin que indique esta accin. 2. iCundo se dice que el microcontrolador acta como microprocesador? 3. Qu misin tiene el Puerto PO eti el microcontrolador cuando ste acta como microprocesador? 4. Analizar paso a paso los tres cronogramas que muestran el funcionamiento del microcontrolador como microprocesador en las funciones de: - Lectura en la memoria de programas externa. - Lectura en la memoria de datos externa.

- Escritura en la memoria de datos externa. 5. Explicar el comportamiento de los Puertos de entrada y salida, desde el punto de vista del hardware en los Ejercicios: 8.1. El Puerto PO en modo salida. 8.2. Operacin de lectura en el Puerto PO y de escritura en el Puerto PI. 8.3. Lectura y escritura en el mismo Puerto PO. Se sugiere analizar con detalle la Figura 1.4. 6. Realizar el mismo Ejercicio 8.4 con los microprocesadores que conozca de 8 bits, y compare en cuanto al tamao del programa, claridad, facilidad, etc.

1. Disear varios sistemas (basta con dibujar el esquema) utilizando el microcontrolador como microprocesador, segn las siguientes necesidades: - Aumentando la capacidad de la EPROM en 8 K. - Aumentando la capacidad de la RAM en 2 K. - Aumentando la capacidad de entradas y salidas con el conexionado de una unidad de E/S. Nota: Se puede usar una VIA 6522 o el IP 8255 u otra conocida. 2. Realizar un programa en el microcontrolador que simule realmente a un decodificador de 3 a 8 lneas. Puede utilizarse como entrada el Puerto PO y como salida el Puerto PI.

Figura 8.11. 3. Siguiendo la lnea del ejercicio anterior, disear con el microcontrolador un: - Codificador de 8 a 3 lneas. - Multiplexor.

Control de perifricos. Puertos de Entrada/Salida

149

- Demultiplexor. - Convertidor de cdigos. - Etctera. 4. Disear un comparador de 8 bits (byte), siendo uno de los bytes el A, que acceder al microcontrolador por el Puerto PO, el otro byte el B, por el Puerto PI, y el resultado se obtendr por el Puerto P2, segn el esquema de la Figura 8.12.

Figura 8.12. 5. El siguiente ejercicio se ha seleccionado de El libro de los cerebros electrnicos, de Walter R. Fuchs (Ediciones Omega), y dice as: El dueo de La Posada del Venado est muy orgulloso de la fama que ha adquirido su establecimiento en toda la comarca, y cuida por s mismo de que solamente frecuenten su local los clientes que le merezcan confianza. Dejemos que sea l mismo quien nos lo explique: Siempre sigo inflexiblemente una sencilla regla: no quiero tener los con la polica. Por esto no admito a ningn borracho en mi local. Personalmente cuido que no entre nadie con alguna copa de ms: de otro modo, podrIan surgir dificultades con las autoridades. Mis clientes pueden tener hambre o sed; desde luego, mejor que tengan ambas cosas a la vez. Pero si alguien bebe sin comer nada, yo no tengo en ello ningn inconveniente, lo mismo que si come sin beber. Pero en cualquier caso, deben pagar la cuenta. En esto soy inflexi-

ble: yo no debo nada a nadie, y no me gusta llevar cuentas de lo que me deben. Solamente fto a los octogenarios acompaados de sus abuelos. Despus de analizarlo detenidamente y de quitarle la parte graciosa y los aspectos intrascendentes se puede resolver como un circuito combinacional, y hago una sugerencia para facilitar la resolucin. Obsrvense las siguientes frases que le dan las variables de entrada y salida: ... personalmente cuido de que no entre nadie con alguna copa de ms. VARIABLE KA; ... mis clientes pueden tener hambre o sed. HAMBRE - VARIABLE Ha SED ---, VARIABLE SN Tambin pueden englobarse, en este caso, como una sola variable. CONSUMICION -, VARIABLE C; ... deben pagar la cuenta. DINERO - VARIABLE D; La salida, que ser el permiso o no de entrada a la posada, ser: PERMISO -3 VARIABLE P En la Figura 8.13 se muestra el esquema del montaje.

C P 0 7

PI.7

c P06
c P05 C P0.4 D -C P 0 3

P1.6 t

3 WC P 0 . 2 H -cP O . l A -c P O O

Figura 8.13.

lP15 P14 PI 3 P1.2 P1.l P10

SAL

Realizar el programa correspondiente y comprobar su funcionamiento.

CAPITULO

Temporizadores y contadores

9.1. INTRODUCCION
El Microcontrolador 8052 tiene tres registros temporizadores-contadores denominados Timer 0 (TO), Timer 1 (Tl) y Timer 2 (T2). El Microcontrolador 805 1 tiene slo dos timers, el TO y el Tl, de las mismas caractersticas que los del 8052. Por esta razn, todo lo que se diga con relacin a los Timers 0 y I del 8052 es valido para los del 8051 y viceversa. Los tres timers 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 perodos de reloj, la razn de contaje es 1/12 de la frecuencia del oscilador. En la funcin counter (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 TO, al (pin 15) para Tl 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 contaje aparece en el registro correspondiente durante el estado 3 de la fase 1 (S3Pl) 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 contaje es 1/24 de la frecuencia del oscilador. Mientras que el Timer 0 y I tienen cuatro modos de operacin, el Timer 2 tiene tres modos, como se va a ver en el Apartado 9.2 y 9.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/805 1.

150

Temporizadores y contadores

151

Nota: Las seales cuya simbologa en los esquemas termina con la palabra gin, se refieren a patillas del microcontrolador, que deben activarse con seales externas.

En la Figura 9.1. se observan cuatro bloques fundamentales que de izquierda a derecha se van a exponer a continuacin: - En la parte superior izquierda aparece un dispositivo conmutador que selecciona la forma de efectuar el contaje, 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 registros de contaje. Este circuito permite dos opciones: bien se acciona el interruptor por soft (instruccin del programa), para ello GATE=O y TR 1 = 1, que son bits imagen pertenecientes a unos registros que se estudiarn, o bien se acciona por hard con la seal de nivel alto, aplicada al pin INT 1, estando GATE= 1 y TR 1 = 1. - En la parte central se encuentran los registros de contaje, que pueden ser de 8, 13 o 16 bits, segn el modo de trabajo (TL 1, TH 1). - A la derecha del registro de contaje se encuentra el biestable representativo del bit de jag o bandera, TFl, 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.

9.2.

TIMER 0 (TO) Y TIMER 1 (Tl)

La funcin timer (temporizador) o counter (contador) es seleccionada por el bit de control c/T perteneciente al registro TMOD (Timer/Counter Mode Control Register), de 10s SFR (Special Function Register). El registro TMOD no es direccionable bit a bit (Cuadro 9.1). Estos dos timer/counters tienen cuatro modos de operacin, como se indica a continuacin, que se seleccionan mediante los pares de bit (MO,Ml) en el registro TMOD. Se recomienda cuando se estudie este Cuadro 9.1 tener presente la Figura 9.1.

Figura 9.1.

152

Introduccin

a los

Microcontroladores

Cuadro 9.1.
TMOD

be
1

bs
Ml

b4
1 MO

bj

b
(

bi
Ml

bo
1 MO

GATE 1 C/T

1 CATE 1 C/=i

- Timer 1 -b

- Timer 0 A

BIT

NOMBREYCOMENTARIO
j MI 1 MO 1 MODO DE OPERACION Temporizador de 13 bits Temporizador/Contador de 16 bits Temporizador/Contador de 8 bits con Auto-recarga Contadores mltiples especlicos l

bo - b,

I I MODO 0
1 2

0
0 1 1

0
1 0 1

Selecciona temporizador o contador - Si C/T = 0 entonces temporiza con los pulsos del reloj interno. - Si C/i = 1entonces cuenta los pulsos que llegan por TO @in 14). r--1: Hahhta la entrada exterioriN% (pin 12). GATE - Si GATE = 1 entonces habilita INTO si TRO = I (control por hardware). - Si GATE = 0 entonces deshabilita INTO y depende exclusivamente de TRO (control por software). (TRO es un bit del Reg. TCON y se activa o desactiva por software). , Configuracin delTimer 1. Igual que para el Timer 0, sustituyendo: TO porTI (pin 15) INTO por INTl (pin 13) TRO porTR1

bl

bq - bs be Y b7

A continuacin veremos los cuatro modos de operacin.

9.2.1.

Modo 0: Temporizador/contador de 13 bits

Poniendo los bits MO = Ml = 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 9.2. Como se puede ver en la Figura 9.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 el registro de contaje, da una vuelta pasando desde todos unos a todos ceros, activa el flag de interrupcin TFx (x=0 si se trata del Timer 0 y x= 1 si se trata del Timer I), siehdo ste un bit que pertenece al registro TCON (Timer/ Counter Control Register), registro que es direccionable bit a bit (vase Cuadro 9.2). Para una mejor comprensin de este cuadro es conveniente tener presente la Figura 9.2.

Temporizadores

contadores

INTERRUPT

Figura 9.2.

Cuadro 9.2.
TCON b b6 bs bd b3 b2. b, bo

TFI

1 TRI

( TFO

( TRO

IEl

ITI

( IEO

( ITO
I

BIT

bo

NOMBREYCOMENTARIO

cl:

I T O Control interrupcin externa 0 (INTO). - Si ITO = 0 entonces es activa por nivel bajo. - Si ITO = 1 entonces es activa DOI flanco de baiada. m : Flag de interrupcin para la interrupcin externa 0 (INTO) - Se pone a uno cuando se detecta interrupcin externa. - Se repone automticamente al atender la interrupcin por flanco. m : Control interropcin externa 1 (INTI). 1-I :F/ug de interrupcin parala interrupcin externa 1(INTI).

LJ: Hablhta temporizador/contador 0. TRO - Si TRO =1 entonces habilitatemporizador/contador 0. -SiTRO=0entoncesdeshabilitatemporizador/contador 0.


TFO cl: FlagdeOvertlow (sobrepasamiento) delTimer 0. Se repone automticamente al atender la interrupcin. nI: HalAita temporizador/contador TRI 1,

b,

m : Flag de Overflow (sobrepasamiento) del Timer 1.

154

Introduccin a los Microcontroladores

La autorizacin de cuenta de impulsos, procedentes de la seal de reloj (actuando como temporizador) o bien del pin 15 (Tl) (actuando como contador), se produce en el Timer 1, cuando TR 1 = 1 y las entradas GATE=O o INT 1= 1. Una aplicacin podra ser, para medir el ancho de pulsos a travs del pin INT 1. As, mientras INTl = 1 los impulsos internos o externos de contaje llegaran al contador TH 1 -TL1 . Cuando INT 1 = 0 el valor del contador permanecer inamovible, puesto que no llegaran impulsos de contaje. Para, ello es necesario que GATE = 1 y TR 1 = 1. El Modo 0 de operacin es el mismo para el Timer I que para el Timer 0, sustituyendo los bits o seales con subndice 1 por subndice 0. As, el registro TMOD est dividido en dos partes iguales para el control del Timer 1 y para el Timer 0, lo mismo sucede con el registro de control TCON. El lector puede imaginarse la Figura 9.2 para el Timer 0, claro est, sustituyendo los subndices.

Este ejercicio prueba el funcionamiento del Timer 0 en Modo 0 con la puesta en marcha por software. El bit 0 del Puerto PO (PO.O), parpadear en funcin de los valores de carga del Timer 0 (THO+TLO).
??

Flujogramas

(yi---)
+
T M O D <-- OO

4
TLO=THO=O

JI bit PO.0 <-- 1 T C O N <-- 1 O H

4 RUTINA: TEMPO 4 bit PO. <--0

4 RUTINA: TEMPO

Temporizadores y contadores

155

El flujograma del programa principal muestra: Bloque 1: Se programa el registro TMOD. b7 TMOD b6 b5 b4 b3 0 b2 0 bl 0 b0 0 I = OOH

GATE : control por soft

se trata de un Timer

Bloque 2: Se activa el bit 0 del Puerto 0. Bloque 3: Se llama a la rutina Timer O> para temporizar. Bloque 4: Se desactiva el bit 0 del Puerto 0. Bloque 5: Se llama a la rutina Timer 0 y se salta incondicionalmente al bloque 2. El flujograma de la rutina Timer 0 muestra: Bloque 1: Carga de los registros del Timer 0 a sus valores mnimos corresponden con la mxima temporizacin. Se entiende que el j?ag TFO se activar (0 b 1) cuando la cuenta rebase: x x x o 0000 0000 0000 XXXl 1111 1111 1111 = 1FFFH

Se sugiere al lector que calcule la temporizacin considerando lo indicado en el Apartado 9.1, es decir, se incrementa a la razn de l/ 12 de la frecuencia de reloj. Podemos adelantar que la temporizacin es muy pequea.

156

Introduccin

a los

Microcontrolacfores

Bloque 2: Se programa el registro TCON. b7 TCON ? b0 = 1OH

FLAG TFO sobrepasamiento

SET Timer 0 habilita el contaje lBloque 3: Pregunta si se ha producido el sobrepasamiento. Si es as, se sale de la rutina Timer 0 .
??

Listado
LINE 0001 0002 0003 0004 0005 0006 0007 0008 LABEL B0203 SOURCE MOV MOV MOV ACALL MOV MOV ACALL AJMP CODE TMOD,#OO B, #Ol PO,B 0300 B, #OO PO,B 0300 0203

>Z 0200 0213 LOC OBJ 0200 758900 0203 75FOOl 0206 85F080 0209 7100 020B 75FOOO 020E 851080 0211 7100 0213 4103 DISASSEMBLYCOMPLETED > Z 0300 030F LOC OBJ 0300 758AOO 0303 758CO0 0306 758810 0309 E588 030B 5420 030D 60FA 030F 22 DISASSEMBLYCOMPLETED >

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL

B0309

SOURCE MOV MOV MOV MOV ANL JZ RET

CODE TLO,#OO THO,#OO TCON,#lO A,TCON A, #20 0309

9.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 contaje son de 16 bits (TLO+THO) o (TLl+THl).

Temporizadores y contadores

157

Este ejercicio es similar al anterior en cuanto a los resultados, pues el bit 0 del Puerto PO (PO.0) va a parpadear al ritmo del Timer 1, pero ste, al estar programado en Modo 1, utiliza los 16 bits de TH1 +TLl; si se carga con OOOOH, la temporizacin es ms larga,, por lo que el ritmo del parpadeo ser menor. Recurdese que elflag de sobrepasamiento, al utilizar el Timer 1, es TFl (bit 7 del registro TCON) y que ste se produce al pasar TH 1 -TL1 de FFFFH a OOOOH, es decir, despus de contar 65.536 ciclos mquina. El arranque del Timer I se produce, como en el ejercicio anterior, al poner a l el bit 6 del registro TCON.
??

Configuracin de TMOD b7 b0 1 0 1 I 0 1 I 1 1P. 1 I 1 I 1


I

TMOD

1 =lOH
I

GATE: control por soft PMl=O y MO=1 Timer 1 en Modo 1 i TH1 + TL1 = 16 bits es un

??

Configuracin de TCON b7 b0 1 _ = 40H

TCON

SET Timer 1 habilita el contaje FLAG TFl - se pone a l al producirse el sobrepasamiento

158
??

Introduccin a los Microcontroladores

Flujogramas

TL1 =THi =0

TCON <-- 40H

I
b i t P O . 0 <--0

ti

RUTINA: TEMPO

??

Listados
OBJ 758910 D280 7100 C280 7100 4103 DISASSEMBLYCOMPLETED LINE 0001 0002 0003 0004 0005 0006 LABEL B0203 SOURCE MOV SETB ACALL CLR ACALL AJMP CODE TMOD,#lO PO.0 0300 PO.0 0300 0203

>Z020002OB

LOC 0200 0203 0205 0207 0209 020B

>ZO300 030F OBJ LOC 0300 758BOO 0303 758DOO 0306 758840 0309 E588 030B 5480 030D 60FA 030F 22 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL

B0309

SOURCE MOV MOV MOV MOV ANL JZ

CODE TLl,#OO THl,#OO TCON,#40 A,TCON

A, #80
0309

Temporizadores y contadores

159

Este ejercicio permite ver la interaccin de la temporizacin de los Timers fisicos con la temporizacin, ya estudiada en el Captulo 7 -Ejercicio 7.5-, 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 RO se establece un ciclo de contaje del Timer 1, de tal forma que si se carga el registro RO con OFH. y el Timer I con OOOOH., se establecen 16 perodos completos de ciclos de contaje del Timer I ms los ciclos mquina que implica la ejecucin del programa, es decir, aproximadamente: 16 x 65536 ciclos mquina Los registros TMOD y TCON estn configurados como en el ejercicio anterior, por lo que no se hace ningn comentario.
??

Flujogramas

TH1 =TLi =0

cl
TMOD <-- IOH bit PO.0 <-- 1

T C O N <-- 4 0 H

DEC RO

RO c-- OFH

f3
RET

160
??

Introduccin Q los Microcontroladores

Listados
LINE 0001 0002 0003 0004 0005 0006 0007 LABEL SOURCE MOV MOV SETB ACALL CLR ACALL AJMP CODE RO,#OF TMOD,#lO PO.0 0300 PO.0 0300 0205

>ZOZOO OZOD OBJ LOC 0200 780F 0202 758910 0205 D280 0207 7100 0209 C280 020B 7100 020D 4105 >2 03000313 LOC OBJ 758BOO 0300 0303 758DOO 0306 758840 0309 E588 5480 030B 030D 60FA 030F D8EF 780F 0311 22 0313 DISASSEMBLYCOMPLETED

B0205

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009

LABEL B0300

B0309

SOURCE MOV MOV MOV MOV ANL JZ DJNZ MOV RET

CODE TLl,#OO THl,#OO TCON,#40 A,TCON

A,#80
0309 RO,0300 RO,#OF

Este ejercicio es similar al anterior, salvo en la forma de arrancar el Timer 1. En el ejercicio anterior, el arranque se haca va soft al poner el bit 6 (TR.1) del registro TCON a l, estando el bit 7 (GATE) del registro TMOD a OH, como se puede observar en la Figura 9.2. Entonces el interruptor CONTROL se cerraba y llegaban los impulsos a los registros de contaje. Ahora la nueva configuracin parte de que GATE= 1 y TR 1 = 1, pero no es suficiente para arrancar el Timer 1; se necesita aplicar al pin 13 (INT 1) un nivel de tensin alto desde el exterior.

Temporizadores
??

contadores

161

Configuracin de TMOD b7 bO 0 0 t I = 90H

TMOD

GATE: control por hard Mi=0y MO=1

- Timer 1 en Modo 1
TH1 + TL1 = 16 bits C/T:

es un Timer
Las conexiones extras externas para el funcionamiento de este ejercicio se indican en la Figura 9.3.

+5v 0

INTl 0 0 .c 13

Figura 9.3.

162
??

Introduccin a los Microcontroladores

Flujogramas

cl
TMOD <-- 90H

TH1 = T L l = 0

cl
TCON -- 40H

r-l
bit PO.0 <-- 1

f5
FIN

??

Listados ~
LINE 0001 0002 0003 0004 0005 0006 LABEL SOURCE MOV MOV CLR ACALL SETB NOP CODE TMOD,#90 RO,#OF PO.0 0300 PO.0

>Z 0200020B LOC OBJ 0200 758990 0203 780F C280 0205 0207 7100 0209 D280 020B 00 DISASSEMBLYCOMPLETED

Temporizadores y contadores

163

>20300 0311 OBJ LOC 0300 758BOO 0303 758DOO 758840 0306 0309 E588 030B 5480 030D 60FA D8EF 030F 0311 22 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007 0008

LABEL B0300

B0309

SOURCE MOV MOV MOV MOV ANL JZ DJNZ RET

CODE TLl,#OO THl,#OO TCON,#40 A,TCON A, #80 0309 RO,0300

9.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 Modo 2 configura el registro Timer como un contador de 8 bits (TLl) con recarga automtica (Figura 9.4). El sobrepasamiento de TL1 no slo activa el bit deflug (TFl), sino que tambin recarga TL1 con el contenido de TH 1, 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.

,T INTERRUPT

Figura 9.4.

Este ejercicio trata de observar el funcionamiento del Timer I como contador de impulsos externos, autorrecargndose al producirse el sobrepasamiento con el dato situado en TH 1, como muestra la arquitectura del Timer 1 en Modo 2 en la Figura 9.4.

164

Introduccin

a los

Microcontroladores

A cada flanco descendente de los impulsos de contaje exteriores, aplicados al pin 15 (T 1) el registro TL1 se incrementa en una unidad a partir del valor inicial de carga, que en este caso es FOH. Cuando este valor alcanza FFH, el impulso siguiente, que produce el sobrepasamiento, activa el j7ag TF 1 y recarga automticamente el contenido del registro THl, que en el ejercicio contiene el mismo valor inicial de TLl, es decir, FOH. Para que puedan llegar los impulsos de contaje a TL1 , es preciso que CONTROL= 1; para ello se necesita que GATE= 1 (por soft) y que el pin 13 (INT 1) est a nivel alto. En la Figura 9.5 se puede ver la conexin precisa del microcontrolador con las seriales exteriores para el buen funcionamiento de este ejercicio.

L-J 8052/51 +5v Me R 4 39. 38 37 E 34 33 32 b + + b + b b + PO.O P0.1 P0.2 P0.3 P0.4 PB.5 PO. P0.7

-0 0

-z-

Tl c 15

Figura 9.5.

??

Configuracin de TMOD b7 6 1 1 1 I I b0 . = EOH

TMOD GATE: control por hard

- Timer 1 en Modo 2

MI=1 y MO=0

TL1 (contador) y TH1 (cargador)

c/T:
es CONTADOR t

Temporizadores y contadores

165

??

Configuracin de TCON b7 b0 1 = 40H

l-CON

SET Timer 1 habilita el contaje FLAG TFl - se pone a l al producirse el sobrepasamiento


??

Flujograma
Tl -MODOBREC.

TMOD <-- EOH

TL1 =THl =FOH

4
TCON <-- 40H

PO <--- TL1

??

Listado
LINE 0001 0002 0003 0004 0005 0006 0007 LABEL SOURCE MOV MOV MOV MOV MOV AJMP NOP CODE TMOD,#EO TLl,#FO Thl,#FO TCON,#40 PO,TLl 02oc

>202000211 LOC OBJ 758930 0200 758BF0 0203 0206 758DF0 0209 758840 02oc 858B80 41oc 020F 0211 00 DISASSEMBLYCOMPLETED >

B020C

166 9.2.4.

Introduccin a los Microcontroladores

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 9.6). En este modo el Timer 1 cede elflasde tratamiento de interrupciones (TFl) y el bit de control (TRl). El registro TL0 (8 bits) utiliza la lgica de control que ha sido comn hasta ahora (GATE, pin INTO y TRO), permitiendo la operacin de temporizacin con los ciclos mquina del microcontrolador y el contaje de pulsos a travs del pin 14 (TO). 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 (TRl ) y como flag (TFl); ambas seales, como ha quedado dicho, 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 sobrepasamiento al incrementarse en una unidad del valor FFH. De esta manera, el Microcontrolador 8052 puede tener hasta cuatro temporizadores/ contadores, y el 805 1 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 0 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.

1/=

f0SC

OI
TRl/ ONTRoL

8 BITS

TH0

TFl

INTERRUPT

Figura 9.6.

Temporizadores y contadores

167

Se trata de mostrar el funcionamiento del Timer 0 en Modo 3, como contador. Los impulsos de contaje exteriores se aplican al pin 14 (TO). La accin sobre el interruptor CONTROL es exterior a travs del pin 12 (INTO). El valor inicial de TL0 es FOH y el estado de la cuenta se presenta al exterior por el Puerto PO. Cuando se produce el sobrepasamiento, se carga en el Puerto P0,55H. PO 4- 55H La Figura 9.7 muestra el conexionado externo para la comprobacin de este ejercicio.
??

Flujograma

TMOD <-- 07H

TCON <-- 10H

TLO<-- F O

PO <-- 55H

168
??

Introduccin a los Microcontroladores

Listado
LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 LABEL SOURCE MOV MOV MOV MOV MOV ANL JZ MOV MOV NOP CODE TMOD,#07 TCON, # 10 TLO,#FO PO,TLO A,TCON A, #20 0209 A,#55 PO,A

>Z 02000216 LOC OBJ 0200 758907 0203 758810 0206 758AF0 858A80 0209 02oc E588 020E 5420 0210 60F7 0012 7455 0214 F580 0216 00 DISASSEMBLYCOMPLETED

B0209

8052/51 12
39

30 37 35" 34 33 32 0 0 0 TO

PO.O P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

Figura 9.7

9.3. EL TIMER 2
El Microcontrolador 8052, con relacin al 805 1, presenta un temporizador/contador extra de 16 bits (el timer 2). Al igual que los Timen 0 y 1, puede operar como temporizador o como contador de eventos. Dentro de los registros especiales (SFR),el registro (T2CON) puede configurarlo como Timer (C/n=O) 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 Register) es un registro direccionable bit a bit, y su estructura aparece en el Cuadro 9.3. Es conveniente seguir el Cuadro 9.3 teniendo presentes las Figuras 9.8 y 9.10.

Temporizadores y contadores

169

Cuadro 9.3. TXON b, be b5 b4 h b b,


1 C/B

bo
( CP/m [

TF2 1 EXR ( RCLK ( TCLK 1 EXEN ( TR2 BIT bo NOMBRE Y COMENTARIO

m] : Bit de Captura/Recatga - Si CP/RLZ = 1 EXENZ = 1 habilita captura en TLEX (pin 2). (vase Figura 9-g). - y - Si CP/RLZ = 0 y EXENZ = 1 habilita autorrecarga por: - Sobrepasamiento del Timer 2. - Por flanco descendente en REX (vase Figura 9.10). - Si RCLK = TCLK = l se ignora este bit y el Timer 2 es forzado a la autorrecarga en el sobrepasamiento. m-I: Btt selector delTemporizador/Contador. C/T2 - Si C/i? = 0 acta comotemporizador. - Si C/T2 = 1 acta como contador. j--J: Btt de Arranque/Parada del Timer 2. TR2 - Si TR2 = 1 arranque del Timer 2. - Si TR2 = 0 parada del Timer 2.

bl

b3

11:Btt dehabilitacindelflancodescendentee&ior (TZEX). EXENL

- Si EXEN = 1habilita seal TZEX. Captura o autorrecarga si procede. - Si EXENZ = 0 deshabilita pin TZEX. TCLK . EI. Btt comunicaciones reloj transmisor (vase Cuadro 12.2). RCLK EI.Btt comunicaciones reloj receptor (vase Cuadro 12.2). EXR IEl.. Flug de activacin de setial por el pin TZEX (EXENZ=I). Vectoriza interrupcin si esta habilitada. b, TF2 EI: Flag de sobrepasamiento en el Timer 2. No se activa cuando RCLK = TCLK = 1. Vectoriza interrupcin si esta habilitada.

El Timo 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, segn el Cuadro 9.4, a los bits correspondientes del registro T2CON.

170

Introduccin a los Microcontroladores

Cuadro 9.4.

RCLK + TCLK 0 0 1

CP/RL2 0 1 X

TR2 1 1 1

MODO 16 bits con autorrecarga 16 bits con captura Generador de baudios

1 Off

9.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 sobrepasamiento 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 en la entrada externa T2EX en flanco descendente, el valor que en ese instante est presente en los registros de contaje 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 l el j7ag de EXF2 y puede generar una interrupcin, si est habilitada (Figura 9.8).

DETECTOR TRANSICION

EXEN

Figura 9.8.

Temporizadores y contadores

171

Este ejercicio tiene la misma estructura que el Ejercicio 9.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 temporzaciones. La mxima se consigue con OOOOH. El registro T2CON queda configurado de la siguiente forma: b7 T2CON FLAG TF2 ? 0 0 0 0 1 0 b0 0 = 04H

172
??

Introduccin a los Microcontroladores

Flujogramas

RUTINA: TEMPOS 4 b i t P O . 0 <-- 0

T2CON <-- 04H

4 RUTINA: TEMP03

??

Listados
LINE 0001 0002 0003 0004 0005 LABEL B0200 SOURCE SETB ACALL CLR ACALL AJMP CODE PO.0 0300 PO.0 0300 0200

>z 02000208 LOC OBJ 0200 D280 0202 7100 0204 C280 0206 7100 4100 0208 DISASSEMBLYCOMPLETED > >Z 0300030F LOC OBJ 0300 75cc99 0303 75CD99 0306 75C804 0309 E5C8 030B 5480 030D 60FA 030F 22 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL

B0309

SOURCE MOV MOV MOV MOV ANL JZ RET

CODE TL2,#99 TH2,#99 TLCON,#04 A,TZCON A, #80 0309

Temporizadores y c o n t a d o r e s

173

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 I y el Timer 2. El primero como temporizador y el segundo como contador.
??

A continuacin se pasa a comentar los bloques de flujograma. - En el primer bloque se configura el Timer 2 como contador y en modo captura. b7 T2CON ? ? 0 0 I 1 1 1 b0 1 = OFH

CONTROL DE FLANCO

FLAG TF2 #JJ ,/ I

CONTROL TR2= 1

es un CONTADOR c/T2=1 CONFIGURADO COMO CAPTURA POR TRANSICION NEGATIVA EN EL PIN 2 (T2EX)

- En el segundo se cargan los registros de contaje TL2 y TH2. - El contenido de TL2 se saca por el Puerto PO, por lo que los impulsos de contaje del byte bajo van apareciendo en el Puerto PO. - 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 PO, pero se intercambian los nibbles (SWAP A). El tiempo de visualizacin del contenido de CAP2L est temporizado por el Timer I en la rutina situada en la posmem 0300, tal como se vio en el Ejercicio 9.2 (Temporizacin Timer I en Modo I (16 bits)).
Nota: Se observa que, mientras se produce la temporizacin, los impulsos de contaje que llegan al son evaluados, como corresponde a un proceso en tiempo real.

Timer 2

174
??

Introduccin a los Microcontroladores

Flujograma
TP-CAPTURA

TPCON

<-- OFH

1
A <-- (CAPPL) RUTINA: Tl-MODOI-16b 4 flag EXFP <-- 0

PO <--- 55H

Temporizadores y

contadores

175

- Al regresar de la rutina de temporizacin se borra el flag EXF2, correspondiente a la transicin negativa. - Se pregunta por el flag de sobrepasamiento y si se activa quiere decir que el Timer 2 ha sobrepasado el valor FFFFH. - En estas condiciones el programa termina visualizando por el Pdrto PO el dato 55H. En la Figura 9.9 se muestra el esquema del montaje exterior:

+5v

38

37 36 35 34 33 32

PO.O PO.l P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

Figura 9.9.

??

Listado
LINE LABEL 0001 0002 0003 0004 B0209 0005 0006 0007 0008 0009 0010 0011 0012 0013 B021B 0014 0015 0 0 1 6 0017 SOURCE MOV MOV MOV MOV MOV ANL JZ MOV SWAP MOV ACALL CLR MOV ANL JZ MOV NOP

>Z 0200 0224 LOC OBJ 0200 75C80F 0203 75CDFF 0206 75CCF0 0209 85CC80 02oc E5C8 020E 5440 0210 6009 0212 E5CA 0214 c4 0215 F580 0217 7100 0219 C2CE 021B E5C8 021D 5480 021F 60E8 0221 758055 0224 00

TZCON,#OF TH2,#FF TL2,#FO PO,TLL A,TZCON A,#4O 021B A,CAP2L A PO,A 0300 .EXF2 A,T2CON

A, #80
0209 PO,++55

176
>Z

Introduccin

los

Microcontroladores

03000316

LOC 0300 0302 0305 0308 030B 030E 0310 0312 0314 0316

OBJ 7850 758910 758BOO 758DO0 758840 E588 5480 60FA D8EF 22 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010

LABEL

B0305

B030E

SOURCE MOV MOV MOV MOV MOV MOV ANL JZ DJNZ RET

CODE RO,#50 TMOD,#lO TLl,#OO THl,#OO TCON,#40 A,TCON

A, #80
030E RO,0305

En la lnea 02 19 aparece el nemnico CLR .EXF2, para borrar elflug producido por la transicin descendente del pin T2EX. Tambin puede ponerse a O con el nemnico CLR T2CON.6.

9.3.2. Timer 2 en modo autorrecarga


En el modo autorrecarga hay, de nuevo, dos opciones, que se seleccionan con el bit EXEN del registro T2CON. Si EXEN2=0, entonces, cuando en el Timer 2 se produce el sobrepasamiento, no slo pone a l el flug TF2, sino que recarga los valores de los registros RCAP2L y RCAP2H, cargados inicialmente por software, en los registros de contaje 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 elJ!ug EXF2 (Figura 9.10).

pin

1L J-l
3its)

TZ

I
l pin TZEX

F-

DETECTOR
DE

I "b-=y Il'-' I ,EXFZ

\ INTERRUPT
TIMER 2 -

TRANSICION

CONTROL
EXEN

Figura 9.10.

Temporizadores y contadores

177

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 sobrepasamiento, 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:

T2CON

iF*AL

CONTROLCONTADOR HABILITADO
??

Flujograma

A la vista del flujograma y del listado del programa de este ejercicio se observa: - Cmo al producirse la entrada de los impulsos de contaje por el pin 1 (T2), se va incrementando el contenido de TH2+TL2. - Se visualiza por el PO el contenido de TL2, hasta que rebasa el lmite FFFFH (sobrepasamiento). - Al producirse el sobrepasamiento se recarga el valor de los registros RCAP2H + RCAP2L, y... - RCAP2L se visualiza en el Puerto PO. - Cada vez que un nuevo ciclo de contaje se inicia se borra el j7ug TF2 con la penltima instruccin.

178

Introduccin a los Microcontroludores

En la Figura 9.10 se muestra el montaje simplificado para ejecutar el ejercicio.

39

38 37 36 35 34 33 32

Figura 9.10.
??

Listado
LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 LABEL SOURCE MOV MOV MOV MOV MOV MOV SETB ANL JNC CLR AJMP 4

>2 0200 0219 LOC OBJ 0200' 75C806 0203 75CAF5 0206 75CBFF 0209 75CCF0 ozoc 75CDFF 020F 85CC80 0212 D3 0213 82CF 0215 50F8 0217 C2CF 0219 410F DISASSEMBLYCOMPLETED

B020F

T2CON,#06 CAPZL,#FS CAPZH,#FF TL2,#FO TH2,#FF PO,TLL C C,.TF2 020F .TF2 020F

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 contaje entran por el pin 1 (T2). El esquema del montaje es el mismo que el de la Figura 9.9 del Ejercicio 9.8. En aqul

Temporizadores y contadores

i79

se produca una captura al flanco descendente en el pin T2EX, mientras que en ste se produce una recarga. El registro T2CON debe configurarse de la siguiente forma: b7 TLCON ? ? 0 0 I 1 1 1 1 b0 0 I RECARGA al sobrepasamiento -i TIMER 2=CONTADOR CONTROL contador habilitado

Flag de flanco 4 Flag de Overflow

CONTROL Flanco exterior activado


??

Flujograma

TZCON <-- OEH

TL2 <-- FOH TH2 <-- FFH p-PO <-- (TL2)

EXFP<--0

. 1

TF2=1 NO SI TF2 <-- 0

180

Introduccin a los Microcontroladores

El primer rombo es para preguntar si se ha producido un flanco descendente en el pin T2EX. En caso afirmativo se produce la recarga. El segundo rombo sustituye al salto incondicional. En el caso de que sea negativa la pregunta del primer rombo se realiza una segunda pregunta, jse ha producido sobrepasamiento en los registros de contaje (TL2 + TH2)? En caso afirmativo se observa la recarga, en caso negativo seguir la secuencia normal de contaje. Listado
LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 LABEL SOURCEMOV MOV MOV MOV MOV MOV SETB ANL JNC CLR JC SETB ANL JNC CLR AJMP

??

>z 0200 0222 LOC OBJ 0200 75C80F 0203 75CAF5 0206 75CBFF 0209 75CCF0 02oc 75CDFF 020F 85CC80 0212 D3 0213 82CE 0215 5004 0217 CLCE 0219 40F4 021B D3 021c 82CF 021E 50EF 0220 C2CF 0222 410F DISASSEMBLYCOMPLETED

B020F

B021B

CODE TLCON,#OE CAPZL,#F5 CAPZH,#FF TL2,#FO TH2,#FF PO,TLZ C C,.EXFZ 021B .EXFZ 020F C C,.TFZ 020F .TF2 020F

Si en el Ejercicio 9.10 se sustituye la instruccin:


0200

MOV

T2CON,

#OEH

por

MOV

T2CON,

#OFH

se producir la captura al producirse un flanco descendente por la lnea T2EX (pin 2). Si tambin se sustituye la instruccin:
020F MOV PO, TL2 por MOV PO, CAP2L

Temporizadores y contadores

181

se observar, al pulsar sucesivamente, y por este orden:

flanco descendente

i-1
T2 Si la frecuencia del microcontrolador es de 6 MHz, jcul es la razn de contaje (incremento contadorjciclos de reloj) cuando acta en modo TEMPORIZADOR? Justificar por que la mxima razn de contaje es 1124 de la frecuencia de reloj cuando el microcontrolador trabaja en modo CONTADOR. 3. Explicar cmo se seleccionan los cuatro modos de operacin de los Timen 0 y 1. 4. En los timen, iqu se entiende por control por software y control por hardware y cmo se seleccionan? 5. iCual es el nombre del bit de control que habilita o no la cuenta en los registros de contaje? iQu posicin ocupa en el registro? iCul es el nombre de dicho registro?

impulso de contaje

que el incremento producido en TH2+TL2 pasa al registro RCAP2H+RCAP2L visualizndose, por medio de la instruccin situada en la posmem 020FH, en el Puerto PO. Sin ms, concluye este captulo dedicado a los Timers para pasar al captulo dedicado a las interrupciones.

iCul es la diferencia de los timen trabajando en Modo 0 y en Modo I? iCundo se activan losflags TFx en los timers? -&Sucede lo mismo cuando trabaja como contador que cuando lo hace como temporizador? Qu significa que el timer trabaja con autorrecarga? Poner un ejemplo en donde se vea la necesidad de trabajar con esta modalidad (vase Figura 9.4). Programar el registro T2CON para que acte de la siguiente forma: - Modo de captura. - Por transicin de una seal externa. - Trabajando como TEMPORIZADOR.

182

Introduccin a los Microcontroladores .roladores

Obtener, utilizando el Timer 0 o 1, una seal cuadrada de frecuencia 50 Hz por el pin 1 del Puerto PI. Iniciar la secuencia con un pulsador el arranque y con otro (si se quiere se puede utilizar el mismo) la parada (vase Ejercicio 9.2). Imaginar que se tiene un barco de paseo que slo admite a 30 personas. Disear con el microcontrolador un sistema que detecte el paso de la persona nmero 20 y sealar por el pin PO.0 la alarma de prevenido y por el pin PO.1 el paso de la persona nmero 30 que indique wompleto. El sistema debe recargarse (inicializacin) para comenzar un nuevo ciclo (vase Ejercicio 9.5). Obtener por el pin PO.0 una seal que tenga el siguiente perodo.

Puerto PI el nmero de personas que en ese momento estn a bordo. Nota: Si se trabaja con un 8052, revisar el Ejercicio 9.8, y si se utiliza un 805 1, crear una rutina que lea el registro contador y visualice su contenido en el Puerto PI. Realizar el programa que resuelva el siguiente automatismo: Al accionar el pulsador (MARCHA) debe ponerse en intermitencia la seal en el pin PO.0 del microcontrolador durante 10 segundos como aviso de la puesta en marcha de un complejo de mquinas; al linalizar este intervalo de tiempo, el pin PO.0 se desactivar y se activar el pin PO. 1, que las pone en marcha. Un segundo pulsador (PARO) desactiva, en cualquier instante, el complejo de mquinas. Continuando con el planteamiento realizado en el Ejercicio 4 de los Ejercicios propuestos del Captulo 8, se modificarn los resultados de salida: Si A>B, por el pin P2.0 se emitir una seal de frecuencia 1 Hz en la que la duracin del pulso 1 sea cinco veces menor que la duracin del pulso O. Si A=B, por el pin P2.1 se obtendr una seal a nivel alto permanentemente. Si A<B, se activarn las salidas P2.0 y P2.1 de manera alternativa con la frecuencia de 0,5 Hz.

-b=T=

20 20 40 20 60 20 t(microseg.)

4. Como complemento del Ejercicio 2 de este apartado de Ejercicios propuestos se sugiere aadir al programa lo siguiente: En cualquier momento que se accione un pulsador exterior deber aparecer en el

CAPITULO

Interrupciones

10.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 dialogo (handshake) establecen el protocolo de comunicacin. As, en la Figura 10.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 0 del Puerto 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 .I del Puerto 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 &.ta 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 10.2, cuando el Perifrico 1 requiere la intervencin del sistema microcomputador o microcontrolador activa la interrupcin INTl, si esta 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. 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 ter-

Introduccin a los Microcontroladores

PROGRAMA r + l bit 0 bit 1 PUERTO 0 / DATOS E/S ~~0.0 .. 1 k PERIFERICO 1

b i t 0 yp1.0 bit 1

= = PERIFERICO 2

PUERTO 1 j DATOS E/S

Figura 10.1.

mina la ejecucin de este subproceso, la CPU vuelve al programa principal, continuando, su tarea cclica justo donde la dej. Una interrupcin puede ser iniciada: Por un perifrico o ente 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. 10.2. ASPECTOS GENERALES Y TIPOS DE INTERRUPCIONES

El Microcontrolador 8052 tiene seis interrupciones, mientras que el 805 1 tiene cinco. La Figura 10.3 muestra los distintos tipos de interrupciones, sealando la falta de losflags que activan TF2 y EXF2 en el 805 1 por no tener implementado el Timer 2.

Interrupciones

185

PROGRAMA

INT le

INTERRUPCION PERIFERICO 1

----_ -- - - -_ PUERTO 0

i DATOS E/S RUTINA 1

RUTINA 2

PUERTO 1 ; DATOS E/S

Figura 10.2.

TFO

TFl

';2~'Solo 8052) + 1

Figura 10.3.

186

fntroduccin

a los Microcontroladores

Los bits deflag que generan las interrupciones pueden ser cancelados, en algunas interrupciones, por hard, cuando stas son vectorizadas; no obstante, todos los bits pueden cancelarse por soft escribiendo ceros en el registro correspondiente.

Nota: Dada la cantidad de nemnicos para identificar fuentes de interrupcin y los J2ags que se activan en los microcontroladores, se propone referenciar, siempre que sea posible, el elemento que genera la interrupcin por su nombre completo. De todas formas, la Tabla 10.1 trata de aclarar esta dificultad.

Cada una de estas fuentes de interrupcin pueden ser individualmente habilitadas o inhabilitadas poniendo a uno o a cero el bit correspondiente del registro IE (Merrupt Enable Register) perteneciente a SFR (Special Function Register) (Cuadro 10.1).

Cuadro 10.1

I
b
EA BIT I
pg:

IE (INTERRUPT ENABLE REGISTER)

b6
1 X

b5
ET2

b4
) ES 1

b3
ET1

bz
1 EXI

bl
1 ET0

bo
1 EX0

NOMBRE Y COMENTARIO
SI EX0 I =hablhta. mtermpcin externa INTO - Si EX0 = 0 inhabilita.

b,

9 ET0 1 habilita interrupcin del Timer 0. 1 IETOI ~~ETO:Oinhabilita. S EXI 1hablhta Interrupcinexiema INTI. JEXI[ IiEXk r()i&a&ia,
I

SI ET1 1 hab& mtermpcin delTimer 1. JETIJ riET1If)inha&a,


I-1 IiESz()inhabiliQ.

SI ES

1 habilita intermpcin del puerto serie.

SI ET2 1 habilita intermpcin por sobrepasamiento o captura del Timer 2. @ ~~ET?Oinhabilita.


.. . ..* .,

JgI:- SI

EA = 1hab& mdlmdualmente a todas las interrupciones que en estereD[istro estn a uno. - Si EA = 0 no reconoce ninguna interrupcin.

184

Introduccin a los Microcontroladores

PROGRAMA

t activo

Figura 10.1.

mina la ejecucin de este subproceso, la CPU vuelve al programa principal, continuando, su tarea cclica justo donde la dej. Una interrupcin puede ser iniciada: Por un perifrico o ente 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. 10.2. ASPECTOS GENERALES Y TIPOS DE INTERRUPCIONES

El Microcontrolador 8052 tiene seis interrupciones, mientras que el 805 1 tiene cinco. La Figura 10.3 muestra los distintos tipos de interrupciones, sealando la falta de losflags que activan TF2 y EXF2 en el 805 1 por no tener implementado el Timer 2.

PROGRAMA I

A T

INT 1 I t-l

INTERRUPCION

RUTINA 1

RUTINA 2 pg2J-J

I I-----I
Figura 10.2.

TFl

Figura 10.3.

186

Introduccin a los Microcontroladores

Los bits de flag que generan las interrupciones pueden ser cancelados, en algunas interrupciones, por hard, cuando stas son vectorizadas; no obstante, todos los bits pueden cancelarse por sofl escribiendo ceros en el registro correspondiente.

Nota: Dada la cantidad de nemnicos para identificar fuentes de interrupcin y losflags que se activan en los microcontroladores, se propone referenciar, siempre que sea posible, el elemento que genera la interrupcin por su nombre completo. De todas formas, la Tabla 10.1 trata de aclarar esta dificultad.

Cada una de estas fuentes de interrupcin pueden ser individualmente habilitadas o inhabilitadas poniendo a uno o a cero el bit correspondiente del registro IE (Interrupt Enabk Register) perteneciente a SFR (Special Function Register) (Cuadro 10.1).

Cuadro 10.1
IE (INTERRUFT bi 1 EA BIT bo I b6 1 X bi ET2 b4 1 ES ENABLE REGISTER) b, ET1 bz EX1 bl ET0 bo EX0

)(

NOMBRE Y COMENTARIO pjJ:[:-. EX0 =I habilita mtermpcin externa INTO SI - Si EX0 = 0 inhabilita. ( : - Si ET0 = 1 habilita interrupcin delTimer 0. L-J - Si ET0 = 0 inhabilita. . S I EXI 1 habilita intermpcin externa INT 1. IExIT liEXI:Oinhabilita. SiETI 1hahhta mtermpcin del Thzer 1. IETII :SiETk:Oinh&liia. SI ES 1 habilita interrupcin del puerto serie. I-1 IS~ES~Oinhabilita. SI ET2 1 habilita interrupcin por sobrepasamiento o captura del Timer 2. IET2( -SiET2IOinhabilita. .,. *. .f. pj-J:):-. SI EA = 1 hablhta mdlndualmente a todas las interrupciones que en este r@stro estn a wfo. - Si EA = 0 no reconoce ninguna intermocin. Reservada.

h. -,

bz b3
b4

bs b6 b

Interrupciones

187

Tabla 10.1.

Fuente de interrupcin Externa 0 . . . . . . . . . . . . . . . Timer 0 . . . . . . . . . . . . . . . . Externa 1 . . . . . . . . . . . . . . . Timer 1 . . . . . . . . . . . . . . . . Puerto serie . . . . . . . . . . . . . Puerto serie . . . . . . . . . . . . . Timer 2 . . . . . . . . . . . . . . . . Timer 2 Externa 2 . . . . . . . INTO . . . . . . . . . . . . . TIMERO . . . . . . . . . INTl . . . . . . . . . . . . . TIMERl . . . . . . . . . RI . . . . . . . . . . . . . . . TI . . . . . . . . . . . . . . . TIMER2 . . . . . . . . . T2EX . . . . . . . . . . . .

Flag que activa


.............

............. ............. ............. ............. ............. ............. .............

IEO TFO IEl TFl RI TI TF2 EXF2

Las interrupciones, como se explic en el Captulo 2 (vase Figura 2.4), presentan una tabla, tabla de vectorizaciones, en la que se reservan 8 posmem para cada una de las interrupciones en la memoria de programas (Tabla 10.2).

Tabla 10.2.

Tabla de vectorizaciones Fuente INTO TIMERO INT 1 TIMER 1 RI + TI TIMER2 + T2EX Direccin 0003H OOOBH 0013H OOlBH 0023H 002BH

En estas 8 posmem 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 INTO) y el comienzo del programa de tratamiento de la rutina est ubicado en la posmem 0450H, la tabla de vectorizacin contendr en la posmem 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 posmem 0004H el byte alto de la direccin del salto y en la posmem 0005H el byte bajo de la direccin del salto (Figura 10.4).

188

Introduccin

los

Microcontroladores

tratamiento

Comienzo 0450H - rutina INT 0

0005H 0004H 0003H

- OOOOH

Figura 10.4.

10.3.

EL PROCESO DE INTERRUPCION EN LOS MICROCONTROLADORES SO52/8051

Losflags o 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 igual o 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 vectorizada.
?

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 i S5P2 del ciclo mel quina anterior. Puede suceder que un Jag de interrupcin sea activado y no pueda responder el sistema por encontrarse en una de las situaciones de bloqueo comentadas anteriormente. En estas condiciones puede suceder lo siguiente:

Interrupciones

189

a) Que desaparezca la situacin de bloqueo y que el flas siga activado. En este caso la interrupcin ser tratada por el microcontrolador. b) Que desaparezca la situacin de bloqueo, pero que en ese intervalo el flug de peticin 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 10.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.

___

cl-cz-le-

c3--cl-c4

wa---c5-*

LAS INTERRUPCIONES SON ESCRUTADAS INTERRUPCION ACTIVADA INTERRUPCION MUESTREADA

LLAMADA ALVFSXOR DE DIRECCIONES DE WL INTERRUPCION

RUTINA

INTERRUPCION

Figura 10.5.

Puede suceder tambin que una interrupcin de un nivel de prioridad ms alto se active antes del estado S5P2 del ciclo de mquina etiquetado C3 en la Figura 10.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. Con relacin al borrado de losflags, 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.

No se produce borrado por hard en las interrupciones del puerto serie y del Timer 2.
I

LosJlags de las interrupciones exteriores (INTO e INTl) son borrados por hard 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).

190

Introduccin a los Microcontroladores

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 procesorecibi 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. 10.4. NIVELES DE PRIORIDAD DE LAS INTERRUPCIONES

Cada fuente de interrupcin puede programarse individualmente en dos niveles de prioridad, poniendo a l o a ON su bit correspondiente en el registro IP (Cuadro 10.2) del banco de registros SFR. Como se puede observar en la figura, un l en el bit correspondiente a la interrupcin la sita en el nivel de prioridad ms alto y un O en el nivel ms bajo. Los bits b6 y b7 no estn asignados, y lo mismo pasa con el b5 para el Microcontrolador 805 1, puesto que no tiene Timer 2. 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 10.2. IP (INTERRUPT PRIORITY REGISTER)
b, b6 h bl b3 b2 b, bo

PT2

PS

PT1

1 PXI

PT0

PXO

BIT
bo piJI:-. SI

NOMBREYCOMENTARIO
PXO = 1define alta prioridad a interrupcin INTO

m : - Si PT0 = 1 define alta prioridad a interrupcin Timer 0.

piiJ:--. I= 1 define alta prioridad a interrupcin INTL SI PX


pTiJ-.S I PT1 = 1 define alta prioridad a interrupcin Timer 1.

I-I:-I PS= 1 define alta prioridad a interrupcin puerto serie. S


pEJ-:SI PT2= 1define ah prioridad a interrupcin Timer 2. Reservado Reservado

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

Interrupciones

191

mente, un escrutinio interno secuencia el servicio de la forma predeterminada que se muestra en la Tabla 10.3.
Tabla 10.3.

I
I
Prioridad (ms alta) . . . . . . . . 1 2 5 6

Prioridades en el mismo nivel Fuente INTO TISO INT 1 TIMER 1 RI + TI TIMER2 + T2EX (Int. (Int. (Int. (Int. (Int. (Int. EXTERO) TIMERO) EXTERI) TIMERl) PUERTO SERIE) TIMER2 + FLANCO)

(ms baja) . . . . . . . .

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 10.6 resume y esquematiza los aspectos ms importantes que han sido tratados con relacin al tema:
?? ??

INTO e INTI pueden ser activas por nivel o flanco. El registro IE (Interrupt Enable) permite inhabilitan> todas las interrupciones o habilitarlas individualmente. ?? 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. Como viene siendo habitual en el desarrollo de los temas, al comienzo se hace una introduccin especfica, en este caso al tipo de subsistema que va a generar la interrupcin, para mostrar posteriormente, con un ejercicio, aquellos aspectos dignos de resaltar para que el usuario pueda aplicarlos en terrenos ms comerciales, si se permite la expresin.

10.5.

INTERRUPCIONES EXTERNAS (INTO) E (INTl)

Estas interrupciones externas, como se pueden observar en la Figura 10.6, pueden ser activas por nivel o por flanco descendente, dependiendo del estado del bit 0 (ITO) para

192

lntroduccidn

a los Microcontroladores

Interrupciones de prioridad alta

J
-

Secuencia de escrutinio

Permisos

individuales

Inhibicion

global

Interrupciones de prioridad baja

Figura 10.6.

INTO y del bit 2 (ITl) para INTl en el registro TCON (Cuadro 9.2). Losflags que activan estas interrupciones son los bit 1 (IEO) y bit 3 (IEl), tambin del-gistroTCON. Cuando se genera una interrupcin externa por flanco del tipo INTO o INT 1, elJlag se activa (se pone a l) y se desactiva (se pone a O), 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 elf2ag y la puesta a cero del mismo se hace por software, mediante una instruccin que pone el flag a cero actuando sobre el propio bit en el registro correspondiente. 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.

Interrupciones

193

??

Descripcin del programa

El programa consta de un cuerpo principal que pretende simular el funcionamiento de la pantalla de luces deslizantes del Coche Fantstico, que daba nombre a la popular serie de televisin. Un bit se desplaza de izquierda a derecha y de derecha a izquierda y excitar 8 leds situados a la salida del Puerto 0 (PO). 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 (INTO), 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 parpadean> diez veces y simultneamente todos los leds del Puerto 0 (PO) 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 siguiente instruccin, sino que consulta la tabla de vectorizaciones en la posmem correspondiente al tipo de interrupcin. - El contador de programas salta a ejecutar la rutina situada en la posmem sealada en la tabla de vectorizacin. - Antes de proceder a la ejecucin de la rutina asociada a la interrupcin, guarda en la pila (memoria LIFO situada por defecto en la posmem 0007H de la memoria RAM interna) la posmem 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 posmem 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, y a 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 posmem de la pila, la instruccin RETI. A continuacin se muestra el montaje, el mapa de memoria, el flujograma, el programa fuente y el programa objeto del ejercicio. .
I Nota: Es importante que el interruptor o pulsador utilizado para producir la interrupcin sea antirrebote (vase Figura 8.6). L I I

194
??

Introduccin a los Microcontroladores

Esquema del montaje (Figura 10.7)

8052/5 1 +5v 39 38 37 INTO z34 33 32 b + b b b b + b PO.O P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7

12

Figura 10.7.
??

Mapa de memoria

0200H *IIv<IpIIi 0300H /li,:u 0400H dElIBEN


0003H VECTORIZACION (INTO) 0400H Flujograma
??

Secuencia de inicializacin: b7 TCON l activa por flanco descendente O activa por nivel b7 IE EA I b0 EX0 l habilita interrupcin INTO IEO ? b0 ITO

Interrupciones

195

DESPLAO.ASM

(-yc)

TCON <-- 01 H

1
RO <-- 04H

RLC

4 PO t ACC

4 RUTINA: R ETARDO

i;l
PO <-- ACC

DEC (RO)

RECUPERAR REG. DEL STACK

196
??

Introduccin a los Microcontrolacfores

Programa fuente
TITLE COMMENT DESPLAO.ASM. *Desplazaunbitdeizda. 31.5.91 * ON ; a dcha.enelPuerto 0 (PO)

SYMBOLS CODE RETARDO EQU 0300H INTO EQU 0400H

Comienzo de la RUTINA de RETARDO. ; Comienzo de la RUTINA de INTERRUPCION. ORIGIN 0003H ; Vectorizacin de la RUTINA DE INTERRUPCION (INTO). JMP INTO ; Llamada a la RUTINA DE INTERRUPCION. : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ORIGIN 0200H MOV TCON,#OlH MOV IE, #81H MOV A, #OOH SETB C SALO:RLC A MOV PO, A CALL RETARDO JNB A.7, SALO

; Se programa la INTO por flanco. ; Habilitada interrupcin INTO. ; Se pone el CARRY a 1. ; Rotacin de un bit a la izda. ; Se escribe en el Puerto 0 (PO). ; Se llama a la rutina de RETARDO. ; Se testea el bit 8. Si es < > 0 se comienza el ; desplazamiento a la dcha.

SALl:RRC A MOV PO, A CALL RETARDO JNB A.0, SAL1 JMP SALO ;------------------------------------------m-s ORIGIN 0300H ; Comienzo de la rutina de RETARDO. PUSH A ; Se guarda el ACC en el stack (PILA). RO MOV A PUSH A, MOV RO, #04H ; Rutina comentada en el Ejercicio 7.5. SAL2:MOV Rl, #20H SAL3:MOV R2, #FFH SAL4:DJNZ R2, SAL4 DJNZ Rl, SAL3 DJNZ RO, SAL2 POP A MOV RO, A POP A ; Se recupera ACC del stack. RET ;--------------------------------------------ORIGIN 0400H ; Comienzo de la rutina de interrupcin INTO.

; pone en intermitencia todos los bits del PO.


PUSH A MOV A PUSH A, MOV A PSW

; Se guarda en el stack el registro de estado.


RO

Interrupciones

197

PUSH A, #OAH MOV RO, SAL5:MOV PO, #FFH CALL RETARDO MOV PO, #OOH CALL RETARDO DJNZ RO, SAL5 POP A MOV RO, A POP A MOV PSW, A POP A RETI END

; Se guarda, tambin, el registro RO.

; Se recuperan los registros del sta&>.

??

Programa objeto

Conviene comprobar el comportamiento de la interrupcin INTO cuando est programada por nivel. Para comprobarlo se sustituye la instruccin posmem 0200, lnea 1:
MOV TCON,#Ol por MOV TCON,#OO

Considrese esta modificacin como ilustracin de lo dicho en el segundo prrafo del Apartado 10.5.
>z 0003 LOC 0003 OBJ 8100 LINE 0001 LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 LINE 0001 0002 0003 0004 0005 LABEL SOURCE AJMP SOURCE MOV MOV MOV SETB RLC MOV ACALL JNB RRC MOV ACALL JNB AJMP SOURCE PUSH MOV PUSH MOV MOV CODE 0400 CODE TCON,#Ol IE,#81 A, #OO C A PO,A 0300 ACC.7,0209 A PO,A 0300 ACC.O,OLll 0209 CODE ACC A,RO ACC RO,#04 R1,#20

>z 02000219 LOC OBJ 0200 758801 0203 75A881 0206 7400 0208 D3 0209 33 020A F580 02oc 7100 020E 30E7F8 0211 13 0212 F580 0214 7100 0216 30EOF8 0219 4109 >Z 03000316 LOC OBJ 0300 COEO 0302 E8 0303 COEO 0305 7804 0307 7920

LABEL

B0209

B0211

LABEL

B0307

198
0309

Introduccin

los

Microcontroladores

030B 030D 030F 0311 0313 0314 0316

7AFF DAFE D9FA D8F6 DOEO FE DOEO 22

0006 0007 0008 0009 0010 0011 0012 0013 LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017

B0309 B030B

MOV DJNZ DJNZ DJNZ POP MOV POP RET SOURCE PUSH MOV PUSH MOV PUSH MOV MOV ACALL MOV ACALL DJNZ POP MOV POP MOV POP RETI

R2,#FF R2,030B R1,0309 RO,0307 ACC RO,A ACC

>Z 0400 0420 LOC OBJ 0400 COEO 0402 E5DO 0404 COEO 0406 EE 0407 COEO 0409 780A 040B 7580FF 040E 7100 0410 758000 0413 7100 0415 D8F4 0417 DOEO 0419 FE 041A DOEO 041c F5DO 041E DOEO 0420 32 DISASSEMBLYCOMPLETED >

LABEL

B040B

CODE ACC A,PSW ACC A,RO ACC RO,#OA PO,#FF 0300 PO,#OO 0300 R0,040B ACC RO,A ACC PSW,A ACC

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.
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 (INTO) produce una secuencia de intermitencia de todos los bits del Puerto 0 (PO), la ejecucin de esta rutina (T2EX) produce el intercambio alternativo de los nibbles bajo y alto del Puero 0 (PO), como se indica a continuacin:

Interrupciones

203

0 Programa fuente
TITLE COMMENT PRIORO.ASM. *Desplazaunbitdeizda. adcha. enelPuerto 0 (PO), adems, presentaotros programas alternativos 31.5.91 * ON

SYMBOLS CODE RETARDO EQU 0300H INTO EQU 0400H T2EX EQU 0500H ORIGIN 0003H JMP INTO .-------------_ORIGIN 002BH JMP TLEX ;--------------ORIGIN 0200H MOV TCON,#OlH MOV TZCON,#08H MOV IE, #AlH MOV IP, #OOH #OOH MOV A, SETB C SALO:RLC A MOV PO, A CALL RETARDO JNB A.7, SALO SAL1:RRC MOV CALL JNB JMP A PO, A RETARDO A.0, SAL1 SALO

; Comienzo de la RUTINA de RETARDO. ; Comienzo de la RUTINA de INTERRUPCION. ; Comienzo de la RUTINA de INTERRUPCION (T2EX). ; Vectorizacin de la RUTINA de INTERRUPCION (INTO). ; Llamada a la RUTINA DE INTERRUPCION. -------------------------~-~-~~

; (TCON t OlH flanco); (TCON c- OOH nivel). ; Se programa la T2EX por flanco. ; Habilitada interrupcin INTO y T2EX. ; Define prioridad. IP t OO (P es ya por defecto). ; IP t 20H alta prioridad para T2EX. ; Pone a O ACC. ; Se pone el CARRY a IB. ; Rotacin de un bit a la izda. ; Se escribe en el Puerto 0 (PO). ; 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 (PO). ; Salta si el bit ACC.0 es < > de O.

.-----------------------------------: -------ORIGIN 0300H ; Comienzo de la rutina de RETARDO. PUSH A ; Se guarda el ACC en el sta& (PILA).
MOV A, RO PUSH A, MOV A, PSW PUSH A, MOV RO, #15H SAL2:MOV Rl, #20H SAL3:MOV R2, #FFH SAL4:DJNZ R2, SAL4 DJNZ Rl, SAL3 DJNZ RO, SAL2

; Rutina comentada en el Ejercicio 7.5.

204

Introduccin a los Microcontroladores

POP A MOV PSW, A POP A MOV RO, A POP A ; Se recupera ACC del stack. RET ; - - - - - - - - - - - - - - - ---------------------------ORIGIN 0400H ; Comienzo de la rutina de interrupcin INTO

; poniendo en intermitencia todos los bits del PO.


PUSH A MOV A PSW PUSH A, MOV A RO PUSH A, MOV RO, #OAH SAL5:MOV PO, #FFH CALL RETARDO MOV PO, #OOH CALL RETARDO DJNZ RO, SAL5 POP A MOV RO, A POP A MOV PSW, A POP A RETI ;------------ORIGIN 0500H ANL TZCON,#BFH PUSH A MOV A, PSW PUSH A MOV A, RO PUSH A MOV RO, #08H SAL6:MOV PO, #FOH CALL RETARDO MOV PO, #OFH CALL RETARDO DJNZ RO, SAL6 POP A MOV RO, A POP A MOV PSW, A POP A RETI END

; Se guarda en el stack el registro de estado. ; Se guarda, tambin, el registro RO. ; Contador de eventos.

; Se recuperan los registros del Sta&>.

---------------------------; Comienzo de la rutina de interrupcin (T2EX). ; Se borra el flag EXF2 por soft.

; Hasta aqu guardar registros en el stack. ; Contador de eventos.

; Se recuperan los registros del stack.

Interrupciones

199

POH b7 Configuracin 1 1 b7 Configuracin 2 0 0 0 0 1 1 1 1 1 0 0

POL b0 0 0

b0 1 1 b0 1 1 1 0 0 0 0

b7 Configuracin 3 1

................................. .................................

............ ............

As estar oscilando entre los dos estados hasta ocho veces.


??

Esquema del montaje (Figura 10.8)

Como se puede observar en la figura, el pulsador pone en marcha simultneamente las dos interrupciones INTO 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:

v
6052 TXEX lL! 39I 30 37 36 34 33 32
-

INTO

12

+ P O . O 4 P0.1 __) P 0 . 2 + P0.3 + P0.4 -----+ P 0 . 5 ------b P 0 . 6 ------+ PB.7

Figura 10.8.

200

Introduccin

a los

Microcontroladores

a) Que se ejecute la interrupcin INTO y posteriormente T2EX, pulsando una sola vez. b) Que se invierta el orden de ejecucin.
??

Mapa de memoria
500H RUT. DE INTERRUP. T2EX

rl
RUT. DE INTERRUP. INTO
??

Flujograma

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, INTO tiene mayor prioridad que T2EX, por esta razn, en el programa: IP f- OOH Para que se cumpla la segunda opcin, a T2EX se le da la prioridad alta y a INTO la prioridad baja, es decir: PT2 t 1 PXOtO Estos son los flujogramas correspondientes al programa principal, rutina de retardo y las dos rutinas de interrupciones correspondientes a INTO y T2EX.

Interrupciones

201

(-yi-)
ti
TCON <-- 01 H T2CON <-- 08H RO <-- 0 4 H

Rl <-- 20H

CI cl
P O <-- A C C RUTINA: RETARDO P O <-- A C C 4 RUTINA: RETARDO

DEC (R2)

DEC

(Rl)

DEC (RO)

Introduccin

los

Microcontroladores

GUARDAR REGISTROS EN EL STACK

BORRA FlAG TSEX 4


GUARDAR REGISTROS EN EL STACK

cl
RO <-- 08H P O c-- FOH JI RUTINA: RETARDO JI P O <-- OFH 4 RUTINA: RETARDO

SALVAR DEL

REGISTROS STACK

RETI f?

??

Programa objeto
LINE 0001 LABEL SOURCE AJMP CODE
0400

>z 0003 LOC OBJ 0003 8100 DISASSEMBLYCOMPLETED

>Z 002B
LOC 002B >Z LOC OBJ Al00 DISASSEMBLYCOMPLETED
021F

LINE 0001

LABEL

SOURCE AJMP

CODE
0500

0200

OBJ
758801 75C808 7

0200 0203 0206

LINE 0001
0002 0003 0004 0005 0006 0007 0008

LABEL

0209
02oc

5A8Al 75B800
7400

020E 020F
0210 0212 0214

D3
33

B020F

F580
7100

0217 0218 021A 021c 021F

30E7F8 13 F580 7100 30EOF8 410F

0009 0010 0011 0012 0013 0014 0015 LINE 0001


0002 0003 0004 0005 0006 0007 0008

B0217

SOURCE MOV MOV MOV MOV MOV SETB RLC MOV ACALL JNB RRC MOV ACALL JNB AJMP SOURCE PUSH MOV PUSH MOV PUSH MOV MOV MOV DJNZ DJNZ DJNZ POP MOV POP MOV POP RET SOURCE PUSH

CODE TCON,#Ol T2CON,#08 IE,#Al IP,#OO A, #OO C A PO,A


0300

ACC.7,020F A PO,A
0300

ACC.0,0217 020F CODE ACC A,RO ACC A,PSW ACC RO,++15 R1,#20 R2,#FF R2,030F R1,030D R0,03OB ACC PSW,A ACC RO,A ACC

>Z0300031E LOC OBJ 0300 COEO 0302 E8 0303 COEO 0305 E5DO 0307 COEO 0309 7815 030B 7920 030D 7AFF 030F DAFE 0311 D9FA 0313 D8F6 0315 DOEO 0317 F5DO 0319 DOEO 031B F8 031c DOEO 031E 22
?? ?

LABEL

0009 0010 0011 0012


0013 0014 0015 0016 0017

B030B B030D B030F

04000420

LOC
0400

OBJ COEO

LINE 0001

LABEL

CODE ACC

206
0402 0404 0406 0407 0409 040B 040E 0410 0413 0415 0417 0419 041A 041c 041E 0420

Introduccin a los Microcontroladores

E5DO COEO EE COEO 780A 7580FF 7100 7,58000 7100 D8F4 DOEO F8 DOEO F5DO DOEO 32

0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017

B040B

MOV PUSH NOV PUSH MOV MOV ACALL MOV ACALL DJNZ POP MOV POP MOV POP RETI

A,PSW ACC A,R0 ACC RO,#OA PO,#FF 0300 PO,#OO 0300 R0,04OB ACC RO,A ACC PSW,A ACC

Finalmente sta es la rutina T2EX que se activa al producirse un flanco descendente en el pin del mismo nombre.
>Z 0500 0523 LOC OBJ 0500 53CEBF 0503 COEO 0505 E5DO 0507 COEO 0509 EE 050A COEO 05oc 7808 050E 7580FO 0511 7100 0513 75800F 0516 7100 0518 D8F4 051A DOEO 051c FE 051D DOEO 051F F5DO 0521 DOEO 0523 32 DISASSEMBLYCOMPLETED > LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 0018 LABEL SOURCE ANL PUSH MOV PUSH MOV PUSH MOV MOV ACALL MOV ACALL DJNZ POP MOV POP MOV POP RETI CODE TZCON,#BF ACC A,PSW ACC A,RO ACC RO,++08 PO,#FO 0300 PO,#OF 0300 R0,050E ACC RO,A ACC PSW,A ACC

B050E

En este Ejercicio 10.2 parece interesante comprobar, adems de las interrupciones simultneas, los siguientes aspectos:
??

En el caso de que se est ejecutando una interrupcin, iqu suceder si se activa otra de menor o igual prioridad?

Interrupciones

207

- 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. ?? iQu 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. 10.6. INTERRUPCIONES INTERNAS PRODUCIDAS POR EL TIMER 0 Y 1 Las interrupciones de los Timers 0 y I son generadas por TFO y TFl respectivamente (Figura 10.2), al producirse un sobrepasamiento en el registro de contaje del timer correspondiente. Con la intencin de servir de repaso y a modo de resumen se muestran a continuacin los registros de contaje, losflags que son afectados, segn el timer, y los modos de trabajo. TIMER/COUNTER 0 EN MODO 0: TFO -> INTERRUPT TIMER/COUNTER 1 EN MODO 0: TH 1 (8 bits) TL1 (5 bits) > INTERRUPT

TIMER/COUNTER 0 EN MODO 1: TH0 (8 bits) TIMER/COUNTER 1 EN MODO 1: TH1 (8 bits) TIMER/COUNTER 0 EN MODO 2: TL0 (8 bits) TIMER/COUNTER 1 EN MODO 2: TL1 (8 bits) . TFl -> I N T E R R U P T TFO -> INTERRUPT . TFl -> I N T E R R U P T TFO -> INTERRUPT

208

Introduccin a los Microcontrolacfores

TIMER/COUNTER 0 y 1 EN MODO 3: TL0 (8 bits) TH0 (8 bits) TFO -> INTERRUPT TFl -> INTERRUPT

En cualquier caso, el &g activo es borrado por hardware cuando sea vectorizada la rutina de atencin a la interrupcin.

Este ejercicio produce el desplazamiento de un bit a la izda. y se visualiza en el Puerto 0 (PO). 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 PI 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 sobrepasamiento 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.
??

Esquema de montaje (Figura 10.9)

b-7 b6 b5 b4 b3 b2 bl bO

b7 b6 b5 b4 b3 b2 bl bO

tttttttt

Figura 10.9

Interrupciones

2 0 9

??

Mapa de programas

OOlBH VECTORIZACION (TIMER 1) 0300H

??

Flujogramas

DESPIAl A S M

TMOD c-- 10H

7
A C C <-- 0 1 H TL1 <-- OOH TH1 <-- OOH TCON <-- 40H

210

Introduccin a los Microcontroladores

El programa principal contiene los siguientes bloques: - Primer bloque: Inicializacin: TMOD c- 10H ; Queda programado el Timer I en Modo 1. IE c- 88H ; Se habilitan interrupciones globalmente y concretamente la ; que se produce en el sobrepasamiento del Timer 1. IP f-- 08H ; Prioridad l a esta interrupcin. En este caso, como es la ; nica, podra prescindirse de esta instruccin. - Segundo bloque: ACC f- OlH ; Se carga el registro ACC con el bit que se va a desplazar, para ; conseguir el efecto de deslizamiento. - Tercer bloque: TL1 y TH1 c- OOH ; Carga de los registros de contaje. Al cargarlos con (OOH) se ; conseguir la mxima temporizacin. - Cuarto bloque: TCON t 40H ; Se permite la entrada de impulsos de contaje (TRl c- 1) in; detinidamente. Esta ltima palabra significa que cuando Ile; gue a producirse el sobrepasamiento paso de FFFFH a ; OOOOH, el contador seguir contando, elflas del Tima I (TFl) ; se pondr a O por hard al vectorizar la interrupcin y estar ; dispuesto a activarse de nuevo en el prximo sobrepasa; miento, y as sucesivamente hasta impedir el paso de los im; pulsos de contaje (TRl t 0). - Quinto bloque: PROGRAMA ; Simula una tarea repetitiva que en el control de procesos se PRINCIPAL ; puede identificar por capturas de datos, visualizacin de ; resultados, sealizaciones de alarmas, etc. La rutina contiene los siguientes bloques: - Indudablemente el primer bloque que debera estar presente, pero que en este caso no lo est por no existir un programa principal, es el que hace referencia a la salvaguarda de los registros del microcontrolador utilizados por el programa principal y coherentemente, al final de la rutina, el bloque antagnico que repone los valores de los registros salvados. - Primer bloque: RL A ; Desplazamiento de un bit del (ACC) a la izquierda.

Interrupciones

211

- Segundo bloque: PO t- ACC ; Escribe el contenido del ACC por el PO. - Tercer bloque: TL1 y TH 1 f- Pl ; Si estas dos instrucciones no existieran en el programa, la tem; porizacin del Timer 1 sera la mxima, tal como se inicializ ; en el programa principal, pero en este caso los valores del re; gistro de contaje se refrescan despus de la lectura de los inte; rruptores situados a la entrada del Puerto 1 (PI) y que pueden ; ser modificados a voluntad por el usuario. - Cuarto bloque: RETI ; Retorno de la rutina de interrupcin. 0 Programa fuente
TITLE COMMENT DESPLAl.ASM. *Desplaza un bit en el puerto PO, con velocidadvariable en funcindeldato ledoenelpuertodeentradaP1 1.6.91 * ON

SYMBOLS CODE ORIGIN OOlBH JMP 0300H

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

; Vectorizacin de la interrnpcin Timer 1.

-------------------------------

ORIGIN 0200H MOV TMOD,#lOH ; Timer 1 comotemporizadon>en ModoI. MOV IE, #88H ;Validacin de interrupcin Timer 1. MOV IP, #08H ; Prioridad para el Timer 1 (no es necesaria). MOV A, #OlH ; Se carga el ACC con 0 1 H. MOV THl, #OOH ; Se carga la parte alta del Timer 1. MOV TLl, #OOH ; Se carga la parte baja del Timer 1. MOV TCON,#40H ; Se arranca el Timer 1. SALO:NOP JMP SALO ;Se cierraen unbucleque no hace nada. i ---- ---------------_--_-____________________~ ORIGIN 0300H ; Rutina de desplazamiento y lectura de P 1. RL A ; Desplazamiento a la izda. del (ACC). MOV PO, A ; Saca el dato por el PO. MOV TLl, Pl ; Lee del puerto PI y carga en la parte baja del Timer 1. MOV THl, Pl ; Lee del puerto Pl y carga en la parte alta del Timer 1. RETl END

212

Introduccin <I los Microcontrolodores

?? Programa objeto

En primer lugar aparece el salto a la rutina de vectorizacin: >z 001B


LOC OOlB > OBJ 6100 DISASSEMBLYCOMPLETED LINE 0001 LABEL SOURCE AJMP CODE 0300

A continuacin estn los programas de inicializacin y el programa principal ficticio (NOP. = NO OPERACION) y la rutina de interrupcin.
>z 02000215 LOC OBJ 0200 758910 0203 75A888 0306 75B808 0209 7401 020B 758DOO 020E 758BOO 0211 758840 0214 00 0215 4114 DISASSEMBLYCOMPLETED >z 03000309 LOC OBJ 23 0300 0301 F580 0303 85908B 0306 85908D 32 0309 DISASSEMBLYCOMPLETED > LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 LABEL SOURCE MOV MOV MOV MOV MOV MOV MOV NOP AJMP

TMOD,#lO IE,#88 IP,#OE A, #Ol THl,#OO TLl,#OO TCON,#40 0214

B0214

LINE 0001 0002 0003 0004 0005

LABEL

SOURCE RL MOV MOV MOV RETI

CODE A PO,A TLl,Pl THl,Pl

10.7.

INTERRUPCIONES INTERNAS DEL TIMER 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 10.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 9.3 y Figura 9.8).

Interrupciones

213

Este ejercicio es una variante del Ejercicio 10.1 (DESPLAO.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 10.10). El Ejercicio 8.4 tambin utiliza una tabla.

Figura 10.10.

El valor en hexadecimal que figura entre los bits del puerto de salida (PO) es el que se recargar en los registros de contaje TL2 y TH2, estos valores debern ser cargados en una tabla de datos. Objetivos - Estudiar las interrupciones del Timer 2. - Cargar los registros de contaje con los datos procedentes de una tabla. - Observar el borrado delflag de interrupcin del Timer 2 por soft.
?? ??

Esquema del montaje (Figura 10.11)


TABLA DE DATOS

b7

b6

b5

b4

b3

b2

bl

b0

Figura 10.11.

214
??

Introduccin a los Microcontroladores

Mapa de programas 0500H

002BH, VECTORIZACION (TIMER 2) 0500H

1 l-TABLA DATOS 1 Habilitacin de interrupciones Prioridad de interrupciones IE c- AOH. IP c- 40H.

??

Flujogramas

A continuacin se hace un breve comentario a los flujogramas del Ejercicio 10.4. El programa principal INTETIM2.ASM comienza con la inicializacin del registro DPTR (puntero de la tabla) de la variable auxiliar (AUX), que apunta el sentido de rotacin de cada ciclo, y de la variable ROTA, que es el registro de almacenamiento del acumulador donde se realizan las rotaciones. El CARRY se pone a l. Es el bit que se desplaza. Se programan los registros de:

(Puesto que slo hay una interrupcin del Timer 2, es innecesario programar IP; no obstante, se ha puesto como recordatorio). Se inicializan los registros de contaje. Se arranca el Timer 2 y se entra en el programa principal. Este programa, como en el ejercicio anterior, no existe y en su defecto se ha puesto la instruccin NOP (no operacin). El contador de programa (PC) se encontrar normalmente ejecutando la instruccin NOP, salvo que se produzca un sobrepasamiento en el Timer 2 y por consiguiente un salto a la rutina de interrupcin T2. La rutina de interrupcin INTERRUP.T2 es la que se encarga de desplazar el bit a dcha. y a izda., visualizar el resultado por el Puerto (PO) y retener esa visualizacin en funcin del tiempo asignado al Timer 2, segn los valores de la tabla de datos. La primera operacin que hace es borrar el jZag de interrupcin, puesto que no lo hace automticamente la vectorizacin de la rutina (no hay borrado por hardware). Determina el sentido del desplazamiento segn la variable AUX, que se posiciona a la salida de la rutina, segn el bit desplazado llegue al extremo derecho o izquierdo. Tambin, en este caso, inicializa la tabla de datos. En la parte central del flujograma visualiza el dato, lee la tabla de datos, la almacena en la parte baja y alta del registro de contaje (ambos registros tienen el mismo valor) e incrementa el puntero de TABLA (DPTR t- (DPTR) + 1).

Interrupciones
??

215

Flujogramas e
INICIALIZAR:

r-l
D P T R <-- 0 5 0 0 H AUX <-- 01 H R O T A <-- OOH ARRANCATIMER TPCON <-- 04H

TL2 <-- TABLA TH2 c-- TABLA

INCREMENTAR PUNTERO TABLA

AUY. c-- 01 H

AUX <-- OOH

#-INICIALIZAR PUNTERO D P T R <-- 0 5 0 0 H

216

Introduccin

a los

Microcontroladores

0 Programa fuente
TITLE COMMENT INTETIM2.ASM. *Igual que DESPLAO.ASM, pero la velocidad de desplazamiento es funcindelosvalores registradosenunaTABLA. 1.6.91 * ON

SYMBOLS CODE TABLA EQU 0500H AUX EQU 40H ROTA 41H EQU TIMERZ EQU 0300H

ORIGIN 0500H .BYTE FFH,80H,40H,OOH,40H,8OH,FFH : -- _______-_-----_-----------------------------ORIGIN 002BH ; Vectorizacin rutina interrupcin (Timer 2). JMP TIMERZ i ----- - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ORIGIN 0200H ; Programa de inicializacin y principal. MOV MOV MOV SETB MOV MOV MOV MOV MOV SALO:NOP JMP DPTR,#TABLA AUX, #OlH ROTA,#OOH C IE, #AOH IP, #40H TL2, #OOH TH2, #OOH TLCON,#04H SALO

; Posmem comienzo de la TABLA. ; Variable que indica el sentido de ROTACION: ; Variable dato de salida por PO. ; Posmem comienzo rutina Timer 2. ;Comienzodelosdatos delaTABLA.

; Se carga inicio de TABLA en puntero DPTR. ; Se inicia movimiento rotacin a izda. ; Se inicia valor salida leds por puerto PO. ; C t 1. Este es el bit que se desplaza. ; Se habilita interrupcin Timer 2. ; Mxima prioridad Int. Timer 2 (no es necesario). ; Se carga registro contador Timer 2. ; Se arranca Timer 2. ; Simula el programa principal.

_________------------------: ---------------ORIGIN 0300H ; Comienzo de la rutina de interrupcin. ANL TLCON,#BFH ; Se borra elflas de interrupcin. PUSH A ; Guardar registros programa principal. MOV A, AUX ; Para saber el sentido de rotacin que . . . JZ SAL1 ). * . . corresponde. Si AUX t OlH a la izda . . . MOV A, ROTA ; . . . si AUX t OOH a la dcha.
A ROTA,A SAL2 A, ROTA A ROTA,A PO, ROTA A, #OOH A, @A+DPTR TL2, A TH2, A

RLC MOV JMP SALl:MOV RRC MOV SAL2:MOV MOV MOVC MOV MOV

; ; ; ;

El contenido de ROTA se saca por el PO. Se inicializa ACC. Se obtiene dato de temporizacin de TABLA. Se carga dato TABLA en Timer 2.

Interrupciones

217

MOV TZCON,#04 INC DPTR MOV A, AUX JZ SAL3 MOV A, ROTA CJNE A, #80H,SAL4 MOV AUX #OOH MOV DPTR,#TABLA JMP SAL4 SAL3:MOV A, ROTA CJNE A, #OlH,SALI MOV AUX #OlH MOV DPTR,#TABLA SAL4:CLR C POP A RETI END
??

; Se arranca Timer 2. ; Se incrementa puntero de TABLA. ; Si el bit que se desplaza lleg al extremo . . . ; . . . del recorrido se cambia el sentido de la . . . ; . . . rotacin, cambiando el valor de AUX. ; Se inicializa puntero de TABLA.

Programa objeto
OBJ 6100 OBJ 900500 754001 754100 D3 75A8AO 75B840 75ccoo 75CDOO 75C804 00 4119 LINE 0001 LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 LABEL SOURCE AJMP SOURCE MOV MOV MOV SETB MOV M O V MOV MOV MOV NOP AJMP SOURCE ANL PUSH MOV JZ MOV RLC MOV LJMP MOV RRC CODE 0300 CODE DPTR,#0500 40,#01 41,#00 C IE,#AO IP,#40 TL2,#00 TH2,#00 TZCON,#04 0219 CODE T2CON,#BF ACC. A,40 0311 A,41 A 41,A 0316 A,41 A

>Z 002B
LOC 002B LOC 0200 0203 0206 0209 020A 020D 0210 0213 0216 0219 021A

>20200021A
LABEL

B0219

>z03000344 LOC OBJ 0300 53C8BF 0303 COEO 0305 E540 0307 6008 0309 E541 030B 33 03oc F541 030E 020316 0311 E541 0313 13

LABEL

B0311

218
0314 0316 0319 031B 031c 031E 0320 0323 0324 0326 0328 032A 032D 0330 0333 0336 0338 033B 033E 0341 0342 0344 >

Introduccin Q los Microcontroladores

F541 854180 7400 93 F5CC FSCD 75C804 A3 E540 600E E541 B48014 754000 900500 020341 E541 B40106 754001 900500 c3 DOEO 32 DISASSEMBLYCOMPLETED

0011 0012 0013 0014 0015 0016 0017 0018 0019 0020 0021 0022 0023 0024 0025 0026 0027 0028 0029 0030 0031 0032

B0316

B0336

B0341

MOV MOV MOV MOVC MOV MOV MOV INC MOV JZ MOV CJNE MOV MOV LJMP MOV CJNE MOV MOV CLR POP RETI

41,A PO,41 A, #OO A,@A+DPTR TL2,A TH2,A T2CON,#04 DPTR A,40 0336 A,41 A,#80,0341 40,#00 DPTR,#0500 0341 A,41 A,#01,0341 40,#01 DPTR,#0500 C ACC

MO500 0506 OO 0102 03 04 05 06 07 08 09 0500 FF8040004080FF

OAOBOCODOEOF

ASCII-CODE ..@.@..

Con el listado de la tabla de datos termina este apartado y captulo dedicado al tema del tratamiento de las interrupciones.

Interrupciones

219

1. i.Qu es la tabla de vectorizaciones? Explicar el proceso de preparacin y ejecucin de una rutina de interrupcin desde el instante en que el perifrico enva la seal de lATENCION! 2. iQu es el flag de interrupcin? Qu nombre recibe el flag de interrupcin del Timer 1 y qu posicin ocupa en el registro correspondiente? iCul es el nombre de este registro? 3. iQu misin tiene el Interrupt Enable Register (IE)? iQu posmem ocupa en el SFR? iCul es la dinmica de funcionamiento de los bits del IE? 4. iQu condiciones impiden que sea atendida una interrupcin? 5. Explicar qu se entiende por borrado por hardware y por software en una interrupcin.

6. iQu sucede, comnmente, si estando en ejecucin una rutina de interrupcin se produce una nueva interrupcin de ms alta prioridad? De igual prioridad? De menor prioridad? 7. Qu se entiende por prioridad en el mismo nivel? Indicar en el Microcontrolador 8052 cul es el orden de prioridad dentro del mismo nivel. 8. Explicar de una forma secuenciada la misin de los cuatro bloques diferenciados de la Figura 10.6. 9. Configurar el Interrupt Priority Register (IP) para que el Timer 2 y las comunicaciones serie tengan la mxima prioridad. 10. Diferenciar entre interrupciones internas y externas.

1. En el Ejercicio 10.1, DESPLAO.ASM, realizar la siguiente modificacin: que la configuracin inicial de bits (byte) que se desplazan no sea una constante suministrada por programa, es decir, un uno y el resto ceros, por ejemplo, 10000000 B, sino que sea conligurable por el usuario mediante unos interruptores conectados al Puerto PI. Nota: El algoritmo del programa principal, como se habr observado, debe ser modificado. Se sugiere, para detectar los extremos del desplazamiento, utilizar un contador. 2. En el Ejercicio 16.3, DESPLAI.ASM, el valor de carga de los registros de contaje se efecta a travs de Pl correspondiendo el mismo valor para TH1 y TLl. Modificar

el programa y el hardware del circuito para que TH1 se cargue a travs de Pl y TL1 de P2; de esta manera se ganar en precisin. 3. En el Ejercicio propuesto nmero 5 del Captulo 9, la seal de parada proveniente del pulsador debe ser testeada en cada ciclo de programa para detectar su activacin. Por eso la respuesta no es instantnea. Para evitar este inconveniente, que en el ejercicio no tiene importancia desde un punto de vista prctico, se aconseja tratar la accin de parada mediante una interrupcin (INTO o INTI). La rutina de atencin a la interrupcin deber encargarse de desactivar el sistema y dejarlo listo para un nuevo ciclo de funcionamiento.

220

Introduccin a los Microcontroladores

4. Generalmente un proceso tiene mltiples interrupciones externas. Imaginar que tiene ocho interrupciones provenientes de otras tantas alarmas externas (de presin, temperatura, caudal, etctera), y para cada una tiene asociada una rutina de interrupcin. Explicar cmo procedera a la conexin de las alarmas al microcontiolador y hacer un esquema de cmo sera el programa. Nota: Considrese que realmente slo se tienen dos interrupciones externas, activas por flanco descendente, INTO e INTl. Se sugiere utilizar una para detectar la interrupcin y las ocho alarmas se podran leer desde... 5. Realizar el ejercicio anterior de dos formas diferentes: a) Testeando en cada ciclo de programa las ocho alarmas con este orden de prioridad:0,1,2,3,4,5,6~7. b) Tratando cada alarma como una interrupcin y tambin con prioridad, de tal forma que estando en ejecucin la rutina asociada a la alarma 5 se activase la 1, dejara de ejecutar la rutina 5 cuando no exista peligro para el proceso, y comenzara la atencin de la rutina 1; cuando terminase sta, concluira la rutina 5 anteriormente iniciada. Adems, tanto en un caso como en otro se harta sonar una alarma sonora y por un puerto se indicara qu alarma se ha activado. Se sugiere utilizar un conversar B C D de siete segmentos para conectarle a la salida del puerto un display. 6. En otro orden de ejercicios, se propone el correspondiente al dilogo con interrupcin entre un perifrico, por ejemplo una impresora, con un microcontrolador que actuara como un ordenador clsico. Se trata de un perifrico receptor de datos. Cuando el perifrico est preparado

para recibir un carcter (byte) enva una interrupcin al microcontrolador, ste abandona su tarea principal (se puede elegir cualquier ejercicio para mantener ocupado el microcontrolador), toma un carcter de la tabla y lo coloca sobre el Puerto PO, al mismo tiempo que enva una seal, por ejemplo, poniendo a l el pin P1.0, para indicar al perifrico que tiene un dato listo para leer. Una vez procesado este dato por el perifrico, ste enva una nueva interrupcin para obtener un nuevo carcter, y as sucesivamente hasta que el microcontrolador enva un carcter de control que indique el final de la transmisin. La Figura 10.12 ilustra el ejercicio.

Figura 10.12. Nota: Se pueden simular mltiples transmisones de este tipo, y aunque primitivas y carentes de eficacia ilustran el trabajo de las interrupciones. Se puede utilizar como perifrico otro microcontrolador con un programa adecuado al tipo de perifrico que se desee simular. Tambin sera interesante realizar una transmisin duplex en paralelo utilizando otro microcontrolador; se deber cargar en ambos el programa de transmisin y recepcin. No deben olvidarse las lneas de dilogo. El Captulo 12 trata de la comunicacin serie segn protocolos estndar, que se identifica mejor con las que se utilicen habitualmente.

Implementacin

de la aplicacin en los Microcontroladores 8052/8051

223

PO.O

-&: CANAL 0 1. C=180K Z 8052/5 1 PO.l y DscILoscoPIo

FR=4K7 C= 180K CANAL 1

Figura ll .2.

El troceado es funcin del Timer 0, que actuar con autor-recarga (Modo 2) con un valor constante de recarga de 200 CLS ((FF+l)H - C8H = 38H) y la anchura del pulso depender del Timer 1 trabajando en Modo 1, los valores que determinan el ancho del pulso los toma de una tabla con que se estableci, previamente, la relacin (elongacin de la onda - ancho del pulso). La Figura ll .3 representa la dcima parte de la semionda positiva. La semionda negativa tendr el mismo aspecto, salvo que los impulsos sern negativos, es decir, estarn por debajo de la lnea de referencia.

200 /LS

----200 ,Ls 200 /LS 200 /Js 200,us

1 0 0 div./periodo

= 20000ps -----------e

Figura 11.3.

224

Introduccin a los Microcontroladores

La Figura ll .4 representa con puntos el troceado de la onda completa. Obsrvese que la separacin en el tiempo entre punto y punto es de 200 PS.
I i I ) i : .

,:.

.. ..

. 2@0

yS/dic

Figura 11.4. ?? Mapa de memoria

Esta aplicacin se ha realizado para que pueda ser implementada tanto en un 8052 como en un 805 1. Por esta razn se utilizan los primeros 4 K de memoria interna y los timers y registros son comunes para ambos microcontroladores. La Figura ll .5 muestra el mapa de memoria de la aplicacin. En la parte baja de las direcciones de memoria se encuentran las vectorizaciones de las rutinas, a continuacin el programa principal (posmem 0200H) y la rutina de retardo (posmem OsOOH), las rutinas de las interrupciones (0900H) y (OCOOH), y la tabla de datos (OEOOH) completan el mapa.

Implementacin d e l a a p l i c a c i n en los Microcontroladores 8052/8051

225

I
RUT.INT.TIMERQ

I I

' INTERRUPCIONES

pi 0200H L I Z A C I O N > I N I C I A

VECTORIZACION

JMP

0200H

Figura ll .5

?? Flujogramas

El flujograma que se muestra a continuacin corresponde al programa principal (AB1 lOO.ASM), que tiene como objetivo principal la inicializacin y el envo de una seal parpadeante por el bit P0.3, que indica que el sistema est en marcha.

Introduccin a los Microcontroladores

CARGAR

TABLA

VECTORIZAR: ; (OOOOH) ; (OOOBH) ; (001 BH)

HABILITAR INTE.: *TIMERO *TIMERl

DPTR <-- OEOOH

PROGRAMAR TIME%: TMOD <-- 12H

TH0 < -- 38H

TCON <-- 10H

Es la misma del ejercicio 7.5 (RETARO.ASM)

RUTINA RETARDO

CAPITULO

Implementacin de la aplicacin en los Microcontroladores

8052/8051

ll .l. INTRODUCCION
En el Captulo 1 se describa la operacin de grabar, verificar, proteger y ejecutar la informacin (programa) en/desde la EPROM del microcontrolador. Este captulo pretende, desde un punto de vista ms prctico, orientar al usuario. Se persigue que la explicacin abarque todo el proceso de la forma ms didctica posible. Se realizar el planteamiento del problema, la depuracin y una vez el programa optimizado se grabar en la memoria EPROM del microcontrolador. Estas operaciones sern descritas ampliamente a lo largo de este captulo. La aplicacin a desarrollar en el microcontrolador es la siguiente: Se trata de generar una onda senoidal de frecuencia 50 Hz modulando en el tiempo la anchura de un pulso de amplitud constante. Las operaciones secuenciadas a realizar son stas y se estudian en los siguientes apartados: 1. 2. 3. 4. 5. Conversin del archivo (programa de la aplicacin) ejecutable en el emulador de extensin .HEX en archivo ejecutable en el microcontrolador .BIN (Apartado ll .3). Cargar el programa en el bu& del grabador de memorias habiendo seleccionado previamente el fabricante y el tipo de microcontrolador (Apartado ll .4). Efectuar a rengln seguido la operacin de grabacin y veriIicacin en la memoria del microcontrolador (Apartado ll .4). Operacin de proteccin del programa grabado en la EPROM, mediante la cadena de encriptacimk y los bits cerradura (Apartado ll .5). Realizar las conexiones pertinentes, segn la aplicacin y puesta en marcha mediante el impulso en el pin RESET (Apartado 11.6).

221

222

Introduccin a los Microcontroladores

ll .2. APLICACION
W Descripcin

El objetivo es tener una onda senoidal en la salida de 50 Hz y amplitud constante modulando la anchura de los impulsos; la semionda positiva se obtiene en el pin PO.0 y la negativa en el pin PO. 1 del Puerto 0 (PO) del microcontrolador. Esto se hace as para poder excitar un puente de transistores HEXFET TRANSISTOR N-CHANNEL IRF 740 y obtener en la carga la onda senoidal. En la Figura ll. 1 se observa cmo la salida PO.0 excita la diagonal principal del puente y la salida PO. 1 la diagonal secundaria. El pin PO.3 se utiliza como sealizacin llevando la salida sobre un led parpadeante que indica que el programa est en marcha (Figura ll. 1).

v
OPTO 8052/51

P0.3 - L E D PARPADEANTE

DIAGONAL SECUNDARIA -4

!OPTO

Figura 11.1. Para observar el funcionamiento del programa no es preciso construir el puente de transistores, basta con colocar a la salida de los pina PO.0 y PO. 1 un filtro RC (Figura 11.2). El troceado de la onda para la modulacin del ancho del pulso (PWM) se establece en 100 divisiones por perodo que corresponde a 200 microsegundos por divisin. En la Figura ll .3 se observa cmo se efecta el troceado, siendo la anchura del pulso dependiente de la elongacin de la onda alterna.

Implementacin

de la aplicacin en los Microcontroladores 8052/?051

227

Los dos flujogramas siguientes corresponden a las dos rutinas de interrupcin Timer 0 y Timo 1. La primera se encarga de borrar la interrupcin Timer 0, que se pone en marcha desde el programa principal, adems carga el Timer I y lo pone en marcha con el valor de la tabla y decide si la seal debe salir por el pin PO.0 (diagonal principal del puente) para obtener la semionda positiva o por el pin PO. 1 para obtener la semionda negativa. La segunda rutina (Timer 1) desactiva el pulso cuando finaliza la temporizacin del Timer 1 y decide si debe iniciar la tabla por finalizacin del semiperodo o simplemente incrementar el puntero de tabla para tomar el siguiente valor. Una explicacin ms detallada se encuentra en los comentarios del programa fuente. Ambas rutinas pertenecen al archivo ABITI lOO.ASM.

INTE. TIMERO

J BORRAR INTERRUP TIMERO + ACC <-- OOH PO.0 <-- 0 ; Desactivar pulso. BORRAR INTERRU

PO. 1 <-- 0

ACC <-- @A+DPTR

; Leer dato TABLA

NO

TH1 <-- FFH

DPTR <-- OOH

INCREMENTAR

DPTR

NO

PO.0 <-- 1 PO. 1 <-- 0

PO.0 <-- 0 PO.1 <-- 1 AUX <-- 0 1 H

v AUX <-- OOH k

ARRANCAR TIMERI

(53
RETI

cl
RETI

228

Introduccin

los

Microcontroladores

?? Programas fuente
TITLE COMMENT * SYMBOLS CODE TIMERO EQU TIMERl EQU RETARDO EQU START EQU AUX EQU ON 0900H OCOOH OEOOH 0200H 61H GENERADORDEONDASENOIDAL. ABIlOO.ASM *Onda senoidalal75% de suvalorreal.lOO DIV./PERIODO. Mximaanchuradepulso200 microseg.11.6.91

ORIGIN OEOOH .BYTE FBH,F2H,ESH,DFH,DGH,CDH,C4H,BCH,B4H,ACH,A4H,9DH,96H,9OH .BYTE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .BYTE .BYTE BCH,C4H,CDH,D6H,DFH,EgH,F2H,FBH ----------------; -- - - - - - - - - - - - - - - - - - - - - - - - - - - - ; Vectorizacin RESET. ORIGIN OOOOH JMP START ;---------------- ------------------------------ORIGIN OOOBH ; Vectorizacin Timer 0. JMP TIMERO

; Comienzo rutina interrupcin Timer 0. ; Comienzo rutina interrupcin Timer 1. ; Comienzo rutina RETARDO. ; Comienzo programa. ; Variable representativa del semiciclo... >. * . a procesar. . ; Comienzo de la TABLA duracin de pulsos.

._-______--------- -----------------------------ORIGIN OOlBH ; Vectorizacin Timer 1.


JMP TIMERl .----------------------------------------------ORIGIN 0200H ; Programa de inicializacin. MOV AUX, #OO ; Inicializar semionda positiva. MOV IE, #8AH ; Activar interrupciones Timer 0 y Timer 1. MOV IP, #08H ; Mxima prioridad a las interrup. Timer 1. MOV PO, #OOH ; Puerto a cero. MOV DPTR,#OEOOH ; Inicializar puntero de TABLA. MOV TMOD,#12H ; Timer 0 en Modo 1 y Timer 1 en Modo 2. MOV TLO, #38H ; Se carga el Timer 0 para un ciclo de pulso . . . MOV THO, #38H ; . . . de 200 microseg. MOV TCON,#lOH ; Se arranca el Timer 0. SALO: SETB PO.3 ; El pin PO.3 en intermitencia, segn . . . CALL RETARDO ; . . . rutina de RETARDO, como indicador de . . . CLR PO.3 ; . . . funcionamiento del sistema. CALL RETARDO JMP SALO ; - - - - - - ___----------------------------------ORIGIN OEOOH ; Rutina de retardo para intermitente P0.3. #03H MOV RO, SALl: MOV Rl, #20H #FFH SAL2: MOV R2,

---

lmplementacin de la aplicacin en los Microcontroladores 8052/8051

229

SAL3:

DJNZ R2, DJNZ Rl, DJNZ RO, RET END TITLE COMMENT

SAL3 SAL2 SAL1

AUX

SYMBOLS CODE EQU 61H

GENERADORDEONDASENOIDAL. ABITIlOO.ASM * Tratamientodelas interrupcionesdel Timer Oy Versin 1.100 Impulsos/perodo. (11.6.91) * ON

1.

0900H ORIGIN ANL TCON,#DFH MOV A, #OOH @A+DPTR MOVe A, MOV TLl, A MOV THl, #FFH MOV A, AUX JNZ SAL4 SETB PO.0 CLR PO.1 JZ SAL5 SALI: SETB PO.1 CLR PO.0 SAL5: ORL TCON, #40H RETI ;-----------------ORIGIN OCOOH PUSH A MOV A, PSW PUSH A ANL TCON,#7FH CLR PO.0 CLR PO.1 MOV A, DPL CJNE A,#31H,SAL MOV DPTR,#OEOOH MOV A, AUX JNZ SAL7 MOV AUX, #OlH JZ SAL8 SAL7: MOV AUX, #OOH JNZ SAL8 SAL6: INC DPTR SAL8: POP A MOV PSW, A POP A RETI END

; Interrupcin Timer 0. ; Borra interrupcin Timer 0 ; Lee dato TABLA. ; Carga Timer 1. ; Determina semiciclo positivo o negativo. ; Activa diagonal principal del puente. ; Activa diagonal secundaria del puente. ; Pone en marcha Timer 1.

--_-------------------------; Interrupcin Timer 1.

; Borra interrupcin Timer 1. ; Desactiva pulso. ; Determina si es FIN de TABLA. ; Si es FIN de TABLA inicializa semiciclo.

; Si no es FIN de TABLA lee siguiente dato.

230

Introduccin a los Microcontro/adores

11.3. CONVERSION DEL ARCHIVO.HEX EN EL ARCHIVO.BIN


Como se ha venido realizando hasta ahora, el archivo .ASM se ensambla y se obtiene el archivo.OBJ; se enlaza y se obtiene el archivo.HEX. Este archivo programa es ejecutable en el sistema emulador, pero no es suficiente para poder grabarlo en la memoria interna del microcontrolador y ejecutarlo. La operacin de convertir un archivo .HEX en un archivo ejecutable>) por el microcontrolador .BIN, la realiza otro archivo denominado HEXBIN.EXE, que viene en el software del grabador de memorias. En el proceso de enlazado se obtiene un archivo .HEX, como se ha dicho, y se le asigna un nombre apropiado a la aplicacin, como es: ONDA.HEX. Esta es la operacin de enlazado (linker) para los dos archivos de la aplicacin AB1 lOO.OBJ y ABITI lOO.OBJ, tal como se ha realizado en captulos anteriores.
C:> LINK 2500 A.D. Linker Input Input Input output Copyright (C) 1985 - Version 4.05a : 0 : 0

Filename : ABIlOO.OBJ Enter Offset For 'CODE' Filename : ABITIlOO.OBJ Enter Offset For 'CODE' Filename : Filename : ONDA.HEX

Library Filename : Options (D, P, S, A, M, N, 2, X, H, E, T, 1, 2, 3, <CR> = Default) : Linker Output Filename : ONDA.HEX Disk Listing Filename : <None Specified> Symbol Table Filename : <None Specified> Link Errors : 0 Output Format : Intel Hex

A continuacin se realiza la conversin: HEXBIN.EXE ONDA.HEX > ONDA.BIN

ONDA.BIN es el archivo grabable y ejecutable desde el microcontrolador. Este es el proceso:


C:\EXPRO-60>IiEXBIN.EXE Sunshine Hex (C)Copyright 1988 to Binary converter V2.3 By Sunshine Electronic Co.,Ltd.

Input HEX file name: ONDA.HEX Output BIN file name[ONDA.BIN]: HEX file format <I>ntel /<M>otorola /<T>ektronics/<X>TI SDSMAC [1] : 1

Implementacin

de la aplicacin en los Microcontroladores 8052/8051

231

Wait... INTELHextoBinaryconverter Convertcomplete C:\EXPRO-6O)DIRONDA.X ElvolumenenlaunidadCtieneetiquetaDOS400 Elnmerode serie delvolumenes 2DIC-07Cl DirectoriodeC:\EXPRO-60 ONDA ONDA HEX 585 23/06/91 BIN 3634 23/06/91 26572800 2 Archivo(s) 13:55 0:05 bytes libres

11.4.

CARGA DEL PROGRAMA-EJECUTABLE EN EL BUFFER DEL SISTEMA GRABADOR DE MEMORIAS Y GRABACION DE LA MEMORIA

El sistema grabador que se utiliza en este caso no es autnomo; forma parte de los grabadores que actualmente se comercializan con gran profusin de marcas y de precios asequibles. Consta de una tarjeta que se conecta a los slots del bus PC (Computador Personal) y un mazo de cables unen la tarjeta con el zcalo de insercin nula; de esta forma, la memoria o el microcontrolador quedan unidos al hardware del PC. El software resulta bastante amigable, por lo que la operacin de grabar una memoria, como puede apreciarse a continuacin, es fcil. Se llama al programa PGM5 l..., y el men que aparecer en pantalla ser el siguiente:
SUNSHINE Device Programmer MODEL: EXPRO- (C)1991 MPU 8751 section V3.07' ----------Main Menu -----_--_1. DOS SHELL 2. Load BIN file to buffer 3. Save buffer to disk 4. Edit buffer 7. Display buffer 5. Change I/O base adr. of SAC-101A 6. Display loaded file history T. Type select M. Manufacturer select 2. Modify target zone B. Blank check D. Display P. Program A. Auto(B&P) R. Read V. Verify C. Compare & display error L. Program lock bit E. Program encryption code Q. Quit -------------_--_--_-______Allocation buffer sise : 64K Bytes Start address at 3Ell:OOOO Select which function? *MFG: INTEL * TYPE: 8752BH

current Encryption code OO-OF: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF lo-1F: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

232

Introduccin CI los Microcontroladores

Hay grabadores de memoria autnomos que tambin permiten la conexin con el PC a travs del puerto de comunicaciones serie, por lo que se puede operar de una forma similar a la que se indica a continuacin. El grabador y el resto de los aparatos que se han utilizado para implementar la aplicacin en la memoria del microcontrolador se referencian al final del Apndice D. La primera operacin es seleccionar el fabricante (opcin M) y el tipo de microcontrolador (opcin T), en este caso: * MFG: INTEL *TYPE: 8752BH que aparecern en la lnea superior-derecha de la pantalla. La siguiente operacin es cargar el archivo programa ONDA.BIN en el buffet(opcin 2) y si quiere, puede almacenar el contenido del buffer en el disco (opcin 3). El Men que aparecer en pantalla ser el siguiente:

* MFG: INTEL C: \EXPRO-O\*.* <DIR> <DIR> <DIR> 282 1154 59670 62032 54914 48144 60366 6416 49204 69924 48076 48098 64766 59820 51744 01-01-80 01-01-80 01-01-80 06-25-90 06-25-90 11-30-90 11-20-90 08-15-90 03-26-91 04-08-91 07-01-90 03-26-91 10-17-90 08-01-90 10-19-90 12-24-90 08-03-90 08-01-90

* TYPE: 8752BH

INSTALL.BAT EPP512.EXE EPP1024.EXE BPPGM.EXE PGM48.EXE PGM51.EXE READMEl.DOC PGMZE.EXE PALPl.EXE PALP3.EXE PALP5.EXE FPLPl.EXE PALPQ.EXE PALPZ.EXE

LOAD : File name: ONDA.BIN Load address : 0 Loading... Ok ! END ADR. : E31

Press any key to continue Or press <CR> to back to main menu

C o m m a n d : Tab PgUp PgDn Up Down Esc Enter Ctrl-Driver

Para mayor seguridad comprubese que el contenido del buffer es satisfactorio. Para esta comprobacin se pulsa la (opcin 7) y si algo no es correcto se puede modificar con la (opcin 4). Claro est que para modificaciones grandes se deber trabajar con el archivo fuente, en este caso ONDA.ASM, y volver a recorrer todo el camino, es decir, ensamblar, enlazar, convertir el .HEX en .BIN y cargarlo finalmente en el bufir. La (opcin 4) permite mltiples operaciones, como se observa en el siguiente men.

lmpkmentacin de la aplicacin en los Microcontroladores 8052/8051

233

C:\EXPRO-O> EDITING COMMAND SUMMARY ==========r===================-==E================= D [start],[end] <RETURN> : DUMP E START <RETURN> : EDIT M start,end,destination <RETURN> : MOVE BLOCK F start,end,data <RETURN> : FILL BLOCK P start,end <RETURN> : PRINT BLOCK C start,end <RETURN> : CHECK SUM S start,end,ASCII data <RETURN> : ASCII SEARCH MAX. B start,end,BINARY data <RETURN> : BINARY SEARCH MAX. . filename [argul] [argu2]...<RETURN> : SHELL ? <RETURN> : HELP <RETURN> : QUIT Q =============================================== * The information listed below is for referente only : The absolute start address of BUFFER : 3Ell:OOOO The Buffer size : 64 K BYTES

15 7

characters BYTES

As, por ejemplo, con la opcin DUMP se puede ver el contenido del bzlffer (como en la opcin 7), con la ventaja de poder delimitar la zona de memoria a visualizar. Esta es la disposicin del programa en la memoria del buffer, que ser una copia exacta a como se vera en la memoria EPROM del microcontrolador una vez grabada. Esta es la zona de vectorizaciones... (Recurdese, RESET (OOOOH), Timer 0 (OOOBH) y Timer I (OOlBH).
==
Press <ESC> to terminate display 00000 4100 OO OO OO OO OO OO-OO OO OO 02 09 OO OO OO 00010 oooooooooooooooo-ooooooo2ocoooooo A............... ................

El programa de inicializacin...
cc

Press <ESC>toterminatedisplay 00200 00210 00220 75610075A88A75B8-0875800090OE0075 8912 75 8A38 75 8C38-75 8810D2 8312 08 OO C283120800411B00-0000000000000000 ua.u..u..u.....u :.u.~u.~u....... .....A..........

La rutina de RETARDO...
cc

Press <ESC>toterminatedisplay 00800 7803 79207AFFDAFE-D9FAD8F622000000 x.y z ..*.... "...

234

Introduccin a los Microcontroladores

La interrupcin Timer 0.. .


==
Press <ESC>toterminatedisplay 00900 00910 53 88DF74 OO 93 F5 8B-75 8DFFE5 6170 06D2 80C2816004D2 81C2-8043 884032000000 S..t....u...ap.. . ..".....C.@z...

La interrupcin Timer I...


==
Press <ESC>toterminatedisplay OOCOO COEOE5DOCOEO5388-7FC280C281E582B4 ......S ......... OOClO 311190OE00E56170-0575610160 06 7561 l.....ap.ua.'.ua .p........ . . . . . 2 ooc OO 70 OlA DOEO F5DO-DOEO 32 OO OO OO OO OO

La tabla de DATOS... ==
Press<ESC>toterminatedisplay ................ OOEOO FBF2E9DFD6CDC4BC-B4ACA49D96908984 OOElO 7F7A76 73 70 6E 6C6B-6A6A6B6C6E 70 73 76 .zvspnlkjjklnpsv OOE20 7A7F848990969DA4-ACB4BCC4CDD6DFE9 z............... OOE30 F2FBOOOOOO OO OO OO-OO OO OO OO OO OO OO OO . . . . . . . . . . . . . . . .

Como se puede observar, en la columna de la izquierda se encuentran las posiciones de memoria. En este instante puede realizar la operacin de GRABAR la memoria interna de programas del microcontrolador. Para llevarla a cabo, se pulsa la (opcin P). Tambin se puede hacer con la (opcin A), que realiza una revisin previa d la memoria para ver si previamente estaba grabada (blank che&). El contador recuadrado en el ngulo superior derecho de la pantalla indica los bytes programados (obsrvese cmo el tiempo que necesita para graban> es muy superior al necesario para leer, como qued reflejado en la teora). Una vez programada la memoria, el equipo realiza, automticamente, la operacin de verificacin comparando lo que hay en el bufJr con el contenido de la memoria del microcontrolador. No obstante, siempre se podr comprobar lo que hay en el buffer (recurdese que puede grabarlo como archivo en un disco) con el contenido de la memoria EPROM utilizando la (opcin V).

11.5. PROTECCION DEL PROGRAMA


Como se explic en el Captulo 1, existe un sistema complejo de proteccin que permite salvaguardar el programa de la lectura del mismo por personas no autorizadas. En el men principal aparece al pulsar la (opcin L) la programacin de los lock bits (bits cerradura o cerrojo), que programados ambos impediran la lectura y verificacin de la memoria de programas, de tal forma que, al leer la memoria (opcin R), el

Implementacin de la aplicacin en los Microcontroladores 8052/8051

235

bt@zr mostrara todo unos (FFH), como si la memoria no estuviera programada, pero no permitira grabarla, salvo que se borrase previamente con luz ultravioleta. Esto lo podemos comprobar en el siguiente men.
SUNSHINE Device Programmer MODEL: EXPRO- (C)1991 *MFG: INTEL * TYPE: 8752BH

7. Display buffer 4. Edit buffer 5. Change I/O base adr. of SAC-1OlA 6. Display loaded file history T. Type select M. Manufacturer select 2. Modify target sone B. Blank check D. Display P. Program A. Auto(B&P) V. Verify R. Read C. Compare & display error L. Program lock bit ' E. Program encryption code Q. Quit _-___--_----------------------Allocation buffer sise : 64K Bytes Start address at 3Ell:OOOO Select which function ? L

r
*MFG:

current Encryption code OO-OF: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF lo-1F: program Lock bit: : Al1 lock bits : lock bit 1 : lock bit 2

Y 1 2

Select which number (Y/1/2/<CR>)?Y now...

Programming ok

La otra opcin de proteccin (opcin E), que podra sumarse a la anterior, es la programacin de la cadena de encriptacirw que, sin programar, muestra en su 32 bytes el valor FFH, como se muestra en el siguiente men. En el recuadro inferior se pueden observar las cuatro opciones y en la ltima tila la cadena que se ha utilizado para proteger el programa de aplicacin ONDA.ASM.
SUNSHINE Device Programmer MODEL: EXPRO- (C)1991 MPU 8751 section V3.07 ----------Main Menu ----_--__1. DOS SHELL 2. Load BIN file to buffer 3. Save buffer to disk 4. Edit buffer 7. Display buffer 5. Change I/O base adr. of SAC-101A 6. Display loaded file history INTEL * TYPE: 8752BH TARGETZONE 0000 adr: 1FFF check sum: 59A9 Device start adr: 0 0 0 0 current Encryption code OO-OF: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF lo-1F: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

program Encryption code: 1 : Edit Encryption code 2 : Program Encryption code Select which number (1/2/3/4<CR>)? 3 : Load Encryption code 4 : Save Encryption code

Select which function ? E

236

Introduccin a los Microcontroladores

Si se programara la cadena de encriptacin y no estuviesen los lock bits programados, al efectuar la lectura del programa (opcin R) se cargaran en el buffer cdigos aleatorios irreconocibles para el usuario, salvo que conociese la cadena de encriptacin y la cargase previamente, con lo que obtendra el programa tal como se dise. Se recuerda al lector revise el Captulo 1 en donde se explican los conceptos en que se basa este sistema de proteccin. En el siguiente men se puede observar la operacin de editar (opcin 1) la cadena de encriptacin donde se han introducido unos valores aleatorios. La siguiente opcin sera programarla (opcin 2), por lo que el programa, al leerlo, aparecera totalmente cambiado, salvo que previamente cargara (opcin 3) la cadena de encriptacin.
SUNSHINE Device Progranuner MODEL: EXPRO- (C)1991 MPU 8751 section V3.07 ----------Main Menu ---------1. DOS SHELL 2. Load BIN file to buffer 3. Save buffer to disk 7. Display buffer 4. Edit buffer 5. Change I/O base adr. of SAC-1OlA 6. Display loaded file history *MFG: INTEL * TYPE: 8752BH

p-E$;~'~~

current Encryption code OO-OF: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF lo-1F: FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF

program Encryption code: 1 : Edit Encryption code 2 : Program Encryption code Select which number (1/2/3/4<CR>)?l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0123456789ABCDEF0123456789ABCDEF FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF :232343434567896543212344544326789A5F3E456AE3E34127456 D65E3A234F Select which function ? E 3 : Load Encryption code 4 : Save Encryption code

ll .6. EJECUCION DEL PROGRAMA DESDE EL MICROCONTROLADOR


Hasta ahora los programas se escriban, ejecutaban y depuraban desde el sistema emulador; cuando los resultados sean los esperados, dicho programa debe grabarse en el microcontrolador, tal como se ha indicado en este captulo. Por tanto, slo nos resta, y con esto finaliza el Captulo ll, conectar el microcontrolador a la tarjeta de aplicacin, como se indica en la Figura ll .6. Para que la aplicacin sea didctica se ha dispuesto de una seal de reloj externa (vase Figura 1.6) de manera que variando la frecuencia pueda sacar otras conclusiones.

Implementacin de la aplicacin en los Microcontrolodores 8052/8051

237

t>Z

C. Maquina

Selal

externa

Figura ll .6. Para conseguir el impulso de reset y as arrancar el sistema, puede usar el circuito de la Figura 8.6. Para un RESET automtico, al aplicar tensin al circuito, utilizar el circuito de la Figura 2.13.

1. Indicar y explicar someramente las operaciones secuenciadas para implementar una aplicacin en el microcontrolador. 2. iA qu se refieren las tres vectorizaciones de la Figura ll .5? 3. En el flujograma correspondiente a los ficheros de programa ABITIlOO.ASM, jcul es la misin de la variable AUX? 4. Indicar exactamente dnde, cmo y cundo se arrancan los Timen 0 y 1 en l a aplicacin ABIlOO.ASM. 5. iPara qu se utiliza el fichero HEXBIN.EXE?

6. Si se encuentra con un programa encriptado en la EPROM del microcontrolador, iqu.pasos hay que dar para leerlo? 7. Se tiene el programa perfectamente cargado en el microcontrolador y comprobado su funcionamiento sobre el hardware de la aplicacin con el emuladom, se aplica la seal de arranque RESET al sistema y ste no funciona, la aplicacin no se ejecuta. iQu secuencia de comprobaciones habra que realizar para encontrar el fallo?

238

Introduccin a los Microcontroladores

1. La onda de la Figura ll .4 se obtuvo tras efectuar un hardcopy de la pantalla del monitor, y esta onda resulta de visualizar los valores obtenidos en la tabla de datos del programa fuente (Apartado 11.2.4). Tratar de reproducir lo realizado mediante la confeccin de un programa utilizando un lenguaje de alto nivel. Nota: El procedimiento utilizado fue igualar el rea del impulso de la Figura 11.3 con la elongacin, Figura ll .4, de la onda en ese instante. 2. Completar la aplicacin expuesta en este captulo realizando un lazo de realimentacin de la seal de corriente alterna presente en la carga al microcontrolador. Se puede proceder de la siguiente forma. Una vez obtenida la muestra de la seal y rectificada se hace pasar por un convertidor A/D para digitalizar la seal y as puede ser leda por el microcontrolador a travs del Puerto P2. El siguiente paso es crear el algoritmo para comparar la seal de salida con la ideal (grabada en la EPROM y a la que se ha hecho referencia anteriormente) y tratar la diferencia (error) con una accin proporcional y acaso integral para corregir la posible desviacin de la seal de salida en la carga. 3. Se sugiere realizar aplicaciones mltiples en el campo del control y regulacin de velocidad de motores, tambin de las tensiones de salida de dinamos y alternadoDres. La aplicacin de este captulo muestra cmo se puede realizar un sencillo control digital directo (DDC=Direct Digital Control) por la modulacin de la anchura del impulso (PWM=Pulse Width Modulution), que permitir variar la tensin 0 intensidad media que es la causa de la variacin de las caractersticas de salida de muchos dispositivos. Si, como en el caso anterior, se cierra el lazo con un convertidor A/D y se introduce la muestra de la salida por

un puerto, se puede utilizar el microcontrolador para dar un curso de regulacin probando todo tipo de algoritmos de acciones P (Proporcional), 1 (Integral) y D (Derivativa), as como sus combinaciones. 4. Como ejemplos de aplicaciones que se pueden fcilmente implementar en el campo del automatismo tenemos: - Cruce de semforos. - Reloj digital (la Figura ll .7 puede servirle de ayuda).
r
> H0RA.S

Figura ll .7.

- Aparato de maniobra de ascensores. - Control de mquinas herramientas. - Pasos de peaje. - Regulacin continua de nivel y caudal de lquidos, control de temperaturas, etc. - Automatizacin de plantas de empaquetado y embotellado. - Etctera. Una buena solucin es adquirir algn libro de ejercicios prcticos de automatismos y ms concretamente de autmatas programables en donde se encontrarn ejercicios propuestos y resueltos, que pueden servir para preparar aplicaciones fcilmente realizables con los microcontroladores.

CAPITULO

Comunicaciones

12.1. INTRODUCCION
El puerto serie de los Microcontroladores 8052/805 1 trabaja en el modo full-duplex, 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 n&o registro que se denomina SBUF, estando situado en la posmem 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 12.3):
?? Modo 0: Los datos en serie entran y salen a travs de la lnea RXD. TXD pre-* senta 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 (LSB = bO). La velocidad de transmisin expresada en baudios (baudio = bits/seg) est dada por la relacin l/ 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.

239

240

Introduccin a los Microcontroladores

?? Modo 2: Transmite a travs de TXD y recibe por RXD como en el caso anterior. Utiliza ll bits distribuidos de la siguiente forma: - 1 bit de start (0). - 8 bits de datos (LSB = primero). - 1 bit de dato (9. bit) (programable). - 1 bit de stop (1). El noveno bit, en la transmisin, puede ser OH o l 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, ll bits son transmitidos a travs de TXD o recibidos por RXD, de la siguiente manera: - 1 bit de start (0). - 8 bits de datos (LSB = primero). - 1 bit de dato (9. 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 18s 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 RI=0 y REN=l y en los otros modos Modo 1, 2 y 3, cuando se recibe el

bit starf y REN=l.

12.2.

COMUNICACIONES EN EL ENTORNO MULTIPROCESADOR

Los Modos 2 y 3 tienen una especial disponibilidad para las comunicaciones en el entorno multiprocesador. En estos modos se reciben 9 bits de datos, siendo capturado el noveno para el bit flag RB8 del registro SCON (que se estudia en el siguiente apartado) 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 l en el byte de direccin, y OH 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

Comunicaciones

241

para entrar en comunicacin con el maestro. El esclavo direccionado borrar el bit SM2 y se preparara 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. 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.

12.3.

EL REGISTRO DE CONTROL DEL PUERTO SERIE (SCON)

El registro SCON (Serial Port Control Register) (Cuadro 12.1) es el registro de control y de estado del puerto serie, situado en el SFR. Este registro contiene: - Modo de trabajo (Modo 0, I,2 y 3) y de seleccin de velocidad de comunicacin. - Noveno bit de dato para transmitir y recibir (TB8 y RB@. - Gestin de interrupciones del puerto serie (TI y RI).
Cuadro 12.1

I
b,
[ BIT bo SM0 [

SCON

b6
SMI

bs
1 SM2

bd
1 REN 1

b3
TB8

b
1 RB8 1

b,
TI\ 1

bo
RI 7

NOMBRE Y COMENTARIO RI cl : Flag de interrupcin de la recepcin. Se activa por hardware al finalizar la recepcin del 8P bit en el Modo 0 o hacia la mitad del intervalo de tiempo del bit de stop en los otros modos (excepto ver SM2). Debe ser desactivado por soflware. TI 7: Flag de interrupcin en la transmisin. Se activa por hardware al final de la transmisin del 8. bit en el Modo 0 o al comienzo del bit de stop en los otros modos. * Debe ser desactivado por software. RB8 cl: En los Modos 2 y 3 es el 9P bit que se recibe. En Modo 1, si SM2 = 0, RB8 es el bit de stop. En Modo 0 no se utiliza. TB8 c3 Corresponde al 9. bit de datos en los Modos 2 y 3. Es programable por el usuario. Habitualmente es el bit de paridad.

bl

bd bi

SI REN I (por so tware permite la recepcin IRENI I,$~RENOnola~&~~ p-J):- En Modo 2 y 3, Si SM2 = 1entonces RI no se activar si el 9. bit de datos (RB8) es igual acero. - En Modo 1, si SM2 = I entonces RI no se activar si el bit de stop no se ha recibido. - En Modo 0, SM2 debe estar a cero.

242

Introduccin

a los Microcontroladores

Cuadro 12.1 (continuacin)


SCON _ bi SM0 ba 1 SM1 bs 1 SM2 b4 1 REN h TB8 b RB8 b, TI bo RI

BIT
bs-b,

NOMBREYCOMENTARIO
)\): SM0 SM 1 Espeafca elmodosegnlatabla: SM0 0 0 1 1 SM1 0 1 0 1 MODO 0 1 2 3 DESCRIPCION Desplaza 8 bit 8 bit-UART* 9 bit-UART 9 bit-UART VELOCIDAD Reloj/12 Variable Reloj/64 o reloj/32 Variable

* UART = Universal Asynchronous Receiver and Transmiter,

12.4. VELOCIDAD DE COMUNICACION


La velocidad en baudios de comunicacin en Modo 0 se fija por la relacin: BAUDIOS en Modo 0 = frecuencia oscilador microcontrolador 12

Los baudios en Modo 2 dependen del valor del bit 7 (SMOD) del registro PCON (vase Cuadro C. 1 del Apndice C) 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 = 64 .
2 SMOD

(frecuenciaoscilador)

En el 8051, los baudios en Modo 1 y 3 son determinados por la relacin de sobrepasamiento 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 transmi-r y el otro para recibir).

2.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 sobrepasamiento del registro contador del Timer y el valor de SMOD (vase Cuadro C. 1 del Apndice C) como sigue:

Comunicaciones
2 SMOD =

243

BAUDIOS en

. (relacin de sobrepasamiento Timer 1)

Modos 1 y 3

32

El Timer 1 puede ser configurado bien como temporizadon> o como contador y en cualquiera de sus tres modos. Se aconseja, porque as se utiliza en la mayora de las aplicaciones, configurarlo como temporizadon> en modo autorrecarga (TMOD e 20H). En este caso los baudios vienen dados por la frmula:
2
SMOD

BAUDIOS en Modos 1 y 3 = 32 .

Frecuencia oscilador 12 . (256 - (THl))

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

Timer 1
BAUDIOS Modo 0 Max: 1 MHz Modo 2 Max: 375 K Modos 1,3: 625 K 192K 96K 48 K 24K 12 K 1375 K 110K 1lOK FOSC 12 MHz 12 MHz 12 MHz 11059 MHz 11059 MHz 11059 MHz 11059 MHz 11059 MHz ll986 MHz 6 MHz 12 MHz SMOD X 1 1 1 0 0 0 0 0 0 0 W X X 0 0 0 0 0 0 0 0 0 MODO X X 2 2 2 2 2 2 2 2 1 VALOR DE RECARGA X X FFH FDH FDH FAH F4H E8H 1DH 72H FEEBH

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 I en Modo 2 (Apartado 9.2.3). Si SMOD = 0, y TH 1 c FDH = 253, y aplicando la frmula: 2 SMoD Frecuencia oscilador BAUDIOS en Modos 1 y 3 = 32 . 12. (256 - (THl)) 1 11059. lo3 Baudios = 32 . (256 _ 253) . l2 = 959983 = 9600

244

Introduccin

los

Microcontroladores

Generalmente, lo que se suele necesitar es conocer el valor de carga del registro TH1 en funcin de la velocidad en baudios y de la frecuencia del oscilador-reloj. Esta es la frmula que se debe aplicar: THl = 256 _ Frecuencia oscilador / xxx Velocidad en baudios Si SMOD = 0 -+xxx = 384 SiSMOD= lbxxx= 192 As, el registro TH1 debe ser cargado con: . TH1 =256- 11059 lo3 / 384 = 256 - 3 = 253 z FDH

9600

12.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 T2CO.N tal como se indica en el Cuadro 12.2
Cuadro 12.2

b7

TZCON

b0

RCLK TCLK RCLK: Flug del oscilador-reloj receptor. Cuando RCLK = 1 utiliza el Timer 2 como reloj en el proceso de recepcin de los Modos 1 y 3. Si RCLK = 0 utiliza el Timer 1

como reloj en la recepcin. TCLK: Flag del oscilador-reloj transmisor. Cuando TCLK = 1 utiliza el Timer 2 como reloj en el proceso de transmisin en los Modos 2 y 3. Si TLCK = 0 utiliza el Timer 1 como reloj en la transmisin.

Se puede observar a la derecha de la Figura 12.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. El modo generadon> de baudios acta de forma similar que el modo autorrecarga estudiado en el Captulo 9. Al producirse el ciclo de sobrepasamiento en TH2, los registros de contaje 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 I y 3 son determinados por la relacin de sobrepasamiento del Timer 2. De una forma general se pueden expresar as: BAUDIOS en Modos 1 y 3 = Relacin de sobrepasamiento Timer 2 16

Comunicaciones

245

OVERFLQW TIMER 1 NOTA: La frecuencia del oscilador esta dividida por 2, no por 12.

CLOCK RX

r
pin TZEX

DETECTOR TRAN&ON

RCAPZL

RCAPZH

I
INTERRUPCION TIMER 2

CLOCK TX

1 CONTROL

EXENZ L- NOTA: Puede habilitarse como interrupcion

externa adicional.

Figura 12.1.

Concretanto, el Timer 2 puede ser configurado bien como temporizadon> (tiqzer) o como contadon> (cuunter). 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 temporizadon> en el Apartado 9.3.2. Normalmente como temporizador comn el registro de contaje se incrementaba cada ciclo mquina, es decir, a 1/12 de la frecuencia del oscilador. Como generador de baudios se incrementa cada perodo de estado, es decir, a 1/2 de la frecuencia del oscilador. En este caso los baudios estn dados por la frmula: Frecuencia oscilador BAUD1oS en Modos 1 3 = 32 . [65536 - (RCAP2H, RCAP2L)I 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 12.1 indica que para que acte como generador de baudios debe ser RCLK = TCLK = 1 en T2CON, como indica la figura. El ciclo de sobrepasamiento en TH2 no activa el flag TF2 ni produce interrupcin, aspecto este que podra darse en los timen del Captulo 9. 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 EXEN se activa, una transicin descendente en el pin T2EX activar elflag de EXF2, pero no causar recarga del Timer 2. As pues, cuando

246

Introduccin a los Microcontroladores

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 contaje se incrementa cada perodo 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. 12.5. COMUNICACIONES EN MODO 0

Este modo se establece desde los bits 6 y 7 (SMO-SMl) de SCON (Vase Cuadro 12.1). Como se ha dicho anteriormente, la entrada y salida de datos en serie se produce a travs del pin IO (RXD) del microcontrolador. El pin II (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 12.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 12.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 l 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 igua a un ciclo mquina completo. SEND autoriza la salida del dato contenido en el registro de desplazamiento de una forma alternada a travs delpin 10 (RXD = P3.0) y tambin autoriza la salida de la seal de reloj simtrica (Shift Clock) a travs del pin II (TXD = P3.1). La seal TXD (SHIFT CLOCK) est a nivel bajo durante los estados S3, S4 y S5 de cada ciclo mquina, y a nivel alto durante los estados S6, Sl 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 l 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 SlPl del dcimo ciclo mquina despus de escribir en SBUF. La recepcin es iniciada por la condicin REN=l y RI=O. En la fase S6P2 del si-

Comunicaciones

247

BUS INTERNO DEL 8052/51 II

S6

I-----.-

CONTROL TX

--- -__
START

CONTROL RX SHIFT 11111110

------

AT.TF,RNATTVA __-.- _.____.

RXD (P3.0) ENTRADA ALTERNATIVA

BUS INTERNO DEL 8052/51

Figura 12.2.

guiente ciclo mquina, la unidad de control RX escribe los bits ll ll ll 10 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 S3Pl y S6Pl 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 ingresa desde el exterior por la derecha es el bit de dato que ha sido muestreado en el pin IO (RXD=P3.0) en la fase S5P2 del mismo ciclo mquina.

248

Introduccin CI los Microcontroladores

SEND
SHIFT RXD

rl D0X Di

n x
D2

n
X D3 X

n D4 X

n
D5 X

n D6

n X D7

n
/

salida \ de datos

N 4
i N

TI n Escribe en SCON (limpia RI) RI1

l R

RECEIVE SHIFT

c > c

n ;s5p2 ; 8, ; ;

RxD(p;,s)

R i

TxD(SHIFT
Figura 12.3.

Como los bits de datos entran por la derecha, los unos cargados inicialmente son desplazados afuera por la izquierda. Cuando el O 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 SlPl del dcimo ciclo mquina despus de la escritura en SCON, la seal de control RECEIVE es borrada y el flas de interrupcin RI es puesto a l.

12.5.1.

Resumen comunicaciones en Modo 0

- Longitud palabra dato: 8 bits. Primero el bit LSB. - Formato palabra dato:
bo bl b2 b3 b4 bs be b

x T
LSB

x t
MSB

Comunicaciones

249

- Esquema simplilicado de la comunicacin:

DATOS p3.0 '( 10) 8052/51

RECEPTOR

Figura 12.4.

- Velocidad de comunicacin: BAUDIOS = frecuencia oscilador 12 - Transmisin Comienza: Escribiendo en SBUF Termina. . Activando j7ag TI Comienza: Cuando REN = 1 y RI = 0 Termina: Activando Jlag RI l

- Recepcin

??

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 y flujograma

Como se ha indicado en el apartado de 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 Figura 12.5, la seal de sincronismo se obtiene en el pin TXD. El dato que se transmite en el ejemplo es AAH.

250

Introduccin a los Microcontroladores

8052/5 1 LJ b0=0 bl=l b2=0 b3= 1 b4=0 b5=1 b6=0 b7= 1

DATO SERIE SEAL DE SINCRONISMO

Figura 12.5.

b7 SM0 1 S M 1 1 S M 2 1REN 1 TB8 1 RB8 1 T I TRANSMISION = 0 RECEPCION = 1

b0 1 RI

SBUF <-- ACC

Comunicaciones

251

??

Listado del programa


LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 LABEL SOURCE MOV CLR MOV MOV SETB MOV JZ CLR LCALL CLR SJMP CODE SCON, #OO P2.0 A,PO SBUF,A P2.0 A,SCON 020B P2.0 0300 .TI 0205

>Z 0200,0216 LOC OBJ 0200 759800 0203 C2AO 0205 E580 0207 F599 0209 D2AO OZOB E598 020D 60FC 020F C2AO 0211 120300 0214 c299 0216 80ED DISASSEMBLYCOMPLETED >2 0300,030c LOC OBJ 0300 7801 0302 7903 0304 7A05 0306 DAFE 0308 D9FA 030A D8F6 03oc 22 DISASSEMBLYCOMPLETED

B0205

B020B

LINE 0001 0002 0003 0004 0005 0006 0007

LABEL B0302 B0304 B0306

SOURCE MOV MOV MOV DJNZ DJNZ DJNZ RET

CODE RO,#Ol R1,#03 R2,#05 R2,0306 R1,0304 RO,0302

En la lnea 1 del listado anterior se programa el puerto serie en Modo 0 y como transmisor. En la lnea 2 se inicializa a cero el pin 0 del Puerto 2 para que al comienzo de la transmisin se ponga a uno como indicador de comienzo de la transmisin (en el cronograma adjunto corresponde con la primera seal TBIT 0). En la lnea 3 se captura el dato situado en la entrada del Puerto 0. En la lnea 4 se carga el registro SBUF con el dato y, adems, esta instruccin da la orden para que el registro de desplazamiento inicie el envo de datos al exterior por la lnea RXD (en el cronograma adjunto seal TBIT 1). En la lnea 5 se activa el pin P2.0 para indicar que la palabra de dato est a punto de salir por el pin RXD. En las lneas 6 y 7 se pregunta si el octavo bit ha salido. Se interroga al bit SCON. 1; en este caso basta preguntar si el registro SCON es igual o distinto de cero. En la lnea 8 se desactiva el bit visualizador de final de transmisin (TBIT 0 en el cronograma). En la lnea 9 se llama a una rutina de retardo para espaciar los envos de informacin. En la lnea 10 se borra elJlag de interrupcin; si no se hiciera, la transmisin quedara bloqueada. La lnea ll lleva al contador de programas al principio para enviar un nuevo dato.

252 0

Introduccin a los Microcontroladores

Cronograma

El dato que se transmite corresponde a AAH, como se observa a continuacin. Uavefom Ikpl4.y , , , ngnification b 161 -b XP U HP Dnj to Change Dirplay (tS<+Pl-&t-> t.0 Nove Qrsar CHOM) to Chanye Siyngl (SP) to Chanye Maynlflcation

??

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 12.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.
6052/51 L-J b0 bk b3 b5 b6 b7

Figura 12.6.

L
RXD TXD

DATO SERIE SEiAL DE SINCRONISMO

Comunicaciones

253

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

??

Flujograma
SCON 1R B 8 1 T I b0 1 RI

Sb7 SM0

1 S M 1 1 S M 2 1 REN 1 T B 8

1 REGE.PCION

RECEPO.HEX

VECTORIZAR INTERRUPCION RI 4 HABILITAR INTERRUPCION RI

4-1
UARDAR REGISTRO

ACC <-- SBUF

INICIALIZAR SCON

REPONER

REGISTRO

6
RETI
??

Listado del programa

El programa se divide en los siguientes bloques: 1. - Vectorizacin de la interrupcin.


>Z 0023,0025

LOC
0023

OBJ
020400

LINE

LABEL

SOURCE LJMP

CODE
0400

DISASSEMBLYCOMPLETED

254

Introduccin a los Microcontroladores

2. - Habilitar interrupcin del puerto serie. - Programar SCON como receptor.


>Z0200,020A

LOC 0200 0203 0306 0209

OBJ 75A890 759810 120300 80F5 DISASSEMBLYCOMPLETED

LINE 0001 0002 0003 0004

LABEL B0200

SOURCE MOV MOV LCALL SJMP

CODE IE,#90 SCON, # 10 0300 0200

3. - Rutina de retardo. >z 0300,030c


LOC 0300 0302 0304 0306 0308 030A 03oc OBJ 7802 79FF 7AFF DAFE D9FA D8F6 22 DISASSEMBLYCOMPLETED LINE 0001 0002 0003 0004 0005 0006 0007 LABEL B0302 B0304 B0306 SOURCE MOV MOV MOV DJNZ DJNZ DJNZ RET CODE RO,+02 Rl,#FF R2,#FF R2,0306 R1,0304 RO,0302

4. - Rutina de interrupcin. Realiza las siguientes tareas: 1) Sale del modo de recepcin. 2) Salva registros en el stack. 3) Carga el contenido de SBUFen el ACC. 4) Visualiza el dato en paralelo en el Puerto PO. 5) Temporiza su visualizacin. 6) Repone los registros del stack.
>z 0400,041c LOC OBJ 0400 759800 0403 E8 0404 COEO 0406 E9 0407 COEO 0409 EA 040A COEO 04oc E599 040E F580 0410 120300 0413 DOEO 0415 FA 0416 DOEO 0418 F9 0419 DOEO 041B F8 041c 32 DISASSEMBLYCOMPLETED LINE 0001 0002 0003 0004 0005 0006 0007 0008 0009 0010 0011 0012 0013 0014 0015 0016 0017 LABEL SOURCE MOV MOV PUSH MOV PUSH MOV PUSH M?V MOV LCALL POP MOV POP MOV POP MOV RETI CODE SCON, #OO A,RO ACC A,Rl ACC A,R2 ACC A,SBUF PO,A 0300 ACC R2,A ACC R1,A ACC RO,A

256

Introduccin a los Microcontroladores

- 1 bit de start (0). - 8 bits de datos (el primero, el LSB). - 1 bit de stop (1). En recepcin elJug RB8 del registro SCON es la imagen del bit de stop. En el 805 1 los baudios vienen dados por la razn de sobrepasamiento del Timer 1. En el 8052, vienen dados bien por la razn de sobrepasamiento del Timer 1 o del Timer 2, o de ambos (uno para transmitir y el otro para recibir). La Figura 12.7 muestra, de forma simplificada, un diagrama en bloques del puerto serie en Modo 1 y la Figura 12.8 presenta el cronograma de las operaciones secuenciadas en el tiempo de la transmisin y recepcin.

n
n DATA SHIFT TXD TI
ESCRIBE EN

n
SBUF

SEND SlP11

n
\ BSTAR / DC) 1 DI

n
X D2 1

n
D3 X D4 BIT DE STOP

TRANSMISION

RX CLOCK t16 RESET n I n


\ BIT DE START/ DB

n
1

n
DZ 1 llni

n
D3 1

n
D4

n
1 D5 1

n
D6 f

n
D7 /BIT

n
DE

n
STOP

RECEPCION

BITS SHIFT RI

DE

Dl 1 MUESTBBOnn~

nnfl

h?fl

r#n

nnn

Mn

nnn

nno

n
I

Figura 12.8.

La transmisin se inicia con cualquier instruccin que utilice SBUF como registro destino. La escritura en SBUF tambin carga un l 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 S 1 P 1 del siguiente ciclo mquina que resulta despus del ciclo de sobrepasamiento 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). 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 l, 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

Comunicaciones

257

control TX para que realice un ltimo desplazamiento y desactive la seal SEND y active elflagTI (peticin de interrupcin). Esto ocurre en el dcimo ciclo de sobrepasamiento del contador divisor por 16 despus de la instruccin de escritura en SBUF. 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 sobrepasamiento con los tiempos de bit entrantes. Los 16 estados del contador dividen cada (ctiempo de bit en 16 intervalos. En los estados 7, 8 y 9 de cada tiempo de bit, el bit detecton> 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 activar RI, se generar si las siguientes condiciones son satisfechas en el momento en que el pulso final de desplazmiento se genera: - 1) RI=O,y - 2) bien SM2=0, o el bit de stop recibido es igual a l. 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 elflag 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.

12.6.1.

Resumen comunicaciones en Modo 1

- Longitud palaba dato: 10 bits. Primero el bit LSB. - Formato palabra dato: START 0 \ LSB bo x b, x b2 x b3 x bq x bs x bg x b, x , MSB STOP

v DATO

258

Introduccin a los Microcontroladores

- Esquema simplificado de la comunicacin:

- Velocidad de comunicacin:
??

Modo de carga y sobrepasamiento del Timer 1:


2 SMOD

BAUDIOS = ~ . (sobrepasamiento) 32
??

Timer 1 como temporizador con autorrecarga:


2 SMoD frecuencia oscilador BAUDIOS = 32 + 12. (256 - (THl))

??

Tambin utilizando el Timer 2 (vase Apartado 12.4.2). Comienza: Escribiendo el dato en SBUF l Termina: Activando el flag TI Comienza: Cuando REN = 1 y se detecta un flanco descendente (bit start) en RXD Termina: Activando el Jlag RI

- Transmisin

- Recepcin

12.7.

COMUNICACIONES EN LOS MODOS 2 Y 3

En esta opcin ll bits se transmiten a travs de TXD, o se reciben a travs de RXD, de la siguiente manera: - 1 bit de start (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 O o l. En recepcin el noveno bit de datos se refleja en el bit de flas RB8 del registro SCON. La Figura 12.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 12.7), siendo las diferencias mnimas, como se desprende de las explicaciones que siguen a continuacin. El cronograma representado en la Figura 12.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.

Comunicaciones
B U S I N T E R N O 8052/51 TB8

259

ESCRIBE

+TXD

FASE 2 DEL RELOJ (% fo,,) MODO 2

DETECTOR TRANSICION

DETECTOR DE BIT

4' RXD

N O T A : T C L K , R C L K y e l Tima- 2 estan p r e s e n t e s s o l o e n el Microcontrolador 8052

jSBUF
.-J-J--

LEE SBUF Y BUS INTERNO 8052/51

Figura 12.9.

La velocidad de comunicacin en Modo 2 se fija a 1/64 de la frecuencia oscilador si SMOD = 0 o a 1/32 de la frecuencia oscilador si SMOD = 1. [El bit SMOD se encuentra en la posicin 7 del registro PCON (PCON.7).] La velocidad de comunicacin en Modo 3 es variable y configurable de forma similar al Modo 1, bien utilizando el Timer I o el Timer 2, en el caso de un 8052, dependiendo de los bits TCLK y RCLK del registro T2CON. (Revisar para ms detalle sobre la velocidad de comunicacin el Apartado 12.4.)

260

Introduccin a los Microcontroladores

CLOCK nTxn

ll

n
I I

n ESCRIBE EN SBUF DATA SHIFT , SEND %lPl ,


I

TXD

n n n n n n n BIT DE ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
CLOCK RX n

G E N E R A D O R
n RESET +16 n I

n n

n n

n n

n n

n n

n n

n n

n
n

n
n
I

RECEPCION

RXi? \%g, DO x D1 1 D2 1 D3 f Dz, 1 D5 1 De 1 D7 f RBf,, BIT DE DETECTOR DE BIT I TIEMPO DE MUESTREO Mn nfln e STOP SHIFT RI

Figura 12.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 S 1 P 1 del ciclo de mquina siguiente que resulta a partir del sobrepasamiento 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 12.10). La unidad de control TX comienza su gestin con la activacin de SEND que pone el bit de start 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 l (bit de stup), 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 datos son desplazados al exterior por la derecha, por la izquierda se introducen bits ceros. Cuando el bit reflejado delJlag 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 flag TI (interrupcin en la transmisin). Esto sucede en el undcimo ciclo de sobrepasamiento del contador-divisor por 16 despus de la escritura en SBUF. 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 estados 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

Comunicaciones

261

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 start llega a la posicin ms extrema a la 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 elflag RI (interrupcin en el 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=Oy - 2) bien SM2 = 0; o el noveno bit recibido es igual a l. 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 el jag 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.

12.7.1.

Resumen comunicaciones Modo 2 y 3

- Longitud palabra dato: ll bits. - Formato palabra dato: START b,, b, b2 b3 b4 bs b6 b, P R O G STOP

Bit Transmisin: Asigna el bit TB8 de SCON programable (paridad) Refleja el bit RB8 de SCON l Recepcin: - Esquema simplificado de la comunicacin:

262

Introduccin a los Microcontroladores

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


??

Para el Modo 2:
2 SMOD

BAUDIOS = 64 . (frecuencia oscilador)


??

Para el Modo 3 (velocidad variable): Frecuencia oscilador 2 SMoD BAUDIOS = 32 . 12 . (256 - (TH,))

- Transmisin

Comienza: Escribiendo en SBUF Tennina. . Activando el flug TI Comienza: Cuando REN = 1 y se detecta un flanco descendente (bit start) en RXD Termina: Activando el flag RI

- Recepcin

1. Indicar la funcin que tienen las lneas TXD y RXD segn est configurado el puerto serie en Modo 0, 1,2 o 3. 2. Dibujar un cronograma del dato que se transmite con los bits de control en los cuatro modos de operacin del puerto serie. 3, En las comunicaciones en el entorno multiprocesador, el maestro jcmo entra en comunicacin con los esclavos? Explicar el proceso. 4. iCundo se inicia la transmisin? 5. Explicar el cometido del bit 3 de control, REN, en el registro SCON. 6. Explicar qu timers actan en el proceso de transmisin y recepcin si RCLK=O y TCLK= 1 en el registro T2CON.

7. En las comunicaciones en Modo 0 actuando el microcontrolador como transmisor, icundo se activa la seal de interrupcin TI? Y la seal RI cuando el microcontrolador acta como receptor? 8. En las comunicaciones en Modo 1 actuando el microcontrolador como transmisor, iqu seal de control se activa para posicionar el bit de start en el pin de salida TXD? 9. iQu diferencias se observan entre los Modos 2 y 3? A la vista de las Figuras 12.7 y 12.9, explicar el modo de seleccin de la velocidad de transmisin en el Modo 2. 10. iQu condiciones han de cumplirse para que el dato recibido sea validado y no se pierda cuando el microcontrolador trabaja en Modo 2 o 3?

Comunicaciones

263

1. Realizar los Ejercicios 12.1 y 12.2 en Modo 1 utilizando un Microcontrolador 8052 con velocidad de comunicacin va1 riable y con el Timer 1 o 2. 2. Realizar el ejercicio anterior configurando el Timer 1 o 2 como contadon> con una seal de contaje de muy baja frecuencia que permita seguir el proceso. De esta manera se podr ver el dato transmitido con un simple LED y el dato, en el caso de transmisin, se podr enviar con un pulsador. 3. Realizar la comunicacin en Modo 1, 2, y 3 utilizando un registro de desplazamiento de 16 bits como indica la Figura 12.11, de tal forma que los datos enviados por TXD sean recuperados, transcurrido un cierto

(carcter de control) que indique el final de transmisin-recepcin. Ambos textos, al final del proceso, debern coincidir; para ello se puede aplicar algn sistema de deteccin de errores. 4. Se sugiere otra posibilidad para poder observar y estudiar detenidamente las caractersticas comentadas de la comunicacin: utilizar un microcontrolador con el programa grabado de transmisin y/o recepcin que acte como transmisor 0 receptor (puede ser el propio emulador) y otro microcontrolador con el mismo programa grabado de transmisin y/o recepcin que acte como receptor 0 transmisor, como indica la Figura 12.12.

Figura 12.11.

Figura 12.12.

tiempo, por RXD despus de pasearse por el exterior (para hacerlo ms vistoso se sugiere poner en las salidas paralelo del registro de desplazamiento unos LED). Se puede enviar un texto en caracteres ASCII grabado previamente en el espacio de memoria fuente y recogerlo en el espacio de memoria destino. Tngase en cuenta que el programa de transmisin y el de recepcin debern alternarse carcter a carcten> hasta el envo de un cdigo de control

5. Se puede, tambin, realizar con el adaptador de comunicaciones asncronos, COM 1 o COM2 del PC una comunicacin formal PC -> MICROCONTROLADOR y/o MICROCONTROLADOR -> PC. Esto implica que debe conocer las caractersticas de las comunicaciones o, en su defecto, informarse de ellas en la abundante bibliografa y artculos aparecidos en las revistas tcnicas especializadas sobre las comunicaciones en el entorno de los PC.

Materiales: (Cortesa de Novatronic, S. A.).-Tel. (94) 452 08 ll - Fax (94) 452 ll 67. Grabador de Eproms Expro- de Sunshine Device Programmer. Emulador Mice II-8052 de Microtek Internacional Inc. Ensamblador, compilador y linkador de 2500 AD Software Inc.

APENDICE

Gua de los microcontroladores de INTEL


A.l. ASPECTOS GENERALES

Se destacan dos tipos de microcontroladores, de 8 y 16 bits:


?? Dentro del primer tipo se encuentran dos generaciones: T - Primera generacin de microcontroladores de 8 bits. Familia MCS-48. - Generacin avanzada de microcontroladores de 8 bits. Familia MCS-51. ?? El segundo tipo corresponde a los microcontroladores de 16 bits dedicados al control de procesos que exijan una gran velocidad de computacin. Esta es la Familia MCS-96.

A.2. FAMILIA MCS-48


Ha sido la precursora de las familias de microcontroladores de 8 bits de INTEL y por tanto ha marcado la evolucin futura del resto de las familias. Estos dispositivos estn disponibles en diversas versiones para ofrecer al usuario flexibilidad segn el diseo. Actualmente estn fabricados con la tecnologa avanzada HMOS II. La Tabla A. 1 resume las caractersticas de esta familia y stos son sus rasgos ms importantes:
? Versin con memoria ROM para grandes series de produccin. Modelos 8048AH / 8049AH / 8050AH. ?? Versin con EPROM para el desarrollo de prototipos y pequeas series de fabricacin. Modelos 8748AH / 8749AH. ?? Versin que, como los anteriores, integra en el bloque de silicio la CPU, la memoria RAM y la unidad de Entrada/Salida, pero no tiene memoria de programa interna, por lo que se utiliza con dispositivos de memoria externa. Modelos 8035AHL / 8039AHL / 8040AHL.

Nota: Intel Corporation no asume ninguna responsabilidad por errores que pudieran producirse en la transcripcin de datos, ni se compromete a actualizar la informacin de esta obra.

264

Apndice A. Gua de los microcontroladores de IYTEL

265

Tabla A.1 1 Dispositivos 1 ROM Version 1 I I 8048AH 8748H 8035AHL 1 I I 8049AH 8749H

EPROM Version

I I

~~~

_____

CPU/RAM/I/O Caractersticas Cycle Time R A M M e m o r y (bytes) Program Memory (bytes) I/O Lines

8039AHL 7 ~ 1.36 ps 128 2KB 27

-- 1 8049AHL _____ -1 _____ -1


1.36 ps 256 4KB 27

8050AH

1.36 ps 64 1KB 27

SYNC Mode Timer-Counter A/D (analog/digital) Interrupts Program Limit Ext. Data Limit (bytes)

Yes 1 2 4KB 256

Yes 1 -

Yes 1 2 4KB 256

2 4KB 256

A.3. FAMILIA MCS-51


Dada la gran cantidad de fabricantes y modelos que presenta esta familia, se ha hecho un planteamiento resumido y general de los modelos fabricados por INTEL. Actualmente el techo de las caractersticas de esta familia est en: Memoria de programas Memoria RAM Velocidad de funcionamiento = 32 Kbytes. = 512 bytes. = 30 MHz.

La arquitectura de esta familia est optimizada para aplicaciones orientadas al control y procesos industriales en tiempo real de pequea y mediana envergadura. Para adaptarse convenientemente a las aplicaciones especficas del usuario hay disponibles varias versiones, como se explica en el captulo que hace referencia a este Apndice y en el Apndice C, que hace referencia a los tipos especiales para consumos crticos (modelos IDLE y POWER DOWN). INTEL ofrece actualmente la arquitectura 805 1 en tres distintas modalidades:
? La primera es la clsica 8X52/51 y 8XC52/C51, esta ltima fabricada con transistores MOS complementarios de bajo consumo. A estos dispositivos va dirigido este libro.

266

Introduccin a los Microcontroladores

?? La segunda corresponde a productos estndar para aplicaciones especficas (ASSP), a la que pertenecen los tipos 8XC51FA / 8XC51FB / 8XC51FC, que tienen una arquitectura similar a la primera, pero con el bloque PCA (Programmable Counter Array), que le aade las siguientes caractersticas:

Salida de alta velocidad. Circuitos comparador/capfura. Modulador de anchura de pulso. Perro guardin (watch-dog).

?? La tercera contiene un ncleo de circuito integrado para aplicaciones especficas (ASIC) (Application Specific Integrated Circuits) que permite al usuario disear a medida el dispositivo adaptador de perifricos que necesite para su aplicacin. Este producto se le conoce por la referencia UCS51. La Tabla A.2 resume los microcontroladores avanzados de 8 bits.

A.4.

MICROCONTROLADORES DE 16 BITS. FAMILIA MCS-96

La familia MCS-96 est basada en la arquitectura del 8096 que ofrece un nivel de prestaciones avanzadas con unas evolucionadas unidades de E/S y distintos perifricos integrados en la misma pieza de silicio junto con una potente CPU de 16 bits. Estos microcontroladores suplen, en sistemas de control complejo, las soluciones que-requieren mltiples chips. Para desarrollar aplicaciones en este entorno, INTEL suministra soportes como lenguajes de alto nivel, un ensamblador y hardware de emulacin. Incluso entre las herramientas que ofrece el fabricante se encuentra el software TRANS 51-96, que traslada el programa escrito en instrucciones de los microcontroladores de la familia MCS-5 1 a instrucciones de la familia MCS-96. En la Figura A. 1 se muestra el diagrama en bloques de un genrico microcontrolador de esta familia. Estas son las principales caractersticas de la familia MCS-96:
??

232 registros archivo. Funcionalmente pueden considerarse como acumulado-

res.
?? Arquitectura dirigida al proceso registro a registro, evitando el cuello de botella que producen las arquitecturas de un nico registro acumuladon>. ?? Convertidor A/D de 10 bits con la inclusin del circuito de Captura y Mantenimiento (S/H: Sample and Hold). ?? 20 fuentes de interrupcin. ?? Salida de pulso modulado en anchura (Convertidor D/A). ?? Tiempo de ejecucin programable en EPROM. ?? Subsistema de E/S de alta velocidad. ?? Puerto serie de comunicacin full-duplex. ?? Perro guardin (watch-dog) de 16 bits. ?? Proteccin de los programas en ROM o EPROM. ?? Bus conligurable dinmicamente para trabajar con 8 o 16 bits.

Tabla A.2
8051AH 8031AH ROM RAM XROM XRAM FREQ. CYCLE 1 2 SERIAL UART 1 2 UART 1 2 UART UART UART UART UART l 32 INT kc Max @ 12 MH; IDLE I,, (TYP mA @ 12 MHi IPD Irc UYP KA) * Incluye el Programmable Counter Array (PCA) para aplicaciones que requieren: - Salidas de alta velocidad. - Modulador de anchura de pulso. - Watch-dog. - Circuito de comparacin/captura. ** Protocolos: CSMA/CD = Carrier-Sense Multi-Access with Collision Detection. SDLC = Synchronous Data Link Control. 5 125 16 5 125 32 5 250 25 32 6 32 16 32 UART I UART UART CSMA/CI SDLC** UART UART UART UART 128 64 KB 64 KB 16 128 64 KB 64KB 16 8751H iSOC51BH iSOC31BH 1 87C51 t 8052AH i8032AH I8752BH 1 83C152 I83C51FA 1 X51FA I83C51FB I87C57FI 4KB EPROM 18 64 KB 64 KB 8KB 8KB 256 64 KB 64 KB 16 16KB

32 1 30 -

32 1 30 75

32 1 40 5

32 1 40 5

15

15

268

htroduccin a los Microcontroladores

IREF

ANGND

BAJO

FRECUENCIA DE

c
1 1 / 1 1 -;i II II P2

16/ /

BAUUIUS

1 AiTA

VELOCIDAD

-------111-11 ----$,j jjyp ---i-!-e 1 HSl HSO PUERTO 0 PUERTO PUERTO 2


FUNCIONES ALTERNATIVAS Figura A.l.

MULTIPLEXOR /\

11 /\ I I

Con esta visin de conjunto el tcnico puede hacerse una idea de las herramientas que tiene para afrontar con xito cualquier problema de diseo que se le presente. Su habilidad no slo debe consistir en que el sistema funcione ptimamente, sino en buscar el microcontrolador que haga ms rentable su trabajo.

APENDICE

Concepto y aplicacin de los indicadores de Carry y Overflow


B.l. EXPRESION DEL CARRY En la mayora de las ocasiones se ha utilizado el ACC para la toma de decisiones (bifurcacin del programa), en funcin de que este registro fuese igual o distinto de cero (recurdese que no existe flag para esta bifurcacin, sino que comprueba directamente el ACC). Puede que en alguna circunstancia se necesite bifurcar en funcin de que el resultado sea positivo o negativo. Esta toma de decisin se puede hacer con las orientaciones que se dan en este apartado. El CARRY se pone a l cuando se propaga el acarreo desde el bit 7, que es el bit de signo en las operaciones con signo.

?? Ejemplo 1

Obsrvese el programa: 0200 CLR C 0 2 0 1 A D D C A,B Si A=F7H, > y B=08H t 269 RESULTADO: ACC <- FFH
Y

; c=o ; Suma el registro A con B.

270

Introducch

a los Mcrocontroladores

Si A=F7H, > y B=09H t RESULTADO: ACC <- OOH y

Tambin el CARRY se activa (1) en la operacin sustraccin (SUBB) si el boYYOW (prstamo) es solicitado por el bit7, y lo. desactiva (0) en los otros casos.

m Ejemplo 2 Obsrvese el programa: 0200 CLR C 0 2 0 1 S U B B A,B Si A=05H, > y B=03H t RESULTADO: ACC < - 0 2 H y ; c=o ; A es el minuendo y B el sustraendo.

>

RESULTADO: ACC < - F E H

C=l

Estas dos instrucciones representan unas herramientas interesantes para bifurcan> con las instrucciones de salto: J C <salto l> JNC <salto2> ; Salta si C=l ; Salta si C=O

No obstante, resulta ms prctico utilizar la instruccin de comparacin:

CJNE <destino>, <fuente>, <salto3> El CARRY se activa (1) cuando el valor del entero sin signo del registro <destino> es menor que el entero sin signo del registro <fuente>.

Apndice B. Concepto y aplicacin de los indicadores de Cm-t-y y Ouerjlow

271

?? Ejemplo 3

0200 CLR C 0201 CJNE A, B, Si A=05H,

SALTO 1.

> RESULTADO: y B=03H t Si A=03H, > RESULTADO: y B=05H t Si A=05H, > RESULTADO: y B=05H t C=1 -

dado que A > B.

dado que A < B.

1C = 0 1dado que A = B.

Naturalmente que, segn el Ejemplo 3, no se puede distinguir el caso 1 del caso 3, es decir, siempre que el registro A sea igual o mayor que B el CARRY es cero, pero puede utilizar la instruccin resta (A - B = RESULTADO) y las instrucciones de salto JZ o JNZ para distinguir el caso 1 del 3.

B.2. EXPRESION DEL OVERFLOW


La serial de overflow (sobrepasamiento) se utiliza en las operaciones aritmticas como una seal de alarma. Significa que se deben prever una o varias opciones que estudien las causas del sobrepasamiento y se apliquen los elementos correctores oportunos al caso. El overflw existe cuando se produce acarreo en el bit 6 o bit 7, pero nunca en ambos a la vez. La tabla de verdad y el esquema aclaran lo dicho. ACARREO b7 NO SI NO SI ACARREO b6 NO NO SI SI OVERFLOW NO SI SI NO

Como se puede comprobar, el resultado obedece a la funcin lgica EX-OR (vase Figura B. 1).

272

Introduccin a los Microcontroladores

C ?
L-----

b7 b 6

b0

, Figura B.l.

As pues, en el caso representado en la figura, existe overJlow porque hay acarreo en el b7 y no lo hay en el b6.
? OVERFLOW en la operacin SUSTRACCION

Se produce overflow en las operaciones de sustraccin con signo, cuando: Minuendo Sustraendo Resultado : POSITIVO : NEGATIVO -.. 0 cuando : NEGATIVO Minuendo Sustraendo Resultado : NEGATIVO : POSITIVO : POSITIVO

W Ejemplo 4 0200 CLR C 0 2 0 1 S U B B A,B Si A=03H,

y B=SOH Si A=80H, > y B=03H t

OV=l c=o 1

Apndice B. Concepto y aplicacin de los indi

273

OVERFLOW en la operacin de MULTIPLICACION Si el producto es mayor que 255 (FFH) el overflow se activa (OV=l). El carry siempre es igual a cero (C=O).

?? Ejemplo 5 0200

0201

ANL PSW, #7B MUL A, B

; Desactivacin del curry y overflow. ; Producto de ACC . B.

Si A=FH, > y B=02H t Si A=25H, > y B=02H t RESULTADO: ACC <- 4AH *. RESULTADO: ACC <- ECH

OVERFLOW en la operacin de DIVISION

A = Dividendo el resultado aparecer en este orden: En el registro B = Divisor A = COCIENTE y en el B = RESTO. Siendo Siempre C = 0 y OV = 0, salvo que el Divisor (B) sea igual a cero, en este caso se activa el overflow (OV = 1).

APENDICE

Modos de trabajo especiales para consumos crticos


C.l. MICROCONTROLADORES SXCXX DE BAJOS CONSUMOS
En aplicaciones donde el consumo del microcontrolador represente una preocupacin aadida para el diseador se ha realizado una versin CHMOS que prev dos modos de operacin de bajo consumo de potencia como caracterstica estnda.r. De estos modos slo participan los dispositivos de las familias lgicas CHMOS, dado que, en la actualidad, los HMOS no contemplan estas caractersticas (vase Tabla A.2 en el Apndice A).

C.2.

CARACTERISTICAS DE LOS MODOS DE BAJO CONSUMO

Las versiones de los microcontroladores CHMOS tienen dos modos de consumo reducido: - Modo IDLE (ralentizado). - Modo POWER DOWN (baja potencia). La Figura C. 1 muestra los circuitos internos que configuran estos modos de actuacin. La alimentacin de potencia se aplica, como en todos los casos, al pin 40 (VCC) durante el tiempo que el microcontrolador se encuentra activo en este estado. En el modo IDLE el oscilador-reloj suministra seal para las interrupcionrpuerto serie y timers, y puede ser bloqueada para la CPU, dependiendo de la seal IDL. En el modo POWER DOWN la seal que suministra el oscilador-reloj puede quedar bloqueada para la totalidad del sistema, dependiendo de la seal PD. El Cuadro C. 1 muestra el registro de control PCON (Power Control Register), posicionado en la direccin de memoria 87H, que tiene como misin configurar los modos de trabajo de bajo consumo referidos, y de asignar parcialmente la velocidad de comunicacin del puerto serie en los modos 1, 2 y 3 (PCON.7). Los dispositivos microcontroladores CHMOS tienen habilitados los 4 bis de los modos bajo consumo y el bit 7 asignado a las comunicaciones. Los dispositivos HMOS tienen implementado solamente este ltimo bit, pues no presentan los modos, bajo consumo. Los bits 4, 5 y 6 estn reservados para aumentar en el futuro las caractersticas de los productos 5 1. 274

Apndice C. Modos de trabajo especiales para consumos crticos

275

CLOCK GEN. PD

INTERRUPCIONES, ) PUERTO SERIE Y BLOQUES TIMERS b CPU

Figura C.l. Cuadro C.1.


PCON

b
SMOD 1

b6
1

br
1

b4
1

bs
GFl )

bz
GFO )

6
PD 1

bo
IDL \

BIT
bo

?? : Bit Modo Idle.

NOMBREYCOMENTARIO

Si IDL = 1entonces activa este modo de operacin. 1-I : Bit Poner Down. Si PD = 1 entonces activa el Modo Power DOW

GFO 0: GFI CI:

Fkzg bit de propsito general. Fhg bit depropbsito general.

6
bd+b6

Reservados para futuras ampliaciones.

bi

(:Bit duplicador de baudios. SMOD


Si SMOD = 1entonces duplica la frecuencia de reloj del Aher 1 cuando ste se utiliza como generador reloj de baudios en la comunicacin serie en los Modos 1.2 v 3.

- Si se activa simultneamente PD e IDL el microcontrolador toma el Modo Power Down, que es preferencial sobre el Modo Idle. - Despus de la operacin Resti, PCON loma el siguiente valor: OXXXOOOO. - En los dispositivos HMOS, PCON contiene solamente el bit SMOD.

276

Introduccin a los Microcontroladores

C.3. MODO IDLE


La instruccin que active el bit IDL del registro PCON hace que sta sea la ltima instruccin ejecutada, pues el microcontrolador queda inmerso (congelado) en este modo. En el modo IDLE la seal de reloj interna queda bloqueada para la CPU por la puerta lgica (vase Figura C. l), dependiendo del estado de la seal IDL, pero no para las funciones de lgica de interrupciones, puerto serie y timers. El estado de la CPU es preservado en su totalidad. El puntero de la pila, contador de programas, palabra de estado, acumulador y, el resto de los registros, mantienen sus valores durante el modo IDLE. Los pines de los puertos retienen los estados lgicos que tenan en el instante en que fue activado el modo IDLE. ALE y PSEN mantienen un nivel lgico alto. Hay dos maneras de finalizar el modo IDLE. La activacin de cualquier interrupcin autorizada har que el bit IDL del registro PCON sea desactivado por hardware. La interrupcin ser servida y la prxima instruccin que se ejecute es la siguiente a la instruccin RETI, que ser, secuencialmente, la siguiente a la instruccin que puso el microcontrolador en este modo. Los bits de flas GFO y GFl pueden ser utilizados para indicar si una interrupcin ha ocurrido durante el funcionamiento normal o durante el modo IDLE. Por ejemplo, una instruccin que active al modo IDLE puede tambin activar uno o ambos bits deflag. Cuando ha finalizado el modo IDLE por una interrupcin, la rutina de servicio de la misma puede examinar los bits de flag. La otra manera de finalizar el modo IDLE es con un RESET por hardware. El 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 seal en el pin RST borra el bit IDL directa y asncronamente. En este momento la CPU reanuda la ejecucin del programa desde donde fue parado, concretamente en la instruccin siguiente que llam el modo IDLE. Como se indic en el apartado 2.7 con relacin a la operacin RESET, dos o tres ciclos mquina de programa ejecutable pueden tener lugar antes que el algoritmo del RESET interno tome el control. El hardware del chip inhibe el acceso a la memoria RAM interna durante este tiempo, pero no se inhibe el acceso a los pines de los puertos. Para evitar la posibilidad de que se produzcan salidas inesperadas en los pines de los puertos, la instruccin siguiente a la que llama el modo IDLE no deber ser de escritura en los puertos o en la memoria RAM externa.

C.4. MODO POWER DOWN


Una instruccin que active el bit PD del registro PCON origina que esta sea la ltima instruccin ejecutable antes de entrar en el modo POWER DOWN. Este modo se caracteriza por la parada del oscilador-reloj del microcontrolador. Con el reloj parado (congelado), todas las funciones estn detenidas, pero la informacin sobre la RAM interna y registros SFR se mantienen. Los pines de los puertos de salida mantienen sus respectivos valores imagen de los que presentan sus respectivos registros del SFR. Las salidas ALE y PSEN permanecern a nivel bajo. La nica forma de salir del modo POWER DOWN es con RESET por hardware. El

Apndice C. Modos de trabajo especiales para consumos crticos

277

RESET redefine, como se estudi, toda la informacin de los registros SFR, pero no modifica la RAM interna. En el modo POWER DOWN, la tensin de alimentacin VCC puede ser reducida hasta 2 voltios. Se debe tener cuidado, sin embargo, en asegurar que esta tensin no sea reducida antes de que el modo POWER DOWN sea llamado y que la VCC sea restaurada a su nivel de operacin normal antes que el modo POWER DOWN finalice. El RESET que termina con el modo POWER DOWN tambin libera al oscilador. El RESET no ser activado hasta que la VCC sea restaurada a su nivel de operacin normal y debe mantenerse el tiempo suficiente para permitir al oscilador volver a arrancar y estabilizarse (el valor tpico es de 10 milisegundos).

APENDICE

Caractersticas de microcontroladores de otros fabricantes

IEME
8-Bit Single-Chip Mikrocontroller / 8-Bit Single-Chip Microcontrollers
SAB 8051A-N SAB 8051 A-P Q67120-C224 Q67120-Cl86 PL-CC-44 P-DIP-40 mit 128 x8-bit RAM, 4K x 8-bit ROM, 2 Tlmern, 3 2 EiA-Leitungen, NMOS, 12 MHz with 128 x8-bit RAM, 4K x 8-bit ROM, 2Timers. 3 2 110 Lines. NMOS. 12 MHz wie SAB 8051A, 16 MHz as SAB 8051A. 16 MHz P-DIP-40 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 P-DIP-40 P-DIP-40 wie SAB 8051A,.16 MHz, - 40 +85 C as SAB 8051A, 16 MHz, - 40 + 85 C wie SAB 8051A, 16 MHz, - 40 <.. +llOC as SAB8051A, 16 MHz,-40... +llOC wie SAB 8051A, ROMlos as SAB 8051A. ROMless wie SAB 8051A, ROMlos, 16 MHz as SAB 8051A. ROMless, 16 MHz wie SAB 8051A, ROMlos, - 40 + 85 C as SAB 8051A, ROMless - 40 + 85 C wle SAB 8051A, ROMlos, 10 MHz. - 4 0 +11ooc as SAB 8051A, ROMless, 10 MHz, - 40 + 110 C wie SAB 80528 as SAB 80528 wie SAB 80528, - 40 . + 8.5 C as SAB 80528, - 40 . + 85 C

SAB 8051A-16-N SAB 8051 A-l 6-P SAB 8051 A-l 2-P-T40185 SAB 8051A-10.P-T401110 Q SAB 8031A-N ??SAB 8031A-P El SAB 8031A-16-N Q SAB 8031A-16-P SAB 8031A-12-P-T40185 SAB 8031A-lo-P-T401110

Q67120-C348 Q67120-C346 Q6712OX233 067120~C231 Q67120-C271 067120~Cl83 Q67120-C349 067120X347 067120~C230 067120X232

SAB 8052A-N SAB 8052A-P SAB 8052A-N-T40185 SAB 8052A-P-T40185 SMD = Surface Mounted Device

Q67120-C263 Q67120-Cl95 Q67120-C368 Q67120-C247

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40

278

Apndice D. Caractersticas de microcontroladores de otros fabricantes

279

TYP Tm

Eestellnummer Gehuse Ordering Code Package

Beschreibung Description

Mikrocontroller Microcontrollers
8-Bit Single-Chip Mikrocontroller (Forts.) 8-Bit Single-Chip Microcontrollers (contd)
SAB-8052A-P-T4011 OO SAB 80525-N SAB 80520-P Q67120C248 Q67120-C424 Q67120C420 P-DIP-40 PL-CC-44 P-DIP-40 wie SAB 80526, - 40 + 1.00 C as SAB 80.526, - 40 + 1 OO C wie SAB 8051A, mit 256 x E-bit RAM, 8K x 8-bit ROM, 3 Timern, NMOS, 12 MHz as SAB 8051A. with 256x8-bit RAM, 8Kx8-bit ROM, 3 Timers, NMOS, 12 MHz wie SAB 80528, 16 MHz as SAB 80528. 16 MHz wie SAB 8052A, ROMlos as SAB 8052A, ROMless wie SAB 8052A. ROMlos, - 40 + 85 C as SAB 8052A, ROMless, - 40 + 85 C wie SAB 8052A, ROMlos, 16 MHz, - 40 . . + 100 C as SAE3 8052A: ROMless, 16 MHz, - 4 0 + 100 C wie SAB 80528, ROMlos as SAB 80528. ROMless wie SAB 80526, ROMlos, 16 MHz as SAB 80528. ROMless, 16 MHz wie SAB 8052B,RQMlos, 20 MHz as SAB 80528, ROMless, 20 MHz wie SAB 80528. CMOS as SAB 8052B, CMOS ) wle SAB 80528, CMOS, - 40 + 85 C as SAB 80528, CMOS, - 40 + 85 C wie SAB 80528, CMOS, - 40 + 100C as SAB 80526. CMOS, - 40 + 100 C wie SAB 80528, CMOS, 16 MHz as SAB 80528, CMOS, 16 MHz wie SAB - 4 0 .< as SAB -4o... 80528, CMOS, 16 MHz, +85C 80528, CMOS, 16 IbWz, +85c

SAB 80525-16-N SAB 80520-16-P SAB 8032A-N SAB 8032A-P SAB 8032A-N-T40185 SAB 8032A-P-T40185 SAEi 8032A-P-T4011 OO

Q67120-C426 Q67120C422 Q6712OC264 Q67120-Cl96 Q67120-C367 Q67120-C235 Q67120-C239

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 P-DIP-40

H SAB 8032B-N Q SAB 8032B-P I SAB 8032B-16-N I SAB 80328-l 6-P SAB 80328-20-N SAB 80328-20-P SAi3 80C52-N SAB 8OC52-P SAB 80C52-N-T40185 SAB 80C52-P-T40185 SAB 80C52-N-T4011 OO SAB 80C52-P-T400 OO SAB 8OC52-16-N SAB 8OC52-16-P SAB 8OC52-16-N-T40185 SAB 80C52-16-P-T40185

Q67120-C423 06712OC419 Q67120-C425 I Q67120-C421 Q6712OC472 Q67120-C471 Q67120-C396 ) Q67120C379 1 067120X564 Q67120-C521 06712OC559 Q67120C558 Q67120-C503 067120~C501 Q6712OC528 Q67120-C563

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 ) PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40

SAB 80C52-20-N SAB 8OC52-20-P

Q67120-C710 Q67120C708 Q67120-C395 06712OC378 Q67120-C540 Q6712OX520

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40

wie SAB 8OC52, 20 MHz as SAB 8OC52, 20 MHz wie SAB 80328, CMOS, ROMlos as SAB 80328, CMOS, ROMless wie SAB - 40 . < as SAB -4O... 80328, CMOS, ROMkx +85c 80328, CMOS, ROMIes +85C

??SAB 80C32-N
I SAB 8OC32-P SAB 80C32-N-T-40185 SAB 80C32-P-T-40185

SMD = Surface

Mounted Device

280
TYQ TYQe

Introduccin a los Microcontroladores

Bestellnummer Gehuse Ordering Code Package

Beschreibung Description

Mikrocontroller Microcontrollers
8-Bit Single-Chip Mikrocontroller (Forts.) 8-Bit Single-Chip Microcontrollers (contd)
SAB 80C32-N-T-401110 SAB 80C32-P-T-40/110 Q67120C548 Q6712OC547 PL-CC-44 P-DIP-40 wie SAB - 4 0 as SAB -4o... 80328, CMOS, ROMlos, +11ooc 80328, CMOS, ROMless. +11ooc

SAB 8OC32-16-N SAB 8OC32-16-P SAB 8OC32-16-P-T40185

Q6712OC502 Q6712OC500 Q67120C527

PL-CC-44 P-DIP-40 P-DIP-40

wre SAB 8052B, CMOS, 16 MHz as SAB 80528. CMOS. 16 MHz wie SAB 80528, CMOS, 16 MHz, - 4 0 +85c as SAB 80528, CMOS, 16 MHz, -4O... +85C wie SAB 8OC32, 20 MHz as SAB 8OC32. 20 MHz wie SAB 80528, mit 16K X 6-bit ROM as SAB 80528, with 16K x E-bit ROM wie SAB 80528, 6 tiHz, mit 16K x E-bit ROM as SAB 80528, 16 MHz, with 16K X8-bit ROM wie SAB 80528, 18 MH;, mit 16Kx8-bit ROM, - 40 +85 C as SAB 8052B, 16 MHz, with 16Kx8-bit ROM, - 40 +85 C wie SAB 80528, mlt 32K x8-bit ROM as SAB 80528. with 32K x 8-bit ROM wte SAB 8052B, 16 MHz, mit 32K x8-bit ROM as SAB 80526, 16 MHz, with 32Kx 8-bit ROM wle SAB 80528, 16 MHz, mit 32K x 8-bit ROM, - 40 + 85 C as SAB 80528, 16 MHz. with 32K X 8-bit ROM, - 40 . . . + 85 C mit 256 x B-bit RAM, 8K x b-bit ROM, 3 Timern, 4-fach-CompareiCapture, Watchdog-Timer, 48 EiA-Leitungen, E-bit A/DWandler mit 8 Eingngen, NMOS, 12 MHz wlth 256 X 8-bit RAM, 8K X B-bit ROM, 3 Timers, 4-Channel CompareCapture, Watchdog Timer, 48 VO lines, 8-bit AiDConverter with 8 Channels, NMOS, 12 MHz wie SAB 80515, - 40 + 85 C as SAB 80515, - 40 + 85 C wieSAB80515,-40... +llOC

SAB 80C32-20-N SAB 8OC32-20-P SAB 80513-N SAB 80513-P SAB 80513-16-N SAB 80513-l 6-P

Q67120-C709 Q67120C711 Q67120-C384 Q67120C383 Q67120-C443 Q67120-C441

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40

SAB 80513-16-P-T3

Q67120-C506

P-DIP-40

SAB 8352-5-N SAB 8352-5-P SAB 8352-5-l 6-N SAB 8352-5-l 6-P

Q67120-C524 Q67120-C526 Q67120-C533 Q67120-C529

PL-CC-44 P-DIP-40 PL-CC-44 P-DIP-40

SAB 8352-5-l 6-P-T3

Q67120-C531

P-DIP-40

SAB 80515-N

PL-CC;68

SAB 80515N-T40185 SAB 80515-N-T40/110

Q67120-C210 Q67120-C316

PL-CC-68 PL-CC-68

as SAB 80515, - 40 + 110 C SMD = Sutface Mounted Del ViC e

Apndice D. Caractersticas de microcontroladores de otros fabricantes

281

TYP We

Bestellnummer Gehuse Orderng Code Package

Beschreibung Description

- - -

Mikrocontroller Microcontrollers
8-W Single-Chip Mikrocontroller (F orts.) 8-Bit Single-Chip Microcontrollers ( contd)
SAB 83515-4-N SAB 83515-4-N-T3 Q67120-C525 Q67120-C536 PL-CC-68 PL-CC-68 wie SAB 80515, mit 16K x8-bit ROM as SAB 80515. with IGKXd-bit ROM wle SAB 80515, mit 16K x d-bit ROM - 4 0 .._ +85C as SAB 80515, with 16K x 8-bit ROM -4O... +85C wie SAB 80515, mit 16K X8-bit ROM - 40 + 110C as SAB 80515, with 16K x 8-bit ROM - 4 0 + 110C wie SAB 80515, ROMlos as SAB 80515, ROMless wie SAB 80515, ROMlos, - 40 . . . + 85 C as SAB 80515, ROMless, - 40 . . . + 85 C wie SAB 80515, ROMlos, - 40 . . . + 110 C as SAB 80515, ROMless, - 40 .., + 110 C wie SAB 80515, CMOS as SAB 80515. CMOS wie SAB 80515, CMOS, - 40 + 85 C as SAB 80515, CMOS, - 40 +85 C wie SAB 80515, CMOS, - 40 . . + 110C as SAB 80515, CMOS, - 40 + 110 C wie SAB 80515, CMOS, 16 MHz as SAB 80515, CMOS, 16 MHz wie SAB 80515,CMOS, 16 Mtiz, - 4 0 +85C as SAB 80515, CMOS, 16 MHz - 40 ,.. + 85 C wie SAB 83C515A-5, ROMlos as SAB 83C515A-5. ROMless abwrtskompatibel zu SAB 8OC515, mit lo-bit AiD-Wandler. 1 K X 8-bit zustzlichem RAM, 32K x 8-bit ROM, Hardware Powerdown backward compatible to SAB 8OC515, wlth 1 O-bit AID-Converter, 1 K x8-bit additional RAM, 32K x 8-bit ROM, Hardware Powerdown wie SAB 8OC515, mlt 8K x8-bit EPROM anstelle des maskenprogrammierten ROMs as SAB 8OC515, with 8K x8-bit EPROM instead of maskoroarammable ROM wie SAB 8OC515, mit 16K X8-bit EPROM anstelle des maskenprogrmmierten ROMs as SAB 8OC515, with 16Kxbbit EPROM instead of maskprogrammable ROM

SAB 835154-N-T4

Q67120G39

PI-CC-68

I SAB 80535-N H SAB 8053.5N-T40185 SAB 80535-N-T401110 SAB 80C515-N SAB 80C515-N-T40185 SAB 80C515-N-T401110 SAB 80%15-16-N SAB80C515.16.N-T40185

Q6712OC241 Q67120-C240 Q67120C313 Q6712OC297 Q67120-C388 Q67120-C391 Q67120-C492 Q67120-C561

PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68

SAB 8OC515A-N SAB 83C515A-5-N

06712OC581 Q67120C580

PL-CC-68 PL-CC 68

SAB 83C515Hr3J

06712OC732

CL-CC-68

SAB 83C515H-4J

Q67120-C733

CL-CC-68

SMD = Surface

Mounted Device

282
TYP TyPe

Introduccin a los Microcontroladores

Bestellnummer Gehuse Ordering Code Package

Beschreibung Description

Mikrocontroller Microcontrollers
8-Bit Single-Chip Mikrocontroller (Forts.) 8-Bit Single-Chip Microcontrollers (contd)
I SAB 80C535-N I SAB 80C535-N-T40185 SAB 80C535-N-T40illO H SAB 80C535-16-N SAB 8OC535 16.N-T40185 Q67120-C508 Q67120-C510 Q67120-C538 Q67120-C509 Q67120-C562 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 PL-CC-68 wie SAB 80515, CMOS as SAB 80515. CMOS wie SAB 80515, CMOS, - 40 + 85 C as SAB 80515, CMOS, - 40 +85 C wie SAB 80515, CMOS. - 40 + 110 C as SAB 80515, CMOS <- 40 + 110 C wie SAB 80515, CMOS, 16 Mi+ s SAB 80515, CMOS, 16 MHz wle SAB 80515,CMOS, 16 MHz, - 4 0 +85C as SAB 80515, CMOS, 16 MHz - 40 +85 C mit 256 x8-bit RAM, 8K X 8-bit ROM, Compare-/Capture-Einheit, zustzliche CompareAusgnge, Watchdog-Timer, Oszillator Watchdog, 56 EiA-Leitungen, 8-bit AIDWandler (12 Eingnge), Multiplik.-iDiv.Einheit, CMOS, 12 MHz with 256 x8-bit RAM, 8K x 8-bit ROM, CompareCapture Unit, additional Compare Outputs, Watchdog Timer, Oscillator Watchdog, 56 110 Lines, 8-bit AD-Converter (12 channels), MultiplyiDivide Unit, CMOS, 12 MHz wie SAB 8OC517, as SAB 8OC517, - 40 + 85 C - 40 + 85 C

SAB 8OC517-N

Q67120-C397

PL-CC-84

SAB 8OC517-N-T40185 SAB 8OC517-N-T401110 SAB 8OC517-S SAB 8OC517-S-T40185 SAB 8OC517-S-T401110 SAB 8OC517-16-N SAB 80C517-16-N-T40185 SAB 8OC517-16-N-T401110 SAB 8OC517-16-S SAB 8OC517-16-S-T40185 SAB 80C517-16-S-T40/110 SMD = Surface Mounted De

Q67120-C483 Q67120-C721 Q67120-C734 Q67120-C739 Q67120-C740 06712OC723 Q67120-C724 Q67120C726 06712OC735 Q67120-C743 Q67120-C744 :e

PL-CC-84 PL-CC-84 P-QFP-1 OO P-QFP-1 OO P-QFP-1 OO PL-CC-84 PL-CC-84 PL-CC-84 P-QFP-1 OO P-QFP-1 OO P-QFP-1 OO

w i e SAB 8OC517, - 4 0 +llOC as SAB 8OC517, - 40 _.. + 110 C wie SAB 8OC517 as SAB 8OC517 wie SAB 8OC517. - 40 ._. +85C a s SAB 8OC517, - 40 + 85 C wieSAB80C517,-40... a s SAB 8OC517, - 4 0 +llOC +llOC

wie SAB 8OC517, 16 MHz as SAB 8OC517, 16 MHz wie SAB 8OC517, 16 MHz, - 40 + 85 C as SAB 8OC517, 16 MHz, - 40 + 85 C wie SAB 8OC517, asSAB80C517. 16 MHz, - 40 + 110C 16MHz.-40 +llOC

wie SAB 8OC517, 16 MHz as SAB 8OC517, 16 MHz wie SAB 8OC517, 16 MHz, - 40 +85C as SAB 8OC517, 16 MHz, - 40 . . . + 85 C wie SAB 8OC517, asSAB80C517, 16 MHz, - 40 . . . + 110 C 16MHz,-40... +llOC

Apndice

D. Caractersticas de microcontroladores de otros fabricantes


Beschreibung Descriotion

283

TYP TvPe

Bestellnummer Gehuse Orderinq Code Packase

Mikrocontroller Microcontrollers
8-Bit Single-Chip Mikrocontroller (Forts.) 8-Bit Single-Chip Microcontrollers (contd)
SAB 80C517A-N Q67120-C583 PL-CC-84 wie SAB 8OC517, ROMlos, zusfitzlich 2KBXRAM (on-chip-RAM), neue senelle Schnittstelle, neuer programmterbarer Baudraten-Generator, 3 Unterbrechungs-Vektoren, Hardware Poder Down Mode, 18 MHz as SAB 8OC517, ROMless, additional 1 KB XRAM (on-chip-RAM), new Senal Interface, new programmable Baudrate Generator, 3 Interrupt Vectors, Hardware Power Down Mode, 18 MHz wie SAB 80C517A, as SAB 80C517A. 32 KB ROM 32 KB ROM

SAB 8OC517A-5-N SAB 83C517H-3J

wie SAB 8OC517, mit 8K X 8 bit EEPROM anstelle des maskenprogrammierten ROMs as SAB EOC 7, with 8K X 8 bit EEPROM instead of maskoroarammable ROM Q67120-C452 wie SAB 8OC517, ROMlos as SAB 8OC517, ROMless wie SAB 8OC517, ROMlos. - 40 + 85 C as SAB 8OC517, ROMless, - 40 + 85 C wie SAB 8OC517, ROMlos, - 40 + 110C as SAB 8OC517, ROMless, - 40 + 110 C Q67120-C737 wke SAB 8OC517, ROMlos as SAB 8OC517. ROMless wie SAB 8OC517, ROMlos, - 40 + 85 C as SAB 8OC517, ROMless. - 40 + 85 C Q67120-C717 Q67120-C722 Q67120-C725 P-QFP-1 OO PL-CC-84 PL-CC-84 wie SAB 8OC517, ROMlos, - 40 + 110 C as SAB 8OC517, ROMless, - 40 + 110 C wle SAB 8OC517, ROMlos, 16 MHz as SAB 8OC517, ROMless, 16 MHz wle SAB 8OC517, ROMlos, 16 MHz, - 4 0 +85C as SAB 8OC517. ROMless, 16 MHz, - 40 .__ +85 C wie SAB 8OC517, ROMlos, 16 MHz as SAB 8OC517. ROMless. 16 MHz wie SAB 8OC517, ROMlos, 16 MHz - 40 +85 C as SAB 8OC517, ROMless, 16 MHz -4O... ~85C wie SAB 8OC517, ROMlos. 16 MHz - 4 0 +11ooc as SAB 8OC517, ROMless, 16 MHz -4o... +lloc

??SAB 80C537-N
SAB 80C537-N-T40185 SAB 80C537-N-T401110 SAB 8OC537-S SAB 80C537-S-T40185 SAB 80C537-S-T401110

SB 8OC537-16-N
SAB 8OC537-16-N-T40185

SAB 8OC537-16-S SAB 8OC537-16-S-T40185

Q67120C738 Q67120-C745

P-QFP-1

OO

P-QFP-1 OO

SAB 8OC537-16-S-T401110

Q67120-C746

P-QFP-1 OO

SMD = Surface Mounted Device

M 0

284

Introduccin Q los Microcontroladores

MOTOROLA
Table 1-3. M6801 Family Selector Gide

El
6801 68701 6803 68OlU4 68701 U4 6803114 HMOS HMOS HMOS HMOS HMOS HMOS 40 40 40 40 40 40 Definitions: P = S = 110 = SCI = RAM = ROM = EPROM = DEVICE 6804P2 68704P2 6804Jl 6804J2 68HC04P4 68HC04JZ 68HCO4J3 68HC704P4 Definitions: P = S = FN = 110 = RAM = ROM = EPROM = HMOS HMOS HMOS HMOS HCMOS HCMOS HCMOS HCMOS

DEVICE

P Q
128 128 128 192 192 192 2048 4096 -

2048 4096 -

16 16 16 16 16 16

64K Yes 64K Yes 64K Yes 64K Yes 64K Yes 64K L Yes

ll
P,S S PS P.S S P

Plastic Cerdip InputiOutput Serial Commt Random Access Memory Read Only Memory Eraseable Programmable ROM

1terface

Table l-4. M6804 Family Selector Guide

28 28 20 20 28 20 20 28

30 30 30 30 172 30 122 172

1016 512 1000 3700 1000 1672 -

1020 3700

20 20 12 12 20 12 12 20

8 8 8 8 8 8 8 8

P,FN S P P P P P S

Plastic Cerdip Plastic Leaded Chip Carrier Input/Output Random Access Memory Read Only Memory Eraseable Programmable ROM

Apndice D. Caractersticas de microcontroladores de otros fabricantes

285

Table 1-5. M6605 Family Selector Guide

DEVICE 6805P2 6805P6 68705P3 68705P5 6805R2 6805R3 68705R3 68705R5 6805S2 680583 68705S3 6805112 6805113 68705U3 68705U5 HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS HMOS

P = S = FN = 110 = RAM =

Plastic Cerdip Plastic Leaded Chip Carrier Inputl0utput Random Access Memory

I l

28 28 28 28 40144 40144 40 40 28 28 28 40/44 40144 40 40 64 64 112 112 64 112 112 112 64 104 104 64 112 112 112 1110 1804 2048 3776 1480 2720 2048 3776 L

1804 1804 3776 3776 3752 3776 3776

20 20 20 20 32 32 32 32 21 21 21 32 32 32 32

/ c 8 8
8 a a 8 8 8 8 a a 8 a 8 8

Yes Yes Yes -

P,S,FN P,S,FN S S P,S,FN P,S,FN S S P.S,FN P,S,FN S P,S,FN P,S,FN S S

ROM = Read Only Memory EEPROM = Eraseable Programmable ROM SPI = Serial Peripheral Interface AID = AnaloglDigital Converter

Table 1-6. M6605 HCMOSICMOS Family Selector Guide / / /

DEVICE 6aHC05A6 68HC05B4 68HC0566 68HC05C2 6aHC05C3 68HC05C4 6aHC05CS 6aHC05L6 68HC05M4 68HCL05C4 68HCL05C8 68HSC05C4 68HSC05C8 6aHC705C8 6aHCa05B6 68HCa06C4 146805E2 146805F2 14680562 H C M O S 40/44 H C M O S 4a/52 HCMOS 40152 HCMOS 40 HCMOS 40 HCMOS 40144 HCMOS 40144 HCMOS 68 HCMOS 62 HCMOS 40144 HCMOS 40144 HCMOS 40144 HCMOS 40/44 HCMOS 40144 HCMOS 48152 HCMOS 40144 CMOS 40 CMOS 28 CMOS 40

176 176 176 176 176 176 176 176 128 176 176 176 176 304 176 176 112 64 112

---t-

4160 4160 5952 2096 2096 4160 7700 6208 4K 4160 8K 4160 8K 0 i 089 2106

- - 2056 256 8K 6208 4160 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 16 20 32

/ Q. 1
16 16 16 16 16 16 16 16 8/16 16 16 16 16 16 16 16 8 a 8 = = = = = Yes Yes Yes Yes Yes Yes Yes Yes Yes Y6-S Yes Yes Yes
YeS -

YS Yes Yes Yes Yes Yes YeS YS Yes Yes -

Yes Yes Yes -

P,FN P,FN P,FN P P P,FN P,FN FN FN

PSN
P,FN P,FN P,FN P,FN P,FN P.FN ,S,FN ,S,FN .S.FN

P = Plastic S = Cerdip FN = Plastic Leaded Chip Carrier 110 = Inputi,Output AID = AnalogiDigital Converter SCI = Serial Communications Interface

SPI RAM ROM EPROM EEPROM

Serial Peripheral Interface Random Access Memory Read Only Memory Eraseable Programmable ROM Electrical Eraseable ROM

286

Introduccin

los

Microcontroladores

Table 1-7. M68HCll Family Selector Guide

DEVICE HCMOS HCMOS HCMOS HCMOS HCMOS HCMOS HCMOS HCMOS Definitions: P = Plastic FN = Plastic Leaded Chip Carrier 110 = Input/0utput A/D = Analog/Digital Converter SCI = Serial Communication Interface SPI = Serial Peripheral Interface RAM = Random Access Memory R O M = Read Only M e m o r y EPROM = Eraseable Programmable ROM EEPROM = Electrical Eraseable ROM 48152 48152 48152 40144 52 52 48152 256 256 256 192 512 512 256 8192 4096 0 12K 512 512 512 512 2K 38 38 38 30 38 38 38 Yes Yes Yes No Yes Yes Yes Yes Yes Yes Yes Yes Yes
LY:s

Yes
VeS

Yes Yes Yes Yes 1 v,

P,FN P,FN P,FN P,FN FN FN / P,FN /

Table 1-8. One-Time Programmable ROM (OTPROM) Devices

68HC711A8 68HC711 E9

8192 12K

256 512

38 38

16 16

AID, SCI, SPI A/D, SCI, SPI

Yes Yes

52-FN 48-DIP.52.FN

NOTES: 1. Use MC68HC705C8 for window emulation. 2. Definitions: FN = Plastic Quad (PLCC) D W = Small Outline (Wide-Body SOIC) DIP = Dual-In-Line Package RAM = Random Access Memory 110 = Input/Output AID = AnalogiDigital SCI = Serial Communications Interface SPI = Serial Peripheral Interface COP = Computer Operating Properly 3. ?? Available in 1989.

Apndice D. Caractersticas

de microcontroladores de otros fabricantes

287

BI

National Semiconductor
The 8-Bit COP800 Family: Optimized for Value

Nationals COP800 family provides oost-effective f o r feature-rich. 6-bil m i c r o c o n t r o l l e r applications.

solutions

Key Features
High-performance E-bit microcontroller Full E-bit architecture and implementation ? ? 1 PS instruction-cycle time ? ? H i g h code efficiency w i t h s i n g l e - b y t e , multiple-funtiion instructions . UART ? ? A/D converter ? ? Watchdogiclock monitor ? ? On-chip ROM from 1 kbyte ?? On-chip RAM to 192 bytes ?? EEPROM ?? M2CMO.S~ fabrication ?? MICROWIRE/PLUSM serial interface ?? ROMless versions available ?? Wide operating voltage range: + 2.5V to + 6V ?? Military temp range available: -55C to + 125C ?? MIL-STDS83C versions available ?? 20. to 44-pin packages
?? ??

The COPEO0 combines a powerful single-byte, multiplefunction i n s t r u c t i o n s e t with a m e m o r y - m a p p e d core architecture similar to the HPCTM. And like the HPC, the COPEO0 family supports a wide variely of ROM, RAM, 110 and peripheral functions. The COPEO0 has an instruction-cycle time of only 1 p, and because over 70% of its instruction set is composed of single-cycle, single-byte instructions, the COPEO0 can deliver exceptional performance for an E-bit engine. A n d since its fabricated in N a t i o n a l s a d v a n c e d MZCMOS process, the COPSOO has Iow current drain, low heat dissipation, and a wide operadng voltage range.

KeyApplications
?? ??

Automotive systems Process control m Robotics w Telecommunications ?? AC-motor control ?? DC-motor control ?? Keyboard controllers ?? Modems ?? RS232C controllers T h e COPEO0 f a m i l y o f f e r s h i g h p e r f o r m a n c e in a low-cost, easy-to-design-in package. Block Diagram
I l/O PORT9

COP888CF
pC 6 BIT CORE MOMflED HARVARD ARCHITECTURE 16 BIT

PLUS Tl m-l

nm

: : r I

IUEGAL COND MTECT Ll

CPU RECISTER

TLIXXIW73-3

288

Introduccin a los Microcontroladores

COP800 Family of Microcontrollers


lCommerclal Industrlal Temp Version Temp Verslon 0C to + 70C -40% to + 85C COP82OC COP821C COP822C COP8640 COP8641 COP8642 COP8620 COP8621 COP8622 COP872OC MeI Military I Temp Verilon ROM -WC to + 125C (Bytes :OP62OC :OP621C :OP622C 1 .Ok 1 .Ok 1 .Ok 2.0k 2.0k 2.0k 1 .Ok 1 .Ok W RAM Bytes: 64 64 64 64 64 64 64 64 64 64 lI iii Pina 24 20 16 24 20 16 24 20 16 24 Features

ierla I/O Yes Yes Yes Yes Yes Yes Yes Yes Yes Yes Interrupt Stack 3 S o u r c e s InRAM 3 S o u r c e s In RAM 3 S o u r c e s In RAM 3 Sources 3Sources 3 Sources 3 Sources 3 Sources 3 Sources In In In In In In RAM RAM RAM RAM RAM RAM

Tlmer Bass Counten 1 1 1 1 1 1 1 1 1 1

I
SI20 Plns) Other 28 24 20 28 24 20 28 24 20 28 64x8 EEPROM in R A M 64x8 EEPROM in R A M 64x8 EEPROM in R A M 64x8 EEPROM in R A M 64x8 EEPROM in R A M

3 S o u r c e s In RAM

COP8721C

64

20

Yes

3Sources In RAM

24

COP8722C

1 .Ok Ef

64

16 24 20 16 21 23 23 313 5f3 3/3 -

Yes

3 S o u r c e s InRAM

20

COP84OC COP841C COP842C COP884CF COP884CG COP884CL COP888CF

COP64OC COP641 c COP642C COP684CF COP684CG COP684CL COP688CF

2.0k 2.0k 2.0k 4.0k 4.0k 4.0k 4.0k

128 128 128 128 192 128 128 192 128

Yes 3 S o u r c e s In RAM Yes 3 S o u r c e s In RAM Yes - 3 S o u r c e s In RAM Yes Yes Yes Yes Yes 10 S o u r c e s In RAM 12 S o u r c e s In RAM 10 S o u r c e s In RAM 10 S o u r c e s In RAM 14 S o u r c e s In RAM Sources In RAM

1 1 1 2 3 2 2 3 2

28 24 20 28 28 28 PPWM& AID 3PWM& UART PPWM

Yes 10 -

Development Support
DEVELOPYENT SYSTEM The Microcomputer On Line Emulator Development System is a low cost development system and emulator for all mic r o c o n t r o l l e r p r o d u c t s . T h e s e include COPSM microcontrollers and the HPC family of products. The COP800 Develo p m e n t S y s t e m consists o f a B R A I N B o a r d , P e r s o n a l i t y Board and optional host software. T h e p u r p o s e o f t h e D e v e l o p m e n t S y s t e m is t o provide t h e user with a loo1 to write and assemble code. emulate code f o r t h e t a r g e t m i c r o c o n t r o l l e r a n d a s s i s t in b o t h s o f t w a r e and hardware debugging of the system. It is a self contained computer with its own firmware which provides f o r all s y s t e m o p e r a t i o n , e m u l a t i o n c o n t r o l , communication, PROM programming and diagnostic operations. It contains three serial porls to optionally connect to a terminal, a host system, a printer or a modem, or to connect to o t h e r D e v e l o p m e n t S y s t e m s in a multi-Development System environment. T h e D e v e l o p m e n t S y s t e m c a n b e used in e i t h e r a s t a n d a l o n e m o d e o r in c o n j u n c t i o n w i t h a s e l e c t e d h o s t s y s t e m using PC-DOS communicating via a RS-232 port.

Indiceanaltico

Acarreo (Carry), 269. ACC o A, Registro, 25. Acceso a memoria datos, 2 1. Acceso a memoria programas, 17. ADD A, <byte>, Instruccin, 34, 39, 60, 92. ADDC A, <byte>, Instruccin, 39,60,269. ALE, Seal (pin ALE/PROG), 6, 17, 133. Alternativa Estructura. Modelo de programacin, 9 1. ANL A, <byte>, Instruccin, 42, 6 1, 99. ANL C, bit (/bit), Instruccin, 49, 50,64, 101. Area de direccionamiento DIRECTO, 23. Area de direccionamiento INDIRECTO, 22, 23. Area de direccionamiento SFR, 23, 25. Arranque TIMERs por Hardware, 160. Arranque TIMERs por Software, 157, 159. ASIC (Application Specific Integrated Circuits), XVII Aurorrecarga, TIMERs, 163, 176, 178. A/Dx, Seal (bus de direcciones y datos), 4, 131, 134. Banco de Registros, 23. Basic, Intrprete, XVII. Bit a bit, Sub-area direccionable, 24. Borrado, EPROMs, 14. Buffer, Port de entrada, 6, 130. B, Registro, 26. CALL addr, Instruccin, 52, 54, 64, 121. Captura, Modo de, 169, 173, 180.

Carry (Acarreo), 269. Cerrojo, Bits (Lock Bits), 13, 235. Ciclo de escritura, Memoria externa de datos, 135. Ciclo de instruccin, 36. Ciclo de lectura, Memoria externa de datos, 133. Ciclo de lectura, Memoria externa de.programas, 133. Ciclo mquina, 19. CJNE A, <byte>, rel, Instruccin, 56, 57, 65. CJNE <byte>, #data, rel, Instruccin, 56, 58, 108. CLR A, Instruccin, 41, 62. CLR bit, Instruccin, 49, 64. CLR C, Instruccin, 49, 64, 103. Comprobacin de bits, Modelo de Programacin, 99. Comprobacin de bytes, Modelo de Programacin, 103. Comunicaciones en MODO 0, 246. Comunicaciones en MODO 1, 255. Comunicaciones en MODO 2 y 3, 258. Comunicaciones, Modos de, 239. Consulta (Polling), 183. Contadores, TIMERs, 150. Contaje, Operacin de, 164, 167, 173. Conversin fichero .HEX a .BIN, 230. CPL A, Instruccin, 4 1,62. CPL C, Instruccin, 49, 5 1, 64. CPL bit, Instruccin, 49, 64. DA A, Instruccin, 39,40, 6 1. 289

290

Zndice

DEC A, Instruccin, 39, 6 1. DEC <byte>, Instruccin, 32, 39, 97. Dilogo (handshaking), Protoloco de, 183. Direccionamiento Directo, 33. Direccionamiento Implcito, 35. Direccionamiento Indexado, 35. Direccionamiento Indirecto, 34. Direccionamiento por Registro, 34. Direccionamiento, Modos de, 33. Direccionar memoria, 19. DIV AB, Instruccin, 39, 61, 273. DJNZ <byte>, rel, Instruccin, 56, 65, 95. DPL y DPH, Registros, 27. Driver, Puerto de salida, 6, 130. Dplex, Modo de comunicacin, 239. EA, Seal (pin EAJVPP), 6,69, 133. Editado, Operacin de, 78. Ejecucin, Operacin de, 77, 84, 236. Emulador, 66. Encriptacin, Cadena, 13, 236. Enlazado (link), Operacin de, 82. Ensamblador directo, 7 1. Ensamblado, Operacin de, 79. Escritura, Puertos de Entrada/Salida, 135. Familia microcomputadora, XV. Flags, Informacin de estado, 26. Generador de baudios, 242. Grabar memorias, Operacin de, 10, 23 1, HEXBIN.EXE, Fichero, 230. Idle, Modo de bajo consumo, 276. IE, Registro, 25, 186. INC A, Instruccin, 39,60. INC DPTR, Instruccin, 39, 61, 117. INC <byte>, Instruccin, 39,61. Instrucciones Aritmticas, 39, 60. Instrucciones Booleanas, 48, 64. Instrucciones de Salto Condicional, 55,64. Instrucciones de Salto Incondicional, 5 1, 64. Instr. Transfer. de Datos sobre RAM externa, 44, 62. Instr. Transfer. de Datos sobre RAM interna, 42, 62.

Instrucciones de Tratamiento de Tablas, 46, 63. Instrucciones Lgicas, 40, 6 1. Instrucciones MOVC, 46. Instrucciones MOVX, 44. Instrucciones, Tipos, 36. Interrupciones internas (TIMER 0 y l), 207. Interrupciones internas (TIMER 2), 2 12. Interrupciones, Prioridad de las, 190. Interrupciones, Tabla de vectorizacin de, 18, 187. Interrupcin, Borrado de los flags, 189. Interrupcin, Ciclo de, 188. Interrupcin, Retorno de, 52, 190. Interrupcin, 18 3. INTO, INT 1, Seales, 18, 19 1. IP, Registro, 28, 190. Iterativa, Modelo de Programacin, 94. JB y JBC bit, rel, Instrucciones, 49, 64. JC rel, Instruccin, 49, 64. JMP addr, Instruccin, 52, 64, 97. JMP @A+DPTR, Instruccin, 52, 53,65. JNB bit, rel, Instruccin, 49, 51, 64, 203. JNC rel, Instruccin, 49, 64, 178. JZ y JNZ rel, Instrucciones, 56, 65, 92. Latch, Puertos de Entrada/Salida, 6, 133. Lectura, Puertos de Entrada/Salida, 139. Macroensamblador, 77. Mapa de memoria, 224. Memoria combinada, 16. Memoria de datos, 2 1. Memoria de programas, 17. Memoria externa, 16, 21, 133. Memoria interna, 16, 17, 2 1. Memoria mixta, 17. Memoria segregada, 16. Memoria, Direccin de, 2 1. Microcomputador Monopastilla, XV. Microcontrolador, XVI. Microcontrolador 8052/805 1, Caractersticas, 2. Microcontroladores de bajo consumo, 274. Microcontroladores, Caractersticas, XVI. Microcontrolador, Patillaje, 4. Microcontrolador, Puertos (PORTs), 5.

lndice

291
13,

Microprocesador. El Microcontrolador como, 130. Modelo de programacin, 9 1. Modo operacin de los TIMERs, 152. Modo 0, Timers, 146. Modo 1, Timers, 156. Modo 2, Timers, 163. Modo 3, Timers, 166. MOV A, <src>, Instruccin, 42, 62, 92. MOVC A, @A+DPTR, Instruccin, 46, 63, 117. MOV bit, C y MOV C, bit, Instruccin, 49,64. MOV DPTR, #data 16, Instruccin, 42, 63, 117. MOV <dest>, A, Instruccin, 42, 63, 92. MOV <dest>, <src>, Instruccin, 42, 63, 95. MOVC QA+PC, Instruccin, 46, 63. Movimiento de tablas, Estruc. de programacin, 113. MOVX A, @DPTR, Instruccin, 44,63, 114. MOVX A, @Ri, Instruccin, 44,63. MOVX @DPTR, A, Instruccin, 44,63, 114. MOVX @Ri, A, Instruccin, 44, 63. MUL AB, Instruccin, 39, 61, 273. Multiprocesador, Estructura, XVI, 240.

Proteccin, programa ROM/EPROM,


234.

PSEN, Seal, 6, 16, 133. PSW, Registro, 26. Puerto serie, 239. Puertos (ports), 5. PUSH <src>, Instruccin, 42, 63, 126. PWM. Modulacin por anchura de pulso, XVII, 222. PO-Pl-P2-P3, Puertos o Por&, 27.

Quick-pulse, Algoritmo de programacin, 9.

NOP, Instruccin, 52, 65, 92.

Operacin RESET, 29, 237. ORL ii, *<byte>, Instruccin, 41, 61. OR!. C, bit, Instruccin, 49, 64. CRL C,/bt, Instruccin, 49, 64. QRt .>yte>, A, Instruccin, 4 1, 6 1. ORL <byte>, #data, Instruccin, 41, 61,229. Oscilador, Reloj externo, 9. Oscilador, Reloj interno, 8. Overflow, 27 1.

Paso a paso, Ejecucin, 75. PCON, Registro, 25, 275. Pila, Gestin de la, 125. POP <dest>, Instruccin, 42, 63, 126. Power Down (modo bajo consumo), 276. Procesador booleano, XVII, 48. Programacin, EPROM, 10, 23 1. Programacin, Tiempo, 9. PROG, Seal (pin ALE/PROG), 6, 10.

RD, Seal, 8, 16, 133. Registro ACC (A), 25. Registro B, 26. Registro DPL y DPH, 27. Registro IE, 28, 187. Registro IP, 28, 190. Registro PCON, 28, 275. Registro PSW, 26. Registro PO, PI, P2, P3, 27. Registro RCAP2H-RCAP2L, 27, 170. Registro SBUF, 27, 239. Registro SCON, 28, 24 1. Registro SP, 26. Registro TCON, 28, 153. Registro THO-TLO, 27, 15 1. Registro THl-TLl, 27, 151. Registro TH2-TL2, 27, 170. Registro TMOD, 28, 152. Registro T2CON, 28, 168. Registros SFR, 25. Registros, Bancos de, 23. RESET automtico, Seal, 3 1. RESET (RST), Seal, 29. Retardo (Timers), 150. Retardo, Modelo de programacin, ll 1. RETI, Instruccin, 52, 55, 64. RET, Instruccin, 52, 55, 120. RL A, Instruccin, 41, 53, 62, 125. RLC A, Instruccin, 4 1, 62,2 16. Rotaciones, 125. RR A, Instruccin, 41, 62. RRC A, Instruccin, 41,62, 1.96. Ruptura, Puntos, 73. RXD, Seal, 8,239.

292

Indice

SBUF, Registro, 27, 239., SCON, Registro, 28, 241. Secuencia de bsqueda, 19. SETB bit, Instruccin, 49, 64, 103. SETB C, Instruccin, 49, 64, 10 1. SFR (Special Function Register), 25. Simulador, 66. Sistema de desarrollo de aplicaciones, 66. Sistema integrado, XVI. Sistema microcomputador, XV. SP, Registro, 26. Sub-rea direccionable bit a bit, 24. Sub-area scratch pad, 24. SUBB A, <byte>, Instruccin, 39,60, 92, 270. Subrutinas, Tratamiento de, 120. SWAP A, Instruccin, 41, 62, 143. Tablas, Movimiento de, 113. Tablas, Tratamiento de, 116. TCON, Registro, 28, 153. Temporizadores (Timers), 150. THO-TL0 y TH 1 -TL1 , Registros, 27, 15 1. TH2-TL2, Registros, 27, 170. TMOD, Registro, 28, 152. TXD, Senal, 8, 235, 246.

TO y Tl, Senales Time& 8, 150. T2CON, Registro, 28, 168. T2EX, Seal, 7, 170. T2, Seal del TIMER2, 7, 168.
:: .7

USD (Universal Symbolic Debugger), 69. VCC (pinVCC), 3. Verificacin, EPROM, 12, 233. VPP (pin EAIVPP), 6, 9. VSS (pin VSS), 3. WR, Seal (pin WR), 8, 16, 19, 133. Watchdog, XVII. XCH A, <byte>, Instruccin, 42, 43, 63. XCHD A, @Ri, Instruccin, 42, 43, 63. XRL A, <byte>, Instruccin, 41, 62. XRL <byte>, A, Instruccin, 41, 62, 138. XRL <byte>, #data, Instruccin, 41,62, 105. XTALl (pin XTALl).XTAL2 (pin XTAL2), 8. . ..

Você também pode gostar