0% encontró este documento útil (0 votos)
144 vistas213 páginas

Tutorial

Este documento presenta conceptos generales sobre microprocesadores. Explica que un microprocesador es un dispositivo programable que puede ejecutar instrucciones expresadas en lenguaje de máquina y aceptar datos binarios para procesarlos según las instrucciones. También describe los componentes básicos de una computadora como la unidad de procesamiento, memoria y dispositivos de entrada y salida.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
144 vistas213 páginas

Tutorial

Este documento presenta conceptos generales sobre microprocesadores. Explica que un microprocesador es un dispositivo programable que puede ejecutar instrucciones expresadas en lenguaje de máquina y aceptar datos binarios para procesarlos según las instrucciones. También describe los componentes básicos de una computadora como la unidad de procesamiento, memoria y dispositivos de entrada y salida.
Derechos de autor
© Attribution Non-Commercial (BY-NC)
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

UNIDAD I

CONCEPTOS GENERALES
Conceptos Generales
Microprocesadores Otoo 2011
1
Fall 2011
Contenido
Introduccin
Arquitectura generalizada de una computadora
Componentes de una computadora
Conjunto de Instrucciones y lenguaje de maquina
2
Introduccin
El microprocesador es un dispositivo programable
con capacidades de decisin y computo.
3
Introduccin
` Cada microprocesador puede ejecutar un conjunto de
instrucciones fijas expresadas en forma de patrones
binarios llamadas lenguaje de maquina.
` Cada patrn binario asociado a una instruccin es
tambin asociado a un mnemnico.
` El conjunto de mnemnico forma el ensamblador del
microprocesador.
Lenguaje de
Maquina
00110111
Nmemonicos
LD SP,
1895H
4
Introduccin
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
Introduccin
Los componentes fsicos 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
Introduccin
7
Unidad
Aritmtica Lgica
(ALU)
Unidad de
Control
Unidad de Memoria
Entrada Salida
Microprocesador
Microprocesador
Memoria I/O
Dispositivos Perifricos
Convertidores A/D
Timer
Serial I/O
Microcontrolador
Organizacin de un Sistema basado
en Microprocesador
8
` ALU: realiza
operaciones
aritmticas (+,-, etc.)
y lgicas (and, or,
etc)
` Registros: almacenan
datos y direcciones
temporalmente
` Unidad de Control:
enva seales de
control y
temporizacin 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.
Instruccin 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 diseado para ejecutar un
determinado numero de instrucciones
` La instruccin esta compuesta por las seales de control
que le indicaran al microprocesador que accin
ejecutar
` El numero de instrucciones para cada procesador varia
de acuerdo al diseo 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
Cdigo ASCII, (American Standard Code for Information Interchange)
x Cdigo de 7-bits que representa letras, nmeros decimales,
smbolos y comandos de maquina.
Cdigo BCD, (Binary-Code Decimal)
x Representacin binaria de los 10 dgitos 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
Cdigo ASCII
30H 39H 0 9
41H 5AH A Z
61H 7AH a z
00H 0FH Comandos
de Maquina
Ejemplo:
07H Campana
09H Tabulador
Cdigo 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
Nmeros 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
Mnemnicos
LD A,32H
ADD B,C
Codigo
Fuente
Traduce los
mnemnicos a
lenguaje de
maquina
Compilador
Lenguaje de Maquina
Listo para ejecutarse
en el procesador
Cdigo
Objeto
16
UNIDAD 2
Unidad de Microprocesador (MPU)
Microprocesadores Otoo 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 lgico programable con un determinado
conjunto de instrucciones.
El proceso de ejecucin de una instruccin consiste
en adquirir, decodifica y ejecutar la tarea
especifica
3
MPU
El proceso de
comunicacin y
operaciones
relacionadas entre el
MPU y dispositivos
externos se clasifica en
dos categoras
Operaciones iniciadas
por el MPU
Operaciones iniciadas
por los perifricos
Adquirir
Decodificar Ejecutar
4
Operaciones del MPU
MPU
Lectura de
Memoria
Escritura de
Memoria
Lectura de I/O
Escritura de I/O
Perifericos
Reset
Interrupcin
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 direccin.
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
Direccin
6
Operaciones del MPU
El bus es un conjunto de seales que se activan al
mismo tiempo para proveer informacin
Los pasos para ejecutar las operaciones del MPU
son:
Identificar la locacin de memoria o la direccin del
perifrico
Proveer las seales de sincronizacin y temporizacin
Transferir los datos
7
Operaciones del MPU
Adquirir
Decodificar
Ejecutar
Identifica direccin de
memoria o perifrico
Provee las seales de
sincronizacin
Transfiere datos
Direccin
Datos
Seales de
Control
8
Buses
Microprocesadores
tales como Z80 y
8085 tienen 16
lneas en su bus de
direccin.
Por lo tanto son
capaces de
direccionar 2
16
= 64K
Unidad de
Microprocesador
Bus de
Direccin
Seales de
Control
Bus de
Datos
Reconocimiento de
Solicitud
A
m
A
0
D
n
D
0
9
Buses
Bus de datos
El tamao del bus de datos determina el tamao del
numero binario que puede ser transferido.
El tamao del bus de datos afecta el desempeo y rapidez
del microprocesador
Bus de Control
El MPU genera una seal 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 operacin del
MPU puede ser interrumpida
Reset
Empieza nuevamente desde el principio
Interrupcin
Para tu proceso actual y realiza algo mas critico
Espera
Cuando la velocidad de respuesta de la memoria es muy lenta,
retrasa la operacin del MPU
Solicitud del Bus
Cuando las operaciones del MPU son lentas comparadas con los
perifricos, entonces los perifricos 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 Lgica
Aritmtica
(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
Esttica
Dinmica
Secundaria
Acceso
Aleatorio
Discos
Floppy
Duro
CD-ROM Acceso Serial
Cintas
Magneticas
13
Memoria Primaria
Memoria de Lectura y Escritura comnmente
conocida como RAM (Random Access Memory)
La memoria RAM es voltil, lo que significa que
cuando la alimentacin se apaga, pierde toda la
informacin
Existen dos tipos de memoria RAM
Memoria Esttica
Memoria Dinmica
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
dinmica
La memoria Cache incluida en los microprocesadores es
SRAM
Memoria
Esttica
(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 circuitera
extra, aumentando el costo del sistema.
Para memorias pequeas de menos de 8K es mas
apropiada SRAM.
Memoria
Dinmica
(DRAM)
Read-Only Memory
ROM es una memoria no voltil, es decir, retiene la
informacin aun si la alimentacin 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 informacin es almacenada
mediante un proceso de enmascaramiento y
metalizacin. Este es un proceso caro, pero
econmico para grandes cantidades de produccin.
PROM (Programable ROM). Esta memoria esta
formada por una matriz de polisilicio y sus lneas
actan 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 informacin 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 exponindola a luz
ultravioleta a travs de su ventana de cuarzo
Debido a la facilidad de programacin 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 informacin puede ser alterada usando seales elctricas
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 informacin
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 bsico de almacenamiento conocido
como flip-flop
Para almacenar un nuevo valor en el flip-flop
requerimos de una dato y una seal de habilitacin.
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 ledo 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 nmero 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
Lneas 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
Lneas 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
Lneas de I/O
CS WR
A
2
A
1
A
0
RD
A
3
Cuando existen lneas de direccin adicional se puede utilizar
la seal de seleccin del chip. Esta seal habilita a uno de los
dos chip y se obtiene la informacin del registro deseado
27
Requerimientos de un chip de Memoria
Se requiere de
Lneas de direccin para identificar el registro de
memoria
Una seal (CS) para habilitar al chip de memoria
Seales de control para lectura y escritura
El nmero de lneas de direccin requeridas es
determinado por el nmero de registros en la
memoria
2
n
registros requieren n lneas de direccin.
28
Requerimientos de un chip de Memoria
Si existen lneas de direccin adicionales, se usan para
la seal CS
La seal de control RD habilita el buffer de salida, y el
dato del registro seleccionado esta disponible a la
salida
Similarmente, la seal de control WR habilita el buffer
de entrada y la informacin en las lneas de entrada
puede ser escrita en el registro seleccionado
29
El MPU usa 8 lneas de direccin 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 seales 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 direccin del
dispositivo o nmero de puerto de I/O
Para conectar dispositivos de I/O se deben resolver
dos problemas
Como asignarles una direccin
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 travs de
un dispositivo de interfaz tri-estado
De esta manera, los dispositivos estarn 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 direccin en el bus
El MPU enva una seal de control para habilitar los
dispositivos de I/O
Se transfieren los datos va 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 Lgica
Aritmtica
(ALU)
Banderas
Registros
Apuntadores a
Memoria
Registros
Bus de Direccin
Seales 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 Direccin
Bus de Datos
A
15
A
0
D
7
D
0
MEMRD
MEMWR
IOWR
IORD
UNIDAD 3
ARQUITECTURA DEL Z80
Microprocesadores
Otoo 2011
1
Contenido
2
Arquitectura interna del Z-80
Interface
Ciclos de mquina y temporizacin del bus de
comunicacin.
Conjunto de Instrucciones
Arquitectura del Z80
3
El microprocesador Z80 fue fabricado por ZILOG en
1976, fue diseado para ser compatible con INTEL
8080
El Z80 es un microprocesador de 8 bits de propsito
general con 16 lneas de direccin.
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 seales de interfaz del microprocesador se
clasifican en 6 grupos
Interfaz
Bus de direccin
Bus de datos
Seales de control
Solicitud Externa
Reconocimiento de Solicitud y
seales especiales
Seales de potencia y
frecuencia
Modelo de Hardware del Z80
5
Bus de direccin
Tiene 16 lneas 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 lneas bidireccionales
Usado para transferencia de datos desde el MPU
hacia la memoria o dispositivos I/O
Seales de Control y Estado
Machine Cycle One (M1)
Indica cuando un opcode ha
sido adquirido
Memory Request (MREQ)
Indica cuando el bus tiene una
direccin de memoria valida
I/O Request (IORQ)
Indica cuando la parte baja
del bus (A7 A0) tiene una
direccin 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
Seales de Estado Seales de Control
6
Solicitud Externa
Reset
Cuando esta seal se activa, el Program Counter (PC),
Interrupt register (I) y el memory refresh register (R) son
puesto a cero
El bus de direccin y datos se encuentra en el estado
de alta impedancia durante el reset.
Todas las seales de control se inactivan
La seal 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 seal de interrupcin es generada por un dispositivo de
I/O
Cuando el microprocesador acepta esta solicitud, activa la
seal IORQ para indicar que la solicitud ha sido reconocida
Esta interrupcin es enmascarable, esto significa que puede
ser desactivada por software
Nonmaskarable Interrupt
Esta interrupcin no puede ser desactivada por software
Se utiliza para implementar seales de procedimientos de
emergencia
8
Solicitud Externa
Bus Request
Un dispositivo de I/O puede hacer solicitud del bus de
datos, direccin y control activando esta seal
El dispositivo externo puede usar el bus y cuando ha
terminado su operacin regresa el control al
microprocesador
Wait
Esta seal es usada por la memoria y los dispositivos de
I/O para extender las operaciones del Z80
Esta seal 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 direccin en
el bus de direcciones es valida
9
Reconocimiento de Solicitud y Seales
Especiales
Solamente las seales de Bus Request e Interrupt
requieren reconocimiento.
La Interrupcin es reconocida por medio de las
seales IORQ y Machine cycle one (M1)
Bus request es reconocido por Bus Acknowledge
(BUSAK)
BUSAK indica que el bus de datos, direcciones, y las
seales de control han entrado en un estado de
alta impedancia. Por lo tanto pueden ser usadas
por el dispositivo solicitante.
10
Seales especiales
HALT, indica que el MPU ha ejecutado una
instruccin para detener su operacin.
Refresh, indica que el bus de direcciones A
7
-A
0
tiene una direccin de memoria actualizada.
Esta seal se usa en conjuncin con Memory Request
para refrescar el contenido de una localidad de
memoria
EL Z80 usa un reloj de una sola fase y su
alimentacin es de 5V
11
Estructura Interna del Z80
Registros de propsito general
Acumulador
Banderas
Conjunto de Registros Alternativos
Registros Apuntadores a Memoria
Registros ndice
Apuntador a la Pila (Stack)
Contador del Programa
Registros de Propsito Especifico
12
Datapath Simplificado
13
Registros
Registros de Propsito General
El Z80 tiene 6 registros de propsito general llamados
B,C, D, E, H, L
Estos registros son de 8 bits y son usados para
almacenar datos durante la ejecucin 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 matemticas y lgicas.
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 despus 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 estn 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 direccin.
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 seccin de memoria llamada stack
El stack es una rea de memoria localizada en la
RAM, el principio del stack es definido por la
direccin de memoria almacenada en el apuntador.
El stack se utiliza para pasar parmetros 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 ejecucin de instrucciones
La funcin del PC es apunta a la direccin de
memoria donde el prximo byte ser adquirido
El microprocesador adquiere un byte de memoria e
incrementa el PC (PC = PC + 1) para que apunte a
la siguiente instruccin.
21
Registros de Propsito Especifico
El Z80 incluye dos registros de propsito especifico
que normalmente estn ausentes en otros
microprocesadores
Estos registro son
Vector de Interrupcin
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 Interrupcin (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 diseado para
ejecutar 158 instrucciones diferentes
Cada instruccin tiene dos partes
Operational Code (OpCode)
Es la identificacin de la instruccin
Operandos
Es el dato sobre el cual se va a realizar el comando
Puede ser un byte o el contenido de un registro
Una instruccin puede contener uno o mas bytes
25
Ciclos de Maquina
Para entender las operaciones que realiza el MPU
debemos definir tres conceptos bsicos
Ciclos de Instruccin
Es el tiempo requerido para la ejecucin de una instruccin
En el Z80, los ciclos de instruccin van de 1 a 6 ciclos de
mquina
Ciclos de Maquina
Es el tiempo requerido para realizar una operacin 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 comunicacin
Las funciones de comunicacin del MPU se clasifican
en tres categoras bsicas
Leer y escribir memoria
Leer y escribir en dispositivos de I/O
Reconocimiento de Solicitud Externa
Cada instruccin consiste de uno o mas ciclos de
maquina
28
Ciclos de Maquina y Seales 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
Adquisicin de Instruccin
1. El Z80 introduce el contenido del PC en el bus de
direcciones
a. Incrementa el PC a la siguiente instruccin
b. El PC siempre apunta a la siguiente instruccin a ser
ejecutada
2. La direccin es decodificada por el decodificador
externo y el registro es identificado
30
Adquisicin de Instruccin
3. El Z80 enva las seales 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 trados al decodificador de
instrucciones.
5. El Z80 decodifica el opcode y ejecuta la instruccin,
31
Ejemplo
La instruccin LD B,A se encuentra almacenada en la
direccin 2002
H
La instruccin es adquirida de memoria
El cdigo operacional es 47
H
La instruccin copia el contenido del acumulador en
el registro B
32
Direccin Cdigo de Maquina Instruccin Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Adquisicin de Instruccin
ALU
Decodificador
de Instruccin
B C
D E
H L
IX
IY
SP
PC
47 H
Bus de datos Interno
Controlador
Bus de Direccin
Bus de datos
2002H
2002H
47H
MREQ
RD
33
Direccin Cdigo de Maquina Instruccin Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Adquisicin de Instruccin
El MPU debe obtener
la instruccin 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
Direccin Cdigo de Maquina
Instruccin Tarea
2002
H
01000111 47
H
LD B,A Copiar A en B
Lectura de Memoria: Ejemplo
La instruccin LD A,9F
H
se usa para introducir el
nmero 9F
H
en el acumulador
Esta instruccin 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 ejecucin de esta
instruccin
35
Direccin Cdigo de Maquina Instruccin 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
instruccin de memoria
Una vez que la instruccin ha sido decodificada, el
MPU se da cuenta de que requiere hacer otra
lectura de memoria
Despus de que la adquisicin de instruccin ha
sido realizada y el PC se ha incrementado, la seal
M1 debe estar inactiva para diferenciar el segundo
ciclo de adquisicin
36
Lectura de Memoria
Las seales MREQ y RD se activan para indicar que
se requiere una lectura de memoria
Las seales MREQ, RD y la direccin se usan para
identificar el registro a ser ledo 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 Ejecucin
Fetch
(4T) 0.25s = 1.0s
Lectura
(3T) 0.25s = 0.75s
Instruccin
(7T) ) 0.25s = 1.75s
Escritura de Memoria: Ejemplo
La instruccin LD (HL),A copia el contenido del
acumulador a la locacin de memoria indicada por
la direccin en el registro HL
Esta instruccin se compone de dos ciclos de
maquina, Opcode Fetch y Escritura de Memoria
39
Direccin Cdigo de Maquina Instruccin Tarea
2003
H
01110111 77
H
LD (HL), A
Copia el contenido de A en la
memoria . La direccin 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 instruccin estn
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 instruccin siempre
es opcode fetch
41
Reconociendo Ciclos de Maquina
El procesador no puede ejecutar una instruccin hasta que
todos los bytes han sido ledos
Ejemplo, la instruccin jump tiene 3 bytes. Entonces la instruccin 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 funcin de una
instruccin.
Por ejemplo LD (HL),A es una instruccin de un byte pero requiere un
ciclo de maquina extra para escribir en memoria
42
Revision de Conceptos Importantes
Seales Acciones
M1
La primera operacin en un ciclo de instruccin siempre es
opcode fetch y es indicado por esta seal
M1, MREQ,
RD
Opcode fetch y lectura de memoria usan las seales MREQ y RD.
Estas operaciones se diferencian por medio de la seal 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 Seales de Control
Seales Seales 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 operacin que el MPU realiza es
Opcode Fetch
El MPU es una maquina secuencial, por lo tanto ira
de una instruccin a la otra, a menos que se le
indique lo contrario
45
Resumen
El Opcode indica cuantos bytes deben ser ledos
para completar la instruccin
La seal M1 tiene dos propsitos
Distingue el ciclo de adquisicin del opcode de otra
operacin
Se usa para indicar que una interrupcin ha sido
reconocida
46
Resumen
Estas guas nos permiten reconocer los ciclos de
maquina
El nmero de ciclos de maquina en una instruccin indican
cuantas veces el microprocesador debe leer la memoria.
El primer ciclo de maquina de cualquier instruccin es
opcode fetch
El MPU debe leer todos los bytes que constituyen la
instruccin antes de poder ejecutarla
Si la instruccin requiere mas ciclos de maquina adems de
los requeridos para leer la instruccin, entonces esos ciclos
estn asociados a la ejecucin de la instruccin
47
06/09/2011
1
Memoria
Unidad 4
Microprocesadores
Otoo 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 Direccin
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 informacin
binaria
Si la memoria tiene 1024
registros entonces
requiere 10 lneas de
direccin
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 direccin de 16-bits es
puesta en el bus de
direcciones
La seal MREQ es puesta
en bajo para indicar que
existe una direccin valida
en el bus de direcciones
La seal RD es puesta en
bajo para indicar que se
desea realizar una lectura
La direccin de 16-bits es
puesta en el bus de
direcciones
La seal MREQ es puesta en
bajo para indicar que existe
una direccin valida en el
bus de direcciones
La seal WR es puesta en
bajo para indicar que se
desea realizar una escritura
Conceptos bsicos de la Interfaz a Memoria
6
La funcin 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
Decodificacin de direccin
9
La decodificacin de una
direccin debe resultar en
identificar un registro con
una direccin dada.
El decodificador debe ser
capaz de dar un pulso
nico para cada direccin.
F0H
F7H
Interfaz con Memoria
10
La direccin de 16-bits debe ser usada para seleccionar
un registro en particular
Para un chip de solo 1024 registros solo se necesitan 10
lneas de direccin (A
9
A
0
)
Por lo cual, las lneas de direccin se pueden dividir de la
siguiente manera
Parte Alta (A
15
A
10
)
La parte alta ser usada para generar la seal 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 seales MREQ y RD para indicar que se
requiere leer de memoria
La seal MREQ puede combinarse con CS para generar
MSEL
Direccin de Memoria
(Parte Baja)
Direccin 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
Direccin de Memoria
(Parte Baja)
Direccin 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 lneas de direccin requeridas al chip de
memoria
Decodifica las lneas restantes para generar la seal CS
Combina la seal CS y MREQ para generar la seal MSEL
que seleccionara el chip adecuado
Conecta las seales RD y WR a las seal RD y WR del
chip de memoria
Un configuracin 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)
Seal Chip Select
etiquetada como (Chip
Enable, CE)
Output Enable (OE) para
habilitar el buffer de salida
Opera con una
alimentacin 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 lneas de direccin necesarias
Paso 2
Decodificar las lneas de direccin restantes
Paso 3
Combina la decodificacin y la seal MREQ para generar la
seal MSEL
Paso 4
Conecta las seales 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
Lneas de
Habilitacin
Decodificacin
40H
41H
06/09/2011
4
Ejercicio
Proporciona la configuracin 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
Lneas de
Habilitacin
Decodificacin
Ejercicio
Proporciona la configuracin 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
Habilitacin Decodificacin Habilitacin
Ejemplo: Interfaz RAM 6116
21
RAM 6116 cuenta con
2048 registros (2k 8)
Seal 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
alimentacin de 5V
Interfaz
22
Los pasos necesarios para conectar el Z80 y la memoria
son
Paso 1
Conectar las lneas de direccin A10 A0
Paso 2
La seal (CE) es conectada o O4, por lo cual el chip ser
seleccionado solo si A15-A13 es 100
Paso 3
La seal RD se conecta con OE y la seal 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)
Solucin
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
Expansin
RAM
Foldback
Memory
Sin Usar
0000
0FFF
1000
1FFF
2000
27FF
2800
2FFF
3000
FFFF
Probando la Interfaz
28
Los niveles lgicos en los buses cambian dinmicamente
debido a la operacin que el microprocesador este efectuado.
Por lo cual, es difcil poder checar pin a pin que las conexiones
estn realizadas correctamente.
El mtodo comnmente usado consiste en inyectar una seal
conocida dentro del sistema y detectarla
Para utilizar este mtodo debemos generar una seal
identificable y constante y checar varios puntos en relacin
con esta seal
Probando la Interfaz
29
Podemos genera esta seal por medio de la ejecucin 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.5s
Todo el ciclo se ejecuta en (7+13+20)0.5s = 15s
La seal de escritura ser puesta a cero cada 15s
Si el decodificador y las conexiones estn bien realizadas,
cuando la seal 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 direccin 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
direccin 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 trminos del
acceso a memoria TAC.
TAC es el retardo entre el tiempo en el que la direccin
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 seal WAIT para alargar el intervalo de
lectura de datos
La seal WAIT tiene la siguiente caractersticas:
Es una seal activa en bajo
Es una seal de solicitud externa usada para dispositivos lentos
35
Generando Estados de Espera
Caractersticas de la seal WAIT
Esta seal es muestreada en el flanco de bajada de T2 de cada
ciclo de maquina
Si la seal 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 seal WAIT en
caso de seguir en bajo vuelve a introducir otro ciclo. Este
proceso es realizado hasta que la seal WAIT cambia a alto
Durante el tiempo de espera, el Z80 conserva el contenido de
todos las buses y las seales de control se extienden.
36
06/09/2011
7
Generando Estados de Espera
37
La seal WAIT ser muestreada al termino del ciclo T2
La seal MREQ es baja en el flanco de bajada de T1, por
lo cual esta seal puede ser usada para generar la seal
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
Ejecucin de la Instruccin OUT




