Sei sulla pagina 1di 87

Microprocesadores y Microcontroladores.

Unidad I

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

• El estudiante adquirirá los conocimentos básicos acerca de los Microprocesadores y


Microcontroladores.
• Realizar Primeras prácticas de control y prueba.

Practicas

‰ Práctica 1 “Operaciones de lectura y escritura en los puertos del Microprocesador.”


‰ Práctica 2 “Operaciones de lectura y escritura en los puertos del 8255.”
‰ Practica 3 “Lectura por un puerto y contenido de la lectura por el LCD.”
‰ Practica 4 “Adquisición de datos mediante ADC 0804”
‰ Practica 5 “Lectura en LCD de un medidor de voltajes.”
‰ Practica 6 “Control de Interrupciones”
‰ Practica 7 “Control del Teclado.”
‰ Practica 8 “Probador de Timer Counter”
‰ Practica 9 “Medidor de RPM.”
‰ Proyecto Final Control de un proceso Industrial.

Presentación del software y equipo para el desarrollo de aplicaciones


• Introducción
• El Macroensamblador:
• Operaciones del editor.
• Operaciones de ensamblado.
• Operaciones de Encadenado.
• Operaciones de Simulación
• Ejecución de programas en el Microprocesador.

M.C. Eduardo Sánchez Arellano.


- Página 2-
Indice General Unidad 1 Microprocesadores
1.1 Introducción a los Microprocesadores ................................................................................................. 4 
1.1.1 Definición del Microprocesador...................................................................................................................... 4 
1.1.2 Diferencia entre el Microprocesador y Microcontrolador................................................................................ 5 
1.1.3 Tipo de Microprocesador según su velocidad y ancho de palabra. ............................................................... 6 
1.2 Arquitectura de los Microprocesadores. .............................................................................................. 7 
1.2.1 A través de diagrama a bloques .................................................................................................................... 7 
1.2.2 Arquitectura externa del microprocesador (terminales) ............................................................................... 14 
1.3 Conexión del Microprocesador con Dispositivos ............................................................................... 17 
1.3.1 Memoria ....................................................................................................................................................... 18 
1.3.1.1 Organización de la Memoria en el Microcontrolador 89C51. ....................................................................................... 18 
1.3.1.2 Memoria de Programa Eprom ó Flash ......................................................................................................................... 20 
1.3.1.3 Memoria de Datos (Ram). ............................................................................................................................................ 24 
1.3.1.4 Área de Direccionamiento Directo é Indirecto. ............................................................................................................ 24 
1.3.1.5 Área de Registros ó Funciones Especiales. ................................................................................................................ 25 
1.3.2 Perifericos .................................................................................................................................................... 28 
1.3.2.1 Interfase Periferica Programable PPI 8255 ................................................................................................................ 28 
‰  Funcionamiento y Control del Displey de Cristal Líquido (LCD) ..................................................................................... 38 
1.3.2.2 Interrupciones (Intel) .................................................................................................................................................... 45 
‰  Tipos de Interrupciones. ................................................................................................................................................. 45 
‰  Niveles de Prioridad ........................................................................................................................................................ 46 
1.4 Lenguaje Ensamblador del Microprocesador .................................................................................... 49 
1.4.3 Modos de Direccionamiento ........................................................................................................................ 50 
1.4.5 Conjunto de Instrucciones ........................................................................................................................... 56 
1.4.5.1 Instrucciones de Transferencia de datos. .................................................................................................................... 57 
1.4.5.2 Instrucciones Aritmeticas ............................................................................................................................................. 64 
1.4.5.3 Instrucciones Logicas .................................................................................................................................................. 66 
1.4.5.4 Instrucciones Booleanas .............................................................................................................................................. 68 
1.4.5.5 Instrucciones de Salto.................................................................................................................................................. 71 
1.4.5.6 <<SET>> de Instrucciones Familia –51 ....................................................................................................................... 76 
1.5 Temporizadores y Contadores (Intel) ................................................................................................ 83 
1.5.1 introducion: .................................................................................................................................................. 83 
1.5.2 Timer 0 (T0) Y Timer 1 (T1) ......................................................................................................................... 83 

M.C. Eduardo Sánchez Arellano.


- Página 3-
1.1 Introducción a los Microprocesadores
1.1.1 Definición del Microprocesador.

Antes de comenzar a analizar los microprocesadores modernos, se debe primero entender qué
fue lo que paso con estos dispositivos en los primeros años.

La primera computadora digital electrónica fue construida por un equipo dirigido por los ingenieros
John Mauchly y John Eckert, de la universidad de Pennsylvania, en 1946. Esta máquina electrónica fue
llamada ENIAC (Electronic Numerical Integrator and Computer), tenía más de 18000 bulbos y consumía
200 Kw.

Tiempo después, cuando se integró a este equipo el Ing. y matemático Húngaro, naturalizado
norteamericano, John Von Neumann fue diseñada una nueva computadora llamada EDVAC (Electronic
Discrete Variable Automatic Computer). Las ideas de Von Neumann resultaron tan fundamentales para su
desarrollo, que es considerado el padre de las computadoras.

Estas ideas consistieron en permitir que en la memoria coexistieran datos con instrucciones para que
la computadora pudiera ser programada por medio de software y no por medio de hardware. Alrededor de
este concepto gira toda la evolución de la industria y la ciencia de la computación.

Más adelante, se utilizaron los transistores y los componentes electrónicos de estado sólido para
construir las poderosas computadoras de la década de 1960. Con el advenimiento, de los circuitos
integrados se llegó al perfeccionamiento del microprocesador.

Evolucion de los Microprocesadores.


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, según las normas actuales, porque sólo direccionaba 4096 localidades de 4 bits en la
memoria. El 4004 ofrecía sólo un conjunto de 45 instrucciones diferentes. Como consecuencia, el 4004
sólo se podía emplear en aplicaciones limitadas, como en los primeros juegos de vídeo y en
controladores pequeños basados en microprocesadores. Cuando surgieron aplicaciones más complejas
para el microprocesador, el 4004 resultó inadecuado.

M.C. Eduardo Sánchez Arellano.


- Página 4-
El Microprocesador de 8 bits

Más tarde, en 1971, al percatarse que el microprocesador era un producto, viable para
comercialización, Intel Corporation produjo el 8008, el primer microprocesador de 8 bits. El tamaño
ampliado, de la memoria (16K * 8) y las instrucciones adicionales (un total de 48). Con este nuevo
microprocesador se lograron aplicaciones más avanzadas.
Conforme los ingenieros desarrollaban usos más 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 propias versiones de los procesadores de 4 y de
8 bits. En la tabla 1-1 se enumera muchos de estos primeros microprocesadores.

AÑO 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.


Intel 8085, Mostek 6502
1976 Aparece Apple iniciando el auge de las microcomputadoras.

1978 Motorola 6809 Mejor microprocesador de 8 bit.


Tabla 1-1

1.1.2 Diferencia entre el Microprocesador y Microcontrolador

En el año de 1971 cuando surge el primer microprocesador de 8 Bit Intel, las técnicas de diseño
de los equipos de instrumentación y control sufrieron un cambio. Los fabricantes de microprocesadores,
conscientes de la importancia de este mercado, pusieron a disposición de los ingenieros una gran
variedad de circuitos integrados complementarios los cuales constituyen, para cada fabricante, su familia.
En el año de 1976, gracias al aumento en la densidad de integración, 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 mínimo. A este
nuevo circuito integrado se le denominó MICROCONTROLADOR.

M.C. Eduardo Sánchez Arellano.


- Página 5-
Figura 1.1

1.1.3 Tipo de Microprocesador según su velocidad y ancho de palabra.


Microprocesador Año Bus Bus Datos Bus de Coprocesador Memoria No.de Transist.
Interno Direcciones Caché
8088 1979 16 bits 8 bits 20 bits 8087 28 mil
8086 1978 16 bits 16 bits 20 bits 8087 29 mil
80286 1982 16 bits 16 bits 24 bits 80287 130 mil
386SX 1988 32 bits 16 bits 32 bits 80387SX 275 mil
386SL 1990 32 bits 16 bits 32 bits 80387SX Externa 805 mil
386DX 1991 32 bits 32 bits 32 bits 80387 275 mil
486SX 1991 32 bits 32 bits 32 bits 80487SX Incorporado 1,185 mil
486SL 1992 32 bits 32 bits 32 bits 80487SX Incorporado 1,185 mil
486DX 1989 32 bits 32 bits 32 bits Incorporado Incorporado 1,200 mil
486DX2 1992 486DX con reloj interno de doble frec que el externo 1,250 mil
486DX4 1994 486DX con reloj interno de cuádruple frec que el externo
PENTIUM 1993 32 bits 64 bits 32 bits Incorporado 2(Incorp) 3,100 mil
P6 1995 6,000 mil
Tabla 1.2

M.C. Eduardo Sánchez Arellano.


- Página 6-
1.2 Arquitectura de los Microprocesadores.

1.2.1 A través de diagrama a bloques

El CPU (Unidad Central de Procesamiento) es el corazón de toda µP, es el encargado de


decodificar las instrucciones, hacer más eficientes las operaciones aritméticas, y controlar algunas otras
partes dela µP. Cuenta con cuatro partes básicas que hacen los “verdaderos cómputos”.

(1) Decodificador
Acumulador. (ACC) de Instruccion (2)
(4) Unidad
Reg de Instrucción. Aritmetica.
Timing and y Logica.
Contador del Programa Control.
(3) (ALU)

Figura 1.2

1) Los Registros: Son localizaciones que sirven para almacenar temporalmente datos, pueden ser de 8
o de 16 bits. Los tres registros más usados son, el Acumulador, el Contador del Programa y el
registro de instrucciones que son de propósito específico. El registro de Instrucciones es usado para
almacenar la instrucción que se está ejecutando en ese momento por el microprocesador. El
contador de Programa contiene la dirección de la siguiente instrucción del programa.

2) La unidad aritmético-lógica (ALU, Arithmetic-logic unit): Es una red combinacional que acepta
dos palabras de datos y una palabra de control que especifica el tipo de operación 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 operación especificada y genera una palabra de salida que representa el
resultado de la operación aritmética o lógica y un conjunto de señales de estado que indican, por
ejemplo, si se produjo un acarreo o desbordamiento aritmético. La palabra resultado se puede dirigir
a cualquiera, de los registros internos o al bus de datos. El destino específico se define por la unidad
de control, dependiendo de la naturaleza de la Operación que se esta realizando. Las señales de
estado se dirigen a un registro interno específico del procesador para almacenamiento, denominado
registro de códigos de condición.

M.C. Eduardo Sánchez Arellano.


- Página 7-
3) El Circuito de temporizador y control: Es una red secuencial que acepta un código que define la
operación que se va a ejecutar y luego prosigue a través de una secuencia de estados, generando
una correspondiente secuencia de señales de control. Estas señales de control incluyen el control de
lectura – escritura y señales de dirección de memoria válida en el bus de control del sistema. Otras
señales generadas por el controlador se conectan a la unidad aritmética – lógica y a los registros
internos del procesador para regular el flujo de información en el procesador y a, y desde, los buses
de dirección y de datos del sistema.

4) El circuito de decodificación: Involucra el proceso de trasladar un patrón binario en una operación


o secuencia de operaciones. Por ejemplo si el siguiente patrón binario 10111001 representa “ADD”,
el circuito de decodificación lo reconoce y manda señales a todas las otras partes del µP para que
ocurra la decodificación.

“Arquitectura Von Neumann del Microprocesador”

Figura 1.3

M.C. Eduardo Sánchez Arellano.


- Página 8-
El Acumulador: El Acumulador almacena temporalmente datos para ser procesados por la ALU,
y también guarda el resultado de las operaciones aritméticas y lógicas. Suelen tener el mismo número de
bits que el bus de datos. Por ejemplo, dos palabras binarias se pueden sumar, cargando la primera en el
acumulador A y sumandola a la segunda, cargando el resultado en el acumulador y después 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 operación, la salida del
Acumulador se conecta al bus de datos, de modo que los resultados se transfieren a memoria.

El contador de programa (PC): Es un registro de 16 bits que contiene la dirección 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 dirección, se
modifica de modo que contiene siempre la dirección de la palabra siguiente del programa.

Figura 1.4 Pin Out del Microprocesador 8080

El puntero de pila (SP, stack pointer): El puntero de pila es, un registro de autoincrementación
y autodecrementación, que significa que cada vez que se proporciona un dato su contenido se

M.C. Eduardo Sánchez Arellano.


