You are on page 1of 86

Curso de Microcontroladores I

Contenido:
1 Portada.
2 Temario.
3 Manual del Curso.
4 Anexos

M.C. Eduardo Snchez Arellano.
- Pgina 2-
Contenido

Capitulo 1. La familia MCS-51
1.1. Caractersticas de la familia
1.2. Caractersticas de los Microcontroladores 8051
1.3. Pinout de los Microcontroladores Intel
1.4. Caractersticas de las memorias EPROM integradas en los Microcontroladores 8751.
1.4.1. Introduccin
1.4.2. Programacin de la EPROM Interna.
1.4.3. Sistema de proteccin de la informacin en la EPROM Interna.
1.4.4. Borrado de la informacin en la EPROM Interna.

Capitulo 2. Configuracin de la memoria en el Microcontrolador 8751
2.1. Memoria de programa y datos.
2.2. Memoria de programa.
2.3. Memoria de datos.
2.4. Area de direccionamiento slo indirecto.
2.5. Area de direccionamiento directo e indirecto.
2.6. Area de registros o funciones especiales
2.7. Operacin Reset.

Capitulo 3. Programacin de los Microcontroladores
3.1. Introduccin
3.2. Modos de direccionamiento
3.3. Ciclo de instruccin
3.4. Tipo de instrucciones
3.5. Instrucciones aritmticas.
3.6. Instrucciones lgicas.
3.7. Instrucciones de transferencia movimiento de datos.
3.7.1. Transferencia de datos sobre la RAM interna
3.7.2. Transferencia de datos sobre la RAM externa.
3.7.3. Memoria de programas para el tratamiento de tablas
3.8. Instrucciones Booleanas
3.9. Instrucciones de salto.
3.9.1. Instrucciones de salto incondicional.
3.9.2. Instrucciones de salto condicional.
3.10. <<SET>> de instrucciones de la familia MCS-51

Capitulo 4. Presentacin del software y equipo para el desarrollo de aplicaciones
4.1. Introduccin
4.2. El Macroensamblador:
4.3. Operaciones del editor.
4.4. Operaciones de ensamblado.
4.5. Operaciones de Encadenado.
4.6. Operaciones de Simulacin
4.7. Ejecucin y estudio de programas en el Macroensamblador.

Capitulo 5. Control de puertos de Entrada/Salida.
5.1. Introduccin
5.2. El Microcontrolador como Microprocesador.
5.3. Operaciones de escritura en los puertos del Microcontrolador.
5.4. El puerto P0 en modo salida.
5.5. Operaciones de lectura en los puertos.
5.6. Control de procesos Industriales bsicas.
5.7. Control del LCD.
5.8. Control del Teclado.
5.9. Adquisicin de datos mediante ADC

Capitulo 6. Interrupciones.
7.1. Introduccin.
7.2. Tipos de Interrupciones.
7.3. Proceso de interrupcin en los Microcontroladores.
7.4. Niveles de prioridad.
7.5. Interrupciones externas. (INT0) e (INT1)
7.6. Interrupciones internas producidas por Timer 0 y1.

Capitulo 6. Temporizadores y Contadores.
6.1. Introduccin
6.2. Timer 0 (T0) y Timer 1 (T1).
6.3. Temporizador/Contador de 13 y 16 bit, arranque por software.
6.4. Programas.
M.C. Eduardo Snchez Arellano.
- Pgina 3-
Capitulo 1
INTRODUCCIN A LOS MICROPROCESADORES

1.1 LA EVOLUCION DEL MICROPROCESADORES
Antes de comenzar a analizar los microprocesadores modernos, se debe primero
entender qu fue lo que puso a estos dispositivos en los primeros aos. La historia dice que
Se construyeron gigantescas mquinas computadoras en las dcadas de 1940 y 1950,
construidas con relevadores y tubos de vaco (bulbos). Ms adelante, se utilizaron los
transistores y los componentes electrnicos de estado slido para construir las poderosas
computadoras de la dcada de 1960. Con el advenimiento, de los circuitos integrados se
lleg al perfeccionamiento del microprocesador y de los sistemas de microcomputadoras.
El microprocesador de 4 bits
En 1969, Intel Corporation y el talento creativo de Marcian E. Hoff lanzaron el primer
microprocesador: el 4004, de 4 bits. Este microprocesador, programable en un solo
encapsulado era insuficiente, segn las normas actuales, porque slo direccionaba 4096
localidades de 4 bits en la memoria. El 4004 contena un conjunto de instrucciones que
ofrecan slo 45 instrucciones diferentes. Como consecuencia, el 4004 slo se poda emplear
en aplicaciones limitadas, como en los primeros juegos de vdeo y en controladores
pequeos basados en microprocesadores. Cuando surgieron aplicaciones ms complejas
para el microprocesador, el 4004 result inadecuado.
El microprocesador de 8 bits
Ms tarde, en 1971, al percatarse que el microprocesador era un producto, viable
para, comercializacin, Intel Corporation produjo el 8008, el primer microprocesador de 8
bits. El tamao ampliado, de la memoria (16K * 8) y las instrucciones adicionales (un total
de 48). Con este nuevo microprocesador brindaron la oportunidad de muchas aplicaciones
ms avanzadas (1K es igual a 1024 y un byte es un nmero de 8 bits).
Conforme los ingenieros desarrollaban usos ms demandantes para el
microprocesador, la memoria y el juego de instrucciones del 8008 pronto limitaron su
utilidad. Por tanto, en 1973, Intel Corporation introdujo el 8080, el primero, de los
microprocesadores modernos de 8 bits. Pronto, otras empresas empezaron a lanzar sus
M.C. Eduardo Snchez Arellano.
- Pgina 4-
propias versiones de los procesadores de 4 y de 8 bits. En la tabla 1-1 se enumera muchos
de estos primeros microprocesadores.

MICROPROCESADORES DE 8 BIT.

AO MICRO COMENTARIOS
1969 Intel 4004 No fue un producto comercial.
1971 Intel 8008 Primer microprocesador de 8 bits.
1973 Intel 8080 Surge la industria de las microcomputadoras.
1974 Motorola 6800 Primer micro de Motorola.
1975 Zilog Z80 Aparece el sistema operativo CP/M.
1976 Intel 8085
Mostek 6502
Aparece Apple iniciando el auge de las microcomputadoras.
1978 Motorola 6809 Mejor micro de 8 bit.
Tabla 1-1
UNIDAD CENTRAL DE PROCESAMIENTO (CPU).
El CPU es el corazn de la C, es el encargado de decodificar las instrucciones, hacer ms
eficientes las operaciones aritmticas, y controlar algunas otras partes de la maquina.
Cuenta con cuatro partes bsicas.
(1) Registros,
(2) Unidad Aritmtica y lgica,
(3) Circuito de temporizacin y control.
(4) Circuito de Decodificacin.
Los Registros: Son localizaciones que sirven para almacenar temporalmente datos,
pueden ser de 8 o de 16 bits. Los tres registros ms usados son, el acumulador para
propsito general, el contador de programa y el registro de instrucciones que son de
(1)
Acumulador. (ACC)
Reg de Instruccin.
Contador del Programa
Decodificador
de Instruccion
(4)
Timing and
Control.
(3)
(2)
Unidad
Aritmetica.
y Logica.
(ALU)
M.C. Eduardo Snchez Arellano.
- Pgina 5-
propsito especfico. El acumulador almacena temporalmente el resultado de las
operaciones aritmticas y lgicas. El registro de Instrucciones es usado para almacenar la
instruccin que se est ejecutando en ese momento por el microprocesador. El contador de
Programa contiene la direccin de la siguiente instruccin del programa.

El circuito de decodificacin: Involucra el proceso de trasladar un patrn binario
en una operacin o secuencia de operaciones. Por ejemplo si el siguiente patrn binario
10111001 representa ADD, el circuito de decodificacin lo reconoce y manda seales a
todas las otras partes del P para que ocurra la decodificacin.

El Circuito de temporizador y control: Es una red secuencial que acepta un
cdigo que define la operacin que se va a ejecutar y luego prosigue a travs de una
secuencia de estados, generando una correspondiente secuencia de seales de control.
Estas seales de control incluyen el control de lectura - escritura y seales de direccin de
memoria vlida en el bus de control del sistema. Otras seales generadas por el controlador
se conectan a la unidad aritmtica - lgica y a los registros internos del procesador para
regular el flujo de informacin en el procesador y a, y desde, los buses de direccin y de
datos del sistema.

La unidad aritmtico-lgica (ALU, Arithmetic-logic unit): es una red
combinacional. Acepta dos palabras de datos y una palabra de control que especifica el tipo
de operacin que ha de ejecutarse con los datos. El bus de datos del sistema o cualquiera
de los registros internos del procesador pueden proporcionar palabras de datos. La palabra
de control se define por la unidad de control. La ALU realiza la operacin especificada y
genera una palabra de salida que representa el resultado de la operacin aritmtica o lgica
y un conjunto de seales de estado que indican, por ejemplo, si se produjo un acarreo o
desbordamiento aritmtico. La palabra resultado se puede dirigir a cualquiera, de los
registros internos o al bus de datos. El destino especfico se define por la unidad de control,
dependiendo de la naturaleza de la Operacin que se esta realizando. Las seales de estado
se dirigen a un registro interno especfico del procesador para almacenamiento, denominado
registro de cdigos de condicin.




M.C. Eduardo Snchez Arellano.
- Pgina 6-

1.2 Arquitectura de los Microprocesadores























El Acumulador: almacena datos para procesar por la ALU. Suelen tener el mismo
nmero de bits que el bus de datos. El acumulador se utilizan con el bus de datos y la ALU
en el proceso de datos. Por ejemplo, dos palabras binarias se pueden sumar, cargando la
primera en el acumulador A, sumando la segunda, cargando el resultado en el acumulador y
despus transfiriendo los resultados desde el Acumulador, a la memoria. Durante la
transferencia de los primeros datos, el bus de datos sirve como una entrada al Acumulador.
Durante la segunda, la ALU realiza una suma en la que el bus de datos proporciona una
entrada y el acumulador A la otra; la salida de la ALU se conecta a la entrada del
acumulador A para almacenar el resultado. Durante la tercera operacin, la salida del
Acumulador se conecta al bus de datos, de modo que los resultados se transfieren a
memoria.
M.C. Eduardo Snchez Arellano.
- Pgina 7-
El contador de programa (PC): Es un registro de 16 bits que contiene la direccin
de la palabra siguiente del programa. Su salida se conecta al bus de direcciones siempre
que una palabra del programa se lea desde la memoria. Cada vez que el contador de
programa proporciona una direccin, se modifica de modo que contiene siempre la direccin
de la palabra siguiente del programa.

El puntero de pila (SP, stack pointer): El puntero de pila es, un registro de
autoincrementacin y autodecrementacin, que significa que cada vez que se proporciona
un dato su contenido se incrementa o decrementa automticamente. En los
microprocesadores, el puntero de pila contiene la direccin de la siguiente posicin de
memoria vaca en la pila. A continuacin, proporciona esta direccin al bus de direcciones
durante un ciclo del bus de lectura. La pila se utiliza de muchos modos; por ejemplo, se
utiliza para almacenar la direccin de retorno cuando las transferencias de control a
subrutinas o rutinas de interrupcin de servicios.

El registro de cdigos de condicin: (PSW) (CCR) Almacena la informacin
que describe los resultados de operaciones anteriores. Esta informacin se almacena
asignando un bit en el registro. En algunos microprocesadores, el registro del cdigo de
condicin. Contiene ocho bits, El bit menos significativo es el bit de acarreo, o bit C, que se
pone a 1 cuando se produce un acarreo aritmtico. El bit de desbordamiento, o bit V, se
pone a 1 si se produce un desbordamiento. El bit cero, o bit Z, el tercer bit en el registro de
cdigos de condicin se pone a 1 cuando se produce el resultado cero. El bit negativo, o bit
N, se pone a 1 cuando el resultado es negativo. El bit de semi acarreo, o bit H, se pone a 1
cuando se produce un acarreo desde el bit 3. El bit H se utiliza con clculos aritmticos con
datos codificados en BCD. Los bits C, V, Z, N y H se ponen a 1, o a 0, automticamente por
el procesador, dependiendo de la naturaleza de la operacin que se est ejecutando y el
resultado de est operacin, adems, los bits C, V e I pueden ser puestos a 1, o a 0, por el
programador utilizando instrucciones especiales para cada bit.






M.C. Eduardo Snchez Arellano.
- Pgina 8-
Capitulo 2
Introduccin a los Microcontroladores Intel

Antecedentes histricos.

En el ao de 1971 cuando surge el primer microprocesador de 4 Bit Intel, las tcnicas de
diseo de los equipos de instrumentacin y control sufrieron un cambio. Los fabricantes de
microprocesadores, conscientes de la importancia de este mercado, pusieron a disposicin
de los ingenieros una gran variedad de circuitos integrados complementarios los cuales
constituyen, para cada fabricante, su familia.










Figura 2.1
n el ao de 1976, gracias al aumento en la densidad de integracin, sali a la luz la
primera computadora en un chip, es decir, se integraron junto con el
microprocesador los subsistemas que anteriormente formaban unidades
especializadas e independientes, pero unidas por las pistas de circuitos impresos con el
microprocesador formando lo que se conoce como sistema mnimo. A este nuevo circuito
integrado se le denomin MICROCONTROLADOR.
No hay duda que disponer de un chip que cuente con tantos subsistemas, es un gran
avance y consecuentemente muy rentable.

Los MICROCONTROLADORES INTEL de 8 Bit que estudiaremos en esta unidad integran
los siguientes subsistemas.
Un CPU de 8 bit.
256 Byte de RAM interna.
E
M.C. Eduardo Snchez Arellano.
- Pgina 9-
4 Kbyte de ROM(8051) EPROM(8751) interna.
4 Puerto de Entrada /Salida.
2 Contadores y temporizadores de 16 bits.
Circuito de reloj incorporado.
Bajo consumo de corriente(power down) en las versiones CHMOS.
Alta inmunidad al ruido elctrico.
Ampliacin del set de instrucciones con algunas muy potentes para la adquisicin y
tratamiento de datos, tablas, multiplicacin, divisin, etc.
Instrucciones lgicas y de brinco orientadas al proceso de seales bit a bit
(procesador booleano).
Espacios de la memoria de programa y de datos separadas (memoria segregada).
Proteccin de la memoria de programas (encriptacin).
Comunicacin serie estndar con otros sistemas. Tipo Full-Duplex.
5 interrupciones programables con niveles de prioridad.

En estos momentos los MICROCONTROLADORES de 8 bits son el estndar para
aplicaciones en controladores de mediana complejidad, por su facilidad de manejo y su alto
nivel de prestaciones.

Adems la arquitectura permite que el MICROCONTROLADOR sea utilizado como
Microprocesador. Naturalmente esto trae como consecuencia una reduccin de su capacidad
autnoma de controlar perifricos a travs de sus puertos.

MICROCONTROLADORES INTEL 8XXX
Caractersticas de la Familia de MICROCONTROLADORES Intel.
Con ROM sin ROM con EPROM ROM RAM TIMER TECNO
8048AH 8040AH P8748H 1K 64 1 HMOS
8049AH 8039AHL P8749H 2K 128 1 HMOS
8050AH 8035AHL No Existen 4K 256 1 HMOS
8051 8031 8751 4 K 128 2 HMOS
8051AH 8031AH 8751H 4 K 128 2 HMOS
8052AH 8032AH 8752BH 8 K 256 3 HMOS
80C51BH 80C31B 87C51 4 K 128 2 CMOS
TABLA 2.1
M.C. Eduardo Snchez Arellano.
- Pgina 10-
ARQUITECTURA BASICA DE LOS MICROCONTROLADORES 8051











FIGURA 2.2

DIAGRAMA GENERAL DE LOS MICROCONTROLADORES 8031-8051-8751
FIGURA 2.3
M.C. Eduardo Snchez Arellano.
- Pgina 11-