El Z80 pone la direccin en el puerto de salida 07H en la
parte baja del bus de direcciones (A7-A0)
En el segundo ciclo de maquina T2, las seales IORQ y
WR son activadas para indicar que se requiere de una
operacin de salida
Un ciclo de espera es automticamente insertado, no
importando el estado de la seal WAIT
Durante el ultimo ciclo IORQ y WR se desactivan.
Direccin de
Memoria
Cdigo de
Maquina
Mnemnico
2050H D3 OUT (07H),A
2051H 07
3
Ejecucin de la instruccin 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 seal de decodificador con la seal WR para
general el pulso de seleccin del dispositivo de I/O
Usar un latch que nos permitir tener acceso o negar
acceso al dispositivo de I/O
La seal de seleccin 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 seal de
habilitacin 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 transicin
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.
Adems, 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 seal de seleccin del puerto debe ser activada
cuando la direccin en la parte baja (A7-A0) es igual a 0000111
La seal de habilitacin al latch debe ser generada por la seal
de seleccin del puerto mas la seal 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
Ejecucin de la Instruccin IN




El Z80 pone la direccin en el puerto de salida 84H en la
parte baja del bus de direcciones (A7-A0)
En el segundo ciclo de maquina T2, las seales IORQ y
RD son activadas para indicar que se requiere de una
operacin de entrada
Un ciclo de espera es automticamente insertado, no
importando el estado de la seal WAIT
Durante el ultimo ciclo IORQ y RD se desactivan.
Direccin de
Memoria
Cdigo de
Maquina
Mnemnico
2065H DB IN A,(84H)
2066H 84
13
Ejecucin de la instruccin 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 seal de decodificador con la seal RD para
general el pulso de seleccin del dispositivo de I/O
Usar un latch que nos permitir tener acceso o negar
acceso al dispositivo de I/O
La seal de seleccin 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 14s 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
cdigo es mas fcil de leer
Solo un mtodo 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 instruccin LD para
las operaciones por lo que los
comentarios deben especificar
que esa es una operacin de
Entrada y Salida
Todos los mtodos de
direccionamiento estn
disponibles para dispositivos de
I/O
Ejecucin de la Instruccin LD
La instruccin LD tiene 4 ciclos de maquina, los primeros 3
ciclos de maquina se encargan de obtener la instruccin.
El ultimo ciclo de maquina realiza la escritura en forma similar
a la instruccin OUT
En el segundo ciclo de maquina T4, la direccin 8000H es
puesta en el bus de direccin y las seales MREQ y WR son
activadas para indicar que se requiere escribir en memoria
Direccin de
Memoria
Cdigo de
Maquina
Mnemnico
2050H 32 LD (8000H),A
2051H 00
2052H 80
22
Ejecucin de la instruccin LD
23
Memory Mapped I/O
24
Los pasos para seleccionar y transferir la informacin
requiere de pasos similares a los requeridos en el modo
de perifricos mapeados:
Decodificar el bus de direcciones A15-A0
Combinar las seales MREQ y WR. Utilizar la decodificacin de
las direcciones combinadas con estas seales para general
MSEL
Usar la seal 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 seal
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
Seales de Control y Direccin
28
RD WR MREQ
Seal 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
Lneas de Habilitacin
Decodificado 1
Lneas de Habilitacin
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 15s 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 desempear 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 analgicos es similar a la
interfaz con dispositivos binario
Identificar el dispositivo por medio de una direccin
Habilitar el intercambio de datos por medio de las seales de
control
Sin embargo, debemos detectar y convertir la seal
analgica al formato binario y viceversa
Las seales analgicas se manejan de dos maneras
Detectar cuando la seal alcanza un valor predeterminado
(Comparador)
Convertir la seal a un formato binario proporcional a su
magnitud (Convertidor Analgico Digital)
Sensor de Temperatura y Comparador
33
LM135 es un sensor de temperatura con las siguientes
caractersticas
Su voltaje de salida cambia 10mV/C
Su rango de operacin es de -55 a 150 C
El voltaje tpico 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 alimentacin 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 alimentacin,
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
Direccin 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
Lneas de
Habilitacin
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
Redisea la siguiente interfaz para usar port mapped.
Considera que el puerto de entrada es 1AH y el de salida
es 1CH
37
Solucin
38
28/09/2012
1
Dispositivos de Interfaz
Programables
Unidad 4, 3 Parte
1
Dispositivos de Interfaz Programable
Los dispositivos perifricos simples pueden ser
considerados como que estn siempre listos para la
transferencia de datos.
Sin embargo, dispositivos mas complejos requieren alguna
forma de indicar si estn listos para la transferencia.
Un sistema basado en microprocesador requiere de
seales de sincronizacin para establecer cuando puede
ser transferida informacin entre el microprocesador y el
perifrico (handshaking)
Adems, los perifricos deben ser capaces de solicitar
atencin del Z80. Sin embargo, no todos los perifricos
pueden generar su propia seal de interrupcin
2
Dispositivos de Interfaz Programable
3
En algunas situaciones, la interfaz debe ser capaz de
manejar flujos de datos bidireccionales.
Las caractersticas 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
perifricos)
Capacidad de flujo de datos bidireccional
Seales de interrupcin y sincronizacin
Lgica de control
Lgica de seleccin del chip
Lgica de control de interrupcin
Dispositivo de Entrada y Salida Paralelo
para el Z80
4
El Z80 PIO (Parallel Input/Output) es un dispositivo de
interfaz especialmente diseado para el Z80
Controla dos puertos de Entrada y Salida de 8-bits A y B
Seales
PIO
Bus de Datos
Lneas de E/S
Seales de sincronizacin
Lgica de control de Interrupcin
Seales 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
Lneas de E/S (A7-A0): Estas son lneas tres-estados
bidireccionales para el puerto A, usadas para transferir datos
del PIO hacia el perifrico
Lneas de E/S (B7-B0): Similares al puerto A
Seales de sincronizacin: Tiene 4 seales dos por cada puerto
Potencia y Reloj: el PIO opera con una alimentacin de 5V y
usa un reloj de una sola fase
Lgica de Control de Interrupcin
Seales de Control
28/09/2012
2
Modos de Operacin
7
Z80 PIO
E/S Byte
Modo 0
Salida Simple
Salida con
Interrupcin
Modo 1
Entrada Simple
Entrada con
Interrupcin
Modo 2
Transferencia
Bidireccional
E/S Bit
Modo 3
Lneas
individuales
pueden ser
seleccionadas
Modos de Operacin
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
informacin
El registro de Control estable el modo de operacin 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
Seales de control
9
El PIO tiene 6 seales de control. Tres de ellas determinan la
direccin del puerto de los registros de E/S A y B y sus
registros de control. Las restantes indican que tipo de
operacin ser realizada (escritura o lectura).
Seales de Control
Seleccin del Puerto
Habilitacin
del Chip
Seleccin
del Puerto
A o B
Seleccin
del registro
de datos o
Control
Seleccin de Operacin
Lectura Escritura
Seleccin 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 seales son
Chip Enable (CE): conectada al decodificador de direcciones
Seleccin del puerto (B / A): Cuando la seal esta en alto se
selecciona al puerto B y cuando esta en bajo al puerto A
Seleccin de Control o Dato (C / D ): Cuando la seal esta en alto
selecciona el registro de control para escribir un comando. Cuando
es bajo selecciona el registro de transferencia de datos