- Página 9-
incrementa o decrementa automáticamente. En los microprocesadores, el puntero de pila contiene la
dirección de la siguiente posición de memoria vacía en la pila. A continuación, proporciona esta dirección
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 dirección de retorno cuando las transferencias de control a
subrutinas o rutinas de interrupción de servicios.

Fig. 1.5
El registro de códigos de condición: (PSW) ó (CCR) Almacena la información que describe los
resultados de operaciones anteriores. Esta información se almacena asignando un bit en el registro. En
algunos microprocesadores, el registro del código de condición. 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 aritmético. 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 códigos de condición 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 cálculos aritméticos con datos codificados en
BCD. Los bits C, V, Z, N y H se ponen a 1, o a 0, automáticamente por el procesador, dependiendo de la
naturaleza de la operación que se está ejecutando y el resultado de está operación, además, 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 Sánchez Arellano.


- Página 10-
Fig. 1.6 Pin Out del Microprocesador Motorola MC6800

Fig. 1.7 Pin Out del Microprocesador Mostek 6502

M.C. Eduardo Sánchez Arellano.


- Página 11-
2.1 Arquitectura de los Microcontroladores Intel
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.
♦ 4 Kbyte de Flash (89C51) ó 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 eléctrico.
♦ Ampliación del set de instrucciones con algunas muy potentes para la adquisición y tratamiento
de datos, tablas, multiplicación, división, etc.
♦ Instrucciones lógicas y de brinco orientadas al proceso de señales bit a bit (procesador
booleano).
♦ Espacios de la memoria de programa y de datos separadas (memoria segregada).
♦ Protección de la memoria de programas (encriptación).
♦ Comunicación serie estándar con otros sistemas. Tipo Full-Duplex.
♦ 5 interrupciones programables con niveles de prioridad.

En estos momentos los MICROCONTROLADORES de 8 bits son el estándar para aplicaciones en


controladores de mediana complejidad, por su facilidad de manejo y su alto nivel de prestaciones.

Además la arquitectura permite que el Microcontrolador sea utilizado como Microprocesador.


Naturalmente esto trae como consecuencia una reducción de su capacidad autónoma de controlar
periféricos a través de sus puertos.
Características de la Familia de MICROCONTROLADORES Intel.
Con ROM Sin ROM con EPROM ROM RAM TIMER TECNOLO
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 4K 128 2 HMOS
8051AH 8031AH 8751H 4K 128 2 HMOS
8052AH 8032AH 8752BH 8K 256 3 HMOS
80C51BH 80C31B 87C51 4K 128 2 CMOS
TABLA 1.3

M.C. Eduardo Sánchez Arellano.


- Página 12-
ARQUITECTURA BÁSICA DE LOS MICROCONTROLADORES 8051

Figura 1.9
Fiugura 1.8 Diagrama General De Los Microcontroladores 8031-8051-89C51-8751

Figura 1.9 Diagrama espesifico de los Microcontroladores 8031-8051-89C51-8751

M.C. Eduardo Sánchez Arellano.


- Página 13-
1.2.2 Arquitectura externa del microprocesador (terminales)

Figura 1.10
Descripción de las Terminales:

Vcc: Voltaje de alimentación positiva (+5 Volts.)

Vss: Conexión a tierra (0 volts).

Puerto0 (P0): Se encarga de multiplexar en el tiempo por sus 8 líneas la parte baja del Bus de
direcciones durante el acceso a la memoria externa, y el Bus de datos.

Puerto1 (P1): Este puerto además de ser de proposito general también recibe la parte baja de
direcciones, durante la programación y verificación de la memoria EPROM interna.

Puerto2 (P2): El puerto 2 emite la parte alta del Bus de direcciones en los accesos de memoria externa
cuando utilizan 16 bits de dirección (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).

Puerto3 (P3): Este puerto puede usarse para propósito 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.

M.C. Eduardo Sánchez Arellano.


- Página 14-
Pin Descrip Funciones
10 P3.0 RXD (Entrada puerto Serie)
11 P3.1 TXD (Salida puerto serie)
12 P3.2 INTO (Interrupción 0. Externa) Neg.
13 P3.3 INT1 (Interrupción 1. Externa) Neg
14 P3.4 T0 (Entrada externa. Timer 0)
15 P3.5 T1 (Entrada externa. Timer 1)
16 P3.6 WR (Autorización escritura de datos) Neg.
17 P3.7 RD (Autorización escritura de datos) Neg.
TABLA 1.4

EA/VPP: (External Access), cuando se mantiene un nivel alto, se ejecuta sólo 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 dirección del programa.

Es decir cuando EA=1 actúa como MICROCONTROLADOR.


EA=0 actúa como MICROPROCESADOR.

VPP: Es el voltaje de programación de la EPROM Interna.

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 emisión del reloj.

PROG: Es el pin de entrada de los pulsos de programación de la memoria EPROM lo utiliza solamente el
programador de micros.

PSEN: Es la señal 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 señal PSEN. PSEN
no se activa cuando se está ejecutando el programa de la ROM o EPROM interna.

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 cerámico.

Figura 1.11

M.C. Eduardo Sánchez Arellano.


- Página 15-
RESET: Señal de inicialización 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 automático conectando el pin
RST a Vcc mediante un capacitor de 10 μF y a tierra medinte una resistencia de 8.2 kΩ .

Figura 1.12

M.C. Eduardo Sánchez Arellano.


- Página 16-
1.3 Conexión del Microprocesador con Dispositivos

Una característica importante de este Microcontrolador es que los puertos pueden ser utilizados
como buses de direcciones, de datos y control, debido a estas caracteristicas se dice que el
Microcontrolador puede trabajar 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 Microprocesador de un sistema externo con unas capacidades
de expansión definibles por el usuario. Naturalmente, en estas condiciones, le queda como puerto
íntegro, para el control de periféricos, el puerto P1 y parte del puerto P3, puesto que hay señales que se
utilizan para el control del sistema (bus de control).

Figura 1.13 Circuito de Microprocesador.

M.C. Eduardo Sánchez Arellano.


- Página 17-
1.3.1 Memoria
1.3.1.1 Organización de la Memoria en el Microcontrolador 89C51.

Las memorias son dispositivos que almacenan el programa y los datos. En esencia la memoria es
un grupo de celdas de almacenamiento. Cada celda puede almacenar un bit de información el cual puede
ser 1 ó 0. Por ejemplo la sig. Figura muestra un grupo de 8 celdas o bit almacenados como un patrón
binario que representa la letra “P”.

0 1 0 1 0 0 0 0

Otras letras ó otros tipos de información requieren otros tipos de combinación. La mayoría de los
microprocesadores almacenan instrucciones y datos en grupos de 8 bits (1 Byte). Para almacenar más de
una letra es necesario más de un byte.
0 1 0 0 1 0 0 1 =I 105
0 1 0 1 0 1 0 0 =T 106
0 1 0 0 1 1 1 0 =N 107
Cada byte almacenado en memoria tiene una dirección. Por ejemplo ITN puede estar almacenado en las
direcciones 105 a 107. Los µP de 8 bit son capaces de direccionar 65,536 bytes.

MEMORIA DE PROGRAMAS Y MEMORIA DE DATOS.


Los MICROCONTROLADORES 8751 tienen separados los espacios de direcciones para
memoria de programa y memoria de datos como muestra la siguiente figura.

M.C. Eduardo Sánchez Arellano.


- Página 18-
La memoria de programa sólo puede ser leída y tiene como máximo 64K byte externos.
(Internamente el 89C51 es de 4K byte). La señal de autorización de lectura en la memoria de programa
externa es PSEN. El pin EA del MICROCONTROLADOR puesto a Vcc (+5V) indica que el programa
busca direcciones desde la posición 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 búsqueda de direcciones
del programa se dirige a la memoria externa en todo momento (Funciona como un Microprocesador).

Ciclo de lectura en la memoria externa de programas


Para acceder a la memoria externa del programa se utiliza la señal PSEN (Program Store
Enable) como señal de autorización de lectura.
La señal ALE <<latchea>> el byte bajo del bus de direcciones en el primer estado (ciclo de reloj),
y así permite direccionar, durante todo el ciclo de instrucción, mientras esas mismas líneas son utilizadas,
en el resto del ciclo de instrucción, como bus de datos. En la Figura 1.14 se puede observar que la
lectura en la memoria de programas se realiza cuando PSEN está a nivel bajo, siendo el resto de las
líneas de dirección las que establecen la posición de menoria exacta del byte de instrucción u operando
que ha de ser leído.
Si el usuario escribe en el Puerto P0 durante el ciclo de búsqueda en la memoria externa, el byte
de código puede ser modificado. 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 el pin EA es activo (0), caso de la Figura 1.14

M.C. Eduardo Sánchez Arellano.


- Página 19-
2. Cuando el contador de programa (PC) contiene un número más grande que 0FFFH para el 8051.

1.3.1.2 Memoria de Programa Eprom ó Flash


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.

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 1.4
Una interrupción puede ser provocada de manera externa o de manera interna, es decir puede
ser producida por un periférico externo o por software. La interrupción con más prioridad es RESET la
cual no puede ser enmascarada.

Cuando un RESET ocurre el programa comienza a partir de la dirección 0000H, del programa.
Cuando una interrupción es producida, el Contador de Programa (PC) almacena su
contenido temporalmente dentro del SP (apuntador de apilamiento) y se carga con la dirección de la
localidad donde se encuentra la rutina de servicio de la interrupción correspondiente. Una vez
posicionado en esa localidad deberá de comenzar la ejecución de la rutina de servicio, hasta que
encuentre la instrucción RETI, que le permitirá al PC recuperar nuevamente su valor original almacenado
en el SP, y continuar con el programa anterior a la interrupción.

Por ejemplo a la interrupción 0, se le asigna la localidad 0003H, si la interrupción no se utiliza,


esta localidad puede utilizarse para propósitos generales del programa, si la interrupción ha sido
permitida, (estableciendo el bit correspondiente dentro del registro de control IE), en el momento que
exista una activación de la interrupción (estado bajo en la línea 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.4 Anterior el intervalo físico entre dos interrupciones es de
8 bytes, espacio capaz de albergar una pequeña rutina, pero si éste no fuera suficiente se desviaría el
contador del programa (PC) mediante una instrucción 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 selección se realiza por hardware, con la señal EA (External Access). Conectado a Vcc ó
Vss respectivamente.

M.C. Eduardo Sánchez Arellano.


- Página 20-
El hardware de configuración del Microcontrolador como Microprocesador utilizando memoria de
programa externa se muestra en la Fig 1. 12
Se puede observar en al Figura 1.14 que las 16 líneas de dirección corresponden al Puerto 0 y al
Puerto 2, que están dedicadas como bus de direcciones; aun más el Puerto 0 sirve como bus de
direcciones y bus de datos multiplexado en el tiempo. Esta operación característica de la familia de
Microprocesadores Intel, se realiza de la forma siguiente.

Figura 1.15
• El Puerto P0 emite el <<byte bajo>> del contador del programa PC (PCL). Una vez estabilizada la
señal sobre P0, la señal ALE (Address Latch Enable) introduce esta dirección dentro del circuito
integrado latch 74LS373, que pasa a apuntar la dirección 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 código de
instrucción a través del Puerto P0.
Para un mejor entendimiento y seguimiento de los diagramas de tiempos, en la figura 1.13 se
dibuja un circuito esquematico en el que aparece el microcontrolador comandando una memoria RAM
(6116) y una memoria EEPROM (2816).

M.C. Eduardo Sánchez Arellano.


- Página 21-
Figura 1.16
En las siguiente Fig. Se muestra el funcionamiento y diagramas de tiempos de esta operación.

Figura 1..17
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 señal 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 señal de reloj de una frecuencia de 12 Mhz, la duración
del ciclo maquina será de 1 μsegundo.

M.C. Eduardo Sánchez Arellano.


- Página 22-
La secuencia de búsqueda/ejecución son las mismas, sea la memoria de programas interna o
externa al Microcontrolador; es decir, los tiempos de ejecución no dependen de que se utilice la memoria
interna o externa.
La figura 1.15 muestra el diagrama de tiempos de las señales implicadas en la secuencia de búsqueda,
cuando la memoria de programa es externa. La señal 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 más 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 emisión de direcciones por P0 y P2, y las señales ALE y PSEN. La señal ALE se
utiliza para latchear el <<byte bajo>> de direcciones dentro del latch.
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 señal de reloj externo. No obstante, como se puede ver en la
figura 3.4, cuando se accesa a un operando utilizando la instrucción MOVX, la señal ALE desaparece.

Figura 1.18

M.C. Eduardo Sánchez Arellano.


- Página 23-
En la figura anterior se pudo observar cómo se realiza un acceso a la memoria externa de
programas para tomar una instrucción y en el segundo ciclo de accede a la memoria de datos externa
para tomar datos.
1.3.1.3 Memoria de Datos (Ram).
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
SFR
Solo Directo. 64 KBytes
80
Memoria Externa
7F
Directo é
Indirecto
00

0000
RD WR
FIG. 1.19
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),