PINOUT DEL 8XX1

FIGURA 2.4

Descripcin de los pines:

Vcc: Voltaje de alimentacin positiva (+5 Volts.)

Vss: Conexin a tierra (0 volts).

PUERTOS: Los MICROCONTROLADORES 8051 tienen 4 puertos de 8 bits bidireccionales
(P0, P1, P2 y P3). Esto quiere decir que pueden programarse y operar como entrada o
salida.

M.C. Eduardo Snchez Arellano.
- Pgina 12-
PUERTO 0(P0): Se encarga de multiplexar en el tiempo por sus 8 lneas la parte baja del
Bus de direcciones durante el acceso a la memoria externa, y el Bus de datos.

PUERTO 1(P1): Este puerto adems de ser de proposito general tambin recibe la parte
baja de direcciones, durante la programacin y verificacin de la memoria EPROM interna.

PUERTO 2 (P2): El puerto 2 emite la parte alta del Bus de direcciones en los accesos de
memoria externa cuando utilizan 16 bits de direccin (MOVX @DPTR, A). Durante el acceso
a la memoria de datos externa con direccionamiento de 8 bits (MOVX @R1,A), los pines del
Puerto 2 emiten el contenido del registro P2 del SFR (Registro de funciones especiales).

PUERTO 3 (P3): Este puerto puede usarse para propsito general cuando trabaja como
microcontrolador pero tiene otras funciones especiales cuando trabaja como
microprocesador o con acceso a memoria de datos externa, como se muestra en la sig.
Tabla.

Pin Descrip Funciones
10 P3.0 RXD (Entrada puerto Serie)
11 P3.1 TXD (Salida puerto serie)
12 P3.2 INTO (Interrupcin 0. Externa) Neg.
13 P3.3 INT1 (Interrupcin 1. Externa) Neg
14 P3.4 T0 (Entrada externa. Timer 0)
15 P3.5 T1 (Entrada externa. Timer 1)
16 P3.6 WR (Autorizacin escritura de datos) Neg.
17 P3.7 RD (Autorizacin escritura de datos) Neg.

TABLA 2.2

ALE/PROG: (Address Latch Enable) es un pulso que emite el MICROCONTROLADOR para
amarrar 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 el pin de entrada de los pulsos de programacin de la memoria EPROM lo utiliza
solamente el programador de micros.

PSEN: Es la seal de strobe para leer en 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/VPP: (External Access), cuando se mantiene un nivel alto, se ejecuta slo el programa
de la EPROM interna, a menos que el contador de programa exceda de FFF (4K) para el
8751. Si EA se mantiene un nivel bajo, se ejecuta el programa de la memoria externa
siempre, independientemente de la direccin del programa.

M.C. Eduardo Snchez Arellano.
- Pgina 13-
Es decir cuando EA=1 acta como MICROCONTROLADOR.
EA=0 acta como MICROPROCESADOR.

VPP: Es la tensin de programacin de la EPROM.

XTAL1 y XTAL2: Son la entrada y salida respectivamente, de un amplificador inversor que
puede ser configurado para su uso como un chip oscilador. Se puede utilizar indistintamente
un cristal de cuarzo o un resonador cermico.








RESET: Seal de inicializacin del sistema. Un reset interno al sistema se produce cuando
se pone el pin RST a un nivel alto durante un cierto tiempo, esto se logra de modo
automtico conectando el pin RST a Vcc mediante un capacitor de 10 F y a tierra medinte
una resistencia de 8.2 k .
Los microcontroladores CHMOS no requieren esta resistencia devido a que cuentan con un
pulldown interno en el pin de reset, el capacitor puede ser reemplazado por uno de 1 F.












M.C. Eduardo Snchez Arellano.
- Pgina 14-
CARACTERSTICAS DE LA EPROM INTERNA.

El 8751 cuenta con una memoria EPROM de 4K bytes que se programa a un voltaje
de VPP=21v, con unos pulsos de 50ms, por byte a travs de la lnea PROG. Considerando
que el 8751 tiene 4 Kbytes de memoria, tardaria 4 minutos en su programacin.
Con un algoritmo de programacin <<QUIK-PULSE>>, que permite programar estos
dispositivos con una tensin de VPP=12.75v y una serie de 25 pulsos de 100s por cada
byte programado por la lnea PROA, Este tiempo de programacin se reduciria a 13s.

SISTEMAS DE PROTECCION DE LA INFORMACIN PROGRAMADA EN LA EPROM
Para proteger el programa grabado en la EPROM contra la piratera se han establecido
dos niveles de proteccin.
Nivel 1 de proteccin: Cadena de encriptacin (ancryption array).
Dentro de la memoria EPROM hay 32 bytes que forman la cadena de encriptacin, que
inicialmente esta desprogramada. Cada vez que un byte es direccionado durante la
verificacin, se utilizan 5 lneas de direccin para seleccionar al 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 bit a UNO), al efectuar la operacin XNOR con el dato ste no resultara
modificado y podr ser ledo fcilmente.
Nivel 2 de proteccin: Bit cerrojo (lock bits).
Tambin en el micro hay dos bit cerrojo que pueden ser programados (P) o desprogramados
(D) para obtener los resultados que se indican en la siguiente tabla de caractersticas.
Bit 2 Bit 1 Caractersticas
D D Funcionamiento sin proteccin
D P No se permite acceder externamente a los cdigos de la memoria de programa
interno.
Adems no se permite ser programada.
P P Externamente no puede accederse a la informacin de la memoria de
programa interno.
No permite ser programada.
No permite la verificacin del programa.

Al borrar la EPROM tambin se borra la cadena de encriptacn y los bits cerrojo, lo
que permite al usuario una nueva reprogramacin.




M.C. Eduardo Snchez Arellano.
- Pgina 15-
Borrado de la informacin programada 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 2000 y 4000 Angstroms. La exposicin a la luz del sol
y a la luz artificial de un tubo fluorescente, que tienen longitud de onda dentro de este
rango, durante un tiempo prolongado puede causar el borrado accidental de la memoria
EPROM. Se recomienda que se coloque una etiqueta opaca en la ventana, que sirva al
mismo tiempo para proteger de la luz y sirva para identificar el programa, la versin y la
fecha de grabacin.
Para iniciar el borrado de la EPROM, se recomienda su exposicin a la luz de una
lampara ultravioleta (2,537 Angstoms) de 12,000 W/cm
2
, durante 10 a 15 minutos, a una
distancia de la ventana de la EPROM de 2 a 3 centmetros.
Los nuevos Microcontroladores con tecnologuia flash se borran en el mismo
programador sin necesidad de exponerlos a la luz ultravioleta.





















M.C. Eduardo Snchez Arellano.
- Pgina 16-
Capitulo 3

ORGANIZACIN DE LA MEMORIA EN EL Microcontrolador 8751.

MEMORIA DE PROGRAMAS Y MEMORIA DE DATOS.
Los MICROCONTROLADORES 8751 tienen separados los espacios de direcciones para
memoria de programa y memoria de datos.

La memoria de programa slo puede ser leda y tiene como mximo 64K byte
externos. (Internamente el 8751 es de 4K byte). La seal de autorizacin de lectura en la
memoria de programa externa es PSEN. El pin EA del MICROCONTROLADOR puesto a Vcc
(+5V) indica que el puntero de programa busca direcciones desde la posicin de memoria
0000H hasta la 0FFFH de la memoria interna y de la 1000H a la FFFFH, en la memoria
externa. Si el pin EA es puesto a Vss(0v), la bsqueda de direcciones del programa se dirige
a la memoria externa en todo momento.

MEMORIA DE PROGRAMA
En la parte baja de la memoria de programa se encuentran ciertas posiciones de
memoria especiales asignadas por el fabricante para el tratamiento de las rutinas de
interrupciones.
M.C. Eduardo Snchez Arellano.
- Pgina 17-

FUENTE DE INTERRUPCION DIRECCIONES DEL VECTOR
0FFFH




Flag que se activan RI Y TI 0023H...PUERTO SERIE
TF1 001BH...INT TIMER 1
IE1 0013H... INT EXTERIOR 1
TF0 000BH...INT TIMER 0
IE0 0003H...INT EXTERIOR 0
RESET 0000H... RESET
Tabla 3.1
Una interrupcin puede ser provocada de manera externa o de manera interna, es
decir puede ser producida por un perifrico externo o por software. La interrupcin con ms
prioridad es RESET la cual no puede ser enmascarada.
Cuando un RESET ocurre el programa comienza a partir de la direccin 0000H, del
programa.
Cuando una interrupcin es producida, el Contador de Programa (PC) almacena
su contenido temporalmente dentro del SP (apuntador de apilamiento) y se carga con la
direccin de la localidad donde se encuentra la rutina de servicio de la interrupcin
correspondiente. Una vez posicionado en esa localidad deber de comenzar la ejecucin de
la rutina de servicio, hasta que encuentre la instruccin RETI, que le permitir al PC
recuperar nuevamente su valor original almacenado en el SP, y continuar con el programa
anterior a la interrupcin.
Por ejemplo a la interrupcin 0, se le asigna la localidad 0003H, si la interrupcin no
se utiliza, esta localidad puede utilizarse para propsitos generales del programa, si la
interrupcin ha sido permitida, (estableciendo el bit correspondiente dentro del
registro de control IE), en el momento que exista una activacin de la interrupcin (estado
bajo en la lnea INT0) el PC se cargar con 0003 y saltar a esa localidad para comenzar a
ejecutar la rutina de servicio.
Como se puede observar en la Tabla 1 Anterior el intervalo fsico entre dos
interrupciones es de 8 bytes, espacio capaz de albergar una pequea rutina, pero si ste no
fuera suficiente se desviara el contador del programa (PC) mediante una instruccin de
salto (JMP) a una zona amplia de la memoria de programa capaz de contener dicha rutina.
Como se ha dicho la memoria de programa puede ser interna (en el propio micro)
externa (en otro chip). La seleccin se realiza por hardware, con la seal EA (External
Access). Conectado a Vcc Vss respectivamente.
M.C. Eduardo Snchez Arellano.
- Pgina 18-
El hardware de configuracin del Microcontrolador como Microprocesador utilizando
memoria de programa externa se muestra en la Fig. 2
Se puede observar en al Figura 2 que las 16 lneas de direccin corresponden al
Puerto 0 y al Puerto 2, que estn dedicados como bus de direcciones; aun ms el Puerto 0
sirve como bus de direcciones y bus de datos multiplexado en el tiempo. Esta operacin
caracterstica de la familia de Microprocesadores Intel, se realiza de la forma siguiente.













Figura 3.2
El Puerto P0 emite el <<byte bajo>> del contador del programa PC (PCL). Una vez
estabilizada la seal sobre P0, la seal ALE (Address Latch Enable) introduce esta
direccin dentro del circuito integrado latch 74LS373, que pasa a apuntar la direccin de
la memoria externa de programas. Al mismo tiempo que el Microcontrolador emite el
PCL por P0, la parte alta del contador del programa (PCH) se emite por P2. Entonces
PSEN autoriza la lectura al Microcontrolador del cdigo de instruccin a travs del Puerto
P0. En las siguiente Fig. se muestra el funcionamiento y diagramas de tiempos de esta
operacin.







M.C. Eduardo Snchez Arellano.
- Pgina 19-
















Figura 3.3
CICLO MAQUINA:
Un ciclo maquina, para esta familia de Microcontroladores, consiste en una secuencia
de 6 <<estados>>, nombrados S1 a S6. Cada estado esta formado dos periodos de la seal
de reloj que se denominan <<fases>> (fase 1 y fase 2). Teniendo en cuenta que cada ciclo
maquina tiene 12 periodos (6 estados por 2 fases), si el oscilador genera una seal de reloj
de una frecuencia de 12 Mhz, la duracin del ciclo maquina ser de 1 segundo.








La secuencia 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.
M.C. Eduardo Snchez Arellano.
- Pgina 20-
La figura 2.3 muestra el diagrama de tiempos de las seales implicadas en la secuencia de
bsqueda, cuando la memoria de programa es externa. La seal PSEN se activa dos veces
por ciclo de maquina, para autorizar la lectura en la memoria de programa. Si se produce
un acceso a la memoria de datos, como se muestra en la figura 3.4, no se emiten los dos
impulsos PSEN, puesto que el acceso a la memoria de datos no los necesita ni utiliza.
Observe como el acceso a la memoria de datos toma dos ciclos ms de BUS que la
memoria de programas. Las figuras 3.3 y 3.4 muestran los diagramas de tiempos relativos
a ambas secuencias de acceso, destacando la emisin de direcciones por P0 y P2, y las
seales ALE y PSEN. La seal ALE se utiliza para latchear el <<byte bajo>> de direcciones
dentro del latch.
Cuando el CPU esta 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 de maquina, pudiendo ser utilizada como seal de reloj externo.
No obstante, como se puede ver en la figura 3.4, cuando se accesa a un operando utilizando
la instruccin MOVX, la seal ALE desaparece.















Figura 3.4
M.C. Eduardo Snchez Arellano.
- Pgina 21-
En la figura anterior se pudo observar cmo se realiza un acceso a la memoria
externa de programas para tomar una instruccin y en el segundo ciclo de accede a la
memoria de datos externa para tomar datos.
MEMORIA DE DATOS.
El 8751 puede direccionar hasta 64 kbytes de memoria de datos externa. En la sig.
Figura se pude ver el mapa de memoria de datos. La memoria interna se encuentra dividida
en dos bloques, los 128 bytes bajos y el espacio ocupado, en parte, por los Registros de
Funciones Especiales (SFR).
FFFF


FF


80
7F


00

0000

FIG. 3.5
En la memoria de datos interna se puede acceder a un total de 256 bytes para el
8751 incluido el rea de los registros especiales (SFR),

REA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO.
Los 128 bytes a los que puede acceder desde ambos direccionamientos, directo e
indirecto, pueden ser divididos en tres segmentos.

Banco de registros (banco 0, 1, 2 y 3). Registros R0 a R7 por banco.
Los registros se localizan desde la direccin 00H a 1FH (32 bytes). Despus de un Reset,
el banco operativo por default es el banco 0. La seleccin de otro banco de registros debe
hacerse por software escribiendo en el registro de estado PSW.
Direccin Inicial Direccin Final
00H Banco 0 07H
08H Banco 1 0FH
10H Banco 2 17H
18H Banco 3 1FH

SFR
Solo Directo.

Directo
Indirecto





64 KBytes
Memoria Externa






RD WR
M.C. Eduardo Snchez Arellano.
- Pgina 22-

El reset inicializa el Stack Pointer (SP) en la posmem 07H y se incrementa
inmediatamente a la posmem 08H, que es el primer registro R0 del segundo 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 (del segmento 20H a 2FH). Cada uno de los
128 bits de este segmento se puede direccionar directamente (00H a 7FH).
Los bits se pueden direccionar por los bytes que contiene (20H a 2FH). Esto es, los bits 0 al
7 pueden ser referidos como los bits 20.0 a 20.7, etc.
20H 27H
28H 2FH

SUBREA SCRATCH PAD:
La memoria scratch pad se entiende como la memoria comn es decir un block de
notas de rpido acceso, pero de escasa capacidad. Ocupa las posiciones de memoria 30H a
7FH 80 Bytes. Es la memoria de trabajo RAM del usuario.
30H 3FH
40H 4FH
50H 5FH
60H 6FH
70H 7FH