Seleccin de Operacin
11
Las seales 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 estn en bajo, el MPU
lee el registro seleccionado
Escritura: Cuando IORQ estn 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 direccin del puerto A debe ser 80H
Utiliza el puerto B como puerto de salida para conectar 7 leds
y una bocina. La direccin del puerto deber ser 81H
Si el interruptor 7 se encuentra encendido, entonces
manda la seal 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 PERIFRICA
PROGRAMABLE
Microprocesadores
INTEL 8255A
INTEL 8255 es una
interfaz verstil que nos
permite tener puertos
de entrada y salida
simple, as como puertos
de E/S sincronizados.
Esta interfaz esta
diseada 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 Operacin
Modo de
Operacin
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 sincronizacin
Modo 2
Modo bidireccional
para puerto A
Puerto B es usado
como puerto simple
y el C es usado
para sincronizacin
Diagrama a bloque del 8255
Lgica de Control del 8255
RD Lectura: esta seal
habilita la operacin de
lectura

WR Escritura, esta
seal permite la
escritura al puerto.
Cuando se activa se
habilita la escritura en
el registro asociado al
puerto correspondiente
RST Reset, es una
seal activa en alto que
limpia todos los registros
del 8255
CS, A0 y A1 seales
utilizadas para
habilitacin del chip,
enviada desde el
decodificador externo.
Las otras dos seales se
conectan del
microprocesador
Lgica de Control
CS A1 A0 Seleccin
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 seal 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
Otoo 2011
Contenido
Conjunto de instrucciones
Tipos de instrucciones
Modos de direccionamiento
El ensamblador del Z80
El simulador AVOCET
Implementacin de un sistema basado en
el Z80
2
Conjunto de Instrucciones
3
El conjunto de instrucciones de un microprocesador
determina la capacidad de su operacin y el
poder de su manipulacin de datos y su facilidad
de programacin.