1.3.1.4 Área de Direccionamiento Directo é 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 dirección 00H a 1FH (32 bytes). Después de un Reset, el banco
operativo por default es el banco 0. La selección de otro banco de registros debe hacerse por software
escribiendo en el registro de estado PSW.
Dirección Inicial Dirección Final
00H Banco 0 07H
08H Banco 1 0FH
10H Banco 2 17H
18H Banco 3 1FH

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 localización de memoria.

M.C. Eduardo Sánchez Arellano.


- Página 24-
ƒ SUBÁREA 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

ƒ SUBÁREA SCRATCH PAD:


La memoria scratch pad se entiende como la memoria común es decir un block de notas de
rápido 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

1.3.1.5 Área de Registros ó Funciones Especiales.


La sig. Tabla muestra los registros especiales que utiliza el 8751, así como sus direcciones.
No. Símbolo Nombre Dirección
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 autorización 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 comunicación serie. 98H
21. SBUF Serial Data Buffer Buffer de datos de comunicación serie. 99H
22. PCON Power Contol Control de consumo de potencia. 87H
*= Registros Direccionable bit a bit. Tabla 3.2

ACC: Acumulador: Es un registro de propósito general y por su frecuencia de intervención, el más


importante.

B: Registro B es usado durante operaciones de multiplicación y división, para otras instrucciones puede
ser tratado como un registro común.

M.C. Eduardo Sánchez Arellano.


- Página 25-
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 después 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.

PSW: Program Status Word: Contiene información del estado del CPU en cada ciclo de instrucción.
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 número de unos en el ACC es impar.
- Si P=0 el número de unos en el ACC es par.
b1 Bandera disponible por el usuario.
b2 OV: Bandera de Overflow.
b3-b4 RS0-RS1: Selección 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 propósito general. Definida por el usuario.
b6 AC: Bandera de acarreo Auxiliar. Para operaciones en BCD.
b7 C: Bandera de Acarreo.

Ciclo de lectura (RD) en la memoria externa de datos


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

Ciclo de escritura (WR) en la memoria externa de datos


Para la escritura en la memoria externa de datos utiliza la señal de control WR(función alternativa
P3.6) y puede utilizar los 16 bits de dirección (MOVX @DPTR,A) o bien 8 bits (MOVX @Ri,A).
En el ciclo de escritura, el byte de dato debe permanecer sobre el Puerto P0 antes y después de
que la señal de control de escritura WR sea desactivada.

M.C. Eduardo Sánchez Arellano.


- Página 26-
En general, tanto para la lectura como para la escritura, cuando una dirección de 16 bits es
utilizada (MOVX @DPTR), el byte alto de dirección sale por el Puerto P2, donde permanecerá mientras
dura el ciclo de lectura o escritura.
Si se utiliza una dirección de 8 bits (MOVX @Ri), el contenido del Puerto P2 en el SFR
permanece sobre los pines de P2 durante todo el ciclo de acceso a la memoria externa.
Resumiendo, si se utilizan los puertos para comandar unidades de memoria externa o interface,
los puertos quedarán en esta situación:
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.

M.C. Eduardo Sánchez Arellano.


- Página 27-
1.3.2 Perifericos
Puertos de Entrada/Salida:

Un Microprocesador tiene un camino para comunicarse con el mundo real, y este camino sirve
para introducir datos y obtener resultados. Los puertos de entrada y salida son circuitos que auxilian al
Microprocesador a comunicarse con los humanos o a controlar un proceso. Son normalmente llamados
Peripheral interface. Estos chips pueden ser programados como entradas o salidas del Microprocesador.

Si el µP es usado en un proceso de control, los componentes de entrada son llamados


transductores (Termistores, Termocolples etc.). Un transductor convierte una cantidad física analógica
como temperatura o presión en una cantidad eléctrica. Esta cantidad puede ser amplificada o procesada
antes de convertirla en una señal digital. Por ejemplo en un sistema de control con retroalimentación
como el que se muestra a continuación el transductor monitorea la presión dentro de un tubo y
constantemente manda los datos al µP. Un programa es usado para comparar el dato contra un valor de
referencia almacenado en la memoria. Si la presión excede la referencia el µP manda las señales de
salida para cerrar la válvula y hacer sonar la alarma.

C P U (µP)
Memory Rom

In Port. Out Port. Memory Ram

Amplificador Drive
and Circuit.
A/D Converter.

Figura 1.20

1.3.2.1 Interfase Periferica Programable PPI 8255


El 8255 es un dispositivo programable de Entrada/Salida de propósito general diseñado para
usarse con los microprocesadores de INTEL, cuenta con 24 pines de E/S que pueden ser programados
en 2 grupos de 12 pines y puede funcionar en 3 modos de operación.
La configuración funcional del 8255 es programada por medio de software y no es necesaria
lógica digital externa. El bus de salida de datos del 8255 cuenta con un buffer de tres estados
bidireccional, el cual es usado para acoplarse con el sistema. Los datos se transmiten o reciben por el

M.C. Eduardo Sánchez Arellano.


- Página 28-
buffer después de ejecutar una orden de entrada o salida por el Microprocesador. La palabra de control y
la de estado son transferida únicamente atreves del bus de datos.

M.C. Eduardo Sánchez Arellano.


- Página 29-
Funcionamiento del Block de “LECTURA ESCRITURA Y CONTROL LOGICO”

La función de este block de entradas es la de controlar internamente y


externamente la transferencia de los datos y las palabras de control.
Este block acepta entradas de control o direcciones desde el
Microprocesador.

(CS)Chip Select: Una entrada baja en este pin habilita la comunicación entre el 8255 y el Micro.
(RD)Read: Una entrada baja en este pin habilita el 8255 para leer datos del puerto especificado a la
Computadora.
(WR)Write: Una entrada baja en esta pin habilita al 8255 para escribir información del Micro a un puerto
o al registro de control.

M.C. Eduardo Sánchez Arellano.


- Página 30-
(A0 y A1): Estas entradas de señal en unión con las señales (RD) y (WR) controlan la selección de uno
de los tres puertos o del registro de control. Estas señales son normalmente conectadas a los
bits menos significativos de del bus de direcciones (A0 y A1) del Microprocesador.
RESET: Una entrada alta en este pin limpia el registro de control y todos los puertos son puestos en
modo de entrada.
OPERACIÓN BASICA DE LOS PINES A0, A1, RD y WR

A1 A0 RD WR CS OPERACIONES DE LECTURA
0 0 0 1 0 Del Puerto A --> Al bus de Datos
0 1 0 1 0 Del Puerto B --> Al bus de Datos
1 0 0 1 0 Del Puerto C--> Al bus de Datos
OPERACIONES DE ESCRITURA
0 0 1 0 0 Del bus de Datos--> Al Puerto A
0 1 1 0 0 Del bus de Datos--> Al puerto B
1 0 1 0 0 Del bus de Datos--> Al puerto C
1 1 1 0 0 Del bus de Datos-> Reg. de Control
FUNCIONES DE 3 ESTADOS
X X X X 1 Bus de Datos--> 3 Estados.
1 1 0 1 0 CONDICION ILEGAL.
X X 1 1 0 Bus de Datos --> 3 Estados

TABLA 1.6
GRUPO DE CONTROL A Y GRUPO DE CONTROL B.
La configuración funcional de cada puerto es programada por el software del sistema. En
esencia, el CPU manda la palabra de control al 8255. La palabra de control contiene información acerca
del modo de control y sirve para inicializar al 8255.
Cada uno de los grupos de control (Grupo A y Grupo B) acepta comandos de lectura/escritura y
control lógico, recibe la palabra de control desde el bus de datos interno y emite su propio comando que
esta asociado con un puerto.
• El grupo de control A se refiere al puerto A y a los cuatro bit superiores del puerto C.
• El grupo de control B se refiere al puerto B y a los cuatro bits inferiores del puerto C.
• El registro de control solamente se puede escribir y no se puede leer.

PUERTO A, B Y C.
El 8255 contiene tres puertos de 8 bits, puerto (A, B y C). Todos cuentan con buffer en la entrada
y salida y pueden ser configurados con variadas características de funcionamiento por medio de software
pero cada uno tiene su propia personalidad por lo que el 8255 tiene mucha flexibilidad.
PUERTO A: Cuenta con latch/buffer de 8 bit de salida y solamente latch de entrada.
PUERTO B: Cuenta con un latch/buffer de 8 bit de entrada/salida.
PUERTO C: Cuenta con un latch/buffer de salida y un buffer de entrada. Este puerto puede ser dividido
en dos puertos de 4 bit.

M.C. Eduardo Sánchez Arellano.


- Página 31-
SELECCION DEL MODO DE CONTROL.
Cuando un alto es puesto en el pin de reset todos los puertos son puestos en modo de entrada,
después de que el reset es retirado el 8255 mantiene el modo de entrada en tanto no se le mande o
indique alguna instrucción.
El 8255 cuenta con tres modos de operación que pueden ser programados por medio de
software, estos tres modos de operación son los siguientes.
MODO 0 -> BASIC INPUT / OUTPUT
MODO 1 ->STROBED INPUT / OUTPUT
MODE 2 -> BI-DIRECCIONAL BUS.
Los modos de operación para el puerto A y para el puerto B están definidos separadamente, pero
el puerto C esta dividido en dos porciones que son requeridas por el puerto A y el puerto B. Todos los
registros de salida son limpiados cuando el modo de operación es cambiado.

M.C. Eduardo Sánchez Arellano.


- Página 32-
Formato del modo de Definición en la Palabre de Control

MODO DE OPERACION “0”


Esta forma de configuración consta de operaciones de entrada y salida simples para cada uno de
los tres puertos. No requiere señal de “Handshaking” por que los datos son simplemente escritos o leídos
por el puerto especificado.
DEFINICION FUNCIONAL DEL MODO “0”
• Dos puertos de 8-bit y dos puertos de 4 bit.
• Cualquier puerto puede ser configurado como entrada o salida.
• Todas las salidas cuentan con latch.
• Las entradas no tienen latch.
• 16 diferentes configuraciones de entrada/salida son posibles en este modo.

M.C. Eduardo Sánchez Arellano.


- Página 33-
CONFIGURACIONES EN MODO 0.
Ejemplo:
REGISTRO DE CONTROL
D7 D6 D5 D4 D3 D2 D1 D0
1 0 0 0 0 0 0 0
PALBRA DE CONTROL 80H o 128D
Configuracones de Entrada/Salida en Modo 0
HEX DEC PUERTO A PORT C SUP PUERTO B PORT C INF
80H 128 salida salida salida salida
81H 129 salida Salida salida entrada
82H 130 salida Salida entrada salida
83H 131 salida Salida entrada entrada
88H 136 salida Entrada salida salida
89H 137 salida Entrada salida entrada
8AH 138 salida Entrada entrada salida
8BH 139 salida Entrada entrada entrada
90H 144 entrada Salida salida salida
91H 145 entrada Salida salida entrada
92H 146 entrada Salida entrada salida
93H 147 entrada Salida entrada entrada
98H 152 entrada Entrada salida salida
99H 153 entrada Entrada salida entrada
9AH 154 entrada Entrada entrada salida
9BH 155 entrada Entrada entrad entrada
Tabla. 1.8

MODO 1: ENTRADA MEDIANTE HABILITACION


El funcionamiento en Modo 1 hace que el puerto A o el B funcionen como registros de entrada.
Esto permite que los datos externos se almacenen en el puerto hasta que el microprocesador está listo
para leerlos. El puerto C se utiliza también en el funcionamiento en modo 1, no para datos sino para
señales de control o de “reconocimiento” que hacen funcionar al puerto A ó al puerto B como puertos de
entrada mediante una señal de habilitación estroboscópica.
El puerto de entrada mediante la señal de habilitación captura los datos cuando se aplica la señal
STB. Se debe tomar en cuenta que esta señal captura los datos del puerto en la transición de 0 a 1. La
señal STB hace que se capturen los datos en el puerto y también activa la señal IBF (entrada llena) e
INTR (solicitar interrupción).
Una vez que la computadora, por medio de IBF ó INTR recibe aviso de que hay datos de entrada
en el puerto, ejecuta la instrucción IN para leer el contenido del puerto (RD). La acción de lectura del
puerto, lleva a IBF y a INTR a su estado inactivo hasta que haya un nuevo dato en el puerto.

M.C. Eduardo Sánchez Arellano.


