Sie sind auf Seite 1von 56

MICROPROCESADORES MICROCONTROLADORES UI 1 M. C.

BENITO BÁEZ SÁNCHEZ

1.1 Introducción a los microprocesadores


1.1.1 Definición del microprocesador
1.1.2 Diferencia entre el microprocesador y microcontrolador
1.1.3 Tipos de microprocesador según su velocidad y ancho de palabra
1.2 Arquitectura del microprocesador
1.2.1 A través de diagrama a bloques
1.2.2 Arquitectura externa del microprocesador (terminales)
1.3 Conexión del microprocesador con dispositivos de:
1.3.1 Memoria
1.3.2 Periféricos
1.3.2.1 De interfase programable (8255)
1.3.2.2 Interrupciones programables (8259)
1.3.2.3 De comunicación serial
1.4 Lenguaje ensamblador del microprocesador
1.4.1 Registros
1.4.2 Declaración de segmentos
1.4.3 Modos de direccionamiento
1.4.4 Control de dispositivos de entrada/salida
1.4.5 Conjunto de instrucciones
1.4.6 Esqueleto de un programa
1.4.7 Uso de procedimientos

O O
  
  
Se usa el término microprocesador para denominar a cualquier Unidad Central de
Proceso (CPU) contenida en una sola pastilla, aún cuando algunas de ellas tengan
la arquitectura y el poder de procesamiento de una computadora.

El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas
son palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido
absurda. Pero cada año, el microprocesador se acerca más al centro de nuestras
vidas, forjándose un sitio en el núcleo de una máquina tras otra. Su presencia ha
comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros
mismos. Cada vez se hace más difícil pasar por alto al microprocesador como otro
simple producto en una larga línea de innovaciones tecnológicas.

Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el


mundo o ha tocado tan profundamente tantos aspectos de la existencia humana.

Hoy existen casi 15,000 millones de microchips de alguna clase en uso (el
equivalente de dos computadoras poderosas para cada hombre, mujer y niño del
planeta). De cara a esa realidad, ¿quién puede dudar que el microprocesador no
sólo está transformando los productos que usamos, sino también nuestra forma de
vivir y, por último, la forma en que percibimos la realidad?

No obstante que reconocemos la penetración del microprocesador en nuestras


vidas, ya estamos creciendo indiferentes a la presencia de esos miles de
máquinas diminutas que nos encontramos sin saberlo todos los días. Así que,
antes de que se integre de manera demasiado imperceptible en nuestra diaria
existencia, es el momento de celebrar al microprocesador y la revolución que ha

MICROPROCESADORES MICROCONTROLADORES UI 1 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 2 M. C. BENITO BÁEZ SÁNCHEZ

originado, para apreciar el milagro que es en realidad cada uno de esos chips de
silicio diminutos y meditar acerca de su significado para nuestras vidas y las de
nuestros descendientes.

O O O 


 
  
Un microprocesador es un circuito integrado (C.I.), de súper muy alta escala de
integración (SVLSI), que realiza las tareas de procesamiento de una computadora
u otro sistema de control automático.

O O 

 
  
  
Si se ha tenido la oportunidad de realizar un diseño con un 
  ,
Fig.1, se puede observar que dependiendo del circuito se requerían algunos
circuitos integrados adicionales además del c  como por ejemplo:
memorias
c para almacenar datos temporalmente y memorias
c para
guardar el programa encargado del proceso del equipo, un circuito integrado para
los puertos de entrada y salida y finalmente un decodificador de direcciones.

Figura 1. Estructura de un sistema abierto basado en un c . La


disponibilidad de los buses permite que se configure a la medida de la aplicación.

Un c 
fig.2, es un
circuito integrado que contiene todos
los elementos necesarios para hacer
funcionar un sistema basado con un
c † es decir contiene en
un solo integrado la Unidad de
Proceso, la memoria
c, memoria

c, puertos de entrada y salidas,


con la consiguiente reducción de
espacio. El c   es en
definitiva un circuito integrado que
incluye todos los componentes de un computador. Debido a su reducido tamaño
es posible montar el controlador en el propio dispositivo al que gobierna. En éste
caso el controlador recibe el nombre de controlador empotrado.

El c  es un sistema cerrado. Todas las partes del procesador


están contenidas en su interior y sólo salen al exterior las líneas que gobiernan los

MICROPROCESADORES MICROCONTROLADORES UI 2 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 3 M. C. BENITO BÁEZ SÁNCHEZ

periféricos.

Estas ventajas son reconocidas inmediatamente para aquellas personas que han
trabajado con los c  y después pasaron a trabajar con los
c  . Estas son las diferencias más importantes:

Por ejemplo la configuración mínima básica de un c  estaba


constituida por un Micro de 40 Pines, Una memoria
c de 28 Pines, una
memoria
c de 28 Pines y un decodificador de direcciones de 18 pines† pero un
c   incluye todo estos elementos en un solo Circuito Integrado por lo
que implica una gran ventaja en varios factores: En el circuito impreso por su
amplia simplificación de componentes, el costo para un sistema basado en
c   es mucho menor y, lo mejor de todo, el tiempo de desarrollo de
su proyecto electrónico se disminuye considerablemente.

O O 

   
     
Las características básicas que definen a un microprocesador son la longitud de
palabra (comúnmente de 8, 16, 32, 64 ó 128 bits), la velocidad de ejecución y la
capacidad de gestionar interrupciones.

Otras de sus calidades diferenciativas, son el número de instrucciones, el número


de registros, y los tipos de direccionamiento.m

La longitud de la palabra se refiere al número de bits que procesa


simultáneamente un microprocesador y se determina por su arquitectura, es decir,
por el tamaño de los registros, de la unidad lógica y aritmética (ALU) y de los
buses internos. La longitud de la palabra crece conforme las nuevas tecnologías lo
permiten.

El primer microprocesador tenía una longitud de 4 bits, ahora y una frecuencia de


108 KHz, el microprocesador |   tiene una longitud de palabra de 64
bits, con una frecuencia de 2GHz.

Especificaciones técnicas de los microprocesadores Intel


Fecha reloj bus  Memoria 

 m 
 m  

m
2.300 (10 Primer chip con
4004 15/11/71 108KHz. 4bits 640 byte
micras) manipulación aritmética
Manipulación
8008 1/4/72 108KHz. 8bits 3.500 16 KBytes
Datos/texto
10 veces las (6 micras)
8080 1/4/74 2 MHz. 8bits 6.000 64 KBytes
prestaciones del 8008
5MHz.
29.000 1 10 veces las
8086 8/6/78 8MHz.m 16bits
(3 micras)m MegaByte prestaciones del 8080
10MHz.m
Idéntico al 8086 excepto
5 MHz.
8088 1/6/79 8 bits 29.000 en su bus externo de 8
8 MHz.m
bits
80286 1/2/82 8 MHz. 16bits 134.000 16 1 De 3 a 6 veces las

MICROPROCESADORES MICROCONTROLADORES UI 3 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 4 M. C. BENITO BÁEZ SÁNCHEZ

10MHz.m (1.5 micras)m Megabytes Gigabyte prestaciones del 8086


12MHz.
16 MHz.
Primer chip x86 capaz
386 20 MHz.m 275.000 4 64
17/10/85 32bits de manejar juegos de
DX®m 25 MHz. (1 micra)m Gigabytes Terabytes
datos de 32 bits
33 MHz.m

275.000 Bus capaz de


386 16 MHz. 4 64 direccionar 16 bits
16/6/88 16bits
SX®m 20 MHz.m Gigabytes Terabytesm procesando 32bits a
(1 micra)m bajo coste
25 MHz. (1 micra, 0.8
486 4 64 Caché de nivel 1 en el
10/4/89 33 MHz.m 32bits micras en 50
DX®m Gigabytes Terabytesm chip
50 MHz. MHz.)
16 MHz. Idéntico en diseño al
486 20 MHz.m 1.185.000 4 64 Intel 486DX, pero sin
22/4/91 32bits
SX®m 25 MHz.m (0.8 micras)m Gigabytes Terabytesm coprocesador
33 MHz. matemático
60 MHz.
66 MHz.m
75 MHz.m
90 MHz.m Arquitectura escalable.
100MHz.m 32 3,1 millones 4 64 Hasta 5 veces las
Pent®m 22/3/93
120MHz.m Bits (0.8 micras)m Gigabytes Terabytesm prestaciones del 486
133MHz.m DX a 33 MHz.
150MHz.m
166MHz.m
200MHz.m

64 Arquitectura de
150MHz.
64 5,5 millones 4 ejecución dinámica con
Pent 27/3/95 180MHz.m
Bits (0.32 micras)m Gigabytes procesador de altas
Pro®m 200MHz.m Terabytesm prestaciones

233MHz. 64 S.E.C., MMX, Doble


64 7,5 millones 4
7/5/97 266MHz.m Bus Indep., Ejecución
Bits (0.32 micras)m Gigabytes
PentII®m 300MHz.m Terabytesm Dinámica

O  !
   
  
O  O  "
    !
La unidad central de proceso (CPU) o microprocesador, es el verdadero cerebro
de la computadora. Su misión consiste en controlar y coordinar todas las
operaciones del sistema. Para ello extrae, una a una, las instrucciones del
programa que está en la memoria central del computadora (memoria RAM),las
analiza y emite las órdenes necesarias para su completa realización.
Para entender cómo funciona un microprocesador, hay que tener en primer lugar
una clara idea acerca de su arquitectura. De otro modo, será prácticamente
imposible hacerse una idea sobre su funcionamiento. De una forma global,
podemos considerar al microprocesador dividido en tres grandes bloques:

UNIDAD DE UNIDAD DE
DECODIFICACIÓN EJECUCIÓN
UNIDAD ARITMÉTICO- LÓGICA (ALU)

MICROPROCESADORES MICROCONTROLADORES UI 4 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 5 M. C. BENITO BÁEZ SÁNCHEZ

   # 


Se encarga de decodificar la instrucción que se va a ejecutar. Es decir, saber qué
instrucción es. Cuando el microprocesador lee de memoria una instrucción, el
código de esa instrucción le llega a esta unidad. Esta unidad se encarga de
interpretar ese código para averiguar el tipo de instrucción a realizar. Por ejemplo,
instrucciones de suma, multiplicación, almacenamiento de datos en memoria, etc.

    


Una vez que la unidad de decodificación sabe cuál es el significado de la
instrucción leída de memoria, se lo comunica a la unidad de ejecución. Esta
unidad será la encargada de consumar la ejecución y para ello activará las
señales necesarias y en un orden determinado. Es decir, es la encargada de dar
las órdenes necesarias a las diversas partes del microprocesador para poder
ejecutar cada una de las instrucciones.

  $ % & %'


La ALU (Aritmethic Logic Unit) es el bloque funcional del microprocesador
encargado de realizar todas aquellas operaciones matemáticas y logicas asi como
tambien operaciones de corrimiento. Las operaciones que realiza son las
siguientes: suma, resta, multiplicación, división y aquellas que trabajan con dígitos
binarios (10 que se conoce como operaciones lógicas: AND, NOR, NOT, NAND,
OR, X-OR, etc).

En suma, saber cómo funciona un microprocesador, implica conocer cómo se van


ejecutando cada una de las instrucciones del programa que se almacena en
memoria. Los pasos globales que se siguen a la hora de ejecutar una instrucción
son:


| $  % | 
Vamos a profundizar aún más en el estudio de las partes funcionales que
componen un microprocesador. No significa que la primera división en bloques
anterior fuera errónea, sino que era más superficial.
.
Podemos, entonces, considerar a un microprocesador compuesto por las dos
siguientes unidades:   $%(  $  % 

  $%


Es el centro nervioso del computadora, ya que desde ella se controlan y gobiernan
todas las operaciones. Realiza las funciones básicas de:

MICROPROCESADORES MICROCONTROLADORES UI 5 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 6 M. C. BENITO BÁEZ SÁNCHEZ

° tomar las instrucciones de memoria.


° decodificar o interpretar las instrucciones.
° ejecutar las instrucciones (tratar las situaciones de tipo interno (inherentes a
la propia CPU) y de tipo externo (inherentes a los periféricos).

Para funcionar de la manera anterior, la unidad de control consta de:

° Contador de programa
° Registro de instrucciones
° Decodificador
° Reloj
° Secuenciador





   
Contiene permanentemente la dirección de memoria de la siguiente instrucción a
ejecutar. Al iniciar la ejecución de un programa toma la dirección de su primera
instrucción. Incrementa su valor en uno, de forma automática, cada vez que se
concluye una instrucción, salvo si la instrucción que se está ejecutando es de salto
o de ruptura de secuencia, en cuyo caso el contador de programa tomará la
dirección de la instrucción que se tenga que ejecutar a continuación† esta dirección
está en la propia instrucción en curso.

$


 
Contiene la instrucción que se está ejecutando en cada momento. Esta instrucción
llevará consigo el código de operación (un código que indica qué tipo de operación
se va a realizar, por ejemplo una suma) y en su caso los operandos (datos sobre
los que actúa la instrucción, por ejemplo los números a sumar) o las direcciones
de memoria de estos operandos.

 

 
Se encarga de extraer el código de operación de la instrucción en curso (que está
en el registro de instrucción), lo analiza y emite las señales necesarias al resto de
elementos para su ejecución a través del secuenciador .

$ ) 
Proporciona una sucesión de impulsos eléctricos o ciclos a intervalos constantes
(frecuencia constante), que marcan los instantes en que han de comenzar los
distintos pasos de que consta cada instrucción.

 
 
En este dispositivo se generan órdenes muy elementales (microórdenes) que,
sincronizadas por los impulsos de reloj, hacen que se vaya ejecutando poco a
poco la instrucción que está cargada en el registro de instrucción.

MICROPROCESADORES MICROCONTROLADORES UI 6 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 7 M. C. BENITO BÁEZ SÁNCHEZ

  $*%+ & %',


Esta unidad se encarga de realizar las operaciones elementales de tipo aritmético
(sumas, restas, productos, divisiones) y de tipo lógico (comparaciones). A través
de un bus interno se comunica con la unidad de control la cual le envia los datos y
le indica la operación a realizar .

La ALU está formada a su vez por los siguientes elementos:

Circuito operacional
Registros de entrada (REN)
Registro acumulador
Registro de estado (flags)







 

 
Contiene los circuitos necesarios para la realización de las operaciones con los
datos procedentes de los registros de entrada (REN). Este circuito tiene unas
entradas de órdenes para seleccionar la clase de operación que debe realizar en
cada momento (suma, resta, etc).

$
  &$ ' 
En ellos se almacenan los datos u operandos que intervienen en una instrucción
antes de la realización de la operación por parte del circuito operacional. También
se emplean para el almacenamiento de resultados intermedios o finales de las
operaciones respectivas.

$
   
Almacena los resultados de las operaciones llevadas a cabo por el circuito
operacional. Está conectado con los registros de entrada para realimentación en el
caso de operaciones encadenadas. Asimismo tiene una conexión directa al bus de
datos para el envío de los resultados a la memoria central o a la unidad de control.

$
 & ' 
Se trata de unos registros de memoria en los que se deja constancia de algunas
condiciones que se dieron en la última operación realizada y que habrán de ser
tenidas en cuenta en operaciones posteriores. Por ejemplo, en el caso de hacer
una resta, tiene que quedar constancia si el resultado fue cero, positivo o negativo.

O   - !
  .  
  &
 ',
En un sistema digital se le da el nombre de ³ puerto ³ al medio físico por el cual
entran y salen datos al microprocesador.

MICROPROCESADORES MICROCONTROLADORES UI 7 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 8 M. C. BENITO BÁEZ SÁNCHEZ

Los puertos de E/S son registros externos dedicados a aceptar y/o a enviar
información a dispositivos periféricos.

Un puerto de entrada (E) está compuesto sólo por un buffer de tercer estado junto
con un registro de almacenamiento (latch). El buffer de tercer estado tiene la
función de controlar, es decir, aislar o permitir el flujo de información del puerto al
bus de datos del microprocesador. El registro tiene la función de almacenar
temporalmente la información generada por el dispositivo periférico de entrada
hasta que pueda ser leída por el microprocesador. El dispositivo de entrada
controla el almacenamiento de un dato en el registro, mientras que el
microprocesador determina el estado del buffer (activo o en estado de alta
impedancia) por medio de un pulso de selección.

|

La concepción básica de un puerto de salida es un simple registro de
almacenamiento (latch), que conecta al bus de datos con el dispositivo de salida.
El microprocesador coloca en el registro el dato que va a ser enviado al dispositivo
periférico por medio de un pulso de selección aplicado a la entrada de reloj del
registro.



 
 |
Para puertos de salida, circuitos externos combinan las señales IOQR, WR y la
dirección del puerto y generan un pulso de selección único para cada puerto. Este
pulso actúa a la manera de un pulso de escritura para grabar el dato en el puerto
durante el ciclo de salida de una instrucción OUT que especifique ese puerto.

El diseño de la circuiteria de selección varía, dependiendo del número de


dispositivo de E/S en el sistema y de las características de los circuitos que
componen los puertos de E/S. Si únicamente se requiere un puerto de entrada y
un puerto de salida, no es necesario decodificar los bits de dirección. Para
generar los pulsos de selección de estos puertos bastan las señales E/SR y E/SW.
En este caso el número de puerto no importa, pero de cualquier manera no puede
omitirse en la instrucción.

Cuando el sistema requiere más de un puerto de entrada o de salida, entonces es


necesario decodificar las líneas de dirección con el fin de generar los pulsos de
selección para cada puerto en particular.


 
|    
|
Los puertos de E/S pueden implantarse con circuitos SSI, MSI o LSI. Sin
embargo, para minimizar el número de componentes en general se usan circuitos
MSI o LSI.

Un puerto de salida de 8 bits se puede implantar con un circuito de tipo cerrojo


(latch) de 8 bits como el 74LS373 o el 74LS374. El 74LS373 contiene 8 cerrojos
disparados en el nivel positivo con una entrada común de reloj activa en 1 lógico.
El 74LS374 contiene 8 flip-flops tipo D disparados en la transición positiva (0 a 1)
con una entrada común de reloj.

MICROPROCESADORES MICROCONTROLADORES UI 8 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 9 M. C. BENITO BÁEZ SÁNCHEZ

Ambos circuitos poseen salidas con buffers de tercer estado. Los buffers tienen
una entrada de habilitación activa en 0 lógico. Cuando alguno de estos circuitos
se usa para implantar un puerto de salida, los buffers se mantienen activos todo el
tiempo o son controlados por el dispositivo de salida.

El circuito 9334 de National proporciona 8 cerrojos (latches) direccionables


individualmente, los cuales pueden utilizarse como 8 puertos de salida de un bit
para propósitos de control. La entrada de datos del 9334 se conecta a una de las
líneas del bus de datos. Cada uno de los cerrojos es seleccionado como un
puerto de salida independiente por medio de tres líneas de dirección, con lo cual
se puede cambiar el estado de un bit sin afectar el estado de los otros. Con este
circuito solamente se requieren dos instrucciones para poner un bit en 0 o en 1
lógico: una carga el acumulador con 00H o 01H† la otra es una instrucción de
salida para el puerto (bit) seleccionado. Suponiendo un 9334 conectado al Z-80,
como se muestra en la figura, la siguiente secuencia de instrucciones pone el bit 4
en 1 lógico:

En contraste, para cambiar un solo bit sin alterar ninguno de los otros bits de un
puerto de salida en donde todos los bits son manejados simultáneamente, por
ejemplo un 74LS373 o un 74LS374, se vuelve necesario mantener en memoria
una copia de la última información enviada al puerto. Compare la siguiente
secuencia de instrucciones que pone en 1 lógico el bit 4 de un puerto implantado
con un 74LS373, con la secuencia utilizada en el caso de un 9334:

     
Hay dos tipos posibles de transferencia controlada por programa:
incondicional y condicional.
Una $ # $   % es aquella en que se envían o reciben
datos de un puerto de E/S, sin averiguar si éste se encuentra listo para recibir o
transmitir la información. Un ejemplo de una operación de salida incondicional es
la transmisión de un dato en BCD del microprocesador a un indicador de siete
segmentos. El microprocesador no se asegura que el indicador esté listo para
recibir el dato, sencillamente supone que sí lo está. La lectura del estado de un
conjunto de interrupciones manuales muestra una operación de entrada
incondicional. Aquí de nuevo el microprocesador da por supuesto que los
interruptores se han colocado en las posiciones deseadas. En la generalidad de
los casos, los periféricos de E/S necesitan sincronizarse de alguna forma al
microprocesador. Éste no puede tratar a los dispositivos como si mantuvieran su
información indefinidamente o como si pudieran recibir datos en cualquier
momento. En vez de eso, el microprocesador debe ser capaz de determinar
cuando un dispositivo tiene un dato nuevo de entrada o cuando está listo para
recibir un dato de salida.

Así pues, en transferencias condicionales, la ejecución de la instrucción de E/S


que realiza la transferencia de datos, se condiciona a que el periférico esté listo
para enviar o recibir el dato. La disponibilidad del periférico se determina por
medio de una transferencia incondicional de información de estado (status) del
dispositivo de E/S al microprocesador, que precede a la transferencia del dato.

MICROPROCESADORES MICROCONTROLADORES UI 9 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 10 M. C. BENITO BÁEZ SÁNCHEZ

Al conjunto de operaciones implicadas en la transferencia condicional de un dato


se le conoce como |$%    +. En un protocolo de
comunicación entre dispositivos electrónicos, al igual que en las relaciones
humanas, ocurre un intercambio de ³cortesías´, en este caso señales eléctricas,
las cuales tienen como fin asegurar que la transferencia de información se realice
en la forma más conveniente para los participantes.

Una de las formas más comunes para implantar un protocolo es el procedimiento


denominado  $# + o control de transferencia (  /, o
  ). Aquí el transmisor indica al receptor la presencia de un dato
(data ready) y enseguida transfiere el dato† el receptor completa la verificación
respondiendo a la recepción del dato (input acknowledge). El receptor puede
controlar la situación solicitando inicialmente el dato o indicando su disponibilidad
para aceptarlo (peripheral ready)† luego el transmisor envía el dato y completa la
verificación avisando que la información está lista (output ready). En cualquier
caso, el transmisor sabe si la transferencia se ha completado exitosamente y el
receptor sabe cuando está disponible un nuevo dato. Las figuras 4.12 y 4.13
muestran operaciones comunes de E/S usando un protocolo de verificación.
%  &  '
° Examinar el registro de estado del puerto y esperar a la señal que indique
que el puerto está listo.
° Enviar un comando de lectura al registro de control del puerto. Después de
iniciar la operación, el microprocesador puede dedicarse a otras tareas.
Cuando llega al punto en el que debe aceptar el dato del puerto, prosigue
con el siguiente paso.
° Examinar el registro de estado del puerto y esperar a la señal que indique la
disponibilidad del dato.
° Transferir al microprocesador el contenido del registro de datos del puerto.

 
 &
 ' 
° Examinar el registro de estado del puerto y esperar a la señal que indique
que el puerto está listo.
° Transferir el dato del microprocesador al registro de datos del puerto.
° Enviar un comando de escritura al registro de control del puerto. El
microprocesador puede pasar el control a otras tareas que se puedan
ejecutar mientras se efectúa la operación de E/S.
En la siguiente figura se muestra el diagrama de una transferencia condicional
controlada por programa.

MICROPROCESADORES MICROCONTROLADORES UI 10 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 11 M. C. BENITO BÁEZ SÁNCHEZ

 
 

      

Hay varias maneras de proporcionar las señales de control y estado. Una es por
medio de líneas de E/S dedicadas a este propósito. El microprocesador tiene
acceso a ellas a través de puertos adicionales. Un solo bit de estado puede
indicar cuándo un puerto de entrada tiene información disponible para ser leída o
cuando un puerto de salida está listo para recibir información.

Considérese, por ejemplo, un periférico de entrada que ha colocado un dato en el


puerto de entrada 1 (registro de datos), para ser transmitido al microprocesador.

Para indicar la existencia de un dato, el periférico pone en 1 lógico un flip-flop o


bandera que corresponde al bit 7 del puerto de entrada 0 (registro de estado).

Con el fin de determinar la presencia de un dato para ser leído, el microprocesador


periódicamente lee el contenido del registro de estado y examina el estado del bit†
si el bit 7 es 1, hay un dato disponible y entonces una instrucción lo lee del puerto
1. El pulso de selección que activa el buffer del puerto 1, también reestablece
(vuelve a 0 lógico) la bandera que indica la existencia de un dato.

Cuando existen varios dispositivos de E/S en un sistema que utiliza E/S controlada
por programa, el microprocesador debe preguntar por la disponibilidad de cada
periférico antes de que se efectúe la transferencia de información. Este
procedimiento es llamado ENCUESTA (POLLING).

En la subrutina de encuesta el microprocesador examina la bandera de cada


dispositivo y ejecuta la secuencia de instrucciones que le da servicio al dispositivo
si encuentras que la bandera correspondiente esté activa. Además, el

MICROPROCESADORES MICROCONTROLADORES UI 11 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 12 M. C. BENITO BÁEZ SÁNCHEZ

procedimiento de encuesta establece un esquema jerárquico de servicio en el que


la prioridad de los periféricos está determinada por el orden en que el
microprocesador examina la bandera de estado de cada uno de ellos.
Evidentemente, este procedimiento puede requerir una gran cantidad de tiempo de
microprocesador si hay muchos dispositivos de E/S.

Con frecuencia las banderas de estado de varios dispositivos o los bits


independientes de control, son combinados y manejados por un solo puerto de
entrada o salida respectivamente. La figura siguiente se muestra la combinación
de las banderas de ³dato disponible´ de 8 dispositivos de entrada en un byte
común de estado al que el microprocesador tiene acceso a través de un puerto de
entrada.

El agrupar la información de estado y control en bytes reduce el número de


direcciones para puertos de E/S requeridos por los periféricos. Sin embargo, esto
implica que los bits individuales de estado deben aislarse para poder ser
interpretados y que los bits de control deben ser determinados por separado.

Los procedimientos para aislar los bits de estado y para poner en 0 o en 1 lógico
los bits de control son como sigue:

Para separar los bits de estado:


Leer la información de estado del periférico.
Ejecutar la operación AND con la mascarilla apropiada (la mascarilla debe tener
unos en las posiciones de los bits que van a examinarse y ceros en las demás).
Desplazar los bits separados a las posiciones menos significativas.

1.3 Conexión del microprocesador con dispositivos de:


1.3.1 Memoria
1.3.2.2 Interrupciones programables(8259)
1.3.2.3 De comunicación serial

1.3.2 Periféricos
1.3.2.1 De interfase programable (8255).
Uno de los integrados universalmente usados en sistemas basados en
microprocesadores es sin duda el 8255. Este circuito fue inicialmente diseñado por
‘    como parte del juego de integrados de apoyo a sus primeros

MICROPROCESADORES MICROCONTROLADORES UI 12 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 13 M. C. BENITO BÁEZ SÁNCHEZ

sistemas de 16 bits (8086 y 8088). El   incluía numerosos dispositivos tales


como controladores serie, controlador de CRT, gestores de acceso directo a
memoria, controladores de unidades de disco, etc.

La fuerte evolución en el diseño de computadoras ha convertido a gran parte del


chipset del 8086 en piezas de museo debido a que muchas de las funciones no
tienen hoy día utilidad alguna (carece de sentido emplear viejos controladores de
CRT o disco). Sin embargo existen una serie de componentes que conservan
todavía hoy, después de veinte años, toda su utilidad. En concreto nos estamos
refiriendo a la UART 8251 y al controlador de interfaz paralelo PPI 8255. En este
artículo trataremos el 8255, un versátil y económico integrado de fácil conexión a
cualquier sistema basado en microprocesador o microcontrolador, que proporciona
de un modo elegante y sencillo puertos E/S disponibles.

La opción más correcta sería emplear estos dispositivos en un sistema basado en


un 8086/8088 (actualmente manufacturados en versiones CMOS de bajo consumo
y alta velocidad por ‘    ), si bien dada su versatilidad
pueden ser empleados por cualquier otro sistema.

Entre las aplicaciones actuales podemos comprobar como el 8255 se encuentra


con facilidad en tarjetas de expansión de puertos para el bus ISA del PC, ya que
simplifica enormemente la elaboración de la placa de circuito impreso aportando
suficiente potencia de control. Es también ideal para expansión de puertos E/S en
monoplacas o gestión de periféricos como conversores analógico/digital y otros.

El 8255 se encapsula en formato DIP de 40 terminales como es habitual en los


controladores del   8086. Existen cinco grupos de señales, además de los
dos terminales de alimentación:
· Grupo de control
· Bus de datos
· Puerto A
· Puerto B
· Puerto C