Una instruccin es un comando al microprocesador
para que desempee una tarea dada sobre un
dato especifico y esta formada por:
Cdigo Operacional
Operando
Formato de la Instruccin
4
El tamao de las instrucciones en el Z80 van de 1 a
4 bytes

El opcode determina cual es la operacin que se va
a realizar y esta incluido en el primer byte de la
instruccin.

Algunos opcode especializados se encuentran en
dos bytes

Formato de la Instruccin
5
El operando puede ser especificado de varias
formas:
Datos de 8 bits
Datos de 16 bits
Registros
Par de registros
Direccin de I/O
Direccin 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 cdigo operacional es especificado en los
primeros dos bits 01
El registro A es representado por el cdigo 111
El registro B es representado por el cdigo 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 instruccin 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 direccin 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 disearon 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 direccin 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
categoras
Transferencia de Datos
Operaciones Aritmticas
Operaciones Lgicas
Manipulacin de bits
Operaciones de Decisin
Operaciones de Control de Maquina
Transferencia de datos
11
Estas instrucciones copian los datos de una locacin
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 propsito
general BC, DE, HL con los registros alternativos
EXX
28/09/2011
3
Transferencia de datos
13
La instruccin de transferencia de datos el destino
es especificado primero y despus la fuente.
LD destino, fuente
Las direcciones de memoria o dispositivos de
entrada y salida se especifican entre parntesis
En algunas operaciones los operandos son implcitos
como en el caso de EXX
Las instrucciones de transferencia de datos no
afectan las banderas
Operaciones Aritmticas
14
Suma
Resta
Incremento/Decremento
Complemento a 1s y a 2s
Suma
15
Esta operacin se realiza usando el acumulador como
uno de los operandos, el otro operando puede ser:
Cualquier nmero 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 operacin
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 2s y el
resultado se almacena en el acumulador
El resultado afecta las banderas
El acumulador es un operando implcito
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 operacin de 8 bits afecta las banderas
Ejemplo
INC B
DEC BC
Complemento a 1s y a 2s
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 lgicas
Shift y Rotaciones
Comparaciones
Funciones Lgicas
21
Los operandos para estas funciones pueden ser un
numero de 8 bits, el contenido de un registro o
locacin de memoria
Tarea
AND B Aplicar la operacin AND a cada bit del registro B
con los bits del acumulador
OR 32H Aplicar la operacin OR a cada bit del numero
32H con los bits del acumulador
XOR (HL) Aplicar la operacin XOR a cada bit del numero
contenido en la localidad apuntada por HL con los
bits del acumulador
Shift y Rotacin
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 travs 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 travs del
carry

D
7
D
6
D
5
D
4
D
3
D
2
D
1
D
0
C
Shift y Rotacin
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 travs del
carry. Introduce ceros en
el bit D
0
SRL: Recorre los bits del
registro hacia la
derecha a travs del
carry. Introduce ceros en
el bit D
7
Shift y Rotacin
24
Opcode Operando Descripcin
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 travs 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 travs del carry.
SLA Reg o Memoria
Recorre los bits del registro o memoria a la
izquierda a travs del carry e inserta 0 en la
posicin D
0
SRL Reg o Memoria
Recorre los bits del registro o memoria a la
derecha a travs del carry e inserta 0 en la
posicin 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 comparacin se indica con la
bandera adecuada
Esta instruccin realiza la comparacin por medio
de substraer el operando del acumulador
Prueba por menor que, igual y mayor que
25
Comparaciones
Condicin 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
Manipulacin de bits
Comprobacin de bits
Bit set/Reset
27
Comprobacin 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
operacin
Operacion
Despus de la
operacin
B = 00110111 SET 7,B B = 10110111
B = 11110000 RESET 5,B B = 11010000
29
Decisin
Este grupo de instrucciones pueden alterar la
secuencia de ejecucin 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 condicin
es verdadera, la secuencia de instrucciones es
alterada
La locacin 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 instruccin cambia la secuencia del programa
a una de 8 locaciones de reinicio localizadas en la
pagina 00.

Esta instruccin generalmente se usa con las
interrupciones

Ejemplo
RST 28H La direccin de reinicio es 0028H
33
Control de Maquina
Estas instrucciones controla la operacin del
microcontrolador, tales como

Suspender la ejecucin de la instruccin
HALT

Deshabilitar las interrupciones poniendo a cero los
flip-flops que habilitan las interrupciones
DI
34
Modos de Direccionamiento
Modo Explicacin Ejemplo
Inmediato
El byte que sigue despus del opcode
es el operando
LD B,97H
Inmediato
Extendido
Los 2 siguientes bytes despus 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 implcita. Algunas operaciones
aritmticas y lgicas usan el
acumulador como un operando
implcito
AND B
35
Modos de Direccionamiento
Modo Explicacin 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 locacin de
memoria especificada
JP 2080H
Relativo
El segundo byte indica el valor del
desplazamiento en complemento a 2s
para una locacin de salto
JR 14H
Salta 20 locaciones
despus de la
siguiente instruccin
36
28/09/2011
7
Modos de Direccionamiento
Modo Explicacin Ejemplo
Indexado
El byte despus del opcode
especifica el valor de desplazamiento
que se suma al registro ndice para
indicar una locacin de memoria
INC (IX+10H)
Bit
Este modo es usado para la
manipulacin de bits. En este modo se
indica un bit de un registro o una
locacin 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 direccin de memoria y la parte
alta se asume que es 00H
RST 28H
37
Fin del programa
Detenemos la ejecucin
Punto de inicio
Programa Ilustrativo
Suma dos nmeros hexadecimales y despliega el
resultado

ORG 1800H ; La direccin de inicio del programa es 1800H
PORT1 EQU 01H ; Direccin 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
Seccin de
definiciones
38
Programa Ilustrativo
ORG indica la direccin 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
Declaracin de Constantes y definiciones
Rutina de Inicio
Subrutinas de Reinicio
Cuerpo del programa principal
Subrutinas
40
Transferencia de datos
Instruccin Bytes Descripcin
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 propsito 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 direccin 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 instruccin
Las instrucciones relacionadas a la memoria son
identificadas por los parntesis
El registro HL es un apuntador a memoria verstil
que puede ser usado para transferir datos de
memoria hacia cualquier registro de propsito
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 locacin de memoria 2050H contiene el byte 37H
Usando los diferentes modos de direccionamiento,
transfiere el byte 37H al registro B
Direccionamiento Indirecto usando HL
Cdigo Instruccin
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
Cdigo Instruccin
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 direccin fuente
40
20
01 LD BC,2070H ;Coloca el apuntador BC a la direccin destino
70
20
7E LD A,(HL) ;Transfiere el dato hacia el acumulador
02 LD (BC),A ;Copia el dato en la direccin destino
36 LD (HL),00 ;Limpia la locacin de memoria 2040H
00
76 HALT ;Detiene la ejecucin del programa
Transferencia de datos hacia
dispositivos I/O
47
Instruccin Bytes Ejemplo Descripcin
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 ejecucin de
estas instrucciones
Las direcciones de los puertos de entrada y salida
estn compuestas por 8 bits y deben estar escritas
entre parntesis.
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 Aritmticas
50
La suma y resta comparten las siguientes
caractersticas
Asumen que uno de los operandos es el acumulador
Modifican todas las banderas de acuerdo al resultado
de la operacin
El resultado es almacenado en el acumulador
No afectan el contenido del operando, solo del
acumulador.
Operaciones Aritmticas
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 locacin 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 locacin de memoria
apuntada por HL del contenido del acumulador
Operaciones Aritmticas
52
El incremento y decremento comparten las
siguientes caractersticas
El operando puede ser un registro, un numero de 8-bits
o un direccin 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 Aritmticas
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 Aritmticas
54
OPCODE OPERANDO BYTES DESCRIPCION
CPL 1
Invierte cada bit del acumulador. Esta
operacin equivale a la funcin 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 2s del contenido del acumulador. Esta
operacin afecta todas las banderas
El acumulador es el operando implicito para los
complemento a 1s y a 2s
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 locacin de memoria 2065H
Reste el 68H de F2H
Complemente a 1s el resultado
Sume A2H desde la memoria
Almacene la repuesta final en la locacin 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
Otoo 2010
Ejercicio
2
Cargue el numero F2H y 68H en los registros B y C
respectivamente
Almacene A2H en la locacin de memoria 2065H
Reste el 68H de F2H (F2H-68H)
Complemente a 1s el resultado
Sume A2H desde la memoria
Almacene la repuesta final en la locacin de memoria
2066H
Determine el estado del signo (S), cero (Z) y el Carry
(C)
Solucin
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 aritmtica BCD
Banderas
5
Los nmeros con signo del bit mas significativo
representa el signo, los 7 bits restantes representa la
magnitud




El mximo numero que puede ser representado es
+127 (7F)
El mnimo 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 operacin aritmtica excede los
limites +127 al -128 la bandera de overflow se pone
a 1
P/V indica overflow en las operaciones aritmticas, y
en la operaciones lgicas indica paridad

1 D Si 1
0 D Si 0
7
7
signo
05/10/2011
2
Overflow
7
Si el resultado de una operacin aritmtica 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 2s es el formato usado por
convencin para representar nmeros negativos y
positivos
Complemento a 2s
8
En complemento a 2s se tiene un desbalance.
Siempre existe un nmero 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 nmeros con signo
Overflow
9
En complemento a 2s todos los nmeros negativos
tiene un 1 en su bit mas significativo, por lo cual
facilita la deteccin de nmeros negativos
Al sumar o restar nmeros con signo puede ocurrir
un overflow bajo las siguientes condiciones
OP1 OP2 SUMA RESTA
+ + SI NO
+ - NO SI
- + NO SI
- - SI NO
Overflow
10
Operacin 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
Operacin A B
Resultado
indicando overflow
A+ B + + -
A + B - - +
A B + - -
A B - + +
Overflow
11
Overflow es detectado solo en nmeros 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 lgicas de la siguiente forma



Si el resultado de una operacin lgica es 00000011,
la bandera estar en 1 indicando numero par de unos.
La paridad no tiene relacin a los nmeros 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 nmeros 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 nmeros 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 nmeros 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 Decisin
17
Decisin
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
direccin 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 2s.