- Página 34-
DEFINICION DE LAS SEÑALES PARA ENTRADA EN MODO 1
1. STB. Habilitación estroboscópica: entrada utilizada para cargar datos en el registro del puerto, que
retiene la información y se le da entrada a la computadora por medio de la instrucción IN.
2. IBF. Registro de entrada lleno: Una salida que indica que el registro de entrada contiene información.
3. INTR. Solicitud de interrupción, es una salida que solicita una interrupción. La terminal INTR se activa
con un 1 lógico y se desactiva cuando la computadora da entrada de los datos.
4. PC6, PC7. Las terminales 7 y 6 del puerto C son terminales de E/S de uso general que están
disponibles para lo que se desee.

EJEMPLO DE ENTRADA MEDIANTE HABILITACION.

El teclado es un excelente ejemplo de dispositivo de entrada mediante habilitación. El


decodificador del teclado elimina los rebotes de los interruptores de las teclas y produce una señal de
habilitación estroboscópica siempre que se oprima una tecla y su salida de datos contiene el código
ASCII.

M.C. Eduardo Sánchez Arellano.


- Página 35-
MODO 1 SALIDA MEDIANTE HABILITACION

A continuación se muestra la configuración interna del 8255 cuando funciona como dispositivo de
salida por habilitación estroboscópica en Modo 1. El funcionamiento con salida por habilitación es similar
al Modo 0, execpto que se incluyen las señales de control para que haya un protocolo de reconocimiento.
Siempre que se escriben datos en un puerto programado como salida por habilitación
estroboscópica, la señal OBF (registro de salida, lleno), se activa con un 0 lógico para indicar que los
datos están en el registro del puerto. Esta señal indica que los datos están disponibles para un dispositivo
de E/S externo que, al tomar los datos activa la entrada ACK (reconocimiento) de habilitación al puerto.
La salida ACK desactiva la señal OBF otra vez a un 1 lógico para indicar el registro de salida esta vacío.

Definicion De Señales De Salida En Modo 1

1. OBF. Registro de salida, lleno: Una salida que se pone a 0 siempre que hay salida de datos (OUT)
por el puerto A o el puerto B. Esta señal se desactiva a 1 lógico siempre que el dispositivo externo
retroalimente con el pulso ACK.
2. ACK. Reconocimiento: Es la respuesta de un dispositivo externo con la que indica que recibio los
datos desde el puerto 8255. Un ejemplo de salida mediante habilitacion es la coneccion con una
impresora.

Modo 2 Funcionamiento Bidireccional

En modo 2, que solo se permite para el grupo A, el puerto A se vuelve bidireccional y permite
transmitir y recibir datos por el mismo puerto. Un canal de datos bidireccional es útil cuando se conectan
dos computadoras. También se utiliza para la interface paralela estándar IEEE-488, de alta velocidad
(canal de instrumentacón de uso general, GPIB1). A continuación se muestra la estructura interna de
Modo 2.

1. INTR. Solicitud de interrupción: salida utilizada para interrumpir la computadora para condiciones de
entrada y salida.
2. OBF: Registro de salida, lleno: una salida que indica que el registro de salida contiene datos para el
canal bidireccional.
3. ACK: Reconocimiento.
4. STB: Habilitación:
5. IBF: Registro de entrada lleno:
6. INTE, Habilitación de Interrupción Interna

M.C. Eduardo Sánchez Arellano.


- Página 36-
M.C. Eduardo Sánchez Arellano.
- Página 37-
‰ Funcionamiento y Control del Displey de Cristal Líquido (LCD)
El display de cristal liquido de matriz de puntos puede conectarse directamente, con el
microcontrolador, gracias a que tiene un bus de datos de tres estados, además tiene como característica
un consumo de energía bajo. Todas las funciones requeridas por el LCD se encuentran dentro del circuito
integrado HD44780 de Hitachi el cual cuenta con 192 caracteres o sea el alfabeto completo además de
diversos símbolos.
Con el HD44780 se pueden visualizar 32 caracteres a la vez, en 2 líneas pero si se conecta uno o
más driver LSI HD44100 más caracteres se pueden visualizar.
Este modelo se conecta fácilmente al bus de datos de cualquier microprocesador, mediante las
siguientes terminales.
Asignación de las Terminales pinout de LCD Paralelo:
pin Señal Nivel Función
1 Vss Gnd. Tierra 0v Power Supply
2 Vdd Vcc. 5V Power Supply
3 Vo Voltaje de Contraste.
4 RS H/L RS=0 Entrada de Instrucciones,
RS=1 Entrada de Datos.
5 R/W H/L R/W=0:Data Read, R/W=1:Data Write
6 E H,H->L Enable, señal de Habilitación
7 DB0 H/L Bit menos significativo del Bus de Datos
8 DB1 H/L Bus de Datos
9 DB2 H/L Bus de Datos
10 DB3 H/L Bus de Datos
11 DB4 H/L Bus de Datos
12 DB5 H/L Bus de Datos
13 DB6 H/L Bus de Datos
14 DB7 H/L Bit más significativo del Bus de Datos
Tabla 1.1
EXHIBIDOR ALFANUMÉRICO

• • • • • • • • • • • • • •
14 13 12 11 10 9 8 7 6 5 4 3 2 1

M.C. Eduardo Sánchez Arellano.


- Página 38-
FUNCIONAMIENTO DEL LCD:
El procedimiento para inicializar el display es la siguiente:
1. Primero se determina el tamaño de la interfase a la cual el display se va a conectar así como el
número de líneas del display. El primer Byte de control que se envía al display es el numero 38H, el
cual significa lo siguiente:
Código RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
38H 0 0 0 0 1 1 1 0 0 0

BD5 debe estar a 1, DB4 especifica el tamaño del bus (4 ó 8 bits), y el DB3 el numero de líneas del
display. Se debe dar un retardo de 40μS antes de enviar la siguiente instrucción.
2. Se limpia toda la memoria del display y se regresa el cursor a la posición inicial.
Código RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
01H 0 0 0 0 0 0 0 0 0 1
Esta instrucción toma un tiempo de 1.64 mS.
3. Se establece el movimiento del cursor hacia la derecha, la pantalla del display permanece fija con la
entrada de los caracteres.
Código RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
06H 0 0 0 0 0 0 0 1 1 0
Esta instrucción toma un tiempo de 40μS.
4. Se prende la pantalla del display y se prende el cursor señalando la posición del proximo carácter de
entrada, se desactiva el parpadeo.
Código RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0EH 0 0 0 0 0 0 1 1 1 0
Esta instrucción toma un tiempo de 40μS.
5. A partir de aquí se puede comenzar a enviar los caracteres que se desean mostrar dejando un
tiempo de 40μS como mínimo y colocando RS=1. Por ejemplo se enviara la palabra
“TECNOLOGICO” por lo tanto se escribirá el siguiente código ASCII.
Primero el código de la letra “T”

CODIGO RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
54H 1 0 0 1 0 1 0 1 0 0

T __

Ahora se envía el código de la letra “E”.

CODIGO RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 0 1 0 0 0 1 0 1
45H

M.C. Eduardo Sánchez Arellano.


- Página 39-
T E __

Y así las demás letras.

CODIGO RS R/W DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
43H 1 0 0 1 0 0 0 0 1 1

T E C __

REGISTROS.
El LCD tiene 2 registros de 8-bits, uno es el registro de instrucciones (IR) y otro el registro de
datos (DR).
• Escribir en el registro IR.
El IR almacena código de instrucción para display clear y cursor shift, etc., y también para escribir
una nueva dirección en el registro AC (Address Counter), que es el registro encargado de apuntar, tanto
a la DD RAM (RAM de Datos del Display) como a la CG RAM (RAM Generador de Caracteres).
• Leer del IR.
Permite la lectura del registro AC, del cual sólo son válidos los 7 bits de menos significativos DB0-DB6, el
bit de mayor peso, DB7 informa del estado del Busy Flag o indicador del display Ocupado.
• Escritura en el DR.
Permite escribir en DD RAM o CG RAM donde se encuentre apuntando el registro AC.
• Leer del DR.
RS R/W Operación
0 0 Escribir en IR:Borrar Display, etc., o modificar AC.
0 1 Leer el IR: Leer el AC(DB0-6) y el Busy Flag (DB7).
1 0 Escribir en DR: Escribir en DD RAM o CG RAM
1 1 Leer el DR: Leer de DD RAM o CG RAM
Tabla 1.2
• Busy Flag (BF):
Cuando se encuentra a “1” indica que el LCD está ocupado realizando operaciones internas y no puede
aceptar nuevas instrucciones. Hay que esperar que el Busy Flag valga “0” para enviar la siguiente
instrucción.
• Contador de Dirección (AC):
Indica la dirección donde serán leídos o escritos los datos sobre DD RAM o CG RAM. Este registro puede
modificarse realizando una escritura en el IR.

M.C. Eduardo Sánchez Arellano.


- Página 40-
Además, cuando se escriben o se leen datos en el DD RAM o CG RAM, el AC se incrementa o
decrementa de manera automática de acuerdo con el Modo de Entrada (Entry Mode Set).
• Ram de Datos del Display (DD RAM):
Tiene una capacidad de 80 bytes, 40 por cada línea; lógicamente dependiendo del modelo sólo 16,32,40
ó 80 caracteres podrán ser visualizados a la vez, aunque desplazando (shift) el display podrán irse
visualizando todos los caracteres escritos.
• Generador de caracteres en ROM (CG ROM):
Tiene definido 160 caracteres, en matrices de 5x7 puntos.
• Generador de caracteres en RAM (CG RAM):
Permite definir ocho caracteres, cuyos códigos van desde el 00 al 08.
TABLA DE COMANDOS DE CONTROL (INSTRUCCIONES)
INSTRUCCION RS R/W D7 D6 D5 D4 D3 D2 D1 D DESCRIPCIÓN
0
Clear display 0 0 0 0 0 0
0 0 0 1
Return home 0 0 0 0 0 0
0 0 1 *
Entry mode set 0 0 0 0 0 0
0 1 I/D S
Disp. on/off cont 0 0 0 0 0 01 D C B
Cur o disp shift 0 0 0 0 0 1
S/C R/L * *
Funcion set 0 0 0 0 1 DL
N F * *
Set CG ram addres 0 0 0 1 ACG
Set DD ram addres 0 0 1 ADD (Dirección del Cursor)
Rd busy flag 0 1 BF AC (Address Counter)
Wr dato to CG 1 0 Escribir Datos
Rd dato from CG 1 1 Leer Datos
Tabla 1.3

I/D=1: Increment (+1). I/D=0: Decrement (-1).


D=1: Display ON D=0: Display OFF.
C=1: Cursor ON. C=0: Cursor OFF.
B=1: Blinking. S=1: Accompanies display shift.
S/C=1: Display shift. S/C=0: Cursos move.
R/L=1: Shift to the rigth. R/L=0: Shift to the left.
DL =1: 8 bits. DL =0: 4 bits.
N = 1: 2 líneas. N = 0: 1 línea.
F = 1: 5x10 dots. F = 0: 5x7 dots.
BF =1: operación Interna. BF =0: Puede aceptar operación.

M.C. Eduardo Sánchez Arellano.


- Página 41-
DESCRIPCIÓN DETALLADA DE LAS INSTRUCCIONES:

• Escritura en IR cuando RS=0 y R/W=0.


- Limpiar Display: Borra display, manda cursor al inicio, y pone el Modo de Entrada en Incrementar.
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 0 1

- Cursor a posición inicial.


DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 0 0 0 0 1 *
*No Importa.

- MODO DE ENTRADA (ENTRY MODE SET)


Establece las características de escritura de los datos.
S=1. El display se desplaza al escribir un nuevo carácter.
S=0. El disp. no se desplaza al escribir un nuevo carácter.
I/D=1. Incremento automático del registro AC al escribir.
I/D=1. Decremento automático del registro AC al escribir.

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 0 1 I/D S

- CONTROL DEL DISPLAY.


B=0. Blink OFF, no hay efecto de parpadeo del cursor.
B=1. Blink ON, efecto de parpadeo del cursor rectangular.
C=0. Cursor OFF, el cursor no se visualiza.
C=1. Cursor ON, el cursor es visualizado.
D=0. Display OFF, el display se apaga.
D=1. Display ON, el display se enciende.

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 0 1 D C B

- Deslizamiento (Shift) del Cursor/Display.


R/L=0. A la izquierda.
R/L=1. A la derecha.
S/C=0. El deslizamiento se aplica sobre el cursor.
S/C=1. El deslizamiento se aplica sobre todo el display.

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 0 0 1 S/C R/L * *

- Control para 4 o 8 bits.

M.C. Eduardo Sánchez Arellano.