Los terminales del dispositivo se distribuyen del siguiente modo:


$    %
D7 - D0 Bus de Datos (Bidireccional)
RESET Entrada de Reset
CS Seleccion de Chip
RD´ Entrada de Lectura
WR´ Entrada de Escritura
A0, A1 Direccion de Puertos
PA7 - PA0 Puerto A (Bit)
PB7 - PB0 Puerto B (Bit)
PC7 - PC0 Puerto C (Bit)
Vcc 5V
GND 0V

MICROPROCESADORES MICROCONTROLADORES UI 13 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 14 M. C. BENITO BÁEZ SÁNCHEZ

Podemos observar el diagrama interno del dispositivo en la figura adjunta.

MICROPROCESADORES MICROCONTROLADORES UI 14 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 15 M. C. BENITO BÁEZ SÁNCHEZ

Básicamente se trata de tres puertos (A,B,C) de ocho bits, encontrándose el


puerto C dividido en dos puertos de cuatro bits. Estos cuatro puertos formados
(dos de ocho bits y dos de cuatro) se organizan en dos grupos de 12 bits. Cada
grupo contiene un puerto de ocho bits y otro de cuatro.

El primer grupo comprende el puerto A y la parte alta del puerto C mientras que el
segundo comprende el puerto B y la parte baja del puerto C.

· Ë  PA0..PA7 + PC4..PC7


· Ë  PB0..PB7 + PC0..PC3

Estos grupos pueden operar en tres modos de funcionamiento diferentes:

· c : Tres puertos de cuatro bits programables como entrada o salida.


· c : Un puerto de ocho bits programable como entrada o salida y un puerto
de cuatro bits de control.
· c : Este modo configura al puerto A como un puerto bidireccional dejando
los cinco bits mas significativos del puerto C (PC3...PC7 nótese que emplea por
tanto más de un grupo) como líneas de control del puerto.

MICROPROCESADORES MICROCONTROLADORES UI 15 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 16 M. C. BENITO BÁEZ SÁNCHEZ

Estos modos de operación se definen mediante un octeto de estado del que


hablaremos a continuación.

Para acceder tanto al octeto de estado como a los puertos en sí debemos hacer
uso de las señales de control del 8255.

° V  Bus de datos bidireccional con estado de alta impedancia. Conecta el


dispositivo con el bus de datos del microprocesador.
°  Señal   . Cualquier operación sobre el chip requiere un nivel
bajo en esta señal.

Usualmente se compara la dirección emitida por el microprocesador mediante


lógica externa y si dicha dirección corresponde con el rango asignado por el
diseñador al periférico la lógica comparadora de dirección pondrá a cero esta
línea.

Mientras esta línea se encuentre alta el bus de datos D7...D0 se encuentra en un


estado de alta impedancia para permitir que otros periféricos hagan uso del bus
del microprocesador.

V Señal de lectura. Un valor bajo en esta señal dispondrá en el bus de datos


bidireccional.
D7..D0 el valor del puerto indicado por las dos líneas de dirección A1 y A0.

 Señal de escritura. Un valor bajo escribirá el octeto presente en el bus de
datos en el registro/puerto indicado por A1 y A0.
A1 A0 Selección del registro
0 0 Puerto A
0 1 Puerto B
1 0 Puerto C
1 1 Octeto de control

Hemos visto hasta ahora los diferentes puertos que existen y los modos de
configurarlos.

Sabemos también que esto se realiza por medio del octeto de control (para ello
realizamos una operación de escritura sobre él, no siendo posible su lectura).

Veremos a continuación la descripción completa de dicho octeto:


·    Puerto C bajo (1=Entrada, 0=Salida)
·    Puerto B (1=Entrada, 0=Salida)
·    Selección modo grupo uno (0=Modo 0, 1=Modo 1)
·    Puerto C alto (1=Entrada, 0=Salida)
·    Puerto A (1=Entrada, 0=Salida)
·    ! Selección modo grupo dos (00=Modo 0, 01=1, 1x= 2)
·   " Flag de modo a uno (1=Activo)




  

MICROPROCESADORES MICROCONTROLADORES UI 16 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 17 M. C. BENITO BÁEZ SÁNCHEZ

El bit 7 a uno permite acceder al registro de control y configurar el modo de


funcionamiento del periférico. Si a la hora de acceder a dicho registro ponemos a
cero el bit 7 accedemos al control individual de las líneas de salida del puerto C.

Los puertos A y B son leídos y escritos en bloques de cuatro u ocho bits según
sea la configuración de los mismos, pero el puerto C permite un acceso individual
sobre las líneas de salida del mismo:

·    Valor de salida (1 ó 0)
·      Selección de bit (000=bit 0, 001=bit 1 ...111=bit 7)
·     ! No influyen, cualquier valor.
·   " Flag de modo (0=Acceso al puerto C)

 
El modo de funcionamiento 0 es el más simple posible. Los puertos se configuran
como entrada y salidas. En el caso de que se configuren como salidas los datos
se enclavan y permanecen invariables hasta la siguiente escritura. La lectura se
realiza en el momento de efectuar la operación sobre el 8255. El dispositivo opera
por tanto como si de un transceptor multiplexado con latch de salida se tratase.


El modo de funcionamiento 1 puede emplearse en ambos grupos de pines.
Proporciona un puerto de 8 bits y cuatro señales de control de cada mitad del
puerto C que operan del siguiente modo en el caso de que se configure el puerto
correspondiente como entrada:
/STB: Strobe Input
PC4 grupo A/PC2 grupo B

Cuando esta señal se pone a nivel bajo el dispositivo memoriza el estado del
puerto de ocho bits. La siguiente operación de lectura RD sobre el 8255 por parte
del microprocesador devolverá el estado del bus en el estado bajo de dicha señal.
Permite efectuar por tanto lecturas del puerto de ocho bits de modo independiente
del microprocesador que gestiona el 8255.

IBF: Input Buffer Full Flag Output


PC5 grupo A/PC1 grupo B

Esta señal responde a STB subiendo a uno cuando el dato ha quedado enclavado
durante el flanco de bajada de un pulso en STB. Vuelve a nivel lógico cero en el
flanco de subida de la señal de lectura RD.

INTR: Interrupt request output PC3 grupo A/PC0 grupo B Esta salida sube a nivel
alto (si el bit INTE está activado) en el flanco de subida de STB indicando al
microprocesador que controla el 8255 la presencia de un dato en el dispositivo.
Vuelve a bajar a nivel lógico cero en el flanco de bajada de RD.

Para el grupo A el flag INTE está activado si lo está el bit PC4 mientras que para
el grupo B el bit INTE está activado si lo está el bit PC2. El modo de activar o

MICROPROCESADORES MICROCONTROLADORES UI 17 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 18 M. C. BENITO BÁEZ SÁNCHEZ

desactivar dichos bits es el descrito anteriormente mediante el acceso individual al


puerto C.

Si la configuración indicada establece el puerto de 8 bits como salida la


descripción de los bits de control es la siguiente:

/OBF Output Buffer Full Flag Output


PC7 grupo A/PC1 grupo B

Esta señal indica el estado de escritura en el puerto. Baja a nivel lógico cero en el
flanco de subida de la señal de escritura /WR volviendo al nivel lógico 1 en el
flanco de bajada de la señal de respuesta del dispositivo ACK.

/ACK Acknowledge Input


PC6 grupo A/PC2 grupo B

Esta señal de entrada permite al terminal indicar al controlador 8255 que ha


recogido el dato que el sistema le envió. Para ello el terminal pondrá a cero esta
entrada.

INTR Interrupt request output


PC3 grupo A/PC0 grupo B

La señal pasa a nivel alto en el flanco de subida de /ACK y pasa a nivel lógico cero
en el flanco de bajada de /WR, siempre y cuando los correspondientes bits INTE
estén habilitados. Para el primer grupo INTEA corresponde al bit PC6 mientras
que para el segundo grupo INTEB corresponde al bit PC2.


El modo 2 permite habilitar un puerto de 8 bits bidireccional. Solo es posible
disponer de él con el grupo A. La descripción de los pines es la siguiente:

/OBF Output buffer full flag output


PC7

La señal pasa a nivel lógico cero en el flanco de subida de /WR y vuelve al nivel
lógico uno en el flanco de bajada de /ACK. Indica a la CPU que ha recogido el
dato.

/ACK Acknowledge input


PC6

La entrada habilita el puerto A del 8255 al pasar al nivel lógico cero. El dato escrito
en el registro interno del 8255 pasa al puerto A y el terminal lo lee. Al volver al
nivel lógico uno el puerto A vuelve de nuevo al estado de alta impedancia.

/STB Stobe input.


PC4

MICROPROCESADORES MICROCONTROLADORES UI 18 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 19 M. C. BENITO BÁEZ SÁNCHEZ

Cuando esta entrada pasa a nivel lógico bajo la salida de datos hacia el puerto
desde los pines es enclavada en el registro interno. El dato sale por el bus de
datos una vez se recibe la señal RD desde el microprocesador, si bien el bus
permanece en alta impedancia hasta entonces.

IBF Input buffer full flag output


PC5

La señal pasa a nivel alto en el flanco de bajada de STB volviendo al nivel bajo en
el flanco de subida de RD, indicando que el dato ha sido enclavado en el registro
interno del 8255.

INTR Interrupt request output


PC3

Esta señal se emplea del mismo modo que en el modo de funcionamiento número
1. La diferencia estriba en que existen ahora dos bits INTE, uno para habilitar la
interrupción en operaciones de salida (PC6) y otro para habilitar la interrupción en
operaciones de entrada (PC4).

El 8255 es un interface programable de periféricos (PPI). Su función es la de un


componente Y‘ de propósito general, para interfasar equipo periférico al bus del sistema
microcomputador. La configuración funcional del 8255 es programada por el software del
sistema, de manera que normalmente no se necesita circuiteria externa para interfasar
periféricos o estructuras.

 $  $0  
° 8255compatible con microprocesadores 8085.
° 24pines de EIS programables.
° Totalmente compatible con UL.
° E Totalmente compatibles con la familia de microprocesadores INTEL.
° Características de tiempos mejorados.
° Capacidad de directo software de bit facilitando aplicaciones de interfaces de control.
° Circuito integrado DIP de 40 pines.
° Reduce el número de CI's a emplear.
° Capacidad de DC mejoradas.

 $| %|  %122

$    %
D7 - D0 Bus de Datos (Bidireccional)
RESET Entrada de Reset
CS Seleccion de Chip
RD´ Entrada de Lectura
WR´ Entrada de Escritura
A0, A1 Direccion de Puertos
PA7 - PA0 Puerto A (Bit)
PB7 - PB0 Puerto B (Bit)
PC7 - PC0 Puerto C (Bit)
Vcc 5V
GND 0V
MICROPROCESADORES MICROCONTROLADORES UI 19 M. C. BENITO BAEZ SANCHEZ
MICROPROCESADORES MICROCONTROLADORES UI 20 M. C. BENITO BÁEZ SÁNCHEZ

El 8255 DE INTEL es un dispositivo de E/S de propósito general, tiene 24 pines de EIS