Los saltos relativos permiten saltos hacia adelante o
hacia a atrs
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 locacin especificada en el
operando de 16-bits
JP C,16-bits 3 Salta si CY=1 a la locacin especificada
JP NC,16-bits 3 Salta si CY=0 a la locacin especificada
JP Z,16-bits 3 Salta si Z=1 a la locacin especificada
JP NZ,16-bits 3 Salta si Z=0 a la locacin especificada
JP M,16-bits 3 Salta si el numero es negativo (S=1) a la direccin
JP P,16-bits 3 Salta si el numero es positivo (S=0) a la direccin
JP PE,16-bits 3 Salta si la paridad es par (P/V=1) a la direccin
JP PO,16-bits 3 Salta si la paridad es impar (P/V=0) a la direccin
Ejercicio
21
Escribe un programa que realice las siguientes
operaciones
Copie dos nmeros BYTE1 y BYTE2 en los registros B y
C, respectivamente
Suma los dos nmeros
Si la suma es mayor a 8 bits despliega 00H como la
condicin sobrecargada al puerto de salida PORT1
Limpia la locacin de memoria llamada OUTBUF
Si la suma es menor o igual a 8 bits, entonces almacena
el resultado en OUTBUF
Solucin
22
Mnemnicos Cdigo
Hex
Direccin 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
Detn la lectura del puerto de entrada
Almacena el numero de lecturas realizadas en OUTBUF
Despliega 01 en el puerto OUTLED para indicar la
sobrecarga
Solucin
24
Mnemnicos 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 direccin hacia la cual el
programa es redirigido es calculada por medio de
un offset. La direccin final es PC + offset
El offset es un numero de 8-bits en complemento a
2s para permitir saltos hacia adelante y hacia
atrs
El salto mas grande hacia adelante es 7FH mientras
que el salto mas grande hacia atrs es 80H
Saltos Relativos
26
Mnemnico Bytes Descripcin
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 instruccin de salto JR d esta almacenada en la
direccin 2100H y 2101H.
Encuentre la direccin de memoria a la cual saltara
la instruccin 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 Descripcin
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 locacin de memoria
LD R, (IX+d) 3 Copiar el dato al registro R de la locacin 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 locacin 2090H
Copie el numero 97H en la locacin 2120H
Sume los bytes y salve el resultado en el
acumulador
Solucin
30
Mnemnicos Comentarios
LD IX,2050H ; Apunte IX a la locacin 2050H
LD IY,2185H ; Apunte IY a la locacin 2185H
LD (IX+40H),32H ; Transfiere el byte a la locacin 2050H + 40H = 2090H
LD (IY+9BH),97H ; Transfiere el byte a la locacin 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
restriccin
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
Tcnicas de Programacin
Inicializa contadores, apuntadores
a memoria, registros, etc.
Traer datos hacia el
microprocesador desde memoria
o puerto
Manipulacin de datos tales como
operaciones aritmticas y lgicas
Almacenamiento de resultados
parciales
Incremento de contadores
Revisa la bandera para
establecer si termina el lazo o
continua su ejecucin
INICIO
FIN
Inicializacin
Adquisicin de Datos
Procesamiento de
Datos
Almacenamiento
Temporal
Incremento de
Contadores
Salida
Toma de
decisin
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 indquelo desplegando 01H
en el puerto OUTPRT
Suponga que:
SOURCE EQU 1850H
OUTBUF EQU 1870H
OUTPRT EQU C1H
33
Solucin
34
Mnemnicos 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 almacnalos en destino
Contado
r = 0?
Despliega un 01H en el
puerto OUTPRT
FIN
Si
No
Incrementa apuntadores.
Decrementa contador
Directivas al Compilador
Directiva Ejemplo Descripcin
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 definicin de
constantes. En este ejemplo la constante
PORT1 equivale a la direccin 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 direccin de memoria 4
bytes mas adelante que INBUF
35
Directivas al compilador
Directiva Ejemplo Descripcin
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 numricos 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 Lgicas
38
Las instrucciones lgicas 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 locacin de
memoria con la que se opera
Instrucciones Lgicas
39
OPCODE OPERANDO BYTES DESCRIPCION
AND r 1
Realiza la operacin AND de un registro con el
acumulador
AND 8-bits 2
Realiza la operacin AND de un numero de 8 bits
con el acumulador
AND (HL) 1
Realiza la operacin AND del acumulador con el
contenido de la locacin 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 Lgicas
40
OPCODE OPERANDO BYTES DESCRIPCION
OR r 1
Realiza la operacin OR de un registro con el
acumulador
OR 8-bits 2
Realiza la operacin OR de un numero de 8 bits
con el acumulador
OR (HL) 1
Realiza la operacin OR del acumulador con el
contenido de la locacin 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 Lgicas
41
OPCODE OPERANDO BYTES DESCRIPCION
XOR r 1
Realiza la operacin XOR de un registro con el
acumulador
XOR 8-bits 2
Realiza la operacin XOR de un numero de 8 bits
con el acumulador
XOR (HL) 1
Realiza la operacin XOR del acumulador con el
contenido de la locacin 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
configuracin descrita
en la ilustracin
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
Solucin
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 cdigo
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 extensin file_name.asm



7. Antes de realizar la compilacin 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 aparecern 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 simulacin de nuestro programa, la ventana de Diassembly se abrir y
mediante (Ctrl + F11) se realizara paso a paso la ejecucin 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 simulacin 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
direccin 0C1H. Se genera un archivo [Link] donde se encuentra el cdigo ASCII del
numero 23H. En este caso 23H es equivalente al smbolo en cdigo 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 simulacin.
16/11/2011
1
UNIDAD 5 3
A
PARTE
PROGRAMANDO EN EL
ENSAMBLADOR DEL Z80
Microprocesadores
1
Otoo 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 seal 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
Solucin
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
Solucin
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
nmero indicado
CP (HL) 1
Compara el contenido del acumulador con la
locacin de memoria indicada
CP (IX+d) 3
Condicin 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 locacin 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 direccin inicial
INBUF
Escribe un programa que encuentre la lectura mas
grande en el conjunto
Almacena este dato en el buffer OUTBUF
Solucin
9
START: XOR A ; Empieza con una lectura mnima
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 mximo
SKIP: INC HL ; Apunta a la siguiente locacin de memoria
DEC B ; Decrementa el contador
JP NZ,NEXT ; Obtn 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
Rotacin de bits a la izquierda de un registro o
memoria
RL
Rotacin de bits a la izquierda a travs del carry
de un registro o memoria
RRC
Rotacin de bits a la derecha de un registro o
memoria
(HL)
RR
Rotacin de bits a la derecha a travs del carry
de un registro o memoria
SLA
Shift de bits a la izquierda a travs del carry de
un registro o memoria
(IX + d)
SRL
Shift de bits a la derecha a travs del carry de un
registro o memoria
Shift y Rotacin
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 travs 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 travs 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 Rotacin
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 travs del
carry. Introduce ceros en
el bit D
0
SRL: Recorre los bits del
registro hacia la
derecha a travs del
carry. Introduce ceros en
el bit D
7
Rotaciones y Shift
14
En estas instrucciones, la direccin 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 rotacin
(shift) a la izquierda o por D0 en la rotacin (shift) a la
derecha
Ejemplo
15
LD HL,1850H ; HL apunta a la direccin 1850H
LD A,(HL) ; Lee el numero de la locacin 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 multiplicacin por 2
LD (HL),A ; Guarda el resultado
HALT
( )
( ) ( ) 2 8
2 8 10
+ =
+ =
A A
A A
Manipulacin 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 locacin 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 locacin de memoria B,(HL)
B, (IX+d)
RES
B,R
Asigna un 0 al bit B del registro o locacin de memoria

B,(HL)
B, (IX+d)
Retardos y Formas de Onda
17
INICIO
Carga el patrn de bits
Manipulacin 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
Mnemnicos 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 patrn de bits
ROTATE: LD A,C ; Coloca el patrn de bits en el acumulador 4
RLCA ; Cambia el patrn de bits para la siguiente salida 4
LD C,A ; Guarda el patrn 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 500s, lo cual
implica que debe mantenerse en alto por 250s y
en bajo por 250s.
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 instruccin decrementa el registro B y si B 0,
salta a la direccin de memoria especificada por
el valor de offset label
LDI
Carga e Incrementa
Copia un byte a la direccin de memoria apuntada
por HL dentro de la locacin 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 instruccin 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 direccin de
memoria apuntada por HL dentro de
la locacin de memoria apuntada por
DE. Los registro HL, DE y BC son
decrementados
LDDR
Carga, Decrementa y Repite
Esto es similar a la instruccin 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
Solucin
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 atrs a la
direccin 1807H
Debido a que es un salto hacia atrs, entonces el
offset es un numero negativo que debe ser
representado en complemento a 2s
Program Counter 1 8 1 0
Direccin destino 1 8 0 7
0 9 00001001
Complemento a 2s F 7 11110111
28
Instrucciones especiales del Z80
OPCODE OPERANDO DESCRIPCION
CPI
Compara e Incrementa
Compara el contenido de la locacin de memoria
apuntada por HL con el contenido del acumulador.
Incrementa HL y decrementa BC
CPIR
Compara, Incrementa y Repite
Esta instruccin 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 locacin de memoria
apuntada por HL con el contenido del acumulador.
Decrementa HL y BC
CPDR
Compara, Decrementa y Repite
Esta instruccin es igual a CPD pero se repite hasta que
BC = 0 o el contenido de HL es igual al acumulador
29
Caractersticas Generales
Estas son instrucciones de 2 bytes
La bandera del cero (Z) se enciende si los nmeros
comparados son iguales. Esto es, si el valor del
acumulador y la locacin 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
bsqueda 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
Solucin
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) ; Obtn el dato
INC HL ; Incrementa el apuntador al siguiente dato
CP (HL) ; Compara los nmeros
JP C,NEXTBYT ; Si A < segundo byte, no intercambies
LD B,(HL) ; Obtn el segundo byte para intercambio
LD (HL),A ; Almacena el byte anterior en la posicin siguiente
DEC HL ; Apunto a la locacin posterior
LD (HL),B ; Almacena el byte en la locacin anterior
INC HL ; restaura HL a la posicin de comparacin
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
Otoo 2011
Pila
La pila es un grupo de locaciones de memoria
definidas por medio de carga una direccin al
apuntador a la pila (SP)
La pila es usada para almacenar informacin
temporal durante la ejecucin del programa
En teora, el tamao de la pila esta restringido al
tamao de la RAM disponible
La definicin de la pila se inicia cargando la
direccin 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
direccin 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
recuperacin de los
bytes en la pila se
realiza siguiendo un
formato LIFO (Last Input
First Output)
La informacin en la
locaciones de la pila no
son destruidas hasta que
nueva informacin 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 direccin de 16 bits en el registro apuntador a
la pila. Define la direccin de inicio de la pila
PUSH RP
Copia el contenido del par de registros o de los registros
ndice en la pila.
Esta instruccin primero decrementa el apuntador a la pila y
copia la parte alta del registro en la locacin SP-1. Despus
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 instruccin 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 instruccin 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
propsito 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 mximo 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 instruccin 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 propsito
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
desempear una funcin 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
Mximo, encontrar el numero mximo 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 instruccin de regreso de la subrutina es ejecutada,
la direccin previamente guardada en el stack es recuperada.
Continua con la ejecucin 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
direccin de memoria especificada por el
operando de 16-bits.
Esta instruccin almacena la direccin de la
siguiente instruccin en la pila y transfiere
la ejecucin del programa a la direccin
de la subrutina
RET 1
Regresa de la subrutina.
Esta instruccin obtiene la direccin de
regreso del tope de la pila y transfiere la
ejecucin 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
Mnemnico
HEX
CODE
Direccin 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 instruccin transfiere la ejecucin del programa
a una locacin especifica en la pagina 00.
El operando especifica la parta baja de la
direccin
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 instruccin transfiere la ejecucin del
programa a una locacin especifica en la
pagina 00H.
El operando especifica la parta baja de
la direccin
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 semforo y dos
seales para peatones
El flujo del trafico y de los peatones es en la misma direccin.
Por lo tanto, los peatones pueden cruzar solo si la luz verde
esta encendida
Las seales son encendidas y apagadas por los siguientes bits

