UNIDAD I

CONCEPTOS GENERALES
Conceptos Generales
Microprocesadores Otoño 2011
1
Fall 2011
Contenido
Introducción
Arquitectura generalizada de una computadora
Componentes de una computadora
Conjunto de Instrucciones y lenguaje de maquina
2
Introducción
… El microprocesador es un dispositivo programable
con capacidades de decisión y computo.
3
Introducción
` Cada microprocesador puede ejecutar un conjunto de
instrucciones fijas expresadas en forma de patrones
binarios llamadas lenguaje de maquina.
` Cada patrón binario asociado a una instrucción es
también asociado a un mnemónico.
` El conjunto de mnemónico forma el ensamblador del
microprocesador.
Lenguaje de
Maquina
00110111
Nmemonicos
LD SP,
1895H
4
Introducción
… El microprocesador lee instrucciones en binario del
dispositivo de almacenamiento llamado memoria.
… El microprocesador acepta datos binarios y los
procesa de acuerdo a las instrucciones.
Salida
Instrucciones
5
Introducción
… Los componentes físicos del sistema son llamados hardware.
… Un programa es un conjunto de instrucciones que desarrollan
una tarea especifica
… Un conjunto de programas son llamados software
Entrada
Salida
Hardware
Software
Programa 1 Programa 2 Programa 3
6
Introducción
7
Unidad
Aritmética Lógica
(ALU)
Unidad de
Control
Unidad de Memoria
Entrada Salida
Microprocesador
Microprocesador
Memoria I/O
Dispositivos Periféricos
• Convertidores A/D
• Timer
• Serial I/O
Microcontrolador
Organización de un Sistema basado
en Microprocesador
8
` ALU: realiza
operaciones
aritméticas (+,-, etc.)
y lógicas (and, or,
etc)
` Registros: almacenan
datos y direcciones
temporalmente
` Unidad de Control:
envía señales de
control y
temporización a todo
la unidad de
microprocesador.
ALU
Arreglo de
Registros
Unidad de
Control
BUS
ROM RAM
Memoria
Entrada Salida
Conjunto de Instrucciones
9
… Longitud de palabra cambia con respecto a cada
microprocesador.
… Un microprocesador de 16 bit tiene una longitud de
palabra de 16 bits, i.e. 2 bytes.
… Instrucción se define como una tarea completa que
el microprocesador puede realizar, puede estar
formada de 1 o mas palabras
Conjunto de Instrucciones
10
If A > B
C = 2 +A
else
B = C +A
LD B,32H
LD C,0A2H
ADD A,B
0000 1111
1010 1100
0101 0101
Dependiente del
hardware
Puede Migrar a
otra plataforma
Conjunto de Instrucciones
` Cada microprocesador es diseñado para ejecutar un
determinado numero de instrucciones
` La instrucción esta compuesta por las señales de control
que le indicaran al microprocesador que acción
ejecutar
` El numero de instrucciones para cada procesador varia
de acuerdo al diseño del mismo.
◦ Por ejemplo el Z80 tiene 158 instrucciones
11
Formato de Datos
` El microprocesador solamente es capaz de procesar
datos binarios.
` Estos datos pueden estar en los siguientes formatos
◦ Código ASCII, (American Standard Code for Information Interchange)
x Código de 7-bits que representa letras, números decimales,
símbolos y comandos de maquina.
◦ Código BCD, (Binary-Code Decimal)
x Representación binaria de los 10 dígitos decimales
◦ Enteros con signo
x El digito mas significativo es usado para el signo, 0 representa un
numero positivo, mientras que 1 representa un numero negativo
◦ Enteros sin signo
x Los 8-bits son usados para representar un numero
12
Formato de Datos
Código ASCII
30H – 39H 0 – 9
41H – 5AH A – Z
61H – 7AH a – z
00H – 0FH Comandos
de Maquina
Ejemplo:
07H Campana
09H Tabulador
Código BCD
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
Ejemplo:
00110101 35
13
Codigo ASCII
14
Formato de Datos
Enteros con Signo
Rango
-128 a 127
Números Negativos se representan
en complemento a 2
Ejemplo:
01111111 127
11111111 -128
Entero sin Signo
Rango
0 a 255
Los 8 bits son usados para
representar al numero
Ejemplo
10000000 128
11111111 255
00001010 10
1 0 0 1 1 0 1 0
MSB LSB
Signo
1 0 0 1 1 0 1 0
MSB LSB
15
Programando en Ensamblador
• Mnemónicos
• LD A,32H
• ADD B,C
Codigo
Fuente
• Traduce los
mnemónicos a
lenguaje de
maquina
Compilador
• Lenguaje de Maquina
• Listo para ejecutarse
en el procesador
Código
Objeto
16
UNIDAD 2
Unidad de Microprocesador (MPU)
Microprocesadores Otoño 2011
1
Contenido
Unidad de Microprocesador Generalizada
Memoria
Dispositivos de Entrada y Salida
Sistemas basados en Microprocesadores
2
Unidad de Microprocesador
Generalizada
 La Unidad de Microprocesador (MPU) es un
dispositivo lógico programable con un determinado
conjunto de instrucciones.
 El proceso de ejecución de una instrucción consiste
en adquirir, decodifica y ejecutar la tarea
especifica
3
MPU
 El proceso de
comunicación y
operaciones
relacionadas entre el
MPU y dispositivos
externos se clasifica en
dos categorías
 Operaciones iniciadas
por el MPU
 Operaciones iniciadas
por los periféricos
Adquirir
Decodificar Ejecutar
4
Operaciones del MPU
MPU
• Lectura de
Memoria
• Escritura de
Memoria
• Lectura de I/O
• Escritura de I/O
Perifericos
• Reset
• Interrupción
• Espera
• Solicitud del Bus
5
Unidad de Memoria
 La Unidad de Memoria es un
conjunto de registros de 8
bits.
 Cada registro esta definido
como una localidad de
Memoria
 La localidad de memoria es
identificada por un numero
conocido como dirección.
1 0 0 1 1 0 1 0
0 0 1 0 1 1 1 0
1 0 1 1 1 0 1 0
0 0 0 1 1 1 1 0
1 0 1 0 1 0 1 0
0 0 0 1 1 0 1 0
1 0 1 1 0 1 1 0
0 0 0 1 1 0 1 0
0 0 0 1 1 0 1 0
1 0 1 1 0 1 1 0
0 0 0 1 1 0 1 0
Memoria
Registro de 8 bits
000
001
010
111
Dirección
6
Operaciones del MPU
 El bus es un conjunto de señales que se activan al
mismo tiempo para proveer información
 Los pasos para ejecutar las operaciones del MPU
son:
◦ Identificar la locación de memoria o la dirección del
periférico
◦ Proveer las señales de sincronización y temporización
◦ Transferir los datos
7
Operaciones del MPU
Adquirir
Decodificar
Ejecutar
Identifica dirección de
memoria o periférico
• Provee las señales de
sincronización
• Transfiere datos
• Dirección
• Datos
• Señales de
Control
8
Buses
 Microprocesadores
tales como Z80 y
8085 tienen 16
líneas en su bus de
dirección.
 Por lo tanto son
capaces de
direccionar 2
16
= 64K
Unidad de
Microprocesador
Bus de
Dirección
Señales de
Control
Bus de
Datos
Reconocimiento de
Solicitud
A
m
A
0
D
n
D
0
9
Buses
 Bus de datos
◦ El tamaño del bus de datos determina el tamaño del
numero binario que puede ser transferido.
◦ El tamaño del bus de datos afecta el desempeño y rapidez
del microprocesador
 Bus de Control
◦ El MPU genera una señal de control especifica para las
siguientes operaciones
 Lectura de memoria
 Escritura de memoria
 Lectura I/O
 Escritura de I/O
10
Solicitud Externa
 Existen varios ocasiones en las que la operación del
MPU puede ser interrumpida
◦ Reset
 Empieza nuevamente desde el principio
◦ Interrupción
 Para tu proceso actual y realiza algo mas critico
◦ Espera
 Cuando la velocidad de respuesta de la memoria es muy lenta,
retrasa la operación del MPU
◦ Solicitud del Bus
 Cuando las operaciones del MPU son lentas comparadas con los
periféricos, entonces los periféricos pueden solicitar el uso de los
buses
11
Arquitectura Interna del
Microprocesador
B
u
s

I
n
t
e
r
n
o
Decodificador de
Instruccion
Unidad Lógica
Aritmética
(ALU)
Banderas
Registros
Apuntadores a
Memoria
Registros
12
Memoria
Memoria
Primaria
Read-Only
Memory
(ROM)
Borrable
EPROM
EEPROM
Flash
Permanente
ROM
PROM
Read/Write
Memory
Estática
Dinámica
Secundaria
Acceso
Aleatorio
Discos
Floppy
Duro
CD-ROM Acceso Serial
Cintas
Magneticas
13
Memoria Primaria
 Memoria de Lectura y Escritura comúnmente
conocida como RAM (Random Access Memory)
 La memoria RAM es volátil, lo que significa que
cuando la alimentación se apaga, pierde toda la
información
 Existen dos tipos de memoria RAM
◦ Memoria Estática
◦ Memoria Dinámica
14
RAM
15
• Almacena los bits como voltaje
• Tiene una baja densidad pero alta velocidad
• Es una memoria cara y consume mayor potencia que la
dinámica
• La memoria Cache incluida en los microprocesadores es
SRAM
Memoria
Estática
(SRAM)
• Almacena bits como carga
• Tiene una alta densidad y bajo consumo de potencia
• Es mas barata que la memoria SRAM
• Su principal desventaja es que la carga se fuga, por lo
cual se requiere refrescarla. Por lo cual requiere circuitería
extra, aumentando el costo del sistema.
• Para memorias pequeñas de menos de 8K es mas
apropiada SRAM.
Memoria
Dinámica
(DRAM)
Read-Only Memory
 ROM es una memoria no volátil, es decir, retiene la
información aun si la alimentación es apagada.
 Esta memoria es usada para almacenar datos y
programas que no deben ser alterados
 Existen 5 tipos de ROM
◦ Masked ROM
◦ PROM, EPROM EEPROM
◦ Flash memory
16
Read-Only Memory
 Masked Rom, la información es almacenada
mediante un proceso de enmascaramiento y
metalización. Este es un proceso caro, pero
económico para grandes cantidades de producción.
 PROM (Programable ROM). Esta memoria esta
formada por una matriz de polisilicio y sus líneas
actúan como fusibles. Esta memoria puede ser
programada por medio de un programador que
quema los fusibles.
17
Read-Only Memory
 EPROM (Erasable Programable ROM).
◦ Esta memoria almacena la información como carga de la
compuerta de un transistor.
◦ Esta memoria se programa aplicando voltaje alto para
cambiar la carga del transistor.
◦ La memoria puede ser borrada exponiéndola a luz
ultravioleta a través de su ventana de cuarzo
◦ Debido a la facilidad de programación y borrado es ideal
para el desarrollo de proyectos experimentales
◦ Sus desventajas son
 Se debe sacar del sistema para borrarla
 El chip completo es borrado
 El proceso de borrado toma 15 a 20 min
18
Read-Only Memory
 EEPROM (Electrically Erasable PROM).
◦ La información puede ser alterada usando señales eléctricas
al nivel de registro, y no borrar el chip completo
◦ Esta memoria incluye el modo de borrado completo que se
lleva a cabo en 10ms
 Memoria Flash
◦ Es una variante de las EEPROM
◦ Esta memoria es ideal para aplicaciones de baja potencia
◦ Los niveles de borrado de esta memoria son:
 bloque (conjunto de registros)
 chip completo.
19
Memoria Primaria
 Memoria de Escritura y Lectura (R/WM) esta formada
por registros.
 Cada registro esta formado por flip-flops
 Esta memoria se ocupa para almacenar datos o
programas.
 ROM esta formada almacena información
permanentemente usando un arreglo de transistores.
20
Flip-Flops como elemento de
almacenamiento
 La memoria es un circuito que puede almacenar bits
en su elemento básico de almacenamiento conocido
como flip-flop
 Para almacenar un nuevo valor en el flip-flop
requerimos de una dato y una señal de habilitación.
D
IN
EN
D
OUT
D
Q
EN
Q
D
EN
21
Flip-Flops
D
IN
EN
D
OUT
D
Q
EN
Tri-State Buffer en la salida
RD
D
IN
EN
D
OUT
D
Q
EN
Celda de Memoria
RD
El bit almacenado puede
ser leído solamente si el
buffer es habilitado
Al introducir un buffer en
la entrada de datos del
flip-flop, ahora podemos
escribir solo si el buffer es
habilitado
WR
22
Registro
D
Q
EN
D
Q
EN
D
Q
EN
D
Q
EN
I
3
I
2
I
1
I
0
O
3
O
2
O
1
O
0
WR
RD
EN
23
Registro
Buffer de Entrada
Registro
Buffer de Salida
I
0
I
1
I
2
I
3
O
0
O
1
O
2
O
3
WR
RD
EN
Registro de 4 bits
WR
RD
EN
El número de bits almacenados en
un registro es llamado palabra de
memoria.
24
Registro 4 × 8 bits
Buffer de Entrada
Buffer de Salida
I
4
I
5
I
6
I
7
O
4
O
5
O
6
O
7
WR
RD
A
1
I
0
I
1
I
2
I
3
O
0
O
1
O
2
O
3
11
10
01
00
D
e
c
o
d
i
f
i
c
a
d
o
r

2
-
4
A
2
25
Unidad de Memoria con 8 registros
R
7
R
6
R
5
R
4
R
3
R
2
R
1
R
0
111
110
101
100
011
010
001
000
Líneas de I/O
RD WR
WR
RD
A
2
A
1
A
0
26
Chip Select Signal
R
3
R
2
R
1
R
0
0011
0010
0001
0000
Líneas de I/O
CS WR
A
2
A
1
A
0
RD
A
3
R
3
R
2
R
1
R
0
1011
1010
1001
1000
Líneas de I/O
CS WR
A
2
A
1
A
0
RD
A
3
Cuando existen líneas de dirección adicional se puede utilizar
la señal de selección del chip. Esta señal habilita a uno de los
dos chip y se obtiene la información del registro deseado
27
Requerimientos de un chip de Memoria
 Se requiere de
 Líneas de dirección para identificar el registro de
memoria
 Una señal (CS) para habilitar al chip de memoria
 Señales de control para lectura y escritura
 El número de líneas de dirección requeridas es
determinado por el número de registros en la
memoria
 2
n
registros requieren n líneas de dirección.
28
Requerimientos de un chip de Memoria
 Si existen líneas de dirección adicionales, se usan para
la señal CS
 La señal de control RD habilita el buffer de salida, y el
dato del registro seleccionado esta disponible a la
salida
 Similarmente, la señal de control WR habilita el buffer
de entrada y la información en las líneas de entrada
puede ser escrita en el registro seleccionado
29
 El MPU usa 8 líneas de dirección para identificar
dispositivos de I/O.
 A este tipo de direccionamiento se le conoce como
Peripherals-mapped I/O
 El MPU puede identificar hasta 256 (2
8
= 256)
dispositivos de entrada y 256 de salida
 Los dispositivos de entrada y salida son diferenciados
por las señales de control I/O Read e I/O Write
Dispositivos de I/O
 El rango de direcciones es de 00
H
a FF
H
es conocido
como el mapa de I/O
 Las direcciones son referidas como dirección del
dispositivo o número de puerto de I/O
 Para conectar dispositivos de I/O se deben resolver
dos problemas
 Como asignarles una dirección
 Como conectarlos al bus de datos
Dispositivos de I/O
 En una arquitectura de bus, los dispositivos no
pueden conectarse directamente al bus de datos o
direcciones.
 Todos los dispositivos deben conectarse a través de
un dispositivo de interfaz tri-estado
 De esta manera, los dispositivos estarán conectados
y habilitados solamente si el MPU escoge
comunicarse con ellos.
Dispositivos de I/O
 Los pasos para comunicarse con los dispositivos de
entrada y salida son los siguientes
 El MPU coloca los 8-bit de dirección en el bus
 El MPU envía una señal de control para habilitar los
dispositivos de I/O
 Se transfieren los datos vía el bus de datos.
Dispositivos de I/O
Arquitectura General de un MPU
B
u
s

I
n
t
e
r
n
o
Decodificador de
Instruccion
Unidad Lógica
Aritmética
(ALU)
Banderas
Registros
Apuntadores a
Memoria
Registros
Bus de Dirección
Señales de Control
Reconocimiento de
Solicitud
Bus de Datos
Buffer de Entrada
Buffer de Salida
D
e
c
o
d
i
f
i
c
a
d
o
r
Memoria
Dispositivos de
I/O
MPU
Ejemplo de un Sistema basado en
Microprocesadores
MPU
E
P
R
O
M
R
A
M
O
u
t
p
u
t

P
o
r
t

1
V
e
n
t
i
l
a
d
o
r
C
a
l
e
n
t
a
d
o
r
L
C
D
C
o
n
v
e
r
t
i
d
o
r

A
/
D
O
u
t
p
u
t

P
o
r
t

2
O
u
t
p
u
t

P
o
r
t

3
I
n
p
u
t

P
o
r
t

1
S
e
n
s
o
r

d
e

t
e
m
p
e
r
a
t
u
r
a
Bus de Dirección
Bus de Datos
A
15
A
0
D
7
D
0
MEMRD
MEMWR
IOWR
IORD
UNIDAD 3
ARQUITECTURA DEL Z80
Microprocesadores
Otoño 2011
1
Contenido
2
Arquitectura interna del Z-80
Interface
Ciclos de máquina y temporización del bus de
comunicación.
Conjunto de Instrucciones
Arquitectura del Z80
3
 El microprocesador Z80 fue fabricado por ZILOG en
1976, fue diseñado para ser compatible con INTEL
8080
 El Z80 es un microprocesador de 8 bits de propósito
general con 16 líneas de dirección.
 Empaquetado en un dual-in-line package (DIP)
 Las rangos de frecuencia de la familia Z80 van de
2.5MHz a 8MHz
Modelo de Hardware Z80
4
 Las señales de interfaz del microprocesador se
clasifican en 6 grupos
Interfaz
Bus de dirección
Bus de datos
Señales de control
Solicitud Externa
Reconocimiento de Solicitud y
señales especiales
Señales de potencia y
frecuencia
Modelo de Hardware del Z80
5
 Bus de dirección
 Tiene 16 líneas unidireccionales
 Es capaz de direccionar 2
16
= 64K
 Es usado para enviar las direcciones de memoria o de
los dispositivos de I/O
 Bus de datos
 Consiste en 8 líneas bidireccionales
 Usado para transferencia de datos desde el MPU
hacia la memoria o dispositivos I/O
Señales de Control y Estado
 Machine Cycle One (M1)
 Indica cuando un opcode ha
sido adquirido
 Memory Request (MREQ)
 Indica cuando el bus tiene una
dirección de memoria valida
 I/O Request (IORQ)
 Indica cuando la parte baja
del bus (A7 – A0) tiene una
dirección valida asociada a
un dispositivo de I/O
 Read (RD)
 Indica que el microprocesador
esta listo para leer datos de
memoria o de un dispositivo
de I/O
 Write (WR)
 Indica que el microprocesador
esta listo para escribir datos
en la memoria o en un
dispositivo de I/O
Señales de Estado Señales de Control
6
Solicitud Externa
 Reset
 Cuando esta señal se activa, el Program Counter (PC),
Interrupt register (I) y el memory refresh register (R) son
puesto a cero
 El bus de dirección y datos se encuentra en el estado
de alta impedancia durante el reset.
 Todas las señales de control se inactivan
 La señal de RESET se activa externamente por medio
de un switch
 Se debe activar por al menos 3 ciclos de reloj para
que el proceso de reset sea finalizado
7
Solicitud Externa
 Interrupt Request
 Esta señal de interrupción es generada por un dispositivo de
I/O
 Cuando el microprocesador acepta esta solicitud, activa la
señal IORQ para indicar que la solicitud ha sido reconocida
 Esta interrupción es enmascarable, esto significa que puede
ser desactivada por software
 Nonmaskarable Interrupt
 Esta interrupción no puede ser desactivada por software
 Se utiliza para implementar señales de procedimientos de
emergencia
8
Solicitud Externa
 Bus Request
 Un dispositivo de I/O puede hacer solicitud del bus de
datos, dirección y control activando esta señal
 El dispositivo externo puede usar el bus y cuando ha
terminado su operación regresa el control al
microprocesador
 Wait
 Esta señal es usada por la memoria y los dispositivos de
I/O para extender las operaciones del Z80
 Esta señal es usada cuando la memoria o los dispositivos de
I/O son mas lentos que el Z80
 El Z80 introduce ciclos de espera hasta que la dirección en
el bus de direcciones es valida
9
Reconocimiento de Solicitud y Señales
Especiales
 Solamente las señales de Bus Request e Interrupt
requieren reconocimiento.
 La Interrupción es reconocida por medio de las
señales IORQ y Machine cycle one (M1)
 Bus request es reconocido por Bus Acknowledge
(BUSAK)
 BUSAK indica que el bus de datos, direcciones, y las
señales de control han entrado en un estado de
alta impedancia. Por lo tanto pueden ser usadas
por el dispositivo solicitante.
10
Señales especiales
 HALT, indica que el MPU ha ejecutado una
instrucción para detener su operación.
 Refresh, indica que el bus de direcciones A
7
-A
0
tiene una dirección de memoria actualizada.
 Esta señal se usa en conjunción con Memory Request
para refrescar el contenido de una localidad de
memoria
 EL Z80 usa un reloj de una sola fase y su
alimentación es de 5V
11
Estructura Interna del Z80
 Registros de propósito general
 Acumulador
 Banderas
 Conjunto de Registros Alternativos
 Registros Apuntadores a Memoria
 Registros Índice
 Apuntador a la Pila (Stack)
 Contador del Programa
 Registros de Propósito Especifico
12
Datapath Simplificado
13
Registros
 Registros de Propósito General
 El Z80 tiene 6 registros de propósito general llamados
B,C, D, E, H, L
 Estos registros son de 8 bits y son usados para
almacenar datos durante la ejecución del programa
 Puede se combinados en pares para realizar
operaciones de 16 bits o almacenar direcciones de
memoria, BC, DE, HL
 Estos registros se usan para cargar o copiar datos de
la memoria.
14
Acumulador
 El acumulador es un registro de 8 bits que es parte
de la ALU y se identifica como el registro A
 Este registro se utiliza para almacenar datos y
para realizar operaciones matemáticas y lógicas.
 El resultado de las operaciones realizadas en la
ALU es almacenado en el acumulador
15
Banderas
 ALU incluye 6 flip-flops que se modifican de
acuerdo a las condiciones después de que las
operaciones de la ALU han sido ejecutadas.
 Estos flip-flops se conocen como banderas
 Carry (C)
 Half – Carry (H)
 Suma o Resta (N)
 Signo (S)
 Cero (Z)
 Paridad, Overflow (P/V)
16
S Z H P/V N C
D
7
D
0
Conjunto de Registros Alternativos
 El Z80 incluye un conjunto de registros alternativos
referenciados como B’, C’ ,D’, E’, H’, L’ y el
acumulador A’ y el registro de banderas F’
 Estos registros no están disponibles para el
programador
 Sin embargo las instrucciones de intercambio
utilizan estos registros para el intercambio de datos
17
Apuntadores de Memoria
 El Z80 incluye 4 registros de 16 bits y estos registros
son usados para almacenar las direcciones de
memoria y son llamados apuntadores a memoria.
 Para leer o escribir datos (o instrucciones), el MPU
debe identificar la localidad de memoria por medio
de su dirección.
 Estos apuntadores se utilizan para la lectura y
escritura de datos a memoria
18
Registro Índice
 El Z80 tiene dos registros de 16 bits llamados
registros índice
 Los registros índice identifican direcciones de
memoria para la transferencia de datos
 Los registros son referenciados como IX, IY
19
Apuntador al Stack
 El apuntador al stak es un registro de 16 bits que
apunta a una sección de memoria llamada stack
 El stack es una área de memoria localizada en la
RAM, el principio del stack es definido por la
dirección de memoria almacenada en el apuntador.
 El stack se utiliza para pasar parámetros a las
subrutinas así como datos temporales de las
subroutinas
20
Contador de Programa
 El contador del programa es un registro de 16 bit.
 El microprocesador utiliza este registro para
secuenciar la ejecución de instrucciones
 La función del PC es apunta a la dirección de
memoria donde el próximo byte será adquirido
 El microprocesador adquiere un byte de memoria e
incrementa el PC (PC = PC + 1) para que apunte a
la siguiente instrucción.
21
Registros de Propósito Especifico
 El Z80 incluye dos registros de propósito especifico
que normalmente están ausentes en otros
microprocesadores
 Estos registro son
 Vector de Interrupción
 Registro de Refresco de Memoria
22
Conjunto de Registros
Acumulador A Banderas F
B C
D E
H L
Registro Índice (IX)
Registro Índice (IY)
Apuntador al Stack (SP)
Contador de Programa (PC)
Vector de Interrupción (I) Refresco de Memoria (R)
23
Acumulador A’ Banderas F’
B’ C’
D’ E’
H’ L’
S Z H P/V N C
D
7
D
0
Datapath del Z80
24
Ciclos de Maquina
 El microprocesador Z80 esta diseñado para
ejecutar 158 instrucciones diferentes
 Cada instrucción tiene dos partes
 Operational Code (OpCode)
 Es la identificación de la instrucción
 Operandos
 Es el dato sobre el cual se va a realizar el comando
 Puede ser un byte o el contenido de un registro
 Una instrucción puede contener uno o mas bytes
25
Ciclos de Maquina
 Para entender las operaciones que realiza el MPU
debemos definir tres conceptos básicos
 Ciclos de Instrucción
 Es el tiempo requerido para la ejecución de una instrucción
 En el Z80, los ciclos de instrucción van de 1 a 6 ciclos de
máquina
 Ciclos de Maquina
 Es el tiempo requerido para realizar una operación de
acceso a memoria, acceso a un dispositivo de I/O o solicitud
externa
 Los ciclos de maquina van de 1 a 6 estados-T
26
Ciclos de Maquina
 Estados-T
 Ciclo de reloj
27
Total M-
cycles
Instruction M1 M2 M3 M4 M5 M6
1 INC BC opcode
2 ADD A,n opcode n
3 ADD HL,DE opcode internal internal
4 SET b,(HL) prefix opcode R(HL), set W(HL)
5
LD
(IX+d),n
prefix opcode d n,add W(IX+d)
6 INC (IY+d) prefix opcode d add R(IY+d),inc W(IY+d)
Las funciones de comunicación
 Las funciones de comunicación del MPU se clasifican
en tres categorías básicas
 Leer y escribir memoria
 Leer y escribir en dispositivos de I/O
 Reconocimiento de Solicitud Externa
 Cada instrucción consiste de uno o mas ciclos de
maquina
28
Ciclos de Maquina y Señales de
Control
Ciclos de Maquina M1 MREQ IORQ RD WR
Opcode Fetch 0 0 1 0 1
Memory Read 1 0 1 0 1
Memory Write 1 0 1 1 0
I/O Read 1 1 0 0 1
I/O Write 1 1 0 1 0
Interrupt Ack 0 1 0 1 1
Nonmaskarable Interrupt 0 0 1 0 1
Bus Ack 1 Z Z Z Z
29
Adquisición de Instrucción
1. El Z80 introduce el contenido del PC en el bus de
direcciones
a. Incrementa el PC a la siguiente instrucción
b. El PC siempre apunta a la siguiente instrucción a ser
ejecutada
2. La dirección es decodificada por el decodificador
externo y el registro es identificado
30
Adquisición de Instrucción
3. El Z80 envía las señales de control MREQ y RD para
habilitar el buffer de salida
4. El contenido del registro de memoria son puesto en
el bus de datos y traídos al decodificador de
instrucciones.
5. El Z80 decodifica el opcode y ejecuta la instrucción,
31
Ejemplo
 La instrucción LD B,A se encuentra almacenada en la
dirección 2002
H
 La instrucción es adquirida de memoria
 El código operacional es 47
H
 La instrucción copia el contenido del acumulador en
el registro B
32
Dirección Código de Maquina Instrucción Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Adquisición de Instrucción
ALU
Decodificador
de Instrucción
B C
D E
H L
IX
IY
SP
PC
47 H
Bus de datos Interno
Controlador
Bus de Dirección
Bus de datos
2002H
2002H
47H
MREQ
RD
33
Dirección Código de Maquina Instrucción Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Adquisición de Instrucción
 El MPU debe obtener
la instrucción de
memoria para poder
ejecutarla
 Ejemplo:
34
T
1
T
2
T
3
T
4
clk
A
15
-A
0
2002H
M
1
MREQ
RD
47H
D
7
– D
0
WAIT
RFSH
Dirección Código de Maquina
Instrucción Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Lectura de Memoria: Ejemplo
 La instrucción LD A,9F
H
se usa para introducir el
número 9F
H
en el acumulador
 Esta instrucción esta compuesta por dos bytes
 El MPU debe leer el opcode y decodificarlos para
darse cuenta que debe leer un segundo byte de
memoria para completar la ejecución de esta
instrucción
35
Dirección Código de Maquina Instrucción Tarea
2000
H
00111110  3E
H
LD A, 9F
H
Copiar 9FH al acumulador
2001
H
100111101  9F
H
Lectura de Memoria
 El primer ciclo de maquina se usa para leer la
instrucción de memoria
 Una vez que la instrucción ha sido decodificada, el
MPU se da cuenta de que requiere hacer otra
lectura de memoria
 Después de que la adquisición de instrucción ha
sido realizada y el PC se ha incrementado, la señal
M1 debe estar inactiva para diferenciar el segundo
ciclo de adquisición
36
Lectura de Memoria
 Las señales MREQ y RD se activan para indicar que
se requiere una lectura de memoria
 Las señales MREQ, RD y la dirección se usan para
identificar el registro a ser leído y para habilitar el
chip de memoria
37
Lectura de Memoria
38
T
1
T
2
T
3
T
4
clk
A
15
-A
0
M
1
RD
MREQ
D
7
– D
0
2000H
Refresh Address
2001H
T
1
T
2
T
3
WR
High
3EH 9FH
Frecuencia del Reloj
f = 4MHz
Periodo
(1/f) = 0.25 µs
Tiempo de Ejecución
Fetch
(4T)× 0.25µs = 1.0µs
Lectura
(3T)× 0.25µs = 0.75µs
Instrucción
(7T) )× 0.25µs = 1.75µs
Escritura de Memoria: Ejemplo
 La instrucción LD (HL),A copia el contenido del
acumulador a la locación de memoria indicada por
la dirección en el registro HL
 Esta instrucción se compone de dos ciclos de
maquina, Opcode Fetch y Escritura de Memoria
39
Dirección Código de Maquina Instrucción Tarea
2003
H
01110111  77
H
LD (HL), A
Copia el contenido de A en la
memoria . La dirección donde
se almacena el dato se
encuentra en HL
Escritura de Memoria
40
T
1
T
2
T
3
T
4
clk
A
15
-A
0
M
1
RD
MREQ
D
7
– D
0
2003H Refresh Address 2350H
T
1
T
2
T
3
WR
77
H
9F
H
Reconociendo Ciclos de Maquina
 El numero de ciclos de maquina y ciclos de reloj
necesarios para ejecutar una instrucción están
dados por el fabricante
 Sin embargo, existen se pueden calcular una
aproximado a los ciclos de maquina siguiendo las
siguientes reglas
 El primer ciclo de maquina de una instrucción siempre
es opcode fetch
41
Reconociendo Ciclos de Maquina
 El procesador no puede ejecutar una instrucción hasta que
todos los bytes han sido leídos
 Ejemplo, la instrucción jump tiene 3 bytes. Entonces la instrucción requiere
3 ciclos de maquina, Opcode fetch, lectura de memoria, lectura de
memoria
 Si el numero de ciclos de maquina es mayor que el numero de
bytes, los ciclos extras son identificados por la función de una
instrucción.
 Por ejemplo LD (HL),A es una instrucción de un byte pero requiere un
ciclo de maquina extra para escribir en memoria
42
Revision de Conceptos Importantes
Señales Acciones
M1
La primera operación en un ciclo de instrucción siempre es
opcode fetch y es indicado por esta señal
M1, MREQ,
RD
Opcode fetch y lectura de memoria usan las señales MREQ y RD.
Estas operaciones se diferencian por medio de la señal M1
Opcode fetch lee instrucciones
Lectura de Memoria lee datos o direcciones
MREQ, RD Lectura de Memoria
MREQ, WR Escritura de Memoria
El microprocesador no puede escribir y leer al mismo tiempo
La lectura y escritura de memoria requiere de 3 ciclos de reloj.
Sin embargo puede tomar hasta 4 ciclos en algunas instrucciones
43
Generando Señales de Control
Señales Señales Tarea
MREQ RD Leer de una localidad de memoria
IOREQ RD Leer de un dispositivo de entrada
MREQ WR Escribir a una localidad de Memoria
IOREQ WR Escribir a un dispositivo de salida
44
RD
MREQ
WR
RD
IOREQ
WR
MEMRD
MEMWR
IORD
IOWR
Decoder
MEMRD
MEMWR
RD
WR
MREQ
Resumen
 Cuando el Z80 es encendido, el microprocesador
realiza el proceso de reset.
 La primera operación que el MPU realiza es
Opcode Fetch
 El MPU es una maquina secuencial, por lo tanto ira
de una instrucción a la otra, a menos que se le
indique lo contrario
45
Resumen
 El Opcode indica cuantos bytes deben ser leídos
para completar la instrucción
 La señal M1 tiene dos propósitos
 Distingue el ciclo de adquisición del opcode de otra
operación
 Se usa para indicar que una interrupción ha sido
reconocida
46
Resumen
 Estas guías nos permiten reconocer los ciclos de
maquina
 El número de ciclos de maquina en una instrucción indican
cuantas veces el microprocesador debe leer la memoria.
 El primer ciclo de maquina de cualquier instrucción es
opcode fetch
 El MPU debe leer todos los bytes que constituyen la
instrucción antes de poder ejecutarla
 Si la instrucción requiere mas ciclos de maquina además de
los requeridos para leer la instrucción, entonces esos ciclos
están asociados a la ejecución de la instrucción
47
06/09/2011
1
Memoria
Unidad 4
Microprocesadores
Otoño 2011
1
Contenido
2
Interfaz con Memoria
Comprobando la Intefaz
Interfaz con Memorias
Lentas
Ejemplo de un Sistema basado en
Microprocesadores
MPU
E
P
R
O
M
R
A
M
O
u
t
p
u
t
P
o
r
t

1
V
e
n
t
i
l
a
d
o
r
C
a
l
e
n
t
a
d
o
r
L
C
D
C
o
n
v
e
r
t
i
d
o
r
A
/
D
O
u
t
p
u
t
P
o
r
t

2
O
u
t
p
u
t
P
o
r
t

3
In
p
u
t
P
o
r
t

1
S
e
n
s
o
r

d
e

t
e
m
p
e
r
a
t
u
r
a
Bus de Dirección
Bus de Datos
A15
A0
D7
D0
MEMRD
MEMWR
IOWR
IORD
Estructura de la Memoria
La memoria esta
compuesta por un grupo
de registros que
almacenan información
binaria
Si la memoria tiene 1024
registros entonces
requiere 10 líneas de
dirección
Cada registro almacena
datos de 8 bits
1024 x 8
D
e
c
o
d
i
f
i
c
a
d
o
r

I
n
t
e
r
n
o
A
9
A
8
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0
Lineas de Datos
CS RD WR
4
Lectura y Escritura del Memoria por el Z80
Lectura Escritura
5
La dirección de 16-bits es
puesta en el bus de
direcciones
La señal MREQ es puesta
en bajo para indicar que
existe una dirección valida
en el bus de direcciones
La señal RD es puesta en
bajo para indicar que se
desea realizar una lectura
La dirección de 16-bits es
puesta en el bus de
direcciones
La señal MREQ es puesta en
bajo para indicar que existe
una dirección valida en el
bus de direcciones
La señal WR es puesta en
bajo para indicar que se
desea realizar una escritura
Conceptos básicos de la Interfaz a Memoria
6
La función de la interfaz a memoria es permitir que el
microprocesador lea y escriba a un registro determinado
dentro del chip de memoria
Para realizar estas operaciones, el microprocesador debe
Ser capaz de seleccionar el chip
Un sistema basado en microprocesador cuenta con memoria ROM
(para el programa) y memoria RAM (para datos)
Identificar el registro
La lectura o escritura se hace un registro a la vez porque solo se
pueden transmitir 8 bits por el bus de datos
Habilitar el buffer apropiado
Existen dos buffers de entrada (escritura) y salida (lectura)
06/09/2011
2
0
0
1
1
1
0
1
y
0
w
1
0
w
0
x x
1
1
0
1
1
En
0
0
0
1
0
y
1
1
0
0
0
0
y
2
0
1
0
0
0
y
3
0
0
1
0
0
(a) Truth table
w
0
En
y
0
w
1
y
1
y
2
y
3
(b) Graphical symbol
(c) Logic circuit
w
1
w
0
y
0
y
1
y
2
y
3
En
Decodificador 2-a-4 Decodificador 74LS138
A2 A1 A0 EN2 EN1 O0 O1 O2 O3 O4 O5 O6 O7
0 0 0 0 1 0 1 1 1 1 1 1 1
0 0 1 0 1 1 0 1 1 1 1 1 1
0 1 0 0 1 1 1 0 1 1 1 1 1
0 1 1 0 1 1 1 1 0 1 1 1 1
1 0 0 0 1 1 1 1 1 0 1 1 1
1 0 1 0 1 1 1 1 1 1 0 1 1
1 1 0 0 1 1 1 1 1 1 1 0 1
1 1 1 0 1 1 1 1 1 1 1 1 0
X X X X 0 1 1 1 1 1 1 1 1
X X X 1 X 1 1 1 1 1 1 1 1
8
Decodificación de dirección
9
La decodificación de una
dirección debe resultar en
identificar un registro con
una dirección dada.
El decodificador debe ser
capaz de dar un pulso
único para cada dirección.
F0H
F7H
Interfaz con Memoria
10
La dirección de 16-bits debe ser usada para seleccionar
un registro en particular
Para un chip de solo 1024 registros solo se necesitan 10
líneas de dirección (A
9
– A
0
)
Por lo cual, las líneas de dirección se pueden dividir de la
siguiente manera
Parte Alta (A
15
– A
10
)
La parte alta será usada para generar la señal Chip Select
Parte Baja (A
9
– A
0
)
La parte baja será decodificada por el decodificador interno de la
memoria
Interfaz con Memoria
11
El Z80 usa dos señales MREQ y RD para indicar que se
requiere leer de memoria
La señal MREQ puede combinarse con CS para generar
MSEL
Dirección de Memoria
(Parte Baja)
Dirección de Memoria
(Parte Alta)
MREQ
RD
WR
Decodificador
Interno
Decodificador
Externo
Identifica el Registro
en Memoria
Selecciona el Chip
Habilita el buffer de
lectura
Habilita el buffer de
Escritura
Interfaz Alternativa
12
Dirección de Memoria
(Parte Baja)
Dirección de Memoria
(Parte Alta)
MREQ
RD
WR
Decodificador
Interno
Decodificador
Externo
Identifica el Registro
en Memoria
CS
Habilita el buffer de
lectura
Habilita el buffer de
Escritura
06/09/2011
3
Resumen
13
Conecta las líneas de dirección requeridas al chip de
memoria
Decodifica las líneas restantes para generar la señal CS
Combina la señal CS y MREQ para generar la señal MSEL
que seleccionara el chip adecuado
Conecta las señales RD y WR a las señal RD y WR del
chip de memoria
Un configuración alternativa es combinar RD y MREQ
para generar MEMRD. Combinar WR y MREQ para
generar MEMWR
Ejemplo: Interfaz 2764 EPROM
14
EPROM 2764 cuenta con
8192 registros (8k × 8)
Señal Chip Select
etiquetada como (Chip
Enable, CE)
Output Enable (OE) para
habilitar el buffer de salida
Opera con una
alimentación de 5V
Requiere pulsos de 21V
para programarla.
Interfaz
15
Los pasos necesarios para conectar el Z80 y la memoria
son
Paso 1
Conectar las líneas de dirección necesarias
Paso 2
Decodificar las líneas de dirección restantes
Paso 3
Combina la decodificación y la señal MREQ para generar la
señal MSEL
Paso 4
Conecta las señales de control para habilitar el buffer
apropiado
Interfaz entre Z80 y 2764
16
Rango de Memoria
17
El rango de direcciones de la memoria ROM es el
siguiente:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000
MSEL
0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1FFF
Decodificador
18
A7 A6 A5 A4 A3 A2 A1 A0
0 1 0 0 0 0 0 0 40H
0 1 0 0 0 0 0 1 41H
Bits sin
Cambio
Bits que
Cambian
Líneas de
Habilitación
Decodificación
40H
41H
06/09/2011
4
Ejercicio
Proporciona la configuración del decodificador para
conectarse a las direcciones
97H
95H
19
A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 1 0 1 1 1 97H
1 0 0 1 0 1 0 1 95H
Bits sin
Cambio
Bits que
Cambian
Líneas de
Habilitación
Decodificación
Ejercicio
Proporciona la configuración del decodificador para
conectarse a las direcciones
E0H
C8H
20
A7 A6 A5 A4 A3 A2 A1 A0
1 1 1 0 0 0 0 0 E0H
1 1 0 0 1 0 0 0 41H
Bits sin
Cambio
Bits que
Cambian
Bits sin
Cambio
Habilitación Decodificación Habilitación
Ejemplo: Interfaz RAM 6116
21
RAM 6116 cuenta con
2048 registros (2k × 8)
Señal Chip Select
etiquetada como (Chip
Enable, CE)
Output Enable (OE) para
habilitar el buffer de salida
Write Enable (WE) para
habilitar el buffer de salida
Opera con una
alimentación de 5V
Interfaz
22
Los pasos necesarios para conectar el Z80 y la memoria
son
Paso 1
Conectar las líneas de dirección A10 – A0
Paso 2
La señal (CE) es conectada o O4, por lo cual el chip será
seleccionado solo si A15-A13 es 100
Paso 3
La señal RD se conecta con OE y la señal WR con WE
Interfaz entre Z80 y 6116
23
Rango de Memoria
24
El rango de direcciones de la memoria RAM es el
siguiente:
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8000
MSEL
1 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 87FF
1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 8800
0 1 1 1 1 1 1 1 1 1 1 1 1 8FFF
1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 9000
1 0 1 1 1 1 1 1 1 1 1 1 1 97FF
1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 9800
1 1 1 1 1 1 1 1 1 1 1 1 1 9FFF
FOLDBACK MEMORY
06/09/2011
5
Ejercicio
25
Realice la interfaz entre el Z80 y el siguiente grupo de
memorias
2732 (4K × 8): EPROM – El rango de direcciones debe
empezar en 0000H, considere 4K de memoria extra para
futuras expansiones
6116 (2K × 8): CMOS RAM
Utilice el decodificador de 3-a-8 (74LS138)
Solución
26
A14
A13
A12
A2
A1
A0
5V MREQ
A15
74LS138
O2
O0
A11
A0
Lineas de Datos
2732
4K× 8
CE OE
A11
A0
D7 D0
Lineas de Datos
6116
2K× 8
A10
A0
A10
A0
D7 D0
CE OE WE
RD RD WR
Interfaz Completa
27
2732
4K× 8
CE
OE
A11
A0
6116
2K× 8 A10
A0
CE
OE WE
Decoder
A15 - A12
A0
D7
D0
RD
WR
ROM
Reservado
para
Expansión
RAM
Foldback
Memory
Sin Usar
0000
0FFF
1000
1FFF
2000
27FF
2800
2FFF
3000
FFFF
Probando la Interfaz
28
Los niveles lógicos en los buses cambian dinámicamente
debido a la operación que el microprocesador este efectuado.
Por lo cual, es difícil poder checar pin a pin que las conexiones
estén realizadas correctamente.
El método comúnmente usado consiste en inyectar una señal
conocida dentro del sistema y detectarla
Para utilizar este método debemos generar una señal
identificable y constante y checar varios puntos en relación
con esta señal
Probando la Interfaz
29
Podemos genera esta señal por medio de la ejecución de
un lazo continuo llamado RUTINA DE DIAGNOSTICO
START: LD A,F7H ; Carga F7H en el acumulador
LD (2000H),A ;Almacena el numero en la 2000H
JP START ; Salta de regreso a START
Instrucciones Bytes T-States
Ciclos de Maquina
M1 M2 M3 M4
LD A,F7H 2 7 (4,3)
Opcode
Fetch
Lectura
Memoria
LD (2000H),A 3 13 (4,3,3,3)
Opcode
Fetch
Lectura
Memoria
Lectura
Memoria
Escritura
Memoria
JP START 3 10 (4,3,3)
Opcode
Fetch
Lectura
Memoria
Lectura
Memoria
Probando la Interfaz
30
Asumiendo que la frecuencia de reloj es 2MHz, cada t-
estado se ejecuta en 0.5µs
Todo el ciclo se ejecuta en (7+13+20)×0.5µs = 15µs
La señal de escritura será puesta a cero cada 15µs
Si el decodificador y las conexiones están bien realizadas,
cuando la señal de escritura sea cero, los bits A15-A12
deben ser 0010.
El resto de los bits deben ser cero en el bus de
direcciones
En el bus de datos debe leerse F7H
06/09/2011
6
Probando la Interfaz
31
Instrucciones Bytes T-States
LD A,F7H 2 7 (4,3)
LD (2000H),A 3 13 (4,3,3,3)
JP START 3 10 (4,3,3)
Tiempo de Acceso a Memoria
El opcode fetch es el que impone una mayor restriccion
ya que el Z80 lee el dato en el flanco de subida de T3
El ciclo de lectura de memoria lee el dato en el flanco de
bajada de T3
T
AD
es el intervalo entre el tiempo en que el Z80 pone
una dirección de memoria en el bus de direcciones y el
tiempo en el que lee el dato
En un sistema de 2.5 MHz (400 ns) el intervalo T
AD
es
( )
( )
ns ns ns
T T T T
SD AD D AD
50 145 400 2
2
− − × =
− − × =
32
Tiempo de Acceso a Memoria
OPCODE
FETCH
T
D(AD)
es el
tiempo en el que
se pone una
dirección valida
T
SD
es el tiempo
en el que se
pone una dato
valido
33
Tiempo de Acceso a Memoria
La respuesta de memoria se define en términos del
acceso a memoria TAC.
TAC es el retardo entre el tiempo en el que la dirección
de memoria es puesta en el bus de direcciones y el
tiempo en el que dato es puesto en el bus de datos
34
Generando Estados de Espera
Algunas veces por cuestiones de costo se utilizan
memoria de acceso lento
En estos casos el tiempo de acceso T
AC
es mayor al
tiempo permitido para leer el dato T
AD
por lo cual se
requiere de la señal WAIT para alargar el intervalo de
lectura de datos
La señal WAIT tiene la siguiente características:
Es una señal activa en bajo
Es una señal de solicitud externa usada para dispositivos lentos
35
Generando Estados de Espera
Características de la señal WAIT
Esta señal es muestreada en el flanco de bajada de T2 de cada
ciclo de maquina
Si la señal esta en bajo se suma un ciclo de reloj de espera al
ciclo de maquina
Al final de cada ciclo de espera T
W
muestrea la señal WAIT en
caso de seguir en bajo vuelve a introducir otro ciclo. Este
proceso es realizado hasta que la señal WAIT cambia a alto
Durante el tiempo de espera, el Z80 conserva el contenido de
todos las buses y las señales de control se extienden.
36
06/09/2011
7
Generando Estados de Espera
37
La señal WAIT será muestreada al termino del ciclo T2
La señal MREQ es baja en el flanco de bajada de T1, por
lo cual esta señal puede ser usada para generar la señal
WAIT
Generando Estados de Espera
38
MREQ se encuentra en alto a menos que el Z80 realice
un acceso a memoria.
Generando Estados de Espera
39
Interfaz con Memorias Lentas
40
28/09/2012
1
Interfaz con Dispositivos de Entrada
y Salida
Unidad 4, Segunda Parte
1
Interfaz con Dispositivos I/O
Interfaz con Dispositivos de Salida
Interfaz con Dispositivos de Entrada
Port Mapped
Memory mapped
2
Ejecución de la Instrucción OUT




 El Z80 pone la dirección en el puerto de salida 07H en la
parte baja del bus de direcciones (A7-A0)
 En el segundo ciclo de maquina T2, las señales IORQ y
WR son activadas para indicar que se requiere de una
operación de salida
 Un ciclo de espera es automáticamente insertado, no
importando el estado de la señal WAIT
 Durante el ultimo ciclo IORQ y WR se desactivan.
Dirección de
Memoria
Código de
Maquina
Mnemónico
2050H D3 OUT (07H),A
2051H 07
3
Ejecución de la instrucción OUT
4
Interfaz con Dispositivos de Salida
 La interfaz con dispositivos de salida debe ser capaz
de
 Decodificar la parte baja del bus de direcciones para generar
un pulso único correspondiente al puerto de salida
 Combinar la señal de decodificador con la señal WR para
general el pulso de selección del dispositivo de I/O
 Usar un latch que nos permitirá tener acceso o negar
acceso al dispositivo de I/O
 La señal de selección del dispositivo debe ser activa en alto
debido al uso de latches
5
Interfaz con Dispositivo de Salida
6
28/09/2012
2
7475 Latch
7
 Tiene 4 latches biestables
controlados por la señal de
habilitación activa en alto
 E
1-2
habilita los primeros dos
latches, mientras que E3-4
habilita los dos restantes

 Cuando E esta en alto, la
entrada se vera reflejada en
Q
 Cuando E hace la transición
a bajo, el dato es conservado
en las salidas Q
74LS373
8
 El 74LS373 es un latch octal
que incluye buffers tri-
estado.
 El latch y el buffer son
controlados
independientemente por el
Latch Enable (LE) y el
Output Enable (OE)
 La ventaja de usar un latch
octal es que contiene 8
latches en el paquete.
 Además, cuando el buffer no
es habilitado permanece en
alta impedancia, por lo tanto
disminuye la carga en el bus
Interfaz con LEDs
9
 Ejemplo
 Se requiere hacer la interfaz con LEDs conectados al puerto
07H.
 Por lo cual la señal de selección del puerto debe ser activada
cuando la dirección en la parte baja (A7-A0) es igual a 0000111
 La señal de habilitación al latch debe ser generada por la señal
de selección del puerto mas la señal de IOREQ y WR
Interfaz con LEDs
10
Interfaz con LED de 7 Segmentos
11
Interfaz con LED de 7 Segmentos
12
28/09/2012
3
Ejecución de la Instrucción IN




 El Z80 pone la dirección en el puerto de salida 84H en la
parte baja del bus de direcciones (A7-A0)
 En el segundo ciclo de maquina T2, las señales IORQ y
RD son activadas para indicar que se requiere de una
operación de entrada
 Un ciclo de espera es automáticamente insertado, no
importando el estado de la señal WAIT
 Durante el ultimo ciclo IORQ y RD se desactivan.
Dirección de
Memoria
Código de
Maquina
Mnemónico
2065H DB IN A,(84H)
2066H 84
13
Ejecución de la instrucción IN
14
Interfaz con Dispositivos de Entrada
 La interfaz con dispositivos de entrada debe ser capaz
de
 Decodificar la parte baja del bus de direcciones para generar
un pulso único correspondiente al puerto de entrada
 Combinar la señal de decodificador con la señal RD para
general el pulso de selección del dispositivo de I/O
 Usar un latch que nos permitirá tener acceso o negar
acceso al dispositivo de I/O
 La señal de selección del dispositivo debe ser activa en bajo
debido al uso de latches
15
Interfaz con Dispositivos de Entrada
16
Interfaz con Conmutadores de Entrada
17
Interfaz con un Dispositivo de Entrada
18
A7 A6 A5 A4 A3 A2 A1 A0
Numero de
Puerto
1 0 0 0 0 1 0 0 84H
0 1 8CH
1 0 94H
1 1 9CH
28/09/2012
4
Probando la Interfaz
19
 RUTINA DE DIAGNOSTICO
 Lazo se ejecuta cada 14µs si el Z80 trabaja a 2MHz



START: LD A,97H ; Carga 97H en el acumulador
OUT (07H),A ; Escribe al puerto 07H
JP START ; Salta de regreso a START
Instrucciones Bytes T-States
Ciclos de Maquina
M1 M2 M3
LD A,97H 2 7 (4,3)
Opcode
Fetch
Lectura
Memoria
OUT (07H),A 3 11 (4,3,4)
Opcode
Fetch
Lectura
Memoria
Escritura
I/O
JP START 3 10 (4,3,3)
Opcode
Fetch
Lectura
Memoria
Lectura
Memoria
Acceso a Dispositivos I/O
Dispositivos de
Entrada y Salida
Port Mapped
I/O
IN
OUT
Memory
Mapped I/O
LD
Acceso a Dispositivos I/O
Port Mapped Memory Mapped
 El espacio de
direccionamiento 64K es
usado completamente para
memoria
 Se utilizan las instrucciones
especificas para dispositivos
(IN,OUT) por lo que el
código es mas fácil de leer
 Solo un método de
direccionamiento es
disponible que es el modo
directo y la transferencia se
hace solo con el acumulador
 El espacio de direccionamiento
de la memoria debe ser
compartido con los
dispositivos de I/O
 Se utiliza la instrucción LD para
las operaciones por lo que los
comentarios deben especificar
que esa es una operación de
Entrada y Salida
 Todos los métodos de
direccionamiento están
disponibles para dispositivos de
I/O
Ejecución de la Instrucción LD
 La instrucción LD tiene 4 ciclos de maquina, los primeros 3
ciclos de maquina se encargan de obtener la instrucción.
 El ultimo ciclo de maquina realiza la escritura en forma similar
a la instrucción OUT
 En el segundo ciclo de maquina T4, la dirección 8000H es
puesta en el bus de dirección y las señales MREQ y WR son
activadas para indicar que se requiere escribir en memoria
Dirección de
Memoria
Código de
Maquina
Mnemónico
2050H 32 LD (8000H),A
2051H 00
2052H 80
22
Ejecución de la instrucción LD
23
Memory Mapped I/O
24
 Los pasos para seleccionar y transferir la información
requiere de pasos similares a los requeridos en el modo
de periféricos mapeados:
 Decodificar el bus de direcciones A15-A0
 Combinar las señales MREQ y WR. Utilizar la decodificación de
las direcciones combinadas con estas señales para general
MSEL
 Usar la señal MSEL para habilitar el puerto de salida

 LD A,(16-bits) se usa para leer datos de un puerto de
entrada y la interfaz será similar solo que se usara la señal
RD en lugar de WR
28/09/2012
5
Memory Mapped I/O
25
Ejemplo
 Considere un sistema de control para:
 Aire acondicionado
 Calentador
 Cafetera
 Radio
 4 Luces
 Todos los aparatos se encuentran conectados a un
sistema basado en microprocesador y son manejados por
un conjunto de switches conectados al puerto de entrada
del microprocesador
26
Ejemplo
27
Señales de Control y Dirección
28
RD WR MREQ
Señal de
Control
Salida
1 0 0 MEMWR O4
0 1 0 MEMRD O2
A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
1 0 0 0 0 0 1 0 1 1 1 1 1 1 1 1 82FF
1 0 0 0 0 1 1 0 1 1 1 1 1 1 1 1 86FF
Líneas de Habilitación
Decodificado 1
Líneas de Habilitación
Decodificado 2
8-input NAND
Entradas del Decodificador 1
Programa Ejemplo
29
READ: LD A,(86FFH) ; Lee los conmutadores
CPL ; Complementa la lectura de los switches
LD (82FFH),A ; Enciende o apaga los dispositivos de salida
JP READ ; Regresa a leer nuevamente
Lectura del Puerto de
Entrada
Lectura del Puerto de
Entrada
Probando la Interfaz
30
 RUTINA DE DIAGNOSTICO
 Lazo se ejecuta cada 15µs si el Z80 trabaja a 2MHz



START: LD A,97H ; Carga 97H en el acumulador
LD (82FFH),A ; Escribe al puerto 82FFH
JP START ; Salta de regreso a START
Instrucciones Bytes T-States
Ciclos de Maquina
M1 M2 M3 M4
LD A,97H 2 7 (4,3)
Opcode
Fetch
Lectura
Memoria
LD (82FFH),A 3
13(4,3,3,3)

Opcode
Fetch
Lectura
Memoria
Lectura
Memoria
Escritura
puerto
JP START 3 10 (4,3,3)
Opcode
Fetch
Lectura
Memoria
Lectura
Memoria
28/09/2012
6
Ejemplo
31
 El sistema debe desempeñar las siguientes funciones
 Si la temperatura alcanza los 35° C,
 Entonces el ventilador debe ser encendido para enfriar el ambiente
 De lo contrario, permanece sin cambio

 El comparador deberá ser conectado al sensor de
temperatura y al latch que identifica el puerto de entrada

 El motor DC será conectado al transistor NPN
Darlington y este será controlado por el latch que
identifica al puerto de salida
Interfaz con Sensores y Motores
32
 La interfaz con dispositivos analógicos es similar a la
interfaz con dispositivos binario
 Identificar el dispositivo por medio de una dirección
 Habilitar el intercambio de datos por medio de las señales de
control
 Sin embargo, debemos detectar y convertir la señal
analógica al formato binario y viceversa
 Las señales analógicas se manejan de dos maneras
 Detectar cuando la señal alcanza un valor predeterminado
(Comparador)
 Convertir la señal a un formato binario proporcional a su
magnitud (Convertidor Analógico Digital)
Sensor de Temperatura y Comparador
33
 LM135 es un sensor de temperatura con las siguientes
características
 Su voltaje de salida cambia 10mV/C°
 Su rango de operación es de -55° a 150° C
 El voltaje típico de salida a 25° C es 2.98V
 Su voltaje de salid a 37° C es 3.1 V
 LM311 es un comparador de voltaje que opera con un
voltaje de alimentación de +5V
 LM311 compara dos voltajes y si la diferencia entre los voltajes
es menor o igual a -10mV su salida es alrededor de 0.75 V
 De otra manera su salida es cercana al voltaje de alimentación,
alrededor de + 4.5V
Motor
34
 La salida del microprocesador no es capaz de manejar el
motor DC
 Por lo cual, se emplea un transistor NPN Darlington para
que nos provea la potencia necesaria para activar el
motor
35
Dirección y Programa
36
A7 A6 A5 A4 A3 A2 A1 A0
0 1 0 0 0 0 0 0 40H Entrada
0 1 0 0 0 0 0 1 41H Salida
Líneas de
Habilitación
3-input
NAND
Entradas del
Decodificador
START: IN A,(41H) ; Lee la salida del comparador
AND 01H ; Guarda D0 y elimina el resto
OUT (40H),A ; Enciende o apaga el motor
JP START ; Regresa a leer nuevamente
28/09/2012
7
Ejercicio
 Rediseña la siguiente interfaz para usar port mapped.
Considera que el puerto de entrada es 1AH y el de salida
es 1CH
37
Solución
38
28/09/2012
1
Dispositivos de Interfaz
Programables
Unidad 4, 3ª Parte
1
Dispositivos de Interfaz Programable
 Los dispositivos periféricos simples pueden ser
considerados como que están siempre listos para la
transferencia de datos.
 Sin embargo, dispositivos mas complejos requieren alguna
forma de indicar si están listos para la transferencia.
 Un sistema basado en microprocesador requiere de
señales de sincronización para establecer cuando puede
ser transferida información entre el microprocesador y el
periférico (handshaking)
 Además, los periféricos deben ser capaces de solicitar
atención del Z80. Sin embargo, no todos los periféricos
pueden generar su propia señal de interrupción
2
Dispositivos de Interfaz Programable
3
 En algunas situaciones, la interfaz debe ser capaz de
manejar flujos de datos bidireccionales.
 Las características de la interfaz programable son las
siguientes:
 Registros de entrada y salida (para mantener datos)
 Buffer de tres-estados (para controlar el acceso de los
periféricos)
 Capacidad de flujo de datos bidireccional
 Señales de interrupción y sincronización
 Lógica de control
 Lógica de selección del chip
 Lógica de control de interrupción
Dispositivo de Entrada y Salida Paralelo
para el Z80
4
 El Z80 PIO (Parallel Input/Output) es un dispositivo de
interfaz especialmente diseñado para el Z80
 Controla dos puertos de Entrada y Salida de 8-bits A y B
Señales
PIO
Bus de Datos
Líneas de E/S
Señales de sincronización
Lógica de control de Interrupción
Señales de Control
Potencia y Reloj
Z80 PIO
5
Z80 PIO
6
 Bus de datos (D7-D0): Este es un bus (tri-state) de 8-bit
bidireccional usado para la transferencia de datos entre el Z80
y el PIO
 Líneas de E/S (A7-A0): Estas son líneas tres-estados
bidireccionales para el puerto A, usadas para transferir datos
del PIO hacia el periférico
 Líneas de E/S (B7-B0): Similares al puerto A
 Señales de sincronización: Tiene 4 señales dos por cada puerto
 Potencia y Reloj: el PIO opera con una alimentación de 5V y
usa un reloj de una sola fase
 Lógica de Control de Interrupción
 Señales de Control
28/09/2012
2
Modos de Operación
7
Z80 PIO
E/S Byte
Modo 0
Salida Simple
Salida con
Interrupción
Modo 1
Entrada Simple
Entrada con
Interrupción
Modo 2
Transferencia
Bidireccional
E/S Bit
Modo 3
Líneas
individuales
pueden ser
seleccionadas
Modos de Operación
8
 El PIO Cuenta con un registro de Control y un registo de
Dato para cada Puerto
 El registro de Dato se utiliza para la transferencia de
información
 El registro de Control estable el modo de operación del
puerto
D7 D6 D5 D4 D3 D2 D1 D0
Modo X X 1 1 1 1
Byte de Salida Modo 0 0 0
No
Importa
Identifica la palabra
de Control del
Modo
Byte de Entrada Modo 1 0 1
Bidireccional (Solo Puerto A) Modo 2 1 0
Bit E/S Modo 3 1 1
Señales de control
9
 El PIO tiene 6 señales de control. Tres de ellas determinan la
dirección del puerto de los registros de E/S A y B y sus
registros de control. Las restantes indican que tipo de
operación será realizada (escritura o lectura).
Señales de Control
Selección del Puerto
Habilitación
del Chip
Selección
del Puerto
A o B
Selección
del registro
de datos o
Control
Selección de Operación
Lectura Escritura
Selección del puerto
10
CE C/D B/A Puerto Seleccionado
0 0 0 Puerto A
0 0 1 Puerto B
0 1 0 Control de Registro A
0 1 1 Control de Registro B
1 X X PIO No seleccionado
 Las señales son
 Chip Enable (CE): conectada al decodificador de direcciones
 Selección del puerto (B / A): Cuando la señal esta en alto se
selecciona al puerto B y cuando esta en bajo al puerto A
 Selección de Control o Dato (C / D ): Cuando la señal esta en alto
selecciona el registro de control para escribir un comando. Cuando
es bajo selecciona el registro de transferencia de datos

Selección de Operación
11
 Las señales de control son M1, RD e IORQ
conectadas a sus correspondientes en el Z80.
 Las operaciones se seleccionan de la siguiente
manera:
 Lectura: Cuando RD e IORQ están en bajo, el MPU
lee el registro seleccionado
 Escritura: Cuando IORQ están en bajo y RD esta
en alto, el MPU escribe un dato al registro
seleccionado
Interfaz entre el Z80 y el PIO
12
74LS138
Z80 PIO
A4
A3
A2
A7
A6
A5
MSB
O
0
A1
A0
CE
C/D Sel
B/A Sel
A7 A6 A5 A4 A3 A2
A1
C/D
A0
B/A
1 0 0 0 0 0 0 0 80 H Registro de Dato A
0 1 81H Registro de Dato B
1 0 82 H Registro de Control A
1 1 83 H Registro de Control B
28/09/2012
3
Ejemplo:
13
 Configura el Z80-PIO de la siguiente manera
 Utiliza el puerto A como puerto de entrada para conectar 8
interruptores. La dirección del puerto A debe ser 80H
 Utiliza el puerto B como puerto de salida para conectar 7 leds
y una bocina. La dirección del puerto deberá ser 81H
 Si el interruptor 7 se encuentra encendido, entonces
manda la señal de emergencia a la bocina
 Si el interruptor 7 esta apagado, entonces enciende los
LEDS correspondientes a los interruptores
 El programa debe continuar leyendo los interruptores
Palabra de Control
14
D7 D6 D5 D4 D3 D2 D1 D0
Modo X X 1 1 1 1
Byte de Salida Modo 0 0 0
No
Importa
Identifica la palabra
de Control del
Modo
Byte de Entrada Modo 1 0 1
Bidireccional (Solo Puerto A) Modo 2 1 0
Bit E/S Modo 3 1 1
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A Entrada Modo 1 0 1 0 0 1 1 1 1 4F
Puerto B Salida Modo 0 0 0 0 0 1 1 1 1 0F
15
Programa
16
LD A,4FH ; Palabra de control para el puerto A
OUT (CTRLA),A ; Escribe al registro de control A
LD A,0FH ;Palabra de control para el puerto B
OUT (CTRLB),A ; Escribe al registro de control B
READ: IN A,(PORTA) ; Lee los interruptores
BIT 7,A ; Checa el interruptor 7
JR NZ, LED ; Si esta apagado, enciende los LEDS
SPKER: LD A,0FFH ; Si el interruptor 7 esta encendido
OUT (PORTB),A ;Enciende la bocina y apaga los LEDS
CALL DELAY ; Espera
LD A,7FH ; Apaga la bocina
OUT (PORTB),A
CALL DELAY
JR SPKER ; Repite la salida de la bocina
LED OUT (PORTB),A ; Enciende los LEDS
JR READ ; Regresa a leer los interruptores
INTERFAZ PERIFÉRICA
PROGRAMABLE
Microprocesadores
INTEL 8255A
 INTEL 8255 es una
interfaz versátil que nos
permite tener puertos
de entrada y salida
simple, así como puertos
de E/S sincronizados.
 Esta interfaz esta
diseñada para trabajar
con casi cualquier
microprocesador.
Terminales del
8255 (24 pin)
Dos puertos de
8-bits (A, B)
Puerto C que
puede ser
utilizado en
modo bit
Modos de Operación
Modo de
Operación
Modo Bit
(Set/Reset)
Puerto C
Modo Byte
Modo 0
Puertos simples A, B y
C
Modo 1
Handshake para
puertos A y B
Puerto C es usado
para sincronización
Modo 2
Modo bidireccional
para puerto A
Puerto B es usado
como puerto simple
y el C es usado
para sincronización
Diagrama a bloque del 8255
Lógica de Control del 8255
 RD – Lectura: esta señal
habilita la operación de
lectura

 WR – Escritura, esta
señal permite la
escritura al puerto.
Cuando se activa se
habilita la escritura en
el registro asociado al
puerto correspondiente
 RST – Reset, es una
señal activa en alto que
limpia todos los registros
del 8255
 CS, A0 y A1 – señales
utilizadas para
habilitación del chip,
enviada desde el
decodificador externo.
Las otras dos señales se
conectan del
microprocesador
Lógica de Control
CS A1 A0 Selección
0 0 0 Puerto A
0 0 1 Puerto B
0 1 0 Puerto C
0 1 1 Registro de Control
1 X X 8255 no es seleccionado
La señal CS es el Chip Select Master del 8255,
mientras que A1 y A0 especifican el puerto o
registro de control como se muestra en la siguiente
tabla
Palabra de Control
CS Dir. Puerto
A
7
A
6
A
5
A
4
A
3
A
2
A
1
A
0
1 0 0 0 0 0 0 0 80H A
1 0 0 0 0 0 0 1 81H D
1 0 0 0 0 0 1 0 82H C
1 0 0 0 0 0 1 1 83H Control
Palabra de Control
D7 D6 D5 D4 D3 D2 D1 D0
Grupo B
Puerto C (parte baja)
1= Entrada
0=Salida
Puerto B
1 = Entrada
0= Salida
Modo
0 = Modo 0
1 = Modo 1
Grupo A
Puerto C (parte alta)
1= Entrada
0=Salida
Puerto A
1 = Entrada
0= Salida
Modo
00 = Modo 0
01 = Modo 1
1X = Modo 2
1 = Modo E/S
0 = BSR Mode
28/09/2011
1
UNIDAD 5
EL LENGUAJE DE
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoño 2011
Contenido
Conjunto de instrucciones
Tipos de instrucciones
Modos de direccionamiento
El ensamblador del Z80
El simulador AVOCET
Implementación de un sistema basado en
el Z80
2
Conjunto de Instrucciones
3
 El conjunto de instrucciones de un microprocesador
determina la capacidad de su operación y el
poder de su manipulación de datos y su facilidad
de programación.

 Una instrucción es un comando al microprocesador
para que desempeñe una tarea dada sobre un
dato especifico y esta formada por:
 Código Operacional
 Operando
Formato de la Instrucción
4
 El tamaño de las instrucciones en el Z80 van de 1 a
4 bytes

 El opcode determina cual es la operación que se va
a realizar y esta incluido en el primer byte de la
instrucción.

 Algunos opcode especializados se encuentran en
dos bytes

Formato de la Instrucción
5
 El operando puede ser especificado de varias
formas:
 Datos de 8 bits
 Datos de 16 bits
 Registros
 Par de registros
 Dirección de I/O
 Dirección de Memoria
 Las instrucciones son clasificadas en 4 grupos de
acuerdo a su longitud
Instrucciones de 1 byte
6
 El opcode y los operandos son especificados en el
mismo byte



 El código operacional es especificado en los
primeros dos bits 01
 El registro A es representado por el código 111
 El registro B es representado por el código 000
Opcode Operandos Codigo Binario Tarea
LD A, B 01 111 000 (78H)
Copiar el contenido del
registro B en el Acumulador
28/09/2011
2
Instrucciones de 2 bytes
7
 En una instrucción de 2 bytes, el primer byte
especifica el opcode y el segundo byte el
operando




 El opcode para LD B es 06H
Opcode Operandos Codigo Binario Tarea
LD B, 32H 0000 0110 (06H)
Copiar el numero 32H en el
registro B
0011 0010 (32H)
Instrucciones de 3 bytes
8
 El primer byte corresponde al opcode
 Los siguientes 2 bytes corresponden a una dirección o
dato de 16 bits en orden inverso
 El primer byte corresponde a la parte baja del numero
 El segundo byte corresponde a la parte alta del numero
Opcode Operandos Codigo Binario Tarea
LD BC, 2080H 0000 0001 (01H)
Copiar el numero 2080H en el
registro BC
1000 0000 (80H)
0010 0000 (20H)
Instrucciones de 4 bytes
9
 Las instrucciones anteriores son compatibles con el 8085 (244
opcodes)
 Para incluir una mayor funcionalidad se diseñaron instrucciones
especiales con opcodes de 2 bytes
 Estas instrucciones son generalmente asociadas a los registros
índice
Opcode Operandos Codigo Binario Tarea
LD IX, 2000H 1101 1101 (DDH)
Copiar la dirección 2000H en
el registro índice IX
0010 0001 (21H)
0000 0000 (00H)
0010 0000 (20H)
Conjunto de instrucciones
10
 El conjunto de instrucciones se clasifican en 6
categorías
 Transferencia de Datos
 Operaciones Aritméticas
 Operaciones Lógicas
 Manipulación de bits
 Operaciones de Decisión
 Operaciones de Control de Maquina
Transferencia de datos
11
 Estas instrucciones copian los datos de una locación
llamada fuente hacia otra llamada destino
Operaciones Ejemplos
• Transfiere datos de un registro hacia otro registro LD A,B
• Transfiere un byte hacia un registro o una localidad
de memoria

• Transfiere datos de 16 bits hacia un par de
registros
LD B,32H


LD HL,2050H
• Transfiere datos de una localidad de memoria
hacia un registro o viceversa
LD A,(2080H)

LD (2080H),A
Transferencia de datos
12
Operaciones Ejemplos
• Transfiere datos de un puerto de entrada hacia el
acumulador
• Transfiere datos del acumulador hacia el puerto de
salida
IN A,(01H)

OUT (01H),A
• Transfiere datos de los registros del MPU hacia el
STACK y viceversa
PUSH BC

POP BC
• Intercambio de contenido de los registros de propósito
general BC, DE, HL con los registros alternativos
EXX
28/09/2011
3
Transferencia de datos
13
 La instrucción de transferencia de datos el destino
es especificado primero y después la fuente.
LD destino, fuente
 Las direcciones de memoria o dispositivos de
entrada y salida se especifican entre paréntesis
 En algunas operaciones los operandos son implícitos
como en el caso de EXX
 Las instrucciones de transferencia de datos no
afectan las banderas
Operaciones Aritméticas
14
Suma
Resta
Incremento/Decremento
Complemento a 1’s y a 2’s
Suma
15
 Esta operación se realiza usando el acumulador como
uno de los operandos, el otro operando puede ser:
 Cualquier número de 8 bits
 El contenido de un registro
 El contenido de una localidad de memoria
 Las banderas son modificadas de acuerdo al resultado
de la operación
ADD A,B
ADD A,97H
ADD A,(HL)
Resta
16
 Los siguientes operandos pueden ser restados del
contenido del acumulador
 Numero de 8 bits SUB 95H
 Contenido de un registro SUB C
 Contenido de una localidad de memoria SUB (HL)
 La resta se realiza en complemento a 2’s y el
resultado se almacena en el acumulador
 El resultado afecta las banderas
 El acumulador es un operando implícito
Incremento/Decremento
17
 El contenido de un registro de 8 bits o localidad de
memoria es incrementada o decrementada por uno
 El contenido de un registro de 16 bits puede ser
incrementado o decrementado por uno
 Solo la operación de 8 bits afecta las banderas
 Ejemplo
INC B
DEC BC
Complemento a 1’s y a 2’s
18
 El contenido del acumulador puede ser
complementado y el resultado almacenado en el
acumulador
 Estas instrucciones asumen que el operando es el
acumulador
 Estas instrucciones afectan algunas banderas
Tarea
CPL Complementa el contenido del acumulador (Complemento a 1)
NEG Resta el contenido del acumulador de cero (Complemento a 2)
28/09/2011
4
Ejemplo
19
LD A,53H
LD B,F5H
ADD A,B
53H
+ F5H
1 48H
A 53H F X
B X C X
A 53H F X
B F5H C X
A 48H F C=1, Z=0
B F5H C X
01010011
+ 11110101
1 01001000
Operaciones Logicas
20
Funciones lógicas
Shift y Rotaciones
Comparaciones
Funciones Lógicas
21
 Los operandos para estas funciones pueden ser un
numero de 8 bits, el contenido de un registro o
locación de memoria
Tarea
AND B Aplicar la operación AND a cada bit del registro B
con los bits del acumulador
OR 32H Aplicar la operación OR a cada bit del numero
32H con los bits del acumulador
XOR (HL) Aplicar la operación XOR a cada bit del numero
contenido en la localidad apuntada por HL con los
bits del acumulador
Shift y Rotación
22
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RLCA: Rota el acumulador a la
izquierda. El carry es
afectado por D
7
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RLA: Rota el acumulador a la
izquierda a través del
carry

RRCA: Rota el acumulador a la
derecha. El carry es
afectado por D
0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RRA: Rota el acumulador a la
derecha a través del
carry

D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
Shift y Rotación
23
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C 0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
0
SLA: Recorre los bits del
registro hacia la
izquierda a través del
carry. Introduce ceros en
el bit D
0
SRL: Recorre los bits del
registro hacia la
derecha a través del
carry. Introduce ceros en
el bit D
7
Shift y Rotación
24
Opcode Operando Descripción
RLC Reg o Memoria Rota a la izquierda los bits del registro o memoria
RL Reg o Memoria
Rota a la izquierda los bits del registro o memoria
a través del carry.
RRC Reg o Memoria Rota a la derecha los bits del registro o memoria
RR Reg o Memoria
Rota a la derecha los bits del registro o memoria
a través del carry.
SLA Reg o Memoria
Recorre los bits del registro o memoria a la
izquierda a través del carry e inserta 0 en la
posición D
0
SRL Reg o Memoria
Recorre los bits del registro o memoria a la
derecha a través del carry e inserta 0 en la
posición D
7

28/09/2011
5
Comparaciones
 El contenido del acumulador es comparado con
 Un numero CP 97H
 Contenido de un registro CP B
 Contenido de una localidad de memoria CP (HL)
 El resultado de la comparación se indica con la
bandera adecuada
 Esta instrucción realiza la comparación por medio
de substraer el operando del acumulador
 Prueba por menor que, igual y mayor que
25
Comparaciones
Condición Banderas
Carry Cero
A < operando 1 0
A = operando 0 1
A > operando 0 0
 Cuando el operando
es una localidad de
memoria se especifica
por medio
 El contenido de un
registro
 Usando un registro
índice mas un offset
 CP (IX + 02H)
26
Manipulación de bits
Comprobación de bits
Bit set/Reset
27
Comprobación de bits
 Cualquiera de los 8 bits de un registro, acumulador
o localidad de memoria puede ser verificada
 La bandera Z se modificara de acuerdo al valor
del bit que se desea verificar
 Ejemplo
 Verifique el bit 7 del registro B

 BIT 7,B
28
Set y Reset
 Cualquiera de los 8 bits de un registro, acumulador
o localidad de memoria puede ser puesto a uno o
cero
 Ejemplo

Antes de la
operación
Operacion
Después de la
operación
B = 00110111 SET 7,B B = 10110111
B = 11110000 RESET 5,B B = 11010000
29
Decisión
 Este grupo de instrucciones pueden alterar la
secuencia de ejecución del programa de forma
 Condicional
 Incondicional
Saltos
Llamada a subrutina
Reinicio
30
28/09/2011
6
Saltos
 Existen saltos condicionales e incondicionales
 Si el salto es condicional, entonces el procesador
verifica las banderas especificadas y si la condición
es verdadera, la secuencia de instrucciones es
alterada
 La locación destino puede ser especificada
directamente o relativa al PC
 Ejemplo
 JP C,2050H
31
Llamada a subrutina
 Estas instrucciones alteran la secuencia del
programa por
 Llamado a subrutina CALL
 Regreso de una subrutina RET
 El regreso o llamado condicional de subrutina
verifica las banderas adecuadas
 Ejemplo
 CALL 2050H
 CALL Z,2050H
32
Reinicio
 Esta instrucción cambia la secuencia del programa
a una de 8 locaciones de reinicio localizadas en la
pagina 00.

 Esta instrucción generalmente se usa con las
interrupciones

 Ejemplo
 RST 28H La dirección de reinicio es 0028H
33
Control de Maquina
 Estas instrucciones controla la operación del
microcontrolador, tales como

 Suspender la ejecución de la instrucción
 HALT

 Deshabilitar las interrupciones poniendo a cero los
flip-flops que habilitan las interrupciones
 DI
34
Modos de Direccionamiento
Modo Explicación Ejemplo
Inmediato
El byte que sigue después del opcode
es el operando
LD B,97H
Inmediato
Extendido
Los 2 siguientes bytes después del
opcode son el operando
LD BC,8045H
Registro
El registro que se usa como operando
esta incluido en el opcode
LD B,A
Implicito
El opcode contiene el operando de
forma implícita. Algunas operaciones
aritméticas y lógicas usan el
acumulador como un operando
implícito
AND B
35
Modos de Direccionamiento
Modo Explicación Ejemplo
Registro
Indirecto
Este modo se usa para transferir
datos entre el MPU y la memoria. El
registro se utiliza como un apuntador
a la memoria
LD B,(HL)
Extendido
Los dos bytes seguidos del opcode
indican un salto a la locación de
memoria especificada
JP 2080H
Relativo
El segundo byte indica el valor del
desplazamiento en complemento a 2’s
para una locación de salto
JR 14H
Salta 20 locaciones
después de la
siguiente instrucción
36
28/09/2011
7
Modos de Direccionamiento
Modo Explicación Ejemplo
Indexado
El byte después del opcode
especifica el valor de desplazamiento
que se suma al registro índice para
indicar una locación de memoria
INC (IX+10H)
Bit
Este modo es usado para la
manipulación de bits. En este modo se
indica un bit de un registro o una
locación de memoria
SET 7,B
Pagina Cero
Se incluyen 8 posibles direcciones de
reinicio en la pagina cero. En este
modo se especifica la parte baja de
la dirección de memoria y la parte
alta se asume que es 00H
RST 28H
37
Fin del programa
Detenemos la ejecución
Punto de inicio
Programa Ilustrativo
 Suma dos números hexadecimales y despliega el
resultado

ORG 1800H ; La dirección de inicio del programa es 1800H
PORT1 EQU 01H ; Dirección del puerto de salida
START: LD B,32H ;Copia 32H en el registro B
LD C,0A2H ;Carga el segundo byte a ser sumado
LD A,C ; Copia uno de los operandos al acumulador
ADD A,B ;Despliega el resultado
OUT (PORT1),A ;Despliega el resultado
HALT ;Fin del programa
END ; Fin del ensamblador
Sección de
definiciones
38
Programa Ilustrativo
 ORG indica la dirección en la cual se va a
almacenar el programa
 EQU directiva al compilador para definir constantes
 PORT1 EQU 01H
 MAX EQU 10H
 Etiquetas
 Se utilizan para marcar puntos en el programa para
ser usados en los saltos y llamados a subrutinas
 END marca el fin del programa en ensamblador
39
Estructura de un programa
Declaración de Constantes y definiciones
Rutina de Inicio
Subrutinas de Reinicio
Cuerpo del programa principal
Subrutinas
40
Transferencia de datos
Instrucción Bytes Descripción
LD (HL), R 1
El registro HL es usado como un apuntador a la memoria.
El contenido del registro es copiado a la locacion de
memoria apuntada por HL
LD (HL), 8-bit 2
El numero de 8 bit es copiado a la locacion de memoria
apuntada por HL
LD A, (RP) 1
El contenido del registro de propósito general es
transferido al acumulador. El apuntador a memoria
puede ser el registro BC o DE. La transferencia de datos
empleando estos registros solo puede ser realizada al
acumulador
LD (RP), A 1
LD A,(16-bits) 3 La dirección de memoria se especifica como el operando
de 16 bits, y solo se puede hacer la transferencia de
datos hacia o desde el acumulador.
LD (16-bits),A 3
41
Transferencia de datos
42
 Las banderas no son afectadas por esta instrucción
 Las instrucciones relacionadas a la memoria son
identificadas por los paréntesis
 El registro HL es un apuntador a memoria versátil
que puede ser usado para transferir datos de
memoria hacia cualquier registro de propósito
general
 Los registros BC, DE y el direccionamiento inmediato
solo pueden ser usados con el acumulador
28/09/2011
8
Transferencia de Datos
 Ejemplo
 La locación de memoria 2050H contiene el byte 37H
 Usando los diferentes modos de direccionamiento,
transfiere el byte 37H al registro B
 Direccionamiento Indirecto usando HL
Código Instrucción
21 LD HL,2050H
50
20
46 LD B,(HL)
A F
B C
D E
H 20H 50H L
37 H
37H
2050H
43
Transferencia de datos
 Direccionamiento Extendido
Código Instrucción
3A LD A,(2050H)
50
20
47 LD B,A
A F
B C
D E
H L
37 H
37H
2050H
44
37H
Ejercicio
45
 La localidad de memoria 2040H contiene el dato
F2H
 Transfiere el dato hacia la localidad 2070H
 Limpia la localidad de memoria 2040H al terminar
la transferencia
 Escribe el programa que realice las operaciones
anteriormente descritas
Solucion
46
HEX OPCODE Operando Comentario
21 LD HL,2040H ; Coloca el apuntador HL a la dirección fuente
40
20
01 LD BC,2070H ;Coloca el apuntador BC a la dirección destino
70
20
7E LD A,(HL) ;Transfiere el dato hacia el acumulador
02 LD (BC),A ;Copia el dato en la dirección destino
36 LD (HL),00 ;Limpia la locación de memoria 2040H
00
76 HALT ;Detiene la ejecución del programa
Transferencia de datos hacia
dispositivos I/O
47
Instrucción Bytes Ejemplo Descripción
IN A,(8-bits) 2 IN A,(01H)
Lee datos del puerto de entrada y
los almacena en el acumulador
OUT A,(8-bits) 2
OUT
(01H),A
Escribe datos a un puerto de
salida del acumulador
 Las banderas no son afectadas por la ejecución de
estas instrucciones
 Las direcciones de los puertos de entrada y salida
están compuestas por 8 bits y deben estar escritas
entre paréntesis.
Ejemplo
48
28/09/2011
9
Ejemplo
49
OPCODE OPERANDO COMENTARIO
IN A,(01H) ; Lee los switches de entrada
OUT (07H),A ; Despliega la lectura de los switches en el puerto de salida
LD (2060H),A ; Almacena la lectura en memoria
HALT
 Lee los switches conectados al puerto 01H
 Despliega la lectura en los leds conectados al
puerto 07H.
 Almacena la lectura en la direccion 2060H
Operaciones Aritméticas
50
 La suma y resta comparten las siguientes
características
 Asumen que uno de los operandos es el acumulador
 Modifican todas las banderas de acuerdo al resultado
de la operación
 El resultado es almacenado en el acumulador
 No afectan el contenido del operando, solo del
acumulador.
Operaciones Aritméticas
51
OPCODE OPERANDO BYTES DESCRIPCION
ADD A, r 1
Suma el contenido del registro r al acumulador y
el resultado es almacenado en el acumulador
ADD A, 8-bit 2
Suma el dato de 8 bits al contenido del
acumulador
ADD A, (HL) 1
Suma el contenido de la locación de memoria
apuntada por HL al contenido del acumulador
SUB R 1
Resta el contenido del registro r del acumulador y
el resultado es almacenado en el acumulador
SUB 8-bit 2
Resta el dato de 8 bits del contenido del
acumulador
SUB (HL) 1
Resta el contenido de la locación de memoria
apuntada por HL del contenido del acumulador
Operaciones Aritméticas
52
 El incremento y decremento comparten las
siguientes características
 El operando puede ser un registro, un numero de 8-bits
o un dirección de memoria
 Si el operando es de 8-bits, el resultado de estas
operaciones afecta todas las banderas excepto la del
carry
 Si el operando es de 16-bits, ninguna bandera es
afectada. Esto es importante tomarlo en cuenta cuando
se usan como contadores de 16-bits
 El resultado es almacenado en mismo operando
Operaciones Aritméticas
53
OPCODE OPERANDO BYTES DESCRIPCION
INC r 1 Incrementa el contenido del registro r
INC (HL) 1
Incrementa el contenido de la localidad de
memoria apuntada por el registro HL
INC rp 1
Incrementa el contenido del par de registros.
El par de registros puede ser BC, DE, HL y SP
DEC r 1 Decrementa el contenido del registro r
DEC (HL) 1
Decrementa el contenido de la localidad de
memoria apuntada por el registro HL
DEC rp 1
Decrementa el contenido del par de registros.
El par de registros puede ser BC, DE, HL y SP
Operaciones Aritméticas
54
OPCODE OPERANDO BYTES DESCRIPCION
CPL 1
Invierte cada bit del acumulador. Esta
operación equivale a la función NOT. Solo las
banderas H y N son afectadas
NEG 1
Substrae el contenido del acumulador de 00.
Esto es equivalente a realizar el complemento
a 2’s del contenido del acumulador. Esta
operación afecta todas las banderas
 El acumulador es el operando implicito para los
complemento a 1’s y a 2’s
 El resultado es almacenado en el acumulador
28/09/2011
10
Ejercicio
55
 Cargue el numero F2H y 68H en los registros B y C
respectivamente
 Almacene A2H en la locación de memoria 2065H
 Reste el 68H de F2H
 Complemente a 1’s el resultado
 Sume A2H desde la memoria
 Almacene la repuesta final en la locación de memoria
2066H
 Determine el estado del signo (S), cero (Z) y el Carry
(C)
05/10/2011
1
UNIDAD 5 – 2
A
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoño 2010
Ejercicio
2
 Cargue el numero F2H y 68H en los registros B y C
respectivamente
 Almacene A2H en la locación de memoria 2065H
 Reste el 68H de F2H (F2H-68H)
 Complemente a 1’s el resultado
 Sume A2H desde la memoria
 Almacene la repuesta final en la locación de memoria
2066H
 Determine el estado del signo (S), cero (Z) y el Carry
(C)
Solución
3
OPCODE Operando A B C H L S Z CY
LD BC,F268H X F2 68 X X No se afectan
LD HL,2065H X 20 65
LD (HL),A2H X
LD A,B F2
SUB C 8A 1 0 0
CPL 75 NA NA NA
ADD A,(HL) 17 0 0 1
INC HL 20 66 0 0 NA
LD (HL),A
HALT NA NA NA
17 F2 68 20 66 0 0 1
Banderas
4
 Las banderas que pueden ser usadas para realizar
decisiones son
 Signo (S)
 Cero (Z)
 Paridad/Overflow (P/V)
 Carry (CY)
 Las banderas restantes Suma/Resta (N) y Half
Carry (H) son usadas internamente en el procesador
para realizar operaciones en aritmética BCD
Banderas
5
 Los números con signo del bit mas significativo
representa el signo, los 7 bits restantes representa la
magnitud




 El máximo numero que puede ser representado es
+127 (7F)
 El mínimo numero es -128 (80H)
S
D
7
D
0
Magnitud
Signo
Banderas
6
 La bandera del signo esta en 1 si el bit D7 es uno.




 Si el resultado de una operación aritmética excede los
limites +127 al -128 la bandera de overflow se pone
a 1
 P/V indica overflow en las operaciones aritméticas, y
en la operaciones lógicas indica paridad






1 D Si 1
0 D Si 0
7
7
signo
05/10/2011
2
Overflow
7
 Si el resultado de una operación aritmética no
puede ser representado por el numero de bits
utilizados (8, 16, 32 o 64 bits) entonces decimos
que ocurre un overflow
 El procesador solo puede indicar si existe un
overflow pero es responsabilidad del programador
decidir que hacer con el resultado.
 Complemento a 2´s es el formato usado por
convención para representar números negativos y
positivos
Complemento a 2´s
8
 En complemento a 2´s se tiene un desbalance.
Siempre existe un número negativo que no tiene su
correspondiente positivo
 8 bits, rango (-2
7
) – (2
7
-1); -128 a 127,
 16 bits, rango (-2
15
) – (2
15
-1); -32768 a 32767
 32 bits, rango (-2
31
) – (2
31
-1); -2147483648 a 2147483647
 Este desbalance es un problema para el
programador, pero el hardware se facilita por eso
todas los microprocesadores usan complemento a 2
para números con signo
Overflow
9
 En complemento a 2´s todos los números negativos
tiene un 1 en su bit mas significativo, por lo cual
facilita la detección de números negativos
 Al sumar o restar números con signo puede ocurrir
un overflow bajo las siguientes condiciones
OP1 OP2 SUMA RESTA
+ + SI NO
+ - NO SI
- + NO SI
- - SI NO
Overflow
10
Operación A B
Resultado
indicando overflow
A+ B ≥ 0 ≥ 0 < 0
A + B < 0 < 0 ≥ 0
A – B ≥ 0 < 0 < 0
A – B < 0 ≥ 0 ≥ 0
Operación A B
Resultado
indicando overflow
A+ B + + -
A + B - - +
A – B + - -
A – B - + +
Overflow
11
 Overflow es detectado solo en números con signo.

 Microprocesadores que incluyen en su conjunto de
instrucciones suma y resta sin signo ignoran el
overflow para estas operaciones

 El Z80 no incluye en su conjunto de instrucciones
suma y resta sin signo, por lo tanto es el
programador quien debe ignorar este overflow
Overflow
12
 La bandera de overflow es relevante solo para las
operaciones con signo

4AH 0 0 1 0 1 0 1 0
7FH + 0 1 1 1 1 1 1 1
C9H 0 1 1 0 0 1 0 0 1
CY = 0 Porque la suma no excede FF
H
S = 1 porque D
7
= 1
P/V = 1 porque la suma excede 7F
H
05/10/2011
3
Paridad
13
 La bandera de paridad es afectada por las
operaciones lógicas de la siguiente forma



 Si el resultado de una operación lógica es 00000011,
la bandera estará en 1 indicando numero par de unos.
 La paridad no tiene relación a los números par o impar
sino a la cantidad de unos en el numero




par es s 1' de numero el Si 1
impar es s 1' de numero el Si 0
Paridad
Banderas
14
 Si el resultado de una suma es mayor que 127 (7F)
el bit D7 indicara que el numero es negativo y las
banderas
 Signo (S) = 1
 Overflow (P/V) = 1
 El Z80 no sabe si los números son con signo o sin
signo.
 Es responsabilidad del programador interpretar
estas banderas.
Banderas
15
 En el ejercicio anterior se realizo la siguiente suma



 La bandera del CY = 1
 Si los números son sin signo, entonces los 8 bits
representan la magnitud y el resultado de la suma
es 117H, en el acumulador se guarda 17H, si se
desea usar este resultado se debe incluir el carry
75H 0 1 1 1 0 1 0 1
A2H + 1 0 1 0 0 0 1 0
1 0 0 0 1 0 1 1 1
Banderas
16
 En el ejercicio anterior se realizo la siguiente suma



 Si los números son con signo, entonces el resultado
debe ser un numero menor a los operandos.
 Por lo tanto, la suma no puede generar un carry.
CY=1 es irrelevante para este caso.
75H 0 1 1 1 0 1 0 1
A2H + 1 0 1 0 0 0 1 0
1 0 0 0 1 0 1 1 1
Operaciones de Decisión
17
Decisión
Saltos
Absoluto
(3 bytes)
Condicional
Incondicional
Relativo
(2 bytes)
Condicional
Incondicional
Llamados a
Subrutina
CALL
RETURN
Reinicio
Instrucciones de Salto
18
 En el salto absoluto, el operando especifica la
dirección de 16-bits hacia la cual se transferirá la
secuencia de instrucciones

 Los saltos relativos contienen un operando que
especifica el desplazamiento en 8-bits en
complemento a 2’s.

 Los saltos relativos permiten saltos hacia adelante o
hacia a atrás
05/10/2011
4
Saltos Condicionales
19
 Los saltos condicionales son implementados basados
en el estado de las banderas
 Signo
 Cero
 Carry
 Paridad/Overflow
 Existen dos instrucciones asociadas a cada una de
las bandera, cuando la bandera esta en alto o
bajo.
Instrucciones de Salto Absoluto
20
OPCODE OPERANDO BYTES DESCRIPCION
JP 16 –bits 3 Salto incondicional a la locación especificada en el
operando de 16-bits
JP C,16-bits 3 Salta si CY=1 a la locación especificada
JP NC,16-bits 3 Salta si CY=0 a la locación especificada
JP Z,16-bits 3 Salta si Z=1 a la locación especificada
JP NZ,16-bits 3 Salta si Z=0 a la locación especificada
JP M,16-bits 3 Salta si el numero es negativo (S=1) a la dirección
JP P,16-bits 3 Salta si el numero es positivo (S=0) a la dirección
JP PE,16-bits 3 Salta si la paridad es par (P/V=1) a la dirección
JP PO,16-bits 3 Salta si la paridad es impar (P/V=0) a la dirección
Ejercicio
21
 Escribe un programa que realice las siguientes
operaciones
 Copie dos números BYTE1 y BYTE2 en los registros B y
C, respectivamente
 Suma los dos números
 Si la suma es mayor a 8 bits despliega 00H como la
condición sobrecargada al puerto de salida PORT1
 Limpia la locación de memoria llamada OUTBUF
 Si la suma es menor o igual a 8 bits, entonces almacena
el resultado en OUTBUF
Solución
22
Mnemónicos Código
Hex
Dirección de
Memoria
LD B, BYTE1 06 2000
9A 2001
LD C,BYTE2 0E 2002
A7 2003
LD A,C 79 2004
ADD A,B 80 2005
JP NC,STORE D2 2006
LOW 2007
HIGH 2008
LD A,00H 3E 2009
00 2010
OUT (PORT1),A D3 2011
01 2012
STORE: LD (OUTBUF),A 32 2013
50 2014
20 2015
HALT 76 2016
INICIO
Carga los
datos
Suma los
datos
Existe
Carry?
Despliega
sobrecarga
Almacena el
resultado en
memoria
FIN
Si
No
Ejercicio
23
 Escribe un programa que realice lo siguiente
 Lee datos provenientes del puerto de entrada INPORT
 Cuenta el numero de lecturas
 Suma cada lectura
 Cuando la suma exceda FF
H
realiza las siguientes
acciones
 Detén la lectura del puerto de entrada
 Almacena el numero de lecturas realizadas en OUTBUF
 Despliega 01 en el puerto OUTLED para indicar la
sobrecarga
Solución
24
Mnemónicos Comentarios
LD BC,0000H ;Limpia B y C
READ: IN A,(INPORT) ; Lee datos
INC C ; Incrementa el contador
ADD A,B ; suma el dato
LD B,A ;Guarda la suma
JP C,OVRLOD ; Checa por overflow
JP READ ; regresa a leer
OVRLOD: LD HL,OUTBUF ; HL apunta al buffer
LD (HL),C ; guarda la cuenta
LD A,01H ; indica la sobrecarga
OUT (OUTLED),A
HALT
INICIO
B = 0, Suma
C = 0, Contador
Lee el puerto, actualiza la
cuenta y suma el dato
Existe
Carry?
Guarda la cuenta y
despliega la sobrecarga
FIN
Si
No
05/10/2011
5
Saltos Relativos
25
 En los saltos relativos la dirección hacia la cual el
programa es redirigido es calculada por medio de
un offset. La dirección final es PC + offset
 El offset es un numero de 8-bits en complemento a
2’s para permitir saltos hacia adelante y hacia
atrás
 El salto mas grande hacia adelante es 7FH mientras
que el salto mas grande hacia atrás es 80H
Saltos Relativos
26
Mnemónico Bytes Descripción
JR d 2 Salto relativo incondicional
JR Z, d 2 Salto relativo si Z =1
JR NZ, d 2 Salto relativo si Z =0
JR C, d 2 Salto relativo si CY =1
JR NC, d 2 Salto relativo si CY =0
Saltos relativos
27
 La instrucción de salto JR d esta almacenada en la
dirección 2100H y 2101H.
 Encuentre la dirección de memoria a la cual saltara
la instrucción si d = 7FH
 Si d = 9CH
2 1 0 2
+ 0 0 7 F
2 1 8 1
2 1 0 2
+ F F 9 C
1 2 0 9 E
0 2 0 9 E
Registros Índice
28
Opcode Operando Bytes Descripción
LD IX, 16 bits 4 Cargar dato de 16-bits en el registro IX
LD (IX+d),8bits 4 Cargar dato de 8-bits en la locación de memoria
LD R, (IX+d) 3 Copiar el dato al registro R de la locación de
memoria IX + d
LD (IX+d),R 3 Enviar el contenido de R a la memoria
ADD A, (IX + d) 3 Sumar el contenido de IX+d al acumulador
SUB (IX + d) 3 Restar el contenido de IX+d al acumulador
INC IX 2 Incrementar el contenido de IX
INC (IX + d) 3 Incrementar el contenido de la localidad de memoria
DEC IX 2 Decrementar el contenido de IX
DEC (IX + d) 3 Decrementar el contenido de la localidad de
memoria
Ejercicio
29
 Realice el programa que realice lo siguiente
 Use los registros índice IX e IY para apuntar a las
locaciones de memoria 2050H y 2185H
 Usando los registros índice, realice lo siguiente
 Copie el numero 32H en la locación 2090H
 Copie el numero 97H en la locación 2120H
 Sume los bytes y salve el resultado en el
acumulador
Solución
30
Mnemónicos Comentarios
LD IX,2050H ; Apunte IX a la locación 2050H
LD IY,2185H ; Apunte IY a la locación 2185H
LD (IX+40H),32H ; Transfiere el byte a la locación 2050H + 40H = 2090H
LD (IY+9BH),97H ; Transfiere el byte a la locación 2185H + 9BH = 2120H
LD A,(IX+40H) ; Copie el byte 32H al acumulador
ADD A,(IY+9BH) ; Sume los dos bytes y conserve el resultado en A
HALT ; Termina el programa
2 0 5 0
+ 0 0 4 0
2 0 9 0
2 1 8 5
+ F F 9 B
1 2 1 2 0
0 2 1 2 0
05/10/2011
6
Transferencia de Datos
31
Transferencia de
datos
Registro a
Registro
No hay
restricciones
Inmediata
A Registro
No hay
restricción
A Memoria HL, IX,IY
Registro con
memoria
Directa
Solo con el
acumulador
Indirecta
HL, IX, IY
Cualquier
registro
BC, DE
Solo con el
acumulador
Dispositivo de
entrada y salida
Solo con el
acumulador
Técnicas de Programación
 Inicializa contadores, apuntadores
a memoria, registros, etc.
 Traer datos hacia el
microprocesador desde memoria
o puerto
 Manipulación de datos tales como
operaciones aritméticas y lógicas
 Almacenamiento de resultados
parciales
 Incremento de contadores
 Revisa la bandera para
establecer si termina el lazo o
continua su ejecución
INICIO
FIN
Inicialización
Adquisición de Datos
Procesamiento de
Datos
Almacenamiento
Temporal
Incremento de
Contadores
Salida
Toma de
decisión
32
Ejemplo
 Se almacenaron 10 bytes en un bloque de memoria iniciando
en 1850H y terminando en 1859H
 Se quiere transferir estos datos hacia el bloque inciando en
1870H y terminando en 1879H
 Realice el programa que realice esta transferencia.
 Cuando la transferencia termine indíquelo desplegando 01H
en el puerto OUTPRT
 Suponga que:
 SOURCE EQU 1850H
 OUTBUF EQU 1870H
 OUTPRT EQU C1H
33
Solución
34
Mnemónicos Comentarios
START: LD HL,SOURCE ;HL apunta a la fuente
LD DE,OUTBUF ; DE apunta al destino
LD B,10 ; inicializa contador
NEXT: LD A,(HL) ; Toma un dato fuente
LD (DE),A ; Almacena en destino
INC HL ; Incrementa HL
INC DE ; Incrementa DE
DEC B ; Decrementa el contador
JP NZ,NEXT ; Si el contador = 0 termina
LD A,01H ; Carga el indicador de fin
OUT (OUTPRT),A ; Despliega en la salida
HALT
INICIO
Apuntadores a fuente y
destino. Inicializa contador
Adquiere datos de fuente
y almacénalos en destino
Contado
r = 0?
Despliega un 01H en el
puerto OUTPRT
FIN
Si
No
Incrementa apuntadores.
Decrementa contador
Directivas al Compilador
Directiva Ejemplo Descripción
ORG ORG 1000H
El bloque de instrucciones o datos debe
ser almacenado en las locaciones de
memoria inciando en 1000H
END END Indica el fin del programa
EQU PORT1 EQU 01H
Se utiliza para la definición de
constantes. En este ejemplo la constante
PORT1 equivale a la dirección del puerto
01H
INBUF EQU 1899H
La constante INBUF equivale a la
direccion de memoria 1899H
OUTBUF EQU INBUF + 4
Las constantes pueden ser definidas con
respecto de otras constantes. En este caso
OUTBUF es una dirección de memoria 4
bytes mas adelante que INBUF
35
Directivas al compilador
Directiva Ejemplo Descripción
DB, DEFB DATA: DEFB A2H, 9FH
Inicializa un area de memoria byte por byte. Los
bytes son almacenados en locaciones de memoria
sucesivas.
Esta es una manera conveniente de escribir una
cadena de datos. La etiqueta es opcional
DW,
DEFW
DEFW 2050H
Inicializa un area de memoria dos bytes al mismo
tiempo. En este ejemplo se almacena el numero
2050H en dos localidades de memoria sucesivas
DS, DEFS OUTBUF: DEFS 4
Reserva un numero especifico de locaciones de
memoria. En este ejemplo 4 locaciones de memoria
son reservadas para OUTBUF
Sufijos de
constantes
D, B, Q,H
97
72Q
0011B
2FH
Define valores numéricos expresados en (D)
decimal, (Q) octal, (B) binario, (H) Hexadecimal
36
05/10/2011
7
37
SOURCE EQU 1850H
OUTBUF EQU 1870H
OUTPRT EQU 0C1H
ORG 1820H
START: LD HL,SOURCE ;HL apunta a la fuente
LD DE,OUTBUF ; DE apunta al destino
LD B,10 ; inicializa contador
NEXT: LD A,(HL) ; Toma un dato fuente
LD (DE),A ; Almacena en destino
INC HL ; Incrementa HL
INC DE ; Incrementa DE
DEC B ; Decrementa el contador
JP NZ,NEXT ; Si el contador = 0 termina
LD A,01H ; Carga el indicador de fin
OUT (OUTPRT),A ; Despliega en la salida
HALT
ORG 1850H
DEFB 01H,02H,03H,04H,05H,06H
DEFB 07H,08H,09H,0AH
END
Instrucciones Lógicas
38
 Las instrucciones lógicas asumen que uno de los
operandos es el acumulador

 Modifican las banderas de signo (S), cero (Z) y paridad
(P/V) de acuerdo a las condiciones del resultado. La
bandera de Carry es puesta a cero

 El resultado es almacenado en el acumulador

 No afecta el contenido de registro o locación de
memoria con la que se opera
Instrucciones Lógicas
39
OPCODE OPERANDO BYTES DESCRIPCION
AND r 1
Realiza la operación AND de un registro con el
acumulador
AND 8-bits 2
Realiza la operación AND de un numero de 8 bits
con el acumulador
AND (HL) 1
Realiza la operación AND del acumulador con el
contenido de la locación de memoria especificada
AND (IX+d) 3
B 0 1 1 1 0 1 1 1
A 1 0 0 0 0 0 0 1
A 0 0 0 0 0 0 0 1
AND B
A B AND
0 0 0
0 1 0
1 0 0
1 1 1
Instrucciones Lógicas
40
OPCODE OPERANDO BYTES DESCRIPCION
OR r 1
Realiza la operación OR de un registro con el
acumulador
OR 8-bits 2
Realiza la operación OR de un numero de 8 bits
con el acumulador
OR (HL) 1
Realiza la operación OR del acumulador con el
contenido de la locación de memoria especificada
OR (IX+d) 3
B 0 1 1 1 0 1 1 1
A 1 0 0 0 0 0 0 1
A 1 1 1 1 0 1 1 1
OR B
A B OR
0 0 0
0 1 1
1 0 1
1 1 1
Instrucciones Lógicas
41
OPCODE OPERANDO BYTES DESCRIPCION
XOR r 1
Realiza la operación XOR de un registro con el
acumulador
XOR 8-bits 2
Realiza la operación XOR de un numero de 8 bits
con el acumulador
XOR (HL) 1
Realiza la operación XOR del acumulador con el
contenido de la locación de memoria especificada
XOR (IX+d) 3
B 0 1 1 1 0 1 1 1
A 1 0 0 0 0 0 0 1
A 1 1 1 1 0 1 1 0
XOR B
A B XOR
0 0 0
0 1 1
1 0 1
1 1 0
Ejercicio
 Considere la
configuración descrita
en la ilustración
 Escriba un programa
que lee un dato del
puerto de entrada
PORT1
 Obtenga los bits D
2

D
0

 Almacene la lectura de
los 3 switches en INBUF
42
05/10/2011
8
Solución
43
IN A,(PORT1) ; Read the switch positions
AND 07H ; Mask data bits D3-D7
LD (INBUF),A ; Store the readings in INBUF
HALT
D7 D6 D5 D4 D3 D2 D1 D0
Acumulador X X X X X 1 0 1
AND 07H 0 0 0 0 0 1 1 1
Resultado 0 0 0 0 0 1 0 1
Banderas S=0 Z=0 CY=0
Tutorial de WIDE Avocet Systems
Curso de Microprocesadores
Facultad de Ciencias, UASLP

El siguiente tutorial indica paso a paso como generar un projecto y
editar un programa en ensamblador. Ademas de simular el código
hexadecimal generado. El simulador WIDE simula al microprocesador
Z80.
1. Abrir Wide de tu desktop o de SART de windows

2. Crear un projecto en Project → →→ → New project



3. Dar nombre al projecto y guardarlo Save




4. Ahora, abrir un archivo nuevo File → →→ → New







5. Editar ti archivo y guardarlo File → →→ → Save As





6. Guardar archivo con extensión file_name.asm



7. Antes de realizar la compilación es necesario especificar que el archivo a compilar esta
escrito en ensamblador. Project → →→ → Settings (Alt+F7)





8. El siguiente paso es compilar nuestro archivo file_name.asm Build → →→ → Build o
mediante (F7)




9. Los errores aparecerán en la parte baja de la ventana del simulador.






10. El siguiente paso es simular paso a paso nuestro archivo generado en Hexadecimal
(file_name.HXB).

Debug → →→ → Stepping → →→ → Low Level Step o mediante (Ctrl + F11)






11. Al iniciar la simulación de nuestro programa, la ventana de Diassembly se abrirá y
mediante (Ctrl + F11) se realizara paso a paso la ejecución del programa.



12. Para poder observar el contenido de la memoria y de los registros del microprocesador
se realiza lo siguiente: Debug → →→ → Views → →→ → Memory o Registers (Alt+5) o (Alt+6)





13. Finalmente para detener la simulación se realiza lo siguiente: Debug → →→ → Stop Debugging
o (Shift+F5)


Cuando se mandan datos a un puerto de salida, como en el ejemplo siguiente. Donde el dato
23H se transfiere al acumulador y este es puesto en OUTPRT, el cual esta definido por la
dirección 0C1H. Se genera un archivo portc1.OUT donde se encuentra el código ASCII del
numero 23H. En este caso 23H es equivalente al símbolo en código ASCII de #.

LD A,23H
OUT (OUTPRT),A
HALT
;DATA
.ORG 120H
SOURCE: .EQU 120H
OUTPRT: .EQU 0C1H
DEFB 0AH,0BH
END

La escritura de los datos enviados a un Puerto (en este caso archivo) se llevara acabo hasta que
finalice la simulación.
16/11/2011
1
UNIDAD 5 – 3
A
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoño 2010
Ejercicio
2
 Los puertos de entrada F1H y F2H estan conectados
a 7 switches cada uno. El bit mas significativo D
7
esta
conectado a un una señal de emergencia
 El puerto de salida (F3H) esta conectado a 7 bandas
transportadoras y debe encenderse solo si el switch
correspondiente esta encendido en ambos puertos
 Enciende o apaga los 7 bandas transportadoras de
acuerdo a las posiciones de on y off de los switches
en ambos puertos
 Monitorea los switches continuamente
Solución
3
START: IN A,(F1H)
AND 7FH
LD B,A
IN A,(F2H)
AND B
OUT (F3H),A
JP START
HALT
Ejercicio
4
 Reset bits D0 y D1 del acumulador
 Set bits D0 y D1 del acumulador
 Complementa los bits D0 y D1 del acumulador
D7 D6 D5 D4 D3 D2 D1 D0
Acumulador X X X X X X X X
AND FCH 1 1 1 1 1 1 0 0
Resultado X X X X X X 0 0
Solución
5
D7 D6 D5 D4 D3 D2 D1 D0
Acumulador X X X X X X X X
OR 03H 0 0 0 0 0 0 1 1
Resultado X X X X X X 1 1
D7 D6 D5 D4 D3 D2 D1 D0
Acumulador X X X X X X X X
XOR 03H 0 0 0 0 0 0 1 1
Resultado X X X X X X D1 D0
Comparaciones
6
OPCODE OPERANDO BYTES DESCRIPCION
CP r 1
Compara el contenido del acumulador con el
registro indicado
CP 8-bits 2
Compara el contenido del acumulador con el
número indicado
CP (HL) 1
Compara el contenido del acumulador con la
locación de memoria indicada
CP (IX+d) 3
Condición Banderas
Carry Cero
A < operando 1 0
A = operando 0 1
A > operando 0 0
16/11/2011
2
Ejemplo
7
 Las siguiente instrucciones comparan el contenido de
la locacion 1850H con 80H
 Si el byte es igual salta a la locación check
 Si el byte es mayor salta a overload
LD HL, 1850H
LD A,80H
CP (HL)
JP Z,CHECK
JP C,OVRLOD
Ejercicio
8
 Un conjunto de 10 lecturas se encuentra
almacenado en memoria en la dirección inicial
INBUF
 Escribe un programa que encuentre la lectura mas
grande en el conjunto
 Almacena este dato en el buffer OUTBUF
Solución
9
START: XOR A ; Empieza con una lectura mínima
LD B,0AH ; Inicializa el contador B a 10
LD HL,INBUF ; Apunta HL hacia INBUF
NEXT: CP (HL) ; Compara la lectura de memoria con el apuntador
JP NC, SKIP ; Si la lectura es menor no cambies el valor de A
LD A, (HL) ; Actualiza el máximo
SKIP: INC HL ; Apunta a la siguiente locación de memoria
DEC B ; Decrementa el contador
JP NZ,NEXT ; Obtén la siguiente lectura si el contador ≠ 0
LD (OUTBUF),A ; Guarda el resultado
HALT
Rotaciones
10
Rotaciones
Izquierda
8-bits RLC
9-bits RL
Derecha
8-bits RRC
9-bits RR
Rotaciones
11
OPCODE OPERANDO DESCRIPCION
RLC
R
Rotación de bits a la izquierda de un registro o
memoria
RL
Rotación de bits a la izquierda a través del carry
de un registro o memoria
RRC
Rotación de bits a la derecha de un registro o
memoria
(HL)
RR
Rotación de bits a la derecha a través del carry
de un registro o memoria
SLA
Shift de bits a la izquierda a través del carry de
un registro o memoria
(IX + d)
SRL
Shift de bits a la derecha a través del carry de un
registro o memoria
Shift y Rotación
12
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RLCA: Rota el acumulador a la
izquierda. El carry es
afectado por D
7
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RLA: Rota el acumulador a la
izquierda a través del
carry

RRCA: Rota el acumulador a la
derecha. El carry es
afectado por D
0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
RRA: Rota el acumulador a la
derecha a través del
carry

D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
16/11/2011
3
Shift y Rotación
13
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C 0
D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
0
SLA: Recorre los bits del
registro hacia la
izquierda a través del
carry. Introduce ceros en
el bit D
0
SRL: Recorre los bits del
registro hacia la
derecha a través del
carry. Introduce ceros en
el bit D
7
Rotaciones y Shift
14
 En estas instrucciones, la dirección de memoria puede
ser especificada usando el registro HL o los registros
índice con un offset

 Las banderas Z, S y P/V son modificadas de acuerdo a
las condiciones del resultado.

 El valor del carry es determinado por D7 en la rotación
(shift) a la izquierda o por D0 en la rotación (shift) a la
derecha
Ejemplo
15
LD HL,1850H ; HL apunta a la dirección 1850H
LD A,(HL) ; Lee el numero de la locación de memoria
SLA A ; Multiplica por 2
LD B,A ; Guarda el resultado en B
SLA A ; Multiplica por 4
SLA A ; Multiplica por 8
ADD A,B ; Para multiplicar por 10, suma la multiplicación por 2
LD (HL),A ; Guarda el resultado
HALT
( )
( ) ( ) 2 8
2 8 10
× + × =
+ × = ×
A A
A A
Manipulación de bits
16
 El operando B representa un bit del D
7
al D
0

 SET/RES no afectan las banderas
OPCODE OPERANDO DESCRIPCION
BIT
B,R
Prueba el bit B en el registro o locación de memoria. Si
el bit es 0, la bandera del cero (Z) es encenderá, de
otra manera permanecerá apagada
B,(HL)
B, (IX+d)
SET
B,R
Asigna un 1 al bit B del registro o locación de memoria B,(HL)
B, (IX+d)
RES
B,R
Asigna un 0 al bit B del registro o locación de memoria

B,(HL)
B, (IX+d)
Retardos y Formas de Onda
17
INICIO
Carga el patrón de bits
Manipulación de bits
Regresa a cambiar el
pulso
Salida para generar el
pulso
Retardo
Copia la cuenta del
retardo en un registro
Decrementa el contador
Contador
= 0 ?
Si
No
Retardo
Mnemónicos T-States
LD B,64H 7
LOOP: DEC B 4
JP NZ,LOOP 10

donde
T
C
es el periodo del reloj
L
T
son los T-states en el ciclo
N
10
es la cuenta en decimal
18
10
N L T T
T c L
× × =
s f T MHz f
c
µ 5 . 0 1 ; 2 = = =
14 =
T
L
100 64
10
= = H N
( ) s T
L
µ 700 100 14 10 5 . 0
6
= × × × =
÷
16/11/2011
4
Retardo
19
 El retardo total se obtiene de la siguiente manera




 Para encontrar el numero de veces que el ciclo
debe ser ejecutado para obtener un cierto retardo
entonces
| | ( ) ( ) ( )
s s μs
s N L L T
T T T
T c
L total
µ µ
µ
5 . 703 700 5 . 3
100 14 7 5 . 0
10 0
0
= + =
× + = × + =
+ =
T T C
total
L
L
L T
T
N
0
10
÷
×
=
Ejemplo
20
START: LD C,01010101B ; Carga el patrón de bits
ROTATE: LD A,C ; Coloca el patrón de bits en el acumulador 4
RLCA ; Cambia el patrón de bits para la siguiente salida 4
LD C,A ; Guarda el patrón de bits 4
AND 01H ; Enmascara los bits D7-D1 7
OUT (PORT1),A ; Cambia el nivel de voltaje 11
LD B,COUNT ; Carga el registro B con el contador del retardo 7
DELAY: DEC B ; Inicia el retardo 4
JN NZ,DELAY 10
JP ROTATE ; Regresa a cambiar el nivel del pulso 10
Calculando N
10

21
 El pulso debe tener un periodo de 500µs, lo cual
implica que debe mantenerse en alto por 250µs y
en bajo por 250µs.
 El programa se toma los siguientes ciclos de reloj
 T-states dentro del ciclo = 14
 T-states fuera del ciclo = 47
 La cuenta debe ser
32
14
47
14 10 5 . 0
10 250
6
6
10
~ ÷
× ×
×
=
÷
÷
N
Incrementando el Retardo
 Existen tres formas de incrementar el retardo,
22
• NOP toma 4 ciclos T en ejecutarse
Incluir instrucciones adicionales
dentro del lazo
• BC, DE, o HL
Usar un par de registros
Usar lazos anidados
Ejemplo
23
LD D,10
LOOP: LD BC,7143 10
LOOP1: DEC BC 6
NOP 4
LD A,C 4
OR B 4
JP NZ,LOOP1 10
DELAY: DEC B 4
JN NZ,LOOP 10
LD D,10
LOOP: LD BC,7143 10
100 ms
DELAY: DEC B 4
JN NZ,LOOP 10
ms T
L
100 7143 28 10 5 . 0
6
1
= × × × =
÷
( ) s ms T T
L L
µ 120 1000 24 10 5 . 0 10
1
6
+ = + × × =
÷
Instrucciones especiales del Z80
OPCODE OPERANDO DESCRIPCION
DJNZ label
Decremento B y Salto Relativo sobre NZ
Esta instrucción decrementa el registro B y si B ≠ 0,
salta a la dirección de memoria especificada por
el valor de offset label
LDI
Carga e Incrementa
Copia un byte a la dirección de memoria apuntada
por HL dentro de la locación de memoria apuntada
por DE. Los registro HL y DE son incrementados y
BC es decrementado
LDIR
Carga, Incrementa y Repite
Esto es similar a la instrucción LDI, excepto que es
repetida hasta que BC = 0
24
16/11/2011
5
Instrucciones especiales del Z80
OPCODE OPERANDO DESCRIPCION
LDD
Carga y decrementa
Copia un byte a la dirección de
memoria apuntada por HL dentro de
la locación de memoria apuntada por
DE. Los registro HL, DE y BC son
decrementados
LDDR
Carga, Decrementa y Repite
Esto es similar a la instrucción LDD,
excepto que es repetida hasta que
BC = 0
25
Ejercicio
 Escriba un programa que sume 10 bytes almacenados
en memoria empezando en la direccion INBUF
 Cuente el numero de carries generado en la suma
 Guerde guarde el valor de la suma en OUTBUF y
OUTBUF + 1
 Suponga que
 OUTBUF EQU 1850H
 COUNT EQU 10
 INBUF: DEFB 0A2H, 37H,4FH,97H,22H,6BH,
DEFB 75H,8EH9AH,0C7H
26
Solución
1800 START: XOR A ; Limpia A para acumular la suma
1801 LD C,A ; Limpia C para acumular los carries
1802 LD HL, INBUF ; HL apunta a INBUF
1805 LD B,COUNT ; Copia 10 al contador B
1807 NXTBYT: LD D,(HL) ; Carga el dato almacenado en INBUF
1808 ADD A,D ; Suma A y el dato obtenido de INBUF
1809 JP NC, SKIPCY ; Si no hay carry salta a incrementar HL
180C INC C ; Si hay carry incrementa C
180D SKIPCY: INC HL ; Incrementa HL
180E DJNZ NXTBYT ; Decrementa B y salta si no es igual a cero
1810 LD HL,OUTBUF ; Apunta HL a OUTBUF
1813 LD (HL),A ; Copia el resultado del acumulador
1814 INC HL ; Incrementa HL
1815 LD (HL),C ; Copia C a OUTBUF + 1
27
Calculando el Offset
 El salto debe ser realizado hacia atrás a la
dirección 1807H
 Debido a que es un salto hacia atrás, entonces el
offset es un numero negativo que debe ser
representado en complemento a 2’s
Program Counter 1 8 1 0
Dirección destino – 1 8 0 7
0 9 00001001
Complemento a 2’s F 7 11110111
28
Instrucciones especiales del Z80
OPCODE OPERANDO DESCRIPCION
CPI
Compara e Incrementa
Compara el contenido de la locación de memoria
apuntada por HL con el contenido del acumulador.
Incrementa HL y decrementa BC
CPIR
Compara, Incrementa y Repite
Esta instrucción es igual a CPI pero se repite hasta que
BC = 0 o el contenido de HL es igual al acumulador
CPD
Compara y Decrementa
Compara el contenido de la locación de memoria
apuntada por HL con el contenido del acumulador.
Decrementa HL y BC
CPDR
Compara, Decrementa y Repite
Esta instrucción es igual a CPD pero se repite hasta que
BC = 0 o el contenido de HL es igual al acumulador
29
Características Generales
 Estas son instrucciones de 2 bytes
 La bandera del cero (Z) se enciende si los números
comparados son iguales. Esto es, si el valor del
acumulador y la locación de memoria son iguales
 La bandera del signo (S) se enciende si el byte es
mas grande que el acumulador
 La bandera P/V se apaga si BC es igual a cero
 La bandera del carry no es afectada
30
16/11/2011
6
Ejemplo
 El buffer INBUF contiene 256 datos. Realiza una
búsqueda para encontrar el valor 24H en el buffer
de entrada. Si lo encuentra salta a START, de lo
contrario salta a ERROR
LD HL,INBUF ; HL debe apuntar a INBUF
LD BC,0100H ; BC es el contador = 256
LD A,24H ; El acumulador debe contener el byte buscado
CPIR ; busca 24H dentro del buffer
JP Z,START ; Si el byte fue encontrado, inicia el proceso
JP ERROR ; Despliega el mensaje de error
31
Ejercicio
 Un conjunto de 3 lecturas han sido almacenadas en
memoria iniciando en la direccion1850H
 87
 56
 42
 Ordena las lecturas en orden ascendente
32
Solución
START: LD HL,1850H ; Apunta HL hacia los datos
LD D,00H ; Usa D como una bandera de intercambio
LD C,02 ; Cuenta de comparaciones
CHECK: LD A,(HL) ; Obtén el dato
INC HL ; Incrementa el apuntador al siguiente dato
CP (HL) ; Compara los números
JP C,NEXTBYT ; Si A < segundo byte, no intercambies
LD B,(HL) ; Obtén el segundo byte para intercambio
LD (HL),A ; Almacena el byte anterior en la posición siguiente
DEC HL ; Apunto a la locación posterior
LD (HL),B ; Almacena el byte en la locación anterior
INC HL ; restaura HL a la posición de comparación
LD D,01 ; D = 1 para recordar que se realizo un intercambio
NEXTBYT: DEC C ; Decrementa el contador de comparaciones
JP NZ, CHECK ; Si la cuenta es diferente de cero regresa a check
BIT 0,D ; Checa la bandera de intercambio
JP NZ,START ; Si la bandera es 1 realiza una nueva pasada
HALT ; fin del ordenamiento
33
08/11/2011
1
UNIDAD 5 – 4
A
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoño 2011
Pila
 La pila es un grupo de locaciones de memoria
definidas por medio de carga una dirección al
apuntador a la pila (SP)
 La pila es usada para almacenar información
temporal durante la ejecución del programa
 En teoría, el tamaño de la pila esta restringido al
tamaño de la RAM disponible
 La definición de la pila se inicia cargando la
dirección de inicio de la pila LD SP,16-bits
2
Pila
 La pila se localiza en la memoria RAM del sistema
y se utiliza como almacenamiento temporal durante
la ejecucion del programa

 El contenido de un par de registros se almacena en
la locacion (SP-1)

 La pila crece hacia arriba en la memoria, es decir
en orden decreciente de las direcciones de
memoria
3
Pila
 La pila puede ser
inicializada en
cualquier lugar de la
memoria de usuario.
 Un buen habito es
inicializar la pila a la
dirección de memoria
mas alta para evitar
que interfiera con la
memoria de datos del
programa
Pagina 0
Rutinas de Inicio
Programa
Pila
FFFFH
0000H
0100H
Memoria
Crecimiento
de la Pila
4
Pila
 La instruccion PUSH almacena el contenido de un par
de registros en la pila

 POP recupera la informacion de la pila

 El apuntador a la pila (SP) siempre apunta al tope de
la pila

 El apuntador SP es decrementado o incrementado
segun se almacene o recupere informacion.
5
Pila
 El almacenamiento y
recuperación de los
bytes en la pila se
realiza siguiendo un
formato LIFO (Last Input
First Output)
 La información en la
locaciones de la pila no
son destruidas hasta que
nueva información es
almacenada
Dato 4
Dato 3
Dato 2
Dato 1
6
08/11/2011
2
Instrucciones de la Pila
OPCODE OPERANDO DESCRIPCION
LD SP,16-bits
Carga una dirección de 16 bits en el registro apuntador a
la pila. Define la dirección de inicio de la pila
PUSH RP
Copia el contenido del par de registros o de los registros
índice en la pila.
Esta instrucción primero decrementa el apuntador a la pila y
copia la parte alta del registro en la locación SP-1. Después
decrementa nuevamente el apuntador y almacena la parte
baja del apuntador en SP-2
PUSH IX
POP RP
Copia el contenido de las dos locaciones de memoria de la
parte alta de la pila hacia par de registros especificados o
hacia los registros índice .
Esta instrucción copia el contenido de la pila especificado
por SP dentro del registro de la parte baja (en BC, seria C)
incrementa el apuntador SP + 1. Copia el contenido de
SP+1 en la parte alta del registro e incrementa SP (SP + 2)
POP IX
7
Datapath del Z80
8
PUSH
21 H B
10 H C
22 H H
A2 H L
A
F
PUSH BC
PUSH HL
PUSH AF
Memoria
21 H
10 H
22 H
A2 H
(A)
Banderas
2400 SP
23FF
23FE
23FD
23FC
23FB
23FA SP
9
POP
21 H B
10 H C
22 H H
A2 H L
A
F
POP BC
POP HL
POP AF
Memoria
21 H
10 H
22 H
A2 H
(A)
Banderas
2400
SP
23FF
23FE
23FD
23FC
23FB
23FA
SP
10
Manipulando Banderas
 El conjunto de instrucciones del Z80 no contiene
ninguna instrucción que nos permita cambiar
directamente el contenido de las banderas.
 Sin embargo podemos examinar y modificar las
banderas por medio de la pila
 Podemos obtener el contenido del registro de
banderas por medio de almacenarlo en la pila y
posteriormente recuperarlo en un registro de
propósito general
11
Manipulando banderas
START: LD SP, STACK ; Inicializa la pila
LD DE, 0000H ; Carga 0 para limpiar el registro de banderas
PUSH DE ; Almacena 0 en la pila
POP AF ; Limpia el acumulador y el registro de banderas
LD A,FFH ; Carga el máximo numero en A
INC A ; Incrementa A mas allá de FFH
PUSH AF ; Almacena las banderas en la pila
POP DE ; Recupera las banderas
LD A,E ; Copia las banderas al acumulador
AND 11000001B ; Enmascara todo el registro menos S, Z y CY
OUT (PORT1),A ; Despliega las banderas
HALT ; Fin del programa
12
08/11/2011
3
Manipulando Banderas
 La instrucción INC incrementa el contenido del
acumulador de FFH a 00H sin afectar la bandera
del CY
 Por lo tanto el valor de las banderas será el
siguiente
S Z H P/V N CY
Acumulador 0 1 0 0 0 1 0 0
AND C1H 1 1 0 0 0 0 0 1
Resultado 0 1 0 0 0 0 0 0 40H
13
Intercambio
INSTRUCCION DESCRIPCION
EXX
Intercambio el contenido de los registros de propósito
general (BC,DE, HL) con el contenido de los registros
alternativos correspondientes
EX AF,AF’
Intercambia el contenido del acumulador y el registro de
banderas con el contenido de los registros alternativos
correspondientes
EX (SP),IX
EX (SP),IY
EX (SP),HL
Intercambio el contenido de un registro índice o el registro HL
con el contenido del tope de la pila
EX DE,HL
Intercambio el contenido del registro DE con el contenido del
registro HL
Intercambio
80 H H FF H L
SP 2097 H
32H 2097 H
A2H 2098 H
2099 H
Contenido de los registros Contenido de la Pila
EX (SP),HL
A2 H H 32 H L
SP 2097 H
FF H 2097 H
80 H 2098 H
2099 H
Contenido de los registros Contenido de la Pila
Subrutinas
 La subrutina consiste en un grupo de instrucciones
escritas fuera del programa principal para
desempeñar una función especifica
 Las funciones que se realizan repetidamente en el
en el programa principal son candidatas para
subrutinas
 Retardos. Los retardos pueden ser requeridos en
diferentes partes del programa
 Máximo, encontrar el numero máximo dentro de una
secuencia
Subrutina
 Cuando una subrutina es llamada, el contenido del
program counter es guardado en el stack y la
ejecuciones transferida a la subrutina
LD B, C
CALL DELAY
CP (HL)
XOR A
2050H
2051H
2054H
2070H
PC
PC
PC
20 H
54 H
SP
PC
RET
Subrutina
DELAY
Subrutina
 Cuando la instrucción de regreso de la subrutina es ejecutada,
la dirección previamente guardada en el stack es recuperada.
 Continua con la ejecución del programa principal
LD B, C
CALL DELAY
CP (HL)
XOR A
2050H
2051H
2054H
2070H
20 H
54 H
SP
RET 2080H
PC
PC
PC
Subrutina
DELAY
08/11/2011
4
Subrutina
OPCODE OPERANDO BYTES DESCRIPCION
CALL 16-bits 3
Llama a la subrutina localizada en la
dirección de memoria especificada por el
operando de 16-bits.
Esta instrucción almacena la dirección de la
siguiente instrucción en la pila y transfiere
la ejecución del programa a la dirección
de la subrutina
RET 1
Regresa de la subrutina.
Esta instrucción obtiene la dirección de
regreso del tope de la pila y transfiere la
ejecución del programa de regreso al
programa que realizo el llamado
19
Subrutina
OPCODE OPERANDO DESCRIPCION
CALL Z,16-bits Llama a la subrutina si Z =1
CALL NZ,16-bits Llama a la subrutina si Z =0
CALL C,16-bits Llama a la subrutina si CY =1
CALL NC,16-bits Llama a la subrutina si CY =0
CALL M,16-bits Llama a la subrutina si S =1 (Negativo)
CALL P,16-bits Llama a la subrutina si S =0 (Positivo)
CALL PE,16-bits Llama a la subrutina si P/V =1 (Par)
CALL PO,16-bits Llama a la subrutina si P/V =0 (Impar)
20
Subrutina
OPCODE OPERANDO DESCRIPCION
RET Z Regresa de la subrutina si Z =1
RET NZ Regresa de la subrutina si Z =0
RET C Regresa de la subrutina si CY =1
RET NC Regresa de la subrutina si CY =0
RET M
Regresa de la subrutina si S =1
(Negativo)
RET P
Regresa de la subrutina si S =0
(Positivo)
RET PE Regresa de la subrutina si P/V =1 (Par)
RET PO
Regresa de la subrutina si P/V =0
(Impar)
21
Subrutina
Mnemónico
HEX
CODE
Dirección de
Memoria
LD SP,1895H 31 1800
95 1801
18 1802
CALL 1850H CD 1825
50 1826
18 1827
Siguiente Instr. 1828
HALT 76 1840
22
1893 28
1894 18
1895 XX
1850 Subrutina
1865 RET
SP
Reinicio
 Esta instrucción transfiere la ejecución del programa
a una locación especifica en la pagina 00.
 El operando especifica la parta baja de la
dirección
 Este tipo de direccionamiento es conocido como
Modo de Direccionamiento Modificado de la
Pagina Cero.
 Ninguna Bandera es afectada
23
Reinicio
OPCODE OPERANDO DESCRIPCION
RST 00H • Esta instrucción transfiere la ejecución del
programa a una locación especifica en la
pagina 00H.
• El operando especifica la parta baja de
la dirección
• Este tipo de direccionamiento es conocido
como Modo de Direccionamiento
Modificado de la Pagina Cero.
• Ninguna Bandera es afectada
RST 08H
RST 10H
RST 18H
RST 20H
RST 28H
RST 30H
RST 38H
24
08/11/2011
5
Ejemplo
 El siguiente programa realiza el control de un semáforo y dos
señales para peatones
 El flujo del trafico y de los peatones es en la misma dirección.
Por lo tanto, los peatones pueden cruzar solo si la luz verde
esta encendida
 Las señales son encendidas y apagadas por los siguientes bits

25
Señales Bits Tiempo
Verde D0 15 segundos
Amarilla D2 5 segundos
Roja D4 20 segundos
Caminar D6 15 segundos
No Caminar D7 25 segundos
Ejemplo
Secuencia de
tiempo en
segundos
N
o

C
a
m
i
n
a
r

C
a
m
i
n
a
r

R
o
j
o

A
m
a
r
i
l
l
o

V
e
r
d
e

Hex
Code
D7 D6 D5 D4 D3 D2 D1 D0
0
(15) 0 1 0 0 0 0 0 1 41H
15
(5) 1 0 0 0 0 1 0 0 84H
20
(20) 1 0 0 1 0 0 0 0 90H
40
26
Subrutina Retardo
DELAY: ; Esta subrutina realiza un retardo de 0.5 seg. El retardo es repetido el
; numero de veces indicado en B.
; Entrada: Numero de veces a repetir el retardo especificado en B
; Salida: Ninguna
; Registros Modificados: B
PUSH DE ; guarda el contenido de DE y AF
PUSH AF
WAIT: LD DE, COUNT ; Carga DE para realizar el retardo 0.5 seg
LOOP: DEC DE
LD A,D ; Coloca D en A para checar banderas
OR E ; Prende bandera del cero si D=E=0
JP NZ,LOOP ; Repite hasta si DE >0
DEC B ; Decrementa B
JR NZ,WAIT ; Si el retardo es suficiente termina
POP AF ; Restablece el valor de DE y AF
POP DE
RET
27
Ejemplo
28
LD SP,STACK ; Inicializa el Stack Pointer
START: LD A,01000001B ; Carga el patron de bits para encender el verde
OUT (PORT1), A ; Enciende las senales apropiadas
LD B,30 ; Realiza el retardo de 15 seg por medio
CALL DELAY ; de la subrutina DELAY
LD A,10000100B ; Carga el patron correspondiente a la luz amarilla
OUT (PORT1), A ; Enciende las luces
LD B,10 ; Realiza el retardo de 5 segundos
CALL DELAY ;
LD A,10010000B ; Carga el patron correspondiente a la luz roja
OUT (PORT1), A ; enciende las senales correspondientes
LD B,40 ; realiza el retardo de 20 segundos
CALL DELAY
JP START ; Inicia el proceso nuevamente
Multiples llamado a subrutina
29
Dirección
Programa
Principal
XX00
01
09 CALL DELAY
0C
12 CALL DELAY
15
1B CALL DELAY
1E
Dirección Subrutina
XX50 PUSH DE
PUSH AF
DELAY
POP AF
POP DE
61 RET
Subrutinas Anidadas
30
Dirección
Programa
Principal
2000
2050 CALL
2051 90
2052 20
Dirección Subrutina 1
2090
209A CALL
209B C2
209C 20
209D
RET
Dirección Subrutina 2
20C2
209A
209B
209C
209D
RET
08/11/2011
6
Ejemplo
 Este programa implementa un contador de BCD
 La cuenta es desplegada en un LED de 7 segmentos
 El programa realiza las siguientes acciones
 Ajusta el numero binario a un numero decimal por
medio de la instrucción DAA
 Busca dentro de una tabla el código asociado a los
siete segmentos
 Utiliza diversas subrutinas
31
BCD a 7 segmentos
32
1
0
1
1
1
1
1
w 0 a
1
b
0 1
1
1
1
0
1
1
0
1
0
0
w 1
0
1
1
0
0
w 2
0
0
0
0
1
w 3
0
0
0
0
0
c
1
0
1
0
0
1
1
0
1
1
1
0
0
0
0
1
1 0 0 1
1
1
1
1
0
1
1
0
1 1
1
1
1
1
1
0
1
1
1
d
0
1
0
0
1
0
e
1
0
1
1
1
0
1
0
0
1
0
0
0
1
f
1
0
0
1
1
1
g
1
0
1
1
1
1
1
1
0
1
Look-up Table
c e
a
g
b f
d
7-segment display
DAA
 (DAA) Decimal Adjust Accumulator
 Después de una operación aritmética, esta
instrucción ajusta un numero de 8 bits en el
acumulador en un numero empaquetado BCD
 Esta instrucción usa las banderas H (Half Carry) y
CY (Carry) internamente para ajustar el resultado a
dos dígitos BCD
 Ajusta el resultado de un suma o resta BCD
 No convierte un numero binario a BCD
33
Contador BCD
34
UPDATE: ; Esta subrutina actualiza la cuenta BCD y ajusta el numero BCD. Cuando el
; contador llegue a 60, reinicia el contador
; Entrada: Cuenta en B
; Salida: Cuenta actualizada y ajustada a BCD en B
; Registros Modificados: B y el acumulador
LD A,B ; obtiene la ultima cuenta
ADD A,01H ; Actualiza la cuenta
DAA ; Ajusta el numero a BCD
LD B,A ; Guarda la cuenta en B
CP 60 ; Es la cuenta = 60
RET NZ ; Si no lo es regresa al programa principal
LD B,00H ; Reinicia el contador
RET
Retardo
DELAY: ; Esta subrutina realiza un retardo de 1 seg.
; Entrada/Salida: Ninguna
; Registros Modificados: Ninguno
PUSH DE ; guarda el contenido de DE, BC y AF
PUSH AF
PUSH BC
LD B,10
WAIT: LD DE, COUNT ; Carga DE para realizar el retardo 100 µs
LOOP: DEC DE
LD A,D ; Coloca D en A para checar banderas
OR E ; Prende bandera del cero si D=E=0
JP NZ,LOOP ; Repite hasta si DE >0
DEC B ; Decrementa B
JR NZ,WAIT ; Si el retardo es suficiente termina
POP BC
POP DE ; Restablece el valor de DE y AF
POP AF
RET
35
Despliega digtos BCD en 7 segmentos
2000 7E H 0
2001 30 H 1
2002 6D H 2
2003 79 H 3
2004 33 H 4
2005 5B H 5
2006 5F H 6
2007 70 H 7
2008 7F H 8
2009 7B H 9
36
Código
1 5
Codigo BCD
Empaquetado
1 5
Obtener la parte baja
0001 0101
0000 1111
AND
0 5
Obtener la parte alta
1 5
SRL A
0001 0101
0000 1010
0000 0101
0000 0010
0000 0001
SRL A
SRL A
SRL A
0 1
08/11/2011
7
Despliega digtos BCD en 7 segmentos
2000 7E H
2001 30 H
2002 6D H
2003 79 H
2004 33 H
2005 5B H
2006 5F H
2007 70 H
2008 7F H
2009 7B H
37
Codigo
1 5
Código BCD
Empaquetado
01 05
BCD
desempaquetado
HL
HL +1
HL + 5
HL 2000
H L 20 00
L 00 01 L 01
L 00 05 L 05
HL 2001
HL 2005
Desempaqueta
UNPACK: ; Esta subrutina desempaqueta el numero BCD almacenado en el acumulador
; y los almacena en direcciones continuas empezando en BUFF
; Entrada: Numero BCD empaquetado en B
; Salida: BCD1 y BCD2 en el buffer BUFF
; Registros Modificados: Acumulador, HL
LD HL, BUFF1 ; apunta HL al buffer BUFF
LD A, B ; Obtiene el numero en BCD empaquetado
AND 0FH ; Enmascara la parte alta
LD (HL),A ; Almacena el digito menos significativo
INC HL ; Incrementa el apuntador
LD A,B ; Obtiene el numero BCD empaquetado
SRL A ; Shift el digito mas significativo a la parte
SRL A ; baja del acumulador
SRL A
SRL A
LD (HL), A ; Almacena el digito mas significativo
RET
38
Búsqueda
LOOKUP: ; Esta subrutina toma un digito BCD desempaquetado, actualiza el
; apuntador y obtiene el código correspondiente
; Entrada: Digito BCD Desempaquetado en el acumulador
; Salida: Código de 7-segmentos en el acumulador
; Registros Modificados: Acumulador
PUSH HL ; guarda el contenido de HL
LD HL,CODE ; apunto a la tabla del código 7-segmentos
ADD A,L ; Suma al apuntador el digito a ser desplegado
LD L,A ; Actualiza el apuntador
LD A, (HL) ; Obtén el código
POP HL ; Restablece HL
RET
CODE: DEFB 7EH, 30H, 6DH, 79H ; Código para 0, 1, 2, 3
DEFB 33H, 5BH, 5FH, 70H ; 4, 5, 6, 7
DEFB 7FH, 7BH ; 8, 9
39
Despliega
DISPLAY: ; Esta obtiene digitos BCD del buffer de salida, llama a la subrutina
; LOOKUP y despliega el digito al puerto de salida apropiado
; Entrada: Apuntador al buffer en HL
; Salida: Ninguna
; Registros Modificados: HL
; Subrutinas llamadas: LOOKUP
LD A,(HL) ; Obtiene el segundo digito
CALL LOOKUP ; Obtiene el código 7-segmentos
OUT (PORT2), A ; Despliega el código
DEC HL ; Decrementa el apuntador
LD A, (HL) ; Obtiene el segundo digito
CALL LOOKUP ; Obtiene el código 7-segmentos
OUT (PORT1), A ; Despliega el código
RET
40
Programa Principal
STACK: EQU 1900H
BUFF: EQU 1901H
ORG 1800H
MAIN: LD SP, STACK ; Inicializa el stack
LD B, 00H ; Inicializa el contador a 00H
NEXT: CALL UNPACK ; Desempaqueta el numero BCD y almacena en BUFF
CALL DISPLAY ; Despliega los dígitos BCD en el puerto apropiado
CALL DELAY ; Espera por 1 segundo
CALL UPDATE ; Actualiza la cuenta
JP NEXT ; continua
41
Ejercicio
 Escriba un programa que realice la conversión de un número
en BCD a binario
 Use la subrutina unpack para desempaquetar el número
 Escriba una subrutina que realice la conversión de BCD a
binario.
 Escriba el programa principal

42
1 2 0000 1100
0001 0010
00000001
00000010
00001010
00000010
10
00001100
08/11/2011
8
BCD a Binario
BCDBIN: ; Esta subrutina convierte un numero desempaquetado BCD en binario
; El digito menos significativo esta en BUFF y el mas significativo en BUFF+1
; Entrada: Numero BCD desempaquetado en BUFF y BUFF+1
; Salida: Numero binario en el acumulador A
; Registros Modificados: HL, A
PUSH DE
LD HL,BUFF
INC HL
LD D,(HL)
LD E,10
XOR A
SUM: ADD A,D
DEC E
JR NZ,SUM
DEC HL
ADD A,(HL)
POP DE
RET
43
Hitachi HD44780
 Pantalla de Cristal
Liquido LCDII con
controlador incluido
HDD44780
 Esta pantalla tiene una
variedad de
configuraciones como
son 8X1 (8 caracteres
por 1 renglón), 16X2,
20X2,20X4
44
Configuración de Terminales
1. Ground
2. VCC (+3.3 to +5V)
3. Contrast adjustment (VO)
4. Register Select (RS). RS=0:
Command, RS=1: Data
5. Read/Write (R/W).
R/W=0: Write, R/W=1:
Read
6. Clock (Enable). Falling
edge triggered

7. Bit 0 (Not used in 4-bit operation)
8. Bit 1 (Not used in 4-bit operation)
9. Bit 2 (Not used in 4-bit operation)
10. Bit 3 (Not used in 4-bit operation)
11. Bit 4
12. Bit 5
13. Bit 6
14. Bit 7
15. Backlight Anode (+)
16. Backlight Cathode (-)
45
Rutina de Inicialización
Encender
LCD
Esperar 1.5 ms
después de que
Vdd llega a 4.5V
Enviar
código de
INICIO
00011XXXX
BF no puede
probarse en este
punto
Repetir
código de
INICIO
Esperar por mas
de 4.1 ms
Repetir
código de
INICIO
El código de inicio
indica que la
interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
Establecer modo
de Escritura
46
Comunicándose con LCD
 LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el código
ASCII a escribirse
 Se utilizan 3 señales de
control:
 Selección de Registro
(RS)
 Escritura/Lectura (R/W)
 Habilitación de Reloj
(CE)

Selección
de Registro
RS = 0,
setup
RS = 1,
dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envió de
datos
Envió de
código
ASCII
Deshabilita
Intercambio
CE = 0
47
1. RS=0: Instrucción, RS=1: Dato
2. R/W=0: Escritura, R/W=1: Lectura
3. CE = 1 habilita, CE = 0, deshabilitado
Instrucciones
R/S R/W D7 D6 D5 D4 D3 D2 D1 D0 INSTRUCTION
4 5 14 13 12 11 10 9 8 7 PINS
0 0 0 0 0 0 0 0 0 1 Limpia pantalla
0 0 0 0 0 0 0 0 1 *
Regresa el cursor al inicio de la
pantalla
0 0 0 0 0 0 0 1 ID S
Indica la dirección de movimiento del
cursor
0 0 0 0 0 0 1 D C B Habilita el display/cursor
0 0 0 0 0 1 SC RL * * Mueve el cursor/ Corre el display
0 0 0 0 1 DL N F * * Establece la longitud del display
1 0 D D D D D D D D
Escribe un caracter en la posición actual
del cursor
1 1 D D D D D D D D
Lee el caracter en la posición actual del
cursor
48
08/11/2011
9
Interfaz

49
08/11/2011
1
UNIDAD 5 – 5
A
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoño 2011
Instrucciones de 16-bits
OPCODE OPERANDO BYTES DESCRIPCION
LD HL,(16-bits) 3
Copia el contenido de la locación de
memoria especificada por el operando de
16-bits
LD (16-bits), HL 3
Copia el contenido del par de registros HL
en la locación de memoria especificada
por HL
LD SP, HL 1
Copia el contenido de HL al apuntador al
stack SP
JP (HL) 1
Carga el contenido de HL en el contador
del programa. Esta instrucción es
equivalente a LD PC,HL
Ejemplo
Condiciones Iníciales
D 85 6F E
H 00 00 L
2050 3F
2051 42
LD HL,(2050H)
D 85 6F E
H 42 3F L
2050 3F
2051 42
EX DE,HL
D 42 3F E
H 85 6F L
2050 3F
2051 42
LD (2050H),HL
2050 6F
2051 85
D 42 3F E
H 85 6F L
Memoria
Suma y Resta con Carry
OPCODE OPERANDO DESCRIPCION
ADC A,r
Suma el operando, carry y el
acumulador. El resultado es
almacenado en el acumulador.
A = OPERANDO + CY + A
ADC A, 8-bits
ADC A, (HL)
ADC A, (IX+d)
SBC A,r Resta el contenido del operando y
el borrow del contenido del
acumulador y el resultado es
puesto en el acumulador
A = A – OPERANDO – CY
SBC A, 8-bits
SBC A, (HL)
SBC A, (IX+d)
Suma y Resta con Carry
 Esta instrucción sirve para sumar una lista de
números tomando en cuenta el carry generado en
cada suma
 También puede ser usada para sumar números de
16-bits
 Ejemplo:
 Suma el 2793H y el 3182H y guarda el resultado en
la locación de memoria 2050H y 2051H. Suponga
que los números se encuentran en BC y DE
respectivamente
Suma y Resta con Carry
Condiciones Iníciales
B 27 93 C
D 31 82 E
2050 XX
2051 XX
Memoria
LD A,C
ADD A,E
A 93 XX F
A 15 CY =1 F
93H  (A)
+ 82H  (E)
115H
H 15 L
A 31 CY =1 F
LD L,A
LD A,D
ADC A,B
1H  CY
31H  (A)
+ 27H  (B)
59H A
LD H,A
LD (2050H),HL
H 59 15 L
A 59 CY =0 F
2050 15 H
2051 59 H
08/11/2011
2
Suma de 16-bits
OPCODE OPERANDO DESCRIPCION
ADD HL,BC
Suma el contenido del operando
(par de registros o apuntador al
stack) al contenido del registro HL, y
el resultado es puesto en el registro
HL.
La bandera del carry es alterada
para reflejar el resultado de la
suma de 16-bits. Ninguna otra
bandera es alterada
Esta instrucción usa HL como el
acumulador de 16-bits
ADD HL,DE
ADD HL,HL
ADD HL,SP
Suma de 16-bits
LD A,C
ADD A,E
LD L,A
LD A,D
ADC A,B
LD H,A
LD (2050H),HL


EX HL,BC
ADD HL,DE


LD (2050H),HL
SLA H
SLA H
SLA H
SLA H
SLA L
SLA L
SLA L
SLA L
;Shift a la izquierda 4 posiciones
ADD HL,HL 1231 + 1231 = 2462 HL
ADD HL,HL 2462 + 2462 = 48C4 HL
ADD HL,HL 48C4 + 48C4 = 9188 HL
ADD HL,HL 9188 + 9188 = 2310 HL
Ejemplo
 Dos números de 32-bits están almacenados en el
BUFF1 y BUFF2 respectivamente.
 La subrutina ADBYTE suma los números y el
resultado es almacenado en el BUFF1
 Los parámetros de entrada son
 Operando 1 apuntado por HL
 Operando 2 apuntado por DE
 El tamaño del operando en bytes en B
Subrutina ADBYTE
ADBYTE: ; Esta subrutina suma dos números de múltiples bytes y almacena el
; resultado en memoria, reemplazando el primer numero
; Entrada: Dirección de los números a ser sumados en HL y DE, El tamaño de
; los números en bytes en el registro B
; Salida: Suma almacenada en memoria
; Registros Modificados: B, DE, HL y el acumulador
START: XOR A ; Limpia la bandera del carry
NEXT: LD A,(DE) ; Carga el byte del BUFF2
ADC A,(HL) ; Suma el byte del BUFF1
LD (HL),A ; Guarda el resultado parcial
INC HL ; Actualiza los apuntadores a memoria
INC DE
DEC B ; Actualiza el contador para la siguiente suma
JR NZ, NEXT ; Si el contador es diferente de cero continua
RET
Programa Principal
MAIN: LD SP, STACK
LD HL, BUFF1 ; Inicializa apuntadores
NEXT: LD DE, BUFF2
LD B,04H ; Inicializa el contador especificando el
; numero de bytes a ser sumado
CALL ADBYTE ; Realiza la suma
HALT
Multiplicacion Binaria
 La multiplicación binaria de M × N puede ser
realizada por medio de sumar M, N veces.
 Una forma mas eficaz de multiplicación binaria es
el siguiente procedimiento
111
× 101
Paso 1: (111 × 1) 111
Paso 2: Shift izquierdo y suma (111 × 0) + 000
Paso 3: Shift izquierdo y suma (111 × 1) + 111
100011
08/11/2011
3
Subrutina MLTPLY
MLTPLY: ; Esta subrutina multiplica dos números sin signo
; Entrada: Operando 1 en E y Operando 2 en D
; Salida: Resultado en HL
; Registros Modificados: B, DE, HL y el acumulador
LD A, D ; Copia el operando 2 en A
LD D,0 ; Limpia D para guardar resultados parciales
LD HL,0 ; Limpia HL
LD B,08H ; Inicializa el contador a 8
NEXT: RRA ; Checa si el bit del operando 2 es 1
JR NC, NOADD ; Si no evita sumar el operando 1
ADD HL,DE ; Si el bit es 1, entonces suma el operando 1
NOADD: EX DE,HL ; Shift a la izquierda un bit
ADD HL, HL
EX DE,HL
DEC B ; Decrementa el contador
JR NZ, NEXT ; Regresa para obtener el siguiente bit, sino
RET ; termina
Programa Principal
MAIN: LD SP, STACK
LD HL, (BUF1) ; Obten los operandos
NEXT: EX DE, HL ; Copialos en DE
CALL MLTPLY ; Multiplica los numeros
LD (OUTBUF),HL ; Almacena el resultado en OUTBUF
HALT
16/11/2011
1
Unidad 6
Dispositivos de Entrada/Salida Programables
Microprocesadores
1 Otoño 2011
Contenido
Conceptos básicos de interrupciones de entrada/salida
Convertidores A/D Y D/A
Dispositivos Programables
• PPI 8255
• Timer 8253 y 8254,
• UART 8250,
• Comunicación serial de entrada/salida.
2
Comunicación con Dispositivos I/O
Transferencia
de Datos
WAIT
Dispositivos
Lentos
Sondeo
(Polling)
Interrupción
Enmascarable
No
Enmascarable
3
Comunicación con Dispositivos I/O
WAIT
 Se utiliza para dispositivos
lentos
 El Z80 tiene establecido el
tiempo en el que realiza la
lectura del bus de datos
 Si el dispositivo no puede
entregar el dato dentro de
ese intervalo, entonces se
requiere la generación de
una señal de espera
Generación de la señal WAIT
4
Comunicación con Dispositivos I/O
Sondeo Interrupción
 El microprocesador se
mantiene en un ciclo
revisando continuamente el
dispositivo externo
 Los cambios en el
dispositivo de entrada son
ignorados hasta la siguiente
lectura
 La interrupción es un
proceso de transferencia
de datos, donde un
dispositivo externo indica
que
 esta listo para comunicarse
 o requiere atención
 La comunicación se inicia
por el dispositivo externo
en forma asíncrona
START: IN A,(41H)
JP START
5
Interrupción
 Esta forma de transferencia de datos se utiliza para
comunicarse con dispositivos que generan datos en forma
asíncrona
 Por ejemplo:
 El teclado de un maquina vendedora de refrescos
 Cambios drásticos en la temperatura
 Existencia de vibraciones en una maquina o el suelo

 El proceso de interrupción permite al microprocesador
ejecutar el programa mientras le da servicio bajo
demanda a diferentes periféricos
6
16/11/2011
2
Interrupción
 Un dispositivo externo puede interrumpir al Z80 por
medio de la señal INT, por lo cual el microprocesador
debe revisar el estado de esta señal continuamente

 Cuando el Z80 es interrumpido, la ejecución del
programa es transferida a una locación de memoria
especifica, para obtener las instrucciones que nos
permitirán manejar esta interrupción

 El grupo de programas que atienden a las interrupciones
son conocidos como RUTINAS DE SERVICIO
7
Interrupciones
Locación de
memoria
Modo
Tipo
Interrupción
Enmascarable
Modo 0
8
locaciones
Modo 1
0038 H
Modo 2
Cualquier
locación
No
enmascarable
0066 H
8
Interrupciones Enmascarables
 Las rutinas enmascarables son controladas por los flip-
flops de habilitación a la interrupción (IFF1, IFF2), son
internos al microprocesador

 Para causar una interrupción debemos
 Habilitar las interrupciones (software)
 IFF1 e IFF2 deben ser activados (puestos a uno)
 La entrada INT (pin 16) debe ir a cero por una señal del
dispositivo externo por el tiempo suficiente para que el Z80
sea capaz de detectarla (hardware)

9
Instrucciones Especiales
EI DI
 Es una instrucción de 1 byte
 Habilita las interrupciones
por medio de poner a uno
los flip-flops IFF1 e IFF2
 Las interrupciones son
desactivadas por medio de
 DI
 Reset del sistema
 Reconocimiento de la
Interrupción
 Es una instrucción de 1 byte
 Deshabilita las
interrupciones por medio de
poner en cero los flip-flops
IFF1 e IFF2
 Se utiliza para deshabilitar
las instrucciones en
secciones de código que no
puedan ser interrumpidas
(Secciones Criticas)

10
Modos de Interrupción
 Existen tres modos de interrupción en el Z80. Para
indicar cual es el modo de interrupción en el que nuestro
sistema trabajara debemos usar las siguientes
instrucciones:
 IM 0
 Modo 0
 El ejecución del programa se transfiere a uno de las 8 locaciones de
memoria de 0000H a la 0038
 IM 1
 Modo 1
 La ejecución del programa se transfiere a la locación de memoria 0038H
 IM 2
 Modo 2
 La ejecución de memoria se transfiere a cualquier locación de memoria
11
Proceso de Interrupción en el Modo 0
1. El proceso de interrupción es habilitado por medio de
EI y se especifica el modo de operación por medio de
IM 0
2. Cuando el microprocesador esta ejecutando el
programa, revisa la línea INT en el ultimo estado-T de
cada instrucción
3. Si los flip-flops de interrupción están habilitados y la
señal INT esta en bajo entonces
1. El Z80 termina la ejecución de la instrucción actual
2. Deshabilita la los flip-flops de interrupción
3. Envía la señal INTA (Interrupt Acknowledgment)
4. El microprocesador no acepta ninguna interrupción hasta
que los flip-flops de interrupción son activados nuevamente
12
16/11/2011
3
Proceso de Interrupción en el Modo 0
4. La señal INTA es usada para introducir una instrucción
por hardware. Esta instrucción indica a que dirección de
memoria debe transferirse la ejecución del programa.
Instrucción OPCODE Dirección
de llamado
RST 00H C7 0000H
RST 08H CF 0008H
RST 10H D7 0010H
RST 18H DF 0018H
RST 20H E7 0020H
RST 28H EF 0028H
RST 30H F7 0030H
RST 38H FF 0038H
13
Proceso de Interrupción en el Modo 0
5. Si la instrucción que se introduce es la instrucción RST,
el Z80 almacena la dirección de la siguiente instrucción
en el stack y transfiere la ejecución del programa a la
dirección indicada por RST
6. El microprocesador ejecuta la subrutina asociada a la
dirección especificada por RST
7. Al termino de la subrutina se debe habilitar las
interrupciones nuevamente por medio de EI
8. Al final de la subrutina, la instrucción RET recupera la
dirección de programa cuando donde fue interrumpido
y continua su ejecución.
14
Proceso de Interrupción en el Modo 0
15
Ejemplo
 El programa principal cuenta continuamente en binario
con un retardo de 1 segundo entre cada cuenta y
despliega la cuenta en el puerto 1 (PORT1)

 El Z80 es interrumpido por medio de un botón
conectado al pin 16 (INT)

 Una vez interrumpido, el sistema mostrara el en el puerto
1 el numero FFH y lo mostrara interrumpidamente con
un retardo apropiado entre cada escritura
16
Programa
PORT1: EQU 0C1H
STACK: EQU 1899H
ORG 0030H
JP 1870H ; Salta a la rutina de servicio
ORG 1800H
START: LD SP, STACK ; Inicializar el apuntador a la pila
IM 0 ; Definir el modo de interrupción
EI ; Habilitar las interrupciones
LD A,00 ; Inicializar el contador
NEXT: OUT (PORT1),A ; Escribir al puerto 1 la cuenta
CALL DELAY ; Esperar por un segundo
INC A ; Incrementar la cuenta
JP NEXT ; Continuar 17
Rutina de Servicio
ORG 1870H ; Inicio de la rutina de servicio
FLASH: PUSH BC ; guarda los registros para evitar modificarlos
PUSH AF
LD B,10 ; Inicializa el contador para mostrar el
; numero 5 veces
LD A,00 ; Byte para apagar el display
DSPLAY: OUT (PORT1),A ; Despliega 00H y FFH alternativamente
CALL DELAY ; Espera por un segundo
CPL ; Complementa el byte para ser desplegado
DEC B ; Decrementa el contador
JP NZ, DSPLAY ; si no ha terminado regresa a desplegar
POP AF ; Restaura los valores del registro
POP BC
EI ; Habilita las interrupciones
RET ; Regresa al punto de interrupción 18
16/11/2011
4
Circuito
19
Implementado Interrupciones
 Duración del ancho del pulso de interrupción
 El pulso de interrupción debe estar activa el tiempo suficiente
para que el Z80 lo detecte

 El Z80 muestrea la señal INT en el ultimo estado-T de cada
instrucción

 La instrucción mas larga del Z80 tiene 23 estados-T, por lo cual
en el pero caso la señal debe estar activa por 23 estados-T

 Sin embargo, si la señal esta activa hasta que los flip-flops son
habilitados nuevamente por EI, causara que el Z80 vuelva a ser
interrumpido
20
Implementado Interrupciones
21
Conexión del botón de interrupción
 El botón mecánico cuando
es presionado proporciona
un señal inestable por un
momentos.
 Este comportamiento puede
durar hasta 20ms y si la
rutina de interrupción
habilita los flip-flops de
interrupción antes de que el
voltaje se estabilice entonces
puede ser interpretado
como una nueva
interrupción.
 Este comportamiento puede
ser evitado por medio de el
circuito mostrado
22
Implementando Interrupciones
 La instrucción EI activa los flip-flops de interrupción hasta
que se ha terminado la ejecución de la siguiente
instrucción

 Esta medida se toma para evitar que el Z80 sea
interrumpido antes de que la dirección de regreso sea
recuperada del stack por medio de la instrucción RET

 El Z80 no reconocerá la interrupción en caso de que
 La señal BUS REQUEST este activa
 El Z80 esta sirviendo a una solicitud de mas alta prioridad
23
Interrupción en el Modo 1
 La diferencia entre el Modo 1 y el 0 es que no se requiere
del hardware externo que indica a donde se debe
transferir la ejecución del programa
 Los requerimientos para operar en este modo son
 Habilitar los flip-flops de interrupción por medio de EI
 Especificar el modo de operación por medio de IM 1
 La señal INT debe estar activa por el tiempo suficiente
 Una vez que el Z80 ha reconocido la interrupción
 Deshabilita los flip-flops para evitar ser interrumpido mientras
atiende la interrupción actual
 Guarda la dirección de la próxima instrucción en el stack
 Transfiere la ejecución a la locación 0038H
24
16/11/2011
5
Convertidor Analógico-Digital
 El convertidor Analógico/Digital (ADC) tomo un voltaje
de entrada analógico y produce una código de salida
digital que representa la entrada analógica
 Los principales componentes de un ADC son:
 Comparador(es)
 Convertidor D/A
 Registro
 Unidad de Control
25
Convertidor Analógico-a-Digital
 La operación básica de los convertidores A/D consta de
los siguientes pasos
 El ADC inicia la conversión cuando se le indica por medio del
comando de inicio
 La unidad de control modifica el numero binario almacenado
en el registro
 El numero binario es convertido a un voltaje analógico VAX
 Si el voltaje VAX es menor que VA entonces la salida del
comparador permanece en alto. Cuando esta condición no se
cumple la salida cambia a bajo y suspende la modificación del
registro
 La unidad de control modifica el valor de EOC para indicar
que se ha concluido la conversión

26
Resolución
 La señal analógica puede tomar
un numero infinito de valores
en el rango de conversión del
ADC
 Sin embargo, estos valores no
pueden ser completamente
representado por en un código
digital
 El numero posible valores de
voltaje que pueden ser
representados es de 2
n
donde
n es el numero de bits que nos
entrega el ADC
27
Resolución y Error de Cuantizacion
 Un rango de voltajes es traducido a la misma
representación digital
 La resolución esta definida como el tamaño de paso entre
un voltaje y otro
 El error de cuantizacion es el error introducido al
representar con un numero de valores finitos todos los
posibles valores analógicos
 El error de cuantizacion se puede reducir aumentando el
numero de bits usados para representar el valor
analógico

28
Tiempo de Conversión
 El tiempo de conversión es el intervalo entre el final del
pulso del comando de inicio y la activación de la señal
EOC
 El tiempo de conversión depende del tipo de ADC que se
este utilizando
29
Tipos de ADC
ADC
Rampa Digital Mas lento
Aproximaciones Sucesivas
Rampa digital ascendente/descendente
Voltaje a Frecuencia
Ambientes
Ruidosos
Paralelo (Flash) Mas rápido
30
16/11/2011
6
ADC Rampa Digital
 Rampa digital es el ADC mas sencillo
 Emplea un contador binario como registro y permite que el
reloj incremente el estado del contador un paso a la vez
 Este proceso se detiene hasta que V
AX
≥ V
A

 El tiempo de conversión depende del valor analógico de
entrada
31
ADC de Aproximaciones Sucesivas
 Los ADC de
Aproximaciones Sucesivas
(CAS) tiene un tiempo de
conversión constante
 La lógica de control
modifica bit por bit el
valor de registro hasta que
el valor del registro
alcanza el valor de la
entrada digital
32
ADC Paralelo (FLASH)
 Es el ADC mas rápido,
pero el que requiere de
una mayor circuitería
 Requiere de 2
n
-1
comparadores, donde n es
el numero de bits que
representan la señal
analógica
 El tiempo de conversión
es el retardo de
propagación asociado a
los comparadores y el
codificador
33
ADC0801
 ADC0801 es un convertidor de 8 bits
 La señal analógica es conectada a V
in+
. La máxima señal de
entrada es +5V
 La señal analógica puede ser conectada a una entrada
diferencial usando V
in-
 La señal V
ref
es usada para limitar el máximo valor de
entrada, si no es conectada externamente, entonces es
puesta a +5V internamente
 El reloj interno es determinado por la red RC conectado
en los pines 19 y 4
34
Interfaz con el ADC
 La interfaz con del ADC con el Z80 requiere de tres
señales
 CS: habilita el convertidor
 WR: Indica el inicio de la conversión
 RD: indica que el Z80 esta listo para obtener el dato
 Cuando WR y CS están activas, el ADC inicia la
conversión
 Una vez que la conversión ha sido terminada, el ADC
indica que existe un dato para ser leído por medio de
INTR. Esta señal se usara para interrumpir al Z80
 Una vez que el dato es leído, la señal INTR se inactiva
35
Interfaz con el ADC
36
10F
10K
120pF
16/11/2011
7
Ejemplo
 El siguiente programa recolecta un numero especificado
por medio de BYTE
 Las lecturas son almacenadas en memoria en la dirección
BUFFER
 El programa usa el modo de interrupción 1
 Al ser interrumpido el Z80 automáticamente transfiere el
control del programa a la dirección 0038H
 Asuma
 STACK: EQU 1890H
 BUFFER: EQU 1891H
 BYTE: EQU 10

37
Programa Principal
ORG 0038H
JP ADC ; Salta a la rutina de servicio
ORG 1600H
START: LD SP, STACK ; Inicializar el apuntador a la pila
IM 1 ; Definir el modo de interrupción
LD HL, BUFFER ; HL apunta a la dir. de almacenamiento
LD B, BYTE ; El contador se inicializa al numero de lecturas
EI ; Habilitar las interrupciones
OUT (F8H),A ; Inicia la conversión
WAIT: NOP ; Esperar por un segundo
JP NZ, WAIT ; Espera hasta que se haya obtenido todas las
HALT ; lecturas
38
Rutina de Servicio
ADC: ; Esta rutina de servicio lee el dato del ADC, lo almacena en memoria
; e inicia la conversión de la siguiente lectura
; Entrada: apuntador a memoria en HL y numero de lecturas en B
; Registros modificados A, B, y HL
IN A,(F8H) ; lee el dato del convertidor
EI ; Habilita las interrupciones
LD (HL),A ; Almacena la lectura en memoria
INC HL ; Incrementa el apuntador
DEC B ; Se almacenado una nueva lectura, decrementa
; el contador
OUT (F8H),A ; Inicia la conversión de la siguiente lectura
RET
39
Interrupción en el Modo 2
 El modo 2 nos permite transferir el control del programa
a cualquier locación de memoria.
 En este modo el Z80 adquiere 8 bits del bus de dato
cuando es interrumpido y los interpreta como la parte
baja de una dirección de memoria.
 La parte alta de la dirección de memoria es tomada de el
registro de interrupción (I)
 La dirección de memoria formada por el registro de
interrupción y los datos leídos del bus son considerados
como un apuntador a la dirección de la rutina de servicio
40
Interrupción en el Modo 2
 Instrucciones de inicialización:
 En este modo se debe inicializar el stack
 Inicializar el vector de interrupción con la parte alta de la
dirección de memoria
 Indicar que el modo de operación es el modo 2
 Habilitar interrupciones

START: LD SP, STACK ; Inicializar el apuntador a la pila
LD A,18H ; Inicializar la parte alta de la dirección
LD I,A ; del apuntador a memoria
IM 2 ; Definir el modo de interrupción
EI ; Habilitar las interrupciones
41
Interrupción en el Modo 2
 Diseñar el circuito que introducirá la parte baja de la
locación de memoria
42
16/11/2011
8
Interrupción en el Modo 2
 Cuando el Z80 reconoce la solicitud de interrupción, forma el
vector de memoria combinando el registro de interrupciones
y el byte del bus de datos
 Para este ejemplo la dirección es 18F8H
 El control del programa es transferido a 19A7H que es el
contenido de las locaciones de memoria 18F8H y 18F9H
A7 H
19 H
18 F8
18F7H
18F8H
18F9H
Registro de
interrupciones
Dato
43
Interrupción No Enmascarable
 El Z80 tiene una entrada separada (pin 17) para las
interrupciones no enmascarables
 Es la interrupción con la mas alta prioridad dentro de las
interrupciones
 No puede ser deshabilitada por software
 Esta interrupción es reservada para situaciones de
emergencia
 Cuando el Z80 reconoce la interrupción, el control del
programa es transferido a la dirección 0066H
 Es sensitiva al flanco, por lo cual NO debe estar activa
hasta que el Z80 la muestre
44
Interrupción No Enmascarable
 La interrupción no enmascarable es ejecutada de la
siguiente manera:
1. Cuando NMI es activada por el dispositivo externo, la
solicitud de interrupción es guardada internamente en el
flanco de bajada de NMI

2. El Z80 muestrea NMI en el ultimo estado-T de la
instrucción que se esta ejecutando, acepta la solicitud al
terminar la ejecución de la instrucción actual

3. Una vez que la interrupción es aceptada, el Z80 almacena
el contenido de PC en el stack
45
Interrupción No Enmascarable
4. El Z80 almacena el estado de los flip-flops de interrupción y los
deshabilita para evitar interrupciones

5. El programa es transferido a la locación 0066H. No requiere
hardware externo para la transferencia de control del programa

6. La rutina de servicio debe terminar con RETN. Esta instrucción
toma la dirección del tope del stack para regresar al punto de
interrupción, y además recobra el estado original de los flip-flops
de interrupción. Por lo tanto, habilita las interrupciones
enmascarable y regresa al punto de interrupción.
46
Múltiples interrupciones
Método de Sondeo
Método del Vector de
Interrupciones
 Técnica por software
 Por medio de instrucciones
se revisa cada dispositivo,
 se identifica al dispositivo que
realizo la llamada y
 se transfiere el control a la
subrutina de servicio adecuada
 Software determina la
prioridad entre los
dispositivos que hicieron la
solicitud
 Técnica por hardware
 El dispositivo se
identifica a si mismo por
medio de una
instrucción o una
dirección
 La prioridad es
determinada por el
hardware
47
Método de Sondeo
 Se requiere un puerto adicional que nos indica el estado de los dispositivos conectados al
sistema
48
16/11/2011
9
Rutina de Servicio
MODE1: ; Esta rutina de esta escrita en la locación 0038H para responder a las
; solicitudes en el modo 1. Determina la prioridad ente los dos
; convertidores y los identifica. Después de identificar el convertidor,
; lee y almacena el dato e inicializa la siguiente conversión
PUSH AF ; Guarda el contenido del acumulador
IN A,(status) ; Lee el puerto de estado
AND 00000011B ; Enmascara para obtener solo los dos LSB
RRA ; Pon D0 en la bandera del carry
CALL C, DVICE1 ; Si el dispositivo 1 llamo, lee el dato
RRA ; Coloca D1 en la bandera del carry
CALL C, DVICE2 ; lee el dato del dispositivo 2
POP AF ; Recupera el contenido del acumulador
EI ; Habilita las interrupciones
RET
49
Rutina de Servicio
DVICE1: PUSH AF ; Guarda el contenido del acumulador
IN A,(ADC1) ; Lee el dato del convertidor 1
LD (HL),A ; Almacena la lectura
INC HL ; incrementa el contador
OUT (ADC1),A ; Reinicia la conversión
POP AF ; Recupera el contenido del acumulador
RET
DVICE2: PUSH AF ; Guarda el contenido del acumulador
IN A,(ADC2) ; Lee el dato del convertidor 2
LD (DE),A ; Almacena la lectura
INC DE ; incrementa el contador
OUT (ADC2),A ; Reinicia la conversión
POP AF ; Recupera el contenido del acumulador
RET 50
Técnica del vector de interrupción
51
Resumen
Interrupción
Condiciones
para aceptar la
interrupción
Instrucciones
Hardware
externo
Locación de
Reinicio
No Enmascarable
Sensible al flanco
Pin 17
BUSRQ Inactiva
NMI activa en
bajo
No tiene efecto
EI o DI
No se
requiere
0066H
Enmascarable
Sensible al nivel
Pin 16
BUSRQ inactiva
NMI inactiva
INT activa en
bajo
Debe ser
habilitada por EI
y puede ser
deshabilitada DI
MODO 0 RST 0000 – 0038
MODO 1
No se
requiere
0038H
MODO 2
Usa el Registro I
para la parte alta
Parte baja
Dirección par
de memoria
52
24/11/2011
1
Dispositivos de Interfaz
Programables
Unidad 6, 2ª Parte
1
Dispositivos de Interfaz Programable
 Los dispositivos periféricos simples pueden ser
considerados como que están siempre listos para la
transferencia de datos.
 Sin embargo, dispositivos mas complejos requieren alguna
forma de indicar si están listos para la transferencia.
 Un sistema basado en microprocesador requiere de
señales de sincronización para establecer cuando puede
ser transferida información entre el microprocesador y el
periférico (handshaking)
 Además, los periféricos deben ser capaces de solicitar
atención del Z80. Sin embargo, no todos los periféricos
pueden generar su propia señal de interrupción
2
Dispositivos de Interfaz Programable
3
 En algunas situaciones, la interfaz debe ser capaz de
manejar flujos de datos bidireccionales.
 Las características de la interfaz programable son las
siguientes:
 Registros de entrada y salida (para mantener datos)
 Buffer de tres-estados (para controlar el acceso de los
periféricos)
 Capacidad de flujo de datos bidireccional
 Señales de interrupción y sincronización
 Lógica de control
 Lógica de selección del chip
 Lógica de control de interrupción
Dispositivo de Entrada y Salida Paralelo
para el Z80
4
 El Z80 PIO (Parallel Input/Output) es un dispositivo de
interfaz especialmente diseñado para el Z80
 Controla dos puertos de Entrada y Salida de 8-bits A y B
Señales
PIO
Bus de Datos
Líneas de E/S
Señales de sincronización
Lógica de control de Interrupción
Señales de Control
Potencia y Reloj
Z80 PIO
5
Z80 PIO
6
 Bus de datos (D7-D0): Este es un bus (tri-state) de 8-bit
bidireccional usado para la transferencia de datos entre el Z80
y el PIO
 Líneas de E/S (A7-A0): Estas son líneas tres-estados
bidireccionales para el puerto A, usadas para transferir datos
del PIO hacia el periférico
 Líneas de E/S (B7-B0): Similares al puerto A
 Señales de sincronización: Tiene 4 señales dos por cada puerto
 Potencia y Reloj: el PIO opera con una alimentación de 5V y
usa un reloj de una sola fase
 Lógica de Control de Interrupción
 Señales de Control
24/11/2011
2
Modos de Operación
7
Z80 PIO
E/S Byte
Modo 0
Salida Simple
Salida con
Interrupción
Modo 1
Entrada Simple
Entrada con
Interrupción
Modo 2
Transferencia
Bidireccional
E/S Bit
Modo 3
Líneas
individuales
pueden ser
seleccionadas
Modos de Operación
8
 El PIO Cuenta con un registro de Control y un registo de
Dato para cada Puerto
 El registro de Dato se utiliza para la transferencia de
información
 El registro de Control estable el modo de operación del
puerto
D7 D6 D5 D4 D3 D2 D1 D0
Modo X X 1 1 1 1
Byte de Salida Modo 0 0 0
No
Importa
Identifica la palabra
de Control del
Modo
Byte de Entrada Modo 1 0 1
Bidireccional (Solo Puerto A) Modo 2 1 0
Bit E/S Modo 3 1 1
Señales de Sincronización
9
Señal Tipo
Configuración
Puerto de Salida Puerto de Entrada
ASTB
Entrada
desde el
periférico
Indica que el
periférico ha
recibido el dato.
Indica que un byte ha sido
colocado en el puerto A
por un periférico
ARDY
Salida
hacia el
periférico
Indica que un byte
ha sido almacenado
en el registro del
puerto A y esta listo
para ser transferido
Indica que el registro del
puerto A esta vacio y listo
para recibir el siguiente
byte para el periférico
BSTB Igual que ASTB pero para el puerto B
BRDY Igual que ARDY pero para el puerto B
Señales de control
10
 El PIO tiene 6 señales de control. Tres de ellas determinan la
dirección del puerto de los registros de E/S A y B y sus
registros de control. Las restantes indican que tipo de
operación será realizada (escritura o lectura).
Señales de Control
Selección del Puerto
Habilitación
del Chip
Selección
del Puerto
A o B
Selección
del registro
de datos o
Control
Selección de Operación
Lectura Escritura
Selección del puerto
11
CE C/D B/A Puerto Seleccionado
0 0 0 Puerto A
0 0 1 Puerto B
0 1 0 Control de Registro A
0 1 1 Control de Registro B
1 X X PIO No seleccionado
 Las señales son
 Chip Enable (CE): conectada al decodificador de direcciones
 Selección del puerto (B / A): Cuando la señal esta en alto se
selecciona al puerto B y cuando esta en bajo al puerto A
 Selección de Control o Dato (C / D ): Cuando la señal esta en alto
selecciona el registro de control para escribir un comando. Cuando
es bajo selecciona el registro de transferencia de datos

Selección de Operación
12
 Las señales de control son M1, RD e IORQ conectadas a
sus correspondientes en el Z80.
 Las operaciones se seleccionan de la siguiente manera:
 Lectura: Cuando RD e IORQ están en bajo, el MPU lee el
registro seleccionado
 Escritura: Cuando IORQ están en bajo y RD esta en alto, el
MPU escribe un dato al registro seleccionado
 Reconocimiento de la Interrupción: Cuando M1 e IORQ están
en bajo, el Z80 reconoce la interrupción proveniente del PIO
 Reset: Cuando M1 esta en bajo y tanto RD como IORQ están
en alto, el PIO es reiniciado
24/11/2011
3
Interfaz entre el Z80 y el PIO
13
74LS138
Z80 PIO
A4
A3
A2
A7
A6
A5
MSB
O
0
A1
A0
CE
C/D Sel
B/A Sel
A7 A6 A5 A4 A3 A2
A1
C/D
A0
B/A
1 0 0 0 0 0 0 0 80 H Registro de Dato A
0 1 81H Registro de Dato B
1 0 82 H Registro de Control A
1 1 83 H Registro de Control B
Ejemplo:
14
 Configura el Z80-PIO de la siguiente manera
 Utiliza el puerto A como puerto de entrada para conectar 8
interruptores. La dirección del puerto A debe ser 80H
 Utiliza el puerto B como puerto de salida para conectar 7 leds
y una bocina. La dirección del puerto deberá ser 81H
 Si el interruptor 7 se encuentra encendido, entonces
manda la señal de emergencia a la bocina
 Si el interruptor 7 esta apagado, entonces enciende los
LEDS correspondientes a los interruptores
 El programa debe continuar leyendo los interruptores
Palabra de Control
15
D7 D6 D5 D4 D3 D2 D1 D0
Modo X X 1 1 1 1
Byte de Salida Modo 0 0 0
No
Importa
Identifica la palabra
de Control del
Modo
Byte de Entrada Modo 1 0 1
Bidireccional (Solo Puerto A) Modo 2 1 0
Bit E/S Modo 3 1 1
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A Entrada Modo 1 0 1 0 0 1 1 1 1 4F
Puerto B Salida Modo 0 0 0 0 0 1 1 1 1 0F
16
Programa
17
LD A,4FH ; Palabra de control para el puerto A
OUT (CTRLA),A ; Escribe al registro de control A
LD A,0FH ;Palabra de control para el puerto B
OUT (CTRLB),A ; Escribe al registro de control B
READ: IN A,(PORTA) ; Lee los interruptores
BIT 7,A ; Checa el interruptor 7
JR NZ, LED ; Si esta apagado, enciende los LEDS
SPKER: LD A,0FFH ; Si el interruptor 7 esta encendido
OUT (PORTB),A ;Enciende la bocina y apaga los LEDS
CALL DELAY ; Espera
LD A,7FH ; Apaga la bocina
OUT (PORTB),A
CALL DELAY
JR SPKER ; Repite la salida de la bocina
LED OUT (PORTB),A ; Enciende los LEDS
JR READ ; Regresa a leer los interruptores
Interfaz PIO con LCD
18
24/11/2011
4
Configuración de Terminales
1. Ground
2. VCC (+3.3 to +5V)
3. Contrast adjustment (VO)
4. Register Select (RS). RS=0:
Command, RS=1: Data
5. Read/Write (R/W). R/W=0:
Write, R/W=1: Read
6. Clock (Enable). Falling edge
triggered

7. Bit 0 (Not used in 4-bit operation)
8. Bit 1 (Not used in 4-bit operation)
9. Bit 2 (Not used in 4-bit operation)
10. Bit 3 (Not used in 4-bit operation)
11. Bit 4
12. Bit 5
13. Bit 6
14. Bit 7
15. Backlight Anode (+)
16. Backlight Cathode (-)
19
Rutina de Inicialización
Encender
LCD
Esperar 1.5 ms
después de que
Vdd llega a 4.5V
Enviar
código de
INICIO
0011XXXX
BF no puede
probarse en este
punto
Repetir
código de
INICIO
Esperar por mas
de 4.1 ms
Repetir
código de
INICIO
El código de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y
prender el
display
Limpiar pantalla
Establecer modo
de Escritura
20
Comunicándose con LCD
 LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el código
ASCII a escribirse
 Se utilizan 3 señales de
control:
 Selección de Registro (RS)
 Escritura/Lectura (R/W)
 Habilitación de Reloj (CE)



Selección
de Registro
RS = 0,
setup
RS = 1,
dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envió de
datos
Envió de
código
ASCII
Deshabilita
Intercambio
CE = 0
21
1. RS=0: Instrucción, RS=1: Dato
2. R/W=0: Escritura, R/W=1: Lectura
3. CE = 1 habilita, CE = 0, deshabilitado
LCD HD44780
 Rutina de inicialización
 Escribir el código 0011XXXX
 Checar BF, cuando este en bajo enviar nuevamente el código
0011XXXX
 Checar BF, cuando este en bajo enviar nuevamente el código
0011XXXX
 Establecer el tipo de funcionalidad del LCD
 Apagar el cursor y la pantalla
 Limpiar la pantalla
 Establecer el modo de entrada
 Encender el cursor y pantalla

22
Function Set
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 1 DL N F X X
DL = 1, Los datos son enviados en 8 bits
= 0; Los datos son enviados en 4 bits, dos lecturas por cada carácter
N Establece el numero de líneas de la pantalla
F Establece el tamaño del carácter.
23
N F Numero de
Lineas
Tamaño del
Carácter
Duty
Factor
0 0 1 5×7 puntos 1/8
0 1 1 5×10 puntos 1/11
1 X 2 5×7 puntos 1/8
0 0 0 0 1 1 1 0 0 0 38H
Apagar Pantalla
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 D C B
D = 1, Pantalla Encendida
= 0; Pantalla Apagada, los datos permanecen en la RAM interna para
desplegarse en cuanto la pantalla se encienda
C =1, despliega el cursor, = 0, apaga el cursor
B =1, el cursos destella, = 0, el cursor permanece encendido todo el tiempo
24
RS R/
W
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 0 0 0
pantalla y cursor
apagados
0 0 0 0 0 0 1 1 1 1
Pantalla y cursor
encendido y
cursor destellando
24/11/2011
5
Comandos
RS R/
W
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0 0 1
Limpiar pantalla
0 0 0 0 0 0 0 0 1 X
Regresar el cursor a la primer
columna de la pantalla
0 0 0 0 0 0 0 1 1/D S
1/D=1 incrementa la posición del
cursor hacia la derecha
1/D = 0 decrementa la posición del
cursor hacia la izquierda
S = 1 mueve todo el display hacia la
derecha si I/D = 1 o hacia la
izquierda si I/D = 0.
25 26
SETUP: LD A,0FH ; Configurar el puerto A como SALIDA
OUT (CTRLA),A ; Escribe al registro de control A
LD A,0FH ; Configurar el puerto B como salida
OUT (CTRLB),A ; Escribe al registro de control B
LD A,00110000B ; código para establecer comunicación con LCD
LD B,A
CALL OUTPUT ; envía el código a LCD
CALL CMDOUT ; reenvía el código a LCD
CALL CMDOUT ; reenvía el código a LCD
LD A, 00111000B ; establece 8 bits, 2 líneas y 5X7 caracteres
CALL CMDOUT
LD A,00001000B ; apaga pantalla y cursor
CALL CMDOUT
LD A,00000001B ;limpia pantalla
CALL CMDOUT
LD A,00000110B ; modo de entrada, corre e incrementa cursor
CALL CMDOUT
LD A,00001100B ; enciende pantalla y cursor
CALL CMDOUT
RET
Checa la bandera (BF)
27
CHKDB7: LD A, 4FH
OUT (CNTRLA),A
LD A, 00000000B RS = 0
OUT (PORTB),A
LD A, 00000100B RS = 0, R/W = 1
OUT (PORTB),A
READ: LD A, 00000101B RS = 0, R/W = 1, CE = 1
OUT (PORTB),A
IN A,(PORTA)
RLCA
LD A, 00000000B
OUT (PORTB),A
JP C, READ
LD A, 0FH
OUT (CNTRLA),A
RET
Escritura de comando en la LCD
28
CMDOUT: LD B, A
CALL CHKDB7
OUTPUT: LD A, 00000000B ; RS = 0
OUT (PORTB),A
LD A, 00000000B ; R/W = 0
OUT (PORTB),A
LD A, 00000001B ; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
Escritura de DATOS en la LCD
29
DTAOUT: LD B, A
CALL CHKDB7
LD A, 00000010B ; RS = 1
OUT (PORTB),A
LD A, 00000010B ; R/W = 0
OUT (PORTB),A
LD A, 00000011B ; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
Programa para controlar LCD
PORTA EQU 80H
PORTB EQU 81H
CTRLA EQU 82H
CTRLB EQU 83H
STACK EQU 1EFEH
MESSAGE .DEFB 48H,45H,4CH,4CH,4FH,00
.ORG 1850H
START: LD SP, STACK
CALL SETUP
LD A,87H
CALL CMDOUT
LD HL, MESSAGE
30
24/11/2011
6
Programa para controlar LCD
NEXT: LD A,(HL)
CP 00
JP Z,END
CALL DTAOUT
INC HL
JP NEXT
END HALT
31
Modo de Operación y Señales de
Sincronización
32
 Las señales de sincronización (handshaking) son usadas
para indicar si los periféricos están listos para transferir
datos.
 El Z80 PIO tiene dos señales de sincronización asociadas
a cada puerto que son STROBE y READY. Estas señales
están asociadas a la señal de interrupción del dispositivo
 La señal de interrupción es usada para solicitar servicio
del Z80
 Cada puerto tienen flip-flops de habilitación de
interrupción.
Modo 1 y Señales de Sincronización
33
1. El periférico causa que STB se active para informar que
el PIO tiene dato en su registro de entrada
2. El flanco de subida de STB activa la señal de INT y la
señal RDY se inactiva para indicar que el registro esta
lleno
3. Suponga que Z80 esta en modo de interrupción 2.
Entonces el Z80 leerá del bus de datos la parte baja de
la dirección y la unirá a la parte alta que se encuentra
definida en el vector de interrupción I
4. Cuando la rutina de servicio lee el dato del puerto RDY
se activa en el flanco de subida de la señal RD indicando
que PIO esta listo para el siguiente dato
Modo 0 y Señales de Sincronización
34
1. Cuando el Z80 ejecuta la instrucción OUT, pone el byte
en el registro del PIO y activa la señal RDY para indicar
que hay un dato listo para ser transferido
2. La señal RDY permanece en alto hasta que el periférico
envía la señal STB . En el flanco de subida de STB activa
la señal INT indicando al Z80 que el periférico ha
recibido el dato y esta listo para la siguiente
transferencia
3. Cuando INT es reconocida transfiere la ejecución del
programa a la rutina de servicio
Palabra de Habilitación de Interrupción
35
 Para usar el PIO, primero debemos configurar los puertos
y habilitar los flip-flops de interrupción del puerto.
D7 D6 D5 D4 D3 D2 D1 D0
I/O X X X 0 0 1 1
Palabra de Habilitación de
Interrupción
Palabra de Habilitación
de Interrupción
Usado para el
Modo 3
= 1 Habilita el la
interrupción del
puerto
= 0 Deshabilita la
interrupción
Vector de Interrupción
36
 El vector de interrupción deberá ser especificado para
que cuando el Z80 reconozca la interrupción, el PIO
entregue la parte baja del vector.
 La definición de dicho vector se realiza de la siguiente
manera:
D7 D6 D5 D4 D3 D2 D1 D0
0
Vector de Interrupción
Identifica el Vector de
Interrupción
Bits definidos por el
usuario
24/11/2011
7
Ejemplo
37
 Configure al PIO para usar interrupciones
 Puerto A es un puerto de Entrada
 La dirección de la rutina de servicio para este puerto es 1896H
 Puerto B es un puerto de Salida
 La dirección de la rutina de servicio para este puerto es 1898H
 Asuma que la lógica de selección es la misma del ejemplo
anterior por lo cual
A7 A6 A5 A4 A3 A2
A1
C/D
A0
B/A
1 0 0 0 0 0 0 0 80 H PORTA Registro de Dato A
0 1 81H PORTB Registro de Dato B
1 0 82 H CTRLA Registro de Control A
1 1 83 H CTRLB Registro de Control B
Ejemplo
38
1. Configurar el puerto A como puerto de Entrada



2. Habilitar los flip-flops de interrupción del puerto



3. Configurar la parte baja del vector de interrupciones
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A Entrada Modo 1 0 1 0 0 1 1 1 1 4FH
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A 1 0 0 0 0 0 1 1 83H
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A 1 0 0 1 0 1 1 0 96H
Ejemplo
39
1. Configurar el puerto B como puerto de Salida



2. Habilitar los flip-flops de interrupción del puerto



3. Configurar la parte baja del vector de interrupciones
D7 D6 D5 D4 D3 D2 D1 D0
Puerto B Entrada Modo 0 0 0 0 0 1 1 1 1 0FH
D7 D6 D5 D4 D3 D2 D1 D0
Puerto B 1 0 0 0 0 0 1 1 83H
D7 D6 D5 D4 D3 D2 D1 D0
Puerto B 1 0 0 1 1 0 0 0 98H
40
LD A,4FH ; Palabra de control para Modo 1
OUT (CTRLA),A ; Inicializa Puerto A como puerto de entrada
LD A,83H ; Habilita los flip-flops de interrupción
OUT (CTRLA),A ; para el puerto A
LD A,96H ; Define la parte baja del vector de interrupción
OUT (CTRLA),A ; para el puerto A
LD A,0FH ; Palabra de control para Modo 1
OUT (CTRLB),A ; Inicializa Puerto B como puerto de salida
LD A,83H ; Habilita los flip-flops de interrupción
OUT (CTRLB),A ; para el puerto B
LD A,98H ; Define la parte baja del vector de interrupción
OUT (CTRLB),A ; para el puerto B
LD SP, STACK ; Inicializa el stack
LD A,18H ; inicializa la parte alta del vector de interrupción
LD I,A
IM 2 ; Define el modo de interrupción 2
EI ; Habilita las interrupciones
Transferencia Bidireccional (Modo 2)
41
 En el modo 2, el puerto A es usado como puerto de
entrada y salida.
 Las cuatro señales de sincronización son usadas para el
puerto A
 ASTB y ARDY son usadas para realizar la sincronización
para la transferencia de datos de salida
 BSTB y BRDY son usadas para transferencia de datos de
entrada
 Por lo tanto, el puerto B no puede usar esta señales y
deberá operar sin ellas. Es decir, será puerto de entrada o
salida sin sincronización

Transferencia Bidireccional (Modo 2)
Modo de Salida Modo de Entrada
42
1. El Z80 escribe un byte
en el puerto A y ARDY
se pone en alto
2. Cuando el periférico lee
el dato, la señal ASTB se
activa para indicar que
esta listo para recibir un
nuevo dato y la
interrupción es generada
1. El periférico pone un dato
en el bus y activa BSTB y
la interrupción es
generada para indicar que
el puerto A tiene un dato
para ser leído
2. Cuando el Z80 lee el dato,
BRDY se activa para
indicar que al periférico
que el Z80 esta listo para
el siguiente dato
24/11/2011
8
Modo 3: Modo Bit
43
 En el modo 3 cada bit del puerto A y B puede ser
individualmente asignado como bit de entrada o salida.
 La configuración de los bits como entrada o salida se
realiza por medio de la palabra de control que se debe
escribir en el registro de control del puerto
 Las señales de sincronización para el puerto no son
usadas por lo que READY es puesta a cero y STROBE es
deshabilitada
 Los bits so leídos o escritos usando las funciones de
escritura y lectura de puertos normales.
Modo 3: Modo Bit
44
 Bits pueden ser enmascarados por medio de una palabra
de enmascaramiento guardada en el registro de control
del puerto
 Se puede generar interrupciones si una combinación
lógica predefinida ocurre en las líneas de entrada
 La combinación lógica puede emplear las funciones lógicas
AND/OR
 El nivel lógico puede ser alto o bajo
 Para configurar el PIO en modo 3 con capacidades de
interrupción entonces se requiere definir
 Modo de control, Control de E/S, Control de Interrupción y
Palabra de enmascaramiento
Modo 3: Modo Bit
45
 Palabra de Control de Modo 3





 Control de Entrada y Salida para bits individuales
D7 D6 D5 D4 D3 D2 D1 D0
Bidireccional Modo 3 1 1 0 0 1 1 1 1 CFH
D7 D6 D5 D4 D3 D2 D1 D0
0 = Salida, 1= Entrada
Modo 3
Modo 3: Modo Bit
46
 Palabra de Control de Interrupción







 Control de Entrada y Salida para bits individuales
D7 D6 D5 D4 D3 D2 D1 D0
Los bits monitoreados son puestos a 0
D7 D6 D5 D4 D3 D2 D1 D0
I/O X X X 0 1 1 1
0 = No hay palabra de
enmascaramiento
1 = Sigue la palabra de
enmascaramiento
0 = OR
1 = AND
= 1 Habilita el la
interrupción del
puerto
= 0 Deshabilita la
interrupción
0 = Activa en bajo
1 = Activa en alto
Ejemplo
47
 El puerto A es configurado en modo 3 para manejar las
luces de un semáforo y monitorear cualquier conflicto
entre la luz roja y verde
 Estas luces nunca deben estar encendidas al mismo
tiempo.
 A0 – A4 son configuradas como líneas de salida para
manejar las luces del semáforo y las señales de caminar y
no caminar
 A6 – A7 son configuradas como líneas de entrada para
monitorear la luz verde y roja.
Ejemplo
48
1. Configurar el puerto A en modo 3



2. Palabra del Registro de E/S



D7 D6 D5 D4 D3 D2 D1 D0
Puerto A Modo 3 1 1 0 0 1 1 1 1 CFH
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A 1 1 0 0 0 0 0 0 C0H
Entrada
Salida
No Importa
24/11/2011
9
Ejemplo
49
3. Palabra de interrupción del puerto





4. Define la parte baja del vector de interrupciones
5. Control de Entrada y Salida para bits individuales
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A 1 1 1 1 0 1 1 1 F7H
D7 D6 D5 D4 D3 D2 D1 D0
Puerto A 0 0 1 1 1 1 1 1 3FH
Activa la
Interrupción
Lógica AND
Activa en Alto
Sigue mascara
Bits monitoreados
50
LD A,CFH ; Palabra de control para Modo 3
OUT (CTRLA),A ; Inicializa Puerto A en modo bit
LD A,C0H ; Palabra de control para E/S
OUT (CTRLA),A ; para el puerto A
LD A,18H ; Define la parte alta del vector de interrupción
LD I,A ; para el puerto A
LD A,72H ; Define la parte baja del vector de interrupción
OUT (CTRLA),A ; para el puerto A
LD A,F7H ; Habilita los flip-flops de interrupción
OUT (CTRLA),A ; para el puerto A
LD A,3FH ; Monitorea los bits D7 y D6
OUT (CTRLA),A ; del puerto A
LD SP, STACK ; Inicializa el stack
IM 2 ; Define el modo de interrupción 2
EI ; Habilita las interrupciones
Interfaz con un Teclado Matricial (Software)
51
 La técnica por software es
llamada Escaneo del
Teclado
 Se envían ceros por el
puerto de salida y la tecla
que ha sido presionada se
encuentra en el puerto de
entrada
 Si la tecla fue presionada el
bit correspondiente estará
en cero
 De otra manera será un
uno
Interfaz con un Teclado Matricial (Software)
52
 De esa forma se
determina la columna
donde se encuentra la
tecla presionada
 Después, se envía cero
por renglón hasta
encontrar la tecla
presionada
Envía cero al puerto
Contador C = 4
Lee el puerto
Reg  Puerto B
Algun bit
=0?
Envia cero por renglon
Puerto =
0?
Contador
= 0?
Decrementa C
SI
SI
SI
Interfaz con un Teclado Matricial (Hardware)
53
 Codificador de teclado
MM74C923
 Este codificador revisa
continuamente si se ha
presionado alguna tecla
 Elimina las saltos en la
señal
 Proporciona un código
para cada tecla
 Genera un interrupción
cuando alguna tecla ha
sido presionada
Interfaz con un Teclado Matricial (Hardware)
54
24/11/2011
10
Display Multiplexado
55

Transferencia Bidireccional entre 2 MPUs
56
25/11/2011
1
Contador/Timer
Unidad 6, 3a parte
1
Z80 CTC (Circuito Contador/Timer)
 El Z80 CTC tiene 4 canales
contador/timer que pueden
ser programados
independientemente para
funcionar como contador o
timer.
 Un numero de 8-bits puede
ser cargado al contador y es
decrementado en cada pulso
de reloj.
 Cuando llega la cuenta a
cero, un pulso es generado y
el contador recarga el
numero de 8-bits
2
Señales de Control
 Las señales de control nos permiten realizar las siguientes
operaciones:
 Lectura: el contenido del registro del contador del canal
seleccionado es obtenido
 Escritura: la palabra de control o el numero de la cuenta es
introducido al CTC
 Reconocimiento de la interrupción: el vector de interrupción
del canal correspondiente es puesto en el bus de datos
Operación IORQ RD M1
Lectura 0 0 1
Escritura 0 1 1
Reconocimiento de Interrupción 0 1 0
3
Senales de Seleccion del Canal
CE CS1 CS0 Canal Seleccionado
0 0 0 Canal 0
0 0 1 Canal 1
0 1 0 Canal 2
0 1 1 Canal 3
1 X X Chip no habilitado
4
Programando el CTC
5
 Cada canal consiste de:
 Lógica de control
 Registro de constante de tiempo (contador)
 Down-counter

 Para programar el CTC, la palabra de control debe ser
escrita en el canal y debe ser seguida por el numero hasta
el cual se desea contar.

 En el modo de timer, se incluye el parámetro PRESCALE
que divide la frecuencia del reloj por 16 o 256
Palabra de Control
6
D7 D6 D5 D4 D3 D2 D1 D0
Interrupción
0= Deshabilitado
1= Habilitado
Modo
0= Timer
1= Contador
Prescaler
0= 16
1= 256
Clock Trigger
0= Flanco de bajada
1= Flanco de subida
Tipo de palabra
0= Vector
1= Control
Operación
0= Continua
1= Software Reset
Constante de tiempo
0= Sin Constante
1= Constante Sigue
Disparo del timer
0= Automático
1= CLK inicia el timer
25/11/2011
2
Ejemplo
7
 Escribe las instrucciones para programar al Canal 0 del
CTC en el modo timer.
 El canal 0 debe producir un pulso cada 20ms.
 La frecuencia de reloj del sistema es 1 MHz
 El retardo total entre dos salidas consecutivas es:


 Donde:
 T
CLK
es el periodo de reloj del sistema
 PS Prescaler
 N
10
es la cuenta en decimal

10
N PS T T
CLK d
  
Ejemplo
8
 Si fijamos el prescaler a 256, entonces la cuenta necesaria
será:




 La palabra de control es

10
256 1 20 N s ms    
E
s
ms
N 4 78 124 . 78
256 1
20
10
  



D7 D6 D5 D4 D3 D2 D1 D0
0 0 1 1 0 1 1 1
Ejemplo
9
CNTRL EQU 37H ; Define la palabra de control
COUNT EQU 4EH ;Cuenta
PORT0 EQU 24H ;Dirección del puerto del canal 0
SETUP: LD A,CNTRL ; Palabra de control del Canal 0
OUT (PORT0),A ; Envia la palabra de control al canal 0
LD A, COUNT
OUT (PORT0),A ;Carga la constante de tiempo en el canal 0
Usando interrupciones
10
 El CTC puede ser usado para causar interrupciones en el Z80

 Para usar el proceso de interrupción, el Z80 deberá ser
configurado para el modo de interrupción 2.

 El CTC debe ser programado para enviar la parte baja del
vector de interrupción.

 Para programar el CTC debemos
 Enviar la palabra de control apropiada al canal que será usado
 Enviar la constante de tiempo/cuenta
 Enviar la parte baja del vector de interrupción
Definición del vector de Interrupción
11
D7 D6 D5 D4 D3 D2 D1 D0
V7 V6 V5 V4 V3 CH CH 0
Definidas por el
usuario
Identifica el
Vector de
Interrupción
Especifica el Canal
0 0 Canal 0
0 1 Canal 1
1 0 Canal 2
1 1 Canal 3

Interfaz LCD HD44780 con el Z80
Interfaz con uso de Busy Flag
Interfaz PIO con LCD
2
Interfaz 8255 conLCD
Configuración de Terminales
1. Ground
2. VCC (+3.3 to +5V)
3. Contrast adjustment (VO)
4. Register Select (RS). RS=0:
Command, RS=1: Data
5. Read/Write (R/W). R/W=0:
Write, R/W=1: Read
6. Clock (Enable). Falling edge
triggered

7. Bit 0 (Not used in 4-bit operation)
8. Bit 1 (Not used in 4-bit operation)
9. Bit 2 (Not used in 4-bit operation)
10.Bit 3 (Not used in 4-bit operation)
11.Bit 4
12.Bit 5
13.Bit 6
14.Bit 7
15.Backlight Anode (+)
16.Backlight Cathode (-)
4
Rutina de Inicialización
Encender
LCD
Esperar 1.5 ms
después de que
Vdd llega a 4.5V
Enviar
código de
INICIO
0011XXXX
BF no puede
probarse en este
punto
Repetir
código de
INICIO
Esperar por mas
de 4.1 ms
Repetir
código de
INICIO
El código de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
Establecer modo
de Escritura
5
Comunicándose con LCD
• LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el código
ASCII a escribirse
• Se utilizan 3 señales de
control:
– Selección de Registro
(RS)
– Escritura/Lectura (R/W)
– Habilitación de Reloj (CE)



Selección
de Registro
RS = 0,
setup
RS = 1, dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envió de
datos
Envió de
código ASCII
Deshabilita
Intercambio
CE = 0
6
1. RS=0: Instrucción, RS=1: Dato
2. R/W=0: Escritura, R/W=1: Lectura
3. CE = 1 habilita, CE = 0, deshabilitado
LCD HD44780
• Rutina de inicialización
– Escribir el código 0011XXXX
– Checar BF, cuando este en bajo enviar nuevamente el
código 0011XXXX
– Checar BF, cuando este en bajo enviar nuevamente el
código 0011XXXX
– Establecer el tipo de funcionalidad del LCD
– Apagar el cursor y la pantalla
– Limpiar la pantalla
– Establecer el modo de entrada
– Encender el cursor y pantalla

7
Function Set
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 1 DL N F X X
DL = 1, Los datos son enviados en 8 bits
= 0; Los datos son enviados en 4 bits, dos lecturas por cada carácter
N Establece el numero de líneas de la pantalla
F Establece el tamaño del carácter.
8
N F Numero de
Lineas
Tamaño del
Carácter
Duty
Factor
0 0 1 5×7 puntos 1/8
0 1 1 5×10 puntos 1/11
1 X 2 5×7 puntos 1/8
0 0 0 0 1 1 1 0 0 0 38H
Apagar Pantalla
RS R/W D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 D C B
D = 1, Pantalla Encendida
= 0; Pantalla Apagada, los datos permanecen en la RAM interna para
desplegarse en cuanto la pantalla se encienda
C =1, despliega el cursor, = 0, apaga el cursor
B =1, el cursos destella, = 0, el cursor permanece encendido todo el tiempo
9
RS R/
W
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 1 0 0 0
pantalla y cursor
apagados
0 0 0 0 0 0 1 1 1 1
Pantalla y cursor
encendido y
cursor destellando
Comandos
RS R/
W
D7 D6 D5 D4 D3 D2 D1 D0
0 0 0 0 0 0 0 0 0 1
Limpiar pantalla
0 0 0 0 0 0 0 0 1 X
Regresar el cursor a la primer
columna de la pantalla
0 0 0 0 0 0 0 1 1/D S
1/D=1 incrementa la posición del
cursor hacia la derecha
1/D = 0 decrementa la posición del
cursor hacia la izquierda
S = 1 mueve todo el display hacia la
derecha si I/D = 1 o hacia la
izquierda si I/D = 0.
10
11
SETUP: LD A,0FH ; Configurar el puerto A como SALIDA
OUT (CTRLA),A ; Escribe al registro de control A
LD A,0FH ; Configurar el puerto B como salida
OUT (CTRLB),A ; Escribe al registro de control B
LD A,00110000B ; código para establecer comunicación con LCD
LD B,A
CALL OUTPUT ; envía el código a LCD
CALL CMDOUT ; reenvía el código a LCD
CALL CMDOUT ; reenvía el código a LCD
LD A, 00111000B ; establece 8 bits, 2 líneas y 5X7 caracteres
CALL CMDOUT
LD A,00001000B ; apaga pantalla y cursor
CALL CMDOUT
LD A,00000001B ;limpia pantalla
CALL CMDOUT
LD A,00000110B ; modo de entrada, corre e incrementa cursor
CALL CMDOUT
LD A,00001100B ; enciende pantalla y cursor
CALL CMDOUT
RET
Checa la bandera (BF)
12
CHKDB7: LD A, 4FH
OUT (CNTRLA),A
LD A, 00000000B RS = 0
OUT (PORTB),A
LD A, 00000100B RS = 0, R/W = 1
OUT (PORTB),A
READ: LD A, 00000101B RS = 0, R/W = 1, CE = 1
OUT (PORTB),A
IN A,(PORTA)
RLCA
LD A, 00000000B
OUT (PORTB),A
JP C, READ
LD A, 0FH
OUT (CNTRLA),A
RET
Escritura de comando en la LCD
13
CMDOUT: LD B, A
CALL CHKDB7
OUTPUT: LD A, 00000000B ; RS = 0
OUT (PORTB),A
LD A, 00000000B ; R/W = 0
OUT (PORTB),A
LD A, 00000001B ; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
Escritura de DATOS en la LCD
14
DTAOUT: LD B, A
CALL CHKDB7
LD A, 00000010B ; RS = 1
OUT (PORTB),A
LD A, 00000010B ; R/W = 0
OUT (PORTB),A
LD A, 00000011B ; EN = 1
OUT (PORTB),A
LD A,B
OUT (PORTA),A
LD A, 00000000B
OUT (PORTB),A
RET
Programa para controlar LCD
PORTA EQU 80H
PORTB EQU 81H
CTRLA EQU 82H
CTRLB EQU 83H
STACK EQU 1EFEH
MESSAGE .DEFB 48H,45H,4CH,4CH,4FH,00
.ORG 1850H
START: LD SP, STACK
CALL SETUP
LD A,87H
CALL CMDOUT
LD HL, MESSAGE
15
Programa para controlar LCD
NEXT: LD A,(HL)
CP 00
JP Z,END
CALL DTAOUT
INC HL
JP NEXT
END HALT
16
INTERFAZ CON USO DE RETARDOS
Microprocesadores 2011
Subrutina Retardo
DELAY:
; Esta subrutina realiza un retardo de 10 ms. El retardo es repetido el
; numero de veces indicado en B.
; Entrada: Numero de veces a repetir el retardo especificado en B
; Salida: Ninguna
; Registros Modificados: B
PUSH DE 11 ; guarda el contenido de DE y AF
PUSH AF 11
WAIT: LD DE, COUNT 10 ; Carga DE =01F2 para obtener el retardo
LOOP: DEC DE 6 ;de 10ms
LD A,D 9 ; Coloca D en A para checar banderas
OR E 4 ; Prende bandera del cero si D=E=0
JP NZ,LOOP 10 ; Repite hasta si DE >0
DEC B 4 ; Decrementa B
JR NZ,WAIT 7 ; Si el retardo es suficiente termina
POP AF 10 ; Restablece el valor de DE y AF
POP DE 10
RET 10
19
Retardo
• Total de estados-t
• L
T
= 40
• T
C
= 0.5s
• T
total
= 10ms
• L
0
= 68
2 1 3 . 498
40
68
40 10 5 . 0
10 10
6
3
0
10
F
L
L
L T
T
N
T T C
total
  
 

 




21
SETUP: LD A,0FH ; Configurar el puerto A como SALIDA
OUT (CTRLA),A ; Escribe al registro de control A
LD A,0FH ; Configurar el puerto B como salida
OUT (CTRLB),A ; Escribe al registro de control B
LD B,10 ; Espera por 0.1 segundos
LOOP: CALL DELAY ; Retardo de 10 ms
DJNZ LOOP
LD A,00110000B ; código para establecer comunicación con LCD
CALL CMDOUT ; envía el código a LCD
CALL DELAY ; espera por 10ms
CALL CMDOUT ; reenvía el código a LCD
CALL DELAY ;espera por 10ms
CALL CMDOUT ; reenvía el código a LCD
CALL DELAY ;espera por 10ms
22
LD A, 00111000B ; establece 8 bits, 2 líneas y 5X7 caracteres
CALL CMDOUT
CALL DELAY ;espera por 10ms
LD A,00001000B ; apaga pantalla y cursor
CALL CMDOUT
CALL DELAY ;espera por 10ms
LD A,00000001B ;limpia pantalla
CALL CMDOUT
CALL DELAY ;espera por 10ms
LD A,00000110B ; modo de entrada, corre e incrementa cursor
CALL CMDOUT
CALL DELAY ;espera por 10ms
LD A,00001100B ; enciende pantalla y cursor
CALL CMDOUT
CALL DELAY ;espera por 10ms
RET
Escritura de comando en la LCD
23
CMDOUT: LD B, A
LD A, 00000000B ; RS = 0 comando
OUT (PORTB),A
LD A, 00000000B ; R/W = 0 escribir
OUT (PORTB),A
LD A, 00000001B ; EN = 1 habilitar LCD
OUT (PORTB),A
LD A,B ; Enviar comando a escribir
OUT (PORTA),A
LD A, 00000000B ; Deshabilitar LCD
OUT (PORTB),A
RET
Escritura de DATOS en la LCD
24
DTAOUT: LD B, A
LD A, 00000010B ; RS = 1 Datos
OUT (PORTB),A
LD A, 00000010B ; R/W = 0 Escribir
OUT (PORTB),A
LD A, 00000011B ; EN = 1 Habilitar LCD
OUT (PORTB),A
LD A,B ; Enviar dato
OUT (PORTA),A
LD A, 00000000B ; Deshabilitar LCD
OUT (PORTB),A
RET
Programa para controlar LCD
PORTA EQU 80H
PORTB EQU 81H
CTRLA EQU 82H
CTRLB EQU 83H
STACK EQU 1EFEH
MESSAGE .DEFB 48H,45H,4CH,4CH,4FH,00
.ORG 1850H
START: LD SP, STACK ; Definir pila
CALL SETUP ; Inicializar LCD
LD A,87H ; Iniciar escritura en la posición 8
CALL CMDOUT
CALL DELAY
LD HL, MESSAGE
25
Programa para controlar LCD
NEXT: LD A,(HL) ; Tomar el siguiente carácter
CP 00 ; Verificar si es el fin de la cadena
JP Z,END
CALL DTAOUT ; Enviar carácter a la LCD
CALL DELAY ; Esperar 10 ms
INC HL ; Apuntar al siguiente carcter
JP NEXT
END HALT
26

Sign up to vote on this title
UsefulNot useful