REA DE REGISTROS O FUNCIONES ESPECIALES.
La sig. Tabla muestra los registros especiales que utiliza el 8751, as como sus direcciones.
No. Smbolo Nombre Direccin
1. *ACC Acumulador Acumulador. 0E0H
2. *B Registro B Registro B. 0F0H
3. *PSW Program Status Word Palabra de Estado del Programa. 0D0H
4. SP Stack Pointer Puntero de la memoria de la PILA. 81H
5. DPTR Data Pointer 2 Bytes Apuntador de datos. -------
6. DPL Low Byte del DPTR Byte bajo. 82H
7. DPH High Byte del DPTR Byte alto. 83H
8. *P0 Port 0 Puerto 0 80H
9. *P1 Port 1 Puerto 1 90H
10. *P2 Port 2 Puerto 2 0A0H
11. *P3 Port 3 Puerto 3 0B0H
12. *IP Interrupt Priority Control Control de prioridad de interrupciones. 0B8H
13. *IE Interrupt Enable Control Control de autorizacin de Interrupciones. 0A8H
14. TMOD Timer/Counter Mode Control Control Modo Temporizador/Contador. 89H
15. *TCON Timer/Counter Control Control Temporizador/Contador. 8CH
16. TH0 Timer/Counter 0 High Byte Byte alto temporizador/Contador 0 88H
17. TL0 Timer/Counter 0 Low Byte Byte bajo temporizador/Contador. 0 8AH
18. TH1 Timer/Counter 1 High Byte Byte alto temporizador/Contador 1 8DH
19. TL1 Timer/Counter 1 Low Byte Byte bajo temporizador/Contador. 1 8BH
20. *SCON Serial Control Control de comunicacin serie. 98H
21. SBUF Serial Data Buffer Buffer de datos de comunicacin serie. 99H
22. PCON Power Contol Control de consumo de potencia. 87H
*= Registros Direccionable bit a bit. Tabla 3.2

M.C. Eduardo Snchez Arellano.
- Pgina 23-
ACC: Acumulador: Es un registro de propsito general y por su frecuencia de intervencin,
el ms importante.

B: Registro B es usado durante operaciones de multiplicacin y divisin, para otras
instrucciones puede ser tratado como un registro comn.

PSW: Program Status Word: Contiene informacin del estado del CPU en cada ciclo de
instruccin.
b7 b6 b5 b4 b3 b2 b1 b0
CY AC F0 RS1 RS0 OV - P

BIT NOMBRE Y COMENTARIO
b0 P: bandera de paridad del Acumulador (ACC).
- Si P=1 el nmero de unos en el ACC es impar.
- Si P=0 el nmero de unos en el ACC es par.
b1 Bandera disponible por el usuario.
b2 OV: Bandera de Overflow.
b3-b4 RS
0
-RS
1
: Seleccin del banco de registros.
0 - 0 Banco 0 (00-07H)
1 - 0 Banco 1 (08-0FH)
0 - 1 Banco 2 (10-17H)
1 - 1 Banco 3 (18-1FH)
b5 F0: Bandera 0. De propsito general. Definida por el usuario.
b6 AC: Bandera de acarreo Auxiliar. Para operaciones en BCD.
b7 C: Bandera de Acarreo.

SP: Stack Pointer: es un registro de 8 bits, este es incrementado antes de que el dato sea
almacenado, con un Push o Call. El Stack puede recidir en cualquier lugar de la RAM. El
Stack Pointer es inicializado a 07H despus de un reset, esto hace que el Stack empiece en
la localidad 08H.

DPL y DPH: Data Pointer: Este registro puede ser manipulado como un registro de 16 bits o
como dos registros de 8 bits.

P0,P1,P2,P3: Son registros Latches de los puertos 0,1,2,3 respectivamente.

Los otros registros se esxplicaran postriormente.

M.C. Eduardo Snchez Arellano.
- Pgina 24-
Capitulo 4
Programacin de los Microcontroladores Intel MCS-51
INTRODUCCION:

Todos los modelos de la familia MCS-51 ejecutan el mismo set de instrucciones.
Estas instrucciones estn optimizadas para el control de aplicaciones de 8 bits.
LENGUAJE ENSAMBLADOR:
Un programa en lenguaje ensamblador es un conjunto de instrucciones que se
pueden convertir en un programa ejecutable en lenguaje mquina. Estas instrucciones se
dividen en tres categoras:
1) Pseudoinstrucciones (Directivos), se emplean para proporcionar informacin con el
fin de convertir el programa de ensamblador a una versin en lenguaje mquina.
2) Descriptores de Datos, utilizados para definir valores constantes y reservar posiciones
de memoria de datos necesarias en el programa.
3) Instrucciones Ejecutables, equivalentes a las instrucciones en lenguaje mquina.
INSTRUCCIONES EJECUTABLES:
Cada instruccin ejecutable en lenguaje ensamblador es una representacin
simblica de una instruccin en lenguaje mquina. Por lo tanto, la instruccin en lenguaje
ensamblador debe definir la operacin aritmtica - lgica; el modo de direccionamiento y el
operando, direccin o desplazamiento de la direccin cuando sea necesario. Adems las
instrucciones ejecutables en lenguaje ensamblador suelen contener una sentencia o
comentario que indica la razn fundamental de la instruccin. Por ltimo, es frecuente
asignar una etiqueta, o nombre a una funcin, para facilitar su referencia. Toda esta
informacin se organiza en cuatro campos:

Campo Etiqueta. : Campo Operacin Campo Operando ; Campo Comentario

Las instrucciones en los microprocesadores son actualmente una secuencia de 0 y 1s
que representan la operacin que se ejecutara. La notacin hexadecimal es usada para
abreviar la representacin de la instruccin. Una forma fcil de escribir y entender un
programa es escribirlo en Lenguaje ensamblador. En lenguaje ensamblador, la combinacin
de bits es representada por un nombre o un mnemnico al cual le corresponde la accin de
M.C. Eduardo Snchez Arellano.
- Pgina 25-
la instruccin. Por ejemplo la instruccin del 8051 que suma el contenido del registro R7
con el Acumulador A es representada por:
00101111B 2FH. En ensamblador ADD A, R7
Esta representacin es llamada Lenguaje Maquina debido a que esta representacin
es la que utiliza el Microprocesador. Esta instruccin tiene dos campos distintos, estos
campos son la operacin y el registro fuente, como se muestra en las tablas de
instrucciones.

A continuacin se estudiarn los modos de direccionamiento y el set de instrucciones
agrupado por especialidades de la siguiente manera:
Instrucciones aritmticas.
Instrucciones lgicas.
Instrucciones para la transferencia de datos en:
a) RAM interna.
b) RAM externa.
Instrucciones para el tratamiento de tablas.
Instrucciones Booleanas.
Instrucciones de salto.

MODOS DE DIRECCIONAMIENTO.
Direccionamiento Directo.
En este direccionamiento el operando se especifica en la instruccin por un campo de
direccin de 8 bits. Slo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se
pueden direccionar de esta forma.

Ejemplo:
ADD A, 4CH es decir, suma el contenido del acumulador con el contenido de
la posicin de memoria (4CH):
A<-- (A)+(4C)
Nota: Un registro o nmero entre parntesis se refiere al contenido. As
(A) es el contenido del acumulador.
(4C) es el contenido de la posicin de memoria 4C.

ADD A, 7FH ;El acumulador es sumado al dato que se encuentra en la direccin 7FH de la
Ram interna y el resultado ser almacenado en el acumulador.
M.C. Eduardo Snchez Arellano.
- Pgina 26-
MOV A, 2EH ; El Acumulador es cargado con el dato que se encuentra en la direccin 2EH
de la memoria RAM interna.
MOV 3DH, 4EH ; El contenido de la direccin 3DH es cargado con el dato que se
encuentra en la direccin 4EH.

Direccionamiento Indirecto:
La instruccin especfica un registro que contiene la direccin del operando. Tanto la
memoria RAM interna, como la externa se pueden direccionar indirectamente.
Los registros para direccionar sobre el mapa de 8 bits son el R0 y R1 del banco de
registros seleccionado, o el Stack Pointer. El registro para direccionar sobre 16 bits slo
puede ser el DPTR.
Ejemplo:
ADD A, @R0 ; As, si (R0)=4CH la operacin ser:
A<--(A)+(4C)

(@) es el indicador del direccionamiento indirecto.

MOV A, @R0 El Acumulador es cargado con el dato que se encuentra en la direccin
apuntada por RO.

MOVX A, @DPTR; El Acumulador es cargado, con el dato que se encuentra en la direccin
apuntada por el DPTR.

MOVX @DPTR, A El contenido del acumulador es guardado en la direccin
apuntada por el DPTR.

Direccionamiento por Registro
Los Microcontroladores 8751, contienen cuatro bancos seleccionados por los bit 3 y 4
del PSW, y cada banco de registros tiene ocho registros del R0 al R7. El propio cdigo de
operacin de la instruccin especifica con qu registro se opera; es decir, cuando la
instruccin es ejecutada se accede a uno de los 8 registros del banco seleccionado y en la
mayora de los casos son ms rpidas.


Ejemplo:

MOV Rn,A
M.C. Eduardo Snchez Arellano.
- Pgina 27-

Cdigo: 1 1 1 1 1 r r r

Operacin: (Rn) (A)
Dependiendo del registro implicado el cdigo de instruccin tomar distintos valores.
As
MOV Ro,A 1111 1000B = F8H
MOV R1,A 1111 1001B = F9H
MOV R2,A 1111 1010B = FAH
MOV R7,A 1111 1111B = FFH

Otro ejemplo:
MOV Rn, #data
Cdigo: 0 1 1 1 1 r r r

Operacin: (Rn) #dato.

Direccionamiento Implcito.
En estas instrucciones se especifica, implcitamente, el registro sobre el que van a
operar, como el acumulador, el puntero de datos, etc. No necesitan especificar el operando
por que est implcito en el cdigo de operacin.
Ejemplo:
INC A; Incrementa el contenido del acumulador:
A (A) + 1
INC DPTR; Incrementa puntero de datos;
DPTR (DPTR) + 1
DEC R0; Decrementa el registro R0.

Direccionamiento Inmediato
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, #0FFH
o en binario:
M.C. Eduardo Snchez Arellano.
- Pgina 28-
MOV A, #11111111B
MOV A, #64H ;El acumulador es cargado con el dato 64H inmediatamente.
ADD A, #120 ;El acumulador es sumado al nmero decimal 120 y el resultado
;se almacena en el acumulador.
MOV DPTR, #1245H ;El DPTR es cargado con el dato 1245H en forma inmediata.

Direccionamiento Indexado
Este direccionamiento slo es posible en la memoria de programas y slo permite la
lectura. Es utilizado para la lectura de tablas. Un registro base de 16 bits (el DPTR o el
Contador del 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.
MOVC A, @A+DPTR ;Mueve una constante que se encuentra en la, memoria del programa.
El Acumulador es, cargado con el dato que se encuentra apuntado por la direccin formada
por la suma del Acumulador A y el Apuntador de Datos.
MOVC A,@A+PC; El Acumulador es cargado con dato que se encuentra, en la direccin
formada por la suma del mismo Acumulador A y el Contador del Programa (PC).

4.3 CICLO DE INSTRUCCIN
La ejecucin de un ciclo de instruccin comienza en el estado 1 del ciclo mquina,
cuando el cdigo de operacin es almacenado en el Registro de Instruccin. (Para
comprender este apartado tener a la vista la figura 3.1 y la tabla 4.5 Set de
instrumentaciones)
Como norma general, una instruccin requiere de uno o ms ciclos mquinas, en funcin
de:
a) El cdigo de operacin
Por ejemplo, la instruccin INC A (figura 3.1 A) tiene 1 de 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.1C) 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.1B). 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
M.C. Eduardo Snchez Arellano.
- Pgina 29-
A, # data y en la figura 3.1D MOVX A,@Ri. La primera instruccin tiene 2 bytes y la
segunda slo 1, en cambio la primera requiere 1 ciclo mquina y la segunda 2.
Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del
nmero de bytes y ciclo de instruccin se ha editado la tabla 4.5 con el set completo de
instrucciones.
Cabe destacar tambin en la figura 3.1 que en cada ciclo mquina se producen 2
accesos a la memoria. El primero, si es comienzo de ciclo de instruccin, siempre leer el
cdigo de operacin, el segundo que normalmente se descarta. Se utiliza para leer el
segundo byte, operando de la instruccin, como ocurre en la figura 3.1B.

























M.C. Eduardo Snchez Arellano.
- Pgina 30-
4.4 TIPOS DE INSTRUCCIONES
El set de instrucciones de Intel MCS-51 se puede dividir segn las especialidades:
Instrucciones aritmticas,
Instrucciones lgicas.
Instrucciones de transferencia de datos.
Instrucciones booleanas.
Instrucciones de salto.
Las instrucciones aritmticas, lgicas, de transferencia y de salto son comunes en la
mayora de microprocesadores. Los microcontroladores tiene un rea especial de aplicacin,
que es el rea del control de procesos; en este campo las operaciones estn orientadas,
muy a menudo, a bits. 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. 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, aparece todo el set de instrucciones, 111 en total, de la familia 51; en
cambio, en las tablas simplificadas que utilizaremos primero solo curntan con 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 4.1):
TABLA 4.1
En la tabla
simplificada
Segn el modo de
direccionamiento

Significado
<byte> direct Direccionamiento directo. Se refiere a una posmem.
<byte> @Ri Direccionamiento indirecto a travs del registro R0 y R1.
<byte> Rr Direccionamiento por registro.
<byte> # data Direccionamiento inmediato. Constante de 8 o 16 bits

En las tablas simplificadas tambin se indica el posible flag (C= Carry, OV=
overflow, AC= Auxiliar Carry) afectado por la instruccin segn el siguiente cdigo:
No es afectado....................................
S es afectado...................................... X
Afectado ponindolo a ...................... 0
Afectado ponindolo a........................ 1
M.C. Eduardo Snchez Arellano.
- Pgina 31-
En algunas tablas no son afectados los flags, 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 4.2. Se muestra el men de las instrucciones aritmticas. Se indican en la
tabla los modos de direccionamiento que permite la instruccin y los flags afectados.
Los tiempos de ejecucin que se indican en la tabla estn evaluados sobre una
frecuencia de reloj de 12 MHz.
Nemnico Operacin Modos de direccionamiento Tiempo de
Ejecucin
Flag afectados
Dir Ind Reg Imm s C OV AC
ADD A,<byte> A=A+<byte> X X X X 1 X X X
ADDC A,<byte> A=A+<byte>+C X X X X 1 X X X
SUBB A,<byte> A=A-<byte>-C X X X X 1 X X X
INC A A=A+1 Accumulator only 1
INC <byte> <byte>=<byte>+1 X X X 1
INC DPTR DPTR=DPTR+1 Data pointer only 2
DEC A A=A-1 Accumulator only 1
DEC <byte> <byte> = <byte> -1 X X X 1
MUL AB B:A = B x A ACC and B only 4 0 X
DIV AB A = int [A/B]
B = Mod [A/B]
ACC and B only 4 0 X
DA A Decimal Adjust Accumulator only 1 X
Tabla 4.2
X =Si =No

Al leer dicha tabla se observa que:
Se puede incrementar o decrementar un byte en la memoria de datos interna sin la
intervencin 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 contenido en B,
apareciendo el resultado, cociente, en el acumulador y el resto en el registro B.





M.C. Eduardo Snchez Arellano.
- Pgina 32-
Ejemplo:
A = 5FH
DIV AB B = 0AH
1001 A
1010 0101 1111
0101 B

La instruccin DA A justa 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 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:
Si [ [(A
3-0
)> 9] * OR * [(AC) = 1] ]
Entonces (A
3-0
) (A
3-0
)

+ 6
Y si [[(A
7-4
) > 9] * OR.* [(C)= 1]]
Entonces (A
7-4
) (A
7-4
) + 6