25
Seales 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
Direccin
Programa
Principal
XX00
01
09 CALL DELAY
0C
12 CALL DELAY
15
1B CALL DELAY
1E
Direccin Subrutina
XX50 PUSH DE
PUSH AF
DELAY
POP AF
POP DE
61 RET
Subrutinas Anidadas
30
Direccin
Programa
Principal
2000
2050 CALL
2051 90
2052 20
Direccin Subrutina 1
2090
209A CALL
209B C2
209C 20
209D
RET
Direccin 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 instruccin DAA
Busca dentro de una tabla el cdigo 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
Despus de una operacin aritmtica, esta
instruccin ajusta un numero de 8 bits en el
acumulador en un numero empaquetado BCD
Esta instruccin usa las banderas H (Half Carry) y
CY (Carry) internamente para ajustar el resultado a
dos dgitos 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
Cdigo
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
Cdigo 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
Bsqueda
LOOKUP: ; Esta subrutina toma un digito BCD desempaquetado, actualiza el
; apuntador y obtiene el cdigo correspondiente
; Entrada: Digito BCD Desempaquetado en el acumulador
; Salida: Cdigo de 7-segmentos en el acumulador
; Registros Modificados: Acumulador
PUSH HL ; guarda el contenido de HL
LD HL,CODE ; apunto a la tabla del cdigo 7-segmentos
ADD A,L ; Suma al apuntador el digito a ser desplegado
LD L,A ; Actualiza el apuntador
LD A, (HL) ; Obtn el cdigo
POP HL ; Restablece HL
RET
CODE: DEFB 7EH, 30H, 6DH, 79H ; Cdigo 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 cdigo 7-segmentos
OUT (PORT2), A ; Despliega el cdigo
DEC HL ; Decrementa el apuntador
LD A, (HL) ; Obtiene el segundo digito
CALL LOOKUP ; Obtiene el cdigo 7-segmentos
OUT (PORT1), A ; Despliega el cdigo
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 dgitos 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 conversin de un nmero
en BCD a binario
Use la subrutina unpack para desempaquetar el nmero
Escriba una subrutina que realice la conversin 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 rengln), 16X2,
20X2,20X4
44
Configuracin 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 Inicializacin
Encender
LCD
Esperar 1.5 ms
despus de que
Vdd llega a 4.5V
Enviar
cdigo de
INICIO
00011XXXX
BF no puede
probarse en este
punto
Repetir
cdigo de
INICIO
Esperar por mas
de 4.1 ms
Repetir
cdigo de
INICIO
El cdigo de inicio
indica que la
interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
Establecer modo
de Escritura
46
Comunicndose con LCD
LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el cdigo
ASCII a escribirse
Se utilizan 3 seales de
control:
Seleccin de Registro
(RS)
Escritura/Lectura (R/W)
Habilitacin de Reloj
(CE)

Seleccin
de Registro
RS = 0,
setup
RS = 1,
dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envi de
datos
Envi de
cdigo
ASCII
Deshabilita
Intercambio
CE = 0
47
1. RS=0: Instruccin, 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 direccin 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 posicin actual
del cursor
1 1 D D D D D D D D
Lee el caracter en la posicin 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
Otoo 2011
Instrucciones de 16-bits
OPCODE OPERANDO BYTES DESCRIPCION
LD HL,(16-bits) 3
Copia el contenido de la locacin de
memoria especificada por el operando de
16-bits
LD (16-bits), HL 3
Copia el contenido del par de registros HL
en la locacin 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 instruccin es
equivalente a LD PC,HL
Ejemplo
Condiciones Inciales
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 instruccin sirve para sumar una lista de
nmeros tomando en cuenta el carry generado en
cada suma
Tambin puede ser usada para sumar nmeros de
16-bits
Ejemplo:
Suma el 2793H y el 3182H y guarda el resultado en
la locacin de memoria 2050H y 2051H. Suponga
que los nmeros se encuentran en BC y DE
respectivamente
Suma y Resta con Carry
Condiciones Inciales
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 instruccin 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 nmeros de 32-bits estn almacenados en el
BUFF1 y BUFF2 respectivamente.
La subrutina ADBYTE suma los nmeros y el
resultado es almacenado en el BUFF1
Los parmetros de entrada son
Operando 1 apuntado por HL
Operando 2 apuntado por DE
El tamao del operando en bytes en B
Subrutina ADBYTE
ADBYTE: ; Esta subrutina suma dos nmeros de mltiples bytes y almacena el
; resultado en memoria, reemplazando el primer numero
; Entrada: Direccin de los nmeros a ser sumados en HL y DE, El tamao de
; los nmeros 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 multiplicacin binaria de M N puede ser
realizada por medio de sumar M, N veces.
Una forma mas eficaz de multiplicacin 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 nmeros 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 Otoo 2011
Contenido
Conceptos bsicos de interrupciones de entrada/salida
Convertidores A/D Y D/A
Dispositivos Programables
PPI 8255
Timer 8253 y 8254,
UART 8250,
Comunicacin serial de entrada/salida.
2
Comunicacin con Dispositivos I/O
Transferencia
de Datos
WAIT
Dispositivos
Lentos
Sondeo
(Polling)
Interrupcin
Enmascarable
No
Enmascarable
3
Comunicacin 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 generacin de
una seal de espera
Generacin de la seal WAIT
4
Comunicacin con Dispositivos I/O
Sondeo Interrupcin
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 interrupcin es un
proceso de transferencia
de datos, donde un
dispositivo externo indica
que
esta listo para comunicarse
o requiere atencin
La comunicacin se inicia
por el dispositivo externo
en forma asncrona
START: IN A,(41H)
JP START
5
Interrupcin
Esta forma de transferencia de datos se utiliza para
comunicarse con dispositivos que generan datos en forma
asncrona
Por ejemplo:
El teclado de un maquina vendedora de refrescos
Cambios drsticos en la temperatura
Existencia de vibraciones en una maquina o el suelo

El proceso de interrupcin permite al microprocesador
ejecutar el programa mientras le da servicio bajo
demanda a diferentes perifricos
6
16/11/2011
2
Interrupcin
Un dispositivo externo puede interrumpir al Z80 por
medio de la seal INT, por lo cual el microprocesador
debe revisar el estado de esta seal continuamente

Cuando el Z80 es interrumpido, la ejecucin del
programa es transferida a una locacin de memoria
especifica, para obtener las instrucciones que nos
permitirn manejar esta interrupcin

El grupo de programas que atienden a las interrupciones
son conocidos como RUTINAS DE SERVICIO
7
Interrupciones
Locacin de
memoria
Modo
Tipo
Interrupcin
Enmascarable
Modo 0
8
locaciones
Modo 1
0038 H
Modo 2
Cualquier
locacin
No
enmascarable
0066 H
8
Interrupciones Enmascarables
Las rutinas enmascarables son controladas por los flip-
flops de habilitacin a la interrupcin (IFF1, IFF2), son
internos al microprocesador

Para causar una interrupcin 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 seal del
dispositivo externo por el tiempo suficiente para que el Z80
sea capaz de detectarla (hardware)

9
Instrucciones Especiales
EI DI
Es una instruccin 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
Interrupcin
Es una instruccin 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 cdigo que no
puedan ser interrumpidas
(Secciones Criticas)

10
Modos de Interrupcin
Existen tres modos de interrupcin en el Z80. Para
indicar cual es el modo de interrupcin en el que nuestro
sistema trabajara debemos usar las siguientes
instrucciones:
IM 0
Modo 0
El ejecucin del programa se transfiere a uno de las 8 locaciones de
memoria de 0000H a la 0038
IM 1
Modo 1
La ejecucin del programa se transfiere a la locacin de memoria 0038H
IM 2
Modo 2
La ejecucin de memoria se transfiere a cualquier locacin de memoria
11
Proceso de Interrupcin en el Modo 0
1. El proceso de interrupcin es habilitado por medio de
EI y se especifica el modo de operacin por medio de
IM 0
2. Cuando el microprocesador esta ejecutando el
programa, revisa la lnea INT en el ultimo estado-T de
cada instruccin
3. Si los flip-flops de interrupcin estn habilitados y la
seal INT esta en bajo entonces
1. El Z80 termina la ejecucin de la instruccin actual
2. Deshabilita la los flip-flops de interrupcin
3. Enva la seal INTA (Interrupt Acknowledgment)
4. El microprocesador no acepta ninguna interrupcin hasta
que los flip-flops de interrupcin son activados nuevamente
12
16/11/2011
3
Proceso de Interrupcin en el Modo 0
4. La seal INTA es usada para introducir una instruccin
por hardware. Esta instruccin indica a que direccin de
memoria debe transferirse la ejecucin del programa.
Instruccin OPCODE Direccin
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 Interrupcin en el Modo 0
5. Si la instruccin que se introduce es la instruccin RST,
el Z80 almacena la direccin de la siguiente instruccin
en el stack y transfiere la ejecucin del programa a la
direccin indicada por RST
6. El microprocesador ejecuta la subrutina asociada a la
direccin 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 instruccin RET recupera la
direccin de programa cuando donde fue interrumpido
y continua su ejecucin.
14
Proceso de Interrupcin 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 botn
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 interrupcin
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 interrupcin 18
16/11/2011
4
Circuito
19
Implementado Interrupciones
Duracin del ancho del pulso de interrupcin
El pulso de interrupcin debe estar activa el tiempo suficiente
para que el Z80 lo detecte

El Z80 muestrea la seal INT en el ultimo estado-T de cada
instruccin

La instruccin mas larga del Z80 tiene 23 estados-T, por lo cual
en el pero caso la seal debe estar activa por 23 estados-T

Sin embargo, si la seal esta activa hasta que los flip-flops son
habilitados nuevamente por EI, causara que el Z80 vuelva a ser
interrumpido
20
Implementado Interrupciones
21
Conexin del botn de interrupcin
El botn mecnico cuando
es presionado proporciona
un seal inestable por un
momentos.
Este comportamiento puede
durar hasta 20ms y si la
rutina de interrupcin
habilita los flip-flops de
interrupcin antes de que el
voltaje se estabilice entonces
puede ser interpretado
como una nueva
interrupcin.
Este comportamiento puede
ser evitado por medio de el
circuito mostrado
22
Implementando Interrupciones
La instruccin EI activa los flip-flops de interrupcin hasta
que se ha terminado la ejecucin de la siguiente
instruccin

Esta medida se toma para evitar que el Z80 sea
interrumpido antes de que la direccin de regreso sea
recuperada del stack por medio de la instruccin RET