que pueden ser programados individualmente en dos grupos de 12 y usados en tres
modos de operación principales. En el primer modo (modo O), cada grupo de 12 pines
puede programarse en grupos de 4 como entrada ó salida. En el segundo modo (modo 1),
cada grupo puede programarse para tener 8 entradas ó salidas† de los 4 pines restantes
tres son empleados para protocolo (Handshaking) y control de interrupciones. El tercer
modo de operación (modo 2, es un modo de bus bidireccional, que usa 8 líneas para un
bus bidireccional y 5 líneas, una prestada del otro grupo, para protocolo (handsking)

El 8255 es una interfase para comunicación en paralelo con periféricos. Las partes que lo
constituyen se muestran en la figura anterior, a continuación se describen estas partes
dependiendo de su aplicación.

## $ %   


Este buffer bidireccional de 8 bits se usa para interfasar el 8255 al bus de datos del
sistema. Los datos son enviados o recibidos por este buffer bajo la ejecución de
instrucciones de entrada o salida por el CPU. Las palabras de control y la información del
estado también se transfieren a través de este bus.

%  $%( % $  $$ 


La función de este es manejar todas las transferencia internas y externas de palabras de
datos, control o estados. Esta acepta entradas del bus de control y de direcciones del
CPU, y en turno, define comandos para lo dos grupos de control.

 % + |&
'
Un cero en este Pin de entrada habilita la comunicación entre el 8255 y el CPU.

% $ &$
'
Un cero en este Pin de entrada habilita al 8255 a enviar los datos o información del estado
al CPU, sobre el bus de dato. Esencialmente este permite al CPU "leer del" 8255.

 % + | $& ( O' 


Estas señales de entrada en conjunto con RO' y WR', controlan la selección de uno de los
tres puertos o del registro de la palabra de control. AQ y A1 están conectadas a los bits
menos significativos del bus de direcciones.

$$ &3$4'
Un cero en este Pm de entrada, permite al CPU escribir datos o palabras de control sobre
el 8255.

$  
Un uno (1) en esta línea limpia el registro de control y todos los puertos (A, B, y C) se
ponen como modo de entrada.

$% $   | $


La configuración funcional de cada puerto se programa por el software del sistema.

MICROPROCESADORES MICROCONTROLADORES UI 20 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 21 M. C. BENITO BÁEZ SÁNCHEZ

En esencia, el CPU manda una palabra de control al 8255. la palabra de control contiene
información tal como 'modo', 'bit set', 'bit reset', etc.

Cada grupo de control acepta comandos de la unidad lógica de control lectura/escritura,


reciben palabras de control del bus de datos interno y envía comandos apropiados a sus
puertos asociados:

° Grupo de control A: Puerto A y puerto C superior (C7-C4)


° Grupo de control B: Puerto B y puerto C inferior (C3-CO)

La palabra de control únicamente puede ser escrita. No se permite lectura del registro de
palabra de control.

1.4 Lenguaje ensamblador del microprocesador


1.4.1 Registros
1.4.2 Declaración de segmentos
1.4.3 Modos de direccionamiento
1.4.4 Control de dispositivos de entrada/salida
1.4.5 Conjunto de instrucciones
1.4.6 Esqueleto de un programa
1.4.7 Uso de procedimientos

%     % $
El lenguaje ensamblador utiliza unos códigos de operación llamados mnemónicos.
Los mnemónicos son instrucciones las cuales le indican al microprocesador que
tipo de operación debe de realizar, ya sea de carga de rotación o de decremento. 

Se conoce como set de instrucciones al conjunto de instrucciones que es capaz de


entender y ejecutar un microprocesador. El conjunto de instrucciones es para el
microprocesador lo mismo que una tabla de verdad es para una compuerta lógica,
un registro de desplazamiento o un circuito sumador.

$ 
El conjunto de instrucciones de un microprocesador es el conjunto de entradas
binarias que producen acciones definidas durante un ciclo de instrucción. Una
instrucción es un patrón de dígitos binarios el cual debe estar a disposición del
microprocesador en el tiempo y forma que éste lo requiera.

En función del tipo de microprocesador, podrá entender y ejecutar más o menos


instrucciones.

Un programa es una serie de instrucciones que causan que la computadora


realice una tarea en particular.

Las instrucciones se clasifican según su función en:

° Instrucciones de transferencia de datos


° Instrucciones de cálculo

MICROPROCESADORES MICROCONTROLADORES UI 21 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 22 M. C. BENITO BÁEZ SÁNCHEZ

° Instrucciones de transferencia del control del programa


° Instrucciones de control


 
  
Estas instrucciones mueven datos (que se consideran elementos de
entrada/salida) desde la memoria hacia los registros internos del microprocesador,
y viceversa. También se usan para pasar datos de un registro a otro del
microprocesador. Existen algunas instrucciones que permiten mover no sólo un
dato, sino un conjunto de hasta 64 KBytes con una sola instrucción.


 5   
Son instrucciones destinadas a ejecutar ciertas operaciones aritméticas, como por
ejemplo sumar, restar, multiplicar o dividir, o ciertas operaciones lógicas, como por
ejemplo ANO, OR, así como desplazamiento y rotación de bits.


 
      
Permiten romper la secuencia lineal del programa y saltar a otro punto del mismo.
Pueden equivaler a la instrucción Ë # que traen muchos lenguajes de
programación.


  
Son instrucciones especiales o de control que actúan sobre el propio
microprocesador. Permiten acceder a diversas funciones, como por ejemplo
activar o desactivar las interrupciones, pasar órdenes al coprocesador matemático,
detener la actividad del microprocesador hasta que se produzca una interrupción,
etc.

Prácticamente todas las instrucciones están formadas por dos elementos:

° código de operación que indica el tipo de operación se va a realizar


° operandos, que son los datos sobre los que actúa.

Por ejemplo, una instrucción que sume dos números está formado por:

š código de operación que indique "sumar"


š primer número a sumar
š segundo número a sumar

Existen instrucciones que sólo tienen un operando o incluso que no tienen


ninguno, estan formadas solamente por el código de operación.

 + % $ 
Para que un programa pueda ser ejecutado por un computadora, ha de estar
almacenado en la memoria central (memoria RAM). El microprocesador tomará
una a una las instrucciones que lo componen e irá realizando las tareas
correspondientes.

MICROPROCESADORES MICROCONTROLADORES UI 22 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 23 M. C. BENITO BÁEZ SÁNCHEZ

Se denomina ciclo de instrucción al conjunto de acciones que se llevan a cabo en


la realización de una instrucción.

Se compone de dos fases:

° Fase de búsqueda
° Fase de ejecución

# ! 
En esta fase se transfiere la instrucción que se va a ejecutar desde la memoria
central a la unidad de control.

El lenguaje ensamblador no resuelve todos los problemas de programación. Uno


de ellos es la tremenda diferencia entre el set de instrucciones del
microprocesador y las tareas que el microprocesador debe realizar. Las
instrucciones del microprocesador tienden a hacer cosas como: sumar contenidos
de dos registros, desplazar el contenido de un acumulador un bit, o colocar un
nuevo valor en el contador de programa (PC).

Por otro lado, el usuario generalmente quiere que la computadora haga cosas
como: chequear si un valor analógico leído se excedió de un cierto umbral, buscar
y reaccionar ante un comando particular de una consola o teletipo, o activar un
relé en el momento apropiado. El programador de lenguaje ensamblador debe
traducir estas tareas a secuencias de simples instrucciones de microprocesador.
Esta traducción suele ser dificultosa, consume tiempo de trabajo.

Otro inconveniente es la  $  . Cada microprocesador posee su propio


set de instrucciones en el cual está reflejado su arquitectura interna.

Para solucionar este inconveniente se utiliza un lenguaje de programación de alto


o medio nivel, como puede ser el lenguaje C.

   %  $$  %#  


Para hacer la tarea del programador más grata, se usan algunas convenciones.
Cada uno puede adoptar las que más le agraden y ayuden para ser más
productivo. En general, las convenciones son cualquier acción que facilita la
revisión y comprensión de un programa, especialmente el que uno mismo ha
escrito cuando tiene que revisarlo algunos meses después. Comentamos algunas
convenciones que usaremos:

± Los ficheros de código fuente llevarán la extensión *.ASM


± Los ficheros de listado llevarán la extensión *.LST
± Los ficheros de código objeto llevarán la extensión *.OBJ
± Los ficheros de errores llevarán la extensión *.ERR
± Los ficheros ejecutables en formato ‘  % llevarán la extensión *.HEX
± Los mnemónicos escritos en mayúscula hacen que el código escrito sea más
visible.

MICROPROCESADORES MICROCONTROLADORES UI 23 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 24 M. C. BENITO BÁEZ SÁNCHEZ

± En lo posible, usar comentarios explicando cada línea de código.


± Un párrafo de comentarios explica las rutinas o conjunto de instrucciones ya
que los campos de comentarios suelen ser pequeños.
± El espacio entre caracteres se escribe ³_´.
&Y& es más fácil de leer
que
Y.

Recuerde que las convenciones son cualquier cosa que le haga más fácil la
lectura y comprensión de su código, como por ejemplo:

1- Una cabecera estandarizada.


2- Colocar las rutinas en el mismo sitio, todas contiguas.
3- Dibujar diagramas de flujo o escribir seudocódigo.

 $  $  %  % $

ö | %%     % $,


Las instrucciones están divididas en un número de campos, como se muestra:

ETIQUETAS CÓDIGO DE OPERANDO O COMENTARIOS


PERACIÓN DIRECCIÓN
Cierra movf 5,w † lee puerto A
retlw 4 † retorna de subrutina
Espera sleep † bajo consumo

° El campo del ' (   ' es el único que nunca puede estar vacío†
éste siempre contiene una instrucción o una directiva del ensamblador.
° El campo del   o dirección puede contener una dirección o un dato, o
puede estar en blanco.
° El campo del    o de  ) es opcional. El programador
asignará una etiqueta a una línea de instrucción o agregará un comentario
según su conveniencia: normalmente, para hacer más fácil el uso y la lectura†
por ejemplo si va a retomar el trabajo dentro de tres semanas.

Delimitadores (separación entre campos):

° Los campos van separados sólo con espacios y/o tabulaciones. No agregue
nunca otros caracteres (comas, puntos, etc.)
° No utilice espacios extra, particularmente después de comas que separan
operandos. ( Ej: movlw 5,w )
° No use caracteres delimitadores (espacios y tabulaciones) en nombres o
etiquetas.

Etiquetas:
° La etiqueta es el primer campo en una línea en lenguaje ensamblador y
puede    .
° Si una etiqueta está presente, el ensamblador la define como el equivalente
a la dirección del primer byte correspondiente a esa instrucción.

MICROPROCESADORES MICROCONTROLADORES UI 24 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 25 M. C. BENITO BÁEZ SÁNCHEZ

Esta etiqueta puede volver a usarse en otro lugar pero como   de una
instrucción.
El ensamblador reemplazará ésta etiqueta por el valor de cuando fue creada.
Se usan frecuentemente en las instrucciones de salto.
* +     ,     )   -    ' 
* +    $   )  $ . /
   $ 0
Ë Y   1  $     0 /2
  1

Ejemplo:
‘+‘‘ movlw DATO
:
:
goto ‘+‘‘

DATO EQU 05h

La instrucción goto INICIO causa que la dirección de la instrucción con la


etiqueta #
# 0/21 se cargue en el PC. Por lo tanto ésta instrucción
será luego ejecutada.

> +       3    4$5   - 


   )