INSTRUCCIONES LOGICAS
La tabla 4.3 muestra la lista de instrucciones lgicas y los modelos de
direccionamiento que permiten as como los flags afectados.
La duracin de ejecucin de 1 2 microsegundos considerando un cristal de 12 MHz.
Las primeras instrucciones corresponden a las operaciones AND, OR, EXOR y NOT.
Ejemplo:
ANL <byte>, # 3 F
Si <byte> = (3A) = 0011 1010
# 3F = 0000 1111
0000 1010 = 0AH
(<byte> se refiere, en este caso, a una posicin de memoria.)
Nemnico Operacin Modos de direccionamiento
Tiempo de
Flag afectados
Dir Ind Reg Imm
Ejecucin
s
C OV AC
ANL A,<byte> A=A.AND.<byte> X X X X 1
ANL <byte>,A <byte>=<byte>.A X 1
ANL <byte>,#data <byte>=<byte>.And. X 2
ORL <byte> A=A.OR. <byte> X X X X 1
ORL <byte>, A <byte>=<byte>.OR.A X 1
M.C. Eduardo Snchez Arellano.
- Pgina 33-
ORL <byte>. # data <byte>=<byte>.OR.# data X 2
XRL A,<byte> A =A.XOR.<byte> X X X X 1
XRL <byte>, A <byte>=<byte> .XOR. A X 1
XRL <byte> , #data <byte>=<byte> .XOR. #data X 2
CLR A A=00H Accumulator only 1
CPL A A=.NOT.A Accumulator only 1
RL A Rotate ACC Left 1 bit Accumulator only 1
RLC A Rotate left through Carry Accumulator only 1 X
RR A Rotate ACC Right 1 bit Accumulator only 1
RRC A Rotate Right through Carry Accumulator only 1 X
SWAP A Swap Nibbles in A Accumulator only 1
Tabla 4.3
X =Si =No

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

C b7 ACC b0

Ejemplo: Rotacin a la izquierda (Left)
(A) = 0C5H=1100 0101 B (antes de ejecutarla)
RL A
(A) = 8BH= 1000 1011B (despus)

Las instrucciones de Rotacin RLC A y RRC A desplazan el contenido del acumulador
implicando al bit de acarreo.

C

B7 ACC B0

La instruccin SWAP A intercambia los nibbles en el acumulador. Generalmente se utiliza
en las manipulaciones de nmeros en BCD.
Ejemplo:
(A) = 3H = 0000 0011B (antes de la operacin)
SWAP A
A 0011 0000 (despus)



M.C. Eduardo Snchez Arellano.
- Pgina 34-
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.

4.7.1. Movimiento de datos sobre la RAM interna
En la tabla 4.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de
los espacios de memoria RAM interna, considerando los distintos direccionamiento para
cada una de las instrucciones
Tabla 4.4
Modos de direc.
Tiempo de
Nemnico Operacin Dir Ind Reg Imm
ejecucin (s)
MOV A.<src> A=<src> X X X X 1
MOV <dest>, A <dest> = A X X X 1
MOV <dest>, <src> <dest> = <src> X X X X 2
MOV DPTR, #data 16 DPTR= 16-bit immediate constant. X 2
PUSH <src> INC SP : MOV @SP, <src> X 2
POP <dest> MOV <dest>, @SP :DEC SP X 2
XCH A,<byte> ACC and <byte> exchange data X X X 1
XCHD A, @Ri ACC and @ Ri exachange low nibbles X 1

No son afectados los flags. X = S =No
La instruccin MOV <dest>, <src> permite transferir datos entre alguna de las
dos RAM interna o el espacio de localizacin del SRF (referencia Figura 2.8) Este
tipo de instruccin permite la transferencia sin el concurso del acumulador.
<dest> = <destino>
<src> = <fuente>

Ejemplo:
Antes de ejecutar la instruccin:
(3A)= 35H : (3D) = 78H
MOV 3AH, 3DH Despus de ejecutarla:
(3A)= 78H : (3D) = 78H
M.C. Eduardo Snchez Arellano.
- Pgina 35-
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 <dest> acta
decrementando el SP y reponiendo el dato en su registro. La pila est situada dentro de
la RAM interna, por defecto en el banco de registros 1 (vase figura 2.11), pero puede
posicionarse en el rea 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> POP <dest>
(SP) (SP) +1 <dest> ((SP))
((SP)) <src> (SP) (SP) 1

La instruccin XCH A,<bite>, intercambia los datos del acumulador y del byte
direccionando. La instruccin XCHD A,@Ri es similar a la anterior, pero slo implica en el
intercambio el nibble bajo; es una instruccin especializada en la manipulacin de datos
en el cdigo BCD.
Ejemplos:
Antes de ejecutar la instruccin:
(A)= 37H y (2D) = 23H
XCH A, 2DH Despus de ejecutarla:
(A) = 23H y (2D) = 37H

Antes de ejecutar la instruccin:
XCHD A, @R0 (R0) = 2DH = 37H y (A) = 23H
Despus de ejecutarla:
(A) = 27H y (2D) = 33H

4.7.2 transferencia de datos sobre la RAM externa
La tabla 4.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.
M.C. Eduardo Snchez Arellano.
- Pgina 36-
Direccin con Nemnico Operacin Tiempo de ejecucin (s)
8 bits MOVX A, @Ri Read external RAM @ Ri 2
8 bits MOVX @Ri Write external RAM @Ri 2
16 bits MOVX A, @ DPTR Read external RAM @DPTR 2
16 bits MOVX @DPTR,A Write external RAM @DPTR 2
Tabla 3.5
No son afectadas las banderas.
Conviene observar que para este tipo de acceso siempre interviene el acumulador
como registro fuente o destino.
El usuario debe escoger entre el tipo de instruccin MOVX A, @Ri o MOVX @Ri,A
(siendo Ri, bien el registro R0 o R1 del banco de registros seleccionado), direccionando con
8 bits o bien utilizando 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 capitulo2. 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 microcontoladores 8052/8051 sea la correcta.
Las lneas de control de lectura y escritura, RD y WR (pines 16 Y 17), slo son
utilizadas cuando se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM
externa, es obvio que se ganarn una lneas extras de E/S (figura 4.7)
Ejemplo: Estudiar la secuencia de instrucciones.
MOVX A, @R1
MOVX @R0,A
Antes : (R1) = F3H
F3H 3AH MOVX A,@R1 ejecucin: A (F3H)
Despus: (A) = 3AH
85H ?
Antes : (A) = 3AH y (R0) = 85H
MOVX @R0,A ejecucin: (R0) (A)
R1 F3H Despus: (85h) = 3AH
R0 85H

M.C. Eduardo Snchez Arellano.
- Pgina 37-

Qu sucedera si se tuviera que implementar estas instrucciones en al zona de
memoria por encima de la direccin 2000H? Es decir:

Sustituida
85H ------------------- 2085H
F3H------------------- 20F3H
Se llegara a la conclusin de que no se podra procesar estas instrucciones,
contando que los registros R0 y R1 no pueden direccionar por encima de la posicin de
memoria FFH. Pero aqu es donde entran en juego las instrucciones MOVX con el DPTR
como operando. La sustitucin, en el caso de tener que operar en el espacio de memoria
comprendiendo entre 0000H y FFFFH. Sera:
Sustituida
MOVX A, @Ri -------------------- MOVX A, @DPTR
MOVX @ Ri, A -------------------- MOVX @DPTR,A
Recurdese que en la tabla 3.4 hay una instruccin que es:
MOV DPTR, # data 16
Con la que se podra acceder a todo el mapa de memoria.

4.7.3 Memoria de programas para el tratamiento de tablas.
La tabla 3.6 muestra las dos instrucciones disponibles para la lectura de tablas en la
memoria de programas (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 4.6
nemnico Operacin Tiempo de ejecucin (s)
MOVC A, @ A + DPTR Read pgm memory at (A + DPTR) 2
MOVC A, @ A + PC Read pgm memory at (A + PC) 2

No son afectados los flags.
M.C. Eduardo Snchez Arellano.
- Pgina 38-
La primera instruccin de la tabla permite la lectura en tablas con accesos no
superiores a 256. El acceso deseado es cargado en el acumulador, y el data pointer (DPTR)
Establece el puntero de comienzo de la tabla. La lectura es cargada dentro del registro
acumulador.
MOVC A, @A+DPTR A ((A) + (DPTR))
La segunda instruccin es similar a la primera, salvo que el program counter (PC) el que
acta como indicador de la direccin base de la tabla.
PC (PC) + 1
MOVC A, @A+PCM
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
90H MOV
91H #01H
92H CALL
93H Dire, rutina

A0H INC A
A1H MOV A. @+PC
A2H RET
A3H 20H
A4H 21H
A5H 22H
A6H 23H

MOV A, #01H
CALL TABLA
TABLA: INC A
MOVC A. @A+PC
RET
DATO0
DATO1
DATO2
DATO3
M.C. Eduardo Snchez Arellano.
- Pgina 39-
Se pretende acceder inicialmente al DATO1, por esta razn se carga al acumulador
con 01H, se salta a la rutina de tratamiento de la tabla.
Ya en al rutina, se incrementa el acumulador, con lo que su valor ser:
(A) ------ (A) +1
02H ------01H + 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 + A4H, luego:
A(A4H)
(A) = 21H

INSTRUCCIONES BOOLEANAS

La familia de microcontroladores 51 y concretamente los microcontroladores
8052/8051 tienen un procesador booleano incluido en el chip.
Estos microcontroladores poseen dos reas que permiten el direccionamiento <bit a bit>:
Una corresponde al segmento de RAM interna de direccin comprendida entre la
posmem 20 a 2FH, en total 128 bits (figura 2.10), y la otra corresponde a los registros
marcados con asterisco en el area de SFR.
El conjunto de instrucciones que permiten este tipo de procesos, tan interesante para
las aplicaciones industriales, se encuentran relacionado en la siguiente tabla
Nemnico Operacin Tiempo de ejecucin (us) C OV AC
ANL C. Bit C = C . AND. Bit 2 X
ANL C./bit C= C. AND. NOT . BIT 2 X
ORL C.bit C=C .OR.bit 2 X
ORL C./bit C=C .OR..NOT.bit 2 X
MOV C.bit C = bit 1 X
MOV bit.C bit = C 2 X
CLR C C = 0 1 0
CLR bit bit = 0 1
SETB C C = 1 1 1
SETB bit Bit = 1 1
CPL C C = .NOT.C 1 X
CPL bit Bit = .NOT. bit 1
JC rel Jump jf C = 1 2
JNC rel Jump if C =0 2
JB bit. rel Jump if bit = 1 2
M.C. Eduardo Snchez Arellano.
- Pgina 40-
JNB bit. rel Jump if bit = 0 2
JBC bit. rel Jump if bit =1; CLR BIT 2
Tabla 4.8
X =SI: = No

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 al flag Carry (C).
Se podra decir que cumple todas las caractersticas que tiene el acumulador en el
procesamiento de palabras. El flag Carry se direcciona directamente dentro de la palabra de
estado PSW, en la posicin <<bit7>>.
b
7
b
5
b
0

C F0
Todos los bits del PSW son direccionables bit a bit, como todos los registros
sealados del SRF. Es importante resear la presencia del flag F0 (b5 del PSW) de propsito
general, disponible como flag del usuario. Por qu no utilizarlo como indicador, en las
operaciones aritmticas de signo (flag 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 <<1>>, como
son las instrucciones JC,JB y JBC; tambin estn las que producen el salto cuando el bit
direccionado est puesto <<0>>, como son las instrucciones JNC, y JNB. JBC Produce el
salto si el bit direccionado es <<1>> y pone a <<0>>este bit, siendo la nica instruccin
que detecta y pone a <<0>> el bit direccionado.
Secuencias de operaciones:
JC rel JNC rel
(PC) (PC) +2 (PC) (PC) + 2
Si (C) = 1 Si (C) = 0
Entonces entonces
(PC) (PC) + rel (PC) (PC) + rel

JB bit, rel JNB bit, rel JBC bit, rel
--------------------- ---------------------- ----------------------
(PC) (PC) + 3 (PC) (PC) + 3; (PC) (PC) + 3;
Si (bit) = 1 Si (bit) = 0 Si (bit) = 1
Entonces Entonces Entonces
(PC) (PC) + rel (PC) (PC) + rel (bit) 0
(PC) (PC) + rel

M.C. Eduardo Snchez Arellano.
- Pgina 41-
Ejemplos:
A) poner el Carry a set (1) si el bit0 del puerto 1 es <<1>> (P1,0 = 1), el bit7 del
acumulador es <<1>> (A.7=1) y el flag OV = 0.
Programa:
MOV C, P1. 0 ; Carga el Carry (c) con el bit0 del puerto 1.
; C (P1.0)
ANL C, A . 7 ; Operacin AND con el Carry (C ) y el bit7
; del acumulador, es decir: C ( C ). AND .(A.7)
ANL C,/OV ; Operacin AND con el Carry ( C ) y el valor
; complementado del flag de overflow (OV)
; del registro PSW. C (C) .AND./NOT.OV
B) Realizar la operacin EXOR bit a bit, entre el b0 del puerto 0 (P0.0) y el b1 del puerto 1
(p1.1). depositando el resultado en el b7 del puerto2.
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 51.
La operacin a realizarse es:
P2.7 P0.0 .EXOR. P1.1
Programa:
MOV C,P0.0 ;Carga el bit0 del puerto P0 en el flag Carry
; C (P0.0 )
JNB P1. 1, SALTA ;Si p1.1 =0. C contiene el resultado
; correcto y entonces salta; pero si P1.1=1
;el complemento de C es el resultado correcto.
CPL C ; Complementa C.
SALTA: MOV P7.2,C ;El contenido del Carry (C) lo almacena en
; el bit7 del puerto P2.
;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 (OFF-SET) 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 y127 bytes. Si l operando es positivo, el salto es
adelante (direcciones crecientes de memoria); si en negativo, el salto es atrs (direcciones
decrecientes de memoria).


M.C. Eduardo Snchez Arellano.
- Pgina 42-
4.4 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.4.1 instrucciones de salto incondicional
La tabla 3.9 muestra la lista resumida de los saltos incondicionales. Aunque slo figure la
instruccin <<JMP addr>>, de hecho hay tres tipos: SJMP. LMP, y AJMP, que difieren en el
formato de la direccin de salto.
Tabla 3.9
Nemnico Operacin Tiempo de ejecucin (us)
JMP addr Jump to addr 2
JMP @A + DPTR Jump to A + DPTR 2
CALL addr Call subroutine at addr 2
RET Return from subroutine 2
RETI Return from interrupt 2
NOP No operation 1
No son afectados las banderas.

SJMP rel : (short jump). La direccin destino del salto viene dada por un <<offset
relativo>>, igual que en las instrucciones de salto booleanas. La instruccin tiene dos bytes,
correspondientes al cdigo de operacin y al byte de offset relativo. El rango del salto est
limitado a 128 y + 127 byte relativos. al primer byte siguiente a la instruccin de salto.
(PC) (PC) +2
CPC) (PC) +
LJMP addr 16: ( Long jump). La direccin destino del salto viene dad 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 addr 16
AJMP addr 11: (Absolute jump). La direccin destino del salto viene dada por una constante
de 11 bits. La instruccin tiene 2 bytes, uno para el cdigo de operacin que tambin
contiene en s misma 3 de los 11 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 :
M.C. Eduardo Snchez Arellano.
- Pgina 43-
a10 a9 a8 0 0 0 0 1 A7 a6 a5 a4 A3 a2 a1 a0
CODIGO DE OPERACIN OPERANDO

Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2
K bytes referenciado respecto a la siguiente instruccin a la del salto.
PC (PC) + 2
(PC 10-0) direccin de la pgina
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.
MOV A, INDI ; Se carga el acumulador con la variable ndice (INDI).
; 0 <INDI< 4.
RL A ;El valor cargado sufre un desplazamiento de un bit
;a la izquierda (multiplica por 2 el contenido del acumulador).
JMP @A +DPTR ;Se efecta la suma: PC (A) + (DPTR)
; y se produce el salto a otra instruccin
; de salto que a su vez saltar al
; subprograma a ejecutar.
----------------------------------
INDI: AJMP SALTO0
AJMP SALTO1
AJMP SALTO2
AJMP SALTO3
AJMP SALTO4
M.C. Eduardo Snchez Arellano.
- Pgina 44-
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 datos bytes de longitud que
tiene cada entrada de salto, AJMP SALTO0,AJMP SALTO 1...
_ Siguiendo con las instrucciones incondicionales, de la tabla 4.3 sta muestra la instruccin
CALL addr que tiene 2 formatos, LCALL y ACALL, que difiere 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 progamador) a un subprograma (subrutina). Que en s mismo
tiene su identidad para realizar una tarea definida.