El Z80 no reconocer la interrupcin en caso de que
La seal BUS REQUEST este activa
El Z80 esta sirviendo a una solicitud de mas alta prioridad
23
Interrupcin 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 ejecucin del programa
Los requerimientos para operar en este modo son
Habilitar los flip-flops de interrupcin por medio de EI
Especificar el modo de operacin por medio de IM 1
La seal INT debe estar activa por el tiempo suficiente
Una vez que el Z80 ha reconocido la interrupcin
Deshabilita los flip-flops para evitar ser interrumpido mientras
atiende la interrupcin actual
Guarda la direccin de la prxima instruccin en el stack
Transfiere la ejecucin a la locacin 0038H
24
16/11/2011
5
Convertidor Analgico-Digital
El convertidor Analgico/Digital (ADC) tomo un voltaje
de entrada analgico y produce una cdigo de salida
digital que representa la entrada analgica
Los principales componentes de un ADC son:
Comparador(es)
Convertidor D/A
Registro
Unidad de Control
25
Convertidor Analgico-a-Digital
La operacin bsica de los convertidores A/D consta de
los siguientes pasos
El ADC inicia la conversin 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 analgico VAX
Si el voltaje VAX es menor que VA entonces la salida del
comparador permanece en alto. Cuando esta condicin no se
cumple la salida cambia a bajo y suspende la modificacin del
registro
La unidad de control modifica el valor de EOC para indicar
que se ha concluido la conversin

26
Resolucin
La seal analgica puede tomar
un numero infinito de valores
en el rango de conversin del
ADC
Sin embargo, estos valores no
pueden ser completamente
representado por en un cdigo
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
Resolucin y Error de Cuantizacion
Un rango de voltajes es traducido a la misma
representacin digital
La resolucin esta definida como el tamao 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 analgicos
El error de cuantizacion se puede reducir aumentando el
numero de bits usados para representar el valor
analgico

28
Tiempo de Conversin
El tiempo de conversin es el intervalo entre el final del
pulso del comando de inicio y la activacin de la seal
EOC
El tiempo de conversin 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 rpido
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 conversin depende del valor analgico de
entrada
31
ADC de Aproximaciones Sucesivas
Los ADC de
Aproximaciones Sucesivas
(CAS) tiene un tiempo de
conversin constante
La lgica 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 rpido,
pero el que requiere de
una mayor circuitera
Requiere de 2
n
-1
comparadores, donde n es
el numero de bits que
representan la seal
analgica
El tiempo de conversin
es el retardo de
propagacin asociado a
los comparadores y el
codificador
33
ADC0801
ADC0801 es un convertidor de 8 bits
La seal analgica es conectada a V
in+
. La mxima seal de
entrada es +5V
La seal analgica puede ser conectada a una entrada
diferencial usando V
in-
La seal V
ref
es usada para limitar el mximo 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
seales
CS: habilita el convertidor
WR: Indica el inicio de la conversin
RD: indica que el Z80 esta listo para obtener el dato
Cuando WR y CS estn activas, el ADC inicia la
conversin
Una vez que la conversin ha sido terminada, el ADC
indica que existe un dato para ser ledo por medio de
INTR. Esta seal se usara para interrumpir al Z80
Una vez que el dato es ledo, la seal INTR se inactiva
35
Interfaz con el ADC
36
10F
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 direccin
BUFFER
El programa usa el modo de interrupcin 1
Al ser interrumpido el Z80 automticamente transfiere el
control del programa a la direccin 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 interrupcin
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 conversin
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 conversin 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 conversin de la siguiente lectura
RET
39
Interrupcin en el Modo 2
El modo 2 nos permite transferir el control del programa
a cualquier locacin 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 direccin de memoria.
La parte alta de la direccin de memoria es tomada de el
registro de interrupcin (I)
La direccin de memoria formada por el registro de
interrupcin y los datos ledos del bus son considerados
como un apuntador a la direccin de la rutina de servicio
40
Interrupcin en el Modo 2
Instrucciones de inicializacin:
En este modo se debe inicializar el stack
Inicializar el vector de interrupcin con la parte alta de la
direccin de memoria
Indicar que el modo de operacin 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 direccin
LD I,A ; del apuntador a memoria
IM 2 ; Definir el modo de interrupcin
EI ; Habilitar las interrupciones
41
Interrupcin en el Modo 2
Disear el circuito que introducir la parte baja de la
locacin de memoria
42
16/11/2011
8
Interrupcin en el Modo 2
Cuando el Z80 reconoce la solicitud de interrupcin, forma el
vector de memoria combinando el registro de interrupciones
y el byte del bus de datos
Para este ejemplo la direccin 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
Interrupcin No Enmascarable
El Z80 tiene una entrada separada (pin 17) para las
interrupciones no enmascarables
Es la interrupcin con la mas alta prioridad dentro de las
interrupciones
No puede ser deshabilitada por software
Esta interrupcin es reservada para situaciones de
emergencia
Cuando el Z80 reconoce la interrupcin, el control del
programa es transferido a la direccin 0066H
Es sensitiva al flanco, por lo cual NO debe estar activa
hasta que el Z80 la muestre
44
Interrupcin No Enmascarable
La interrupcin no enmascarable es ejecutada de la
siguiente manera:
1. Cuando NMI es activada por el dispositivo externo, la
solicitud de interrupcin es guardada internamente en el
flanco de bajada de NMI

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

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

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

6. La rutina de servicio debe terminar con RETN. Esta instruccin
toma la direccin del tope del stack para regresar al punto de
interrupcin, y adems recobra el estado original de los flip-flops
de interrupcin. Por lo tanto, habilita las interrupciones
enmascarable y regresa al punto de interrupcin.
46
Mltiples interrupciones
Mtodo de Sondeo
Mtodo del Vector de
Interrupciones
Tcnica 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
Tcnica por hardware
El dispositivo se
identifica a si mismo por
medio de una
instruccin o una
direccin
La prioridad es
determinada por el
hardware
47
Mtodo 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 locacin 0038H para responder a las
; solicitudes en el modo 1. Determina la prioridad ente los dos
; convertidores y los identifica. Despus de identificar el convertidor,
; lee y almacena el dato e inicializa la siguiente conversin
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 conversin
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 conversin
POP AF ; Recupera el contenido del acumulador
RET 50
Tcnica del vector de interrupcin
51
Resumen
Interrupcin
Condiciones
para aceptar la
interrupcin
Instrucciones
Hardware
externo
Locacin 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
Direccin par
de memoria
52
24/11/2011
1
Dispositivos de Interfaz
Programables
Unidad 6, 2 Parte
1
Dispositivos de Interfaz Programable
Los dispositivos perifricos simples pueden ser
considerados como que estn siempre listos para la
transferencia de datos.
Sin embargo, dispositivos mas complejos requieren alguna
forma de indicar si estn listos para la transferencia.
Un sistema basado en microprocesador requiere de
seales de sincronizacin para establecer cuando puede
ser transferida informacin entre el microprocesador y el
perifrico (handshaking)
Adems, los perifricos deben ser capaces de solicitar
atencin del Z80. Sin embargo, no todos los perifricos
pueden generar su propia seal de interrupcin
2
Dispositivos de Interfaz Programable
3
En algunas situaciones, la interfaz debe ser capaz de
manejar flujos de datos bidireccionales.
Las caractersticas 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
perifricos)
Capacidad de flujo de datos bidireccional
Seales de interrupcin y sincronizacin
Lgica de control
Lgica de seleccin del chip
Lgica de control de interrupcin
Dispositivo de Entrada y Salida Paralelo
para el Z80
4
El Z80 PIO (Parallel Input/Output) es un dispositivo de
interfaz especialmente diseado para el Z80
Controla dos puertos de Entrada y Salida de 8-bits A y B
Seales
PIO
Bus de Datos
Lneas de E/S
Seales de sincronizacin
Lgica de control de Interrupcin
Seales 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
Lneas de E/S (A7-A0): Estas son lneas tres-estados
bidireccionales para el puerto A, usadas para transferir datos
del PIO hacia el perifrico
Lneas de E/S (B7-B0): Similares al puerto A
Seales de sincronizacin: Tiene 4 seales dos por cada puerto
Potencia y Reloj: el PIO opera con una alimentacin de 5V y
usa un reloj de una sola fase
Lgica de Control de Interrupcin
Seales de Control
24/11/2011
2
Modos de Operacin
7
Z80 PIO
E/S Byte
Modo 0
Salida Simple
Salida con
Interrupcin
Modo 1
Entrada Simple
Entrada con
Interrupcin
Modo 2
Transferencia
Bidireccional
E/S Bit
Modo 3
Lneas
individuales
pueden ser
seleccionadas
Modos de Operacin
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
informacin
El registro de Control estable el modo de operacin 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
Seales de Sincronizacin
9
Seal Tipo
Configuracin
Puerto de Salida Puerto de Entrada
ASTB
Entrada
desde el
perifrico
Indica que el
perifrico ha
recibido el dato.
Indica que un byte ha sido
colocado en el puerto A
por un perifrico
ARDY
Salida
hacia el
perifrico
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 perifrico
BSTB Igual que ASTB pero para el puerto B
BRDY Igual que ARDY pero para el puerto B
Seales de control
10
El PIO tiene 6 seales de control. Tres de ellas determinan la
direccin del puerto de los registros de E/S A y B y sus
registros de control. Las restantes indican que tipo de
operacin ser realizada (escritura o lectura).
Seales de Control
Seleccin del Puerto
Habilitacin
del Chip
Seleccin
del Puerto
A o B
Seleccin
del registro
de datos o
Control
Seleccin de Operacin
Lectura Escritura
Seleccin 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 seales son
Chip Enable (CE): conectada al decodificador de direcciones
Seleccin del puerto (B / A): Cuando la seal esta en alto se
selecciona al puerto B y cuando esta en bajo al puerto A
Seleccin de Control o Dato (C / D ): Cuando la seal esta en alto
selecciona el registro de control para escribir un comando. Cuando
es bajo selecciona el registro de transferencia de datos

Seleccin de Operacin
12
Las seales 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 estn en bajo, el MPU lee el
registro seleccionado
Escritura: Cuando IORQ estn en bajo y RD esta en alto, el
MPU escribe un dato al registro seleccionado
Reconocimiento de la Interrupcin: Cuando M1 e IORQ estn
en bajo, el Z80 reconoce la interrupcin proveniente del PIO
Reset: Cuando M1 esta en bajo y tanto RD como IORQ estn
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 direccin del puerto A debe ser 80H
Utiliza el puerto B como puerto de salida para conectar 7 leds
y una bocina. La direccin del puerto deber ser 81H
Si el interruptor 7 se encuentra encendido, entonces
manda la seal 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
Configuracin 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 Inicializacin
Encender
LCD
Esperar 1.5 ms
despus de que
Vdd llega a 4.5V
Enviar
cdigo de
INICIO
0011XXXX
BF no puede
probarse en este
punto
Repetir
cdigo de
INICIO
Esperar por mas
de 4.1 ms
Repetir
cdigo de
INICIO
El cdigo de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y
prender el
display
Limpiar pantalla
Establecer modo
de Escritura
20
Comunicndose con LCD
LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el cdigo
ASCII a escribirse
Se utilizan 3 seales de
control:
Seleccin de Registro (RS)
Escritura/Lectura (R/W)
Habilitacin de Reloj (CE)