>  ( ,      .  .3
Y

TABLA2X2 Permitido
+PESO 

6
=>SALIDA +   6
-SALTO +   6
5ALFA +   6
Dato1 Permitido
Dato2 Permitido
Loop_A Permitido

Mnemónicos (códigos de operación):

La tarea principal del ensamblador es la traducción de los códigos de operación en


mnemónico en sus equivalentes binarios. El ensamblador realiza ésta tarea
usando una tabla como si lo hiciésemos ³a mano´.

El ensamblador debe hacer algo más que traducir los códigos de operación.
También debe determinar cuantos operandos requiere la instrucción y de que tipo.

Esto es un poco complejo† algunas instrucciones (como CLRW, SLEEP) no tienen


operandos, otras (ADDLW 13, GOTO FIN) tienen una, mientras que otras (BSF
STATUS,C o BTFSS PORTA,0) requieren dos.

MICROPROCESADORES MICROCONTROLADORES UI 25 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 26 M. C. BENITO BÁEZ SÁNCHEZ

$  :
Algunas instrucciones del lenguaje ensamblador no se traducen directamente a
instrucciones del lenguaje máquina. Éstas instrucciones son directivas para el
ensamblador† éstas asignan al programa ciertas áreas de memoria, definen
símbolos, designan áreas de RAM para almacenamiento de datos temporales,
colocan tablas o datos constantes en memoria y permiten referencias a otros
programas.

Las directivas se utilizan como comandos escritos en el código fuente para realizar
un control directo o ahorrar tiempo a la hora de ensamblar. El resultado de
incorporar directivas se puede ver en el fichero *.LST, después de ensamblar el
programa.

Para usar éstas directivas o pseudo-operandos, el programador las coloca en el


  ' (   ' , y, si lo requiere la directiva, una dirección o dato
en el campo de dirección.

Las directivas más comunes son:


i EQU (Equate)
i ORG (Origin)
i DEFB (Define Byte)
i DEFW (Define Word)
i END (fin del código fuente)

± EQU (Equate - Equivalente):


La directiva EQU permite al programador igualar $ a datos o direcciones.
Esta pseudo-operación se nota EQU. Los nombres utilizados se refieren
generalmente a direcciones de dispositivos, datos numéricos, direcciones de
comienzo, direcciones fijas, posiciones de bits, etc.

PORT_A EQU 5
START EQU 0
CARRY EQU 3
TIEMPO EQU 5

También se puede definir una equivalencia con el nombre de otra equivalencia ya


definida.
PORT_B EQU PORT_A+1
PORT_C EQU PORT_A+2
FIN EQU START+100
FIN2 EQU START+200

Y /    $  . 4          
 (,  

± ORG (Origin - Origen):


La directiva origen (se nota ORG) permite al programador especificar la posición
de memoria donde programas, subrutinas o datos residirán. Los programas y los

MICROPROCESADORES MICROCONTROLADORES UI 26 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 27 M. C. BENITO BÁEZ SÁNCHEZ

datos pueden estar alojados en diferentes áreas de memoria dependiendo de la


configuración de memoria. Rutinas de comienzo, subrutinas de interrupción y otros
programas deben comenzar en locaciones de memoria fijados por la estructura de
microprocesador.

La directiva ORG hace al compilador colocar el código que le sigue en una nueva
dirección de memoria (la salida del compilador no solo coloca los códigos de
operación sino también las direcciones de cada instrucción y datos del programa).

Usualmente se la utiliza para: reset, programas de servicios de interrupción,


almacenamiento en RAM, stack, programa principal, subrutinas.

Por Ej.:
ORG 00h † vector de reset
goto inicializa
ORG 04h † vector de interrupción
goto interr
ORG 05h
inicializa movlw 08h † aquí comienza el programa
:
:
ORG 300h † subrutinas
Subrutina1 :
:
return
Subrutina2 :
:
return

± DEFB (Define Byte), DEFW (Define Word):


Esta directiva le permite al programador ingresar datos fijos en la memoria de
programa. Estos datos pueden ser:

i Tablas de conversión
i Mensajes
i Nombres
i Umbrales
i Comandos
i Factores de conversión
i Identificación de teclas
i Direcciones de subrutinas

Esta directiva trata a los datos como parte permanente del programa.
El formato es muy simple:

MENSAJE DEFB ¶M¶,¶I¶,¶C¶,¶R¶,¶O¶,0


DELAY DEFB 10
DATOS DEFW $A100
DEFW $A400

MICROPROCESADORES MICROCONTROLADORES UI 27 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 28 M. C. BENITO BÁEZ SÁNCHEZ

DEFW $0000
POTENCI DEFB 1,4,9,16,25,36,49,64,81
A

IMPORTANTE: Y      /     7 ) 


   8‘            
(                  
 

Operandos y direcciones:
Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en el
campo de operando o dirección.
m
i Números decimales:
La mayoría de los ensambladores asumen todos los números como decimales a
no ser que se marquen de otra manera.

Por ejemplo: movlw 100

Significa: ³mover el número literal 100 (en decimal) al registro de trabajo W´.

i Otros sistemas de numeración:


Los ensambladores también aceptan números Hexadecimales, octales o binarios.
Esta es la forma de representarlos:

0A00h \ Hexadecimal
$0A00 /

%01001011 \
B¶00100101¶ | Binario
01011010b /

@123 \ Octal
123Q /

D¶250¶ \ Decimal
.250 /

Si se utiliza la forma 0A000H para representar números hexadecimales, hay que


tener en cuenta que el número debe comenzar siempre con un dígito entre 0 y 9
(no acepta comenzar con las letras A a F)† es por eso que el número A000h se lo
escribe 0A000h.
Hexadecimal: es la numeración por defecto. Para mayor claridad para el
programador se utiliza una letra H al final del número. Por ejemplo: 0100h, 0A0H,
5H, 66h.

MICROPROCESADORES MICROCONTROLADORES UI 28 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 29 M. C. BENITO BÁEZ SÁNCHEZ

‘   5    '  4 . )   
    3    8    ' c 9:
!    7,  3 !        
Binario: para escribir números en binario utilizar B¶xxxxxxxx¶ (utilizar comillas
simples).
Por ejemplo: B¶01101001¶ , b¶11110000¶.
Decimal: puede utilizar la forma: D¶200¶ (tambien con comillas simples) o la
forma corta, anteponiendo un punto al número decimal. Esta es la forma utilizada
en todos los programas realizados por microchip.
Por ejemplo: D¶112¶ d¶10¶ .200 .100
#        ;     )  , $ 
Y  .<       7,  3     
 . 5   = $  8     3   7  $
       >>   
8    . 3 . )    /     
  (    (   c 9: 

i Nombres:
Los nombres pueden aparecer en el campo de operando† éstos son tratados como
el dato que representan. (Ver directiva EQU).

i Códigos de caracteres:
Algunos ensambladores permiten el uso de caracteres en ASCII.
Por ejemplo:
CHAR EQU ¶t¶
MOVLW ¶R¶

i Expresiones lógicas y aritméticas:

Los ensambladores permiten combinaciones de datos con operandos especiales,


aritméticos o lógicos.

Éstos operandos se llaman    .


Por ejemplo: REG1 EQU 05h
VALOR EQU 20h
movlw VALOR+2
addwf REG1,1
addwf REG1+1,1

En estos casos el compilador utilizará el resultado de sumar


(VALOR+2) o (REG1+1) como operando.

 %  %
Algunos ensambladores les permiten incluir o excluir partes de programa,
dependiendo de condiciones que existan en el tiempo de compilación.

MICROPROCESADORES MICROCONTROLADORES UI 29 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 30 M. C. BENITO BÁEZ SÁNCHEZ

La forma típica es:

IF CONDICION
:
:
:
ENDIF
Ejemplo:

SINk EQU 1 † (cambiar por 0 en caso necesario)


IF SINK=1
BCF PORTA,0
ELSE
BSF PORTA,0
ENDIF

En este caso el valor de SINK hará que el compilador utilice


distintas instrucciones de código.

Si la CONDICION es verdadera en el tiempo de compilación, las instrucciones que


están entre IF y ENDIF se incluirán en el programa.

Los usos típicos son:


i Para incluir o excluir variables extras.
i Para incluir código de diagnóstico en condiciones de testeo
(DEBUG).
i Para permitir datos de distintos tamaños.

V 
    
      
 
  



 
        

% 
Algunos ensambladores permiten incluir código fuente (partes de programas)
desde otros archivos.

Por ejemplo:
#INCLUDE ³DISPLAY.ASM´
#INCLUDE ³p16f84.inc´

Le dice al compilador que incluya el código que se encuentra en el archivo


V‘8: ? c como si fuese parte del propio programa.

Esto se utiliza para reutilizar códigos realizados con anterioridad. En el ejemplo del
siguiente punto lo vemos más claro.

 # 
La directiva #define permite definir un nombre (cadena de caracteres) para que se
comporte como otra cadena de caracteres válida.

MICROPROCESADORES MICROCONTROLADORES UI 30 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 31 M. C. BENITO BÁEZ SÁNCHEZ

Ejemplos:
#define CINCO 5
Cada vez que se utilice la palabra CINCO será reemplazada en el
momento de la compilación por el número 5.

#define PIN1 PORTA,1


Cada vez que aparezca la palabra PIN1 en el código, ésta será
interpretada como PORTA,1 que es una instrucción válida.

#define BANCO1 BSF STATUS,RP0


Cada vez que se utilice la palabra BANCO1, en realidad estará utilizando
la instrucción BSF STATUS,RP0

Esta directiva es muy util para hacer el código más fácil de leer y entender.
En el Apéndice A se adjunta un ejemplo de directivas if, define, macros e include.

 $
A veces ocurren secuencias de instrucciones particulares en los programas que
son repetitivas. Estas secuencias de instrucciones se pueden eliminar utilizando
c 


Las macros permiten asignarle un nombre a una secuencia de instrucciones.


Luego se utiliza el nombre de la macro en el programa como si se usase la
secuencia de instrucciones anterior.

Las macros no son lo mismo que las subrutinas. El código de las subrutinas
aparece una sola vez en un programa y la ejecución del programa salta a la
subrutina. En cambio, el ensamblador reemplaza cada ocurrencia del nombre de
la macro con la secuencia especificada de instrucciones. Por consiguiente la
ejecución del programa no salta a la macro como una subrutina.

Veamos un ejemplo utilizando los conceptos vistos hasta ahora:

 / ³MULX10.ASM´ :
MULX10 MACRO † comienzo de la macro
MOVF tiempo,W † guarda el tiempo en W
RLF tiempo † multiplica por 2
RLF tiempo † multiplica por 2
RLF tiempo † multiplica por 2
ADDWF tiempo † le suma una vez más
ADDWF tiempo † le suma una vez más
ENDM † fin de la macro

 / @YYc8:  cA

#INCLUDE ³MULX8.ASM´
tiempo EQU 0Ch
resultado EQU 0Dh

MICROPROCESADORES MICROCONTROLADORES UI 31 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 32 M. C. BENITO BÁEZ SÁNCHEZ

MOVLW 20
MOVWF tiempo
MULX10
MOVWF resultado
END

Si ensamblamos el ³YYc8:  c´ notaremos que el listado final
(EJEMPLO.LST) queda de la siguiente forma:

tiempo EQU 0Ch


resultado EQU 0Dh
MOVLW 20
MOVWF tiempo
MOVF tiempo,W † guarda el tiempo en W
RLF tiempo † multiplica por 2
RLF tiempo † multiplica por 2
RLF tiempo † multiplica por 2
ADDWF tiempo † le suma una vez más
ADDWF tiempo † le suma una vez más
MOVWF resultado
END

|$%   %%7 $ $


Con el siguiente ejemplo veremos un error muy común al utilizar macros:

MOVLW .1 † TEMP=1
MOVWF TEMP †´
DECF TEMP,F † Z se va a 1
BTFSS STATUS,Z † salta si o si
MOVFF AUX1,AUX2 † c6
MOVWF PORTA † ...

En la línea de la Macro está el error. B  ,   C


Los saltos no pueden saltar macros! Porque las macros están compuestas por
más de una instrucción, y el salto se produciría dentro de la misma.

El código anterior con la macro incrustada sería:

MOVLW .1 † TEMP=1
MOVWF TEMP †´
DECF TEMP,F † Z se va a 1
BTFSS STATUS,Z † salta si o si
MOVF AUX1,W † <- anterior macro
MOVWF AUX2 † <- ´
MOVWF PORTA † ...

Otro tema importante, que aquí también observamos, es que las macros pueden
modificar registros (en este caso W) en forma oculta al programador.

MICROPROCESADORES MICROCONTROLADORES UI 32 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 33 M. C. BENITO BÁEZ SÁNCHEZ

En el ejemplo anterior, PORTA se debería cargar con 1, que aparentemente era el


valor de W, pero la macro lo ha modificado† por consiguiente tenemos otro error.

$|$  $718
El Z80 es una versión apreciablemente mejorada tanto en circuitería como en
características de programación del antiguo modelo INTEL 8080, el Z80 resulta
ser un microprocesador más rápido y sencillo en el desarrollo de sistemas ya que
solo usa una fuente de alimentación de +5 Volts, contiene íntegramente todo el
conjunto de instrucciones del 8080, lo cual le permite ejecutar todos los programas
escritos para el CPU 8080, contiene el Z80 una expansión adicional de 80
instrucciones de ahí se deriva su nombre, su repertorio suma un total de 156
instrucciones.

Mientras algunos diseñadores de INTEL trabajaban en el 8085A como una mejora


del 8080A, algunos de los diseñadores que trabajaron en el 8080, se salieron de
Intel, fundaron la compañía Zilog INC, y diseñaron el Z80. El cual se introdujo al
mercado en 1976.

El microprocesador Z-80 fue el primero de la tercera generación, se fabrico con


tecnología NMOS, tiene bus de datos de 8 bits. El Z-80 está basado en el 8080,
pero apreciablemente mejorado, tanto en el software como en el hardware.

El Z-80 resulto ser un microprocesador mucho más rápido y fácil de usar, ya que
solo requerían una fuente de alimentación de 5v. y toda la circuitería de soporte
estaba incluida en el circuito integrado. Su conjunto de instrucciones contenía las
78 instrucciones del 8080, lo que le permitía ejecutar todos los programas escritos
para este último, así como 80 instrucciones mas, en total 158.

!
   
  718

Un sistema con Z80 se completa con el empleo de memorias estándar de lectura y


memorias estáticas o dinámicas de lectura y escritura, además pertenecen al

MICROPROCESADORES MICROCONTROLADORES UI 33 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 34 M. C. BENITO BÁEZ SÁNCHEZ

sistema, puertos de entrada y salida paralelo, interfaces de comunicación serie,


sistemas contadores temporizadores y circuitos de acceso directo a memoria.

El Z-80 posee más registros internos en forma de direccionamiento que la mayoría


de los otros microprocesadores de 8 bits, estas características le permiten
procesar una mayor cantidad de información en un menor tiempo.

El microprocesador Z80 contiene las siguientes unidades funcionales†

1).- Unidad aritmética y lógica


2).- El contador de programa
3).- El apuntador del stack
4).- Registros de propósito general
5).- Registros de índice
6).- Registros de interrupciones
7).- Registro de banderas
8).- Registro para refrescar memorias dinámicas