LCALL addr 16 : 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:
(PC) (PC) + 3
(SP) (SP) + 1
((SP)) (PC
7-0
)
(SP) (SP) + 1
((SP)) (PC
15-8
)
(PC) addr15-0

ACALL addr 11: utiliza un formato de direccionamiento de 11 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) (PC) +2
(SP) (SP) + 1
((SP)) (PC
7-0
)
(SP) (SP) + 1
((SP)) (PC
15-8
)
(PC
10-0
) direccin de la pgina
Lo mismo que se indic en los saltos incondicionales, el programador cuando trabaja en
ensamblador slo debe preocuparse de colocar la etiqueta; el programador ensamblador
determiner la longitud del salto y el formato que debe dar al cdigo de instruccin segn la
longitud del salto.

RET: 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.
M.C. Eduardo Snchez Arellano.
- Pgina 45-
Secuencia de operaciones:
(PC
15-8
) ((SP))
(SP) (SP) 1
(PC
7-0
) ((SP))
(SP) (SP) 1

RETI: Utilizada para retornar de las rutinas del servicio de interrupciones. Las interrupciones
se estudian de forma especial en el capitulo 10.
Secuencias de operaciones:
(PC
15-8
) ((SP))
(SP) (SP) 1
(PC
7-0
) ((SP))
(SP) (SP) 1

4.2.2 INSTRUCCIONES DE SALTO CONDICIONAL
La tabla 3.10 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 1 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.
Nemnico Operacin Modos de
direccionamiento
Tiempo de Flag afectados
Dir Ind Reg Imm Ejecucin s C OV AC
JZ rel Jump if A=0 Accumulator only 2
JNZ rel Jump if A<>0 Accumulator only 2
DJNZ <byte>,rel Decrement and jump if not
zero
X X 2
CJNE A,<byte>,rel Jump if A<> <byte> X X 2 X
CJNE <byte>,#data,rel Jump if <byte><.> #data X X 2 X

X =Si =No

M.C. Eduardo Snchez Arellano.
- Pgina 46-
Nota: en la tabla 3.10 se sealara como posible operando <byte>, pudiendo ser <byte>:
a) El acumulador.
b) Los registros R0 a R7 con direccionamiento directo.
Los registros R0 y R1 con direccionamiento indirecto.

JZ y JNZ:
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 directamente el registro acumulador, pues este microcontrolador no tiene
<< flag cero >> en el registro de estado.
Secuencias de operaciones:
JZ rel JNZ rel
(PC) (PC) + 2 (PC) (PC) + 2
Si (A) = 0 Si (A)<> 0
entonces entonces
(PC) (PC) + rel (PC) (PC) + rel