Seleccin
de Registro
RS = 0,
setup
RS = 1,
dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envi de
datos
Envi de
cdigo
ASCII
Deshabilita
Intercambio
CE = 0
21
1. RS=0: Instruccin, RS=1: Dato
2. R/W=0: Escritura, R/W=1: Lectura
3. CE = 1 habilita, CE = 0, deshabilitado
LCD HD44780
Rutina de inicializacin
Escribir el cdigo 0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el cdigo
0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el cdigo
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 carcter
N Establece el numero de lneas de la pantalla
F Establece el tamao del carcter.
23
N F Numero de
Lineas
Tamao del
Carcter
Duty
Factor
0 0 1 57 puntos 1/8
0 1 1 510 puntos 1/11
1 X 2 57 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 posicin del
cursor hacia la derecha
1/D = 0 decrementa la posicin 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 ; cdigo para establecer comunicacin con LCD
LD B,A
CALL OUTPUT ; enva el cdigo a LCD
CALL CMDOUT ; reenva el cdigo a LCD
CALL CMDOUT ; reenva el cdigo a LCD
LD A, 00111000B ; establece 8 bits, 2 lneas 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 Operacin y Seales de
Sincronizacin
32
Las seales de sincronizacin (handshaking) son usadas
para indicar si los perifricos estn listos para transferir
datos.
El Z80 PIO tiene dos seales de sincronizacin asociadas
a cada puerto que son STROBE y READY. Estas seales
estn asociadas a la seal de interrupcin del dispositivo
La seal de interrupcin es usada para solicitar servicio
del Z80
Cada puerto tienen flip-flops de habilitacin de
interrupcin.
Modo 1 y Seales de Sincronizacin
33
1. El perifrico 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 seal de INT y la
seal RDY se inactiva para indicar que el registro esta
lleno
3. Suponga que Z80 esta en modo de interrupcin 2.
Entonces el Z80 leer del bus de datos la parte baja de
la direccin y la unir a la parte alta que se encuentra
definida en el vector de interrupcin I
4. Cuando la rutina de servicio lee el dato del puerto RDY
se activa en el flanco de subida de la seal RD indicando
que PIO esta listo para el siguiente dato
Modo 0 y Seales de Sincronizacin
34
1. Cuando el Z80 ejecuta la instruccin OUT, pone el byte
en el registro del PIO y activa la seal RDY para indicar
que hay un dato listo para ser transferido
2. La seal RDY permanece en alto hasta que el perifrico
enva la seal STB . En el flanco de subida de STB activa
la seal INT indicando al Z80 que el perifrico ha
recibido el dato y esta listo para la siguiente
transferencia
3. Cuando INT es reconocida transfiere la ejecucin del
programa a la rutina de servicio
Palabra de Habilitacin de Interrupcin
35
Para usar el PIO, primero debemos configurar los puertos
y habilitar los flip-flops de interrupcin del puerto.
D7 D6 D5 D4 D3 D2 D1 D0
I/O X X X 0 0 1 1
Palabra de Habilitacin de
Interrupcin
Palabra de Habilitacin
de Interrupcin
Usado para el
Modo 3
= 1 Habilita el la
interrupcin del
puerto
= 0 Deshabilita la
interrupcin
Vector de Interrupcin
36
El vector de interrupcin deber ser especificado para
que cuando el Z80 reconozca la interrupcin, el PIO
entregue la parte baja del vector.
La definicin de dicho vector se realiza de la siguiente
manera:
D7 D6 D5 D4 D3 D2 D1 D0
0
Vector de Interrupcin
Identifica el Vector de
Interrupcin
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 direccin de la rutina de servicio para este puerto es 1896H
Puerto B es un puerto de Salida
La direccin de la rutina de servicio para este puerto es 1898H
Asuma que la lgica de seleccin 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 interrupcin 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 interrupcin 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 interrupcin
OUT (CTRLA),A ; para el puerto A
LD A,96H ; Define la parte baja del vector de interrupcin
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 interrupcin
OUT (CTRLB),A ; para el puerto B
LD A,98H ; Define la parte baja del vector de interrupcin
OUT (CTRLB),A ; para el puerto B
LD SP, STACK ; Inicializa el stack
LD A,18H ; inicializa la parte alta del vector de interrupcin
LD I,A
IM 2 ; Define el modo de interrupcin 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 seales de sincronizacin son usadas para el
puerto A
ASTB y ARDY son usadas para realizar la sincronizacin
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 seales y
deber operar sin ellas. Es decir, ser puerto de entrada o
salida sin sincronizacin

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 perifrico lee
el dato, la seal ASTB se
activa para indicar que
esta listo para recibir un
nuevo dato y la
interrupcin es generada
1. El perifrico pone un dato
en el bus y activa BSTB y
la interrupcin es
generada para indicar que
el puerto A tiene un dato
para ser ledo
2. Cuando el Z80 lee el dato,
BRDY se activa para
indicar que al perifrico
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 configuracin 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 seales de sincronizacin para el puerto no son
usadas por lo que READY es puesta a cero y STROBE es
deshabilitada
Los bits so ledos 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 combinacin
lgica predefinida ocurre en las lneas de entrada
La combinacin lgica puede emplear las funciones lgicas
AND/OR
El nivel lgico puede ser alto o bajo
Para configurar el PIO en modo 3 con capacidades de
interrupcin entonces se requiere definir
Modo de control, Control de E/S, Control de Interrupcin 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 Interrupcin







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
interrupcin del
puerto
= 0 Deshabilita la
interrupcin
0 = Activa en bajo
1 = Activa en alto
Ejemplo
47
El puerto A es configurado en modo 3 para manejar las
luces de un semforo y monitorear cualquier conflicto
entre la luz roja y verde
Estas luces nunca deben estar encendidas al mismo
tiempo.
A0 A4 son configuradas como lneas de salida para
manejar las luces del semforo y las seales de caminar y
no caminar
A6 A7 son configuradas como lneas 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 interrupcin 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
Interrupcin
Lgica 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 interrupcin
LD I,A ; para el puerto A
LD A,72H ; Define la parte baja del vector de interrupcin
OUT (CTRLA),A ; para el puerto A
LD A,F7H ; Habilita los flip-flops de interrupcin
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 interrupcin 2
EI ; Habilita las interrupciones
Interfaz con un Teclado Matricial (Software)
51
La tcnica por software es
llamada Escaneo del
Teclado
Se envan 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
Despus, se enva cero
por rengln hasta
encontrar la tecla
presionada
Enva 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
seal
Proporciona un cdigo
para cada tecla
Genera un interrupcin
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
Seales de Control
Las seales 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 interrupcin: el vector de interrupcin
del canal correspondiente es puesto en el bus de datos
Operacin IORQ RD M1
Lectura 0 0 1
Escritura 0 1 1
Reconocimiento de Interrupcin 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:
Lgica 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 parmetro PRESCALE
que divide la frecuencia del reloj por 16 o 256
Palabra de Control
6
D7 D6 D5 D4 D3 D2 D1 D0
Interrupcin
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
Operacin
0= Continua
1= Software Reset
Constante de tiempo
0= Sin Constante
1= Constante Sigue
Disparo del timer
0= Automtico
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 ;Direccin 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 interrupcin, el Z80 deber ser
configurado para el modo de interrupcin 2.

El CTC debe ser programado para enviar la parte baja del
vector de interrupcin.

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 interrupcin
Definicin del vector de Interrupcin
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
Interrupcin
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
Configuracin 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)
[Link] 3 (Not used in 4-bit operation)
[Link] 4
[Link] 5
[Link] 6
[Link] 7
[Link] Anode (+)
[Link] Cathode (-)
4
Rutina de Inicializacin
Encender
LCD
Esperar 1.5 ms
despus de que
Vdd llega a 4.5V
Enviar
cdigo de
INICIO
0011XXXX
BF no puede
probarse en este
punto
Repetir
cdigo de
INICIO
Esperar por mas
de 4.1 ms
Repetir
cdigo de
INICIO
El cdigo de
inicio indica que
la interfaz se
establece a 8 bits
Esperar 100s
Inicializar
LCD
Apagar y prender
el display
Limpiar pantalla
Establecer modo
de Escritura
5
Comunicndose con LCD
LCD tiene un bus de
datos de 8 bits (pin 7-
14) por el cual se
transfiere el cdigo
ASCII a escribirse
Se utilizan 3 seales de
control:
Seleccin de Registro
(RS)
Escritura/Lectura (R/W)
Habilitacin de Reloj (CE)



Seleccin
de Registro
RS = 0,
setup
RS = 1, dato
Escritura RW = 1
Habilita
intercambio
CE = 1
Envi de
datos
Envi de
cdigo ASCII
Deshabilita
Intercambio
CE = 0
6
1. RS=0: Instruccin, RS=1: Dato
2. R/W=0: Escritura, R/W=1: Lectura
3. CE = 1 habilita, CE = 0, deshabilitado
LCD HD44780
Rutina de inicializacin
Escribir el cdigo 0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el
cdigo 0011XXXX
Checar BF, cuando este en bajo enviar nuevamente el
cdigo 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 carcter
N Establece el numero de lneas de la pantalla
F Establece el tamao del carcter.
8
N F Numero de
Lineas
Tamao del
Carcter
Duty
Factor
0 0 1 57 puntos 1/8
0 1 1 510 puntos 1/11
1 X 2 57 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 posicin del
cursor hacia la derecha
1/D = 0 decrementa la posicin 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 ; cdigo para establecer comunicacin con LCD
LD B,A
CALL OUTPUT ; enva el cdigo a LCD
CALL CMDOUT ; reenva el cdigo a LCD
CALL CMDOUT ; reenva el cdigo a LCD
LD A, 00111000B ; establece 8 bits, 2 lneas 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.5s
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 ; cdigo para establecer comunicacin con LCD
CALL CMDOUT ; enva el cdigo a LCD
CALL DELAY ; espera por 10ms
CALL CMDOUT ; reenva el cdigo a LCD
CALL DELAY ;espera por 10ms
CALL CMDOUT ; reenva el cdigo a LCD
CALL DELAY ;espera por 10ms
22
LD A, 00111000B ; establece 8 bits, 2 lneas 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 posicin 8
CALL CMDOUT
CALL DELAY
LD HL, MESSAGE
25
Programa para controlar LCD
NEXT: LD A,(HL) ; Tomar el siguiente carcter
CP 00 ; Verificar si es el fin de la cadena
JP Z,END
CALL DTAOUT ; Enviar carcter a la LCD
CALL DELAY ; Esperar 10 ms
INC HL ; Apuntar al siguiente carcter
JP NEXT
END HALT
26

También podría gustarte