%   $* (%+ & %'



La Unidad Aritmética y Lógica es la sección dentro de la CPU encargada de hacer
todas las operaciones aritméticas y lógicas. Uno de los operandos se encuentra
en el acumulador (registro A), y el otro proviene normalmente de la memoria, o de
otro registro. El resultado se almacena en el acumulador, y el grupo de FLIP-
FLOP denominados registro de Estado o registro de Banderas cambia de estado
según las operaciones realizadas.
$ $   &#%    $ '
Las banderas existen físicamente dentro de la CPU están agrupados lógicamente
formando un registro. Las Banderas del Z80 son los siguientes:

b7 b6 b5 b4 b3 b2 b1 b0
S Z X H X P/V N C

°   7&7', Toma el valor 1 si el resultado de una operación es


cero.
°   
&', Toma el valor 1 si el resultado de una operación
es negativo.
°    &', Esta bandera es afectada por las instrucciones de
desplazamiento y es puesto en 1 ó 0 según el valor del bit desplazado.
También es afectado por las operaciones aritméticas.
°   | 
  
& 9'&|': En el caso de
paridad, se pone en 1 si el resultado de una operación posee un número
par de unos. Cuando la bandera P/V se usa para representar overflow, la
bandera se pone en 1 si ocurre un overflow después de una operación
aritmética.
°   , Son dos Flip - Flop que no pueden ser examinados por las
instrucciones de salto condicional. El Z80 los usa para las operaciones
BCD. H representa el rebase que genera considerando los cuatro bits

MICROPROCESADORES MICROCONTROLADORES UI 34 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 35 M. C. BENITO BÁEZ SÁNCHEZ

menos significativos del resultado y N es la bandera de resta, la cual se


activa para indicar si la última instrucción ejecutada fue suma o resta. En el
caso general, una instrucción de resta coloca en 1 la bandera N y una
instrucción de suma lo coloca en 0.

$ $ |$|+ |  %
°    |   & | ' , Es un registro de 16 bits que indica la
dirección de la próxima instrucción ejecutar. Las instrucciones del Z80
pueden contar de uno, dos, tres o cuatro Bytes.
° $


 &  ', Es un registro de 8 bits que puede ser
cargado para especificar el byte más significativo de una dirección de
memoria. El byte menos significativo es proporcionado por el dispositivo
que solicita la interrupción.
° $
    
 &$', Es un registro especial diseñado
para proporcionar un refresh automático de las memorias RAM dinámicas.
° $
  
,El registro de instrucciones tiene por misión
almacenar el código de operación de la instrucción leída desde
memoria.Este código es comparado con los códigos de cada instrucción
que reconoce el microprocesador. Si el código es válido se ejecuta sino se
marca un error de sintaxis.
%    |($%
Su objetivo es mantener la secuencia adecuada y el control de todas las
operaciones del microprocesador. Atiende y responde a todas las señales
externas.
 $|  $ %  %718
El Z80 es un microprocesador de 8 bits y cuenta con 158 instrucciones y 10
modos de direccionamiento. El circuito integrado del microprocesador Z80 se
deposita en un encapsulado Dual In Line de 40 terminales, de las cuales 5 son
únicamente de entrada, 24 son de salida y 8 son bidireccionales, además, existen
dos que sirven para conectar la fuente de alimentación y otra más que es la
entrada del reloj.

 

 
  718

MICROPROCESADORES MICROCONTROLADORES UI 35 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 36 M. C. BENITO BÁEZ SÁNCHEZ

Todas sus terminales tienen características eléctricas compatibles con la familia


TTL el intervalo del voltaje de entrada para 0 lógico (VIL) es ±0.3 V a 0.8 V, el
intervalo de voltaje de entrada para 1 lógico (VIH)es de 2.0 a V , el voltaje
máximo de salida para 0 lógico (VLO) es de 0.4 V y el voltaje mínimo de salida para
1 lógico (VOH)es 2.4 V. La corriente de salida para 0 lógico (IOH) es 1.8 mA y la
corriente de salida para 1 lógico (IOH) es ±250 m A (se supone positiva la corriente
en una terminal del CI si esta entra).

El Z80 opera con una fuente de alimentación de +5.0 Volts conectada a la terminal
11, (pin 11), la tierra de la fuente se conecta a la terminal GND, (pin 29), el
consumo típico de corriente para el Z80 es de 90 mA.

Cuenta con 18 registros de 8 bits y 4 registros de 16 bits, todos los registros del
Z80 se implementan con una RAM estática, los registros incluyen 2 bancos de 6
registros de propósito general, que se usan individualmente como registros de 8
bits, o en pares como registros de 16 bits, existen también 2 bancos de registros
denominados "acumulador" y "banderas", además cuenta con 6 registros de
propósito especial, 4 registros de 16 bits, PC, SP, IX e IY, y 2 registros de 8 bits, el
registro del refresh "R" y el registro de interrupciones "I", la aritmética de 8 bits de
las funciones, y las instrucciones lógicas de la CPU se ejecutan en la ALU.La ALU
realiza las siguientes funciones:

1. Sumar.
2. Restar.
3. Función lógica AND.
4. Función lógica OR.
5. Función lógica OR-EX.
6. Comparación.
7. Desplazamientos a la derecha y a la izquierda.
8. Incrementar bytes.
9. Decrementar bytes.
10. Poner bits en uno lógico.
11. Poner bits en cero lógico y
12. Comprobar el estado de los bits

LÍNEAS DE DIRECCIONES (A0 - A15), Pines 30-40, 1-5 respectivamente


Se forman con 16 líneas de direcciones, tienen la facultad de establecerse en
tercer estado, estas señales proporcionan las direcciones correspondientes a
intercambios de datos entre la memoria, la CPU y los puertos de los periféricos, la
capacidad de direccionamiento con 16 bits es de 64 Kbytes y 256 puertos de
entrada y salida, son activas en estado alto, los 8 bits menos significativos se usan
para permitirle al usuario seleccionar los 256 puertos E/S, (A0-A7), en donde A0
es el bit menos significativo.

LÍNEAS DE DATOS (DO - D7), Pines 14, 15, 12, 8, 7, 9, 10 y 13


Se forman con 8 líneas de datos bidireccionales con capacidad del tercer estado,
son activas en nivel alto, se utilizan para el intercambio de datos con la memoria, y
periféricos de E/S.

MICROPROCESADORES MICROCONTROLADORES UI 36 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 37 M. C. BENITO BÁEZ SÁNCHEZ

CICLO DE MAQUINA UNO (M1),


Salida activa en nivel bajo, indica que en este ciclo de máquina uno el
microprocesador va a obtener el código operacional de una instrucción, en las
instrucciones que tienen un código operacional de 2 bytes esta señal se opera al
obtener cada uno de los bytes del código operacional, al igual que para indicar el
reconocimiento de un ciclo de interrupción cuando ocurre (IORQ)'.

REQUERIMIENTO DE MEMORIA (MREQ)', Pin 19


Salida activa en nivel bajo, esta señal indica una petición que interrelaciona a la
memoria con la CPU, obtiene una dirección valida de las líneas de
direccionamiento, esta terminal tiene capacidad del tercer estado.

REQUERIMIENTO DE E/S (IORQ), Pin 20


Es salida triestado activa en nivel bajo, esta señal indica que la mitad baja del bus
de direcciones mantiene una dirección válida de E/S, para efectuar una operación
de lectura o escritura de E/S, se genera esta señal cuando el ciclo de maquina 1
(M1) reconoce una interrupción, indica que el vector de respuesta de la
interrupción se coloca en el bus de datos, las operaciones de reconocimiento de
interrupción ocurren durante el ciclo de maquina 1, mientras que las operaciones
de E/S nunca se producen durante este ciclo.

LECTURA (RD), Pin 21


Salida triestado activa en nivel bajo, indica que la CPU desea leer datos desde la
memoria de un dispositivo externo de E/S, el dispositivo E/S se direcciona a la
memoria o al periférico, se usa esta terminal para dirigir los datos al bus de datos
de la CPU.

ESCRITURA (WR)', pin 22


Salida triestado activa en nivel bajo, indica que el bus de datos de la CPU va a
obtener datos válidos para ser almacenados en la memoria o en algún dispositivo
de E/S.

REFRESCO DE LA MEMORIA DINÁMICA (RFSH)', Pin 28


Salida activa en nivel bajo, indica que los siete bits inferiores de las líneas de
direccionamiento contienen una dirección válida de refresco de memoria, se utiliza
para el mantenimiento de datos en memorias dinámicas, con esta se efectúa una
lectura de refrescamiento para todas las memorias dinámicas.

PARO (HALT), Pin 18


Salida que activa en nivel bajo, indica que la CPU realiza una instrucción por
software de paro (HALT), y que espera una interrupción (NMI)' o (INT)' antes de
que continue la operación, mientras permanezca en este estado la CPU ejecuta
operaciones NOP, para mantener activo el refresco de las memorias dinámicas, al
aplicarse un reset se continua con la operación.

ESPERA (WAIT), Pin 24


Es una entrada activa en nivel bajo, le indica al microprocesador que la memoria
direccionada o los dispositivos periféricos de E/S no son tan rápidos como para
realizar una transferencia de datos a la velocidad de la CPU, o no están listos para

MICROPROCESADORES MICROCONTROLADORES UI 37 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 38 M. C. BENITO BÁEZ SÁNCHEZ

una transferencia de información, la CPU continua con el estado de espera


durante todo el tiempo que esta terminal es activa, esto les permite a los otros
dispositivos sincronizarse con la CPU.

REQUISICIÓN DE INTERRUPCIÓN MASCARABLE (INT), Pin 16


Entrada activa en nivel bajo, esta terminal se acciona con dispositivos E/S
externos, una requisición (INT)' se atiende al final de la instrucción que se ejecuta,
si el enable interno del Flip Flop de interrupción IFF1 controlado por software se
encuentra habilitado, y si la requisición de bus no esta activa, al aceptar la CPU
una interrupción envía una señal de reconocimiento, la petición de E/S se realiza
durante el ciclo de máquina 1, al principio del siguiente ciclo de instrucción, esta
petición solo es valida bajo control del programa interno, reconociendo la CPU tres
modos diferentes de interrupción.

INTERRUPCIÓN NO MASCARABLE (NMI)', Pin 17


Entrada que se activa con un flanco de bajada mediante un impulso que identifica
una interrupción obligada, posiciona al contador de programa (PC) en la dirección
0066h desde donde continua el proceso, esta tiene una prioridad más alta que la
interrupción (INT)' y siempre se reconoce al final de la instrucción que se ejecuta,
independientemente del estado del IFF1, el contador de programa PC se
almacena automáticamente en el stack pointer externo de forma que el usuario
regrese al programa en el mismo punto del que fue interrumpido.

REHABILITACIÓN (RESET), Pin 26


Entrada que se activa con un flanco de bajada mediante un impulso, obliga a la
CPU a reiniciar su actividad, coloca al contador de programa (PC) en la localidad
de inicio de memoria 0000h, desde donde empieza el proceso, durante este
tiempo el bus de direcciones y el bus de datos adquieren el estado de alta
impedancia y todas las terminales de control de salida adquieren el estado
inactivo.

REQUERIMIENTO DE LAS TERMINALES DE LA CPU (BUSRQ), Pin 25


Esta entrada es activa en nivel bajo, le indica a la CPU que coloque todas sus
líneas en estado de alta impedancia, (tan pronto el ciclo de maquina 1 actual
termine), a petición del periférico externo que desea tomar el control del sistema,
regresa el control a la CPU cuando esta señal (BUSRQ)' pasa al nivel alto, se
utiliza para pedir que el bus de direcciones, el bus de datos y las terminales de
salida triestado del bus de control vayan a un estado de alta impedancia de tal
forma que otros dispositivos controlen esos buses.

ENTREGA DE LAS TERMINALES DE LA CPU (BUSAK)', Pin 23


Salida activa en nivel bajo, es una indicación para el periférico que efectúa una
petición (BUSRQ)' de que su petición ha sido concedida por parte del
microprocesador, sirve para indicar al dispositivo que solicita este reconocimiento,
que el bus de direcciones, el bus de datos y el bus de las terminales de control
triestado han sido puestos en su estado de alta impedancia y que el dispositivo
externo puede ahora controlar estas terminales.

RELOJ (CK), Pin 6

MICROPROCESADORES MICROCONTROLADORES UI 38 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 39 M. C. BENITO BÁEZ SÁNCHEZ

Entrada configurada por un tren de impulsos útiles, es la diferencia que permite la


secuencia de tiempos de operación, se implanta físicamente con un oscilador de
onda cuadrada cuya frecuencia depende del tipo de características de la CPU
Z80, requiere oscilación de una fase con niveles TTL, una forma de satisfacer
todos los requerimientos de voltaje es por medio de una resistencia de activación
"pull up" de 330 ohms conectada entre +Vcc y la terminal de salida de un oscilador
implantado con circuitos TTL que generen oscilaciones.

ALIMENTACIÓN POSITIVA DE +5 VOLTS (Vcc), Pin 11


Esta es una entrada de alimentación de tensión de +5 volts con un 5 % de
tolerancia.

TIERRA (GND), Pin 29


Terminal de alimentación negativa, requiere un potencial de 0.0 volts que sirven de
referencia para la interconexión de los dispositivos.

 $  ,


El bus de direcciones está formado por 16 líneas que van desde la línea A0 hasta
A15. Estas líneas son de 3 estados, de modo que cuando el bus de direcciones
está inactivo, se encuentran en el estado de alta impedancia.

Cuando el microprocesador maneja dispositivos de E/S, las 8 líneas menos


significativas de este bus contienen la dirección del dispositivo, la cual puede tener
un valor entre 0 y 255. Por otro parte, las líneas menos significativas de este bus
contienen, durante el lapso de ejecución de la instrucción, el valor presente en el
registro de Refresco (Refresh).

  ,
El bus de datos está formado por 8 líneas, de la línea D0 a D7. Este bus es
bidireccional permitiendo la transferencia de información de la CPU a MEMORIA o
hacia dispositivos de E/S y viceversa, también es un bus de 3 estados.

%  ,
El microprocesador Z80 requiere solamente un voltaje de alimentación de 5
V, con un margen de error 5%, y consume una corriente máxima de 200 mA.

 
 
 

 |7-18 
Cualquier oscilador que cumpla con las especificaciones de la entrada puede
servir para generar la señal de reloj del Z-80. Si se va a operar el
microprocesador debajo de la frecuencia máxima y no se necesita que el valor de
la frecuencia de oscilación sea muy preciso o estable, se puede utilizar un
oscilador RC como el circuito siguiente. Este circuito es muy útil en las etapas de
desarrollo y prueba de un sistema, porque siendo un oscilador de frecuencia
variable permite al diseñador disminuir el ritmo de operación de sistema
(incrementando los valores de R y C). Sin embargo, no se recomienda cuando el
microprocesador se use en aplicaciones en las que se requiera un conteo preciso
de tiempo. Los valores de R y C establecen la frecuencia de salida.

MICROPROCESADORES MICROCONTROLADORES UI 39 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 40 M. C. BENITO BÁEZ SÁNCHEZ

Generador de reloj con oscilador RC de frecuencia variable

Para frecuencias cercanas al valor máximo se requiere un oscilador controlado


por un cristal de cuarzo, como el circuito que se muestra a continuación. En este
caso la frecuencia de oscilación del cristal determina la frecuencia de la señal de
reloj, y gracias a la estabilidad del cristal se puede mantener un tiempo de
ejecución constante. Cuando no se tiene un cristal cuya frecuencia de oscilación
más alta y después dividir la señal de salida del circuito oscilador por medio del flip
± flop o controladores hasta obtener el valor requerido.

 %  $%
$% % ,
El MPU Z80 posee dos señales asociadas con el control de los buses de dirección
y datos. Estas señales son la señal de entrada BUSRQ y la señal de salida
BUSAK.

La señal BUSRQ es generada por un dispositivo externo para obtener el control de


los buses y realizar una operación de acceso directo a memoria.

Cuando un dispositivo externo solicita el control de los buses colocando en 0 la


línea BUSRQ, el microprocesador concluye la instrucción que estaba ejecutando y
responde mediante la señal de reconocimiento BUSAK.

$% %  $ ,


El Z80 posee 4 señales relacionadas con las operaciones de control de la
memoria. Ellas son las señales MREQ, RD, WR y RFSH.

La señal MREQ es una señal de 3 estados que se activa en 0 indicando que el


bus de direcciones contiene una dirección válida.

La señal RD (Read) se activa cuando el microprocesador requiere leer un dato de


la memoria o de un puerto. Indica que el bus de datos se está usando como
entrada.

La señal WR (Write) se genera cuando el microprocesador va a escribir un dato


en la memoria o en un puerto. Indica que el bus de datos se está usando como
salida y que en sus líneas se encuentra al dato que va a ser almacenado.

Tanto la señal RD como la señal WR provienen de terminales de salida con tercer


estado.

MICROPROCESADORES MICROCONTROLADORES UI 40 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 41 M. C. BENITO BÁEZ SÁNCHEZ

La señal RFSH no está asociada con la operación normal de la memoria sino que
se usa solamente con memoria dinámica. Las memorias dinámicas requieren que
se refresque periódicamente la información almacenada para que no se pierda.

$%  $

MRE RFSH RD WR
Leer memoria 0 0
Escribir en memoria 0 0
Ciclo de refresh (  bits ) 0 0

$%  , 
El Z80 usa la señal IORQ para informar a los dispositivos de E/S que los 8 bits
menos significativos del bus de direcciones contienen una dirección de E/S válida

 %  %  ,
En este grupo se encuentran las señales M1, RESET, WAIT y HALT.

%  :  O 
   !
   & 
   ', indica que el
microprocesador va a obtener el código de operación de una instrucción.
En las instrucciones que tiene un código de operación de dos bytes, la señal M1
se genera al obtener cada uno de los bytes del código de operación.
La señal RESET es una señal de entrada a la CPU y que se activa en ³cero´ para
efectuar una operación de reestablecimiento general.

% 
  

&':es uno de los controles más necesarios
en un microprocesador, los registros y flip ± fllops internos adoptan valores
aleatorios y la operación del circuito resulta impredecible. Por lo tanto, el
microprocesador debe reestablecerse para colocarlo en un estado inicial conocido.

Los efectos producidos por el pulso de reestablecimiento son los siguientes

El contador del programa se carga con ceros PC 0000H


El flip - flop de interrupciones se pone en cero IFF 0
El registro del vector de interrupciones se carga con ceros I 00H
El registro de refrescado se carga con ceros R 00H
Se establece el modo de interrupción 0.

Así, en esencia, el restablecimiento del microprocesador equivale a un salto


incondicional la dirección 0000H producido por hardware. Además, mientras
RESET está en ³cero´ lógico, tanto el bus de datos como el bus de direcciones se
ponen a flotar (estado de alta impedancia) y todas las líneas de salida del bus de
control pasan a su estado inactivo.

MICROPROCESADORES MICROCONTROLADORES UI 41 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 42 M. C. BENITO BÁEZ SÁNCHEZ

 $   


La mayoría de las instrucciones ejecutadas por un microprocesador requieren
datos. La palabra $    se refiere al mecanismo por medio del
cual un microprocesador tiene acceso a los lugares donde se encuentra los datos
que va a procesar y a los lugares donde se almacenaran los resultados de las
operaciones.

A través del estudio de las instrucciones del Z-80 se ha observado que la mayoría
de ellas actúan sobre los datos almacenados en los registros internos y en la
memoria. Este microprocesador ofrece diez tipos de direccionamiento, en los
cuales están incluidos todas las modalidades de las instrucciones. Estos son:

1.-INMEDIATO 6.- EXTENDIDO


2.-INMEDIATO EXTENDIDO 7.-RELATIVO
3.-IMPLICITO O INHERENTE 8.-INDEXADO
4.-REGISTRO 9.-PAGINA CERO
5.-REGISTRO INDIRECTO. 10.-BIT.

$     ,
Este modo no constituye un direccionamiento propiamente dicho, pues aquí la
instrucción no contiene ninguna dirección, en su lugar figura un operando sobre el
cual se realiza la operación que indica la instrucción, no hay necesidad del ciclo de
memoria (ejecute) de ejecución, una denominación más precisa es la de operando
inmediato.

Una instrucción con direccionamiento inmediato es la que contiene en el byte 2 o


en el byte 3 de la propia instrucción en el dato de la transferencia, es decir, el dato
es parte integral de los bytes que constituyen la instrucción.

OP-CODE <----- uno o más bytes


OPERANDO
Este tipo de direccionamiento es útil al cargar o efectuar una operación aritmética
o lógica con un dato constante. Ejemplo: Para cargar 07h en el acumulador se
utiliza la instrucción LD A, N
x 3E LD A,N
x+1 N A <--- 07h
El código operacional de la instrucción es 3Eh y el segundo byte es el dato que se
va a cargar en el acumulador, en este caso N = 07h, los movimientos que realiza
el CPU Z80 son los siguientes:

En general este tipo de direccionamiento lo utilizan las instrucciones aritméticas y


lógicas de 8 bits, ejemplo de estas son: ADD N, XOR N, AND N, etc.



En este tipo de instrucción el operando mismo es el segundo o tercer byte.
Se usa para efectuar operaciones con valores constantes
11000110
N

MICROPROCESADORES MICROCONTROLADORES UI 42 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 43 M. C. BENITO BÁEZ SÁNCHEZ

Byte 0
Byte 1
C6H=opcode
Valor inmediato
ADD A,N† sumarle el valor N al acumulador

$       ,


Como su nombre lo indica, este modo de direccionamiento es una extensión del
direccionamiento inmediato, sólo que ahora el operando esté formado por los
bytes que siguen al código de operación. este tipo de direccionamiento permite
cargar con un dato de 16 bits un registro par y obtiene la dirección donde continua
el procesamiento en forma inmediata. Esto permite incluir datos de 16 bits. El
primero de los bytes del dato o dirección contienen los 8 bits menos significativo.

Este modo de direcionamiento lo emplean las instrucciones que cargan los


registros pares con un valor de 16 bits y las instrucciones de transferencia de
control tales saltos absolutos y llamadas a subrutina . por ejemplo para saltar a la
dirección 5678H se puede utilizar la instrucción JP pq en donde la dirección ³pq´
es el numero de 16 bits 5678H.
x OPCODE
 
x 1 B TE BAJO
  
x B TE ALTO
Este modo de direccionamiento lo utilizan las instrucciones del grupo "cargar 16
bits" y del grupo de instrucciones "saltos, llamadas y regresos", (JP, CALL y RET).

El primero de los dos bytes del dato o de la dirección contiene los bits menos
significativos (LSB) y el segundo byte contiene los bits más significativos (MSB).
Ejemplo: 
1
1 
x 68 NN = 7 68
x
 7

Los movimientos de esta instrucción son los siguientes:

El contenido de la localidad "x" apuntada por el contador de programa (PC) se


carga en el registro de instrucciones IR y se incrementa el contador de programa,
(PC = PC 1).
La unidad de control después de decodificar la instrucción ordena que el contenido
de la localidad "x 1" apuntada por el PC se cargue en el registro B, y se
incrementa el contador de programa ( PC = PC 1)
La unidad de control ordena que el contenido apuntado por el PC se cargue en el
registro C, se incrementa el contador de programa, (PC = PC 1) y el PC apunta
a la siguiente instrucción a ejecutarse.
Inmediato extendido Misma situación que el anterior, pero para 16 bits
11111101 N LSB
00100001 N MSB
FDH Valor inmediato de 16 bits
1H
}
opcode

MICROPROCESADORES MICROCONTROLADORES UI 43 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 44 M. C. BENITO BÁEZ SÁNCHEZ

}
LD IY,NN