DJNZ:
Decrementa y salta si no es cero. Esta instruccin est especializada en lazos de control.
Para que ejecute un lazo n veces se carga un <<contador>> con n 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.
(PC)(PC) + 2
(<byte>) (<byte>) 1
Si (<byte>)> 0 o (<byte>)< 0
Entonces
(PC) (PC) + rel
Ejemlpo:
Ejecutar el lazo 10 veces.
MOV CONTADOR, # 10
LAZO: (comienzo del lazo)
------------------------ Instruciones que se van a ejecutar mientras
-------------------------- CONTADOR sea distinto de <<cero>>.
( fin del lazo)
M.C. Eduardo Snchez Arellano.
- Pgina 47-
DJNZ CONTADOR , LAZO
CJNE:
Compara y salta, si el resultado de la comparacin no es igual.
En este caso hay dos formatos, segn la comparacin se haga con el acumulador o con un
operando tipo <byte>, que puede ser:
Con direccionamiento indirecto ( registros R0 y R1).
Con direccionamiento directo ( registros R0 y R7 )
CASO 1.MODELO CJNE A,<byte>, salto relativo
Secuencia de operaciones:
(PC) (PC) + 3
Si (A) <> (<byte>)
Entonces
(PC) (PC) + rel
Si (A) < (<byte>)
Entonces
(C) 1
sino
(C) 0
Ejemplo:
Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del perifrico a
travs del puerto 0 (P0), se corresponda con el valor de la posmen 7FH.
MOV A, P0
LAZO: ----------
----------
----------
----------
CJNE A,7F, LAZO
CASO 2. 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 e <<flag CARRY>> del PSW se pone a <<uno>>. Si el primero byte es mayor o
igual que el segundo, entonces el <<flag CARRY>> es <<cero>>. Estos y otros aspectos
estn aclarados en el Apndice A.
Secuencia de operaciones:
Segn se trate de direccionamiento indirecto (registros R0 y R1 (@Ri) o
direccionamiento directo (registro R0 y R7 (Rn)) es:

M.C. Eduardo Snchez Arellano.
- Pgina 48-
CJNE @Ri,# data, rel CJNE Rn, # data, del
(PC) (PC) + 3
Si ((Ri)) <>data
Entonces
(PC) (PC) + rel
Si ((Ri)) < data
Entonces
(C) 1
Si no
(C) 0
(PC) (PC) + 3
Si (Rn)<>data
Entonces
(PC) (PC) + rel
Si (Rn) < data
Entonces
(C) 1
Si no
(C) 0

Seguidamente, y como resumen, se muestra el set de instrucciones de la familia 51
(tabla 3.11).
Al comienzo de estas tablas se sealan las instrucciones que afectan a los flags del
PSW, asi 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.

<<SET>> DE INSTRUCCIONES FAMILIA 51
Tabla 4.11. Instrucciones que afectan a las banderas.
Instruccin C OV AC Instruccin C OV AC
ADD X X X CLR C O
ADDC X X X CPL C X
SUBB X X X ANL C, bit X
MUL 0 X ANL C,/bit X
DIV 0 X ORL C, bit X
DA X ORL C,/bit X
RRC X MOV C, bit
RLC X CJNE
SETB C 1

Notas sobre el significado de los operandos de las instrucciones que se describen a
continuacin:
Rn..................... Registros R0-R7 del banco de registros seleccionado.
Direct............... Direccin del dato de 8 bits de la memoria interna. Puede ser un dato de
la RAM interna (0-127 para el 8051 o 0-225 para el 8052) o un registro
del SFR (por ejemplo, puerto de E/S, registro de control, registro de
estado (128-255).

@Ri.................. Se refiere a los registros R0 y R1, 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 (000-7FH) para el 8052/8051.
# data............... Operando constante de 8 bits
# data 16.......... Operando constante de 16 bits.
addr 16............. Direccin destino de 16 bits. Utilizada por las instrucciones de salto LCALL
y LJMP para permitir el salto dentro del espacio de 64K bytes de la
M.C. Eduardo Snchez Arellano.
- Pgina 49-
memoria de programas.
addr 11........... Direccin destino 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.
Rel.................. 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.
Bit................. Direccionamiento directo <<bit a bit>> dentro del rea de la memoria
RAM interna y de los registros SFR que lo permiten.

rrr................ En la columna de codificacin indirecta el registro implicado en las
instruccin (Rn). As:
R r r Registro
0 0 0 R0
0 0 1 R 1
0 1 0 R 2
1 1 1 R 7
i..................... En la columna de codificacin indica el registro implica en la instruccin de
direccionamiento indirecto (@Ri). As:
i............ Registro
0 @R0
1 @R1

Tabla Instrucciones aritmticas
Nemnico Descripcin Codificacin Byte Perodo de
oscilador
ADD A,Rn Add register to Accumulador 0010 1rrr 1 12
ADD A,direct Add direct byte to Accumulador. 0010 0101 Direct address 2 12
ADD A, @Ri Add inditect RAM to Accunulador 0010 011i 1 12
ADD A, # data Add immediate data to Accumulador 0010 0100 Dato Inmediato 2 12
ADDC A,Rn Add register to Accumulador with Carry 0011 1rrr 1 12
ADDC A, direct Add direct byte to Accumulador with Carry 0011 0101 Direct address 2 12
ADDC A,@Ri Add indirect RAM to Accumulador with Carry 0011 011i 1 12
ADDC A,# data Add immediate data to Acc with Carry 0011 0100 Immediate data 2 12
SUBB A,Rn Subtract Register from Acc with boorrow 1001 1rrr 1 12
SUBB A, direct Subtrac direct byte from Acc with boorrow 1001 0101 Direct address 2 12
SUBB A,@Ri Subtract indirect RAM from ACC with boorrow 1001 011i 1 12
SUBB A, # data Subtract immediate data from Acc with boorrow 1001 0100 Immediate data 2 12
INC A Increment Accumulador 0000 0100 1 12
INC Rn Increment regitrer 0000 1rrr 1 12
INC Direct Increment direct byte 0000 0101 Direct address 2 12
INC @Ri Indrement direct RAM 0000 011i 1 12
DEC A Drecrement Accumulator 0001 0100 1 12
DEC Rn Decrenemt register 0001 1rrr 1 12
DEC Direct Decrement indirect byte 0001 0101 Direct address 2 12
M.C. Eduardo Snchez Arellano.
- Pgina 50-
DEC @Ri Decrement indirect RAM 0001 011i 1 12
INC DPTR Increment data pointer 1010 0011 1 24
MUL AB Multiply A&B 1010 0100 1 48
DIV AB Divide A by B 1000 0100 1 48
DA A Decimal Adjuste Accumulator 1101 0100 1 12

TABLA Instrucciones Lgicas
ANL A,Rn AND Register to Accumulator 0101 1rrr 1
ANL A,direct AND direct byte to Acumulator 0101 0101 Direct address 2
ANL A,@Ri AND indirect RAM to Accumulator 0101 011i 1
ANL A,# data AND immediate data to Accumulator 0101 0111 Immediate data 2
ANL Direct,A AND Accumulator to direct byte 0101 0010 Direct address 2
ANL Direct,# data AND immediate data to direct byte 0101 0011 Direct address Immediate data 3
ORL A,Rn OR register to Accumulator 0100 1rrr 1
ORL A,direct OR direct byte to Accumator 0111 0101 Direct address 2
ORL A,@Ri OR indirect RAM to Accumator 0101 011i 1
ORL A,#data OR immediate data to Accumulator 0100 0100 Immediate data 2
ORL Direct,A OR Accumulator to direct byte 0100 0010 Direc address 2
ORL Direct.#data OR immediate data to direct byte 0100 0011 Direct address Immediate data 3
XRL A,Rn Exclusive-OR register to Accumulator 0110 1rrr 1
XRL A,direct Exclusive-OR direct byte to Accumulator 0110 0101 Directs address 2
XRL A,@Ri Exclusive-OR indirect RAM to Accumulator 0110 011i 1
XRL A.#dat Exclusive-OR immediate data to Accumulator 0110 0110 Immediate data 2
XRL Direct,A Exclusive-OR Accumulator to direct byte 0110 0010 Direct address 2
XRL Direct,# data Exclusive-OR immediate data to direct byte 0110 0011 Direct address Inmediate data 3
CLR A Clear Acumulator 1111 0100 1
CPL A Complement Accumulator 1111 0111 1
RL A Rotate Accumulator Left 0010 0011 1
RLC A Rotate Accumulator Left through the Carry 0011 0011 1
RR A Rotate Accumulator Right 0000 0011 1
RRC A Rotate Accumulator Right through the Carry 0001 0011 1
SWAP A Swap nibbles within the Accumulator 1100 0100 1

TABLA 4.8 Instrucciones de Transferencia de Datos
MOV A,Rn Move register to Accumulator 1110 1rrr 1
MOV A,direct Move direct byte to Accumulator 1110 0101 Direct address 2
MOV A,@Ri Move indirect RAM to Accumulator 1110 100i 1
MOV A,#data Move immediate data to Accumulator 0111 0100 Immediate data 1
MOV Rn, A Move Accumulator to register 1111 1rrr 1
MOV Rn,,direct Move direct bute to regiter 1010 1rrr Direct address 2
MOV Rn,#data Move immediate data to regiter 0111 1rrr Immediate data 1
MOV Direct,A Move Accumulator 1111 0101 Direct address 2
MOV Direct,Rn Move register to direct byte 1000 1rrr Direct address 2
M.C. Eduardo Snchez Arellano.
- Pgina 51-
MOV Direct,direct Move direct to direct 1000 1010 Dir. Addr. (src) Dir. Addr (dest) 3
MOV Direct,@Ri Move indirect RAM to direct byte 1000 011i Direct address 2
MOV Direct,# data Move immediate data to direct bute 0111 0101 Direct address Immediate data 3
MOV @Ri,A Move Accumulator to indirect RAM 1111 011i 1
MOV @Ri,direct Move direct byte to indirect RAM 1010 011i Direct address 2
MOV @Ri,# data Move immediate data to indirect RAM 0111 011i Immediate data 2
MOV DPTR,#data 16 Load data pointer with a 16-bit constant 1001 0000 Immed. Data 15-8. Immed. Data 7-0 3
MOVC A,@A+DPTR Move code byte relative to DPTR to Acc 1001 0011 1
MOVC A,@A+PC Move code byte relative to PC to Acc 1000 0011 1
MOVX A,@Ri Move External RAM (8-bit addr) to Acc 1110 001i 1
MOVX A,@DPTR Move External RAM (16-bit addr) to Acc 1110 0000 1
MOVX @Ri,A Move Acc to external RAM (8-bit addr) 1111 001i 1
MOVX @DPTR,A Move Acc to External RAM (16- bit addr) 1111 0000 1
PUSH Direct Push direct byte stack 1100 0000 Direct address 2
POP Direct Pop direct byte from stack 1101 0000 Direct address 2
XCH A,Rn Exchange regiter with Accumulator 1100 1rrr 1
XCH A,direct Exchange direct byte with Accumulator 1100 0101 Direct address 2
XCH A,@Ri Exchange indirect RAM with Accumulator 1100 011i 1
XCHD A,@Ri Echange low-order digit indirect RAM with
Acc
1101 011i 1

Tabla 4.9 instrucciones booleanas
CLR C Clear Carry 1100 0011 1 12
CLR Bit Clear direct bit 1100 0010 Bit address 2 12
SETB C Set Carry 1101 0011 1 12
SETB Bit Set direct bit 1101 0010 Bit address 2 12
CPL C Complement Carry 1011 0011 1 12
CPL BiT Complement direct bit 1011 0010 Bit address 2 12
ANL C.bit AND direct bit to Carry 1000 0010 Bid address 2 24
ANL C,/bit ANDcomplement of direct bit to Carry 1011 0000 Bid address 2 24
ORL C,bit OR direct bit to Carry 0111 0010 Bid address 2 24
ORL C,/bit OR complement of direct to Carry 1010 0000 Bid address 2 24
MOV C,bit Move direct bit to Carry 1010 0010 Bid address 2 12
MOV Bit, C Move Carry to direct bit 1001 0010 Bit address 2 24
JC Rel Jump if Carry is set 0100 0000 Rel address 2 24
JNC Rel Jump if Carry not set 0101 0000 Rel address 2 24
JB Bit,rel Jump if direct bit is set 0010 0000 Bit address Rel, address 3 24
JNB Bit,rel Jump if direct bit is not set 0011 0000 Bit address Rel, address 3 24
JBC Bit,rel Jump if direct bit is set & clear bit 0001 0000 Bit address Rel, address 3 24

Tabla 3.10 Instrucciones de Salto
ACALL Addr 11 Absolute Subroutine Call a
10
a
9
a
8
1 0001 a
7
a
6
a
5
a
4
a
3
a
2
a
1
a
0
2
M.C. Eduardo Snchez Arellano.
- Pgina 52-
LCALL Addr 16 Long Subroutine Call 0001 0010 addr15-addr8 addr7-addr0 3
RET Return from Subroutine 0010 0010 1
RETI Return from interrupt 0011 0010 1
AJMP Addr 11 Absolute jump a
10
a
9
a
8
0 0001 a
7
a
6
a
5
a
4
a
3
a
2
a
1
a
0
2
LJMP Addr 16 Long jump 0000 0010 addr15-addr8 addr7-addr0 3
SJMP Rel Short jump (relative addr) 1000 0000 rel.address 2
JMP @A+DPTR Jump indirect relative to the DPTR 0111 0011 1
JZ Rel Jump if Accumulator is zero 0110 000 rel.address 2
JNZ Rel Jump if Accumulator is not zero 0111 0000 rel.address 2
CJNE A,direct,rel Compare direct byte to Acc and jump if not
Equal
1011 0101 diret.address rel.address 3
CJNE A,#data , rel Compare immediate to Acc and jump if not
Equal
1011 0100 immediate data rel.address 3
CJNE Rn,#data,rel Compare immediate to registrer and jump if
not Equale
1011 1rrr immediate data rel.address 3
CJNE @R1,#data,rel Compare immediate to indirect and jump if Not
Equale
1011 010i immediate data rel.address 3
DJNZ Rn,rel Decrement register and jump if Not Zero 1101 1rrr rel.address 2
DJNZ Direct,rel Dcrement direct byte and jump if Not Zero 1101 0101 direct address rel.address 3
NOP No operation 0000 0000 1























M.C. Eduardo Snchez Arellano.
- Pgina 53-
Capitulo 5
Presentacin del Software y Equipo de Desarrollo

CROSS-ASSEMBLER
El ensamblador (AVMAC51) traslada mnemnicos, pseudooperaciones, y direcciones
simblicas, a cdigo de operacin a nivel maquina, y direcciones numricas as como
manejo de macros, directivas de procesador y directivas condicionales de ensamblador.
EL encadenador (AVLINK) habilita la utilizacin por segmentos para cdigo
relocalizable (as como absoluto), datos. Etc. as como modularizacin de archivos
fuente.
Las libreras (AVLIB) colecta mltiples modules objeto para simplificar el
encadenamiento.
El generador de reportes cross-reference (AVREF) ayuda en la coordinacin de
proyectos grandes.
EL (HEXFORM) formateador de archivos HEX, produce un archivo binario, o un archivo
HEX revisado.


M.C. Eduardo Snchez Arellano.
- Pgina 54-
EL ENSAMBLADOR AVMAC51

El AVMAC51 es un programa, que acepta como entrada un archivo hecho en un
editor de texto, con cdigo fuente en lenguaje ensamblador del 8751, el cual tiene una
extensin .ASM

El AVMAC51, primero procesa el archivo, desarrolla los macros, y despus lo
ensambla.

El AVMAC51 genera un archivo listado (FILE.PRN), y un archivo objeto (FILE.OBJ) en
cdigo maquina. Opcionalmente puede generar un archivo con expansin de macros (.MXP)
utilizando la operacin MACFILE (filename).
Puede generarse un archivo CROSS-REFERENCE (FILE.XRF) usando la opcin XREF.

EJEMPLOS:
AVMAC51 file.asm
AVMAC51 file.asm NOMACEVAL ; Lo procesa y lo ensambla.
AVMAC51 file.asm NOPROCESS ; Lo ensambla nicamente.
AVMAC51 file.asm ALLPUBLIC ; Lo preprocesa nicamente.
AVMAC51 file.asm XREF1 ; Genera un .XRF
AVMAC51 file.asm MACFILE(filename) ; Genera un .MXP

EL MANEJADOR DE LIBRERIAS AVLIB
Es un programa que coordina numerosos archivos objeto dentro de una librera,
File.lib, facilitando el encadenamiento de mdulos objetos frecuentemente usados.
EJEMPLO:
AVLIV routines.lib = one.obj, two.obj, tree.obj
Donde one.obj, two.obj, tree.obj son archivos objeto previamente ensamblados y
son incluidos en la librera llamada routines.lib.
M.C. Eduardo Snchez Arellano.
- Pgina 55-
EL ENCADNADOR AVLINK
El encadenador es un programa que acepta como entrada uno o varios mdulos
objeto, y produce un solo modulo de salida, encadenado, con cdigo relocalizado y listo
para ser cargado en memoria.
El AVLINK entrega un archivo de salida en formato .HEX (INTEL), o
.MOT(MOTOROLA) .TEK(TEKTRONICS).
As como un archivo .MAP el cual muestra las localidades de segmentos y smbolos.
EJEMPLOS:
AVLINK outfile=file.obj
AVLINK outfile=one.obj, two.obj, rutinas.obj
AVLINK outfile=file.obj OF=MOT
AVLINK outfile=infile.obj -SYMBOLS ;genera un .SYM

EL CROSS-REFERENCE REPORT GENERATOR AVREF
Es una ayuda muy til, particularmente en la generacin de proyectos grandes con
mltiples archivos y/o segmentos.

La entrada a AVREF es un archivo .SYM y uno o ms archivos .XRF y la salida es un
reporte .RPT, el cual contiene informacin detallada de los segmentos, procedimientos y
smbolos locales y pblicos.

El .XRF se genera ensamblando con la opcin XREF
AVMAC51 file.asm XREF
El .SYM se genera encadenando con la opcin SYMBOLS
AVLINK fileout=file1.obj -SYMOLS
El reporte se genera
AVREF filename=fileout.sym,file1.xrf

M.C. Eduardo Snchez Arellano.
- Pgina 56-
HEX FILE FORMATER
Normalmente el archivo .HEX se genera en el orden que los mdulos fueron
cargados.
Hexform permite soportar el archivo .HEX y tiene una sola salida en forma Binaria o
hexadecimal.
EJEMPLO:

HEXFORM filename=filein.hex -> .BIN
HEXFORM filename.hx2=filein.hex -TOHEX -> .HEX

***** PSEUDO - OPS *****
Usando los pseudo-op DEFSEG y SEGs...

Note que "DEFSEG" define un nombre para un segmento (llamado un segmento definido
por el usuario), mientras "SEG" es colocado dentro de un segmento. Usted permanece en
un segmento hasta que usted lo especifica (usando otro pseudo-op "SEG") que usted desea
estar en un segmento diferente.
DEFSEG nombre_del_segmento_1
SEG nombre_del_segmento_1
db 1

DEFSEG nombre_del_segmento_2
SEG nombre_del_segmento_2
db 2
Usted puede asignar atributos a un segmento especificando el atributo "ABSOLUTE"
permite el uso de la palabra "ORG" (origen del inicio de direccin absoluta) dentro del
segmento.

DEFSEG NOMBRE_SEGMENTO, ABSOLUTE
SEG NOMBRE_SEGMENTO
ORG 100H
db 3
ORG 200H
db 4
M.C. Eduardo Snchez Arellano.
- Pgina 57-

El pseudo-op "ORG" puede ser ademas usado en un segmento relocalizado el cual
tiene el atributo "START=", pero si el segmento reside completamente dentro de un
modulo. Si el "ORG" es usado en un segmento relocalizable, del tipo "START=" en mas de
un modulo, entonces ese segmento debera ser OVERLAID".
Note que usted puede usar opciones AVLINK en segmentos relocalizables, pero no
en segemntos "ABSOLUTES" y eso lo deber advertir el encadenador (linker) si usted
sobreescribir segmentos relocalizables pero no si un segmento "ABSOLUTE" sobreescribe
cualesquier otro segmento.

DEFSEG SEG_RELOC, START=250H
SEG SEG_RELOC
db 5
ORG 300H
db 6

Desde que "SEG_RELOC" es relocalizable el siguiente segmento causa un preventivo
(warning) 'sobreescritura' al tiempo de encadenar (AVLINK) . . .
DEFSEG segover, start=2F0H
seg segover
db 7

El atributo "OVERLAID" puede ser usado solamente por el mismo nombre del segmento
en mas de un modulo . . .

DEFSEG segol, OVERLAID
seg segol
db 55H

Uso del atributo "CLASS=" . . . Usted puede asignar cualesquier atributo clase aplicable
con la oracin "CLASS="

DEFSEG seg1code, CLASS=CODE
SEG seg1code
db 8
M.C. Eduardo Snchez Arellano.
- Pgina 58-

Usted pude asignar un segmento a la clase "DATA" . . .
DEFSEG seg1data, CLASS=DATA
SEG seg1data
db 9

Algunos chips usan otras clases, por ocasiones la clase "PAGE0", con la cual coloca datos
en pagina0 . . .
; DEFSEG segzero, CLASS=PAGE0
; SEG segzero
; db 1

Note que cualquier CLASS aplicable a un chip tiene un nombre de segmento predefinido
conocido para el ensamblador, por ejemplo:

SEG CODE
db 0AH
SEG DATA
db 0BH

Note que el campo de la direccin del file '.PRN' mostrara despus de la direccin:
& -> Para un segmento definido por el usuario
' -> Para un segmento predefinido como CODE
'' -> Para un segmento predefinido como DATA
@ -> (Si es aplicable) para un segmento predefinido PAGE0
* -> Para una etiqueta externa

Usted puede especificar la alineacin de un segmento, usando el atributo "ALIGN=", donde
el valor deber ser una potencia de 2 --
DEFSEG segalign, ALIGN=100H
SEG segalign
db 0DH
Usted puede adems especificar el tamao del bloc de un segmento, usando "BLOCK="
donde el valor deber ser una potencia de 2 --
DEFSEG segblock, BLOCK=200H
M.C. Eduardo Snchez Arellano.
- Pgina 59-
SEG segblock
db 0EH
(Para propsitos de compatibilidad, ciertos sinnimos han sido agregados como pseudo-
ops validos. Esos debern ser notados en las siguientes tres secciones.)
USO DE LOS pseudo-ops DS DB, DW, ...
DS es usado para reservar un cierto numero de espacio de BYTES sin inicializar . . .
DS 8
RMB y DEFS son sinnimos de DS..
RMB 6
DEFS 4
DW define un numero de 16-bit,
DW 123H
DW puede definir mas de una palabra...
DW 123H, 456H, 789H
DEFW es una sinnimo de DW...
DEFW 5
DEFW 100H, 256
FDB es como DW, excepto que adems permite dos o ms comas consecutivas previendo
un valor cero entre cada dos comas . . .
FDB 1,2,,3,,,4
DB define un byte a la vez
DB 4
DB 1,2,3
DB es adems usado para textos (strings) de cdigo ASCII . . .
DB "hola, Tecnolgico"
; DEFB y DEFM son sinnimos de DB...
DEFB 1, 2, "hello"
DEFM 'world', 3
FCB es como DB, excepto (como en FDB) que adems permite dos o ms comas
consecutivas, previendo valor de cero entre cada dos comas . . .
FCB 5,,6,7
FCC es un pseudo para definir un texto con dos sintaxis validas. En el primero un numero
decimal seguido por una coma, que indica que esta iniciando el siguiente carcter
(diferente de espacio o tab), un texto del numero indicado de caracteres ser tomado.
FCC 4,string
M.C. Eduardo Snchez Arellano.
- Pgina 60-
FCC 10,string
Note que el texto "string" no es tan largo como el numero indicado, ser recortado
cuando sea menor y se le agregaran espacios (caracteres) cuando sea mayor; el numero
mas alto permitido es 132.
En la segunda sintaxis permitida del primer carcter despus del pseudo-op FCC es
considerada el limite del texto; hasta que ese carcter sea visto, el texto continuara siendo
procesado.
FCC /monday/
FCC zmondayz
FCC 7monday7
FCC &monday&
Uso de EQU y TEQ...
Usted puede igualar un smbolo con un valor numrico usando las directivas EQU y TEQ. El
psuedo-op EQU simplemente asigna un valor a una etiqueta, mientras que TEQ permite
adems que la misma etiqueta sea redefinida tiempo despus.
labelname EQU 2
labeltwo TEQ 3
labeltwo TEQ 4
SET, ASET y DEFL son sinnimos de TEQ..
labeltwo SET 5
labeltwo ASET 5
labeltwo DEFL 6
Note que cualquier etiqueta "DEBERA" iniciar en la columna 1.
Uso de PUBLIC y EXTERN...

Usted puede usar usa smbolos atraves de mdulos (ej., programas en archivos fuentes
separados) usando los pseudo-ops PUBLIC y EXTERN.

El pseudo-op PUBLIC es usado para indicar un smbolo el cual es definido en el presente
modulo para el cual ser tomado como referencia desde un modulo diferente
PUBLIC otherlabel
otherlabel DB 5

Note que usando la opcion ALLPUBLIC har que todas las etiquetas usadas en el presente
modulo sean como PUBLIC.
M.C. Eduardo Snchez Arellano.
- Pgina 61-

XDEF y GLOBAL son sinnimos de PUBLIC.

Para tomar como referencia un smbolo que es definido en otro modulo, use el pseudo-op
EXTERN ...
EXTERN outlabel
Usando la directiva EXTERN permite que la etiqueta sea usada en el presente modulo, aun
cuando no esta definida all.
Sinnimos de EXTERN incluyen EXT, EXTRN, EXTERNAL, y XREF.
Uso de PROCedures...
Usando PROC permite el uso local de smbolos, esto es, smbolos cual identidad es
conocida solamente entre lo que precede a PROC y antes de ENDPROC.
proclab PROC
L?local db 5
ENDPROC
proc2lab PROC
L?local db 6
ENDPROC
Note que el smbolo 'L?local' no causa un error 'multiply-defined symbol'. Note adems,
que los smbolos locales debern iniciar con L?
END...
El pseudo-op END deber aparecer en un archivo (file) hasta el final del mismo (el
ensamblador terminara su trabajo al reconocer END).
END










M.C. Eduardo Snchez Arellano.
- Pgina 62-
Capitulo 6
Control de Puertos de Entrada y Salida

6.1 INTRODUCCION:
Los cuatro puertos del 8052/8051 son bidireccionales, es decir, permiten la lectura y
escritura en el perifrico correspondiente. Las salidas estn <<latcheadas>>, lo que
permite mantener el dato indefinidamente hasta que sobre escriba la informacin original.
Otra caracterstica importante es que los puertos pueden ser utilizados como buses
de direcciones, datos y control, debido a estas caracteristicas se dice que el
microcontrolador puede trabajar como microprocesador.

6.2 EL MICROCONTROLADOR COMO MICROPROCESADOR
Los drivers de salida de los puertos P0 y P2 y los buffers de entrada del puerto P0 se
pueden utilizar para acceder a la memoria externa del sistema. En estas condiciones, el
puerto P0 se configura como salida del byte bajo del bus de direcciones (A0 a A7), de un
bus que consta de 16 bits (capacidad de direccionamiento 64K). Multiplexado en el tiempo
como bus de datos bidireccional (D0 a D7). El puerto P2 se configura como salida del byte
alto del bus de direcciones (A8 a A15). De esta manera 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 P1 y parte del puerto P3, puesto que hay seales que se utilizan
para el control del sistema (bus de control).
En la figura 6.1 se muestran los cronogramas correspondientes 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 figura 6.1
y en el cuadro 6.1 sin hacer mencin a los tiempos reales que dependen del tipo de
microcontrolador y de la frecuencia de trabajo.





M.C. Eduardo Snchez Arellano.
- Pgina 63-
























M.C. Eduardo Snchez Arellano.
- Pgina 64-
Para una mayor informacin consulte 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 6.2 se dibuja un esquema en el que aparece el microcontrolador comandando una
memoria RAM (43256C) y una memoria EPROM (2764).

6.2.1 Ciclo de lectura en la memoria externa de programas
Para acceder a la memoria externa de programas utiliza la seal PSEN (Program
Store Enable) como seal de autorizacin de lectura (Figura 6.1 (A) y 6.2).
La seal <<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 6.2 se puede observar que la lectura en la memoria de programas se realiza cuando
PSEN est a nivel bajo y las lneas A
13
, A
14
y A
15
se encuentran a nivel alto, siendo el resto
de las lneas de direccin las que establecen la posmen 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 A15=A14=A13=1, concretamente comienza en la posmen
1110.0000.0000.0000=E000H y termina en la posmen FFFFH, en total 8 Kbytes.
Si el usuario escribe en el Puerto P0 durante el ciclo de bsqueda en la memoria
externa, el byte de cdigo puede ser modificada. Se recomienda no escribir en el Puerto P0
si es utilizada para leer en la memoria de programa externa.
A la memoria de programas externa se accede bajo dos condiciones:
1. Cuando la seal EA es activa, caso de la Figura 6.2
2. Cuando el contador de programa (PC) contiene un nmero ms grande que 0FFFH para
el 8051 o 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.





M.C. Eduardo Snchez Arellano.
- Pgina 65-
















Figura 5.2
5.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 (M0VX A,@DPTR) o bien 8 bits
(MOVX A,@Ri) (vase Figura 5.1 (B) ).
En un ciclo de lectura el byte de entrada es aceptado en el Puerto P0 justo antes de
que la seal de control RD que autoriza la lectura sea desactivada.

6.2.3. Ciclo de escritura en la memoria externa de datos
Para la escritura en la memoria externa de datos utiliza la seal de control
WR(funcin alternativa P3.6) y puede utilizar los 16 bits de direccin (MOV @DPTR.A) o bien
8 bits (MOV @Ri) (Figura 8.1.(C)).
En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y
despus de que la seal de control de escritura WR sea desactivada.
En general, tanto para la lectura como para la escritura, cuando una direccin de 16
bits es utilizada (MOVX @DPTR), el byte alto de direccin sale por el Puerto P2, donde
permanecer mientras dura el ciclo de lectura o escritura.
M.C. Eduardo Snchez Arellano.
- Pgina 66-
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.
Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa
o interface, los puertos quedarn en esta situacin:
P0: Bus de direcciones bajas (A0 a A7) y bus de datos (D0 a D7) multiplexados en el
tiempo.
P1: puerto de E/S.
P2: Bus de direcciones altas (A8 a A15).
P3: Bus de control.

6.3 OPERACIN DE ESCRITURA EN LOS PUERTOS DE LOS Micros
La operacin de escritura, utilizando los puertos del Micro, puede ser realizada por
cualquiera de ellos; no obstante, el puerto P0 es el que presenta una mayor cargabilidad,
permitiendo comandar ocho cargas TTL-LS, mientras que los otros tres permiten cuatro
cargas TTL-LS.
En la ejecucin de una instruccin que cambia el valor del latch del puerto, el nuevo
valor llega al latch durante el estado 6, fase 2 del final del ciclo de instruccin, segn indica
la Figura 6.3
Antes de comenzar con el estudio y comprobacin de los puertos de E/S, se dibuja la
interface para la conexin de los puertos a los dispositivos de salida, que en un principio
pueden servir unos simples LED (Figura 6.4).
Para controlar cargas de mayor consumo de energa, 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 50v.












M.C. Eduardo Snchez Arellano.
- Pgina 67-
Figura 6.3








Figura 6.4
Como ya se sabe, el 8052/8051 presenta dos seales de control, una para ejecutar
la lectura (RD) y otra para la escritura (WR). Por esto la activacin de estas seales
depende del formato de la instruccin. Para la operacin de ESCRITURA en el puerto, la
instruccin ms habitual es la siguiente:
MOV PX, <DATO> ; PX<DATO>
X toma valores 0, 1, 2 y 3 segn el puerto.
Admitiendo <DATO> todos los tipos de direccionamiento estudiados en el captulo 3.

EJEMPLO 6.1 El puerto P0 en modo de salida

Este ejercicio muestra cmo se deben tratar los cuatro puertos cuando se tiene que enviar una
informacin de salida al microcontrolador. Una operacin de escritura. El ejercicio se realiza con el
puerto P0. Pero el usuario puede comprobar que el programa funcionar igual si sustituye el puerto P0
por el P1, P2 P3.
El programa muestra distintas formas de escritura en el puerto. Asi:
En las primeras instrucciones, mediante una mscara, se ponen todos los bits del puerto P0 a
CERO.
Se incrementa el acumulador y se transfiere al Puerto P0, por lo que el contenido de dicho puerto
se incrementar, as hasta contar hasta 5.
Direccionando directamente los bits 0 y 2 del Puerto P0, que en la ltima operacin haban
quedado a UNO, se pone a CERO. En este instante todos los bits de P0 estn a CERO.
SE PONE A uno el bit 7 de P0 y con direccionamiento inmediato se carga P0 con 55H.
M.C. Eduardo Snchez Arellano.
- Pgina 68-
Finalmente, se complementa (operacin lgica NOT) la informacin de P0 cambiando los UNOS por
CEROS y los CEROS por UNOS.
Se observar que entre las distintas operaciones se ha incluido un lazo de retardo para poder
seguir la evolucin de la secuencia anteriormente descrita.
;**************************************************************
;* PROGRAMA 1 PUERTOS *
;**************************************************************
ORG 0H
MOV A, # 00H ;Pone a cero ACC.
MOV R0, A ;Poner a cero registro 0
ANL P0, A ;pone a cero P0
CALL RETAR1 ;producir retardo
SALO: INC A ;Incrementa ACC
MOV P0, A ;escribe en el puertoP0
CALL RETAR1
CJNE A, #05H, SALO ;Si se han realizado 5 incremento de P0 sale
CLR P0.0 ;Pone el bit o de P0 a cero
CLR P0.2 ;Pone el bit2 de P0 a cero.
CALL RETAR1
SETB P0.7 ;Pone el bit 7 de P0 a UNO.
CALL RETAR1
MOV P0,#55H ;Carga P0 con 55H
CALL RETAR1
MOV A,#0FFH
XRL P0,A ;Complementa P0
NOP

RETAR1: MOV RO, #4OH ;Se CARGA el registro R0 con #40H
SAL0: MOV R1, #85H ;Se CARGA R1 con #85H
SAL1: MOV R2, #FFH ;Se CARGA R2 con #FFH
SAL2: DJNZ R2, SAL2 ;Decrementa R2 y repite el lazo hasta que R2=0
DJNZ R1, SAL1 ;lo mismo que la instruccin anterior, pero por cada
;lazo de R1, ejecuta FFH veces el lazo R2
DJNZ R0, SAL0 ;Lo mismo que las instrucciones anteriores, pero por
; cada lazo de R0, ejecuta 85H lazos de R1 y 85H FFH ;lazo de ;R0
RET
END


6.4 OPERACIN DE LECTURA EN LOS PUERTOS
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> 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 5.5). El segundo
circuito est pensado especialmente para los ejercicios que se refieren al tema de las
M.C. Eduardo Snchez Arellano.
- Pgina 69-
interrupciones. Este circuito es, hasta cierto punto, inmune a los rebotes de los contactos
(Figura 6.6).

6.2 operacin de lectura en el puerto P0 y de escritura en el puerto P1
Este ejercicio trata de mostrar cmo se manipula el Puerto P0 para utilizarlo como
entrada y el P1 como salida, de tal forma que la informacin leda por el Puerto P0 y
despus de ser tratada adecuadamente sale escrita por P1. En este caso concreto, la
informacin leda por P0 sale por P0 sale intacta por el Puerto P1.

En la figura 5.7 se muestra la disposicin de ambos puertos.








Figura 5.5






Figura 5.6



M.C. Eduardo Snchez Arellano.
- Pgina 70-













DEFSEG INOUT,ABSOLUTE
SEG INOUT
ORG 0H
MOV A,P0
MOV P1,A
END

EJEMPLO 6.3 LECTURA Y ESCRITURA EN EL MISMO PUERTO
Este ejercicio muestra cmo se puede realizar la operacin de lectura y escritura por
el mismo Puerto P0. Para ello dividimos el Puerto P0 en dos nibbles, el nibbles bajo (P0.0 a
P0.3) leer la informacin que se sacar por el nibbles alto (P0.4 a PO.7) (Figura 6.8).














M.C. Eduardo Snchez Arellano.
- Pgina 71-
DEFSEG BIT4,ABSOLUTE
SEG BIT4
ORG 0H
START: MOV A,P0
SWAP A
MOV P0,A
AJMP START
END
En la lnea 1, se hace la lectura del Puerto P0 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 P0, con lo que la lectura del
nibbles bajo pasar al nivel alto del puerto P0, y viceversa.
La lnea 4 es un salto incondicional al comienzo del programa.





















M.C. Eduardo Snchez Arellano.
- Pgina 72-
Ejemplo 6.4 Con trol de un Proceso Industrial Elemental
El siguiente ejercicio muestra cmo realizar el control de un proceso industrial muy
simple, utilizando el 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.

PROCESO
Se trata de controla el nivel de lquido de un depsito, utilizando tres sensores
detectores de niveles A,B y C, Y DOS BOMBAS B1 Y B2 (Figura 5.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.
Actuacin sobre los elementos finales: ACTUADORES.
Sealizacin del proceso: INDICADORES.



M.C. Eduardo Snchez Arellano.
- Pgina 73-
1. Sensores (entradas)
El sensor A seala el nivel mnimo de agua. Por debajo de este nivel, se indicar
<<VACIO>> en el cuadro de INDICADORES.
El sensor B seala el nivel ptimo y cuando se alcance se indicar <<LLENO>>.
El sensor C seala el nivel peligroso e indica <<REBOSE>>.
Los sensores sern ledos por el microcontrolador a travs del Puerto P0
P0.0 A
P0.1 B
P0.2 C
2. ACTUADORES (salidas)
Cuando ninguno de los sensores estn mojados, se entiende que el depsito est vaco y
los actuadores activarn las dos bombas B1 y B2 (P1.0 y P1.1).
Cuando el nivel del lquido toque la sonda B, se desactivar la bomba B2
(P1,00).quedando la bomba B1 activada en modo mantenimiento.
Si el nivel de lquido moja la sonda C (rebose), se desactivar la bomba B1, quedando
las dos bombas, de momento, fuera de servicio.
3. INDICADORES (salidas)
La sealizacin utiliza el puerto P1.
P1.2 VACIO
P1.3 LLENO
P1.4 REBOSE
Y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada. Por ejemplo,
que el sensor B (P0.1) se active cuando el sensor A (P0.0) no lo est, se excita en el cuadro
de indicadores de seal de ALARMA.
P1.2 ALARMA
La figura 5.10 muestra la disposicin de los actuadores, indicadores y sondas.
DEFSEG CONTROL,ABSOLUTE
SEG CONTROL
ORG 0H
MOV DPTR,#0100H ;Inicializacin puntero de TABLA
SAL0: MOV A, P0 ;LEE puerto P0
ANL A, #07H ;Enmascara
MOVC A, @A+DPTR ;Direcciona y captura dato
MOV P1, A ;Acta
JMP LEE
ORG 0100H
DB 07H, 03H, 20H, 09H 20H, 20H, 20H, 18H

END
M.C. Eduardo Snchez Arellano.
- Pgina 74-
Como se puede observar, el programa utiliza el direccionanmiento indexado para
acceder a la informacin escrita previamente el la tabla de datos, situada en las posiciones
de memoria comprendidas entre la 0100H y 0107H.
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 P0.
El tercer bloque enmascara la informacin del puerto P0, dejando solamente los tres
primeros bits tiles de P0.
El cuarto bloque direcciona a la posicin de memoria de la tabla relativa al contenido de
las sondas (ACC) ms (suma aritmtica) el puerto DPTR. El contenido de esa posicin de
memoria direccionada pasa al acumulador.
Es decir, si el estado de las sondas seala A=1, B=1 y C=0 (03H), se realiza el siguiente
acceso a la tabla de datos:
A @A+DPTR, es decir, A (03H + 0100H)
El contenido de la posmem 0103H para el acumulador.
El quinto bloque escribe la informacin leda de la tabla en el Puerto P1.
El contenido de la tabla, segn las directrices dictadas por el algoritmo de control de la
planta, es el siguiente:
0100H 07H ; Activa B1-B2 y seala VACIO
0101H 03H ; Activa B1-B2 y no seala VACIO
0102H 20H ; Seala ALARMA
0103H 09H ; Desactiva B2 y seala LLENO
0104H 20H ; Seala ALARMA
0105H 20H ; Seala ALARMA
0106H 20H ; Seala ALARMA
0107 18H ; Seala LLENO y REBOSE

ENTRADAS SALIDAS
P0.2 P0.1 P0.0 P1.7 P1.6 P1.5 P1.4 P1.3 P1.2 P1.1 P1.0
C B A N.C N.C AL RE LL V B2 B1
0 0 0 0 0 0 0 0 1 1 1
0 0 1 0 0 0 0 0 1 1 1
0 1 0 0 0 1 0 0 0 1 0
0 1 1 0 0 0 0 1 0 0 1
1 0 0 0 0 1 0 0 0 0 0
1 0 1 0 0 1 0 0 0 0 0
1 1 0 0 0 1 0 0 0 0 0
1 1 1 0 0 0 1 0 0 0 0


M.C. Eduardo Snchez Arellano.
- Pgina 75-
INTERRUPCIONES

La comunicacin asncrona de los sistemas perifricos con el microcontrolador, en
ambas direcciones se puede establecer de dos maneras fundamentales:
1. Consultas(polling): Se comprueban cclicamente, mediante instrucciones del programa,
los dispositivos de estado de los dispositivos de E/S. Unas lneas de dilogo (hands-
hake) establecen el protocolo de comunicacin.
2. Interrupcin: Servicio directo entre perifricos y Microcontrolador, siempre que ste
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 considere 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 fig. 2, cuando el perifrico 1 requiere la intervencin del microcontrolador
activa la interrupcin INT1, si est habilitada el sistema atender la peticin y ejecutara el
programa correspondiente de atencin el 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
termina la ejecucin de este subproceso, el CPU vuelve al programa principal, continuando
su tarea cclica justo donde la dej.
Una interrupcin puede ser iniciada:
Por un perifrico o circuito externo ajeno al microcontrolador. (Interrupcin Externa)
Dentro del propio microcontrolador. (Interrupcin Interna)

Toda interrupcin aceptada conduce a la ejecucin de un subprograma especfico cuya
direccin de comienzo se indica en la tabla de vectorizacin.

Cada una de las fuentes de interrupciones pueden ser individualmente habilitadas o
inhabilitadas poniendo a <<uno>> o a <<cero>. El bit correspondiente del registro IE
(Interrupt Enable Register) perteneciente a SFR (Special function Register).



M.C. Eduardo Snchez Arellano.
- Pgina 76-
REGISTROS DE INTERRUPCIONES.
Las interrupciones son controladas mediante la escritura en los registros IE
(Interruption Enable) e IP (Interruption Priority) los cuales fsicamente son representados
en la Figura sig.

IE: 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.
REGISTRO IE (Interrupt Enable Register.)
b7 b6 b5 b4 b3 b2 b1 b0
EA X X ES ET1 EX1 ET0 EX0
BIT NOMBRE Y COMENTARIO
b0 EX0: Control de Interrupcin externa 0. (INT0).
- Si EX0 = 0 inhabilita la interrupcin externa INT0
- Si EX0 = 1 Habilita la interrupcin externa INT0
b1 ET0: - Si ET0 = 1 habilita interrupcin del Timer0.
- Si ET0 = 0 inhabilita interrupcin del Timer0.
b2 EX1: - Si EX1 = 1 habilita Interrupcin externa 1 (INT1).
- Si EX1 = 0 inhabilita Interrupcin externa 1 (INT1).
b3 ET1: - Si ET1 = 1 habilita interrupcin del Timer1.
- Si ET1 = 0 inhabilita interrupcin del Timer1.
b4 ES: - Si ES = 1 habilita interrupcin del puerto serie.
- Si ES = 0 inhabilita interrupcin del puerto serie.
M.C. Eduardo Snchez Arellano.
- Pgina 77-
b5 Reservada.
b6 Reservada.
b7 EA: - Si EA = 1 habilita individualmente a todas las interrupciones que en
este registro estn a uno.
- Si EA = 0 no reconoce ninguna interrupcin.

IP: Cada interrupcin puede programarse individualmente en el nivel 1 o 2 de prioridad,
poniendo a 1 o a 0 los bits de este registro. Una interrupcin de bajo nivel de prioridad se
puede interrumpir por otra de un nivel ms alto. Una interrupcin de alto nivel de prioridad
no puede ser interrumpida por otra interrupcin de un nivel ms bajo.

REGISTRO IP (Interrupt Priority Register.)
b7 b6 b5 b4 b3 b2 b1 b0
X X PT2 PS PT1 PX1 PT0 PX0
BIT NOMBRE Y COMENTARIO
b0 PX0: Si PX0=1 define alta prioridad la interrupcin INT0.
b1 PT0: Si PT0=1 define alta prioridad la interrupcin Timer 0.
b2 PX1: Si PX1=1 define alta prioridad la interrupcin INT1.
b3 PT1: Si PT1=1 define alta prioridad la interrupcin Timer 1.
b4 PS: Si PS=1 define alta prioridad la interrupcin puerto serie.
b5 PT2 : - Si PS=1 define la prioridad a interrupcin Timer2.
b6 Reservada.
b7 Reservada.

Fuente de Interrupcin Bandera que Activa
Externa 0 INT0 IE0
Timer 0 TIMER0 TFO
Externa 1 INT1 IE1
Timer 1... TIMER1 TF1
Puerto Serie... R1 RI
Puerto Serie T1 TI

TABLA DE VECTORIZACION DE LAS INTERRUPCIONES
Fuente de Interrupcin Direccin
Externa 0 INT0 0003H
Timer 0... TIMER0 000BH
Externa 1 INT1 0013H
Timer 1... TIMER1 001BH
Puerto Serie... R1 0023H
Puerto Serie T1 0023H

M.C. Eduardo Snchez Arellano.
- Pgina 78-
En estas 8 direcciones se puede escribir el programa de atencin a la interrupcin o,
como es habitual, mediante un JMP se desva a una zona de memoria de programa ms
amplia.
EL PROCESO DE INTERRUPCION EN LOS MC 8751
Las banderas o indicadores de interrupcin son muestreadas en el estado 5, fase 2
(S5P2) de cada ciclo mquina. El sistema de interrupciones del microcontrolador genera un
LCALL al apropiado vector de interrupciones. Esto se produce salvo que:
EJEMPLO: Este programa pretende simular el funcionamiento de luces deslizantes. Un bit se
desplaza de izquierda a derecha y de derecha a izquierda y excitara 8 leds situados a la
salida del puerto 0 (P0). Cuando por el pin 12(INT0), se presente una transicin, el
microcontrolador ejecutara una rutina, asociada a la interrupcin que consistir en hacer
parpadear diez veces todos los leds del puerto 0 (P0), una vez concluida esta secuencia,
continuar con el programa principal de bits deslizantes.

DEFSEG INTER,ABSOLUTE
SEG INTER

ORG 0H
JMP START
ORG 3H
JMP INTO

ORG 30H
START: MOV TCON,#01H ;Se programa la INT0 por transicin
MOV IE,#081H ;Habilita interrupcin INT0
MOV A,#00H ;Limpia Acumulador
SETB C
SALTO1: RLC A
MOV P0,A
CALL RETARDO
JNB ACC.7,SALTO1
SALTO2: RRC A
MOV P0,A
CALL RETARDO
JNB ACC.0, SALTO2
JMP SALTO1
NOP

RETARDO: MOV R1,#40H
SALTO3: MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,SALTO3
RET

ORG 100H
INTO PUSH ACC
MOV A,PSW
PUSH ACC
MOV A,R0
PUSH ACC
MOV R0,#0AH
SALTO5: MOV P0,#0FFH
CALL RETARDO
M.C. Eduardo Snchez Arellano.
- Pgina 79-
MOV P0,#00H
CALL RETARDO
DJNZ R0, SALTO5
POP ACC
MOV R0,A
POP ACC
MOV PSW,A
POP ACC
RETI
END





























M.C. Eduardo Snchez Arellano.
- Pgina 80-
TEMPORIZADORES Y CONTADORES

INTRODUCION:

El microcontrolador 8751 tiene dos registros temporizadores/contadores
denominados Timer 0 (T0) y Timer 1 (T1).
Los dos timer 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 cada ciclo mquina hasta <<sobrepasar>>
el valor prefijado). As, se puede considerara 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 como counter (contador), el registro es incrementado en respuesta a la
transicin del nivel alto al nivel bajo (flanco decendente) de la seal externa aplicada al (pin
14) para el contador T0 y al (pin 15) para T1. La entrada externa es muestreada durante el
estado 5 de la fase 2(s5p2) de cada ciclo de 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
siguiente ciclo. El nuevo valor de contaje aparece en el registro correspondiente durante el
estado 3 de la fase 1(s3p1) 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
decendente, la mxima razn de contaje es 1/24 de la frecuenia del oscilador.
Los Timer 0 y 1 tienen cuatro modos de operacin.
En la sig. Figura 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>>, mediante el oscilador 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 accona el interruptor
que permite el paso de los impulsos que incrementan los registros de contaje. Este
circuito permite dos opciones: activar el interruptor por software, para ello GATE=0 y
TR1=1, que son bit de imagen pertenecientes a los registros TMOD y TCON, o bien se
acciona por hardware con las seales de nivel alto, aplicadas al pin INT 1, estando
GATE=1 y TR1=1.
M.C. Eduardo Snchez Arellano.
- Pgina 81-
En la parte central se encuentran los registros de contaje, que pueden ser de 8,13 16
bits. Segn el modo de trabajo (TL1,TH1).
A la derecha de los contadores (TL y TH) se encuentra el bit de flag o bandera. TF1, que
seala el overflow o desbordamiento de los contadores.
Finalmente, si la interrupcin correspondiente est habilitada, se producira una
interrupcin.
TIMER 0 (T0) Y TIMER 1 (T1)

TH0-TL0 y TH1-TL1: Timer Register: son pares de registros de 16 bits, que pueden actuar
como temporizadores o contadores.

La funcin como Timer como Counter es seleccionada por el bit de control C/T
perteneciente al registro TMOD (Timer/Counter Mode Control Register). El registro TMOD no
es direccionable <<bit a bit>>. Estos dos timer tienen cuatro modos de operacin y se
seleccionan mediante los bit (M0,M1) en el registro TMOD.

TMOD: Timer/Counter Mode Register: Selecciona el Timer 0 1, el modo de operacin
(Modo 0, 1, 2), si acta como temporizador o como contador, etc.





M.C. Eduardo Snchez Arellano.
- Pgina 82-
REGISTRO TMOD
B7 B6 B5 B4 B3 B2 B1 B0
GATE C/T M1 M0 GATE C/T M1 M0
Timer 1 Timer 0
BIT NOMBRE Y COMENTARIO
B0-B1 MODO M1 M0 MODO DE OPERACION
0 0 0 Temporizador de 13 bits.
1 0 1 Temporizador/Contador de 16 bits.
2 1 0 Temporizador/Contador de 8 bits con Auto-recarga.
3 1 1 Contadores mltiples especficos.
B2 C/t: Selecciona temporizador o contador.
Si C/T=0 entonces funciona como temporizador con los pulsos de reloj internos.
Si C/T=1 entonces cuenta los pulsos que llegan por T0 (pin 14)
B3 GATE: Habilita la entrada exterior INT0 (pin 12)
Si GATE=1 entonces habilita INT0 si TR0=1 control por Hardware.
Si GATE=0 entonces deshabilita INT) y depende exclusivamente de TR0.
(TR0 es un bit del Reg. TCON y se activa o desactiva por software).
B4-B5-B6-B7 Configuracin del Timer 1. Igual que para el Timer 0, sustituyendo:
T0 por T1, INT0 por INT1 y TR0 por TR1