- Página 42-
Cuando el LCD no se conecta al bus de datos de un microcontrolador o microprocesador de 8
bits, sino que lo hace a un micro de 4 bits, es posible indicarle al LCD que solamente vamos a utilizar los
bits DB7, DB6, DB5 y DB4, para enviarle los datos, y que lo haremos enviando primero el nible alto, y a
continuación el nible bajo del dato.
DL=0. Control con 4 bits. N=0. Una línea. F=0. 5x7 dots.
DL=1. Control con 8 bits. N=1. Dos líneas. F=1. 5x10 dots.
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 DL N F * *

- Poner Dirección CG RAM


El registro AC queda apuntando a la dirección indicada sobre la CG RAM.

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


0 1 CG5 CG4 CG3 CG2 CG1 CG0

- Poner Dirección DD RAM.


El registro AC queda apuntando a la dirección indicada sobre la DD RAM la cual corresponde a la
dirección del cursor.

DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0


1 DD6 DD5 DD4 DD3 DD2 DD1 DD0

• Lectura del IRÆ RS = 0 y R/W = 1.


- Lectura de BF y AC.
El dato recibido indica el contenido del registro AC, es decir, la dirección a donde está apuntando,
bien CG RAM o DD RAM, según lo que hayamos seleccionado con anterioridad. Además, en el bit de
mayor peso se recibe el estado del Busy Flag, indicando si está ocupado o puede recibir un nuevo dato.
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
BF AC6 AC5 AC4 AC3 AC2 AC1 AC0

• ESCRITURA SOBRE DR => RS = 1 Y R/W = 0.


- Escritura sobre CG RAM o DD RAM:
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

• Lectura del DR => RS = 1 y R/W = 1.


- Lectura desde CG RAM o DD RAM:
DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0

M.C. Eduardo Sánchez Arellano.


- Página 43-
JUEGO DE CARACTERES ASCII DEL “LCD”

M.C. Eduardo Sánchez Arellano.


- Página 44-
1.3.2.2 Interrupciones (Intel)
La comunicación asíncrona de los sistemas periféricos con el microcontrolador, en ambas
direcciones se puede establecer de dos maneras fundamentales:
1. Consultas (polling): Se comprueban cíclicamente, mediante instrucciones del programa, los
dispositivos de estado de los dispositivos de E/S. Unas líneas de diálogo (hands-hake) establecen el
protocolo de comunicación.
2. Interrupción: Servicio directo entre periféricos y Microcontrolador, siempre que éste desee establecer
el diálogo. Este servicio tiene la característica de la inmediatez, pueden eliminarse total o
parcialmente los ciclos de consulta y permite inhibir la interrupción cuando se 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 periférico 1 requiere la intervención del microcontrolador activa la
interrupción INT1, si está habilitada el sistema atenderá la petición y ejecutara el programa
correspondiente de atención en la Rutina 1. El mismo procedimiento se establecería para el periférico 2.
La importancia de las interrupciones nace de la necesidad de ejecutar un subproceso en el
instante preciso, y por tanto se considera su intervención <<urgente>>. Cuando termina la ejecución de
este subproceso, el CPU vuelve al programa principal, continuando su tarea cíclica justo donde la dejó.

‰ Tipos de Interrupciones.
Una interrupción puede ser iniciada:
• Por un periférico o circuito externo ajeno al microcontrolador. (Interrupción Externa)
• Dentro del propio microcontrolador. (Interrupción Interna)

Toda interrupción aceptada conduce a la ejecución de un subprograma específico cuya dirección de


inicio se indica en la tabla de vectorización siguiente.

Fuente de Interrupción Bandera que Activa Dirección


Externa 0…………… INT0 IE0 0003H
Timer 0……………… TIMER0 TFO 000BH
Externa 1…………… INT1 IE1 0013H
Timer 1……………... TIMER1 TF1 001BH
Puerto Serie………... R1 RI 0023H
Puerto Serie………… T1 TI 0023H
TABLA DE VECTORIZACION DE LAS INTERRUPCIONES

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 Sánchez Arellano.


- Página 45-
Registros de Interrupciones.
Las interrupciones son controladas mediante la escritura en los registros IE (Interruption Enable)
e IP (Interruption Priority) los cuales físicamente son representados en las siguientes Figuras.

IE: Es un registro para habilitar las interrupciones, Permite que se atiendan todas las interrupciones por el
microcontrolador o sólo las que el usuario considere aceptables.

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 Interrupción externa 0. (INT0).
- Si EX0 = 0 inhabilita la interrupción externa INT0
- Si EX0 = 1 Habilita la interrupción externa INT0
b1 ET0: - Si ET0 = 1 habilita interrupción del Timer0.
- Si ET0 = 0 inhabilita interrupción del Timer0.
b2 EX1: - Si EX1 = 1 habilita Interrupción externa 1 (INT1).
- Si EX1 = 0 inhabilita Interrupción externa 1 (INT1).
b3 ET1: - Si ET1 = 1 habilita interrupción del Timer1.
- Si ET1 = 0 inhabilita interrupción del Timer1.
b4 ES: - Si ES = 1 habilita interrupción del puerto serie.
- Si ES = 0 inhabilita interrupción del puerto serie.
b5 Reservada.
b6 Reservada.
b7 EA: - Si EA = 1 habilita individualmente a todas las interrupciones que en este registro están a uno.
- Si EA = 0 no reconoce ninguna interrupción.

‰ Niveles de Prioridad

IP: Cada interrupción puede programarse individualmente en el nivel 1 o 2 de prioridad, poniendo a 1 o a


0 los bits de este registro. Una interrupción de bajo nivel de prioridad se puede interrumpir por otra de un
nivel más alto. Una interrupción de alto nivel de prioridad no puede ser interrumpida por otra interrupción
de un nivel más bajo.

M.C. Eduardo Sánchez Arellano.


- Página 46-
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 interrupción INT0.
b1 PT0: Si PT0=1 define alta prioridad la interrupción Timer 0.
b2 PX1: Si PX1=1 define alta prioridad la interrupción INT1.
b3 PT1: Si PT1=1 define alta prioridad la interrupción Timer 1.
b4 PS: Si PS=1 define alta prioridad la interrupción puerto serie.
b5 PT2 : - Si PS=1 define la prioridad a interrupción Timer2.
b6 Reservada.
b7 Reservada.

En estas 8 direcciones se puede escribir el programa de atención a la interrupción o, como es


habitual, mediante un JMP se desvía a una zona de memoria de programa más amplia.

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 1 (P1).
Cuando por el pin 12(INT0), se presente una transición, el microcontrolador ejecutara una rutina,
asociada a la interrupción que consistirá en hacer parpadear diez veces todos los leds del puerto 1 (P1),
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 Tek_INTO

M.C. Eduardo Sánchez Arellano.


- Página 47-
ORG 30H
START: MOV TCON,#01H ;Se programa la INT0 por transición
MOV IE,#081H ;Habilita interrupción INT0
MOV A,#00H ;Limpia Acumulador
SETB C
SALTO1: RLC A
MOV P1,A
CALL RETARDO
JNB ACC.7,SALTO1
SALTO2: RRC A
MOV P1,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
Tek_INTO: MOV IE,#0
PUSH ACC
MOV A,PSW
PUSH ACC
MOV A,R0
PUSH ACC
MOV R0,#0AH
SALTO5: MOV P1,#0FFH
CALL RETARDO
MOV P1,#00H
CALL RETARDO
DJNZ R0, SALTO5
POP ACC
MOV R0,A
POP ACC
MOV PSW,A
POP ACC
MOV IE,#081
RETI
END

M.C. Eduardo Sánchez Arellano.


- Página 48-
1.4 Lenguaje Ensamblador del Microprocesador

Todos los modelos de la familia MCS-51 ejecutan el mismo set de instrucciones. Estas
instrucciones están optimizadas para el control de aplicaciones de 8 bits.

Un programa en lenguaje ensamblador es un conjunto de instrucciones que se pueden convertir


en un programa ejecutable en lenguaje máquina. Estas instrucciones se dividen en tres categorías:
1) Pseudoinstrucciones (Directivos), se emplean para proporcionar información con el fin de convertir
el programa de ensamblador a una versión en lenguaje máquina.
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 máquina.

Instrucciones Ejecutables:
Cada instrucción ejecutable en lenguaje ensamblador es una representación simbólica de una
instrucción en lenguaje máquina. Por lo tanto, la instrucción en lenguaje ensamblador debe definir la
operación aritmética - lógica; el modo de direccionamiento y el operando, dirección o desplazamiento de
la dirección cuando sea necesario. Además las instrucciones ejecutables en lenguaje ensamblador
suelen contener una sentencia o comentario que indica la razón fundamental de la instrucción. Por último,
es frecuente asignar una etiqueta, o nombre a una función, para facilitar su referencia. Toda esta
información se organiza en cuatro campos:

Campo Etiqueta. : Campo Operación Campo Operando ; Campo Comentario

Las instrucciones en los microprocesadores son actualmente una secuencia de 0 y 1’s que
representan la operación que se ejecutara. La notación hexadecimal es usada para abreviar la
representación de la instrucción. Una forma fácil de escribir y entender un programa es escribirlo en
Lenguaje ensamblador. En lenguaje ensamblador, la combinación de bits es representada por un nombre
o un mnemónico al cual le corresponde la acción de la instrucción. Por ejemplo la instrucción del 8051
que suma el contenido del registro R7 con el Acumulador A es representada por:
00101111B ó 2FH. En ensamblador ADD A, R7
Esta representación es llamada Lenguaje Maquina debido a que esta representación es la que
utiliza el Microprocesador. Esta instrucción tiene dos campos distintos, estos campos son la operación y
el registro fuente, como se muestra en las tablas de instrucciones.

A continuación se estudiarán los modos de direccionamiento y el set de instrucciones agrupado


por especialidades de la siguiente manera:

M.C. Eduardo Sánchez Arellano.


- Página 49-
• Instrucciones aritméticas.
• Instrucciones lógicas.
• Instrucciones para la transferencia de datos en:
a) RAM interna.
b) RAM externa.
• Instrucciones para el tratamiento de tablas.
• Instrucciones Booleanas.
• Instrucciones de salto.

1.4.3 Modos de Direccionamiento

‰ Direccionamiento Directo.
En este direccionamiento el operando se especifica en la instrucción por un campo de dirección
de 8 bits. Sólo la RAM interna de datos (primeros 128 bytes) y la zona de SFR se pueden direccionar de
esta forma.
Ejemplo:
ADD A, 4CH es decir, suma el contenido del acumulador con el contenido de la
posición de memoria (4CH):
A<-- (A)+(4C)
Nota: Un registro o número entre paréntesis se refiere al contenido. Así
(A) es el contenido del acumulador.
(4C) es el contenido de la posición de memoria 4C.

ADD A, 7FH ;El acumulador es sumado al dato que se encuentra en la dirección 7FH de la Ram
interna y el resultado será almacenado en el acumulador.
MOV A, 2EH ; El Acumulador es cargado con el dato que se encuentra en la dirección 2EH de la
memoria RAM interna.
MOV 3DH, 4EH ; El contenido de la dirección 3DH es cargado con el dato que se encuentra en la
dirección 4EH.

‰ Direccionamiento Indirecto:
La instrucción específica un registro que contiene la dirección 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 sólo puede ser el DPTR.
Ejemplo:
ADD A, @R0 ; Así, si (R0)=4CH la operación será:

M.C. Eduardo Sánchez Arellano.


- Página 50-
AÅ(A)+(4C)

(@) es el indicador del direccionamiento indirecto.


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

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

MOVX @DPTR, A El contenido del acumulador es guardado en la dirección 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 código de operación de la instrucción
especifica con qué registro se opera; es decir, cuando la instrucción es ejecutada se accede a uno de los
8 registros del banco seleccionado y en la mayoría de los casos son más rápidas.
Ejemplo:
MOV Rn,A

Código: 1111 1rrr

Operación: (Rn) Å (A)


Dependiendo del registro implicado el código de instrucción 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
Código: 0111 1rrr
Operación: (Rn) Å #dato.

‰ Direccionamiento Implícito.
En estas instrucciones se especifica, implícitamente, el registro sobre el que van a operar, como el
acumulador, el puntero de datos, etc. No necesitan especificar el operando por que está implícito en el
código de operación.
Ejemplo:
INC A; A Å (A) + 1 Incrementa el contenido del acumulador:
INC DPTR; DPTR Å (DPTR) + 1 Incrementa puntero de datos;
DEC R0; Decrementa el registro R0.

M.C. Eduardo Sánchez Arellano.