$   |% $  ,
El direccionamiento implícito se refiere a las instrucciones donde el código de
operación automáticamente implica que determinado registro o registros contiene
los operandos. El código de operación es fijo, es decir no tiene campos variables.
Con este direccionamiento se puede nombrar el conjunto de instrucciones
aritméticas y lógicas, donde el acumulador siempre actúa como uno de los
operandos y como destino de los resultados. Como ejemplo está la instrucción
CPL que obtiene el complemento a uno del acumulador.

Este modo de direccionamiento se refiere a operaciones en donde el código


operacional implica automáticamente a uno o más registros de la CPU, el código
operacional es fijo y no tiene campos variables de tal forma que la instrucción
siempre ejecuta la misma operación.Ejemplos de este modo de direccionamiento
son las instrucciones CPL y RRA.

El código operacional de CPL es 2Fh, ésta instrucción toma el contenido del


acumulador, lo complementa a uno, cambia los ceros por unos y los unos por
ceros, y deposita el resultado en el acumulador, las bandeas de condiciones no se
afectan, la fuente y el destino siempre son fijos.

$    $ $,


En este modo de direccionamiento la instrucción utiliza a los registros internos
para recibir o proporcionar un dato. El código de operación tiene un campo o
grupo de bits variable por medio del cual se especifica el o los registros
involucrados en la operación.

Las instrucciones que usan este tipo de direccionamiento son las de transferencia
de datos, las aritméticas, la instrucción LD r,r¶ ordena que el contenido del registro
³r´ se cargue en el registro ³r´, donde ³r´ y ³r´¶ pueden ser cualquiera de los
registros internos de 8 bits.

Esta instrucción ordena que el contenido del registro "s" se deposite en el registro
"r".
r registro destino
s registro fuente

"r" y "s" pueden ser cualquiera de los registros activos o primarios de 8 bits de la
CPU Z80, el movimiento de la información de esta instrucción es:

El contenido de la localidad apuntada por el PC se deposita en el registro de


instrucciones IR, la unidad de control ordena copiar en el registro r el contenido del
registro s, PC = PC + 1, y el contador de programa apunta a la siguiente
instrucción a ejecutarse.

MICROPROCESADORES MICROCONTROLADORES UI 44 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 45 M. C. BENITO BÁEZ SÁNCHEZ

Los grupos de instrucciones que utilizan este tipo de direccionamiento de registro,


son los de aritmética y lógica de 8 bits y de 16 bits como son:
Rotar, Girar, Poner en uno, Poner en cero y Probar bits

$     


Este direccionamiento, el byte que sigue al código de operación da la instrucción
especifica un desplazamiento. Este desplazamiento está representado como un
numero de 8 bits en complemento a dos, que se suma a uno de los dos registros
índices (IX o IY) para formar la dirección efectiva de la localidad de memoria que
se va a usar como operando en la instrucción. El contenido del registro índice no
se altera. para representar el direccionamiento indexado se utiliza la notación
(IX + d) o ( IY+ d ), donde ³d´ es el desplazamiento y los paréntesis indican que el
valor calculado es un apuntados de memoria.

Este modo de direccionamiento resulta ser el más apropiado para la construcción


de estructuras de dato tale como tablas y listas. Además al igual que el
direccionamiento relativo, el direccionamiento indexado hace que un programa sea
localizable.

Un ejemplo de direccionamiento indexado es la instrucción LD A,(IX+7H), que


ordena cargar en acumulador el contenido de la localidad de memoria apuntada
por el registro índice más el desplazamiento. Si se considera que en IX hay
13F0H y dado que el desplazamiento especificado es 07H, la dirección de la
localidad de memoria será 13F0H+07H=13F7H.

Con este modo se obtiene la dirección efectiva haciendo la suma de:

El contenido de un registro especial del Z80 denominado "registro de índice".


El registro de índice se suma con el operando que proporciona la instrucción.

La indexación permite tratar bucles durante un programa, si se dispone de varios


registros de índice se pueden añadir varios bucles, normalmente el registro de
índice se incrementa por software después de cada operación.

Las instrucciones que utilizan direccionamientos indexado usan byte que sigue al
código operacional para especificar el desplazamiento que suma a uno de los dos
registros de índice del Z80, para formar la dirección efectiva de la memoria, el
contenido del registro de índice no se altera.

Ejemplo:

MICROPROCESADORES MICROCONTROLADORES UI 45 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 46 M. C. BENITO BÁEZ SÁNCHEZ

REGISTRO DE INDICE + OPERANDO = DIRECCION EFICAZ


1200h + 08h = 1208h

Los movimientos son:


El contenido de la localidad 1000h apuntada por el PC se deposita en el registro
I R, PC = PC + 1, la unidad de control reconoce que debe cargar otra vez el
contenido de la localidad 1001h sobre el I R, PC = PC + 1.

El código operacional en IR le ordena a la unidad de control leer en un registro


temporal el contenido de la localidad apuntada por el PC, PC = PC + 1.

La unidad de control envía por el bus de direcciones la dirección que resulta al


sumar el registro de índice x con el contenido del registro temporal, lee el
contenido de esa localidad y lo carga en el acumulador. 

$     


Aunque no es considerado un modo de direccionamiento autentico, el
direccionamiento de bit se menciona por el gran número de instrucciones que
posee el Z-80 para manipulación de bits. Estas instrucciones permiten efectuar
operaciones a nivel de bits, sobre los contenidos de localidades de memoria o de
los registros internos seleccionados por uno de los tres posibles tipos de
direccionamiento: registro indirecto e indexado. Tres bits de códigos de operación
de las instrucciones con direccionamiento de bits especifican cual de los 8 bits del
operando (registro o memoria) es involucrado en la operación.

%     % $


El lenguaje ensamblador utiliza unos códigos de operación llamados mnemónicos.
Los mnemónicos son instrucciones las cuales le indican al microprocesador que
tipo de operación debe de realizar, ya sea de carga de rotación o de decremento.
Dichas instrucciones se han clasificado de la siguiente manera:

Grupo aritmético de 16 bits.


Grupo de carga de 8 bits.
Grupo de entrada y de salida.
Grupo de llamada y de retorno.
Grupo de prueba.
Grupo de rotación y desplazamiento.
Grupo de saltos.
Grupo lógico y aritmético de 8 bits.
Grupos de control de la CPU y aritméticos de uso general.
Instrucciones de carga de 16 bits.

MICROPROCESADORES MICROCONTROLADORES UI 46 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 47 M. C. BENITO BÁEZ SÁNCHEZ

Intercambio.

Grupo aritmético de 16 bits.


ADD HL, ss ADD HL, ss
SBC HL, ss ADD IX, pp
ADD IY, rr INC ss
INC IX INC IY
DEC ss DEC IX
DEC IY

Grupo de carga de 8 bits.


LD r, r´ LD A, (BC)
LD r, n LD A, (DE)
LD, (HL) LD A, (nn)
LD r, (IX + d) LD (BC), A
LD r, (IY + d) LD (DE), A
LD (HL), r LD (nn), A
LD (IX + d), r LD A, I
LD (IY + d), r LD A, R
LD (HL), n LD I, A
LD (IX + d), n LD R, A
LD (IY + d), n

Grupo de entrada y de salida.


IN A, (n)
IN r, (C)
INI
INIR
IND
INDR
OUT (n), A
OUT (C), r
OUTI
OTIR
OUTD
OTDR

Grupo de llamada y de retorno.


CALL nn
CALL cc, nn
RET
RET cc
RET
RETN
RST p

Grupo de prueba.
BIT b, r

MICROPROCESADORES MICROCONTROLADORES UI 47 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 48 M. C. BENITO BÁEZ SÁNCHEZ

BIT B, (HL) Z
BIT b, (IX + d)
BIT b, (IY + d)b
SET b, rb
SET b, (HL)
SET b, (IX + d)
SET b, (IY + d)
RES b, m

Grupo de rotación y desplazamiento.


RLCA
RLA
RRCA
RRA
RLC r
RLC
RLC (IX + d)
(IX + d
RLC (IY + d)
RL m
RRC m
RR m
SLA m
SRA m
SRL m
RLD A
RRD A

  
JP nn
JP cc, nn SI cc es verdad PC = nn
JR e PC = PC + e
JR C, e SI C = 0 continuar sino PC = PC + e
JR NC, e SI C = 1 continuar sino PC = PC + e
JR Z, e SI Z = 0 continuar sino PC = PC + e
JR NZ, e SI Z = 1 continuar sino PC = PC + e
JP (HL) PC = (HL)
JP (IX) PC = IX
JP (IY) PC = IY
DJNZ, e
-----
 
 
"
1
 
ADD, r A=A+r
ADD A, n A=A+n
ADD A, (HL) A = A + (HL)
ADD A, (IX + d) A = A + (IX + d)
ADD A, (IY + d) A = A + (IY + d)
ADC A, s A = A + s + CY
SUB s A=A-s

MICROPROCESADORES MICROCONTROLADORES UI 48 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 49 M. C. BENITO BÁEZ SÁNCHEZ

SBC A, s A = A ± s - CY
AND s A = A \/ s
OR s A = A /\ s
XOR s A=A+s
CP s A-s
INC r r=r+1
INC (HL) (HL) = (HL) + 1
INC (IX + d) (IX + d) = (IX + d) + 1
INC (IY + d) (IY + d) = (IY + d) + 1
DEC m m=m-1

Grupos de control de la CPU y aritméticos de uso general.


CPL A A
NEG A 0-A
CCF CY CY
SCF CY 1
NOP
DAA
HALT
DI FF 0
EI IFF 1
IM 0
IM 1
IM 2


  O;
 
LD dd, nn dd nn
LD IX, nn IX nn
LD IY, nn IY nn
LD HL, (nn) H (nn + 1), L (nn)
LD dd, (nn) dd H (nn +1), dd L (nn)
LD IX, (nn) IX H (nn +1), IX L (nn)
LD IY, (nn) IY H (nn +1), IY L (nn)
LD (nn), HL (nn + 1) H, (nn) L
LD (nn), dd (nn + 1) dd H, (nn) dd L
LD (nn), IX (nn + 1) IX H, (nn) IX L
LD (nn), IY (nn + 1) IY H, (nn) IY L
LD SP, HL SP HL, SP IX
LD SP, IY SP IY
PUSH qq (SP ±2) qq L, (SP-1) qq H
PUSH IX (SP ±2) IX L, (SP-1) IX H
PUSH IY (SP ±2) IY L, (SP-1) IY H
17) POP qq qq H (SP + 1), qq L (SP)
18) POP IY IY H (SP + 1), IY L (SP)
19) POP IX IX H (SP + 1), IX L (SP)



 
 

MICROPROCESADORES MICROCONTROLADORES UI 49 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 50 M. C. BENITO BÁEZ SÁNCHEZ