MODO 0: Temporizador/Contador de 13 bits.
Poniendo los bits M0=M1=0 en el registro TMOD se selecciona el modo de operacin
cero (Modo 0). Cuando la cuenta, en los contadores, da una vuelta pasando desde todos
<<unos>> a todos <<ceros>>, se activa la flag de interrupcin TFX (x=0 si se trata del
Timer 0 y x=1 si se trata del Timer 1), siendo ste un bit que pertenece al registro TCON
(Timer/Counter control register), registro direccionable bit a bit.

TCON: Timer/Counter Control Register: Este es un registro que controla fundamentalmente
el modo de operacin de los Timer 0 y 1 en relacin con las interrupciones y los flancos de
activacin de los mismos.
REGISTRO TCON
B7 B6 B5 B4 B3 B2 B1 B0
TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0
BIT NOMBRE Y COMENTARIO
B0 IT0: Control de Interrupcin externa 0. (INT0).
- Si IT0=0 entonces es activada por un nivel bajo.
- Si IT0=1 Entonces es activada por un flanco de bajada.
B1 IE0: Flag de interrupcin para la interrupcin externa 0 (INT0).
M.C. Eduardo Snchez Arellano.
- Pgina 83-
- Se pone a uno cuando se detecta interrupcin externa.
- Se repone automticamente al atender la interrupcin por flanco.
B2 IT1: Control de Interrupcin externa 1 (INT1).
B3 IE1: Flag de interrupcin externa 1 (INT 1).
B4 TR0: Habilita temporizador/contador 0.
- Si TR0=1 entonces habilita temporizador/contador 0.
- Si TR0=0 entonces deshabilita temporizador/contador 0.
B5 TF0: Flag de overflow del Timer 0.
- Se repone automticamente al atender la interrupcin
B6 TR1: Habilita temporizador/contador 1.
B7 TF1: Bandera de Overflow del Timer 1.