- Página 51-
‰ Direccionamiento Inmediato
Al código de operación le sigue una constante en la memoria de programas.
Ejemplo:
MOV A, #255 ; Carga en el acumulador el número decimal 255.
Generalmente se expresan en hexadecimal:
MOV A, #0FFH
o en binario:
MOV A, #11111111B
MOV A, #64H ;El acumulador es cargado con el dato 64H inmediatamente.
ADD A, #120 ;El acumulador es sumado al número 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 sólo es posible en la memoria de programas y sólo permite la lectura. Es
utilizado para la lectura de tablas. Un registro base de 16 bits (el DPTR o el Contador 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 posición 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 dirección 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 dirección formada por la
suma del mismo Acumulador A y el Contador del Programa (PC).

M.C. Eduardo Sánchez Arellano.


- Página 52-
Presentación del Entorno de Programación y Simulación de Microprocesador

1.4.4 CICLO DE INSTRUCCIÓN

La ejecución de un ciclo de instrucción comienza en el estado 1 del ciclo máquina, cuando el


código de operación es almacenado en el Registro de Instrucción.

Como norma general, una instrucción requiere de uno o más ciclos máquinas, en función de:
a) El código de operación
Por ejemplo, la instrucción INC A (figura 3.1 A) tiene 1 de byte de instrucción y requiere 1 ciclo
máquina, la instrucción INC DPTR, también, de 1 byte de instrucción requiere de 2 ciclos máquina (figura
3.1C) y la instrucción MUL AB requiere de 4 ciclos máquina para su total ejecución y ocupa 1 byte en la
memoria.
b) El número de bytes
Por ejemplo, la instrucción MOV A, # data tiene 2 bytes de instrucción y requiere de 1 ciclo máquina
(figura 3.1B). En cambio la instrucción MOV direct, # data al constar de 3 bytes necesita de 2 ciclos

M.C. Eduardo Sánchez Arellano.


- Página 53-
máquina. Esto no ocurre siempre, es decir, a más bytes más ciclos máquina, como puede verse en la
figura 3.1 B correspondiente a la instrucción, MOV A, # data y en la figura 3.1D MOVX A,@Ri. La primera
instrucción tiene 2 bytes y la segunda sólo 1, en cambio la primera requiere 1 ciclo máquina y la segunda
2.
Ante la imposibilidad de establecer una norma o regla que facilite el conocimiento del número de
bytes y ciclo de instrucción se ha editado la tabla 4.5 con el set completo de instrucciones.

Cabe destacar también en la figura 3.1 que en cada ciclo máquina se producen 2 accesos a la
memoria. El primero, si es comienzo de ciclo de instrucción, siempre leerá el código de operación, el
segundo que normalmente se descarta. Se utiliza para leer el segundo byte, operando de la instrucción,
como ocurre en la figura 3.1B.

Operación de Escritura en los Puertos de los Microcontrolador

M.C. Eduardo Sánchez Arellano.


- Página 54-
La operación 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 ejecución de una instrucción que cambia el valor del latch del puerto, el nuevo valor llega al
latch durante el estado 6, fase 2 del final del ciclo de instrucción, según indica la Figura 1.8

Figura 1.14
Antes de comenzar con el estudio y comprobación de los puertos de E/S, se muestra la interface
para la conexión de los puertos a los dispositivos de salida, que en un principio pueden ser unos simples
LED (Figura 1.15).
Para controlar cargas de mayor consumo de energía, como relés, 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.

Figura 1.15

M.C. Eduardo Sánchez Arellano.


- Página 55-
Por esto la activación de estas señales depende del formato de la instrucción. Para la operación
de ESCRITURA en el puerto, la instrucción más habitual es la siguiente:
MOV PX, <DATO> ; PXÅ<DATO>X toma valores 0, 1, 2 y 3 según el puerto.

1.4.5 Conjunto de Instrucciones


El set de instrucciones de Intel MCS-51 se puede dividir según las especialidades:
• Instrucciones de transferencia de datos.
• Instrucciones aritméticas,
• Instrucciones lógicas.
• Instrucciones booleanas.
• Instrucciones de salto.
Las instrucciones aritméticas, lógicas, de transferencia y de salto son comunes en la mayoría de
microprocesadores. Los microcontroladores tiene un área especial de aplicación, que es el área del
control de procesos; en este campo las operaciones están orientadas, muy a menudo, a bits. Los
microcontroladores leen, procesan, escriben e intercambian información con los sistemas exteriores, en
formato <<bit a bit>> o <<palabra a palabra>>. Un procesador booleano con un set de instrucciones
booleanas muy completo se encarga de realizar este tipo de operaciones. Esta particularidad, así como
su inmunidad al ruido eléctrico, le hacen valioso en el mundo del control de procesos industriales.
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 razón de esta diferencia está en la propia tabla y justamente en la columna encabezada
por <<modos de direccionamiento>>. Esto quiere decir que según los direccionamientos una instrucción
puede tener hasta cuatro códigos de operación y operandos distintos. Esta situación se resuelve
utilizando la palabra <byte>, que tomará el siguiente significado (tabla 4.1):

En la tabla Según el modo de Significado


simplificada direccionamiento
<byte> direct Direccionamiento directo. Se refiere a una posmem.
<byte> @Ri Direccionamiento indirecto a través del registro R0 y R1.
<byte> Rr Direccionamiento por registro.
<byte> # data Direccionamiento inmediato. Constante de 8 o 16 bits
TABLA 4.1
En las tablas simplificadas también se indica el posible flag (C= Carry, OV= overflow, AC=
Auxiliar Carry) afectado por la instrucción según el siguiente código:
No es afectado....................................
Sí es afectado...................................... X
Afectado poniéndolo a ...................... 0
Afectado poniéndolo a........................ 1
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 ejecución Se han tomado utilizando como referencia una frecuencia de reloj de 12
MHz.

M.C. Eduardo Sánchez Arellano.


- Página 56-
1.4.5.1 Instrucciones de Transferencia de datos.
Se consideran tres modalidades, según la transferencia se realice sobre:
• La RAM interna.
• La RAM externa.
• La memoria de programa para el tratamiento de tablas.
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