EX DE, HL DE HL
EX AF, AF´ AF AF´
EXX (BC) (BC´), (DE) (DE´), (HL) (HL´)
EX (SP), HL H (SP + 1), L (SP)
EX (SP), IX IX H (SP + 1), IX L (SP)
EX (SP), IY IY H (SP + 1, IY L (SP)
LDI (DE) (HL), DE DE + 1, HL HL + 1, BC BC ± 1
LDIR (DE) (HL), DE DE + 1, HL HL + 1, BC BC ± 1
LDD (DE) (HL), DE DE ± 1, HL HL ± 1, BC BC ± 1
LDDR (DE) (HL), DE DE ± 1, HL HL ± 1, BC BC ± 1
CPI A ± (HL), HL HL + 1, BC BC ± 1
CPIR A ± (HL), HL HL + 1, BC BC ± 1
CPD A ± (HL), HL HL ± 1, BC BC ± 1
CPDR A ± (HL), HL HL ± 1, BC BC ± 1

CODIGO DE INSTRUCCIONES DE PROGRAMACIÓN MKE Z80


CBF8 SET 7,B 8E ADC A,(HL)
CBF9 SET 7,C DD8EXX ADCA,(IX+d)
CBFA SET 7,D FDEXX ADCA,(IY+d)
CBFB SET 7,E 8F ADC A,A
CBFC SET 7,H 88 ADCA,B
CBFD SET 7,L 89 ADCA,C
CB26 SLA (HL) 8A ADCA,D
DDCBXX26 SLA(IX+d) 8B ADCA,E
FDCBXX26 SLA(IY+d) 8C ADCA,H
CB27 SLA A 8D ADCA,L
CB20 SLA B CEXX ADCA,n
CB21 SLAC ED4A ADCHL,BC
CB22 SLAD ED5A ADCHL,DE
CB23 SLAE ED6A ADCHL,HL
CB24 SLAH ED7A ADCHL,SP
CB25 SLAL 86 ADDA,(HL)
CB2E SRA(HL) DD86XX ADDA,(IX+d)
DDCBXX2E SRA(IX+d) FD86XX ADDA,(IY+d)
FDCBXX2E SRA(IY+d) 87 ADDA,A
CB2F SRAA 80 ADDA,B
CB28 SRAB 81 ADDA,C
CB29 SRAC 82 ADDA,D
CB2A SRAD 83 ADDA,E
CB2B SRAE 84 ADDA,H
CB2C SRAH 85 ADDA,L
CB2D SRAL C6XX ADDA,n
CB3E SRLA 9 ADDHL,BC
DDCBXX3E SRLB 19 ADDHL,DE
FDCBXX3E SRLC 29 ADDHL,HL
CB3F SRLD 39 ADDHL,SP
CB38 SRLE DD09 ADDIX,BC
CB39 SRLH DD19 ADDIX,DE
CB3A SRLL DD29 ADDIX,IX

MICROPROCESADORES MICROCONTROLADORES UI 50 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 51 M. C. BENITO BÁEZ SÁNCHEZ

CB3B SUB(HL) DD39 ADDIX,SP


CB3C SUB(IX+d) FD09 ADDIY,BC
CB3D SUB(IY+d) FD19 ADDIY,DE
96 SRLL FD29 ADDIY,IY
DD96XX SRLA FD39 ADDIY,SP
FD96XX SRLB A6 AND(HL)
97 SUBA DDA6XX AND(IX+d)
90 SUBB FDA6XX AND(IY+d)
91 SUBC A7 AND A
92 SUBD A0 AND B
93 SUBE A1 AND C
94 SUBH A2 AND D
95 SUBL A3 AND E
D6XX SUBn A4 AND H
AE XOR (HL) A5 AND n
DDAEXX XOR(IX+d) E6XX BIT 0,(HL)
FDAEXX XOR(IY+d) CB46 BIT 0,(IX+d)
AF XORA DDCBXX46 BIT 0,(IY+d)
A8 XORB FDCBXX46 AND L
A9 XORC CB47 BIT 0,A
AA XORD CB40 BIT 0,B
AB XORE CB41 BIT 0,C
AC XORH CB42 BIT 0,D
AD XORL CB43 BIT 0,E
EEXX XORn CB44 BIT 0,H
FB EI 77 LD(HL,A)
E3 EX(SP),HL 70 LD(HL,B)
DDE3 EX(SP),IX 71 LD(HL,C)
FDE3 EX(SP),IY 72 LD(HL,D)
8 EXAF,AF 73 LD(HL,E)
EB EXDE,HL 74 LD(HL,H)
D9 EXX 75 LD(HL,L)
76 HALT 36XX LD(HL,n)
ED46 IM O DD77XX LD(IX+D),A
ED56 IM 1 DD70XX LD(IX+D),B
ED5E IM 2 DD71XX LD(IX+D),C
ED78 IN A,© DD72XX LD(IX+D),D
ED40 IN B,( C) DD73XX LD(IX+D),E
ED48 IN C,© DD74XX LD(IH+D),H
ED50 IN D,© DD75XX LD(IX+D),L
ED58 IN E,© DD36XXYY LD(IX+D),n
ED60 IN H,© FD77XX LD,A(BC)
ED68 IN L,© FD70XX LDDE
34 INC (HL) FD71XX LDHL
DD34XX INC (IX+d) FD72XX LDIX+D
FD34XX INC (IY+d) FD73XX LDIY+D
3C INC A FD74XX LDnn
4 INC B FD75XX LDA,A
3 INC C FD36XXYY LDA,B

MICROPROCESADORES MICROCONTROLADORES UI 51 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 52 M. C. BENITO BÁEZ SÁNCHEZ

0C INC D 32XXYY LDA,C


14 INCDE ED43XXYY LDA,D
13 INCE ED53XXYY LDA,E
1C INC H 22XXYY LDA,H
24 INC HL DD22XXYY LDA,Di
23 INC IX FD22XXYY LDA,L
DD23 INC IY ED73XXYY LDA,n
FD23 INC L A LDA,R
2C INC SP 1A LDB,H,L
33 IN A,(n) 7E LDIX+D
DBXX IN L,© DD7EXX LDIY+D
EDAA IND FD7EXX LDB,A
EDBA INDR 3AXXYY LDB,B
EDA2 INI 7F LDA,B
EDB2 INIR 78 LDA,HL
C3XXYY JP nn 79 LDnnSP
E9 JP (HL) 7A LDA,A
DDE9 JP(IX) 7B LDA,E
FDE9 JP(IY) 7C LDA,H
DAXXYY JP C,nn ED57 LDA,Di
FAXXYY JP M,nn ED LDA,L
D2XXYY JPNC,nn 3EXX LDA,N
C2XXYY JPNZ, nn ED5F LDA,R
F2XXYY JPP,nn 46 LDB,HL
EAXXYY JPPE,nn DD46XX LDIX+D
E2XXYY JPPO,nn FD46XX LDIY+D
CAXXYY JPZ,nn 47 LDB,A
38XX JRC,E 40 LDB,B
30XX JR NC,E 41 LDB,C
20XX JRNZ,E 42 LDB,D
28XX JR E 43 LDB,E
18XX JRNC,E 44 LDB,H
2 LD(BC),A 45 LDB,L
12 LD(DE),A 6XX LDB,n
ED4BXXYY LDBC,(nn) 6F LDL,A
01XXYY LDBCnn 68 LDL,B
4E LDC(HL) 69 LDL,C
DD4EXX LDC,(IX+d) 6A LDL,D
FD LDC,(IY+d) 6B LDL,E
4F LDC,A 6C LDL,H
48 LDC,B 6D LDL,L
49 LDC,C 2EXX LDL,n
4A LDC,D ED4F LDR,A
4B LDC,E ED7BXXYY LDSP,(nn)
4C LDC,H F9 LDS,HL
4D LDC,L DDF9 LDSP,IX
0EXX LDC,n FDF9 LDSP,nn
56 LDD,(HL) 31XXXYY LDD
DD56XX LDD,(IX+d) EDA8 LDDER

MICROPROCESADORES MICROCONTROLADORES UI 52 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 53 M. C. BENITO BÁEZ SÁNCHEZ

FD56XX LDD,(IY+d) EDB8 LDI


57 LDD,A EDA0 LDIR
509 LDD,B EDB0 NEG
51 LDD,C ED44 NOP
52 LDD,D 0 OR(HL)
53 LDD,E B6 OR(IX+d)
54 LDD,H DDB6XX OR8IY+d9
55 LDD,L FDB6XX ORA
16XX LDD,n B7 ORB
ED5BXXYY LDE,(nn) B0 ORC
11XXYY LDDE,nn B1 ORD
5E LDE,(HL) B2 ORE
DD5EXX LDE,(IX+d) B3 ORH
FE5EXX LDE,(IY+d) B4 ORL
5F LDE,A B5 Orn
58 LDE,B F6XX OTDR
59 LDE,C ED8B OTIR
5A LDE,D EDB3 OUT(C,A)
5B LDE,E ED79 OUT(C,B)
5C LDE,H ED41 OUT(C,C)
5D LDE,L ED49 OUT(C,E)
1EXX LDE,n ED51 OUT(C,H)
66 LDH,(HL) ED59 OUT(C,L)
DD66XX LDH,(IX+d) ED61 OUT(n,a)
FD66XX LDH,(IY+d) ED69 OUTD
67 LDH,A D3XX OUTTPOP
60 LDH,B EDAB POPBC
61 LDH,C EDA3 POPDE
62 LDH,D F1 POPHL
63 LDH,E C1 POPIX
64 LDH,H D1 POPIY
65 LDH,H E1 PUSHAF
26XX LDH,L DDE1 PUSHBC
2AXXYY LDH,n FDE1 PUSHDE
21XXYY LDHL,(nn) F5 PUSHHL
ED47 LDHL,nn C5 PUSHIX
DE2AXXYY LDI,A D5 PUSHIY
DD21XXYY LDIX,(nn) E5 RES0,(HL)
FD2AXXYY LDIX,nn DDE5 RESO,(IX+d)
FD21XXYY LDIY(nn) FDE5 RES0,(IY+d)
6E LDIYnn CB86 LDSIY
DE6EXX LDL,(HL) DDCBXX86 OUT(C,D)
FED6EXX LDL,(IY+d) FDCBXX86 OUTI
CB87 RES0,A RES 6,(IX+d)
CB80 RES0,B RES6,(IY+d)
CB81 RES0,C RES6,A
CB82 RES0,D RES6,B
CB83 RES0,E RES6,C
CB84 RES0,H RES6,D

MICROPROCESADORES MICROCONTROLADORES UI 53 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 54 M. C. BENITO BÁEZ SÁNCHEZ

CB85 RES0,L RES6,E


CB8E RES1,(HL) RES6,H
DDCBXX8E RES1,IX+d RES6,L
FDCBXX8E RES1,(IY+d) RES7,(HL)
CB8F RES,1A RES7,(IX+d)
CB88 RES1,B RES7,(IY+d)
CD89 RES1,C RES7,A
CD8A RES1,D RES7,B
CD9B RES1,E RES7,C
CD8C RES1,H RES7,D
CB8D RES1,L RES7,E
CB96 RES2,(HL) RES7,H
DDCBXXX96RES2,(IX+d) RES7,L
FDCBXX96 RES2,(IY+d) RET
CB97 RES2,A RETC
CB90 RES2,B RETM
CB91 RES2,C RETNC
CB92 RES2,D RETNZ
CB93 RES2,E RETP
CB94 RES2,H RETPE
CB95 RES2,L RETPO
CB9E RES3,(HL) RETZ
DDCBXX9E RES3(IX+d) RETI
FDCBXX9E RES3,(IY+d) RETN
CB9F RES3A RL(HL)
CB98 RES3B RL(IX+d)
CB99 RES3C RL(IY+d)
CB9A RES3D RLA
CB9B RES3E RLB
CB9C RES3H RLC
CB9D RES3L RLD
CBA6 RES4,(HL) RLE
DDCBX RES4,(IX+d) RLH
CBA7 RES4(IY+d) RLL
CBA0 RES4,A RLA
CBA1 RES4,A RLC(HL)
CBA2 RES4,C RLC(IX+d)
CBA3 RES4,D RLC(IY+d)
CBA4 RES4,E RLCA
CBA5 RES4,H RLCB
CBAE RES4,L RLCC
DDCBXXAE RES5,(HL) RLCD
FDCBXXAE RES5,(IX+d) RLCE
CBAF RES5,A RLCH
CBA8 RES5,B RLCL
CBA9 RES5,C RLCA
CBAA RES5,D RLD
5BAB RES5,E RR(HL)
CBAC RES5,H RR(IX+d)

MICROPROCESADORES MICROCONTROLADORES UI 54 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 55 M. C. BENITO BÁEZ SÁNCHEZ

CBAD RES5,L RRA


CBB6 RES6,HL RRD

%$ # 
ELECTRONICA DIGITAL BASICA
JOHN A.DEMPSEY
EDIT: ALFA OMEGA

EL MUNDO DE LA COMPUTACION
CARLOS GISPERT
EDIT: OCEANO
VOLUMEN 2

FUNDAMENTOS DE ELECTRONICA DIGITAL


FLOYD
EDIT:LIMUSA

INTERCONECCION DE PERIFERICOS A MICROPROCCESADORES


VARIOS AUTORES EN COORDINACIÓN DE JOSE MOMPI POBLET
EDIT:MARCOMBO
3 EDICION

MICROPROCESADORES PROGRAMACION E INTERCONECCION


JOSE MARIA URUÑUELA M.
EDIT: MC GRAW HILL
2 EDICION.

INTEL PERIPHERALS
CURRENT HANDBOOKS

MICROPROCESADORES, PROGRAMACIÓN E INTERCONEXIÓN


URUÑUELA
MC GRAW HILL

ECG SEMICONDUCTORS
PHILIPS
EDITION 1996

TESIS ³MANUAL DE PRÁCTICAS REFERENTE A LOS PUERTOS PARALELO Y


SERIE DEL SISTEMA MÍNIMO Z-80´
RICARDO MARTINEZ ROSAS
I.T.O. 1995

SOFTWARE

WINDOWS
WORD 97
PAIN BRUSH

MICROPROCESADORES MICROCONTROLADORES UI 55 M. C. BENITO BAEZ SANCHEZ


MICROPROCESADORES MICROCONTROLADORES UI 56 M. C. BENITO BÁEZ SÁNCHEZ

MICROPROCESADORES MICROCONTROLADORES UI 56 M. C. BENITO BAEZ SANCHEZ