La autorizacin para contar pulsos, procedentes del reloj interno o bien del pin 15
(T1) (actuando como contador), se produce en el Timer 1, cuando TR1=1 y las entradas
GATE=0 o INT1=1.
Una aplicacin podra ser, para medir el ancho de pulso a travs del pin INT1 INT0.

EJEMPLO No.1 Timer 0 en Modo 0 como temporizador de 13 bits. El bit 0 del puerto P1
(P1.0), prendera y se apagara en funcin de los valores de carga del Timer 0 (TH0+TL0).

DIAGRAMA DE FLUJO

EJEMPLO No.2 Timer 1 en Modo 1 como temporizador de 16 bits. El bit 0 del puerto P1
(P1.0), prendera y se apagara en funcin de los valores de carga del Timer 1 (TH1+TL1).
DIAGRAMA DE FLUJO

;***** PROGRAMA PARA CONFIGURAR TIMER/COUNTER 1 EN MODO 1 (16 bits) *****

DEFSEG MODO1, ABSOLUTE
SEG MODO1
ORG 0
LJMP INICIO

ORG 30H
INICIO: MOV TMOD,#10H ;M0=1 de Timer1,GATE=0,C/T=0
SETB P1.0 ;Poner a Uno el P1.0
CALL TEMPO ;LLAMA A SUBRUTINA
CLR P1.0 ;PONER A ZERO P1.0
CALL TEMPO ;LLAMADA A SUBRUTINA
JMP INICIO ;REPITE TODO NUEVAMENTE

M.C. Eduardo Snchez Arellano.
- Pgina 84-
TEMPO: MOV TL1,#00 ;Inicializa parte baja de contador a 0
MOV TH1,#00 ;Inicializa parte alta del contador a 1
MOV TCON,#40H ;Inicializa TR1=1 para el conteo
LEER: MOV A,TCON ;lee el contenido del registro
ANL A,#80H ;And para preguntar si flag TF1=1
JZ LEER ;si aun no llega a overflow TF1=0 por lo tanto
ACC=0.
RET

END

EJEMPLO No.3 Timer 1 en Modo 1 como temporizador de 16 bits con arranque por hardware
desde el exterior. El bit 0 del puerto P1 (P1.0), prendera y se apagara en funcin de los
valores de carga del Timer 1 (TH1+TL1) cuando se aplica un nivel alto por el pin exterior 13
(INT 1).

MODO 2: Temporizador/Contador de 8 bits con Auto-recarga.

El modo 2 configura el registro Timer como un contador de 8 bits (TL1) con recarga
automtica. El overflow de TL1 no slo activa el bit de flag (TF1), sino que tambin
<<recarga>> TL1 con el contenido de TH1, por lo que TH1 mantiene los datos iniciales con
que fue cargado.
El funcionamiento es el mismo para Timer 0 y Timer 1.

EJEMPLO No.4 Timer 1 en Modo 2 como temporizador de 8 bits con auto-recarga arranque
por hardware desde el exterior. El contenido de TL1 es enviado por el puerto P0, cuando se
aplica un nivel alto por el pin exterior 13 (INT 1).











M.C. Eduardo Snchez Arellano.
- Pgina 85-
SCON: 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, bit de datos, bit de stop), Velocidad, etc.
REGISTRO SCON
b7 b6 b5 b4 b3 b2 b1 b0
SM0 SM1 SM2 REN TB8 RB8 TI RI
BIT NOMBRE Y COMENTARIO
b0 RI: Bandera de interrupcin de recepcin.
Se activa por hardware al finalizar la recepcin del 8 bit en el modo 0 hacia la mitad
del intervalo de tiempo del bit de stop en los otros modos.
Debe ser desactivado por software.
b1 TI: Bandera de interrupcin de transmisin.
Se activa por hardware al finalizar la tranmisin del 8 bit en el modo 0 al comienzo bit
de stop en los otros modos.
Debe ser desactivado por software.
b2 RB8: En modos 2 y 3 es el 9 bit que se recibe.
- En modo 1, si SM2=0, RB8 es el bit de stop.
- En modo 0, no se utiliza.
b3 TB8: Corresponde al 9 bit de datos en los modos 2 y 3.
Es programable por el usuario. Habitualmente es el bit de paridad.
b4 REN: - Si REN=1 (por software) permite la recepcin.
- Si REN=0 no la permite
b5 SM2: En modo 2 y 3, Si SM2=1 entonces RI no se activar si el 9 bit de datos (RB8) es igual
a cero.
- En Modo 1, si SM2=1 entonces RI no se activar si el bit de stop no se ha recibido.
- En Modo 0, SM2 debe estar a cero.
B6-b7 SM0 SM1 MODO DESCRIPCION VELOCIDAD
0 0 0 Desplaza 8 bit Reloj/12
0 1 1 8 bit-UART Variable
1 0 2 9 bit-UART Reloj/64 Reloj/32
1 1 3 9 bit-UART variable





SBUF: Serial Data Buffer: son dos registros buffer aparentemente separados, pero
fsicamente el mismo, buffer de transmisin y buffer de recepcin. Cuando un dato es
movido a SBUF, este va al buffer del transmisor, cuando un dato es movido de SBUF, este
viene del buffer del receptor.





M.C. Eduardo Snchez Arellano.
- Pgina 86-
PCON: Power Control Register: Para aplicaciones en donde la caracterstica de consumo sea
crtica, la versin CHMOS ofrece dos modos de trabajo de bajo consumo: el modo POWER
DOWN y el IDLE. Tambin ofrece, este registro, posibilidades de variar la velocidad de
comunicacin en el canal serie.
SMOD - - - GF1 GF0 PD IDL
SMOD Dobla el BAUD RATE para el puerto serie cuando se utiliza el timer para generar el BAUD RATE.
GF1 Propsito general.
GF0 Propsito general.
PD Bajo consumo de energa. (80C51 solamente)
IDL Bajo consumo de energa. (80C51 solamente)

You might also like