Curso de Microprocesadores y Microcontroladores

Transcripción

Curso de Microprocesadores y Microcontroladores
Curso de Microprocesadores y
Microcontroladores.
Unidad 1
Contenido:
1 Portada.
2 Temario.
3 Manual del Curso.
4 Anexos
Curso de Microcontroladores I
Objetivos del Curso
q
Comenzar a familiarizarse con el entorno de los Microcontroladores
Intel
q
Realizar Primeras prácticas de control y prueba.
q
Operaciones básicas e intermedias.
Tiempo aproximado
q
40 Horas
Número de prácticas
q
q
Teoría: 25 hrs.
Práctica: 15 hrs.
Practicas
q
q
q
q
q
q
q
q
Práctica 1
Práctica 2
Practica 3
Practica 4
Practica 5
Practica 6
Practica 7
Practica 8
“In – Out por los puertos.
“Mandar mensajes al LCD de modo manual.
“Lectura por un puerto y contenido de la lectura por el LCD.
“Lectura en LCD de un ADC 0804”
“Probador de voltajes.”
“Probador de Timer Counter”
“Medidor de RPM.”
“Control de Interrupciones”
M.C. Eduardo Sánchez Arellano.
- Página 2-
Indice General
Capitulo 1. Introducción a los Microprocesadores.
1.1.
La Evolucion de los Microprocesadores.
1.2.
Características de los Microcontroladores
1.3.
Pinout de los Microcontroladores Intel
Capitulo 2. Configuración de la memoria en el Microcontrolador
2.1.
Memoria de p rograma y datos.
2.2.
Memoria de programa.
2.3.
Memoria de datos.
2.4.
Area de direccionamiento sólo indirecto.
2.5.
Area de direccionamiento directo e indirecto.
2.6.
Area de registros o funciones especiales
2.7.
Operación Reset.
Capitulo 3. Programación de los Microcontroladores
3.1.
Introducción
3.2.
Modos de direccionamiento
3.3.
Ciclo de instrucción
3.4.
Tipo de instrucciones
3.5.
Instrucciones aritméticas.
3.6.
Instrucciones lógicas.
3.7.
Instrucciones de transferencia ó movimiento de datos.
3.7.1.
Transferencia de datos sobre la RAM interna
3.7.2.
Transferencia de datos sobre la RAM externa.
3.7.3.
Memoria de programas para el tratamiento de tablas
3.8.
Instrucciones Booleanas
3.9.
Instrucciones de salto.
3.9.1.
Instrucciones de salto incondicional.
3.9.2.
Instrucciones de salto condicional.
3.10.
<<SET>> de instrucciones de la familia MCS-51
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 y estudio de programas en el Macroensamblador.
Contro l de puertos de Entrada/Salida.
• Introducción
• El Microcontrolador como Microprocesador.
• Operaciones de escritura en los puertos del Microcontrolador.
• El puerto P0 en modo salida.
• Operaciones de lectura en los puertos.
• Control de procesos Industriales básicos .
• Control del LCD.
• Control del Teclado.
• Adquisición de datos mediante ADC
Interrupciones.
• Introducción.
• Tipos de Interrupciones.
• Proceso de interrupción en los Microcontroladores.
• Niveles de prioridad.
• Interrupciones externas. (INT0 ) e (INT1 )
• Interrupciones internas producidas por Timer 0 y1.
Temporizadores y Contadores.
• Introducción
• Timer 0 (T0) y Timer 1 (T1).
• Temporizador/Contador de 13 y 16 bit, arranque por software.
• Programas.
M.C. Eduardo Sánchez Arellano.
- Página 3-
Unidad 1
1.1 INTRODUCCIÓN A LOS MICROPROCESADORES
LA EVOLUCION DEL MICROPROCESADORES
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 historia dice que se construyeron gigantescas máquinas computadoras en las
décadas de 1940 y 1950, construidas con relevadores y tubos de vacío (bulbos).
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.
M.C. Eduardo Sánchez Arellano.
- Página 4-
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 contenía un conjunto de instrucciones que
ofrecían sólo 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.
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 (1K es
igual a 1024 y un byte es un número de 8 bits).
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.
1976
Intel 8085, Mostek 6502
Aparece Apple iniciando el auge de las microcomputadoras.
1978
Motorola 6809
Mejor microprocesador de 8 bit.
Tabla 1-1
M.C. Eduardo Sánchez Arellano.
- Página 5-
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
MICROCONTROLADOR.
Figura 1.8
M.C. Eduardo Sánchez Arellano.
- Página 6-
integrado
se
le
denominó
1.1.3 Tipo de microprocesador según su velocidad y ancho de palabra.
1.2 ARQUITECTURA DEL MICROPROCESADOR.
El diseño de las microcomputadoras consiste de cinco áreas funcionales:
(A) CPU unidad central de procesamiento es el Microprocesador.
(B) Puertos de entrada/salida.
(C) Memoria de solo lectura (ROM) Memoria de Programa.
(D) Memoria de lectura y escritura (RAM) Memoria de Datos.
(E) Bus del sistema.
CPU
Memory Rom
In/Out Port.
Memory Ram
Figura 1.1
(A) Microprocesador (Unidad Central de Procesamiento (CPU)).
Central Processing Unit. El CPU es el corazón de toda µC, es el encargado de decodificar las
instrucciones, hacer más eficientes las operaciones aritméticas, y controlar algunas otras
partes de la maquina. Cuenta con cuatro partes básicas que hace los “verdaderos cómputos”.
(1)
Acumulador. (ACC)
Reg de Instrucción.
Contador del Programa
Decodificador
de Instruccion
(4)
Timing and
Control.
(3)
M.C. Eduardo Sánchez Arellano.
- Página 7-
(2)
Unidad
Aritmetica.
y Logica.
(ALU)
Sin embargo, a veces el término es usado (aunque incorrectamente), para incluír todo lo
que está dentro de la caja, incluyendo el disco duro, el CD ROM, la fuente y el motherboard.
(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 para
propósito general, el contador de programa y el registro de instrucciones que son de
propósito
específico.
El
acumulador
almacena
temporalmente
el
resultado
de
las
operaciones aritméticas y lógicas. 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. 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.
(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
M.C. Eduardo Sánchez Arellano.
- Página 8-
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.
(B) PUERTOS DE ENTRADA/SALIDA:
Una microcomputadora tiene un camino para comunicarse con el mundo real, y este
camino sirve para introducir el programa y obtener los resultados. Los puertos de entrada y
salida son circuitos LSI que auxilian a la computadora a comunicarse con los humanos o a
controlar un proceso. Son normalmente llamados Peripheral interface adaptdor (PIA) o
Programable peripheral interface (PPI). Estos chips pueden ser programados como entradas
o salidas de la microcomputadora.
Si el µC 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.
Figura 1.2
C P U ( µP)
Memory Rom
In Port.
Out Port.
Amplificador
and
A/D Converter.
Drive
Circuit.
M.C. Eduardo Sánchez Arellano.
- Página 9-
Memory Ram
(C) MEMORIA:
La memoria es una porción de la computadora que almacena el programa y los datos
mientras estos son necesarios. 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
1 celda.
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
0
0
1
1
1
0
0
0
0
1
0
1
0
1
0
1
1
0
0
1
Add.
1
0
0
=I
=T
=N
105
106
107
Cada byte almacenado en memoria tiene una dirección. Por ejemplo ITN puede estar
almacenado en las direcciones 105 a 107. Los µP son capaces de direccionar 65,536 bytes.
1.2.1 “Arquitectura del Microprocesadores a traves de diagrama a bloques
con Arquitectura Von Neumann”
M.C. Eduardo Sánchez Arellano.
- Página 10-
El Acumulador: almacena datos para ser procesados por la ALU. Suelen tener el
mismo número de bits que el bus de datos. El acumulador se utiliza con el bus de datos y la
ALU en el proceso aritmertico y logico de los 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.
M.C. Eduardo Sánchez Arellano.
- Página 11-
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
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.
M.C. Eduardo Sánchez Arellano.
- Página 12-
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 13-
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 14-
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.
MICROCONTROLADORES INTEL 8XXX
Características de la Familia de MICROCONTROLADORES Intel.
Con ROM
Sin ROM
con EPROM
ROM
RAM
8048AH
8040AH
P8748H
1K
8049AH
8039AHL
P8749H
8050AH
8035AHL
8051
8031
TIMER
TECNOLO
64
1
HMOS
2K
128
1
HMOS
No Existen
4K
256
1
HMOS
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.2
ARQUITECTURA BÁSICA DE LOS MICROCONTROLADORES 8051
Figura 1.9
M.C. Eduardo Sánchez Arellano.
- Página 15-
DIAGRAMA GENERAL DE LOS MICROCONTROLADORES 8031-8051-89C51-8751
Figura 1.10
Figura 1.11
M.C. Eduardo Sánchez Arellano.
- Página 16-
Descripción de los pines:
Vcc: Voltaje de alimentación positiva (+5 Volts.)
Vss: Conexión a tierra (0 volts).
PUERTOS: Los MICROCONTROLADORES 8051 tienen 4 puertos de 8 bits bidireccionales
(P0, P1, P2 y P3). Esto quiere decir que pueden programarse y operar como entrada o
salida.
PUERTO 0(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.
PUERTO 1(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.
PUERTO 2 (P2): El puerto 2 emite la parte alta del Bus de direcciones en los accesos de
memoria externa cuando utilizan 16 bits de 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).
PUERTO 3 (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.
Pin
10
11
12
13
14
15
16
17
Descrip
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
Funciones
RXD (Entrada puerto Serie)
TXD (Salida puerto serie)
INTO (Interrupción 0. Externa)
INT1 (Interrupción 1. Externa)
T0 (Entrada externa. Timer 0)
T1 (Entrada externa. Timer 1)
WR (Autorización escritura de datos)
RD (Autorización escritura de datos)
Neg.
Neg
Neg.
Neg.
TABLA 2.2
ALE/PROG: (Address Latch Enable) es un pulso que emite el MICROCONTROLADOR para
amarrar el <<byte bajo>> del Bus de direcciones en el acceso a la memoria externa. ALE
se emite con una frecuencia de 1/6 de la frecuencia de 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
M.C. Eduardo Sánchez Arellano.
- Página 17-
la señal PSEN. PSEN no se activa cuando se está ejecutando el programa de la ROM o
EPROM interna.
EA/VPP: (External Access), cuando se mantiene un nivel alto, se ejecuta 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 la tensión de programación de la EPROM.
XTAL1 y XTAL2: Son la entrada y salida respectivamente, de un amp lificador 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.
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Ω .
M.C. Eduardo Sánchez Arellano.
- Página 18-
EL MICROCONTROLADOR 89C51 COMO MICROPROCESADOR
Una característica importante 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 CP U (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.12
M.C. Eduardo Sánchez Arellano.
- Página 19-
Organización de la MEMORIA en el Microcontrolador-Microprocesador
8X51.
MEMORIA DE PROGRAMAS Y MEMORIA DE DATOS.
Los MICROCONTROLADORES 8751 tienen separados los espacios de direcciones para
memoria de programa y memoria de datos.
La memoria de programa sólo puede ser leída y tiene como máximo 64K byte
externos. (Internamente el 8751 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 puntero de 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.
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.13 se puede observar que la lectura en la memoria de programas se realiza cuando
M.C. Eduardo Sánchez Arellano.
- Página 20-
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.13
2. Cuando el contador de programa (PC) contiene un número más grande que 0FFFH para
el 8051 o para el 8052.
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.
Flag que se activan à
FUENTE DE INTERRUPCION
DIRECCIONES DEL VECTOR
0FFFH
RI Y TI
TF1
IE1
TF0
IE0
RESET
0023H...PUERTO SERIE
001BH...INT TIMER 1
0013H... INT EXTERIOR 1
000BH...INT TIMER 0
0003H...INT EXTERIOR 0
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.
M.C. Eduardo Sánchez Arellano.
- Página 21-
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.
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.14
•
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
M.C. Eduardo Sánchez Arellano.
- Página 22-
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).
Figura 1.13
En las siguiente Fig. Se muestra el funcionamiento y diagramas de tiempos de esta
operación.
Figura 1..15
M.C. Eduardo Sánchez Arellano.
- Página 23-
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.
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.
M.C. Eduardo Sánchez Arellano.
- Página 24-
Figura 3.4
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.
M.C. Eduardo Sánchez Arellano.
- Página 25-
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
80
7F
SFR
Solo Directo.
64 KBytes
Memoria Externa
Directo é
Indirecto
00
0000
RD
WR
FIG. 3.5
En la memoria de datos interna se puede acceder a un total de 256 bytes para el
8751 incluido el área de los registros especiales (SFR),
ÁREA DE DIRECCIONAMIENTO DIRECTO E INDIRECTO de RAM.
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
00H
08H
10H
18H
Banco 0
Banco 1
Banco 2
Banco 3
Dirección Final
07H
0FH
17H
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
registros, el SP se puede inicializar en otra localización de memoria.
M.C. Eduardo Sánchez Arellano.
- Página 26-
del segundo banco de
§
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
28H
§
27H
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
40H
50H
60H
70H
3FH
4FH
5FH
6FH
7FH
ÁREA DE REGISTROS O FUNCIONES ESPECIALES.
La sig. Tabla muestra los registros especiales que utiliza el 8751, así como sus direcciones.
No.
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Símbolo
*ACC
*B
*PSW
SP
DPTR
DPL
DPH
*P0
*P1
*P2
*P3
*IP
*IE
TMOD
*TCON
TH0
TL0
TH1
TL1
*SCON
SBUF
PCON
Nombre
Acumulador
Registro B
Program Status Word
Stack Pointer
Data Pointer 2 Bytes
Low Byte del DPTR
High Byte del DPTR
Port 0
Port 1
Port 2
Port 3
Interrupt Priori ty Control
Interrupt Enable Control
Timer/Counter Mode Control
Timer/Counter Control
Timer/Counter 0 High Byte
Timer/Counter 0 Low Byte
Timer/Counter 1 High Byte
Timer/Counter 1 Low Byte
Serial Control
Serial Data Buffer
Power Contol
*= Registros Direccionable bit a bit.
Acumulador.
Registro B.
Palabra de Estado del Programa.
Puntero de la memoria de la PILA.
Apuntador de datos.
Byte bajo.
Byte alto.
Puerto 0
Puerto 1
Puerto 2
Puerto 3
Control de prioridad de interrupciones.
Control de autorización de Interrupciones.
Control Modo Temporizador/Contador.
Control Temporiza dor/Contador.
Byte alto temporizador/Contador 0
Byte bajo temporizador/Contador. 0
Byte alto temporizador/Contador 1
Byte bajo temporizador/Contador. 1
Control de comunicación serie.
Buffer de datos de comunicación serie.
Control de consumo de potencia.
Dirección
0E0H
0F0H
0D0H
81H
------82H
83H
80H
90H
0A0H
0B0H
0B8H
0A8H
89H
8CH
88H
8AH
8DH
8BH
98H
99H
87H
Tabla 3.2
ACC: Acumulador: Es un registro de propósito general y por su frecuencia de intervención,
el más importante.
M.C. Eduardo Sánchez Arellano.
- Página 27-
B: Registro B es usado durante operaciones de multiplicación y división, para otras
instrucciones puede ser tratado como un registro común.
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
CY
b6
AC
BIT
b0
b5
F0
b4
RS1
b2
OV
b1
-
b0
P
NOMBRE Y COMENTARIO
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
b3
RS0
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).
M.C. Eduardo Sánchez Arellano.
- Página 28-
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.
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 29-
1.4 Lenguaje Ensamblador del Microprocesador
Programación de los Micfroprocesadores y los Microcontroladores MCS-51,52
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:
M.C. Eduardo Sánchez Arellano.
- Página 30-
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:
•
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.
q
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.
M.C. Eduardo Sánchez Arellano.
- Página 31-
MOV
3DH, 4EH
; El contenido de la dirección 3DH es cargado con el dato que se
encuentra en la dirección 4EH.
q
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á:
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.
q
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
1 r r r
Operación: (Rn) ß (A)
Dependiendo del registro implicado el código de instrucción tomará distintos valores.
Así
M.C. Eduardo Sánchez Arellano.
- Página 32-
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
1 r r r
Operación: (Rn) ß #dato.
q
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
INC DPTR;
Incrementa el contenido del acumulador:
DPTR ß (DPTR) + 1
Incrementa puntero de datos;
DEC R0; Decrementa el registro R0.
q
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
M.C. Eduardo Sánchez Arellano.
- Página 33-
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).
1.4.3 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
M.C. Eduardo Sánchez Arellano.
- Página 34-
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á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.
M.C. Eduardo Sánchez Arellano.
- Página 35-
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
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.
M.C. Eduardo Sánchez Arellano.
- Página 36-
Figura 1.15
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.
M.C. Eduardo Sánchez Arellano.
- Página 37-
1.4.4 TIPOS DE INSTRUCCIONES
El set de instrucciones de Intel MCS-51 se puede dividir según las especialidades:
•
Instrucciones aritméticas,
•
Instrucciones lógicas.
•
Instrucciones de transferencia de datos.
•
Instrucciones booleanas.
•
Instrucciones de salto.
Las instrucciones aritméticas, lógicas, de transferencia y de salto son comunes 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):
TABLA 4.1
En la tabla
simplificada
<byte>
<byte>
<byte>
<byte>
Según el modo de
direccionamiento
direct
@Ri
Rr
# data
Significado
Direccionamiento directo. Se refiere a una posmem.
Direccionamiento indirecto a través del registro R0 y R1.
Direccionamiento por registro.
Direccionamiento inmediato. Constante de 8 o 16 bits
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......................................
Afectado poniéndolo a ......................
Afectado poniéndolo a........................
X
0
1
En algunas tablas no son afectados los flags, y esto se indica con un mensaje en la
parte inferior de las mismas.
M.C. Eduardo Sánchez Arellano.
- Página 38-
Los tiempos de ejecución Se han tomado utilizando como referencia una frecuencia
de reloj de 12 MHz.
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.
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
M.C. Eduardo Sánchez Arellano.
- Página 39-
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.
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
INSTRUCCIONES LOGICAS
La
tabla
4.3
muestra
la
lista
de
instrucciones
lógicas
y
los
modelos
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
Modos de direccionamiento
Tiempo de
Dir
Ind
Reg
Imm
Ejecución
µs
X
X
X
1
ANL A,<byte>
A=A.AND.<byte>
X
ANL <byte>,A
<byte>=<byte>.A
X
1
ANL <byte>,#data
<byte>=<byte>.And.
X
2
ORL A,<byte>
A=A.OR. <byte>
X
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
M.C. Eduardo Sánchez Arellano.
- Página 40-
X
X
X
X
1
1
Flag afectados
C
OV
AC
de
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
Rotate ACC Left 1 bit
Accumulator only
1
RLC A
Rotate left through Carry
Accumulator only
1
RR
Rotate ACC Right 1 bit
Accumulator only
1
RRC A
Rotate Right through Carry
Accumulator only
1
SWAP A
Swap Nibbles in A
Accumulator only
Tabla 4.3
1
A
A
X
•
=Si
X
X
=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).
•
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)
M.C. Eduardo Sánchez Arellano.
- Página 41-
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).
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.
INSTRUCCIONES DE TRANSFERENCIA DE DATOS
Se consideran tres modalidades, según la transferencia se realice sobre:
M.C. Eduardo Sánchez Arellano.
- Página 42-
•
La RAM interna.
•
La RAM externa.
•
La memoria de programa para el tratamiento de tablas.
4.7.1. Movimiento de datos sobre la RAM interna
En la tabla 4.4 se muestra la tabla de instrucciones disponibles para mover datos dentro de
los espacios de memoria RAM interna, considerando los distintos direccionamiento para
cada una de las instrucciones
Tabla 4.4
Modos de direc.
Nemónico
Operación
Dir
Ind Reg Imm
MOV A,<src>
A=<src>
X
X
X
MOV <dest>, A
<dest> = A
X
X
X
MOV <dest>, <src>
<dest> = <src>
X
X
X
MOV
DPTR= 16-bit immediate constant.
DPTR, #data 16
Tiempo de
ejecución (µs)
X
1
1
X
2
X
2
PUSH <src>
INC SP : MOV “@SP”, <src>
X
2
POP <dest>
MOV <dest>, “@SP” :DEC SP
X
2
XCH
ACC and <byte> exchange data
X
A,<byte>
XCHD A, @Ri
ACC and @ Ri exachange low nibbles
X
X
X
1
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.
M.C. Eduardo Sánchez Arellano.
- Página 43-
•
La instrucción PUSH <src> actúa incrementando el SP (stack pointer = puntero de la
pila) y copiando el dato dentro de la pila. La instrucción POP <dest> actúa
decrementando el SP y reponiendo el dato en su registro. La pila está situada dentro de
la RAM interna, por defecto en el banco de registros 1 (véase figura 2.11), pero puede
posicionarse en el área 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>
•
•
(SP) ß (SP) +1
•
((SP)) ß <src>
POP <dest>
<dest> ß ((SP))
(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
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.
M.C. Eduardo Sánchez Arellano.
- Página 44-
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
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
SETB bit
Bit = 1
1
CPL C
C = .NOT.C
1
CPL bit
Bit = .NOT. bit
1
JC
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
X
rel
=SI:
Tabla 4.8
OV
AC
1
X
2
= 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
C
b5
F0
b0
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
M.C. Eduardo Sánchez Arellano.
- Página 45-
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
--------------------(PC) ß (PC) + 3
JNB bit, rel
---------------------(PC) ß (PC) + 3;
Si (bit) = 1
Entonces
(PC) ß (PC) + rel
JBC bit, rel
---------------------(PC)ß (PC) + 3;
Si (bit) = 0
Si (bit) = 1
Entonces
Entonces
(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:
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)
M.C. Eduardo Sánchez Arellano.
- Página 46-
JNB P1. 1, SALTA
SALTA:
CPL C
MOV P7.2,C
;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.
; Complementa 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).
SALTO1:
SALTO2:
RETARDO:
SALTO3:
DEFSEG ROTAR,ABSOLUTE
SEG ROTA
ORG 0
MOV A,#00H
;Limpia Acumulador
SETB C
RLC A
MOV P0,A
CALL RETARDO
JNB ACC.7,SALTO1
RRC A
MOV P0,A
CALL RETARDO
JNB ACC.0, SALTO2
JMP SALTO1
NOP
MOV R1,#40H
MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,SALTO3
RET
4.4 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.
4.4.1 instrucciones de salto incondicional
M.C. Eduardo Sánchez Arellano.
- Página 47-
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
JMP addr
JMP @A + DPTR
CALL addr
RET
RETI
NOP
No son afectados las banderas.
Tiempo de ejecución (us)
Jump to addr
Jump to A + DPTR
Call subroutine at addr
Return from subroutine
Return from interrupt
No operation
2
2
2
2
2
1
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
CODIGO DE OPERACIÓN
a4
A3 a2 a1 a0
OPERANDO
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
M.C. Eduardo Sánchez Arellano.
- Página 48-
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
MOV A, INDI
;Se carga el DPTR con la dirección de la tabla de saltos.
; 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.
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
M.C. Eduardo Sánchez Arellano.
- Página 49-
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.
M.C. Eduardo Sánchez Arellano.
- Página 50-
Secuencias de operaciones:
•
(PC15-8)ß ((SP))
•
(SP)ß (SP) – 1
•
(PC7-0)ß ((SP))
•
(SP)ß (SP) – 1
4.2.2 INSTRUCCIONES DE SALTO CONDICIONAL
La tabla 3.10 muestra la lista de las instrucciones de salto condicional. Estas
instrucciones son las que van a permitir al microcontrolador tomar decisiones (siguiendo
secuencialmente una parte del programa u otra) ante una propuesta binaria. Que en el
lenguaje coloquial se contesta c on 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
direccionamiento
Dir
JZ rel
Jump if A=0
JNZ rel
Jump if A<>0
DJNZ <byte>,rel
Decrement and jump if not
zero
X
CJNE A,<byte>,rel
Jump if A<> <byte>
X
CJNE <byte>,#data,rel
Jump if <byte><.> #data
X
=Si
Ind
Reg
Tiempo de
Imm
Ejecución µs
Accumulator only
2
Accumulator only
2
X
X
C
OV
AC
2
X
X
Flag afectados
2
X
2
X
=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
M.C. Eduardo Sánchez Arellano.
- Página 51-
micros, sino que directamente el registro acumulador, pues este microcontrolador no tiene
<< flag cero >> en el registro de estado.
Secuencias de operaciones:
JZ rel
•
•
JNZ rel
(PC)ß (PC) + 2
(PC)ß (PC) + 2
Si (A) = 0
Si (A)<> 0
entonces
entonces
(PC)ß (PC) + rel
(PC)ß (PC) + rel
DJNZ:
Decrementa y salta si no es cero. Esta 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:
M.C. Eduardo Sánchez Arellano.
- Página 52-
•
(PC)ß (PC) + 3
•
Si (A) <> (<byte>)
Entonces
(PC)ß (PC) + rel
Si (A) < (<byte>)
Entonces
(C) ß 1
sino
(C)ß 0
Ejemplo:
Ejecuta las instrucciones que hay dentro del lazo hasta que la lectura del 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 comp aració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 <<c ero>>. Estos y otros aspectos
están aclarados en el Apéndice A.
Secuencia de operaciones:
Según
se
trate
de
direccionamiento
indirecto
(registros
direccionamiento directo (registro R0 y R7 (Rn)) es:
CJNE @Ri,# data, rel
• (PC)ß (PC) + 3
• Si ((Ri)) <>data
Entonces
(PC)ß (PC) + rel
• Si ((Ri)) < data
Entonces
(C)ß 1
Si no
(C)ß 0
CJNE Rn, # data, del
• (PC)ß (PC) + 3
• Si (Rn)<>data
Entonces
(PC)ß (PC) + rel
• Si (Rn) < data
Entonces
(C)ß 1
Si no
(C)ß 0
M.C. Eduardo Sánchez Arellano.
- Página 53-
R0
y
R1
(@Ri)
o
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.
4.7.2 transferencia de datos sobre la RAM externa
La tabla 4.5 muestra la lista de instrucciones sobre transferencia de datos que acceden a la
memoria de datos. 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 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
M.C. Eduardo Sánchez Arellano.
- Página 54-
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
R0
85H
Después: (85h) = 3AH
¿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.
4.7.3 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.
M.C. Eduardo Sánchez Arellano.
- Página 55-
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
A6H
23H
MOV A, #01H
CALL TABLA
M.C. Eduardo Sánchez Arellano.
- Página 56-
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 57-
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.
M.C. Eduardo Sánchez Arellano.
- Página 58-
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>>.
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 P 3
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
M.C. Eduardo Sánchez Arellano.
- Página 59-
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.
•
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
0101H
0102H
0103H
0104H
0105H
0106H
0107
ENTRADAS
P3.2
P3.1
P3.0
C
B
A
0
0
0
0
0
1
0
1
0
0
1
1
1
0
0
1
0
1
1
1
0
1
1
1
07H
07H
20H
09H
20H
20H
20H
10H
P1.7
N.C
0
0
0
0
0
0
0
0
;
;
;
;
;
;
;
;
Activa B1-B2 y señala VACIO
Activa B1-B2 y no señala VACIO
Señala ALARMA
Desactiva B2 y señala LLENO
Señala ALARMA
Señala ALARMA
Señala ALARMA
Señala y REBOSE
P1.6
N.C
0
0
0
0
0
0
0
0
P1.5
AL
0
0
1
0
1
1
1
0
M.C. Eduardo Sánchez Arellano.
- Página 60-
SALIDAS
P1.4
P1.3
RE
LL
0
0
0
0
0
0
0
1
0
0
0
0
0
0
1
0
P1.2
V
1
1
0
0
0
0
0
0
P1.1
B2
1
1
0
0
0
0
0
0
P1.0
B1
1
1
0
1
0
0
0
0
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 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 61-
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.
M.C. Eduardo Sánchez Arellano.
- Página 62-
(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.
(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
0
0
1
A0
0
1
0
RD
0
0
0
WR
1
1
1
CS
0
0
0
0
0
1
1
0
1
0
1
1
1
1
1
0
0
0
0
0
0
0
0
X
1
X
X
1
X
X
0
1
X
1
1
1
0
0
OPERACIONES DE LECTURA
Del Puerto A --> Al bus de Datos
Del Puerto B --> Al bus de Datos
Del Puerto C--> Al bus de Datos
OPERACIONES DE ESCRITURA
Del bus de Datos--> Al Puerto A
Del bus de Datos--> Al puerto B
Del bus de Datos--> Al puerto C
Del bus de Datos-> Reg. de Control
FUNCIONES DE 3 ESTADOS
Bus de Datos--> 3 Estados.
CONDICION ILEGAL.
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.
M.C. Eduardo Sánchez Arellano.
- Página 63-
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.
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 64-
Formato del modo de Definición en la Palabre de Control
M.C. Eduardo Sánchez Arellano.
- Página 65-
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 66-
CONFIGURACIONES EN MODO 0.
Ejemplo:
REGISTRO DE CONTROL
D7
D6
D5
1
0
0
PALBRA DE CONTROL 80H o 128D
D4
0
D3
0
D2
0
D1
0
D0
0
CONFIGURACONES DE ENTRADA/SALIDA EN MODO 0
HEX
DEC
PUERTO A
PORT C SUP
PUERTO B
PORT C INF
80H
81H
82H
83H
88H
89H
8AH
8BH
90H
91H
92H
93H
98H
99H
9AH
9BH
128
129
130
131
136
137
138
139
144
145
146
147
152
153
154
155
salida
salida
salida
salida
salida
salida
salida
salida
entrada
entrada
entrada
entrada
entrada
entrada
entrada
entrada
salida
Salida
Salida
Salida
Entrada
Entrada
Entrada
Entrada
Salida
Salida
Salida
Salida
Entrada
Entrada
Entrada
Entrada
salida
salida
entrada
entrada
salida
salida
entrada
entrada
salida
salida
entrada
entrada
salida
salida
entrada
entrad
salida
entrada
salida
entrada
salida
entrada
salida
entrada
salida
entrada
salida
entrada
salida
entrada
salida
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
M.C. Eduardo Sánchez Arellano.
- Página 67-
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.
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.
M.C. Eduardo Sánchez Arellano.
- Página 68-
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.
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 imp resora.
M.C. Eduardo Sánchez Arellano.
- Página 69-
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 comp utadoras. 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 70-
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
1
2
3
4
Señal
Vss
Vdd
Vo
RS
Nivel
Gnd.
Vcc.
5
6
7
8
9
10
11
12
13
14
R/W
E
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
H/L
H,H- >L
H/L
H/L
H/L
H/L
H/L
H/L
H/L
H/L
H/L
Función
Tierra 0v Power Supply
5V Power Supply
Voltaje de Contraste.
RS=0 Entrada de Instrucciones,
RS=1 Entrada de Datos.
R/W=0:Data Read, R/W=1:Data Write
Enable, señal de Habilitación
Bit menos significativo del Bus de Datos
Bus de Datos
Bus de Datos
Bus de Datos
Bus de Datos
Bus de Datos
Bus de Datos
Bit más significativo del Bus de Datos
Tabla 1.1
EXHIBIDOR ALFANUMÉRICO
m
m
m
m
m
m
m
m
m
m
m
m
m
m
14
13
12
11
10
9
8
7
6
5
4
3
2
1
M.C. Eduardo Sánchez Arellano.
- Página 71-
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
38H
RS
0
R/W
0
DB7
0
DB6
0
DB5
1
DB4
1
DB3
1
DB2
0
DB1
0
DB0
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
01H
0
0
0
0
0
Esta instrucción toma un tiempo de 1.64 mS.
DB4
0
DB3
0
DB2
0
DB1
0
DB0
1
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
06H
0
0
0
0
0
Esta instrucción toma un tiempo de 40µS.
DB4
0
4. Se prende la pantalla del display y se prende el
DB3
0
DB2
1
DB1
1
DB0
0
cursor señalando la posición del
proximo carácter de entrada, se desactiva el parpadeo.
Código
RS
R/W
DB7
DB6
DB5
0EH
0
0
0
0
0
Esta instrucción toma un tiempo de 40µS.
DB4
0
DB3
1
DB2
1
DB1
1
DB0
0
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
54H
T
RS
1
R/W
0
DB7
0
DB6
1
DB5
0
DB4
1
__
Ahora se envía el código de la letra “E”.
M.C. Eduardo Sánchez Arellano.
- Página 72-
DB3
0
DB2
1
DB1
0
DB0
0
CODIGO
RS
1
R/W
0
DB7
0
DB6
1
DB5
0
DB4
0
DB3
0
DB2
1
DB1
0
DB0
1
DB7
0
DB6
1
DB5
0
DB4
0
DB3
0
DB2
0
DB1
1
DB0
1
45H
T
E
__
Y así las demás letras.
CODIGO
43H
T
RS
1
E
C
R/W
0
__
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
M.C. Eduardo Sánchez Arellano.
- Página 73-
•
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.
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
Clear display
Return home
Entry mode set
Disp. on/off cont
Cur o disp shift
Funcion set
Set CG ram addres
Set DD ram addres
Rd busy flag
Wr dato to CG
Rd dato from CG
RS
0
0
0
0
0
0
0
0
0
1
1
R/
W
0
0
0
0
0
0
0
0
1
0
1
I/D=1: Increment (+1).
D=1: Display ON
C=1: Cursor ON.
B=1: Blinking.
S/C=1: Display shift.
R/L=1: Shift to the rigth.
DL =1: 8 bits.
N = 1: 2 líneas.
D7
D6
D5
D4
0
0
0
0
0
0
0
1
BF
0
0
0
0
0
0
1
0
0
0
0
0
1
0
0
0
0
1
DL
D3
D2
D1
0
0
0
0
0
1
0
1
I/D
1
D
C
S/C
R/L
*
N
F
*
ACG
ADD (Dirección del Cursor)
AC (Address Counter)
Escribir Datos
Leer Datos
Tabla 1.3
D
0
1
*
S
B
*
*
DESCRIPCIÓN
I/D=0: Decrement (-1).
D=0: Display OFF.
C=0: Cursor OFF.
S=1: Accomp anies display shift.
S/C=0: Cursos move.
R/L=0: Shift to the left.
DL =0: 4 bits.
N = 0: 1 línea.
M.C. Eduardo Sánchez Arellano.
- Página 74-
F = 1: 5x10 dots.
BF =1: operación Interna.
F = 0: 5x7 dots.
BF =0: Puede aceptar operación.
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
0
DB6
0
DB5
0
DB4
0
DB3
0
DB2
0
DB1
0
- Cursor a posición inicial.
DB7
0
DB6
0
DB5
DB4
0
0
*No Importa.
DB3
0
DB2
0
DB1
1
DB0
*
- 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
0
DB6
0
DB5
0
DB4
0
DB3
0
DB2
0
DB1
I/D
DB0
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
0
DB6
0
DB5
0
DB4
0
DB3
1
DB2
D
DB1
C
- Deslizamiento (Shift) del Cursor/Display.
R/L=0. A la izquierda.
R/L=1. A la derecha.
M.C. Eduardo Sánchez Arellano.
- Página 75-
DB0
B
DB0
1
S/C=0. El deslizamiento se aplica sobre el cursor.
S/C=1. El deslizamiento se aplica sobre todo el display.
DB7
0
DB6
0
DB5
0
DB4
1
DB3
S/C
DB2
R/L
DB1
*
DB0
*
- Control para 4 o 8 bits.
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
0
DB6
0
DB5
1
DB4
DL
DB3
N
DB2
F
DB1
*
DB0
*
- Poner Dirección CG RAM
El registro AC queda apuntando a la dirección indicada sobre la CG RAM.
DB7
0
DB6
1
DB5
CG5
DB4
CG4
DB3
CG3
DB2
CG2
DB1
CG1
DB0
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
1
•
DB6
DD6
DB5
DD5
DB4
DD4
DB3
DD3
DB2
DD2
DB1
DD1
DB0
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
BF
•
DB6
AC6
DB5
AC5
DB4
AC4
DB3
AC3
DB2
AC2
DB1
AC1
ESCRITURA SOBRE DR => RS = 1 Y R/W = 0.
M.C. Eduardo Sánchez Arellano.
- Página 76-
DB0
AC0
- Escritura sobre CG RAM o DD RAM:
DB7
•
DB6
DB5
DB4
DB3
DB2
DB1
DB0
DB2
DB1
DB0
Lectura del DR => RS = 1 y R/W = 1.
- Lectura desde CG RAM o DD RAM:
DB7
DB6
DB5
DB4
DB3
PROCEDIMIENTO PARA INICIALIZAR EL DISPLAY
1.- Primeramente se define el tipo de Microcontrolador al cual el display se va a conectar (8
ó 4 Bits), y el número de líneas del display, por lo que primeramente se envía al display el
numero 38H.
CODIGO
38H
RS
0
R/W
0
DB7
0
DB6
0
DB5
1
DB4
1
DB3
1
DB2
0
DB1
0
DB0
0
2.- Se prende la pantalla del display, se activa el cursor señalando la posición del próximo
caracter de entrada y se desactiva el parpadeo.
CODIGO
0EH
RS
0
R/W
0
DB7
0
DB6
0
DB5
0
DB4
0
DB3
1
DB2
1
DB1
1
DB0
0
3.- Se establece el movimiento del cursor hacia la derecha, la pantalla del display
permanece fija con la entrada de los caracteres.
CODIGO
06H
RS
0
R/W
0
DB7
0
DB6
0
DB5
0
DB4
0
DB3
0
DB2
1
DB1
1
DB0
0
4.- A partir de aquí se pueden comenzar a enviar los caracteres que se desean exhibir
dejando un tiempo entre cada uno de ellos
de 40µS. Mínimo, y con RS=1.
Por ejemplo para enviar las letras T,E y C se escribe el siguiente código ASCII.
Primero el código para la letra “T”
CODIGO
54H
T
RS
1
R/W
0
DB7
0
DB6
1
DB5
0
DB4
1
DB3
0
DB2
1
DB1
0
DB0
0
DB5
DB4
DB3
DB2
DB1
DB0
__
Ahora se envía el codigo de la letra “E”.
CODIGO
RS
R/W
DB7
DB6
M.C. Eduardo Sánchez Arellano.
- Página 77-
45H
T
1
E
0
0
1
0
0
0
1
0
1
DB5
0
DB4
0
DB3
0
DB2
0
DB1
1
DB0
1
__
Y por ultimo el código de la letra “C”.
CODIGO
43H
m
RS
1
R/W
0
DB7
0
DB6
1
T
E
C
__
T
E
C
N
O
L
O
G
I
C
O
m
m
m
m
m
m
m
m
m
m
m
BIBLIOGRAFIA
1. HITACHI DATABOOK.
M.C. Eduardo Sánchez Arellano.
- Página 78-
m
m
JUEGO DE CARACTERES ASCII DEL “LCD”
M.C. Eduardo Sánchez Arellano.
- Página 79-
<<SET>> DE INSTRUCCIONES FAMILIA –51
Instrucción
ADD
DAC
SUBB
MUL
DIV
DA
RRC
RLC
SETB C
C
X
X
X
0
0
X
X
X
1
OV
X
X
X
X
X
AC
X
X
X
Instrucción
CLR C
CPL C
ANL C, bit
ANL C,/bit
ORL C, bit
ORL C,/bit
MOV C, bit
CJNE
C
O
X
X
X
X
X
OV
AC
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................
i.....................
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
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
M.C. Eduardo Sánchez Arellano.
- Página 80-
Tabla Instrucciones Aritméticas
Nemónico
Descripción
Codificación
Byte
Período de
oscilador
1
12
2
12
1
12
2
12
1
12
2
12
1
12
2
12
1
12
2
12
1
12
2
12
ADD
A,Rn
Add register to Accumulador
0010
1rrr
ADD
A,direct
Add direct byte to Accumulador.
0010
0101
ADD
A, @Ri
Add inditect RAM to Accunulador
0010
011i
A DD
A, # data
Add immediate data to Accumulador
0010
0100
ADDC
A,Rn
Add register to Accumulador with Carry
0011
1rrr
ADDC
A, direct
Add direct byte to Accumulador with Carry
0011
0101
ADDC
A,@Ri
Add indirect RAM to Accumulador with Carry
0011
011i
ADDC
A,# data
Add immediate data to Acc with Carry
0011
0100
SUBB
A,Rn
Subtract Register from Acc with boorrow
1001
1rrr
SUBB
A, direct
Subtrac direct byte from Acc with boorrow
1001
0101
SUBB
A,@Ri
Subtract indirect RAM from ACC with boorrow
1001
011i
SUBB
A, # data
Subtract immediate data from Acc with boorrow
1001
0100
INC
A
Increment Accumulador
0000
0100
1
12
INC
Rn
Increment regitrer
0000
1rrr
1
12
INC
Direct
Increment direct byte
0000
0101
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
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
Direct address
Dato I nmediato
Direct address
Immediate data
Direct address
Immediate data
Direct address
Direct address
Tabla 4.7 Instrucciones Lógicas
ANL
A,Rn
AND Register to Accumulator
0101
1rrr
ANL
A,direct
AND direct byte to Acumulator
0101
0101
ANL
A,@Ri
AND indirect RAM to Accumulator
0101
011i
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
ORL
A,Rn
OR register to Accumulator
0100
1rrr
ORL
A,direct
OR direct byte to Accumator
0111
0101
ORL
A,@Ri
OR indirect RAM to Accumator
0101
011i
ORL
A,#data
OR immediate data to Accumulator
0100
0100
Immediate data
ORL
Direct,A
OR Accumulator to direct byte
0100
0010
Direc address
ORL
Direct.#data
OR immediate data to direct byte
0100
0011
Direct address
XRL
A,Rn
Exclusive -OR register to Accumulator
0110
1rrr
XRL
A,direct
Exclusive -OR direct byte to Accumulator
0110
0101
M.C. Eduardo Sánchez Arellano.
- Página 81-
1
Direct address
2
1
Immediate data
3
1
Direct address
2
1
2
2
Immediate data
3
1
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
Exclus ive -OR immediate data to direct byte
0110
0011
Direct address
CLR
A
Clear Acumulator
1111
0100
1
CPL
A
Complement Accumulator
1111
0111
1
RL
A
Rotate Accumulator Left
0010
0011
1
RLC
A
Rotate Accumulator Left through the Carry
0011
0011
1
RR
A
Rotate Accumulator Right
0000
0011
1
RRC
A
Rotate Accumulator Right through the Carry
0001
0011
1
SWAP
A
Swap nibbles within the Accumulator
1100
0100
1
Inmediate data
3
TABLA 4.8 Instrucciones de Transferencia de Datos
MOV
A,Rn
Move register to Accumulator
1110
1rrr
MOV
A,direct
Move direct byte to Accumulator
1110
0101
MOV
A,@Ri
Move indirect RAM to Accumulator
1110
100i
MOV
A,#data
Move immediate data to Accumulator
0111
0100
MOV
Rn, A
Move Accumulator to register
1111
1rrr
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
MOV
Direct,direct
Move direct to direct
1000
1010
Dir. Addr. (src)
MOV
Direct,@Ri
Move indirect RAM to direct byte
1000
011i
Direct address
MOV
Direct,# data
Move immediate data to direct bute
0111
0101
Direct address
MOV
@Ri,A
Move Accumulator to indirect RAM
1111
011i
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
I mmediate data
2
MOV
DPTR,#data 16
1001
0000
Immed. Data 15 -8 .
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
XCH
A,direct
Exchange direct byte with Accumulator
1100
0101
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
Load data pointer with a 16- bit constant
M.C. Eduardo Sánchez Arellano.
- Página 82-
1
Direct address
2
1
Immediate data
1
1
2
Dir. Addr (dest)
3
2
Immediate data
3
1
Immed. Data 7 -0
3
1
Direct address
2
Tabla 4.9 instrucciones booleanas
CLR
C
Clear Carry
1100
0011
1
12
CLR
Bit
Clear direct bit
1100
0010
2
12
SETB
C
Set Carry
1101
0011
1
12
SETB
Bit
Set direct bit
1101
0010
CPL
C
Complement Carry
1011
0011
2
12
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
ORL
C,bit
OR direct bit to Carry
1011
0000
Bid address
2
24
0111
0010
Bid address
2
24
ORL
C,/bit
OR complement of direct to Carry
1010
0000
Bid address
2
24
MOV
C,bit
Move direct bit to Carry
1010
0010
Bid address
2
12
MOV
Bit, C
Move Carry to direct bit
1001
0010
Bit address
2
24
JC
Rel
Jump if Carry is set
0100
0000
Rel address
2
24
JNC
Rel
Jump if Carry not set
0101
0000
Rel address
2
24
JB
Bit,rel
Jump if direct bit is set
0010
0000
Bit address
Rel, address
3
24
JNB
Bit,rel
Jump if direct bit is not set
0011
0000
Bit address
Rel, address
3
24
JBC
Bit,rel
Jump if direct bit is set & clear bit
0001
0000
Bit address
Rel, address
3
24
Bit address
Bit address
Tabla 4.10 Instrucciones de Salto
ACALL
Addr 11
Absolute Subroutine Call
LCALL
Addr 16
RET
RETI
a 10 a 9 a 8 1
0001
a7 a6 a5 a4
a 3 a 2 a1 a 0
2
Long Subroutine Call
0001
0010
addr15- addr8
addr7 - addr0
3
Return from Subroutine
0010
0010
Return from interrupt
1
0011
0010
a 10 a 9 a 8 0
0001
a 7 a 6 a 5 a4
a 3 a 2 a1 a 0
2
Long jump
0000
0010
addr15- addr8
addr7 - addr0
3
Rel
Short jump (relative addr)
1000
0000
rel.address
JMP
@A+DPTR
Jump indirect relative to the DPTR
0111
0011
JZ
Rel
Jump i f 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
Equal
not
1011
0100
immediate data
rel.address
3
CJNE
Rn,#data,rel
Compare immediate to registrer
not Equale
and jump if
1011
1rrr
immediate data
rel.address
3
CJNE
@R1,#data,rel
Compare immediate to indirect and jump if Not
Equale
1011
010i
immediate data
rel.address
3
DJNZ
Rn,rel
Decrement register and jump if Not Zero
1101
1rrr
rel.address
DJNZ
Direct,rel
Dcrement direct byte and jump if Not Zero
1101
0101
No operation
0000
0000
AJMP
Addr 11
Absolute jump
LJMP
Addr 16
SJMP
NOP
M.C. Eduardo Sánchez Arellano.
- Página 83-
1
2
1
direct address
2
rel.address
3
1
Presentación del Software
CROSS-ASSEMBLER
•
El ensamblador (AVMAC51) traslada mnemónicos, pseudooperaciones, y direcciones
simbólicas, a código de operación a nivel maquina, y direcciones numéricas así como
manejo de macros, directivas de procesador y directivas condicionales de ensamblador.
•
EL encadenador (AVLINK) habilita la utilización por segmentos para código relocalizable
(así como absoluto), datos. Etc. así como modularización de archivos fuente.
•
Las
librerías
(AVLIB)
colecta
múltiples
modules
objeto
para
simplificar
el
encadenamiento.
•
El generador de reportes cross-reference (AVREF) ayuda en la coordinación de
proyectos grandes.
•
EL (HEXFORM) formateador de archivos HEX, produce un archivo binario, o un archivo
HEX revisado.
M.C. Eduardo Sánchez Arellano.
- Página 84-
EL ENSAMBLADOR AVMAC51
El AVMAC51 es un programa, que acepta como entrada un archivo hecho en un
editor de texto, con código fuente en lenguaje ensamblador del 8751, el cual tiene una
extensión .ASM
El AVMAC51, primero procesa el archivo, desarrolla los macros, y después lo
ensambla.
El AVMAC51 genera un archivo listado (FILE.PRN), y un archivo objeto (FILE.OBJ) en
código maquina. Opcionalmente puede generar un archivo con expansión de macros (.MXP)
utilizando la operación MACFILE (filename).
Puede generarse un archivo CROSS- REFERENCE (FILE.XRF) usando la opción XREF.
EJEMPLOS:
AVMAC51 file.asm
AVMAC51 file.asm NOMACEVAL
; Lo procesa y lo ensambla.
AVMAC51 file.asm NOPROCESS
; Lo ensambla únicamente.
AVMAC51 file.asm ALLPUBLIC
; Lo preprocesa únicamente.
AVMAC51 file.asm XREF1
; Genera un .XRF
AVMAC51 file.asm MACFILE(filename) ; Genera un .MXP
EL MANEJADOR DE LIBRERIAS AVLIB
Es un programa que coordina numerosos archivos objeto dentro de una librería,
“File.lib”, facilitando el encadenamiento de módulos objetos frecuentemente usados.
EJEMPLO:
AVLIV routines.lib = one.obj, two.obj, tree.obj
M.C. Eduardo Sánchez Arellano.
- Página 85-
Donde one.obj, two.obj, tree.obj son archivos objeto previamente ensamblados y
son incluidos en la librería llamada routines.lib.
EL ENCADNADOR AVLINK
El encadenador es un programa que acepta como entrada uno o varios módulos
objeto, y produce un solo modulo de salida, encadenado, con código relocalizado y listo
para ser cargado en memoria.
El
AVLINK
entrega
un
archivo
de
salida
en
formato
.HEX
(INTEL),
o
.MOT(MOTOROLA) ó .TEK(TEKT RONICS).
Así como un archivo .MAP el cual muestra las localidades de segmentos y símbolos.
EJEMPLOS:
AVLINK outfile=file.obj
AVLINK outfile=one.obj, two.obj, rutinas.obj
AVLINK outfile=file.obj
OF=MOT
AVLINK outfile=infile.obj -SYMBOLS
;genera un .SYM
EL CROSS-REFERENCE REPORT GENERATOR AVREF
Es una ayuda muy útil, particularmente en la generación de proyectos grandes con
múltiples archivos y/o segmentos.
La entrada a AVREF es un archivo .SYM y uno o más archivos .XRF y la salida es un
reporte .RPT, el cual contiene información detallada de los segmentos, procedimientos y
símbolos locales y públicos.
El .XRF se genera ensamblando con la opción XREF
AVMAC51 file.asm XREF
El .SYM se genera encadenando con la opción –SYMBOLS
AVLINK fileout=file1.obj -SYMOLS
El reporte se genera
AVREF filename=fileout.sym,file1.xrf
M.C. Eduardo Sánchez Arellano.
- Página 86-
HEX FILE FORMATER
Normalmente el archivo .HEX se genera en el orden que los módulos fueron
cargados.
Hexform permite soportar el archivo .HEX y tiene una sola salida en forma Binaria o
hexadecimal.
EJEMPLO:
HEXFORM filename=filein.hex
-> .BIN
HEXFORM filename.hx2=filein.hex -TOHEX
*****
-> .HEX
PSEUDO - OPS
*****
Usando los pseudo-op DEFSEG y SEGs...
Note que "DEFSEG" define un nombre para un
segmento (llamado un segmento definido
por el usuario), mientras "SEG" es colocado dentro de un segmento. Usted permanece en
un segmento hasta que usted lo especifica (usando otro pseudo-op "SEG") que usted desea
estar en un segmento diferente.
DEFSEG nombre_del_segmento_1
SEG
db
nombre_del_segmento_1
1
DEFSEG nombre_del_segmento_2
SEG
db
nombre_del_segmento_2
2
Usted puede asignar atributos a un
segmento especificando el atributo "ABSOLUTE"
permite el uso de la palabra "ORG" (origen del inicio de dirección absoluta) dentro del
segmento.
DEFSEG NOMBRE_SEGMENTO, ABSOLUTE
SEG
NOMBRE_SEGMENTO
ORG
100H
db
3
ORG
db
200H
4
M.C. Eduardo Sánchez Arellano.
- Página 87-
El pseudo-op "ORG" puede ser ademas usado en un segmento relocalizado el cual
tiene el atributo "START=", pero si el segmento
reside completamente dentro de un
modulo. Si el "ORG" es usado en un segmento relocalizable, del tipo "START=" en mas de
un modulo, entonces ese segmento debera ser “OVERLAID".
Note que usted puede usar opciones AVLINK en segmentos relocalizables, pero no
en segemntos
"ABSOLUTES" y eso lo deberá advertir el encadenador (linker) si usted
sobreescribir segmentos relocalizables pero no si un segmento "ABSOLUTE" sobreescribe
cualesquier otro segmento.
DEFSEG SEG_RELOC, START=250H
SEG
db
SEG_RELOC
5
ORG
db
300H
6
Desde que "SEG_RELOC" es relocalizable el
siguiente segmento causa un preventivo
(warning) 'sobreescritura' al tiempo de encadenar (AVLINK) . . .
DEFSEG segover, start=2F0H
seg segover
db 7
El atributo "OVERLAID" puede ser usado
solamente por el mismo nombre del segmento
en mas de un modulo . . .
DEFSEG segol, OVERLAID
seg segol
db 55H
Uso del atributo "CLASS=" . . . Usted puede asignar cualesquier atributo clase aplicable
con la oración "CLASS="
DEFSEG seg1code, CLASS=CODE
SEG
db
seg1code
8
M.C. Eduardo Sánchez Arellano.
- Página 88-
Usted pude asignar un segmento a la clase "DATA" . . .
DEFSEG seg1data, CLASS=DATA
SEG
db
seg1data
9
Algunos chips usan otras clases, por ocasiones la clase "PAGE0", con la cual coloca datos
en pagina0 . . .
;
DEFSEG segzero, CLASS=PAGE0
;
SEG
;
db
segzero
1
Note que cualquier CLASS aplicable a un chip tiene un nombre de segmento predefinido
conocido para el ensamblador, por ejemplo:
SEG
db
SEG
db
CODE
0AH
DATA
0BH
Note que el campo de la dirección del file '.PRN' mostrara después de la dirección:
& -> Para un segmento definido por el usuario
' -> Para un segmento predefinido como CODE
'' - >
Para un segmento predefinido como DATA
@ -> (Si es aplicable) para un segmento predefinido PAGE0
* -> Para una etiqueta externa
Usted puede especificar la alineación de un segmento, usando el atributo "ALIGN=", donde
el valor deberá ser una potencia de 2 -DEFSEG segalign, ALIGN=100H
SEG
db
segalign
0DH
Usted puede además especificar el tamaño del bloc de un segmento, usando "BLOCK="
donde el valor deberá ser una potencia de 2 -DEFSEG segblock, BLOCK=200H
M.C. Eduardo Sánchez Arellano.
- Página 89-
SEG
db
segblock
0EH
(Para propósitos de compatibilidad,
ciertos sinónimos han sido agregados como pseudo-
ops validos. Esos deberán ser notados en las siguientes tres secciones.)
USO DE LOS pseudo-ops DS DB, DW, ...
DS es usado para reservar un cierto numero de espacio de BYTES sin inicializar . . .
DS
8
RMB y DEFS son sinónimos de DS..
RMB
6
DEFS
4
DW define un numero de 16-bit,
DW
123H
DW puede definir mas de una palabra...
DW
123H, 456H, 789H
DEFW es una sinónimo de DW...
DEFW
5
DEFW
100H, 256
FDB es como DW, excepto que además permite dos o más comas consecutivas previendo
un valor cero entre cada dos comas . . .
FDB
1,2,,3,,,4
DB define un byte a la vez
DB
4
DB
1,2,3
DB es además usado para textos (strings) de código ASCII . . .
DB
;
"hola, Tecnológico"
DEFB y DEFM son sinónimos de DB...
DEFB
1, 2, "hello"
DEFM
'world', 3
FCB es como DB, excepto (como en FDB)
que además permite dos o más comas
consecutivas, previendo valor de cero entre cada dos comas . . .
FCB
5,,6,7
FCC es un pseudo para definir un texto con dos sintaxis validas. En el primero un numero
decimal seguido por una coma, que indica que esta iniciando el
siguiente carácter
(diferente de espacio o tab), un texto del numero indicado de caracteres será tomado.
FCC
4,string
M.C. Eduardo Sánchez Arellano.
- Página 90-
FCC
10,string
Note que el texto "string" no es tan
largo como el numero indicado, será
recortado
cuando sea menor y se le agregaran espacios (caracteres) cuando sea mayor; el numero
mas alto permitido es 132.
En la segunda sintaxis permitida del
primer carácter después del pseudo-op FCC
es
considerada el limite del texto; hasta que ese carácter sea visto, el texto continuara siendo
procesado.
FCC
/monday/
FCC
zmondayz
FCC
7monday7
FCC
&monday&
Uso de EQU y TEQ...
Usted puede igualar un símbolo con un valor numérico usando las directivas EQU y TEQ. El
psuedo-op EQU simplemente asigna un valor a una etiqueta, mientras que TEQ permite
además que la misma etiqueta sea redefinida tiempo después.
labelname
labeltwo
labeltwo
EQU
2
TEQ
TEQ
3
4
SET, ASET y DEFL son sinónimos de TEQ..
labeltwo
SET
5
labeltwo
ASET
5
labeltwo
DEFL
6
Note que cualquier etiqueta "DEBERA" iniciar en la columna 1.
Uso de PUBLIC y EXTERN...
Usted puede usar usa símbolos atraves de módulos (ej., programas en archivos fuentes
separados) usando los pseudo-ops PUBLIC y EXTERN.
El pseudo-op PUBLIC es usado para indicar un símbolo el cual es definido en el presente
modulo para el cual será tomado como referencia desde un modulo diferente
PUBLIC
otherlabel
otherlabel
DB
5
Note que usando la opcion ALLPUBLIC hará que todas las etiquetas usadas en el presente
modulo sean como PUBLIC.
M.C. Eduardo Sánchez Arellano.
- Página 91-
XDEF y GLOBAL son sinónimos de PUBLIC.
Para tomar como referencia un símbolo que es definido en otro modulo, use el pseudo-op
EXTERN ...
EXTERN
outlabel
Usando la directiva EXTERN permite que la etiqueta sea usada en el presente modulo, aun
cuando no esta definida allí.
Sinónimos de EXTERN incluyen EXT, EXTRN, EXTERNAL, y XREF.
Uso de PROCedures...
Usando PROC permite el uso local de símbolos, esto es, símbolos cual identidad es conocida
solamente entre lo que precede a PROC y antes de ENDPROC.
proclab
L?local
PROC
db
5
ENDPROC
proc2lab PROC
L?local
db
6
ENDPROC
Note que el símbolo 'L?local' no causa un
error 'multiply-defined symbol'. Note además,
que los símbolos locales deberán iniciar con L?
END...
El pseudo-op END deberá aparecer en un archivo (file) hasta el final del mismo
ensamblador terminara su trabajo al reconocer END).
END
M.C. Eduardo Sánchez Arellano.
- Página 92-
(el
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.
2.2.5.4 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 (handshake) 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
M.C. Eduardo Sánchez Arellano.
- Página 93-
programa correspondiente de atención el 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ó.
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 comienzo se indica en la tabla de vectorización.
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).
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 la Figura sig.
M.C. Eduardo Sánchez Arellano.
- Página 94-
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
EA
BIT
b0
b1
b2
b3
b4
b5
b6
b7
B6
X
b5
X
b4
ES
b3
b2
b1
b0
ET1
EX1
ET0
EX0
NOMBRE Y COMENTARIO
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
ET0: - Si ET0 = 1 habilita interrupción del Timer0.
- Si ET0 = 0 inhabilita interrupción del Timer0.
EX1: - Si EX1 = 1 habilita Interrupción externa 1 (INT1).
- Si EX1 = 0 inhabilita Interrupción externa 1 (INT1).
ET1: - Si ET1 = 1 habilita interrupción del Timer1.
- Si ET1 = 0 inhabilita interrupción del Timer1.
ES: - Si ES = 1 habilita interrupción del puerto serie.
- Si ES = 0 inhabilita interrupción del puerto serie.
Reservada.
Reservada.
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.
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.
BIT
b0
REGISTRO IP (Interrupt Priority Register.)
b5
b4
b3
b2
b1
b0
PT2
PS
PT1
PX1
PT0
PX0
NOMBRE Y COMENTARIO
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.
b7
X
B6
X
M.C. Eduardo Sánchez Arellano.
- Página 95-
Fuente de Interrupción
Externa 0…………… INT0
Timer 0……………… TIMER0
Externa 1…………… INT1
Timer 1……………... TIMER1
Puerto Serie………... R1
Puerto Serie………… T1
Bandera que Activa
IE0
TFO
IE1
TF1
RI
TI
TABLA DE VECTORIZACION DE LAS INTERRUPCIONES
Fuente de Interrupción
Externa 0…………… INT0
Timer 0……………... TIMER0
Externa 1…………… INT1
Timer 1……………... TIMER1
Puerto Serie………... R1
Puerto Serie………… T1
Dirección
0003H
000BH
0013H
001BH
0023H
0023H
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 0 (P0).
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 0 (P0), una vez concluida esta secuencia,
continuar con el programa principal de bits deslizantes.
DEFSEG INTER,ABSOLUTE
SEG INTER
START:
SALTO1:
SALTO2:
ORG 0H
JMP START
ORG 3H
JMP Tek_INTO
ORG 30H
MOV TCON,#01H
MOV IE,#081H
MOV A,#00H
SETB C
RLC A
MOV P0,A
CALL RETARDO
JNB ACC.7,SALTO1
RRC A
MOV P0,A
CALL RETARDO
;Se programa la INT0 por transición
;Habilita interrupción INT0
;Limpia Acumulador
M.C. Eduardo Sánchez Arellano.
- Página 96-
JNB ACC.0, SALTO2
JMP SALTO1
NOP
RETARDO:
SALTO3:
Tek_INTO:
SALTO5:
END
MOV R1,#40H
MOV R2,#0FFH
DJNZ R2,$
DJNZ R1,SALTO3
RET
ORG 100H
MOV IE,#0
PUSH ACC
MOV A,PSW
PUSH ACC
MOV A,R0
PUSH ACC
MOV R0,#0AH
MOV P0,#0FFH
CALL RETARDO
MOV P0,#00H
CALL RETARDO
DJNZ R0, SALTO5
POP ACC
MOV R0,A
POP ACC
MOV PSW,A
POP ACC
MOV IE,#081
RETI
2.2.6 TEMPORIZADORES Y CONTADORES (Intel)
INTRODUCION:
El microcontrolador 8751 tiene dos registros temporizadores/contadores denominados Timer 0
(T0) y Timer 1 (T1).
Los dos timer pueden ser configurados para que operen como temporizadores o
como contadores.
Cuando el dispositivo opera como timer, el registro contador se incrementa cada ciclo 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 como 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
M.C. Eduardo Sánchez Arellano.
- Página 97-
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.
Los Timer 0 y 1 tienen cuatro modos de operación.
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 dispositivo 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, que pueden ser de 8,13 ó 16 bits. Según el
modo de trabajo (TL1,TH1).
♦
A la derecha de los contadores (TL y TH) se encuentra el bit de flag o bandera. TF1, que señala el
overflow o desbordamiento de los contadores.
♦
Finalmente, si la interrupción correspondiente está habilitada, se produciría una interrupción.
TIMER 0 (T0) Y TIMER 1 (T1)
M.C. Eduardo Sánchez Arellano.
- Página 98-
TH0-TL0 y TH1-TL1: Timer Register: son pares de registros de 16 bits, que pueden actuar
como temporizadores o contadores.
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 bit (M0,M1) en el registro TMOD.
TMOD: Timer/Counter Mode Register: Selecciona el Timer 0 ó 1, el modo de operación
(Modo 0, 1, ó 2), si actúa como temporizador o como contador, etc.
B7
GATE
B6
B5
C/T
M1
Timer 1
BIT
B0-B1
B2
REGISTRO TMOD
B4
B3
B2
M0
GATE
C/T
B1
M1
Timer 0
B0
M0
NOMBRE Y COMENTARIO
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.
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
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 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.
M.C. Eduardo Sánchez Arellano.
- Página 99-
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
B0
NOMBRE Y COMENTARIO
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.
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
INICIO:
ORG 30H
MOV
TMOD,#10H
;M0=1 de Timer1,GATE=0,C/T=0
M.C. Eduardo Sánchez Arellano.
- Página 100-
SETB
CALL
CLR
CALL
JMP
TEMPO:
LEER:
MOV
MOV
MOV
MOV
ANL
JZ
RET
P1.0
TEMPO
P1.0
TEMPO
INICIO
;
;
;
;
;
Poner a Uno el P1.0
LLAMA A SUBRUTINA
PONER A ZERO P1.0
LLAMADA A SUBRUTINA
REPITE TODO NUEVAMENTE
TL1,#00
TH1,#00
TCON,#40H
A,TCON
A,#80H
LEER
;Inicializa parte baja de contador a 0
;Inicializa parte alta del contador a 1
;Inicializa TR1=1 para el conteo
;lee el contenido del registro
;And para preguntar si flag TF1=1
;si aun no llega a overflow TF1=0 por lo tanto ACC=0.
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).
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.
b7
SM0
BIT
b0
B6
SM1
b5
SM2
REGISTRO SCON
b4
b3
b2
REN
TB8
RB8
b1
TI
b0
RI
NOMBRE Y COMENTARIO
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
intervalo de tiempo del bit de sto p en los otros modos.
b1
b2
Debe ser desactivado por software.
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
en los otros modos.
Debe ser desactivado por software.
RB8: En modos 2 y 3 es el 9° bit que se recibe.
M.C. Eduardo Sánchez Arellano.
- Página 101-
del
bit de stop
b3
b4
b5
B6-b7
En modo 1, si SM2=0, RB8 es el bit de stop.
En modo 0, no se utiliza.
TB8: Corresponde al 9° bit de datos en los modos 2 y 3.
Es programable por el usuario. Habitualmente es el bit de paridad.
REN: - Si REN=1 (por software) permite la recepción.
- Si REN=0 no la permite
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.
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
SMOD
GF1
GF0
PD
IDL
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 102-

Documentos relacionados