Nemónico Operación Dir Ind Reg Imm ejecución (μ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 instrucción MOV <dest>, <src> permite transferir datos entre alguna de las dos RAM
interna o el espacio de localización del SRF (referencia Figura 2.8) Este tipo de instrucción
permite la transferencia sin el concurso del acumulador.

<dest> = <destino>
<src> = <fuente>

Ejemplo:
Antes de ejecutar la instrucción:
(3A)= 35H : (3D) = 78H
MOV 3AH, 3DH Después de ejecutarla:
(3A)= 78H : (3D) = 78H
• La instrucción 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 instrucción PUSH <src> actúa incrementando el SP (stack pointer = puntero de la pila) y copiando
el dato dentro de la pila. La instrucción POP <dest> actúa decrementando el SP y reponiendo el dato

M.C. Eduardo Sánchez Arellano.


- Página 57-
en su registro. La pila está situada dentro de la RAM interna, por defecto en el banco de registros 1
(véase figura 2.11), pero puede posicionarse en el área SCRATCH PAD, como se ha indicado en el
capítulo anterior.
En resumen, éstas son las operaciones que realiza la unidad de control del microcontrolador.
PUSH <src> POP <dest>
• (SP) Å (SP) +1 <dest> Å ((SP))
• ((SP)) Å <src> (SP) Å (SP) – 1

• La instrucción XCH A,<bite>, intercambia los datos del acumulador y del byte direccionando. La
instrucción XCHD A,@Ri es similar a la anterior, pero sólo implica en el intercambio el nibble bajo; es
una instrucción especializada en la manipulación de datos en el código BCD.
Ejemplos:
Antes de ejecutar la instrucción:
(A)= 37H y (2D) = 23H
XCH A, 2DH Después de ejecutarla:
(A) = 23H y (2D) = 37H
Antes de ejecutar la instrucción:
XCHD A, @R0 (R0) = 2DH = 37H y (A) = 23H
Después de ejecutarla:
(A) = 27H y (2D) = 33H

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. Sólo se puede utilizar el direccionamiento indirecto con este grupo de instrucciones.

Dirección con Nemónico Operación Tiempo de ejecución (μs)


8 bits MOVX A, @Ri Read external RAM @ Ri 2
8 bits MOVX @Ri,A 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 instrucción MOVX A, @Ri o MOVX @Ri,A (siendo Ri,
bien el registro R0 o R1 del banco de registros seleccionado), direccionando con 8 bits o bien 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 sólo se va a utilizar un pequeño espacio de memoria RAM. Existe una

M.C. Eduardo Sánchez Arellano.


- Página 58-
solución intermedia que permite direccionar sólo unos pocos kbytes de RAM externa, pero obteniendo
algunas líneas hábiles del puerto 2 como entradas y salidas (E/S). Esta es la solución que se mostró en
la figura 2.7 del capitulo2. De todas formas la solución adecuada debe ser función de las características
que necesita la aplicación. Suponiendo, en principio, que la implementación de la misma sobre la
elección de los microcontoladores 8052/8051 sea la correcta.
Las líneas de control de lectura y escritura, RD y WR (pines 16 Y 17), sólo son utilizadas cuando
se ejecutan las instrucciones MOVX; si no se va a utilizar memoria RAM externa, es obvio que se
ganarán una líneas 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 ejecución: A Å (F3H)

Después: (A) = 3AH


85H ?
Antes : (A) = 3AH y (R0) = 85H
MOVX @R0,A ejecución: (R0) Å (A)
R1 F3H Después: (85h) = 3AH
R0 85H

¿Qué sucedería si se tuviera que implementar estas instrucciones en al zona de memoria por
encima de la dirección 2000H? Es decir:
Sustituida
85H ------------------- 2085H
F3H------------------- 20F3H
Se llegaría a la conclusión de que no se podría procesar estas instrucciones, contando que los
registros R0 y R1 no pueden direccionar por encima de la posición de memoria FFH. Pero aquí es donde
entran en juego las instrucciones MOVX con el DPTR como operando. La sustitución, en el caso de tener
que operar en el espacio de memoria comprendiendo entre 0000H y FFFFH. Sería:
Sustituida
MOVX A, @Ri -------------------- MOVX A, @DPTR
MOVX @ Ri, A -------------------- MOVX @DPTR,A
Recuérdese que en la tabla 3.4 hay una instrucción que es:
MOV DPTR, # data 16
Con la que se podría acceder a todo el mapa de memoria.

M.C. Eduardo Sánchez Arellano.


- Página 59-
Instruccuiones de Memoria de programas para el tratamiento de tablas.
La tabla 4.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),
obsérvese que las tablas sólo pueden ser leídas y no actualizadas. El nemónico es MOVC (Mover
constante).
Si la tabla accede a la memoria de programa externa, recordar que esta lectura es autorizada por la señal
de control PSEN (pin 29). Obsérvese la figura 2.5 del capítulo anterior.
Tabla 4.6
Nemónico Operación Tiempo de ejecución (μ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.


La primera instrucción de la tabla permite la lectura en tablas con accesos no superiores a 256. El
acceso deseado es cargado en el acumulador, y el data pointer (DPTR) Establece el puntero de
comienzo de la tabla. La lectura es cargada dentro del registro acumulador.
MOVC A, @A+DPTR A Å((A) + (DPTR))
La segunda instrucción es similar a la primera, salvo que el program counter (PC) el que actúa como
indicador de la dirección base de la tabla.
PCÅ (PC) + 1
MOVC A, @A+PC
A Å ((A) + (PC))
Se presenta esta instrucción dentro de una subrutina, estando la tabla de información después de
la instrucción de retorno de la subrutina (RET).
Ejemplo:
Se trata de demostrar el funcionamiento sobre una tabla de 4 datos. A la izquierda aparece el
mapa de memoria del programa
90H
MOV
91H #01H
92H CALL
93H Dire, rutina

A0H INC A
A1H MOVC A, @A+PC
A2H RET
A3H 20H
A4H 21H
A5H 22H

M.C. Eduardo Sánchez Arellano.


- Página 60-
A6H 23H

MOV A, #01H
CALL TABLA
TABLA: INC A
MOVC A. @A+PC
RET
DATO0
DATO1
DATO2
DATO3
Se pretende acceder inicialmente al DATO1, por esta razón 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 instrucción MOVC A, @A+PC el valor del acumulador es 02 y el PC apunta a la instrucción
RET, por lo que la suma A2H + A4H, luego:
AÅ(A4H)

(A) = 21H

M.C. Eduardo Sánchez Arellano.


- Página 61-
Ejemplo 1.6 Control de un Proceso Industrial Elemental
El siguiente ejercicio muestra cómo 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 situación de los
sensores y el otro (de escritura) para enviar la señal a los actuadores.

PROCESO

Se trata de controla el nivel de líquido de un depósito, utilizando tres sensores detectores de


niveles A,B y C, Y DOS BOMBAS B1 Y B2 (Figura 5.9)

He aquí una descripción del proceso, desde el punto de vista de su relación con el mundo exterior, según
los tres tipos de señales principales:
• Entrada de información: SENSORES.
• Actuación sobre los elementos finales: ACTUADORES.
• Señalización del proceso: INDICADORES.

1. Sensores (entradas)
El sensor A señala el nivel mínimo de agua. Por debajo de este nivel, se indicará <<VACIO>> en el
cuadro de INDICADORES.
El sensor B señala el nivel óptimo y cuando se alcance se indicará <<LLENO>>.
El sensor C señala el nivel peligroso e indica <<REBOSE>>.

M.C. Eduardo Sánchez Arellano.


- Página 62-
Los sensores serán leídos por el microcontrolador a través del Puerto P3
P3.0Å A
P3.1Å B
P3.2Å C
2. ACTUADORES (salidas)
Cuando ninguno de los sensores estén mojados, se entiende que el depósito está vacío y los
actuadores activarán las dos bombas B1 y B2 (P1.0 y P1.1).
Cuando el nivel del líquido toque la sonda B, se desactivará la bomba B2 (P1,0Å0).quedando la
bomba B1 activada en modo mantenimiento.
Si el nivel de líquido moja la sonda C (rebose), se desactivará la bomba B1, quedando las dos
bombas, de momento, fuera de servicio.
3. INDICADORES (salidas)
La señalización utiliza el puerto P1.
P1.2Å VACIO
P1.3Å LLENO
P1.4Å REBOSE
Y cuando se produce un fallo (mal funcionamiento) en las sondas de entrada. Por ejemplo, que el sensor
B (P3.1) se active cuando el sensor A (P3.0) no lo está, se excita en el cuadro de indicadores de señal de
ALARMA.
P1.5Å ALARMA
La figura 5.10 muestra la disposición de los actuadores, indicadores y sondas.
DEFSEG CONTROL, ABSOLUTE
SEG CONTROL
ORG 0H
MOV DPTR,#0100H ;Inicialización puntero de TABLA
LEER: MOV A, P3 ;LEE puerto P3
ANL A, #07H ;Enmascara
MOVC A, @A+DPTR ; Direcciona y captura dato
MOV P1, A ; Actúa mandando los datos al P1
JMP LEER
ORG 0100H
DB 07H, 07H, 20H, 09H 20H, 20H, 20H, 10H

END
Como se puede observar, el programa utiliza el direccionanmiento indexado para acceder a la
información 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 dirección de comienzo de la tabla de
datos.
• El segundo bloque lee la información de las sondas a través del Puerto P0.
• El tercer bloque enmascara la información del puerto P0, dejando solamente los tres primeros bits
útiles de P0.

M.C. Eduardo Sánchez Arellano.


- Página 63-
• El cuarto bloque direcciona a la posición de memoria de la tabla relativa al contenido de las sondas
(ACC) más (suma aritmética) el puerto DPTR. El contenido de esa posición de memoria direccionada
pasa al acumulador.
Es decir, si el estado de las sondas señala 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 información leída de la tabla en el Puerto P1.
El contenido de la tabla, según las directrices dictadas por el algoritmo de control de la planta, es el
siguiente:
0100H 07H ; Activa B1-B2 y señala VACIO
0101H 07H ; Activa B1-B2 y no señala VACIO
0102H 20H ; Señala ALARMA
0103H 09H ; Desactiva B2 y señala LLENO
0104H 20H ; Señala ALARMA
0105H 20H ; Señala ALARMA
0106H 20H ; Señala ALARMA
0107 10H ; Señala y REBOSE

ENTRADAS SALIDAS
P3.2 P3.1 P3.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 0 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

1.4.5.2 Instrucciones Aritmeticas


En la tabla 4.2. Se muestra el menú de las instrucciones aritméticas. Se indican en la tabla los
modos de direccionamiento que permite la instrucción y los flags afectados.
Los tiempos de ejecución que se indican en la tabla están evaluados sobre una frecuencia de
reloj de 12 MHz.

M.C. Eduardo Sánchez Arellano.


- Página 64-
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 intervención del
acumulador.
• Una de las instrucciones INC opera sobre los 16 bits del puntero de datos (DPTR).
• La instrucción 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 instrucción 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.

Ejemplo:
A = 5FH
DIV AB B = 0AH
1001 Æ A
1010 0101 1111
0101 Æ B

• La instrucción DA A justa el resultado en binario puro producido por las instrucciones ADD y ADDC a
formato BCD. Esta instrucción no convierte el contenido del acumulador en BCD, sino que hace
ajuste BCD de la suma (resultado), por lo tanto, esta instrucción debe ir inmediatamente después de
la instrucción ADD o ADDC.

M.C. Eduardo Sánchez Arellano.


- Página 65-
Esta es, de forma simplificada, la operación que realiza:
Si [ [(A3-0)> 9] * OR * [(AC) = 1] ]
Entonces (A3-0) Å (A3-0) + 6
Y si [[(A7-4) > 9] * OR.* [(C)= 1]]
Entonces (A7-4 ) Å (A7-4) + 6

1.4.5.3 Instrucciones Logicas


La tabla 4.3 muestra la lista de instrucciones lógicas y los modelos de direccionamiento que
permiten así como los flags afectados.
La duración de ejecución 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>, # 3F
Si <byte> = (3A) = 0011 1010
# 3F = 0000 1111
0000 1010 = 0AH
(<byte> se refiere, en este caso, a una posición de memoria.)
Nemónico Operación Tiempo de
Modos de direccionamiento Flag afectados
Ejecución μs
Dir Ind Reg Imm 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 A,<byte> A=A.OR. <byte> X X X X 1
ORL <byte>, A <byte>=<byte>.OR.A X 1
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 manipulación de la información,


como las instrucciones de Rotación y de intercambio (SWAP).

M.C. Eduardo Sánchez Arellano.


- Página 66-
• Las instrucciones de Rotación 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: Rotación a la izquierda (Left)


(A) = 0C5H=1100 0101 B (antes de ejecutarla)
RL A
(A) = 8BH= 1000 1011B (después)

• Las instrucciones de Rotación RLC A y RRC A desplazan el contenido del acumulador implicando al
bit de acarreo.

C Å B7 ÅACCÆ B0

• La instrucción SWAP A intercambia los nibbles en el acumulador. Generalmente se utiliza en las


manipulaciones de números en BCD.
Ejemplo:
(A) = 3H = 0000 0011B (antes de la operación)
SWAP A
AÅ 0011 0000 (después)

EJEMPLO 1.3 LECTURA Y ESCRITURA EN EL MISMO PUERTO

Este ejercicio muestra cómo se puede realizar la operación 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
información que se sacará por el nibbles alto (P0.4 a PO.7) (Figura 6.8).

M.C. Eduardo Sánchez Arellano.


- Página 67-
DEFSEG BIT4, ABSOLUTE
SEG BIT4
ORG 0H
START: MOV A,P0
SWAP A
MOV P0,A
AJMP START
END
En la línea 1, se hace la lectura del Puerto P0 y su contenido pasa al acumulador,
En la línea 2, se intercambian los nibbles.
En la línea 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 línea 4 es un salto incondicional al comienzo del programa.

1.4.5.4 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 dirección 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

Nemónico Operación Tiempo de ejecución (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

M.C. Eduardo Sánchez Arellano.


- Página 68-
JC rel Jump jf C = 1 2
JNC rel Jump if C =0 2
JB bit. rel Jump if bit = 1 2
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 cómo en casi todas las instrucciones se hace referencia al flag Carry (C). Se podría
decir que cumple todas las características que tiene el acumulador en el procesamiento de palabras. El
flag Carry se direcciona directamente dentro de la palabra de estado PSW, en la posición <<bit7>>.
B7 b5 b0
C F0
Todos los bits del PSW son direccionables bit a bit, como todos los registros señalados del SRF.
Es importante reseñar la presencia del flag F0 (b5 del PSW) de propósito general, disponible como flag
del usuario. ¿Por qué no utilizarlo como indicador, en las operaciones aritméticas 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; también están 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 instrucción 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
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:

M.C. Eduardo Sánchez Arellano.


- Página 69-
MOV C, P1. 0 ; Carga el Carry (c) con el bit0 del puerto 1.
; CÅ (P1.0)
ANL C, A . 7 ; Operación AND con el Carry (C ) y el bit7
; del acumulador, es decir: CÅ ( C ). AND .(A.7)
ANL C,/OV ; Operación 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 operación 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 operación EXOR, el usuario debe crear un algoritmo, puesto que la instrucción EXOR
no la tienen implementada los microcontroladores de la familia 51.
La operación 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 dirección 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 dirección del salto
se convierte en un número (OFF-SET) del tamaño de un byte, que representa una dirección relativa,
representada en el sistema de numeración binario en complemento a dos. El rango del salto (operando
de la instrucción) 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 atrás (direcciones decrecientes
de memoria).
DEFSEG ROTAR, ABSOLUTE
SEG ROTA
ORG 0
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,$

M.C. Eduardo Sánchez Arellano.


- Página 70-
DJNZ R1,SALTO3
RET

1.4.5.5 Instrucciones de Salto


Un programa es una secuencia de instrucciones que el contador de programa (PC) rompe en función
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 más bits de la entrada/salida de
periféricos. Este es un salto condicional.
Instrucciones de Salto Incondicional
La tabla 3.9 muestra la lista resumida de los saltos incondicionales. Aunque sólo figure la instrucción
<<JMP addr>>, de hecho hay tres tipos: SJMP. LMP, y AJMP, que difieren en el formato de la dirección
de salto.
Tabla 3.9
Nemónico Operación Tiempo de ejecución (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 dirección destino del salto viene dada por un <<offset relativo>>, igual que en
las instrucciones de salto booleanas. La instrucción tiene dos bytes, correspondientes al código de
operación y al byte de offset relativo. El rango del salto está limitado a –128 y + 127 byte relativos. al
primer byte siguiente a la instrucción de salto.
(PC) Å(PC) +2
CPC) Å(PC) +
LJMP addr 16: ( Long jump). La dirección destino del salto viene dad por una constante de 16 bits. La
instrucción está formada por 3 bytes, 1 byte para el código de operación y 2 para la dirección del salto.
Por tanto, la dirección de destino está ubicada dentro del área de los 64K de la memoria de programa.
PC Å addr 16
AJMP addr 11: (Absolute jump). La dirección destino del salto viene dada por una constante de 11 bits.
La instrucción tiene 2 bytes, uno para el código de operación que también contiene en sí misma 3 de los
11 bits de direcciones, y otro byte que contiene los 8 bits bajos de la dirección de destino. El código de la
instrucción y el operando es :
a10 a9 a8 0 0 0 0 1 A7 a6 a5 a4 A3 a2 a1 a0
CODIGO DE OPERACIÓN OPERANDO

M.C. Eduardo Sánchez Arellano.


- Página 71-
Por tanto, el destino del salto tiene que estar comprendido dentro del bloque de los 2 K bytes
referenciado respecto a la siguiente instrucción a la del salto.
PC Å (PC) + 2
(PC 10-0) Å dirección de la página
En cualquier caso, el programador especifica la dirección de destino, bien como una etiqueta o
como una dirección constante de 16 bits, en el programa escrito en lenguaje ensamblador. Este se
encarga de darle el destino. En el formato correcto, según el código de operación. 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 instrucción 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 dirección para la subsiguiente búsqueda de la instrucción.
Ejemplo: Se trata de establecer cinco caminos de ramificación 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 dirección 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 efectúa la suma: PC Å (A) + (DPTR)
; y se produce el salto a otra instrucción
; de salto que a su vez saltará al
; subprograma a ejecutar.
----------------------------------
INDI: AJMP SALTO0
AJMP SALTO1
AJMP SALTO2
AJMP SALTO3
AJMP SALTO4
La instrucción RL A convierte la variable INDI (valor comprendido entre 0 y 4) en un número 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 instrucción CALL addr
que tiene 2 formatos, LCALL y ACALL, que difiere en la forma en la que la CPU implementa la dirección
donde se encuentra la subrutina.

M.C. Eduardo Sánchez Arellano.


- Página 72-
Nota: CALL es el nombre genérico 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 interés por el ahorro de memoria para la máquina 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 máximo 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))Å (PC15-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 instrucción.
Secuencia de operaciones:
• (PC)Å (PC) +2
• (SP)Å (SP) + 1
• ((SP))Å (PC7-0)
• (SP)Å (SP) + 1
• ((SP))Å (PC15-8)
• (PC10-0)Å dirección de la página
Lo mismo que se indicó en los saltos incondicionales, el programador cuando trabaja en ensamblador
sólo debe preocuparse de colocar la etiqueta; el programador ensamblador determinerá la longitud del
salto y el formato que debe dar al código de instrucción según la longitud del salto.

RET: Las subrutinas terminan su ejecución con la instrucción RET, que es la instrucción que indica la
vuelta al programa principal, justo en la dirección de memoria de la instrucción siguiente a la instrucción
CALL.
Secuencia de operaciones:
• (PC15-8)Å ((SP))
• (SP)Å (SP) – 1
• (PC7-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:

M.C. Eduardo Sánchez Arellano.


- Página 73-
• (PC15-8)Å ((SP))
• (SP)Å (SP) – 1
• (PC7-0)Å ((SP))
• (SP)Å (SP) – 1

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 afirmación
o negación 1 propuesta de bifurcación de la secuencia del programa se halla implícita dentro del código
de operación y es el operando el que señala la dirección 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 instrucción siguiente a la
del salto condicional. Trabajando con el programa ensamblador es suficiente señalar con una etiqueta la
dirección del salto o con una constante de 16 bits.

Nemónico Operación Modos de Tiempo de Flag afectados


direccionamiento
Dir Ind Reg Imm Ejecución μ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 X X 2
zero
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

Nota: en la tabla 3.10 se señalara 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

M.C. Eduardo Sánchez Arellano.


- Página 74-
entonces entonces
(PC)Å (PC) + rel (PC)Å (PC) + rel

DJNZ:
Decrementa y salta si no es cero. Esta instrucción 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)
DJNZ CONTADOR , LAZO
CJNE:
Compara y salta, si el resultado de la comparación no es igual.
En este caso hay dos formatos, según la comparación 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

M.C. Eduardo Sánchez Arellano.


- Página 75-
Ejemplo:
Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del periférico a través 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 aplicación de estas instrucciones es la comparación <<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 están aclarados en el Apéndice A.
Secuencia de operaciones:
Según se trate de direccionamiento indirecto (registros R0 y R1 (@Ri) o direccionamiento directo
(registro R0 y R7 (Rn)) es:

CJNE @Ri,# data, rel CJNE Rn, # data, del


• (PC)Å (PC) + 3 • (PC)Å (PC) + 3
• Si ((Ri)) <>data • Si (Rn)<>data
Entonces Entonces
(PC)Å (PC) + rel (PC)Å (PC) + rel
• Si ((Ri)) < data • Si (Rn) < data
Entonces Entonces
(C)Å 1 (C)Å 1
Si no Si no
(C)Å 0 (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 señalan las instrucciones que afectan a los flags del PSW, asi
como unas notas sobre los símbolos utilizados en estas tablas, y a continuación todas las instrucciones
con todos los tipos de direccionamientos que admiten: por esta razón la lista aparece muy dilatada.

1.4.5.6 <<SET>> de Instrucciones Familia –51


Instrucción C OV AC Instrucción C OV AC
ADD X X X CLR C O
DAC X X X CPL C X

M.C. Eduardo Sánchez Arellano.


- Página 76-
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
Tabla 4.11. Instrucciones que afectan a las banderas.

Notas sobre el significado de los operandos de las instrucciones que se describen a continuación:
Rn..................... Registros R0-R7 del banco de registros seleccionado.
Direct............... Dirección 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............. Dirección 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 memoria de programas.
addr 11........... Dirección destino 11 bits. Utilizada por las instrucciones de salto ACALL y AJMP
para permitir el salto dentro de la página de 2Kbytes de la memoria de programas a
partir del primer byte de la siguiente instrucción.
Rel.................. Salto relativo en formato de 8 bits en complemento a 2. Utilizado por la instrucción
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 instrucción.
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 codificación indirecta el registro implicado en las instrucción (Rn).


Así:
R r r Registro
0 0 0 R0
0 0 1 R1
0 1 0 R2
1 1 1 R7
i..................... En la columna de codificación indica el registro implica en la instrucción de
direccionamiento indirecto (@Ri). Así:
i............ Registro
0 @R0
1 @R1

Tabla Instrucciones Aritméticas

Nemónico Descripción Codificación Byte Período 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

M.C. Eduardo Sánchez Arellano.


- Página 77-
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

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 4.7 Instrucciones Lógicas


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

M.C. Eduardo Sánchez Arellano.


- Página 78-
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

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

M.C. Eduardo Sánchez Arellano.


- Página 79-
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 4.10 Instrucciones de Salto


ACALL Addr 11 Absolute Subroutine Call a10 a9 a8 1 0001 a7 a6 a5 a4 a3 a2 a1 a0 2

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 a10 a9 a8 0 0001 a7 a6 a5 a4 a3 a2 a1 a0 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 1011 1rrr immediate data rel.address 3
Equale

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

Programa Ejemplo que Manda Datos al LCD


INCLUDE 89C51.MC

ORG 0
START: CALL INIT_LCD
MOV DPTR, #REN1
CALL PRINTLCD

M.C. Eduardo Sánchez Arellano.


- Página 80-
MOV A, #0C0H ; Direccion del segundo renglon
CALL POS_CUR
MOV DPTR, #REN2
CALL PRINTLCD

BIN_ASCII: MOV A,#215


CALL Bin_to_d_digits
MOV A,#CCH ;Direccion del primer digito
call pos_cur
MOV A,30H
call Print_Dig
MOV A,31H
call Print_Dig
MOV A,#CFH ;Direcion del Tercer digito
call pos_cur
MOV A,32H
call Print_Dig
;CALL ON_OFF
JMP BIN_ASCii

Print_Dig: ADD A,#30H


MOV R0,#1
MOVX @R0, A
CALL RETARD
RET

INIT_LCD: MOV R0, #0


MOV A, #38H
MOVX @R0, A
CALL RETARD
MOV A, #0EH
MOVX @R0, A
CALL RETARD
RET

PRINTLCD: MOV R0, #01H


LOOP1: CLR A
MOVC A, @A+DPTR
JZ FIN
MOVX @R0, A
CALL RETARD
INC DPTR
JMP LOOP1
FIN: RET

Bin_to_d_digits: CLR C
MOV 30H,#255 ;30H = Digito mas significativo (X..)
MOV 31H,#255 ;31H = (.X.)
MOV 32H,#0 ;32H = Digito Menos significativo (..X)
_digit_1: SUBB A,#100
INC 30H
JNC _digit_1
ADD A,#100
CLR C
_digit_2: SUBB A,#10
INC 31H
JNC _digit_2
ADD A,#10
_digit_3: MOV 32H,A
RET

POS_CUR: MOV R0,#00H


MOVX @R0, A
RET

ON_OFF: MOV R0, #00H


MOV A, #08H ;OFF
MOVX @R0,A
CALL RETARD
MOV A, #0EH ;ON

M.C. Eduardo Sánchez Arellano.


- Página 81-
MOVX @R0, A
CALL RETARD
RET

RETARD: MOV R6, #255


RETI: MOV R5, #10
DJNZ R5, $
DJNZ R6, RETI
RET

ORG 100H
REN1: DB "Practica LCD Eduardo", 0
REN2: DB "Temperatura= . GC", 0

END

M.C. Eduardo Sánchez Arellano.


- Página 82-
1.5 Temporizadores y Contadores (Intel)
1.5.1 introducion:
El microcontrolador 89C51 tiene dos registros temporizadores/contadores denominados Timer 0
(T0) y Timer 1 (T1). Los dos registros pueden ser configurados para que operen como
temporizadores o como contadores.
Cuando el dispositivo opera como timer, el registro contador se incrementa cada ciclo máquina (la
temporización se produce contando cada ciclo máquina hasta <<sobrepasar>> el valor prefijado). Así, se
puede considerara que funciona como un contador de ciclos máquina, de tal forma que, como a cada
ciclo máquina le corresponden 12 períodos de reloj, la razón de contaje es 1/12 de la frecuencia del
oscilador.
En la función de counter (contador), el registro es incrementado en respuesta a la transición del
nivel alto al nivel bajo (flanco decendente) de la señal 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 máquina. El contador se incrementa cuando la muestra señala un nivel alto de la señal de entrada en
un ciclo y un nivel bajo en el 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 transición ha sido
detectada. Puesto que necesita dos ciclos máquina (24 ciclos de reloj) para reconocer la transición del
flanco decendente, la máxima razón de contaje es 1/24 de la frecuenia del oscilador.

1.5.2 Timer 0 (T0) Y Timer 1 (T1)


En la sig. Figura se observan cuatro bloques fundamentales que de izquierda a derecha se van a
exponer a continuación:
♦ En la parte superior izquierda aparece un conmutador que selecciona la forma de efectuar el
<<contaje>>, mediante el oscilador del microcontrolador, o con un reloj externo. La primera opción
establece aplicaciones generales de tipo timer (temporizador) y la segunda de tipo counter
(contador).
♦ En la parte inferior izquierda se encuentra un circuito lógico que 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 señales de nivel alto,
aplicadas al pin INT 1, estando GATE=1 y TR1=1.
♦ En la parte central se encuentran los registros de contaje TH0-TL0 y TH1-TL1, que pueden ser de
8,13 ó 16 bits. Según el modo de trabajo.
♦ A la derecha de los contadores (TL y TH) se encuentra el bit de bandera. TF1, que señala el
desbordamiento de los contadores.
♦ Finalmente, si la interrupción correspondiente está habilitada, se produciría una interrupción.

M.C. Eduardo Sánchez Arellano.


- Página 83-
TIMER 0 (T0) Y TIMER 1 (T1)

Figura 1.5.1
La función 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 operación y se seleccionan mediante los bits (M0, M1) en
el registro TMOD (Modo 0, 1, ó 2).

TMOD: Timer/Counter Mode Register: Selecciona el Timer 0 ó 1.

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 OPERACIÓN


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 múltiples específicos.
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 Configuración del Timer 1. Igual que para el Timer 0, sustituyendo:
T0 por T1, INT0 por INT1 y TR0 por TR1

M.C. Eduardo Sánchez Arellano.


- Página 84-
MODO 0: Temporizador/Contador de 13 bits.
Poniendo los bits M0=M1=0 en el registro TMOD se selecciona el modo de operación cero (Modo
0). Cuando la cuenta, en los contadores, da una vuelta pasando desde todos <<unos>> a todos
<<ceros>>, se activa la bandera (flag) de interrupción TFX (x=0 si se trata del Timer 0 y x=1 si se trata del
Timer 1), siendo éste un bit 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
operación de los Timer 0 y 1 en relación con las interrupciones y los flancos de activación 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 Interrupción 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 interrupción para la interrupción externa 0 (INT0).
- Se pone a uno cuando se detecta interrupción externa.
- Se repone automáticamente al atender la interrupción por flanco.
B2 IT1: Control de Interrupción externa 1 (INT1).

B3 IE1: Flag de interrupción 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 automáticamente al atender la interrupción
B6 TR1: Habilita temporizador/contador 1.

B7 TF1: Bandera de Overflow del Timer 1.

La autorización 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 aplicación podría ser, para medir el ancho de pulso a través del pin INT1 ó INT0.

M.C. Eduardo Sánchez Arellano.


- Página 85-
EJEMPLO No.1 Timer 1 en Modo 1 como temporizador de 16 bits. El bit 0 del puerto P1 (P1.0), prendera
y se apagara en función de los valores de carga del Timer 1 (TH1+TL1).

;***** 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

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.2 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 función 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 automática.
El overflow de TL1 no sólo activa el bit de flag (TF1), sino que también <<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.3 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 Sánchez Arellano.


- Página 86-
SCON: Este registro se encarga de establecer los parámetros para la transmisión o recepción de datos
en comunicación serie; así si se trata de una transmisión o recepción, formato de la palabra (bit de start,
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 interrupción de recepción.
Se activa por hardware al finalizar la recepción 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 interrupción de transmisión.
Se activa por hardware al finalizar la tranmisión 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 recepción.
- 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 físicamente el mismo,
buffer de transmisión y buffer de recepción. 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.

PCON: Power Control Register: Para aplicaciones en donde la característica de consumo sea crítica, la
versión CHMOS ofrece dos modos de trabajo de bajo consumo: el modo POWER DOWN y el IDLE.
También ofrece, este registro, posibilidades de variar la velocidad de comunicación en el canal serie.
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 Propósito general.
GF0 Propósito general.
PD Bajo consumo de energía. (80C51 solamente)
IDL Bajo consumo de energía. (80C51 solamente)

M.C. Eduardo Sánchez Arellano.


- Página 87-

Potrebbero piacerti anche