Está en la página 1de 665

UNIVERSIDAD DE ORIENTE

NCLEO DE ANZOTEGUI
ESCUELA DE INGENIERA Y CIENCIAS APLICADAS
DEPARTAMENTO DE ELECTRICIDAD

Anlisis, Diseo y Simulacin de


Sistemas Basados en Microprocesador

REALIZADO POR
LUIS DANIEL URDANETA GUEVARA

TRABAJO PRESENTADO COMO REQUISITO PARCIAL


PARA ASCENDER A LA CATEGORA DE
PROFESOR AGREGADO
Puerto la Cruz, noviembre del 2005

ii

Dedicatoria
A mi esposa: Leyda Thays
A mis hijas: Ana Cristina y Luz Cristina

Quienes supieron soportar con paciencia y consideracin las numerosas y largas sesiones de trabajo necesarias para la culminacin de este proyecto.

iii

Prefacio
El presente trabajo ha sido realizado con un doble fin: el primero es cumplir
con lo establecido en el articulo 30 del Reglamento de Personal Docente y de Investigacin de la Universidad de Oriente, y el segundo servir como texto gua en la asignatura Sistemas de Microprocesadores I (60-4953), la cual tiene carcter obligatorio
para estudiantes cursantes de la carrera de Ingeniera Elctrica en el Departamento de
Electricidad de la Universidad de Oriente.
El contenido de las asignaturas Introduccin a los Circuitos Digitales y Laboratorio de Circuitos Digitales ponen en contacto al estudiante con circuitos integrados
(CI) fabricados utilizando tecnologas de Integracin a Escala Pequea, o SSI (2 hasta 50 transistores en un CI) e Integracin a Escala media, o MSI (50 hasta 500 funciones transistorizadas en un CI). Lo cual abarca el uso de puertas bsicas y flip
flops, as como contadores, comparadores y registros de desplazamiento, entre otras
funciones lgicas.
En estos cursos se ensean los principios y tcnicas de anlisis y diseo de sistemas digitales que capacitan al estudiante para disear y construir circuitos electrnicos digitales combinatorios y/o secuenciales que realizan funciones de control e
instrumentacin en equipos y sistemas industriales, mediante el cableado de componentes electrnicos discretos y CIs de propsito especfico fabricados con tecnologa
TTL y CMOS. A partir de estos mdulos fundamentales se organizan sistemas digitales capaces de usar informacin proveniente del mundo real representada en forma
de valores discretos para resolver problemas de ingeniera de mediana complejidad.
El diseo de un sistema digital mediante el mtodo de cableado de componentes electrnicos presenta como desventaja fundamental que cualquier variacin en
las especificaciones originales de diseo que representen una mejora en el funcionamiento del circuito requiere la introduccin de nuevos componentes y la realizacin
de nuevas interconexiones.
El material vertido en este libro capacita al estudiante para disear y construir
sistemas digitales ms eficientes y verstiles y, en cierto modo, inteligentes, que pueden usarse en aplicaciones distintas sin necesidad de introducir modificaciones en la
estructura fsica del circuito. Tales sistemas aceptan informacin proveniente de las
entradas y la procesan segn lo establece una secuencia de instrucciones o programa
almacenado en memoria, de modo que una variacin del programa determinar la
funcin que realice el sistema digital. Esta evolucin en el diseo lgico se debe a los
avances en la tecnologa de fabricacin de CI como: Integracin a Escala Grande, LSI
(500 hasta 50000 transistores) e Integracin a Escala Muy Grande, VLSI (ms de
50000 funciones transistorizadas en un CI).

iv

JUSTIFICACIN
Aunado al espectacular desarrollo de la tecnologa de fabricacin de circuitos
integrados, se ha establecido un incremento sostenido de las posibilidades de aplicacin de los productos de la microelectrnica. Del desarrollo de sistemas dedicados a
satisfacer necesidades especificas del sector militar e industrial, la microelectrnica
ha emergido como una tecnologa de base con presencia universal, significando con
esto que sus efectos se han hecho sentir en todos los mbitos de la vida del ser humano: en la ciencia, economa, industria, poltica y administracin, en el desarrollo del
arte y medios de entretenimiento, en las tcnicas de asistencia mdica, en la enseanza, y en la educacin.
La microelectrnica es, en esencia, la tecnologa disponible ms eficiente para
procesar informacin, permitiendo el desarrollo y la produccin de sistemas de tratamiento electrnico de datos que son capaces de: representarlos, procesarlos, almacenarlos y transmitirlos por medio de seales elctricas. Como tcnica de vanguardia
para el tratamiento de la informacin, la microelectrnica abarca los sectores donde
es necesario realizar funciones de: adquirir y agrupar datos, procesarlos, almacenarlos
y entregar resultados del procesamiento.
En la historia del desarrollo de la industria de productos LSI, tiene lugar preponderante un dispositivo de relativo bajo costo, adecuada flexibilidad, y gran potencia de procesamiento: el microprocesador, el cual es el equivalente LSI de la unidad
central de un procesador de un computador, y el cual se ha insertado aceleradamente
en los sectores productivos a lo ancho y largo del planeta, siendo utilizado con profusin en el tratamiento de datos, procesamiento de seal, supervisin y control de procesos, e instrumentacin. La disponibilidad de una CPU integrada y con arquitectura
poco compleja hizo posible la produccin en serie de un nuevo y verstil sistema de
cmputo de bajo costo denominado microcomputador (C). Adems, el P es un
componente de presencia casi obligatoria en el diseo de sistemas empotrados.
Un sistema empotrado es una aplicacin basada en P diseada con un propsito especfico y cuyo hardware y programa de control no es modificado por el usuario. Desde hace algunos aos, los sistemas empotrados han adquirido cada vez mayor
importancia debido a su amplia utilizacin en el medio industrial y en muchas actividades de nuestra vida diaria, aunque usualmente no los percibimos. Ejemplos de estos
sistemas puede ser encontrado en relojes con alarma, sistemas de sonidos, televisores,
telfonos celulares y automviles, entre muchos otros. Este desarrollo, ha sido sostenido por los continuos avances de la tecnologa de semiconductores concretados con
la produccin de chips cada vez ms pequeos y rpidos.
El uso extendido del microprocesador en sistemas electrnicos inteligentes ha
introducido cambios notables en las tcnicas de diseo convencional debido a que es
fundamental que el ingeniero en funciones posea los conocimientos que lo habilite
para resolver problemas complejos usando esta tecnologa. Debe ser capaz de disear

circuitos en bloques y conectarlos como una unidad funcional o sistema, teniendo la


capacidad de establecer la arquitectura del microcomputador, interconectando correctamente la unidad de procesamiento central (CPU) con los dispositivos externos a
ste, y generar el programa de aplicacin que controla el equipo diseado.
El advenimiento de la era del P ha forzado adems cambios substanciales en
el arquetipo educativo de la Ingeniera Elctrica. La extraordinaria importancia que el
P ha alcanzado en el desarrollo de sistemas y equipos, establece la necesidad que el
Ingeniero Electricista adquiera un conocimiento slido sobre los conceptos tericos
relacionados con la arquitectura y programacin de microprocesadores, de modo que
lo habilite para poder analizar y desarrollar aplicaciones reales de sistemas electrnicos basados en microprocesadores.

ALCANCE
Como ingenieros, tenemos plena conciencia de las posibilidades universales
de aplicacin de los Ps. Como docentes, nos preocupa determinar como ensear en
forma clara, comprensible, sencilla y eficiente, la teora y prctica de los sistemas
basados en Ps.
En general, las aplicaciones de los microprocesadores pueden agruparse en
dos categoras principales:
a.- En la primera, el P se usa como una unidad central de proceso, junto con
dispositivos de memoria y de entrada y salida, perifricos tales como teclado, monitor, y otros equipos externos, los cuales en su conjunto integran
un microcomputador de propsito general. Estos sistemas son usualmente
diseados y ofrecidos al pblico por empresas establecidas. El PC compatible IBM y el Macintosh son ejemplos de tales sistemas; stos son apropiados para el tratamiento de cantidades relativamente grandes de datos usando Ps modernos como el Pentium VI/3.0 GHz y el Power PC. Los usuarios tpicos de estos equipos comnmente se limitan a desarrollar programas de aplicacin en lenguajes de alto nivel, y rara vez realizan diseo de
hardware.
b.- La segunda corresponde a los sistemas empotrados donde uno o ms Ps
asociados con otros dispositivos LSI o VLSI, son usados para disear un
sistema dedicado a realizar una tarea especifica, como: adquisicin de datos, procesamiento de seal, control e instrumentacin.
Aunque los sistemas dentro de este grupo presentan todas las caractersticas
propias de un microcomputador, tienen poca potencia para el procesamiento de datos, estando dirigidos desde el punto de vista de su arquitectura y

vi

de su programacin a resolver un problema concreto. En este tipo de equipos, el diseador debe usar criterios de diseo de hardware y de programacin de Ps. Especficamente, debe confrontarse con trasductores de
seal, convertidores anlogo - digital y digital - anlogo, y otros dispositivos y modos de interconexin entre el P y el mundo real; debiendo tener
conocimiento de tcnicas tpicas para comunicacin con perifricos como
consultas sucesivas, manejo de interrupciones, y acceso directo a memoria.
En esta categora el uso de dispositivos de E/S programables y el uso del
lenguaje ensamblador son algunas de las tareas a las cuales el diseador
debe prestar especial atencin.
Considerando la primera modalidad, el programa de estudios de la carrera de
Ingeniera Elctrica de la Universidad de Oriente incluye un nmero suficiente de
asignaturas que permiten la formacin del estudiante en el rea de Programacin de
Computadores, siendo comn el uso de lenguajes de alto nivel como Pascal, C, y
ADA. Adems, el estudiante de la mencin de sistemas digitales es entrenado en el
manejo instrumental de programas de aplicaciones especficas, tales como: paquetes
de anlisis matemtico, simuladores de circuitos electrnicos y de sistemas de control, adems de aplicaciones de inteligencia artificial, y otros programas relacionados
con otras reas del conocimiento.
El material de estudio que se presenta en este trabajo es producto de notas de
clase realizadas por el autor durante los ltimos 12 aos y pretende servir como texto
gua de la asignatura Sistema de Microprocesadores, curso que se propone la formacin del estudiante para el diseo de sistemas de la segunda categora, enseando
las tcnicas conocidas para el diseo de la arquitectura y la programacin de sistemas
empotrados. Debe ser obvio que este es un curso introductorio que debe se complementado con la asignatura Sistemas de Microprocesadores II (60-4953) y Laboratorio
de Sistemas de Microprocesadores (60-5911), donde se introducen los microcontroladores, se analizan las tcnicas de interconexin en sistemas basados en microprocesadores y se verifica experimentalmente los conceptos y tcnicas aprendidas en los
cursos tericos.
La separacin de las aplicaciones generales basadas en microprocesadores en
dos modalidades, es en realidad una estrategia instruccional. Al final de su periodo de
formacin, nuestro egresado estar capacitado para realizar el diseo y construccin
de sistemas inteligentes donde generalmente uno o ms Ps de bajo nivel realizan
control local y utilizan los recursos ofrecidos por microcomputadores comerciales
tipo PC. En este caso, el estudiante debe conocer no solo la arquitectura del microprocesador seleccionado para su aplicacin, sino que debe comprender la arquitectura
del PC, las tcnicas de programacin y la manera de establecer la comunicacin entre
los equipos.
Como se expuso, este libro se escribe para usarse como gua texto en un curso
introductorio de microprocesadores dentro del plan de estudios de la mencin de Sis-

vii

temas Digitales de la carrera de Ingeniera Elctrica. Para la exposicin de la teora


general de Ps y sus aplicaciones prcticas se usa el P de 8 bits INTEL 8085A. La
corporacin INTEL no es la nica casa fabricante de Ps, ni los que produce son necesariamente los mejores. En realidad, no existe un P mejor que otro, el ptimo es
aquel que rena las caractersticas y especificaciones requeridas por un proyecto en
particular.
El uso de un P real, en lugar de uno hipottico, permite cierta profundizacin
en las caractersticas, ventajas y limitaciones de un dispositivo comercial, as como
ilustrar su uso en aplicaciones del mundo real. Adems, es seguro que con la comprensin de la teora bsica de funcionamiento de un P, el modo de operacin de
cualquier otro P se entender con esfuerzo mnimo.

POR QU EL 8085?
Es de vital inters para el autor justificar la seleccin del P 8085A como dispositivo comercial a utilizar, para presentar los principios fundamentales de los microprocesadores y la arquitectura y programacin de aplicaciones prcticas basadas
en Ps. Por qu se selecciona un microprocesador de 8 bits, diseado treinta aos
atrs, en lugar de un microcontrolador moderno o un P de 16 32 bits con mayor
potencia de cmputo.
En principio, se considera necesario el uso de un P y no un Ctrl para iniciar
al estudiante en el conocimiento de las tcnicas bsicas de diseo de sistemas empotrados, porque en la prctica, un microcontrolador no es ms que una aplicacin basada en microprocesador. De modo, que en el fiel cumplimiento del proceso enseanza
aprendizaje, deben conocerse primero los conceptos y tcnicas de diseos bsicas
antes de intentar comprender el modo de funcionamiento de aplicaciones especificas
ms complejas. En concreto, el proceso de fabricacin de un Ctrl se inicia con el
diseo de un computador basado en P el cual posteriormente es integrado en el encapsulado del circuito. El diseador del CTRL debe usar las tcnicas conocidas para
disear el subsistema de memoria, la estructura de E/S y la lgica de seleccin y decodificacin de direcciones. Adems, debe realizar la interconexin a la CPU de circuitos perifricos como temporizadores y conversores de datos.
El uso de un microprocesador en el proceso de enseanza hace muy fcil para
el educando comprender la arquitectura y el modo de funcionamiento, no solo de microcontroladores, sino de microprocesadores modernos de alto desempeo. Adems,
al final de un curso que use un microprocesador para introducir los conceptos del
tpico de sistemas empotrados, el estudiante estar capacidad de desarrollar el cdigo
VHDL de una aplicacin prctica, un microcontrolador por ejemplo, que despus ser
descargado sobre una FPGA.
Tambin es cierto que en el desarrollo de sistemas empotrados dedicados a resolver problemas prcticos de ingeniera tpicos del medio industrial, sea usual que la

viii

aplicacin diseada deba usar los recursos de un sistema de propsito general, para lo
cual, se requiere interconectar al PC la tarjeta empotrada diseada y escribir los programas de comunicacin en ambos sistemas y cualquier otro cdigo de procesamiento
o presentacin de informacin en el PC. En los casos que el prototipo use la capacidad de procesamiento del PC para realizar sus funciones, la aplicacin debe ser diseada como una extensin del sistema microcomputador. Por ejemplo para un sistema
programables de adquisicin y control de datos analgicos y digitales las entradas/salidas de los circuitos integrados de la aplicacin deben ser interconectados por
medios de puertos al P del PC.
Hasta los sistemas Pentium II, el usuario tena acceso directo a los buses de
datos, direcciones y control del P por medio de ranuras ISA. De este modo, poda
usar las tcnicas convencionales para disear la aplicacin. A partir de los sistemas
basados en Pentium III, el acceso a los buses del P se realiza a travs del bus PCI,
pero igual deben usarse la tcnicas bsicas para el diseo de subsistemas de memoria
y estructuras de puertos de E/S. En cualquier caso, un conocimiento de cmo se organiza y disea un sistema basado en microprocesador simplificar las tareas propias
del desarrollo del proyecto
Lo expuesto en prrafos anteriores se simplifica diciendo que usar un microprocesador en lugar de un microcontrolador para introducir los conceptos propios del
desarrollo de sistemas empotrados representa una ventaja para el estudiante, al permitrsele aprender como se organizan e interconectan las unidades funcionales que integran un sistema microcomputador. De otra forma, sera como iniciar un curso de electrnica de audio a partir de los amplificadores de potencia integrados. en lugar de
hacerlo con el funcionamiento del diodo, del transistor bipolar y los amplificadores
bsicos.
Por otra parte, en asignaturas avanzadas como Organizacin y Programacin
de Computadores I y II, los estudiantes de la mencin de Sistemas Digitales de la
carrera de Ingeniera Elctrica completan su formacin con tpicos relacionados con
el uso de microprocesadores de 16, 32, y 64 bits. En estos cursos el computador moderno es presentado como un sistema complejo constituido por un conjunto de unidades funcionales o subsistemas organizados en forma jerrquica. De modo que es
necesario que el estudiante tenga en su conducta de entrada, conocimientos bsicos de
sistemas basados en microprocesadores, para un mejor aprovechamiento de los temas
tratados.
Con lo expuesto en prrafos anterior se considera que se justifica la seleccin
de un P en lugar de un Ctrl para introducir al cursante de la carrera de Ingeniera
Elctrica en el campo de desarrollo de sistemas empotrados. El uso de un procesador
de 8 bits se explica porque las exigencias de cmputo, velocidad y de recursos de
memoria de los sistemas empotrados tpicos pueden ser satisfechas por Ps de 8 bits.
De hecho, la mayora de las modelos de microcontroladores modernos destinados a
aplicaciones industriales son de 8 bits.

ix

En segundo trmino, se bebe responder a la interrogante sobre la edad del P


seleccionado para impartir el curso. Para esto es til realizar un recorrido breve sobre
la evolucin del diseo de Ps. El microprocesador 8085 fue introducido por INTEL
en el ao 1977 como un P de 8 bits para propsito general, siendo una versin mejorada de su predecesor el 8080 al incluir en el encapsulado el generador de reloj 8224
y el controlador de sistema 8228, y funcionar con una fuente de poder de tensin nica de 5 Voltios. Con solo 2 instrucciones ms que las del 8080 y un ciclo de instruccin reducido desde 2 s en el 8080 hasta 1.3 s en el 8085A (0.8s para el 8085A-2)
fue considerado como un dispositivo levemente ms evolucionado que su antecesor.
No obstante, algunas caractersticas funcionales novedosas como disponer de
cuatro entradas de interrupciones vectorizadas adems de la entrada estndar INT del
8080, y puertos de E/S para comunicacin en serie, junto con otras funciones de control convirtieron al 8085A en un P usado ampliamente en la solucin de problemas
de control en ambiente industrial. Junto con P INTEL se aparecieron dos circuitos
LSI, el 8155 y el 8755A compatibles terminal a terminal con el P. De modo que con
solo 3 circuitos integrados se puede realizar un microcomputador con todas las funciones del CPU, 256 bytes de RWM, 2Kbyte de EPROM, 38 lneas de E/S distribuidas en 4 puertos de 8 bits y uno de 6 bits, todos programables como puertos de E/S, y
un temporizador/contador programable de 14 bits.
El uso extendido del 8085A implicaba que un nmero significativo de diseadores de aplicaciones basadas en Ps lo estaban usando en sus proyectos, lo cual result en una gran cantidad de literatura tcnica disponible. Se publicaron numerosos
artculos en revistas especializadas, libros de texto, y notas de aplicaciones que junto
con los sistemas de desarrollo ofrecido por INTEL y otras empresas facilitaban el diseo de aplicaciones acadmicas e industriales basadas en este P. Se estima que Intel vendi sobre los 100 millones de este modelo de P. El 8085A y los miembros de
la familia de Ps INTEL de 16, 32 y 64 bits ha sido, cada cual en su poca, los Ps
de propsito general ms utilizados en el planeta.
A partir de la introduccin de los Ps 8086/8088 y hasta la actualidad, los siguientes microprocesadores diseados han sido dirigidos al uso en mquinas de propsito general y no se contino liberando nuevas versiones de Ps dirigidos a control.
Este espacio fue ocupado por los microcontroladores, cuyas primeras versiones empezaron a usarse en aplicaciones de control. La familia MCS-51 de INTEL se convirti en un estndar industrial existiendo el da de hoy ms de cuarenta empresas fabricantes de semiconductores en todo el mundo que producen dispositivos pertenecientes a esta familia.
De modo, que se usa un microprocesador de vieja data, debido a que la gama
de Ps de 8 bits modernos es muy limitada, al ser stos sustituidos actualmente por
microcontroladores. Algunas empresas ofrecen hoy da Ps de 8 bits con arquitectura
CISC similares al 8085 y con rendimiento superior. Por ejemplo, el PopCorn viene en

forma de un ncleo lgico en cdigo VHDL el cual puede ser sintetizado junto con
sus circuitos asociados sobre una FPGA.
Adems, los microprocesadores de 8 bits como el 8085 no son necesariamente
piezas de museo destinados a desaparecer. Actualmente varias empresas de semiconductores producen versiones CMOS del P 8085. Por ejemplo el MSM80C85AH es el
modelo colocado por OKI Semiconductor a un mercado reducido de usuarios. Debido
a su alta inmunidad a la radiacin csmica, las versiones actuales del 8085 son usadas
en el diseo de instrumentos para la navegacin espacial. Tambin fue usado por la
NASA como CPU del sistema de control del vehiculo explorador Sojourner que se
desplazo por el planeta Marte durante el mes de julio del ao 1997 en la misin Pathfinder. El sistema de control del vehculo autnomo Sojourner gobernaba la operacin de 80 perifricos tales como sensores de temperatura y velocidad, cmaras de
TV, lasers, modem, motores y un espectrmetro de rayos x. Adems ejecut 12 experimentos cientficos. El cdigo para el procesamiento, gestin de E/S y los experimentos ocup 16 Kbytes de PROM, 160 Kbytes de EEPROM y 576 Kbytes de RWM.
Esto significa que el 8085 es un dispositivo completamente operativo capaz de realizar las funciones tpicas de un P, como se ha demostrado hace algunos aos en la
misin a Marte y en otras aplicaciones en el sector espacial.

Para finalizar, conviene resaltar que experiencia de ms de 12 aos en la enseanza de sistemas basados en Ps indica que los bachilleres que se han iniciado en
este mundo usando el 8085 no han tenido dificultades para realizar proyectos de grado con Ps ms avanzado o con Ctrls. De modo que por las razones expuestas, considero que brindar atencin a un P de 8 bits cuando el estado del arte apunta hacia
dispositivos de 32 y 64 bits no debe considerarse en modo alguno una desventaja.
INTEL es el lder indiscutible en la produccin de Ps y sus productos mantienen la
nomenclatura y terminologa usada originalmente en sus primeros dispositivos, y algunas de las caractersticas funcionales han permanecido inalterables. As, iniciar el
estudio de Ps con el 8085 hace sencillo acceder a procesadores modernos de gran
potencia del mismo u otro fabricante.

ORGANIZACIN DEL CONTENIDO


Sigue una breve descripcin de la forma como estn organizados los trece captulos que constituyen este libro:
CAPTULO 1

Inicia este trabajo realizando una presentacin del computador y mostrando su evolucin a travs de los aos, desde las primeras mquinas del siglo XVII. La historia del computador se divide por generaciones, resaltndose los avances ms significativos de cada una.

xi

CAPTULO 2

En forma breve se presenta la estructura funcional del computador, describindose las unidades funcionales que lo constituyen. Tambin se ofrece
una clasificacin de los computadores.
CAPTULO 3

Introduce los conceptos de arquitectura y organizacin. Usando un proceso de sntesis, se obtiene la estructura interna de un microprocesador tpico y se describe de modo funcional las unidades principales que forman
parte de un P. Se introducen algunos conceptos bsicos como estados,
ciclo de instruccin y tiempos de espera y se exponen tcnicas de diseos
bsicas de decodificadores de memoria y de puertos presentndose al final un diagrama elctrico de un microcomputador tpico basado en el P
hipottico sintetizado.
CAPTULO 4

Presenta la arquitectura y el modo de operacin del P 8085 de INTEL.


Se discute la arquitectura interna del procesador y la funcin de sus terminales. Se expone en forma concisa las consideraciones de temporizacin y diagramas de tiempo del P, el ciclo de instruccin y el diagrama
completo de transicin de estados.
CAPTULO 5

Ensea como disear un sistema microcomputador 8085 usando tanto circuitos integrados para bus multiplexado como chips de puertos y de memoria convencionales.
Presenta las tcnicas de diseo de circuitos decodificadores de memorias
y puertos usando decodificadores y dispositivos programables. Se describen circuitos de memoria reales y se discute las consideraciones de velocidad de las memorias del sistema y las caractersticas elctricas de los
terminales del P.
CAPTULO 6

Expone el modelo de programacin del 8085, los formatos de instruccin


y los modos de direccionamiento del P. Se presenta el repertorio de instrucciones del P y se describe la funcin de cada instruccin usando
ejemplos prcticos cuidadosamente seleccionados.
Se explica como programar funciones de control de tiempo para generar
tiempos de retardo y formas de onda.

xii

CAPTULO 7

Justifica el uso del lenguaje ensamblador para el desarrollo de programas.


Se presentan tcnicas de programacin como diseo hacia abajo, cdigo
estructurado y programacin modular. Se describen las estructuras lgicas
de programacin usando programas ejemplos.
Se describe el proceso de ensamblaje y la relocalizacin de cdigo. Especfica la sintaxis del lenguaje ensamblador y las directivas de control.
Se presentan las herramientas para desarrollo de programas como: entornos integrados para desarrollo y programas simuladores, mostrndose
ejemplos ilustrativos.
Se explica, usando ejemplos, como escribir cdigo que use MACROS y
tablas de consulta
CAPITULO 8

Discute las distintas tcnicas de gestin de entrada y salida; entrada por


programa, por interrupciones y acceso directo a memoria.
Se describe el sistema de interrupciones del 8085. Se presentan los controladores de interrupcin 8259 y de acceso directo a memoria 8237.
CAPITULO 9

Se presentan circuitos programables para interconexin de E/S como el


8255, el 8155 y el controlador de teclado/pantalla 8279.
Se ofrecen aplicaciones prcticas realizadas con el 8055 mostrando los
circuitos y programas. Algunas de stas son: control de una matriz de teclado, manejo de una pantalla del indicadores multiplexados, voltmetro
digital, comunicacin con impresora CENTRONICS, control de mdulo
LCD, generador de baudios, generador de forma de onda, programa monitor para microcomputador, medidor de temperatura y medidor de capacidad.
Los tpicos contenidos en este trabajo estn estructurados para ser cubiertos
en un semestre regular. Al estudiante culminar la lectura y estudio de este material,
estar en capacidad de poner en prctica procedimientos de anlisis, diseo y puesta
en operacin de sistemas basados en microprocesadores.
Luis Daniel Urdaneta Guevara
Puerto la Cruz, septiembre del 2005

xiii

Este libro est destinado


En particular a:
Los cursantes de la asignatura Sistemas de Microprocesadores I, dictada en el
pregrado de Ingeniera Elctrica de la Universidad de Oriente.

En general a:
Quienes teniendo un conocimiento limitado del universo de los microprocesadores, o careciendo totalmente de ste, desean aprender de modo rpido y eficiente
los conceptos, tcnicas, criterios de diseo y de seleccin de dispositivos relacionados.

xiv

Conducta de entrada
Los que inician el estudio de la arquitectura y programacin de microprocesadores y microcomputadores con la lectura de este texto requieren tener un slido conocimiento de tcnicas de anlisis y diseo de circuitos digitales combinatorios y secuenciales; y de los principios que rigen el funcionamiento de los dispositivos semiconductores
bsicos y de su comportamiento cuando integran circuitos electrnicos excitados por
seales digitales y analgicas. Para la realizacin de las sesiones de simulacin se requiere estar familiarizado con el manejo de un microcomputador en entorno WINDOWS.

xv

Propsito
Al culminar el estudio de este texto el estudiante estar capacitado para analizar,
disear, y construir, usando circuitos integrados comerciales, aplicaciones basadas en
microprocesadores. Pudiendo adems escribir, ensamblar y depurar el programa del
sistema.

xvi

Advertencia
Este trabajo no pretende actuar como un manual del usuario de los programas CAD usados para la simulacin de los ejemplos. Solo se presentan resultados
obtenidos de las pruebas realizadas en el microcomputador para algunos ejemplos
seleccionados. En modo alguno debe el lector debe considerar que se han aprovechado al mximo las opciones de anlisis, simulacin y presentacin de resultados,
ofrecidas por las aplicaciones CAD. El interesado debe recurrir a los archivos de
ayuda para familiarizarse con el manejo de cada programa simulador.

xvii

Contenido
Dedicatoria... .ii
Prefacio.............................................iii
Este libro est destinado.xiii
Conducta de entrada...............................................xiv
Propsito..xv
Advertenciaxvi

Captulo 1. INTRODUCCIN AL COMPUTADOR.


1.1 GENERALIDADES.. 1
1.2 EL COMPUTADOR Y SU HISTORIA 2
1.2.1 Los precursores del computador moderno. 2
1.2.2 El computador digital. 4
La primera generacin: Las vlvulas de vaco.. 4
La segunda generacin: Los transistores................ 13
La tercera generacin: Los circuitos integrados. 15
La cuarta Generacin: El microprocesador. 18
La quinta Generacin: Tecnologa VLSI 24

Captulo 2. ORGANIZACIN DEL COMPUTADOR.


2.1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR
2.1.1 La unidad central de proceso
2.1.2 La unidad de control
2.1.3 La memoria
2.1.4 La unidad de entrada/salida
2.1.5 El generador de reloj
2.2 LAS INSTRUCCIONES DEL COMPUTADOR
2.3 CLASIFICACIN DE LOS COMPUTADORES

31
33
34
34
35
35
36
39

Captulo 3. INTRODUCCIN AL MICROPROCESADOR.


3.1 GENERALIDADES 41
3.2 ARQUITECTURA INTERNA DEL MICROPROCESADOR.. 45
3.2.1 Proceso de sntesis de un microprocesador 45
El conjunto de instrucciones del microprocesador. 46
La unidad de clculo.. 46
Perifrico de entrada.. 47
Perifrico de salida. 51
El conjunto extendido de instrucciones.. 54
Formatos para representacin de informacin55
La memoria del sistema. 58
El generador de direcciones... 65

xviii

El microprocesador como mquina de estados.. 68


La unidad de control... 70
Comunicacin con perifricos lentos. 73
Conjunto extendido de instrucciones. 75
Instrucciones no soportadas... 80
Diagrama final del microprocesador sintetizado 83
Las seales de entrada y salida al microprocesador... 84
3.2.2 El sistema microcomputador.. 86
Las direcciones de memoria... 87
Las direcciones de los puertos 90
3.3 ARQUITECTURA DE UN P DE 8 BITS MS VERSTIL. 91
3.4 ARQUITECTURA DE UN COMPUTADOR ESTNDAR. 98

Captulo 4. ARQUITECTURA Y OPERACIN DEL P 8085


4.1 GENERALIDADES.. 101
4.2 ESTRUCTURA FUNCIONAL DEL 8085A..... 104
4.2.1 La unidad de control..105
4.2.2 Los registros internos 108
4.2.3 La unidad aritmtica y lgica 110
4.2.4 El bus interno de datos.. 111
4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A... 114
4.3.1 El ciclo de instruccin... 115
4.3.2 Secuencia de transicin de estados... 118
4.3.3 El estado de espera 122
4.3.4 El modo de operacin paso a paso 125
4.3.5 Ciclos de lectura y escritura en memoria y puertos de E/S... 127
4.4 LA SECUENCIA DE INICIO DEL 8085A.. 129

Captulo 5. EL MICROCOMPUTADOR BSICO.


5.1 SISTEMA MCS-85 MNIMO.. 134
5.2 INTERCONEXIN CON DISPOSITIVOS CONVENCIONALES 143
5.2.1 La memoria de programa.. 147
5.2.2 La memoria de datos. 151
5.2.3 Los puertos de entrada y salida. 154
5.3 DECODIFICACIN EXHAUSTIVA DE LAS DIRECCIONES 158
5.4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA. 173
5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES 179
5.6 CONSIDERACIONES SOBRE INTERCONEXIN A LOS BUSES. 188
5.6.1 Carga mxima del bus del 8085A... 188
5.6.2 Seleccin de la memoria del sistema 190
5.7 MEMORIAS EEPROM Y FLASH193
5.8 BANCOS DE MEMORIA. 197

xix

Captulo 6. INTRODUCCIN A LA PROGRAMACIN DEL 8085A


6.1 EL MODELO PARA PROGRAMACIN.. 207
6.2 FORMATO DE LAS INSTRUCCIONES 208
6.3 MODOS DE DIRECCIONAMIENTO. 210
6.3.1 Direccionamiento directo.. 210
6.3.2 Direccionamiento Inmediato. 211
6.3.3 Direccionamiento por registro...213
6.3.4 Direccionamiento indirecto por registro... 213
6.4 EL CONJUNTO DE INSTRUCCIONES DEL 8085 214
6.4.1 Grupo de instrucciones para transferencia de datos. 215
6.4.2 Grupo de instrucciones que ejecutan operaciones lgicas 218
6.4.3 Instrucciones para manejo de la pila. 234
6.4.4 Grupo de instrucciones para bifurcaciones... 240
6.4.5 Grupo de instrucciones aritmticas... 249
6.5 ARITMTICA DE PUNTO FIJO O DE PUNTO FLOTANTE... 276
6.6 INSTRUCCIONES ADICIONALES 284
6.7 RUTINAS DE RETARDO 284
6.7.1 El lazo de retardo bsico... 285
6.7.2 Retardos de mayor duracin..289

Captulo 7. DESARROLLO Y SIMULACIN DE PROGRAMAS


7.1 EL LENGUAJE DE PROGRAMACIN. 294
7.1.1 Traduccin de programas.. 296
7.1.2 Lenguaje ensamblador o de alto nivel... 298
7.1.3 El formato HEX-INTEL... 303
7.2 ESTRUCTURA DEL PROGRAMA 306
7.2.1 Programacin modular.. 306
7.2.2 Diseo hacia abajo 307
7.2.3 Cdigo estructurado.. 308
Estructura secuencial 309
Estructura IF-THEN/ELSE.. 311
Estructura CASE. 313
Estructura DO-WHILE. 316
Estructura REPEAT-UNTIL... 317
7.3 EL LENGUAJE ENSAMBLADOR. 318
7.3.1 El proceso de ensamblaje.. 319
7.3.2 Proceso de ensamblaje de un programa modular.. 320
7.3.3 Lenguaje ensamblador para el 8085.. 325
Formato de lnea... 326
Conjunto de caracteres.. 327
Delimitadores 327
Especificacin de operandos.327
Smbolos reservados. 329
Definicin de smbolos. 329
Evaluacin de expresiones 331

xx

Traduccin de un archivo fuente.. 332


Directivas generales del ensamblador.. 340
7.4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS. 365
7.4.1 Programas para simulacin del microprocesador 8085 371
7.4.2 Sistema integrado para desarrollo de programas.. 396
7.5 MACROS.. 409
7.6 TABLAS DE CONSULTA (lookup tables)
415

Captulo 8. TCNICAS DE GESTIN DE ENTRADA Y SALIDA


8.1 ENTRADA Y SALIDA POR PROGRAMA 429
8.2 ENTRADA Y SALIDA USANDO INTERRUPCIONES 443
8.2.1 El sistema de interrupciones del 8085A. 445
Interrupciones disparadas por la entrada INTR... 449
Interrupciones disparadas por las entradas RST.. 453
8.2.2 El controlador de interrupciones 8259A 475
Interconexin con el sistema 8085A 476
Programacin del 8259A... 479
8.3 ACCESO DIRECTO A MEMORIA. 492

Captulo 9. DISPOSITIVOS DE E/S PROGRAMABLES


9.1 CIRCUITO PARA INTERCONEXIN DE PERIFRICOS 8255.. 497
9.1.2 Modos de operacin del 8255... 499
Modo 0... 500
Modo 1... 500
Modo 2... 500
9.1.3 Programacin del 8255. 500
9.1.4 Aplicaciones del 8255A 503
Operacin en el modo 0. 503
Operacin en el modo 1. 529
Operacin en el modo 2. 536
9.2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER... 539
9.2.1 Seccin de entrada y salida del 8155 541
Registro de comando. 542
Registro de estado. 544
9.2.2 Seccin del temporizador-contador del 8155 560
9.3 CONTROLADOR DE TECLADO Y PANTALLA 8279. 580
9.3.1 Funcionamiento del 8279.. 582
9.3.2 Programacin del 8279. 585

Bibliografa. 644

Introduccin al Computador

Introduccin al Computador

1.1 GENERALIDADES
La presentacin del computador en un curso introductorio de sistemas de microprocesadores se justifica plenamente por el hecho que el P es en realidad la unidad de proceso fundamental de un tipo de computador conocido como microcomputador (C).
El P es un circuito integrado LSI con dimensiones reducidas pero de gran
complejidad, que posee todas las caractersticas de programabilidad presentes en
computadores grandes. Es el mayor y ms seductor desafo al cual se han enfrentado
los diseadores lgicos en los ltimos veinte aos. El desarrollo acelerado de esta
tecnologa ha resultado en la aparicin de nuevos componentes, tcnicas, y aplicaciones que han permitido la solucin de problemas prcticos de ingeniera de cierta
complejidad, mediante el uso de tcnicas de computacin. Antes la aparicin del P
el uso de computadores estaba destinado para aplicaciones muy especializadas.
El P puede presentarse como un recurso cuya versatilidad y potencia supera
la de cualquier dispositivo que la tcnica digital haya tenido disponibles hasta su aparicin en el mercado de la electrnica. La certeza de esta aseveracin descansa en tres
factores fundamentales.
Son de bajo costo, y la posibilidad de ser programados permiten su inclusin en una gran variedad de aplicaciones.
Su uso en el diseo de sistemas digitales disminuye en forma significativa
el nmero de componentes necesarios.

Introduccin al Computador

El tiempo de ingeniera empleado en el desarrollo de sistemas se acorta en


forma drstica.
Estas tres cualidades han resultado en un cambio sustancial en las tcnicas de
diseo lgico, de hecho en la actualidad todos los sistemas cuya complejidad est por
debajo del nivel de minicomputadores, se disean en base a Ps.

1.2 EL COMPUTADOR Y SU HISTORIA


Exponer con detalle el origen computador y el nacimiento y desarrollo de la
informtica implica narrar una larga historia que quizs se inicie hace cuatro mil aos
con el uso del baco por la civilizacin china y contine hasta los computadores de
nuestros das. Para simplificar la resea de la evolucin de las mquinas de computacin, es til considerar dos aspectos tcnicos fundamentales: el uso de sistemas mecnicos para realizar clculos matemticos y la aplicacin de la electrnica para el
diseo de computadores.
Aunque en esta seccin se inicia con la descripcin de algunas de las primeras
calculadoras mecnicas antecesoras del computador de nuestros das, para los propsitos de este trabajo interesa ms bien destacar ciertos acontecimientos histricos del
siglo XX que son fundamentales para proporcionar una visin general de la evolucin
de la estructura y funcionamiento de los computadores digitales desde su aparicin
hace ms de 50 aos.
1.2.1 Los precursores del computador moderno
La idea del autmata inteligente es antigua, si se considera que el eminente
matemtico francs Blaise Pascal (1623-1662) diseo en el siglo XVII (1642) una
mquina Calculadora Mecnica basada en rodamientos dentados y engranajes que
permita ejecutar operaciones de suma y resta. La figura 1.1 es una ilustracin de la
contribucin del eminente cientfico francs al progreso del conocimiento.

Fig. 1.1 Los diez dientes de cada rueda de la mquina de Pascal representaban los dgitos del 0 al 9.
Las operaciones se realizaban rotando las ruedas el nmero de dgitos necesarios.

Introduccin al Computador

La reflexin con la cual Pascal acompao la presentacin de su calculadora


ha perdurado a travs del tiempo, revelando que adems de ser un gran cientfico tena alma de visionario,
Este anuncio pretende poner en tu conocimiento, amable lector, que yo
presento a la opinin pblica una pequea mquina..., que te proporciona alivio del trabajo que tantas veces fatigo tu espritu, cuando has hecho
clculos con tu pluma.

Inspirado en el diseo de Pascal, el famoso matemtico germano Gottfried


Wilhelm Leibniz (1646-1716) desarroll en 1670 una versin de la calculadora ms
eficiente y precisa, capaz de realizar las cuatro operaciones aritmticas: suma, substraccin, multiplicacin y divisin. A pesar que los diseos de Pascal y Leibniz no
tuvieron mayor xito comercial, en las postrimeras del siglo XIX fueron de uso
comn versiones perfeccionadas de stas mquinas, tanto en el campo cientfico como financiero.
El primer equipo de computacin automtica fue inventado por el francs Joseph Marie Jacquard (1752-1834), quien introdujo el concepto de programa almacenado para el control del clculo, al disear un telar automtico. El telar de Jacguard
fue presentado en Pars en el ao 1801 y utilizaba placas delgadas perforadas para
seleccionar cada hilo de la tela de acuerdo con el patrn de tejido deseado, simplificando la realizacin de diseos con tramas complejas. Est mquina tuvo un impacto
significativo en la industria textil francesa debido a que miles de fbricas usaron el
telar de Jacquard para automatizar el proceso de tejido.
Aunque puede considerarse a la mquina calculadora de Pascal como el precursor del computador moderno, numerosos registros histricos asignan tal mrito a
la mquina diferencial inventada por los matemticos ingleses Charles Babbage
(1792-1871) y Augusta Ada Byron (1815-1852). En la figura 1.2 se muestra una seccin de la estructura de sta calculadora mecnica programable.

Fig. 1.2 Mquina diferencial de Babbage.

Introduccin al Computador

En el ao 1820 Babbage inici este proyecto pero no pudo culminar la construccin de su diseo por falta de financiamiento. No obstante, en el ao 1991 unos
cientficos britnicos ensamblaron la mquina basndose en las especificaciones dejadas Babbage, comprobando su funcionamiento al realizar en forma correcta clculos sencillos con una precisin de 31 dgitos.
En realidad los diseos de Babbage eran demasiado avanzados para el nivel
de desarrollo de la tecnologa del siglo XIX. De hecho en 1830 proyect la mquina
analtica, jams construida, dirigida a realizar clculos complejos, la cual presentaba
notables similitudes con la organizacin de un computador moderno: un grupo de
tarjetas perforadas introducan datos al dispositivo, una unidad de memoria para almacenamiento, una unidad operativa para realizar los clculos matemticos y una
impresora para la salida de los resultados.
En el ao 1880, el norteamericano Herman Hollerith empleado de la Oficina
del Censo de los Estados Unidos diseo un sistema basado en tarjetas perforadas para
procesar los datos correspondientes al censo de habitantes del ao 1890. La informacin almacenada en las tarjetas era interpretada hacindolas pasar a travs de sensores
elctricos. En el ao 1896, Hollerith fund una empresa que treinta aos ms tarde se
convertira en el famoso consorcio International Business Machines Corporation
(IBM).
1.2.2 El computador digital
Los fundamentos de los sistemas digitales modernos y la base de la sintaxis de
los programas de computacin actuales fueron propuestos por el matemtico britnico
George Boole en El anlisis Matemtico de la Lgica (1847), y en su tratado clsico
Una Investigacin de las Leyes del Pensamiento, publicado en el ao 1954. La teora
de la lgica simblica o lgebra de Boole fue el primer intento de fusionar la lgica
con la matemtica y estaba basado en los conceptos de la lgica de Aristteles de
verdadero (1) y falso (0).
Pasados ochenta aos, en 1938, Claude Elwood Shannon, public su trabajo
Un Anlisis Simblico de Rels y Circuitos de Interrupcin, donde entrega los resultados de su investigacin sobre una teora de conmutacin basada en las proposiciones de Boole. Las primeras aplicaciones prcticas del lgebra de Boole fueron en redes de conmutacin telefnicas construidas con rels, y posteriormente en el diseo
de sistemas digitales usando vlvulas de vaco como componentes bsico.
La Primera Generacin: Las Vlvulas de Vaco
La primera generacin de computadores nace en el ao de 1946 cuando se
puso en operacin la famosa computadora gigante norteamericana ENIAC (Electronic
Numerical Integrator and Calculator), proyecto financiado por el gobierno de los

Introduccin al Computador

Estados Unidos, y desarrollada en la Escuela de Ingeniera Moore de la Universidad


de Pennsylvania bajo la supervisin de John Presper Eckert y John.Mauchly.

Esta mquina es aceptada como el


primer computador programable, y
se alojaba en un gabinete de 30
metros de longitud, 3 metros de
altura y 1 metro de profundidad,
estando constituida por 18000 tubos de vaco.
Este computador digital de 2 millones de dlares, pesaba 30000
kilogramos y consuma 150 KW,
requiriendo toneladas de equipos
de aire acondicionado para evitar
el sobrecalentamiento.
El ENIAC se diseo en base a una
arquitectura conocida como tipo
Harvard, cuya caracterstica fundamental es que usa unidades de
memoria separadas para los datos
y las instrucciones.

Fig.1.3 La computadora gigante ENIAC ocupaba un rea significativa


de un edificio.

La arquitectura Harvard fue introducida en la dcada de los 30's por


un cientfico de la Universidad de
Harvard llamado Howard Aiken.
Las figuras 1.3 y 1.4 muestran en
forma dramtica las diferencias
existentes entre el ENIAC y un
computador monopastilla moderno.

Fig.1.4 El microcontrolador C167R aloja en un rea de 100 mm2


todos los elementos de un computador, adems de mltiples
controladores de perifricos.

En la figura 1.5 se presenta un diagrama de la arquitectura del ENIAC donde


se observa el uso de buses distintos para la transferencia de datos e instrucciones, un
conjunto de veinte acumuladores para almacenar los operandos y dos unidades aritmticas para ejecutar divisiones, productos y extraccin de races cuadradas. La operacin y sincronizacin global del sistema la realizaba la unidad de control.
La unidad de almacenamiento estaba constituida por tambores magnticos pudiendo almacenar 20 nmeros decimales de 10 dgitos. El programa en lenguaje de

Introduccin al Computador

mquina era realizado mediante cableado externo y los datos se introducan por medio de tarjetas perforadas como se muestra en la figura 1.5. Este computador ejecutaba una operacin de suma en un tiempo de 200 s y una multiplicacin en la eternidad de 2.8 ms.

Lectora de
tarjetas

Impresora de
tarjetas

Bus de Escritura

Divisor y

20

Multiplicador

3 ...

Unidad de Control

1 2

Acumulador

Bus de Lectura

Bus de Instrucciones

Unidad de
Programacin
Fig. 1.5 Estructura del computador ENIAC

Como sistema de computo el ENIAC solo es de inters histrico, su valor se


debe al hecho que marc el inicio del desarrollo de una industria de importancia vital
para el progreso del conocimiento cientfico de este siglo. El pobre rendimiento de
un computador basado en miles de vlvulas de vaco y la complejidad para la realizacin y carga del programa en cdigo de mquina limitaron significativamente el espectro de aplicaciones factibles de resolver con este computador. La primera aplicacin para la cual se utiliz el ENIAC fue la construccin de tablas exactas para el clculo de trayectoria de proyectiles de nuevas armas.

Introduccin al Computador

Pese a que en el mes de diciembre de 1943 se puso en marcha el computador


Colossus, y el ao siguiente el Harvard Mark I, la mayora de los datos histricos
sealan al ENIAC como el primer computador electrnico para aplicaciones de propsito general.

Fig. 1.6 ElColossus fue la primera computadora totalmente electrnica.

El diseo del Colossus se inici en 1939, estando compuesto por 1500 vlvulas de vaco. Fue construido en la ciudad de Londres por un equipo de cientficos
britnicos dirigido por Alan Mathison Turing (1912-1954), matemtico britnico
conocido por su proposicin de la mquina de Turing. El Colossus fue usado durante
la segunda guerra mundial para descifrar las transmisiones de radio del ejrcito nazi.
El Mark I era un computador electromecnico que contena 200000 componentes y 800 kilmetros de cable, requiriendo diez segundos para realizar una divisin entera. Pese a su lentitud extrema, la ENIAC era mil veces ms rpida. En la arquitectura del Mark I se distinguen las unidades que constituyen los computadores
modernos, tales como la memoria, la unidad aritmtica, la unidad de control, y los
puertos de entrada y salida.

Fig. 1.7 El computador MARK I.

Introduccin al Computador

El computador ABC (Atanasoff-Berry Computer) fue otra mquina, anterior al


ENIAC, construida en 1939 en la universidad del estado de Iowa por John Atanasoff
(1903-1995) y su asistente Clifford Berry. Como un hecho curioso, Atanasoff alegaba ser el autor de ciertos principios y tcnicas que se utilizaron en el desarrollo del
ENIAC sin contar con su autorizacin. En el ao 1973, y con base en este argumento,
la empresa propietaria de las especificaciones para la fabricacin del ENIAC fue despojada del derecho exclusivo para fabricar o vender el computador.
El desarrollo de los computadores sucesores del ENIAC, tambin basados en
vlvulas de vaco, fue impulsado fundamentalmente por la necesidad de resolver problemas de ingeniera de la industria de armamentos de los Estados Unidos, tales como
el diseo de aviones de combate y misiles. La razn para el uso restringido de estos
computadores gigantes es obvia, a mediados de los aos 40, en plena postguerra, las
fuerzas armadas eran el nico sector de la sociedad norteamericana capaz de financiar
los altos costos inherentes a la fabricacin de una mquina de gran volumen y que
requera una cantidad considerable de energa elctrica para su funcionamiento. De
hecho el ENIAC nace impulsado por las necesidades militares del Laboratorio de
Investigacin de Balstica (BRL) de las fuerzas armadas norteamericanas.
La intencin de construir un computador de propsito general capaz de realizar tareas tanto en el medio acadmico e industrial como en el comercial, sin variaciones sustanciales en la estructura fsica del sistema, fue obstaculizada en forma severa por problemas de complejidad variable derivados del uso de la arquitectura Harvard. Un uso eficiente de la memoria del sistema era deseable dado el alto costo de
esta unidad de la mquina. No obstante, establecer en la fase de diseo la capacidad
de las memorias separadas era una tarea que se distingua por su ambigedad, debido
a la variedad de tareas que potencialmente deba resolver el computador.
En una aplicacin de corte administrativo o financiero es seguro que se requiere el almacenamiento de una cantidad considerable de datos, cuyo procesamiento
necesita la ejecucin de programas con algoritmos convencionales desarrollados
usando un nmero reducido de instrucciones; mientras que para realizar clculos
cientficos de cierta envergadura usualmente se alimenta al sistema con unos pocos
datos iniciales y se ejecutan programas basados en algoritmos complejos que exigen
una gran cantidad de cdigo ejecutable. Si se usa arquitectura Harvard, es claro que,
dependiendo de la aplicacin, una de las memorias del sistema ser subutilizada.
El paso decisivo para el diseo y construccin del primer computador moderno fue dado por uno de los asesores del proyecto ENIAC, el cientfico hngaro John
Von Neumann (1903-1957) quien introdujo el concepto de mquina de programa almacenado que sent las bases del computador. En una artculo cientfico publicado
en el ao 1946 Von Neumann junto con Burks y Goldstine, presentan el primer computador que funcionaba con el programa almacenado en memoria el EDVAC (Electronic Discrete Variable Computer), el cual estaba basado en una arquitectura nove-

Introduccin al Computador

dosa que usaba una memoria comn para el almacenamiento de los datos y las instrucciones.

Fig. 1.8 El computador EDVAC.

El razonamiento de Von Neumann fue que si toda informacin se carga en el


sistema como nmeros y en un formato que permita que el procesador sea capaz de
distinguir cuando un arreglo determinado de bits corresponde a un dato o a una instruccin, bastar con espacio comn de memoria para almacenar los datos de E/S y
las instrucciones del programa. El mrito de Von Neumann estuvo en la idea de la
construccin de una mquina de propsito general, cuya secuencia de operacin poda ser programada de acuerdo con las necesidades de una aplicacin especfica. El
programa que deba ejecutarse, los datos, y resultados se almacenan en una memoria,
concepto novedoso que sustitua el cableado de componentes, y que permita cambiar
el comportamiento del equipo con la simple modificacin del programa en memoria.
El formato de instrucciones propuesto por Von Neumann, divida la instruccin en dos campos: el campo de cdigo de operacin para identificar la instruccin
a ejecutar, y el campo de direccin para especificar la localizacin en memoria del
operando u operandos a usar por la instruccin. La figura 1.9 muestra el formato
descrito.
Cdigo de
Operacin
Campo de
Cdigo de
Operacin

Direccin
Operando
1

Direccin
Operando
2

Direccin
Direccin
Resultado Instruccin
siguiente

Campo de Direccin

Fig. 1.9 Formato de la instruccin de cuatro direcciones

Introduccin al Computador

10

Debido a que el computador es una mquina de naturaleza secuencial que


acepta informacin de entrada, realiza algn tipo de operacin sobre estos datos, entrega un resultado, y luego se dirige a ejecutar la prxima instruccin. En un principio
se pens que la instruccin bsica (una operacin aritmtica, por ejemplo) deba contener la siguiente informacin:
1. El cdigo de operacin para sealar el tipo de operacin: suma, resta, producto, deteccin de paridad, complemento etc.
2. La direccin de los operandos que participan en el clculo.
3. La direccin de memoria donde debe almacenarse el resultado.
4. La direccin donde est la instruccin prxima.

Una mquina de cmputo cuya instruccin tenga el formato de la figura 1.9 se


conoce como computador de 4 direcciones. A pesar que no existan obstculos insalvables para la construccin de un computador de este tipo, algunas consideraciones
indican que el uso de tal formato resulta en sistemas de estructura compleja y dimensiones exageradas. La principal desventaja est relacionada con el nmero de bits de
cada instruccin, si se asignan 8 bits para identificar al cdigo de operacin, con una
memoria de 65536 posiciones que necesita 16 bits para especificar cada direccin de
memoria, resulta un total de 72 bits por instruccin. El autor supone que los diseadores de la poca no consideraron la posibilidad de almacenar cada instruccin en
una celda de memoria ni transferirlas en paralelo al interior del procesador, lo que
exigira el uso de memorias con palabras de 72 bits e igual nmero de lneas para el
bus de instrucciones, pero si suponemos que se hizo de esta manera no debe extraa
que como resultado se obtuviesen mquinas de dimensiones colosales y funcionamiento ineficiente.
Para la reduccin de la longitud de la instruccin existen dos opciones: usar
cinco posiciones de la memoria para almacenar cada instruccin o eliminar algunos o
todos los campos de direccin. En el primer caso es obvio que persiste un problema
de prctico debido a que el registro de instrucciones del procesador deba ser capaz
de almacenar 72 bits. En la actualidad estas dificultades han sido superadas, los computadores actuales no usan instrucciones de 4 direcciones y los microcomputadores
utilizan instrucciones de una direccin o sin direccin. En la seccin prxima se expone como fue posible construir mquina de una direccin o sin sta.
Despus de proponer una arquitectura que se convirti en un estndar para el
diseo de los computadores construidos en los siguientes 55 aos, John Von Neumann particip a partir de 1946 en el proyecto de desarrollo del computador IAS
construido en 1952 en el Instituto para Estudios Avanzados en Princenton. Un diagrama funcional del IAS se muestra en la figura 1.10 donde se aprecia el uso de una
memoria comn para las instrucciones y los datos.

Introduccin al Computador

11

Instrucciones y datos

Direcciones

Fig. 1.10 Diagrama de bloques del computador IAS.

A diferencia del ENIAC, el computador IAS era una mquina binaria y no decimal, con la unidad de memoria constituida por 1000 posiciones de 40 bits donde se
podan almacenar tanto datos como las 21 instrucciones disponibles para la mquina.
El IAS fue el modelo a seguir para el diseo se los siguientes computadores de propsito general. Excepto algunos casos, todos los computadores modernos mantienen la
estructura de la mquina de Von Neumann. Los continuos avances logrados en la arquitectura y el incremento de la capacidad de memoria permiti la construccin de
dispositivos cada vez ms rpidos y eficientes, mientras que se desarrollaron los primeros lenguajes simblicos que simplificaron en forma notable el proceso de desarrollos de programas.
En 1950 el computador abandon los centros acadmicos y de investigacin
con la liberacin de la primera mquina comercial, el UNIVAC I. (Universal Automatic Computer) fabricada por una empresa fundada en el ao 1947 por John Eckert y
John.Mauchly: Eckert-Mauchly Computer Corporation, la cual posteriormente se
fundi con la Sperry Rand Corporation. Esta ltima empresa comparta con IBM el
dominio de la industria de fabricacin de computadores. La figura 1.11 es una fotografa del UNIVAC I en operacin. A finales del los 50 sali al mercado el modelo
UNIVAC II, el cual era una mquina ms avanzada que su antecesor La EckertMauchly Computer Corporation, ahora la divisin UNIVAC de la Sperry, tambin
inici el desarrollo de la serie de computadores con cdigo 1100. El primer modelo
de esta serie fue el UNIVAC 1103 destinado para aplicaciones cientficas de gran
complejidad que involucraban el procesamiento de grandes cantidades de datos a alta
velocidad.

Introduccin al Computador

12

Fig. 1.11 El UNIVAC I. Primer computador capaz de procesar texto adems de datos numricos.

Fig. 1.12 El UNIVAC II.

Por su parte, el consorcio IBM puso en venta los modelos 604 y 701, en los
aos 52 y 53 respectivamente. El precio de adquisicin del modelo 701 alcanzaba el
milln de dlares. A mediados de la dcada del 50, IBM liber el modelo 650, el cual
tuvo amplia aceptacin en los medios cientficos y acadmicos de todo el mundo.
Los computadores de esta generacin se programaban usando lenguaje de mquina, lo que requera personal tcnico altamente especializado. No exista sistema operativo y la velocidad mxima de procesamiento que alcanzaron estas mquinas fue de
40 mil operaciones por segundo. Eran equipos de grandes dimensiones, poca capacidad de memoria, de difcil mantenimiento y con un alto consumo de energa.

Introduccin al Computador

13

La segunda generacin: Los Transistores


El desarrollo del transistor entre los aos 1948 y 1952, realizado por los cientficos William Shockley (1910-1989), John Baardeen (1908-1991), y Walter Brattain
(1902-1987), de los laboratorios Bell de los Estados Unidos, conmocion a la industria de la electrnica al ofrecer un dispositivo amplificador y conmutador de estado
slido con menores dimensiones, precio ms bajo, y ms eficiente que los tubos de
vaco de uso comn. Los radios porttiles y audfonos estn entre los primeros en
cuya fabricacin se usaron transistores.
A partir del ao 1956, la sustitucin de las vlvulas de vaco por transistores
en la fabricacin de sistemas procesadores puso a disposicin de los usuarios mquinas de menor precio, mayor confiabilidad y menor consumo de energa, las cuales
constituyen lo que se conoce como la segunda generacin de computadores. La tabla
1.1 seala que un computador tpico de la segunda generacin, fabricado con tecnologa de transistores discretos, funcionaba a una velocidad de 200 mil operaciones por
segundo, mientras que una mquina de la tercera generacin construida con una combinacin de la tecnologa SSI y MSI, era 5 veces ms rpida.
Tabla 1.1 Caractersticas tpicas de los computadores agrupados por generacin.
GENERACIN

PERIODO

I
II
III

1946-1955
1956-1964
1965-1970

IV

1971-1977

1978

TECNOLOGA

Vlvulas de vaco
Transistores discretos
Circuitos integradosTecnologas SSI, MSI.
El procesador.
Tecnologa LSI.
Diseo VLSI.

VELOCIDAD

operaciones/seg
40000
200000
1000000
10000000
100000000

En la cuarta generacin el uso circuitos integrados con integracin LSI (Integracin a Escala Grande: 50 hasta 50000 funciones transistorizadas en un CI), permiti disear mquinas que superaban en un factor de 250 la velocidad de los computadores de la primera generacin y en 50 veces la de sus antecesores inmediatos.
A pesar de su indiscutible reinado en la industria de computacin, no fue la
IBM quien introdujo el primer sistema de computacin de estado slido, las empresas
NCR (National Cash Registers) y Radio Corporation of America (RCA), en este orden, ofrecieron a partir de 1956 sistemas de computacin de capacidad baja construidos con transistores.
En 1960 se incorpora al mercado de equipos con semiconductores la empresa
Digital Equipment Corporation (DEC) con el modelo PDP-1, el cual se considera

Introduccin al Computador

14

como el primer minicomputador en el mercado de mquinas de computacin. Est


mquina us el primer terminal de video y tena capacidad grfica.
La respuesta del consorcio IBM no lleg hasta el ao 1959 con el computador
IBM 7090, primer modelo de la famosa serie 7000, cuyo ltimo miembro, el 7096 II
se construy en 1964. Cada nuevo integrante de la serie 7000 tena mayor capacidad
y menor precio que su antecesor. El modelo IBM 7090 tena 32 Kbytes de memoria y
un tiempo de instruccin igual a 2.18 s, mientras que el IBM 7094 II, con un acceso
a igual espacio de memoria, tardaba 1.5 s en ejecutar una instruccin tpica. El IBM
7093, introducido en el ao 1961, usaba la tcnica de segmentacin para mejorar su
rendimiento

Fig. 1.13 El IBM 7093 fue el primer computador en usar segmentacin.

Las mquinas de esta generacin podan ejecutar los programas con mayor
eficiencia que sus antecesoras. Por ejemplo, el computador ATLAS desarrollado en
1962 en la universidad de Manchester usaba memoria virtual, segmentacin e interrupciones.
En el ao 1964, el ingeniero electrnico norteamericano Seymour Cray,
mientras trabajaba en Control Data Corporation (CDC) diseo los computadores
CDC 6600 y CDC 7600. Considerado el primer supercomputador comercial, el CDC
6600 usaba unidades segmentacin y era una mquina de carga/almacenamiento que

Introduccin al Computador

15

explot el uso del paralelismo a nivel de unidades funcionales de la CPU. Su desempeo era superior al IBM 7094.

Fig. 1.14 Computadores CDC 6700 y CDC 6700.

El mayor rendimiento y confiabilidad las mquinas de esta generacin determin una ampliacin del espectro de aplicaciones de los computadores, apareciendo los primeros lenguajes de alto nivel para tareas especficas tales como: el FORTRAN (Formula Translator), destinado para problemas de ingeniera y desarrollado
entre 1954 y 1957, para el IBM704, por un equipo de programadores dirigidos por
John Backus; y el COBOL ( Common Business-Oriented Language) para procesamiento de datos en el rea financiera. En esta poca tambin se inici el uso de cintas
y discos magnticos
La complejidad y diversidad de las tareas a resolver por los computadores,
exigi un mejor aprovechamiento y administracin del uso de la memoria y de los
tiempos de ejecucin, surgiendo los sistemas operativos los cuales aadan cierto
grado de automatizacin al proceso de ejecucin de los programas, controlando la
carga del programa fuente y los datos iniciales, la compilacin, el uso de la librera
de subrutinas, y la ubicacin en memoria del programa principal y los subprogramas
necesarios.
Con el refinamiento de los sistemas operativos se logr un verdadero aprovechamiento de los recursos ofrecidos por la mquina, se introdujo el modo de procesamiento por lotes, encargndose el sistema operativo de asignar los recursos a cada
tarea.
Este nuevo tipo de ejecucin denominado multitarea permita, por ejemplo,
que mientras el computador imprima los resultados de la ejecucin de la tarea X,
realizara los clculos de la tarea Y, a la vez que almacenaba en la memoria los datos
de entrada de la tarea Z.

Introduccin al Computador

16

La tercera generacin: Los circuitos integrados


El ensamblaje de las tarjetas de circuitos digitales, mdulos bsicos que formaban las mquinas que usaban lgica de transistores, era en general una tarea compleja y de costo elevado. El mantenimiento del producto final era un proceso tedioso
y difcil, al estar las distintas unidades de los computadores compuestas de miles de
transistores, resistencias, y capacitores.
Con la fabricacin del primer CI en el ao 1959, nace la novedosa tecnologa
de la microelectrnica. El uso del CI en la industria de computadores a partir de 1965
seala el inicio de la aparicin en el mercado de la tercera generacin de computadores. Este dispositivo permiti la reduccin del costo y de las dimensiones de las grandes maquinas merced a la utilizacin de componentes semiconductores integrados de
ms velocidad, mayor fiabilidad, y menor consumo de potencia. El sistema 360 de
IBM es el exponente ms destacado de esta generacin.
El 360 fue introducido por IBM en 1965 como un modelo que incorporaba la
tecnologa de circuitos integrados y que ofreca una arquitectura ms avanzada que
los integrantes de la serie 7000. Est mquina puede considerarse como la mayor
conquista de IBM al apuntalar a la empresa como lder definitivo de la comercializacin de computadores con dominio de ms del setenta por ciento del mercado. Este
computador fue de uso difundido en las principales universidades y centros de investigacin durante la dcada del 60.

Fig. 1.15 El IBM 360. Primer computador con microprograma.

El diseo de esta mquina fue un proceso tan cuidadoso y planificado que la


arquitectura del sistema 360 an la conservan los sistemas de cmputo de gran escala

Introduccin al Computador

17

fabricados actualmente por IBM. En 1965 IBM liber cinco modelos de la familia
del sistema/360, identificados como los modelos: 30, 40, 50, 65, y 75. Tal estrategia
permiti no solo adaptar la mquina a las necesidades del usuario, sino que ofreci la
posibilidad que al incrementarse los requerimientos de procesamiento del comprador,
ste pudiese, con una inversin razonable, adquirir un modelo ms avanzado del sistema.
El 360 fue diseado de modo que un programa determinado pudiese ser ejecutado por cualquiera de los modelos, no obstante existan diferencias sustanciales en
los recursos que ofreca cada miembro de la familia, bsicamente en la capacidad de
memoria, velocidad de procesamiento, nmero de buses y de puertos de E/S. El modesto modelo 30 slo poda obtener un byte en cada operacin de acceso a una posicin del espacio mximo de memoria de 64 Kbytes, mientras que el flamante modelo
75, con un rea de memoria de 512 Kbyte, era capaz de transferir ocho bytes en forma
simultanea. De hecho el modelo 75 era cincuenta veces ms rpido que el 30. En la
tabla 1.2 se detallan las caractersticas principales de los diferentes modelos de la
familia IBM/360.
Tabla 1.2. Caractersticas de los modelos del sistema IBM/360.
MODELO
CARATERSTICAS

Memoria Mxima (Kbytes)


Velocidad de acceso a memoria (Mbytes/s,
mx)
Tiempo de ciclo del procesador (s)
Velocidad relativa
Nmero de buses de datos
Velocidad del bus de datos. (Kbytes/s, mx)

30

40

50

65

75

64
0.5

256
0.8

256
2.0

512
8.0

512
16.0

1.0
1
3
250

0.625
3.5
3
400

0.5
10
4
800

0.25
21
6
1250

0.2
50
6
1250

Adems del concepto de microprograma, con el IBM 360 surgieron otras innovaciones en el campo de diseo de computadores. Por ejemplo el uso de circuitos
controladores de interrupciones y de acceso directo a memoria. En el ao 1968 se
diseo el primer computador comercial donde se puso en prctica el concepto de
memoria cache, ste fue el modelo 360/85 de IBM.
A la par de aumentar la velocidad de ejecucin y la confiabilidad de los computadores de gran escala de la poca, la incipiente tecnologa de la microelectrnica
impuls el diseo de un nuevo tipo de sistema procesador con menor tamao, requerimientos de energa reducido, y de fcil mantenimiento, en virtud de disponer de
una arquitectura menos compleja que la de las mquinas grandes pero que ofreca una
gran capacidad de ejecucin, tales mquinas se conocen como minicomputadores. El
prototipo de este tipo de computadores fue el PDP-8 fabricado por la empresa DEC
y cuyas dimensiones y cantidad de calor generado no exigan su ubicacin en grandes
locales refrigerados.

Introduccin al Computador

18

Los primeros minis estuvieron dedicados al clculo de la accin de control en


sistemas de control de procesos y de mquinas en la industria, aplicaciones donde era
usual que el potencial de computo y los recursos ofrecidos por los minis superaran las
exigencias de velocidad de procesamiento y capacidad de almacenamiento necesarias
para la automatizacin del proceso industrial, lo cual representaba en cierta medida
un desperdicio de recursos tecnolgicos.

Fig. 1.16 El PDP-8 poda colocarse sobre un escritorio.


La patente subutilizacin de estas mquinas en ciertas tareas de automatizacin no determin que dejaran de ser usados como controladores programables en la
industria, sino que ms bien permiti que estas mquinas se manifestaran como lo
que realmente eran: un computador de propsito general a pequea escala.
Para inicios de los aos 70 se distinguen dos clases principales de aplicaciones en las cuales se usaron los minicomputadores: en primer lugar la concepcin del
mini, con su relativo bajo costo, como una mquina pequea dirigida a aplicaciones
generales permiti que fuese utilizado por grupos pequeos de investigadores en
universidades y centros de investigacin para la solucin de problemas concretos de
ciencia e ingeniera. El PDP-8, por ejemplo, ocupaba un rea reducida y su costo de
16 mil dlares era una fraccin del precio de adquisicin de los cientos de miles de
dlares correspondientes a un modelo del sistema 360. En segundo trmino, era comn encontrar minicomputadores fabricados con propsito especfico, actuando como el elemento clave en tareas de adquisicin de datos, supervisin y control de sistemas industriales complejos. Con relacin a la programacin, IBM introdujo el primer sistema operativo OS/360 con multiprogramacin. En el ao 1970, Ken Thompson y Dennis Ritchie desarrollaron el sistema operativo UNIX en los laboratorios Bell.
Los computadores de esta generacin alcanzaron velocidades de hasta 1 x 106 instrucciones por segundo.

Introduccin al Computador

19

La cuarta Generacin: el microprocesador.


A diferencia de las generaciones anteriores, la fecha de transicin hacia la
cuarta generacin no la distingue la introduccin de un nuevo modelo de computador,
o el uso de una tecnologa novedosa en la fabricacin de stos. Para muchos especialistas la transicin hacia la cuarta generacin de sistemas de computacin ocurre en
los inicios de la dcada de los aos 70 cuando aparece la tecnologa LSI, como resultado del sostenido incremento de la densidad de integracin de circuitos digitales. La
aplicacin de esta tcnica de integracin condujo a la fabricacin de dispositivos
que contenan en un encapsulado desde miles a decenas de miles de interruptores
digitales.
La primera aplicacin de la tecnologa LSI fue el desarrollo de chips de memoria para sustituir a las voluminosas y lentas unidades de almacenamiento basadas
en ncleos magnticos, tradicionalmente usadas en computadores. A partir de la aparicin del primer circuito integrado en 1959, un impresionante desarrollo en la tecnologa de la microelectrnica condujo en la dcada del 60, a duplicar cada ao el nmero de interruptores contenido en un CI. Este vertiginoso comps disminuy en la
siguiente dcada, a la an significativa cadencia de cuadriplicarlos cada tres aos.
Gordon Moore, uno de los fundadores del consorcio INTEL, haba predicho
este comportamiento para la fabricacin de chips de memoria, vaticinio hoy conocido
como la famosa Ley de Moore. La figura 1.17 muestra una grfica del crecimiento de
la capacidad en Kbits de los chips de memorias DRAM en funcin de la fecha de
introduccin de los dispositivos LSI durante un tiempo de 20 aos. Se observa que es
patente la validez del pronstico de Moore, considerando que slo el circuito integrado de 1 Mbits se neg a seguir la conducta de sus antecesores, al debutar un ao antes
de lo previsto.
105
16M

Capacidad en Kbits

10

4M
1M

103
256K

102

64K
Ley de Moore
16K
DRAM

10
1976

1978

1980

1982

1984

1986

1988

1990

1992

Ao de inicio de ventas
Fig. 1.17 Incremento de la capacidad de dispositivos de memoria dinmica con el tiempo

Introduccin al Computador

20

En el curso de los siguientes veinte aos, la industria del silicio se ha mantenido a este nivel. El perfeccionamiento en las tcnicas de integracin permiti la
construccin de sistemas procesadores ms pequeos, con menor duracin del ciclo
de instruccin, y costo ms bajo. Aun cuando la introduccin del CI marc el inicio
de una era fructfera para la industria de fabricacin de sistemas de computacin al
permitir la disminucin de los altos precios de adquisicin de las grandes mquinas
de computo, y al penetrar con los minicomputadores en el sector industrial que hasta
esa fecha no disfrutaba de las ventajas inherentes al uso de procesadores, fue el ao
de 1971 la fecha de ocurrencia de un suceso que no slo constituyo una revolucin en
la industria de la computacin, sino que en pocos aos cambi para siempre y en sentido positivo el modo de vida de millones de personas en todo el mundo, se trata de la
invencin del microprocesador por ingenieros de una modesta empresa de nombre
INTEL, hasta entonces fabricante de dispositivos de memoria.
Todo comenz 20 aos antes, en los aos 50, cuando la necesidad presente de
disponer de equipos e instrumentos sofisticados y de alta precisin para actividades
relacionadas con la navegacin en el espacio, impuls a las empresas fabricantes de
semiconductores a la mejora de los componentes electrnicos de uso comn para la
poca. La carrera espacial exiga dispositivos de menor tamao, con bajo consumo
de energa y ms eficientes. Las investigaciones realizadas resultaron en el nacimiento la tecnologa de la microelectrnica y el diseo y produccin de circuitos integrados con integracin a muy grande escala (VLSI) capaces de contener hoy en da millones de transistores en un rea reducida de silicio. El primer microprocesador Pentium, por ejemplo, aloja cerca de tres millones de transistores en su encapsulado. En
al actualidad un procesador Pentium IV o un Power PC tienen cerca de 200 millones
de transistores.
Aun cuando, en principio, la carrera a la conquista del espacio produjo un notable desarrollo de la industria de la microelectrnica; la llegada del hombre a la luna
en 1969 y los resultados poco alentadores en lo que se refiere al aprovechamiento
cientfico y econmico de los viajes espaciales, junto con los elevados costos que supona mantener un programa continuo de envo de astronautas a la exploracin del
espacio; deriv en el curso de 1970 en una marcada disminucin de los contratos de
investigacin establecidos entre la NASA y las empresas fabricantes de CIs..
En bsqueda de colocar sus productos en un mercado de ms amplio espectro,
las compaas de componentes electrnicos dirigieron su atencin haca el desarrollo
de mquinas de calcular electrnicas de bolsillo, abriendo de esta manera un mercado
potencial que significaba la introduccin de cientos de miles de sus productos, como
una compensacin a la prdida del reducido, pero lucrativo, mercado de aplicaciones
militares y espaciales.
El desarrollo y produccin del P 4004 por la corporacin INTEL fue el resultado de contratos establecidos entre la empresa norteamericana con la compaa
japonesa Busicom, dedicada a desarrollos de sistema electrnicos de clculo. En el

Introduccin al Computador

21

ao 1971 no existan los Ps y la empresa INTEL se dedicaba a la produccin de


circuitos integrados de memoria. Este cliente japons solicit el diseo de dispositivos integrados para cinco nuevos modelos de calculadoras de escritorio, tarea que
representaba para INTEL el desarrollo de doce CIs diferentes de propsitos especficos. En lugar de esto, se realiz el diseo de un circuito programable para satisfacer
las necesidades de la empresa Busicom

Fig. 1.18 El primer microprocesador: El 4004 de Intel.

La invencin de una CPU mono pastilla no fue el resultado de un proceso de


investigacin planificado y desarrollado por INTEL, ms bien debe considerarse que
el advenimiento del dispositivo fue un afortunado producto de las circunstancias. De
hecho el equipo de ingeniera de INTEL no tena idea del potencial encerrado en el
diseo que realizaron. En realidad el P 4004 era de potencia limitada e inadecuado
para el uso en el tratamiento de grandes cantidades de datos, al slo tener un conjunto
de 45 instrucciones diferentes y un espacio mximo de memoria de 4 Kbytes. Fue
usado como CPU de sistemas controladores simples y en juegos de video.
A finales del ao 1971, INTEL inicia la comercializacin del primer P de 8
bits, el cual fue bautizado con el nombre cdigo 8008. El dispositivo fue presentado en
un encapsulado de 18 terminales en doble lnea, donde alojaron los 3500 transistores
utilizados en el diseo. Con acceso hasta 16 Kbytes posiciones de memoria, 93 instrucciones distintas y un ciclo de instruccin de 20 s, dispona de potencia y velocidad suficiente para ser usado en aplicaciones ms avanzadas que el 4004, tales como
equipos perifricos y terminales de computadores.

Fig. 1.19 El microprocesador 8008 de Intel.

Introduccin al Computador

22

El 8008 nace como resultado de un convenio con la compaa Display Terminal Corporation para el desarrollo de un CI controlador de tubos de rayos catdicos.
Diseado el dispositivo, fue rechazado por la empresa contratante aduciendo que si
bien el CI cumpla con la mayora de las especificaciones, careca de la velocidad necesaria para realizar eficientemente la tarea de presentacin serial de caracteres. Ante
este aparente fracaso, INTEL liber el circuito al mercado, obteniendo sorpresivamente volmenes de venta del chip, tan grandes como imprevistos; haba nacido el microprocesador como un circuito LSI de uso estndar. A medida que se desarrollaban ms
y ms aplicaciones del P 8008 surgieron problemas de ingeniera de complejidad
creciente susceptibles de ser resueltos con sistemas basados en microprocesador, pero
con requisitos tcnicos imposibles de satisfacer con el repertorio de instrucciones y la
capacidad de memoria disponibles para el P 8008.
Con la propiedad de un dispositivo en vas de convertirse en un estndar industrial, la atencin del equipo de ingeniera de INTEL se enfoc en el perfeccionamiento
este producto, presentando en el ao 1974 el primognito de la segunda generacin de
microprocesadores, el 8080. Fabricado con 6000 transistores y tecnologa PMOS, el
8080 era compatible por programa con el 8008. El desempeo del nuevo producto
superaba con creces el del 8008: adems de disponer de un nmero mayor de instrucciones, un espacio de memoria de 64 Kbytes, y ser 10 veces ms rpido que su antecesor, poda acoplarse directamente con componentes de la familia lgica TTL. Estos
atributos aceleraron la expansin del microprocesador y sellaron en forma definitiva el
inicio de la supremaca de la empresa como consorcio vanguardia en el desarrollo,
fabricacin y comercializacin de chips microprocesadores, posicin que mantiene
actualmente.
Tabla 1.3. Microprocesadores de 8 bits.
FABRICANTE

Signetics
Motorola
Intel
MOS technology
Rockwell
Fairchild
National Semiconductor

CDIGO

2650
MC6800
8080
6502
PPS-8
F-8
IMP-8

La mayora de las compaas importantes que producan CIs se apresuraron en


desarrollar e introducir en el mercado un microprocesador propio, algunos de los cuales aun hoy se encuentra en venta. Una relacin de los primeros Ps modernos de 8
bits, con los nombres cdigos y la casa fabricante, se muestra en la tabla 1.3.
Cada nuevo producto presentado por la empresa INTEL exhiba mayor velocidad, espacio de memoria aumentado y un repertorio de instrucciones ms potente y
diverso; adems de requerir cada vez menos componentes para disear y construir un
sistema C completo a partir del P.

Introduccin al Computador

23

Para el diseo de su siguiente P INTEL utiliza 20 mil transistores y tecnologa


NMOS, introduciendo en ao de 1977, el microprocesador 8085 como una versin
sutilmente mejorada del 8080. Con slo dos nuevas instrucciones, igual capacidad de
almacenamiento y una leve disminucin de la duracin del ciclo de instruccin (de 2
s a 1.3 s), el mayor atractivo del 8085 se corresponde con la simplificacin del nmero de componentes necesarios para el desarrollo de un sistema mnimo.

Nmero de componentes para un sistema mnimo

Algunos elementos que aparecan, en sistemas basados en el 8080, como circuitos integrados externos al microprocesador, tales como el generador de reloj y el
controlador de sistema, se incluyeron en el encapsulado del 8085, incorporndose
adems un canal de comunicacin serie controlado por programa, adems de cinco
niveles de interrupcin por hardware. Las caractersticas del 8085 y circuitos asociados permitieron la construccin de un microcomputador con slo tres circuitos integrados, como indica la figura 1.20. Esto represent un avance significativo, si se considera que disear un sistema mnimo con el P 8008 requera sesenta componentes,
y treinta con el 8080. A la tercera generacin de microprocesadores pertenecen, adems del 8085, el P MC6802 de Motorola, y el Z80 de Zilog, todos procesadores de 8
bits.

Ao del diseo del microcomputador


Fig. 1.20. Disminucin en el tiempo del nmero de circuitos integrados necesarios para construir un
sistema C bsico.

Los microprocesadores de 8 bits empezaron a usarse en tareas de procesamiento de datos cuando los estudiantes de computacin Stephen Wozniak y Steven
Jobs recurrieron al microprocesador R6500 para desarrollar, en ao 1976, el primer
microcomputador de propsito general, al cual llamaron Apple I. Esta mquina fue el
modelo inicial de una fructfera empresa de fabricacin de microcomputadores conocida actualmente como Apple Computer Inc.

Introduccin al Computador

24

Las ofertas de mquinas domsticas y de oficina se intensificaron con la aparicin de Cs de diferentes marcas y modelos tales como, el MITS Altair 8800
(8080), .Atari 400 (R6502B), PCS80/30 (8085), TRS-80 (Z80) y el Apple II (6502),
entre otros. Las velocidades de ejecucin de estos Cs no superaba los 3 MHz, estando la capacidad de memoria limitada a 64 Kbytes.

Fig. 1.21 El microcomputador APPLE II.

La quinta Generacin: Tecnologa VLSI.


La identificacin de la generacin a la cual pertenece un sistema especfico se
hizo cada vez ms difcil a partir del cuarto escaln de la clasificacin. Inicialmente la
pertenencia a una generacin la fijaba el tipo de tecnologa empleada en el hardware
de la mquina, con independencia del sistema operativo, potencia de los programas de
aplicacin, o lenguajes posibles de ejecutar por el computador.
A medida que los computadores evolucionaron hacia mquinas de menores
dimensiones pero con alta potencia de procesamiento, el software devino en un factor
de primera lnea para medir el desempeo de un sistema. Tal situacin junto con la
aparicin, cada vez con mayor frecuencia, de nuevos modelos provenientes de una
gran diversidad de fabricantes, ha atenuado las fronteras entre una generacin y otra,
haciendo que tal clasificacin sea de poca o ninguna utilidad. En este trabajo se supone que la actual y quinta generacin se inicia con el desarrollo de la tecnologa VLSI.
Las limitaciones naturales de los Ps de 8 bits florecieron con el incremento de
la complejidad de los programas de procesamiento de datos, tales como los administradores de base de datos y los procesadores de palabras, cuyas funciones cada vez
ms sofisticadas exigan una capacidad de memoria superior a 64 Kbytes; adems del
hecho que operaciones aritmticas elementales como la multiplicacin y divisin deban ser realizadas por programas de usuario. Tales razones impulsaron el diseo de

Introduccin al Computador

25

un microprocesador de mayor potencia de computo y capaz de soportar mayor capacidad de memoria.


INTEL libera en abril de 1978 el 8086, un P de 16 bits de gran potencia
construido con 29000 transistores y tecnologa HMOS. En virtud de un conjunto de
instrucciones muy completo y verstil, y con la posibilidad de manejar hasta 1 Mbyte
de memoria, ofreca tanta capacidad de procesamiento como la de un minicomputador de la poca. El 8088, compatible con el 8086, fue lanzado en el ao 1979, siendo
elegido por IBM como CPU del C IBM PC original. Este dispositivo es catalogado
como un P de 16 bits pero para reducir los costos de produccin, el bus de datos
es de 8 bits. En realidad esto no era una gran limitacin, debido a que los dispositivos LSI de memoria y puertos podan aceptar/ofrecer slo un byte a la vez.
El 8086 ejecuta una suma 3.25 veces ms rpido que su antecesor el 8085,
merced a que contiene en su encapsulado dos Ps para fines especficos: la unidad de
ejecucin (UE) y la unidad de conexin al bus (UCB), cada unidad dispone de su banco de registros, su unidad aritmtica y de control y operan en forma independiente.
Este modo de funcionamiento mejora en forma notable el proceso de bsqueda en
memoria y ejecucin de las instrucciones dado que permite que ambas tareas se realicen en forma simultanea. La UCB tiene como funcin buscar la instruccin en memoria realizando un procedimiento de ordenacin y tratamiento de colas garantizando
que la unidad de ejecucin siempre tendr disponible una instruccin para su ejecucin sin necesidad de esperar que sta se obtenga desde la memoria.
El 8086 y el 8088 pueden considerase los primeros Ps modernos, los cuales
fueron evolucionando hasta disponer de numerosos procesadores internos que ejecutan
tareas independientes con un comportamiento global que permite la ejecucin de instrucciones en forma paralela. Conviene resaltar que en los Ps de 8 bits mientras se
ejecutaba una instruccin no se realizaban operacin de bsqueda en memoria.
Cuando en el ao 1980 IBM introdujo el Computador Personal (PC) basado en
el procesador 8086 ejecutando a 4.77 MHz, se desat una vertiginosa carrera tecnolgica que no solo derrumb en forma impensable los precios de los Cs, sino que permiti que en solo 20 aos se disponga de maquinas con frecuencias de operacin de
hasta 640 veces la del primer i86 y capaces de manejar hasta 64 Gbyte de memoria.
Para esta poca el mercado de fabricacin de Ps era compartido por INTEL
con varias empresas de semiconductores entre las que destacaban Motorola con la
serie 68000, y Zilog con el Z8000; hasta cuando IBM concedi a INTEL el contrato de
desarrollo de la arquitectura del PC, producto del cual se vendieron un milln de unidades en los dos primeros aos. Puede afirmarse con seguridad que la historia de la
computacin personal tiene como actor principal a INTEL, no existe en la actualidad
desarrollo posible en la arquitectura o programacin de PCs que no est relacionada de

Introduccin al Computador

26

alguna forma con los diseos de INTEL, empresa que representa un estndar en la
industria de la computacin.
INTEL Corporation marc el paso del desarrollo del P con la introduccin de
procesadores de 16 bits cada vez ms avanzados como el 80186 y el 80286. El P
80186 fue un dispositivo diseado para aplicaciones de control y no se utiliz como
CPU de Cs, mientras que el 80286, introducido en febrero de 1982, fue el sucesor del
8086 y puede considerarse el siguiente escaln en el proceso de desarrollo de los Ps
de 16 bits para propsito general.
Los 134 mil transistores albergados en el interior del encapsulado del 80286
conforman un dispositivo procesador ms avanzado que el 8086, destinado a operar en
ambientes multitareas y multiusuarios. Una unidad interna para administracin de
memoria lo capacita para gobernar un mximo de 16 Mbytes de memoria fsica y 1
Gbyte de memoria virtual. La frecuencia mxima de operacin de la ltima versin del
80286 fue de 16 MHz.
Durante la dcada de los 80 el dominio del gigante del silicio en el diseo de
Ps era indiscutible, como lo indica la introduccin de nuevos procesadores a ritmo
acelerado. Cada producto estrenado revelaba un notable incremento del grado de integracin del circuito integrado. En la tabla 1.4 se presentan las caractersticas de los
Ps INTEL. El nmero de transistores indicado corresponde a la primera versin del
modelo de microprocesador.
Tabla 1.4 Caractersticas de los microprocesadores de Intel.
Cdigo

Fecha de
Introduccin

Frecuencia

Memoria

Transitores

MHz

4004

abr/1971

0.108

640

2.300

8008

abr/1972

0.108

16 K

3.500

8080

abr/1974

64 K

6.000

8086

jun/1978

5-10

1M

29.000

8088

jun/1978

5-8

1M

29.000

80286

feb/1982

8-16

16 M

134.000

80386

oct/1985

16-33

4G

275.000

80486

abr/1989

25-100

4G

1.200.000

Pentium

mar/1993

60-233

4G

3.100.000

Pentium Pro

mar/1995

150-200

64 G

5.500.000

Pentium II

may/1997

233-400

64 G

7.500.000

Pentium III

feb/1999

450-933

64 G

9.500.000

Pentium IV

nov/2000

1400-x000 64 G

42.000.000

La curva de la figura 1.22 muestra el aumento del nmero de transistores con


las etapas de desarrollo de los Ps de INTEL, aprecindose la validez de la ley de
Moore.

Introduccin al Computador

27

La empresa INTEL continuo su lnea de diseo con la liberacin de nuevos microprocesadores de 32 bits como el 80386 y el 80486 con velocidades mximas de 33
MHz y 120 MHz respectivamente y espacio de memoria de 4 Gbyte. El 80486 naci
en 1989 e inclua en el mismo encapsulado una CPU de 32 bits ms avanzada que un
80386, un coprocesador matemtico, y una memoria cache de 8 Kbytes, recursos que
garantizaban la ejecucin 54 millones de instrucciones por segundo (MIPS) para el
modelo de 66 MHz, mejora notable si se considera que el 8086 original solo ejecutaba
2.5 MIPS.

Pentium
Pro
Pentium II

Transistores

80486

Pentium

80286
80386
8086
8088
Ley de Moore

8008
8080

Procesadores

8004

.Ao de inicio de ventas


Fig.1.22 Comparacin entre el aumento del grado de integracin de los Ps de INTEL y la Ley de
Moore.

En junio de 1989 y durante los siguientes 9 meses, un equipo de ingenieros de


INTEL bajo la coordinacin de Vinoh Dham realiza el diseo de un nuevo CPU con
nombre cdigo P-5, el Pentium o 80586. La fase de desarrollo del Pentium continu
hasta el 22 de marzo de 1993, se fecha de entrega a los fabricantes de microcomputadores de una versin de 66 MHz.
Una falla presentada en la ejecucin de una versin del Pentium y difundida
ampliamente por todos los medios, incluyendo Internet, fue la razn por la cual IBM
ces en el ao 1995 la fructfera relacin comercial mantenida durante 15 aos con
INTEL, apelando a la nueva generacin de procesadores Power PC, desarrollados en
conjunto por las empresas Motorola y Apple Computer, y usados en estaciones de trabajo producidas por Hewllet Packard, IBM, y Sun Microsystems. En el ao 1995 existan 1 milln de mquinas fabricadas por Sun Microsystems, y 100 millones de PCs o
compatibles.

Introduccin al Computador

28

El Power PC es un microprocesador de arquitectura RISC (Reduced Instruction


Set Computing). Este trmino identifica a las mquinas diseadas con una arquitectura
desarrollada a finales de los 70 por John Cocke, cientfico de IBM que laboraba en el
Centro de Investigaciones de Georgetown.
Con la introduccin del Power PC la computacin de conjunto reducido de
instrucciones entra en competencia en un mercado de alto volumen como el de computadores personales dominado por la computacin de conjunto complejo de instrucciones (CISC: Complex Instruction Set Computing), las descripcin de la arquitectura
RISC y la discusin sobre sus ventajas o limitaciones con respecto a la CISC escapan
al alcance de este trabajo.
Aunque lder, INTEL no ha carecido de competidores en el lucrativo mercado
de microprocesadores. Desde la el indiscutible xito comercial logrado con las primeras versiones del 8086 y 8088, otras empresas fabricantes de circuitos integrados se
incorporaron al desarrollo y produccin de Ps. El consorcio japons NEC (Nipppon
Electric Company) realiz clones de ambos procesadores denominndolos V20 y V30
pero incrementando notablemente el rendimiento. En la actualidad existen diversos
fabricantes que ofrecen Ps competitivos con los fabricados por Intel, destacndose
Advance Micro Devices (AMD), Cyrix Corporation, Texas Instruments, NEC, NexGen
y SGS Thompson.
La disolucin de la alianza INTEL-IBM no fue suficiente para despojar a INTEL de la supremaca tecnolgica que ha mantenido durante 30 aos en la industria de
fabricacin de microprocesadores de escritorio. A pesar de los esfuerzos de los competidores por desplazar al gigante del silicio, los avances en el Pentium continuaron en
forma acelerada con la introduccin en marzo y junio de 1995 de las versiones de 120
y 133 MHz.
Hasta 1999 el Pentium III de 550 MHz era el P ms poderoso de Intel, el
cual es 20 % ms rpido que el P Pentium II/450 MHz fabricado en el ao 1998. Por
su parte AMD, la empresa competidora, tena el AMD-K6 como su producto estrella,
lanzando posteriormente el AMD-K7 como opcin ante el Pentium III. En los primeros meses del siglo XXI era posible adquirir por la cantidad de medio milln de bolvares un microcomputador con 64 Mbytes de memoria, construido alrededor de un
procesador Pentium III funcionando a la vertiginosa velocidad de 750 MHz. En la
actualidad, una mquina Pentium IV /3.0 GHz con 512 MBytes de DDR y dems perifricos, cuesta aproximadamente 2 millones de bolvares con impresora incluida.
En realidad la falla encontrada en el Pentium solo diversific la oferta de Ps,
en la actualidad la mayora de los diseadores de microcomputadores de escritorio
tienen ms de un proveedor de chips permitiendo que los usuarios dispongan de inmediato de cualquier adelanto tecnolgico producto de la feroz competencia en el mundo
del silicio, la cual en general resulta en una reduccin de los precios.

Introduccin al Computador

29

Para finalizar esta historia conviene resaltar que son numerosos los adelantos
tecnolgicos en materia de computacin no mencionados o discutidos en extensin en
este texto. Por ejemplo existen desarrollos importantes en procesamiento paralelo,
donde se ejecuta ms de un programa en forma simultanea usando ms de un microprocesador activo, en contraste al multiprocesamiento tpico de los Ps modernos
donde existen unidades que actan como procesadores independientes que permiten la
ejecucin de un programa mientras que se realizan operaciones de transferencia de
entrada/salida en paralelo con el programa.
Problemas como procesamiento de imgenes requieren de una intensidad de
cmputo considerable. Si se considera el tratamiento de una secuencia de imgenes de
resolucin media (512 pixels x 512 pixels) a una frecuencia de 30 cuadros/seg, en
colores (3 bites por pixel), se requieren una velocidad de 24 millones de bytes por
segundo. Un algoritmo simple puede requerir miles de operaciones por pixel, de modo
que el uso de computacin paralela es inevitable para resolver esta clase de problemas.
Sin embargo entre los especialistas existe una tendencia a usar mquinas secuenciales
de alto poder aduciendo que si bien la arquitectura paralela ha logrado avances significativos no ha ocurrido lo mismo con los algoritmos para procesamiento paralelo.
Otro punto digno de mencionar se relaciona con el dominio casi absoluto que
la arquitectura Von Neumann ha mantenido en el diseo de mquina de cmputo. Los
microprocesadores Intel ix86 usan tal arquitectura y de alguna manera comparten
muchas caractersticas de los computadores fabricados en las ltimas cuatro dcadas.
En aplicaciones de procesamiento digital de seales (DSP) se requiere la realizacin de clculos repetidos que incluyen operaciones de suma y multiplicacin, las
cuales conviene hacer a alta velocidad. Aunque los procesadores CISC tienen una instruccin de multiplicacin, desafortunadamente requiere varios ciclos de reloj para su
ejecucin, debido a que se realiza a travs de microprogramacin. El procesamiento
de seales en tiempo real exige la realizacin de cierta cantidad de clculo en un tiempo determinado, de acuerdo con la velocidad que son transferidos los datos a procesar.
De modo que los procesadores CISC no son adecuados para este tipo de clculo, por la
lentitud con la cual realizan operaciones de multiplicacin.
En la bsqueda de una arquitectura para procesadores DSP los diseadores recurrieron a la abandonada arquitectura Harvard que permita la transferencia simultnea de instrucciones y datos al disponer de espacios de memoria separado para datos y
programa. En al ao 1980 la empresa American Microsystems Inc introdujo el primer
procesador DSP AMI S2811, al poco tiempo hicieron su aparicin el Intel 2920 y el
NEC mPD7720, todos con arquitectura Harvard. En el ao 1982 Texas Instruments
liber el TMS 32010.
Una fuente actualizada sobre procesadores modernos es la WEB, los avances
tecnolgicos son de tal magnitud, diversidad y velocidad que casi es necesario redefinir el concepto de computador. Por ejemplo, existe una mquina japonesa constituida

Introduccin al Computador

30

por 640 computadores interconectados, que ejecutan programas con el propsito de


simular las condiciones reales del clima del planeta tierra. Los fabricantes de este cclope se refieren a ste como, el computador.

Organizacin del Computador

31

Organizacin del computador


En forma similar a como la aparicin en el ao 1980 del primer reloj de cuarzo desplaz el mecanismo tradicional de medicin de tiempo basado en componentes
mecnicos, el procesamiento de informacin por medios electrnicos dej muy atrs
las tcnicas mecnicas usadas por el hombre para el manejo de informacin.
El computador es usado en todos los campos donde se requiere resolver problemas relacionados con el procesamiento de informacin. En general, la solucin de
tales problemas exige la realizacin de las funciones mostradas en el diagrama de la
figura 2.1.
Datos

Adquirir

Procesar

Almacenar

Presentar

Resultados

Fig. 2.1 Funciones de un sistema de procesamiento de informacin

La informacin debe ser: adquirida y detectada como datos originados del


mundo exterior al sistema en la forma de estados fsicos convenientemente modificados; procesada, codificada, decodificada, evaluada, ordenada, asociada, o combinada para generar nuevas representaciones de informacin; almacenada en un
subsistema de memoria donde puede ser recuperada y usada; y presentada, los resultados del procesamiento de los datos de entradas pueden mostrarse en forma apropia-

Organizacin del Computador

32

da para ser entendida por humanos o como comandos que permiten la realizacin de
algn trabajo.
En un sistema de procesamiento de informacin son vitales los elementos perifricos encargados de vincular al sistema con su entorno. Los captadores de entrada
o sensores y elementos asociados acondicionan la variable fsica al lenguaje entendido por el computador, mientras que los perifricos de salida permiten presentar o
transmitir los resultados del procesamiento, todas estas funciones son controladas por
un programa almacenado en memoria.

2.1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR


Un sistema capaz de realizar las funciones bsicas de procesamiento de datos
representadas en la secuencia de bloque de la figura 2.1 es el computador, el cual de
hecho se define como un procesador de datos que ejecuta operaciones aritmticas y/o
lgicas sin que requiera comnmente intervencin humana durante la ejecucin del
programa.
CCPPU
U

MEMORIA

SALIDAS

UNIDAD
LGICA Y
ARITMTICA

UNIDAD
DE
CONTROL
ENTRADAS

RELOJ

Fig. 2.2 Estructura simplificada de un computador.

Un computador es en esencia un sistema digital que resulta de la combinacin


de una unidad secuencial sincrnica de control programable, una unidad para la ejecucin de operaciones lgicas y aritmticas y una seccin de memoria. El sistema es
capaz de realizar una tarea determinada por medio de una secuencia de micro operaciones elementales determinada por la ejecucin de un programa de micro instrucciones, el cual no hace referencia a la memoria principal.
La unidad de control es programable y recibe un programa en forma de una
sucesin de instrucciones almacenadas con antelacin en la memoria del sistema, las

Organizacin del Computador

33

cuales indican a la seccin de control las micro operaciones que debe realizar para la
ejecucin de cada instruccin particular. Modificar las especificaciones de funcionamiento del computador solo requiere almacenar en la memoria una nueva secuencia
de instrucciones. En la literatura especializada se acostumbra agrupar la seccin de
clculo y la unidad de control en un bloque nico al cual se denomina unidad central
de proceso o en forma simplificada CPU.
Un computador tpico incluye los elementos propuestos en la estructura bsica de la mquina de Von Newmann, cuyo diagrama en bloques se muestra en 2.1.
Aunque John Von Newmann propuso este esquema a mediados de siglo ha perdurado, aunque evolucionando sustancialmente en los ltimos 50 aos, como el modelo a
seguir por muchos de las mquinas de cmputo modernas. Como se observa en la
figura 2.2, los componentes bsicos de un computador son:

La Unidad Lgica y Aritmtica. (ALU)


La Unidad Central de Proceso
(CPU)
La Unidad de Control.

La Memoria

La Unidad de Entrada/Salida. , y

El Generador de Reloj.

(CU)

2.1.1 La unidad central de proceso


Es la esencia del sistema, su funcin es controlar la interpretacin y ejecucin
de las instrucciones y todas las acciones que realice el computador bajo la direccin
del programa almacenado en memoria en forma de una secuencia de instrucciones.
Toda CPU est compuesta de la Unidad Lgica y Aritmtica y la Unidad de Control
La ALU es la encargada del procesamiento de los datos de origen externo e interno. Es la seccin del computador donde se realiza la mayor parte de cmputos con
los datos bajo la conduccin de la CU. Las operaciones aritmticas y lgicas requeridas por la instruccin son ejecutadas por la ALU, estas operaciones generalmente son
realizadas por medio de lgica programada, e incluyen: suma, sustraccin, multiplicacin y divisin; adems, de las funciones lgicas: AND, OR, NOT, XOR y desplazamientos y rotaciones.
Los operandos necesarios as como el resultado son almacenados temporalmente en registros internos de la CPU capaces de conectarse a las entradas de la

Organizacin del Computador

34

ALU. Dentro de la CPU existen tambin un grupo de registros de propsito especfico


cuyas funciones se expondrn ms adelante.

Registros

Direcciones

ALU

Datos

Unidad
de control

Control

Fig. 2.3 Diagrama general de la unidad central de proceso.

2.1.2 La unidad de control


Dirige la secuencia de operaciones del sistema. La CU controla la bsqueda,
transferencia a la CPU, decodificacin y ejecucin de las instrucciones del programa
almacenado en la memoria del sistema. De acuerdo con los resultados de la interpretacin de la instruccin, la CU enva seales de control internas que sincronizan la
transferencia de datos entre registros, y entre stos y la ALU. Adems, genera seales
de control externas dirigidas a las restantes unidades del sistema. El control del flujo
de datos por las lneas de interconexin del sistema, y la interpretacin de las seales
de control que llegan a la CPU, son tambin responsabilidad de la CU.

2.1.3 La memoria
Contiene las instrucciones del programa que debe procesar la CPU, los datos
necesarios para la ejecucin del programa y los resultados de la ejecucin tambin
son almacenados en la memoria. Es responsabilidad de la CPU sincronizar la transferencia de datos desde y hacia la unidad de memoria del computador.
CPU
A10-A0
Memoria
D7-D0
R/W
(a)

(b)

Fig. 2.4 a) Conexin del circuito l P b) Informacin almacenada

Organizacin del Computador

35

En la figura 2.4.a se muestra un esquema simple de conexin de una memoria


de 1024 posiciones al CPU. El procesador entrega la direccin (A9-A0) de la celda de
memoria fuente o destino de la informacin a transferir, y coloca la lnea de control
R/W en el estado lgico apropiado para leer (alto) o escribir (bajo) el dato en la memoria. El dato es transferido desde o hacia la CPU a travs del bus bidireccional de
datos.
Una memoria puede concebirse como un arreglo de biestables organizados en
celdas de 1, 4, 8, 16 bits, cada una de las cuales tiene una direccin especfica. La
figura 2.4.b es una representacin de una memoria de 1024 (0000-1023) posiciones
de 8 bits. Existen distintos tipos de memoria de acuerdo con el tipo de acceso y la
tecnologa usada en la fabricacin. La memoria principal en computadores es del tipo
de acceso aleatorio (RAM), trmino que identifica a dispositivos de almacenamiento
en los cuales el tiempo de acceso a una posicin determinada es independiente de la
localizacin del dato, de modo que el tiempo que el procesador debe esperar para
obtener informacin desde la memoria es el mismo para cada una de las 1024 posiciones.
2.1.4 La unidad de entrada/salida
Representan el canal de comunicacin del computador con el mundo exterior.
A travs de las unidades de E/S se intercambia informacin con dispositivos perifricos conectados al computador. La naturaleza de la informacin es variada. Los datos
y comandos provenientes de un teclado llegan a la CPU desde la unidad de entrada,
en forma de un cdigo interpretable por la CPU. Los resultados de la ejecucin de un
programa pueden ser dirigidos a una impresora por medio de una unidad de salida.

2.1.5 El generador de reloj


Constituye la base de tiempo maestra del sistema, siendo usado por la CU para sincronizar la secuencia de operaciones del computador, generando todas las seales necesarias para la transferencia interna y externa de informacin y para el funcionamiento de la ALU.
Como se observa en la figura 2.2, la comunicacin entre la unidad central de
proceso y las restantes unidades del computador se realiza por lneas de interconexin
denominadas genricamente buses, los cuales se distinguen por el tipo de informacin
que circula por stos. Un bus es una representacin de un grupo de lneas independientes que en un diagrama funcional de un computador tienen funciones comunes.
Existen tres tipos de buses: direcciones, datos, y control. Por el primero circulan las
direcciones de la fuente o destino de la informacin que se transfiere, la cual se transmite por el bus bidireccional de datos. El bus de control lo forman las seales necesa-

Organizacin del Computador

36

rias para el control de la mquina y del intercambio de informacin con los perifricos, por ejemplo la entrada de reset y las salidas de lectura y escritura, forman parte
del bus de control.
La ejecucin de un programa implica la participacin de todas las unidades
del computador. La CPU busca las instrucciones en la memoria, las decodifica y genera las seales de control del sistema (UC), ejecuta, si el programa lo requiere, operaciones aritmticas y/o lgicas (ALU). Los datos y resultados son transferidos a y
desde la CPU por las unidades de E/S. La seal de tiempo que sincroniza todo el proceso la suministra el reloj del sistema. Aunque el modo de operacin de la mquina
de Von Newmann es de naturaleza secuencial, lo cual significa que el programa est
almacenado en forma ordenada en posiciones consecutivas de memoria, y as es ejecutado. La mquina puede alterar la secuencia de la ejecucin, buscando la siguiente
instruccin en una posicin de otra rea de memoria. Esta capacidad, junto con el
concepto de programa almacenado constituyen los fundamentos de las sofisticadas
mquinas diseadas y construidas en la actualidad.

2.2 LAS INSTRUCCIONES DEL COMPUTADOR


La ejecucin de toda instruccin se realiza en dos fases fundamentales: bsqueda y ejecucin. Durante la fase de bsqueda el computador obtiene la instruccin
almacenada en memoria y la traslada a la CPU para su posterior decodificacin.
Instruccin a la CPU
BSQUEDA

EJECU-

Ejecucin culminada

CIN

Fig. 2.5 Fases de ejecucin de una instruccin.

Al inicio de la fase de ejecucin se procede a la decodificacin de la instruccin donde se informa a la unidad de control la secuencia de microinstrucciones que
debe realizar para la activacin de las seales internas y externas que permiten la ejecucin propiamente dicha. Como se observa en la figura 2.5 durante la fase de ejecucin la instruccin va al interior del procesador, culminada la fase de ejecucin se
inicia la bsqueda de la instruccin siguiente. El tiempo que el CPU dedica al procesamiento de una instruccin depende del tipo de instruccin. En el captulo 4 se analizarn detalladamente las fases de ejecucin de las instrucciones de un microprocesador.
La cadena de bits que constituye la instruccin porta informacin vital usada
por la unidad de control para realizar con propiedad las tareas fijadas por el programa
en ejecucin. En un computador de 4 direcciones se requieren 80 bits por instruccin:
16 para el cdigo de operacin y 64 para las direcciones. Si bien no existen en la ac-

Organizacin del Computador

37

tualidad, ni existieron hace 40 aos, limitaciones de orden tcnico para fabricar un


computador de 4 direcciones, el gran nmero de bits/instruccin es inconveniente
debido a que es necesaria una CPU con estructura interna muy compleja para el procesamiento adecuado de la instruccin.
Para simplificar la estructura del procesador conviene disminuir el nmero de
bits por instruccin, lo cual es equivalente a reducir la cantidad de informacin que
contiene la instruccin de 4 direcciones. De modo que la nica posibilidad es eliminar algunas o todas las zonas del campo de direccin. No se considera la opcin de
mantener cada instruccin en una posicin de memoria, porque la memoria debera
tener celdas de 80 bits, lo cual exigira que el bus de datos, los registros internos del
procesador, y la ALU fuesen de tal longitud. Entonces se supone que cada instruccin ocupa 5 posiciones de una memoria de celdas de 16 bits y se asume que la CPU
es capaz de distinguir la direccin de inicio de cada instruccin.
D79

Cdigo de
Operacin

D0

Direccin
Operando 1

Direccin
Operando 2

Direccin
Resultado

D63

(a)

D0

Cdigo de
Operacin

Direccin
Operando 1

Direccin
Operando 2

D47

Direccin
Resultado

(b)

D0

Cdigo de
Operacin

Direccin
Operando 1

D31

Direccin
Operando 2

(c)

D0

Cdigo de
Operacin
D15

Direccin
Instruccin
Siguiente

Direccin
Operando

(d)

D0

Cdigo de
Operacin

(e)

Fig. 2.6 Formato de instrucciones del computador.


(a) Cuatro direcciones. (b) Tres direcciones. (c) Dos direcciones.
(d) Una direccin.
(e) Sin direccin

Para obtener un computador de tres direcciones con el formato de instruccin


de la figura 2.6.b, se considera que el programa a ejecutar el computador se almacena en memoria como una secuencia de instrucciones que ocupan posiciones adyacentes, es posible entonces suprimir la zona del campo de direcciones que indica la ubicacin en la memoria de la prxima instruccin a ejecutar si se dota a la CPU de un
registro interno que se incremente en uno cada vez que se ejecute una instruccin o
parte de sta, tal registro se denomina contador de programa.
Si es necesario romper la secuencia normal del programa para ejecutar una
instruccin en otra rea de la memoria, el computador dispone de una instruccin de
salto o bifurcacin en cuyo campo de direccin se especifica la direccin del salto.
El efecto de la ejecucin de tal instruccin es sustituir el contenido del contador de
programa por el campo de direccin.

Organizacin del Computador

38

Para suprimir otros campos de la instruccin, debe incorporarse al procesador


registros internos que contengan el o los operandos que se requieren para ejecutar la
instruccin, y el resultado de sta. Por supuesto, el lenguaje de mquina de la CPU
debe incluir instrucciones que permitan la transferencia previa de los operandos al
interior de la CPU y el resultado a la memoria o a un puerto de entrada/salida.

Fig. 2.6 Reduccin del nmero de bits por instruccin.

Eliminando la zona de direccin del resultado se tiene un computador de dos


direcciones como se aprecia en la figura 2.5.c. Esto puede lograrse si el resultado se
almacena en la direccin que ocupa uno de los operandos, destruyendo el contenido
original (el operando) de la posicin de memoria en cuestin. Si es imprescindible
salvar esta informacin el procesador debe disponer de algn medio de trasladar el
operando a otra localizacin de memoria. Lo comn es que se realice una transferencia indirecta a travs de un registro interno de la CPU, una operacin de lectura en
memoria mueve el operando al registro y una subsiguiente escritura en memoria lo
transporta a la nueva direccin. Queda claro que el computador de dos direcciones
debe tener al menos dos registros internos, el contador de programa y un registro
para almacenamiento temporal.
Como indica la figura 2.5.d, un computador es de una direccin si uno de los
operandos se transfiere previamente a un registro interno de modo que la instruccin
slo contenga la direccin de memoria donde est el otro operando. Una instruccin
de transferencia de datos se encargar de trasladar un operando desde la memoria al
registro interno o Acumulador (A). Esta denominacin se debe al hecho que el (A) no
slo mantiene inicialmente uno de los operandos sino que adems almacena el resultado. Esto no significa mayor problema debido a que en memoria existe una copia

Organizacin del Computador

39

del operando original en A. El resultado se deposita en memoria por medio de una


instruccin de transferencia de datos desde el A hasta el dispositivo de almacenamiento.
La reduccin a una zona del campo de direccin de la instruccin fue uno de
los factores determinante para el desarrollo del microprocesador, como un dispositivo
programable cuya estructura interna incorpora todos los elementos de la CPU de un
computador en un circuito integrado, debido a que este formato garantiza el diseo
de la CPU ms sencilla posible y por ende la de menor costo. Para culminar esta seccin conviene destacar que las instrucciones que no hacen referencia a la memoria del
computador se denominan instrucciones sin direccin como se especfica en la figura
2.5.e.

2.3 CLASIFICACIN DE LOS COMPUTADORES


Definir grupos que abarquen los distintos computadores es una tarea difcil.
Las mquinas de cmputo se fabrican en diferentes tamaos y bajo dos categoras, de
acuerdo con la naturaleza de la informacin que procesan.
La primera corresponde al Computador Analgico, el cual es un sistema electrnico que procesa seales de tensin y corriente que representan variables fsicas.
Esta mquina es construida en base a dispositivos amplificadores operacionales, los
cuales son capaces de ejecutar un gran nmero de operaciones matemticas. El campo de aplicacin del computador anlogo es reducido, fue utilizado en el pasado en
actividades militares relacionadas con afinacin de la puntera de caones y aviones
bombarderos, en el primer piloto automtico para aeronaves, y en simulacin de sistemas de control industrial. La imprecisin en los resultados inherente a un sistema
analgico, y el hecho que estas mquinas eran diseadas para la ejecucin de una
tarea y ninguna otra, produjo el rpido decaimiento y obsolescencia de esta tecnologa en la produccin de computadores.
La otra categora, corresponde al computador digital (a partir de aqu, llamado
computador), el cual emplea seales constituidas por patrones de unos y ceros para el
procesamiento de la informacin El uso de seales binarias garantiza resultados con
alta precisin en sistemas capaces de operar con gran nmeros de bits, 32, 64 ms.
Adems, el increble desarrollo de la tecnologa de integracin de circuitos digitales,
garantiza la construccin de mquinas con estructura ms simple y eficiente que su
contraparte analgica.
Los expertos del rea acostumbran a clasificar los computadores en tres grupos principales: Computadores grandes o Mainframes, Minicomputadores o Estaciones de Trabajo, y Microcomputadores, en funcin de sus dimensiones y velocidad de
operacin. Tal clasificacin es excesivamente amplia, y su validez est sujeta al desarrollo altamente dinmico de la industria del computador. Una mquina clasificada

Organizacin del Computador

40

como minicomputador a principios de la dcada del 80, pudiese ser un juguete comparado con los microcomputadores de la actualidad.
Para obviar tal obstculo se acepta que un Mainframe es un gran computador
comparado con un mini o un micro. Tal comparacin no solo se refiere al espacio que
ocupa el sistema, sino que abarca un alto costo, impensable capacidad de manejo de
memoria, ultra alta velocidad de ejecucin de las instrucciones garantizada por una
CPU formada por un nmero de procesadores operando en el modo de multiprocesamiento. Estas mquinas pueden funcionar en tiempo compartido, con cientos o miles
de usuarios conectados a travs de terminales locales, o por el canal telefnico mediante el uso de modems, y generalmente son usadas por grandes corporaciones, centros importantes de investigacin y universidades. Su uso se dirige a la solucin de
problemas cientficos que impliquen gran nmero de clculos matemticos.
Un Minicomputador tiene algunas caractersticas de los grandes computadores, en escala reducida, es un computador de propsito general con mayor potencia de
cmputo que un micro, pero mucho menos que la correspondiente a un supercomputador. Pueden operar en tiempo compartido con un pequeo nmero de terminales
conectados, y son usados ampliamente en control de procesos industriales de cierta
complejidad.
Un Microcomputador es un computador de una direccin cuya CPU se conoce
como Microprocesador, su organizacin se ajusta al modelo de la figura 2.2. Comparados con los mini tienen poca capacidad de cmputo, y solo pueden conectrsele
algunos dispositivos perifricos. Los computadores personales se incluyen en esta
categora.

Introduccin al Microprocesador

41

Introduccin al Microprocesador
En el captulo que precede se describe en una forma sencilla la estructura y el
principio de funcionamiento del computador. En este captulo, se presenta desde una
ptica funcional, la arquitectura interna de un microprocesador genrico justificando
la presencia de cada registro o unidad integrados en el dispositivo. Se considera necesario que el estudiante conozca con cierto detalle la estructura interna del dispositivo
y se cree suficiente que el alumno pueda distinguir y comprender el modo de funcionamiento de los distintos grupos de circuitos lgicos que conforman al P y que contribuyen a realizar una tarea especfica, tales circuitos se conocen como unidades funcionales.

3.1 GENERALIDADES
En lxico de computacin el trmino Organizacin distingue los componentes
del computador y el modo en el cual estn interconectados con el propsito de ejecutar el cdigo almacenado en memoria, segn las especificaciones fijadas por la arquitectura de la mquina. La Arquitectura, por su parte, engloba aquellas propiedades del
sistema que son determinantes del modo en el cual se ejecutan las instrucciones del
programa. El conocimiento de las particularidades arquitectnicas del computador es
un recurso esencial para que el programador desarrolle el soporte lgico de las aplicaciones.
Atributos tpicos de la arquitectura son:
Conjunto de instrucciones,
Longitud de palabra,
Modos de direccionamiento y
Tcnicas de gestin de entrada y salida.

Introduccin al Microprocesador

42

Conjunto de instrucciones
Longitud de palabra
Modos de direccionamiento
Tcnicas de gestin de E/S

Fig. 3.1 Los atributos de la arquitectura son visibles para el programador.

Aquellos aspectos del sistema ocultos para quien escribe el cdigo, constituyen la organizacin. En la figura 3.2 puede observarse el diagrama funcional de una
tarjeta de video con informacin no perceptible por el programador. Este no requiere
conocer el tipo de tecnologa usada para fabricar la memoria principal o de video,
tampoco el tipo de seales involucradas en el control de los distintos componentes del
sistema, o los pormenores de los circuitos de interconexin entre la CPU y los equipos perifricos.

Fig. 3.2 Los detalles de la tarjeta de video y el modo de interconexin con el P son transparentes
para el programador.

Ocurre a menudo que las mquinas ofrecidas por un fabricante determinado


tengan la misma arquitectura pero estn organizadas en forma diferente. Esto signifi-

Introduccin al Microprocesador

43

ca que una serie de computadores ejecutan el mismo repertorio de instrucciones pero


difieren en la cantidad y la calidad de los recursos disponibles por el usuario.
Un diseador de computadores tiene la responsabilidad de integrar los componentes fsicos y lgicos que permiten a la mquina operar adecuadamente. En este
sentido, un diseador lgico cumple funciones parecidas a un arquitecto, al disponer
de bloques en forma de Ps, circuitos o bancos de memorias, dispositivos controladores, y lneas de interconexin los cuales deben organizarse en un sistema capaz de
realizar las funciones caractersticas de un microcomputador.
Los elementos que se combinan para constituir un C pueden agruparse en
dos categoras: Hardware y Software. La parte de la mquina que no acepta modificaciones, solo expansiones, constituye el hardware del sistema. Es el soporte fsico, y
lo forman los circuitos integrados, los distintos componentes electrnicos, y la tarjeta
de circuito impreso que permite la interconexin elctrica. El trmino software se
refiere a los algoritmos, instrucciones, y programas que dirigen el funcionamiento de
la mquina. Como soporte lgico, el software puede ser modificado de acuerdo con
las necesidades de la aplicacin.
Es conocido que la CPU de un microcomputador es un circuito integrado
VLSI conocido como microprocesador, el cual es equivalente a la unidad central de
procesamiento de un computador de una direccin. Para que un chip sea considerado
un P contener al menos las siguientes unidades: Registros internos, Unidad Lgica y
Aritmtica y Unidad de Control, como ilustra el diagrama de la figura 3.3.

REGISTROS

ALU

UNIDAD DE
CONTROL

Fig. 3.3 Componentes bsicos de un microprocesador

Un sistema microcomputador completo est constituido por la CPU, la memoria y las unidades de E/S. El P es diseado para operar como un procesador secuencial, controlando y ejecutando un conjunto especfico de instrucciones almacenadas

Introduccin al Microprocesador

44

en la memoria del C. Para realizar esta tarea, un P tpico contiene: la unidad de


control, la unidad lgica y aritmtica, y un grupo de registros para el almacenamiento
temporal de la informacin. Un registro denominado contador de programa (PC) es el
encargado del barrido del programa. Cada vez que el P busca una instruccin en
memoria, el PC se incrementa en uno para apuntar a la siguiente instruccin.
Si en el encapsulado del circuito integrado se encuentran adems de las unidades que conforman un P, algn tipo de memoria y unidades de E/S como ilustra la
figura 3.4, se trata de un microcomputador monopastilla o simplemente Microcontrolador (ctrl). Estos dispositivos se disean para uso en aplicaciones especficas de
control a diferencia del P, destinado aplicaciones de propsito general.

CPU

PUERTOS

EPROM

RWM
TIMERS

Fig. 3.4 Microcomputador en una pastilla.

Los Ctrls de 8 bits son a menudo usado como controladores de teclado de


microcomputadores (un 8049 controlaba el teclado del PC compatible IBM), en surtidores de gasolina, hornos de microondas, receptores de TV y otros electrodomsticos,
en control de ascensores, controladores de trfico urbano, y muchas otras aplicaciones
con complejidad media. Los dispositivos de 16 y 32 bits se encuentran en reguladores de sistemas de frenado antibloqueo de automviles, en el control de motores de
inyeccin directa, en controladores inteligentes de discos, en sistemas de robots, en
equipos de audio y procesamiento de imgenes y en el control de manipuladores industriales.
La evolucin de los Ctrls ha sido de tal magnitud y su uso tan extendido que
es posible encontrar dispositivos avanzados de 16/32 bits con estructura de multiprocesador resolviendo tareas de control complejas en sistemas distribuidos de control
industriales.

Introduccin al Microprocesador

45

Es comn que toda empresa fabricante de Ps produzca tambin Ctrls. Por


ejemplo, Motorola fabrica las series M680x y M68H11/12, Siemens ofrece los modelos C167 y C167CR, y National Semiconductor las series COPx00 y NS8050. Uno de
los fabricantes ms populares es la empresa MICROCHIP, la cual ofrece una gran
diversidad de modelos adaptables para aplicaciones de baja, media y alta complejidad. Los modelos de la serie PIC18xxx son los de ms alto desempeo.

3.2 ARQUITECTURA INTERNA DEL MICROPROCESADOR


El camino habitual para introducir la arquitectura de C en un curso bsico de
microprocesadores, consiste en utilizar un diagrama funcional de la mquina especificando la tarea que desempea cada elemento, en forma similar a como se present en
el captulo 2 la teora bsica del computador. Un modo ms eficaz y que permite al
estudiante comprender en forma rpida como se organizan los componentes de un C
y que adems justifica plenamente la presencia de cada unidad funcional en el interior
del P, consiste en especificar una tarea de clculo simple y desarrollar un diagrama
en bloques de una mquina capaz de ejecutarla.
Para iniciar el estudio del P se usa un proceso de sntesis, desarrollado paso a
paso, de una mquina hipottica que ejecuta un conjunto mnimo de instrucciones. De
esta forma es posible establecer las unidades funcionales que se requieren para la ejecucin de una instruccin tpica, considerando que lo esencial es exponer en forma
muy general la funcin que cumple cada unidad del P, ms que detenerse en los
detalles de diseo de cada circuito. El desarrollo de la mquina terica propuesta no
solo conduce a establecer los elementos internos constituyentes de la CPU, sino que a
su vez permite introducir los diferentes elementos que conforman la arquitectura de
un C bsico.
3.2.1 Proceso de sntesis de un microprocesador
Se propone la sntesis de una unidad central de procesamiento de ocho bits,
capaz de ejecutar programas usando el grupo de instrucciones que se especifican en
la tabla 3.1.
Tabla 3.1. Conjunto de Instrucciones y cdigo de operacin asociado.

Instruccin
ADD
SUB
IN
OUT

Cdigo de operacin
00
01
10
11

Funcin
Suma
Substraccin
Entrada de dato
Salida de dato

Introduccin al Microprocesador

46

En principio se requiere escribir un programa para sumar dos nmeros enteros


N1 y N2. Los sumandos son obtenidos de un arreglo de ocho interruptores lgicos S0S7 conectados a la CPU y el resultado de la suma debe desplegarse usando ocho diodos luminosos D0-D7, tal como ilustra la figura 3.5. El problema consiste en establecer los componentes de la caja negra de la figura 3.5, de modo que pueda ejecutar
un programa que lea dos nmeros desde los interruptores, ejecute la operacin aritmtica y presente el resultado en los indicadores luminosos.
El conjunto de instrucciones del microprocesador
El nmero binario denominado cdigo de operacin (OC) en las instrucciones
de la tabla 3.1 corresponden a los dos bits de mayor peso del cdigo de instruccin, el
cual tiene una longitud de 8 bits. Este arreglo de bits permite a la CPU distinguir la
instruccin y realizar la accin ordenada por sta. Para simplificar la tarea del programador, es usual que cada instruccin se identifique con una palabra, abreviatura o
siglas que en lenguaje ingls expresen la funcin que realiza la instruccin. Por ejemplo SBB r (Subtract Register with Borrow) produce que el contenido del registro r y
la bandera de acarreo sean restados del contenido del acumulador.
VCC

R9-R16
270

R1-R8
5.1 K

S0-S7

D0-D7

3.5. Diagrama general del sistema propuesto.

En el P hipottico, ADD ejecuta la operacin de adicin de dos nmeros binarios, mientras que SUB realiza la substraccin. El par de instrucciones restantes IN
y OUT permiten la comunicacin de la CPU con el mundo exterior para adquirir datos y entregar resultados, respectivamente.
La unidad de clculo
Para ejecutar las instrucciones ADD y SUB se requiere una Unidad Aritmtica Lgica o ALU, la cual como se sabe es la parte de la CPU encargada de realizar
operaciones de este tipo.

Introduccin al Microprocesador

47

Registro A

Registro B

(A)

(B)

Unidad
Lgica y
Aritmtica

(A+B)

Fig. 3.6 La Unidad Lgica Aritmtica, el Acumulador y el registro B de propsito general.

Debido a que ambas instrucciones involucran dos nmeros binarios, se requieren dos registros para almacenarlos: el acumulador (A) y un registro de propsito
general B. Ambos registros deben conectarse a las entradas a la ALU. El acumulador
es un registro esencial que acta como fuente o destino de la informacin. Muchos
Ps presentan una arquitectura donde el resultado de toda operacin ejecutada por la
ALU se almacene en el acumulador, como puede observarse en la figura 3.6. El medio
de comunicacin entre los registros y la ALU, ambos de ocho bits, es el camino interno de datos del P. Cada lnea de interconexin de la figura 3.6 representa los 8 bits
del bus interno del P.

Perifrico de entrada
Si se escribe un programa para realizar una operacin con dos nmeros binarios de ocho bits, los operandos deben ser obtenidos desde el exterior del P y cargados en los registros de entrada a la ALU. La instruccin IN permite transferir datos
desde el perifrico de entrada hasta el registro A conectado a la entrada izquierda de
la ALU. La ejecucin de IN resulta en que el byte suministrado por el perifrico de
entrada es copiado en el registro A, o:
(A) (Perifrico)
Esta transferencia implica que la CPU debe tener un camino externo de datos
o bus de datos externo (D0-D7) para conectar el perifrico al P. En la figura 3.7 se
muestra el perifrico1 de entrada conectado directamente al registro acumulador, en
la prctica la conexin entre dispositivos externos al sistema y la CPU se realiza mediante un registro externo.
El trmino entrada/salida (E/S) cubre toda transferencia o intercambio de datos entre el P y un dispositivo externo. Durante una operacin de entrada, los datos no son transferidos directamente desde el perifrico al acumulador, sino que un

Introduccin al Microprocesador

48

circuito digital, denominado en forma genrica puerto de entrada, sirve como medio
de interconexin entre el equipo externo y el bus de datos del P. La realizacin de
una operacin de salida la permite un puerto de salida.

S0-S7

Perifrico 1

Registro A

Registro B

(A)

(B)

Unidad
Lgica y
Aritmtica

(A+B)

Fig. 3.7 Un perifrico de entrada permite introducir datos al C.

A un C se le conectan distintos dispositivos de entradas de acuerdo con la


aplicacin a la cual est destinado, pero slo uno de stos puede comunicarse a la vez
con el P. De modo que es necesario asignar una direccin a cada perifrico para
seleccionarlo en el momento apropiado y as dejar abierta la posibilidad de expansin
de la mquina. En este caso, al puerto donde se conectan los interruptores se le asigna
la direccin 1.

Operacin de
entrada

Operacin de
salida

Fig. 3.8 Operaciones de E/S.

Introduccin al Microprocesador

49

La estructura de bus nico del P impone ciertas reglas para el acoplamiento


de circuitos o equipos perifricos a los terminales de datos del procesador,
En principio todo dispositivo de entrada que se conecte al bus de datos debe tener salidas de tres
estados para evitar la carga de las lneas de datos por parte de otros perifricos que no estn seleccionados. Dos puertos de entrada no pueden conectarse simultneamente al bus sin que ocurra un deterioro de la informacin transferida.
Para puertos de salida tal consideracin reviste importancia cuando varios equipos externos que
funcionan conjuntamente con el P estn conectados al bus, debido a que la carga tiene efecto
acumulativo.

En su forma ms sencilla, un puerto de entrada puede realizarse usando un


buffer tri-estado y si se requiere capacidad de almacenamiento de la informacin que
llega al puerto, se usa un registro latch. La estructura de puerto de entrada bsico se
presenta en la figura 3.9. El acoplador tri-estado de salida impide/permite el flujo de
informacin desde el puerto hacia el bus de datos del microprocesador. Cuando se usa
un registro de almacenamiento, es responsabilidad del dispositivo de entrada cargar el
dato correspondiente en el latch e indicar a la CPU que hay un byte listo para transferencia. A continuacin, el P activa el paso de informacin a travs de los buffers
aplicando un pulso de habilitacin SEL de nivel bajo el cual proviene del decodificador de puertos. La activacin de la lnea de seleccin de puertos, ocurre cuando se
est realizando una operacin de lectura en el puerto como respuesta a la ejecucin de
una instruccin IN.
BUS DE DATOS

D7
DISPOSITIVO
DE
ENTRADA

BUFFER
DE TRES
ESTADOS

REGISTRO
DE
8 BITS

D6

D0

SEL

Fig. 3.9 Puerto de entrada para un sistema basado en microprocesador.

El puerto de entrada necesario para conectar los interruptores S0-S7 no requiere un registro latch porque el estado lgico de los bits de entrada es retenido por los
interruptores y desde luego no es necesario que el circuito de puerto de entrada tenga
capacidad de almacenamiento. Un circuito prctico para introducir los datos a la CPU
hipottico se presenta en la figura 3.10. Los interruptores se conectan al bus de datos
del P por medio de ocho buffers de tres estados.

Introduccin al Microprocesador

50

VCC

R1-R8

Puerto 01

CON1

S0 - S7

Fig. 3.10 Puerto de entrada al P.

Introduccin al Microprocesador

51

De este modo, la entrada de seleccin PE01 , activa en nivel bajo, habilita la


lectura y carga en el acumulador del estado lgico de S7-S0. El bus de datos del P se
conecta al conector CON1.

Extendiendo el cdigo de instruccin


Asignar la direccin 1 al dispositivo de entrada obliga a incorporar un operando a la instruccin IN para especificar el dispositivo origen de los datos. Esto significa que el arreglo de 8 bits que define la instruccin contiene ahora el cdigo de
operacin y un operando que especifica la direccin del perifrico, como se indica en
la figura 3.11.
Cdigo de
operacin

Instruccin
IN

Operando
Puerto 1

Cdigo de
operando

D7

D6

D5

D4

D3

D2

D1

D0

Fig. 3.11. Un operando es necesario para la instruccin IN puerto.

Al ser el C de ocho bits (un byte), el formato binario de la palabra de la instruccin contiene igual nmero de bits. En este caso los bits D7 y D6 especifican el
OC, mientras que D1 y D0, corresponden al cdigo de operando. Los bits D5-D2 se
definen posteriormente. La accin resultado de la ejecucin de la instruccin IN 01,
es transferir al acumulador la palabra binaria presente en los interruptores del perifrico 1 de entrada, esto es:
(A) (Puerto 1)

Perifrico de salida
El dispositivo externo de salida lo conforma un arreglo de ocho diodos luminosos que indican en formato binario el resultado de la operacin ejecutada por la ALU.
En la figura 3.12 se ilustra la disposicin de los LEDs en el conjunto del sistema microcomputador. Para conectar los indicadores luminosos al bus de datos del microprocesador es necesario un puerto de salida, al cual se le asigna la direccin 2. Como
consecuencia, la instruccin OUT 02 transferir el contenido del registro A, igual al
resultado de la suma, a un perifrico con direccin 2, esto es,
(Puerto 2) (A)

De modo que la instruccin de salida OUT tambin requiere un operando para


especificar la direccin del puerto al cual se conecta el perifrico de salida. Como se
observa el la figura 3.13 se usan los dos bits de menor peso del cdigo de la instruccin.

Introduccin al Microprocesador

52

Perifrico 2

Perifrico 1
OUT

IN

(A)

Registro B

Registro A
(A)

(B)

Unidad
Lgica y
Aritmtica

(A+B)

Fig. 3.12. Un perifrico de salida permite visualizar el resultado de la operacin.

Las caractersticas operacionales del perifrico conectado al sistema determina cuan complejo es el circuito de interconexin, pudiendo requerirse desde simples
registros y/o buffers de tres estados hasta circuitos LSI programables de propsito
general. Para el puerto de entrada fue suficiente con conectar los interruptores al bus
de datos del P por medio de buffers de tres estados considerando que el estado lgico de los bits de entrada es retenido por los interruptores.
Cdigo de
operacin

Instruccin
OUT

Operando
Puerto 2

Cdigo de
operando

D7

D6

D5

D4

D3

D2

D1

D0

Fig. 3.13 Un operando es necesario para la instruccin OUT puerto.

Para seleccionar la lgica que realiza el puerto de salida es necesario considerar que los datos enviados por el P a un puerto determinado durante la ejecucin de
una instruccin OUT puerto permanecen en el bus de datos un espacio muy corto de
tiempo, de modo que es necesario que informacin sea capturada por el circuito de
interconexin para que est disponibles despus que culmina la operacin de escritura
en puerto.
En la prctica, un puerto de salida bsico consiste de un simple registro de almacenamiento paralelo que realiza la conexin entre el bus de datos del microprocesador y el dispositivo de salida, como ilustra la figura 3.14.
El diagrama elctrico del puerto de salida para la mquina bajo sntesis es el
de la figura 3.15, donde se observa que, durante la operacin de escritura a puerto, la
activacin de una seal de seleccin de puerto de salida 2 PS02 permite la carga del

Introduccin al Microprocesador

54

contenido del bus de datos en el registro de salida y la presentacin del resultado de la


suma.
BUS DE DATOS

D7
D6
REGISTRO
DE
8 BITS

D0

DISPOSITIVO
DE
SALIDA

CLK

SEL

Fig. 3.14 Puerto de entrada para un sistema basado en microprocesador.

El conjunto extendido de instrucciones


Establecida la forma en la cual el P obtiene los operandos desde los interruptores lgicos y como presenta el resultado, es necesario considerar que la suma que
debe realizar la mquina requiere dos nmeros N1 y N2 , los cuales deben cargarse en
los registros A y B conectados a las entradas de la ALU, para que sta pueda ejecutar
la operacin aritmtica.
Un problema emergente se debe a que la instruccin IN puerto transfiere el
contenido del perifrico 1 (N1) al registro A y no existe en el lenguaje de la mquina
una instruccin que permita trasladar N1 al registro B para proceder a leer el segundo
sumando N2. Proveer un mecanismo para mover el contenido de A al registro B, implica introducir una nueva instruccin: MOV (mover). Aunque MOV carece de operandos, se asume que su ejecucin implica la transferencia del contenido de A hasta
B, esto es,
(B) (A)
Es claro que la ausencia de operandos en la nueva instruccin de transferencia denominada MOV, se debe a que el nico registro interno del P que puede actuar
como destino, es el B. En caso de la existencia de ms registros, debe aadirse el operando respectivo al cdigo de la instruccin. Por ejemplo: MOV r copia el contenido
del A al registro r. Al incorporarse MOV al conjunto de instrucciones del P, se
requieren ahora tres bits como mnimo para especificar el cdigo de operacin. La
tabla 3.2 presenta el conjunto expandido de instrucciones y los nuevos cdigos de
operacin.

Introduccin al Microprocesador

55

VCC

R9-R16

D7-D0

Puerto 02

CON2

D7
D6
D5
D4
D3
D2
D1
D0
CLK
OE

Fig. 3.15 Puerto de salida del P

Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0

Introduccin al Microprocesador

56

Tabla 3.2. Conjunto de instrucciones incluyendo MOV.


Cdigo de operacin
Instruccin Operando
ADD
SUB
IN
Puerto 1
OUT
Puerto 2
MOV

D7

D6

D5

D4

D3

D2

D1

D0

0
0
1
1
0

0
1
0
1
1

1
1
1
1
0

X
X
X
X
X

X
X
X
X
X

X
X
X
X
X

X
X

X
X

0
1

1
0

Con el conjunto de instrucciones disponible es posible escribir un programa


que realice la suma de dos nmeros. La secuencia de instrucciones siguiente realiza
esta tarea.

; Programa 1
in 1
; (A) ( Estados de S7-S0); El contenido de A es sustituido por el
estado de los interruptores.
mov
; (B) (A) El dato en B es reemplazado por el de A.
in 1
; (A) ( Estados de S7-S0)
add
; (A) (A + B)
; Se ejecuta la suma y el resultado se coloca en A.
out 2
;(LEDs) (A)
; Se presenta el resultado de la suma.

El primer operando N1 es obtenido desde los interruptores y transferido al registro B, mientras que N2 se mantiene en el acumulador. La instruccin ADD ejecuta
la operacin (A) (A) + (B) o (N1 + N2 ) (N2 ) + (N1) . El resultado de la suma se
enva al puerto de salida por medio de la instruccin out 2.

Formatos para representacin de informacin


Antes de continuar con la sntesis de la mquina conviene realizar una pregunta: Cul formato se usa para almacenar y procesar los datos dentro de un C? Lo
comn es agrupar los nmeros, caracteres y cualquier otro tipo de informacin en un
arreglo de bits denominado Palabra. La longitud o nmero de bits que componen una
palabra vara de un sistema a otro. Un bit (0 1) se define como la cantidad mnima
de informacin posible de expresar, mientras que una secuencia de 8 bits constituye
un byte, y dos bytes una palabra, como se especifica el patrn mostrado en la figura
3.16a.
Un formato de palabra doble (cuatro bytes) lo usan los microprocesadores fabricados por INTEL: 386 y 486, mientras que los Ps Pentium usan palabras cudruples (ocho bytes). En la mquina bajo desarrollo y en el microprocesador INTEL
8085A, casos donde el ancho del bus de datos es de ocho bits, se considera una palabra formada por un byte como se observa en la figura 3.16b.

Introduccin al Microprocesador

57

Fig. 3.16. Formato de palabra: (a) Ps INTEL: 8086, 80186 y 80286. (b) P de ocho bits 8085A.

Que un byte contenga ocho bits no es, en modo alguno, una eleccin realizada al
azar. El microcomputador debe comunicarse con distintos perifricos como teclados y
monitores, los cuales entregan y reciben informacin alfanumrica. El alfabeto, los nmeros, smbolos y algunos comandos forman un conjunto de aproximadamente 130
elementos, los cuales pueden representarse el cdigo de 7 bits (27=128) ASCII estndar
(Standard Code for Information Interchange).
Tabla 3.3. El cdigo ASCII estndar.
D3-D0

D6-D4

0000

0001

0010

0011

0100

0101

0110

0111

1000

1001

1010

1011

1100

1101

1110

1111

K
ETB

7510
2310

000
0

001
1

010
2

011
3

100
4

101
5

110
6

111
7

NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI

DEL
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US

SP
!
"
#
$
%
&
'
(
)
*
+
,
.
/

0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]

`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

p
q
r
s
t
u
v
w
x
y
z
{
|
}
~
DEL

010010112
000101112

(4B16)
(1716)

(End of Transmission Block)

Introduccin al Microprocesador

58

El cdigo estndar americano para intercambio de informacin es el ms usado


en C para representar caracteres alfabticos y numricos. Si se usa el bit D7 restante
para la prueba de error de paridad, es evidente que el ancho de 8 bits para el byte es una
excelente eleccin. En tareas de impresin en papel, el estado del bit D7 indica cuando se
imprime en modo texto (D7 = 0) o modo grfico (D7 =1). Los 128 smbolos ASCII originales (0 127) representan letras, dgitos, signos de puntuacin, y caracteres de control.
Los valores desde 128 hasta 255 (80H-FFH) constituyen lo que se conoce como cdigo
ASCII extendido que incluye signos internacionales, caracteres grficos y smbolos especiales que permiten cierta capacidad grfica cuando se usa el modo texto.
Para la presentacin visual de informacin resultado de cmputos realizados por
el procesador, es comn emplear el cdigo BCD (nmeros del 0 al 9), lo cual requiere
cuatro bits (un nibble), en la mayora de los Ps existe una instruccin que realiza el
ajuste decimal del acumulador despus de la ejecucin de una suma. En la figura 3.16b
es apreciable que una secuencia de ocho bits o byte est formado por dos nibbles.
El cdigo ASCII ha sido extensamente usado para representar informacin desde
los inicios de la computacin. En la actualidad existen nuevos cdigos que superan las
deficiencias caractersticas del ASCII. La empresa IBM, por ejemplo, desarroll su propio estndar de codificacin denominado EBCDIC, acrnimo de Extended Binary Coded
Decimal Interchange Code (Cdigo Ampliado de Caracteres Decimales Codificados en
Binario para el Intercambio de la Informacin). Al utilizar 8 bits para la codificacin es
posible representar 256 caracteres en lugar de los 128 caracteres del ASCII estndar. El
cdigo EBCDIC es utilizado principalmente en los computadores desarrollados por IBM.
Un esquema de codificacin ms moderno lo constituye el UNICODE, el cual
utiliza 16 bits por carcter, permitiendo la representacin de 65536 smbolos diferentes
en diversos idiomas.
La memoria del sistema
Aunque fue posible escribir un programa para la mquina hipottica, aun es necesario definir todos los componentes de la CPU y del microcomputador que permitan la
ejecucin del cdigo. Para realizar la suma de los dos nmeros N1 y N2, la CPU debe
ejecutar el programa representado por la secuencia de instrucciones del programa.1. El
sistema solo dispone de dos registros internos, A y B, para almacenar datos, entonces
Desde donde el P obtiene las instrucciones?
Una consideracin de vital importancia en sistemas basados en Ps es el subsistema de memoria. Tanto las instrucciones del programa como los datos deben estar almacenados en algn tipo de memoria, de donde puedan ser obtenidos en el momento
preciso para que el P realice su funcin.
Aun cuando los Ps comerciales tpicos contienen un banco de registros internos
el 8085A por ejemplo posee los registros de ocho bits: A, B, C, D, E, H y L; estos no

Introduccin al Microprocesador

59

pueden usarse para almacenar las instrucciones, ms bien estn diseados para el almacenamiento temporal de informacin, adems el nmero de registros internos es muy
reducido como para contener un programa. Por lo tanto es necesario conectar un circuito externo al P que acte como la memoria del sistema. Este nuevo componente de la
mquina puede observarse en el diagrama funcional de la figura 3.16.

Perifrico 2

Perifrico 1
OUT

IN

(A)

Registro A
(A)

Registro B
(B)

Unidad
Lgica y
Aritmtica

Memoria

(A+B)

Fig. 3.16. La memoria contiene el programa.

Las memorias que se usan en la actualidad para el propsito especificado, son


circuitos integrados LSI diseados para almacenar una gran cantidad de informacin en
un nmero especfico de registros, generalmente con entradas y salidas comunes. Existen diversos tipos de memorias caracterizadas por: la forma de acceso de los datos, el
modo de almacenamiento y la tecnologa empleada en su fabricacin. Para el sistema en
sntesis, se supone que se usa un circuito integrado de memoria que permite el almacenamiento del programa y su posterior recuperacin. Por ahora el lector no debe preocuparse del modo en que el programa es cargado en la memoria y de cmo es transferido a
la CPU.
En un circuito integrado diseado para almacenar informacin, es posible cargar
las instrucciones del programa o los datos necesarios para la ejecucin del programa.
Cuando se realiza esta accin, se habla de una operacin de escritura, mientras que la
obtencin de la informacin contenida en una determinada celda implica una operacin
de lectura de la memoria. Cada registro individual de la memoria se conoce como posicin o celda memoria, siendo cada registro de uno, cuatro u ocho bits.
Cada celda tiene asignada una direccin especfica, de modo que para lograr acceso a una determinada posicin se requiere especificar la direccin correspondiente. La

Introduccin al Microprocesador

60

figura 3.17 muestra el smbolo lgico de un dispositivo de memoria de lectura/escritura


y en la figura 3.18 se observan los componentes internos del circuito integrado.

Lneas de
Direcciones
n

Lneas de E/S
de Datos
m

MEMORIA

Lneas de
Control

Fig. 3.17. Smbolo de un circuito de memoria.

Fig. 3. 18 Arquitectura interna de una memoria.

Introduccin al Microprocesador

61

Las lneas de acceso tpicas de un circuito de almacenamiento de lectura / escritura, son:


n lneas de direcciones.
m lneas de E/S de datos, y
Algunas lneas de control.

Lneas de direcciones (A0-An-1) especifican la celda de memoria a la cual se


desea acceso. El nmero de posiciones disponibles en el circuito es P = 2n, la direccin
0 corresponde a la primera posicin y la direccin 2n-1 identifica a la posicin final. Para
tener acceso a P = N x 1 Kbytes posiciones se requieren:
n = log 2 (N) + 10 Lneas de direcciones.

Por ejemplo, un circuito de 8 Kbytes debe tener:


3

n = log 2 (2 ) + 10 = 13 Lneas de direcciones,

y un chip de 256 bytes ( Kbytes) requiere:

( )

1
2
+ 10 = log 2 2
+ 10 = 8 Lneas de direcciones.
2
2

n = log 2

Las lneas de E/S de datos (D0-D7) proveen el medio para la transferencia de informacin hacia y desde la memoria. El valor de m es variable en dispositivos comerciales, pudiendo ser, como se dijo, de 1, 4 u 8 bits. En el caso de la mquina hipottica conviene una memoria con 8 lneas de datos por ser el P de tal ancho de palabra. Si se usan
chips con 4 lneas de E/S de datos, se requieren dos chips para el almacenamiento de las
instrucciones.
Las lneas de control son dos para la memoria de la figura 3.18: R/ W (Read/Write), cuyo nivel lgico especifica si se realiza una operacin de lectura/escritura (1:
Lectura, 0: Escritura), y CS (Chip Select) que permite la seleccin del circuito. Un nivel
lgico alto en esta entrada, coloca en estado de alta impedancia las lneas de E/S de datos.
El decodificador de direcciones en la figura 3.18 procesa la informacin contenida en las lneas de direcciones para conectar la celda seleccionada a las lneas de entrada
y salida de datos El mdulo de control gobierna los buffers bidireccionales de E/S fijando el sentido del flujo de informacin durante una operacin de acceso a la memoria.
Para describir el modo de funcionamiento del circuito de almacenamiento, considere la realizacin de una operacin de lectura. Los pasos a seguir para esta tarea son:

62

Introduccin al Microprocesador

1. Aplicar la direccin a las entradas A0 An-1 .


2. Seleccionar la memoria colocando un nivel lgico bajo en la entrada CS .
3. Presentar un nivel lgico TTLalto en la lnea R / W .
4. Transcurrido el tiempo de acceso, la memoria coloca el byte en las salidas de datos
D0 -D7.

A0-An-1

Direccin vlida

CS

R/ W

D0-D7

Datos vlidos

Fig. 3.19. Ciclo de lectura del circuito de memoria.

Una de las caractersticas que distinguen a un circuito de almacenamiento es la


capacidad de la memoria: Esta es:
N = 2n x m,

donde:

N = Capacidad total en bits.


2n = Nmero de posiciones.
m = Ancho de la palabra o nmeros de lneas de datos.

As, la expresin 256 x 8 = 28 x 8 = 2048 bits, especifica un chip de 256 posiciones organizadas en palabras de 8 bits. Para la mquina hipottica se elige un circuito con
capacidad de 512 x 8, cuyo smbolo se muestra en la figura 3.20.
A0 A7
IO0 - IO7

CE
OE

WE
MODO

Lectura
Escritura
Inhibir

Lneas de direcciones
E/S de datos
Seleccionar Chip
Habilitar Salida
Habilitar Escritura
WE CE

OE

E/S

VIH

VIL

VIL

O7 -O0

VIL

VIL

I7 -I0

VIH

VIH

Fig. 3.20. Circuito de memoria de lectura/escritura de la mquina hipottica.

63

Introduccin al Microprocesador

El circuito integrado seleccionado para el sistema bajo sntesis tiene: 9 lneas de


direcciones A8 - A0 para proveer acceso a las 512 celdas de almacenamiento, 8 lneas
bidireccionales de datos Io7 -Io0 para la lectura y escritura de la informacin almacenada
y 3 lneas de control: CS , OE y WE . Para una operacin de entrada de datos, la seal de
habilitacin de escritura WE debe ponerse en nivel lgico cero, mientras que para leer
los datos almacenados se pone a cero la seal de habilitacin de salidas OE . En ambos
casos la entrada de seleccin de chip CS debe estar en estado bajo. A la izquierda de la
figura 3.20 se presenta informacin sobre los modos de funcionamiento del circuito de
memoria.
La conexin del circuito de memoria al P exige que la unidad de proceso tenga
al menos tanta lneas de direcciones como el circuito de memoria, ocho lneas de datos
y terminales para generacin de comandos de control de lectura y escritura. Por ahora se
omite el esquema de interconexin entre el P y la memoria y se contina con la sntesis
del procesador.
Direccin
0
1
2
3
4
5

Binario
10100001
01000000
10100001
00100000
11100010
xxxxxxxxx

511

xxxxxxxxx

Nemnico
in 01
mov
in 01
add
out 02

Fig. 3.21. El programa 1 se carga en la memoria de la mquina. Los bits del cdigo de instruccin aun no
definidos se suponen cero lgico.

El programa de suma del ejemplo 3.1 se carga en la memoria del sistema, mostrndose en la figura 3.21 una imagen de la forma en que la secuencia de instrucciones
en formato binario ocupa la memoria.
Ejecucin de las instrucciones
El procesamiento de cada instruccin se realiza durante un ciclo de instruccin,
el cual consta de dos tiempos bsicos como se mencion en la seccin 2.2, la fase de
bsqueda del cdigo de operacin en memoria y la de ejecucin de la instruccin.
En la fase de bsqueda, el P obtiene la instruccin desde la memoria, sin importar por los momentos como lo hace. La CPU debe entonces interpretar el cdigo de la
instruccin para determinar la funcin a realizar. Esto implica que para almacenar el
cdigo a descifrar, es necesario dotar a la CPU de un nuevo registro interno de 8 bits o
Registro de Instrucciones (IR)

64

Introduccin al Microprocesador

add
sub
in
out
mov

Decodificador
de
Instruccin

Registro de
Instruccin

Instruccin

Fig. 3.22. La salida del registro de instrucciones es la entrada del decodificador de instrucciones.

La funcin lgica de interpretacin o decodificacin de la instruccin contenida


en el IR la realiza un Decodificador de Instrucciones (ID) conectado a la salida del IR,
como se observa en la figura 3.22. Este circuito usa la informacin almacenada en el IR
y especifica cual microprograma debe ser ejecutado para completar el procesamiento de
la instruccin.
En general puede decirse que la secuencia bsqueda-decodificacin-ejecucin,
consiste de una secuencia de microperaciones controlados por un Microprograma. Este
es un programa de microinstrucciones que no hacen referencia a la memoria principal, y
es diseado en base a subcomandos los cuales son trasladados a comandos de mquina
por hardware. El programa para cada instruccin reside en la seccin de decodificacin, siendo ejecutado por las unidades de temporizacin y control del P, aun no mencionadas.
Aunque existe una estrecha vinculacin entre el conocimiento que tenga el programador sobre el modo en que se ejecutan algunas instrucciones y la calidad, eficiencia,
y tiempo de desarrollo de un programa determinado, no se considera imprescindible realizar en este trabajo un anlisis detallado del microprograma de control del C y la forma como las microinstrucciones generan las distintas seales internas y externas que
controlan la transferencia entre registros, la rotacin del acumulador, el funcionamiento
de la ALU, y la comunicacin con la memoria y los dispositivos de E/S; de hecho el tratamiento de este tpico lo contemplan programas de estudio de asignaturas que el lector
cursar en el futuro.
De mayor provecho en esta seccin introductoria es presentar en forma conceptual y muy simple el modo de funcionamiento del decodificador de instrucciones. Como
muestra la figura 3.22, el ID recibe la informacin almacenada en el IR y coloca en nivel alto la salida que corresponde a la instruccin obtenida desde la memoria. Para ilustrar el modo de operacin de la lgica de decodificacin durante una transferencia entre
registros, se considera ahora el circuito de la figura 3.23. Se observa que si la instruccin
depositada en el registro de instrucciones es IN 01, la salida del decodificador etiquetada
in se activa, ocasionando que el estado de los interruptores lgicos en el perifrico 01 se
transfiera al acumulador. En caso de ser OUT 02 la instruccin obtenida de la memoria,
la salida del decodificador con etiqueta out pasa a nivel lgico alto y los diodos luminosos conectados al perifrico 02 indicarn el estado lgico de los bits del registro acumulador.

65

Introduccin al Microprocesador

Interruptores Lgicos
in

Acumulador
out

Indicadores lgicos
Fig. 3.23. Las salidas del decodificador de instrucciones permiten la ejecucin de la instruccin.

En la prctica, la lgica de control y dems componentes de un P real es un


arreglo intrincado de puertas lgicas y biestables que requiere la intervencin de numerosas seales de control para ejecutar las diferentes instrucciones. El registro acumulador, por ejemplo, es en realidad un registro de desplazamiento con cierta cantidad de
lgica asociada y entradas de reloj para permitir la realizacin varias operaciones, tales
como desplazamientos de su contenido hacia la derecha o izquierda, complemento y
otras funciones lgicas, adems de interactuar con la ALU. No obstante, puede considerarse que la funcin bsica de transferencia paralela entre registros es ilustrada apropiadamente con el sencillo ejemplo de la figura 3.23.

El generador de direcciones
La forma en que opera la unidad de memoria de programa de la mquina implica
que el P debe generar direcciones para poder obtener cada una de las instrucciones del
programa almacenado. Para que la CPU pueda obtener, durante la fase de bsqueda, la
instruccin almacenada en la memoria debe suministrar al dispositivo de almacenamiento la direccin de la celda que contiene la instruccin. Esta informacin debe mantenerse estable en las lneas de direcciones de la memoria hasta que culmine la operacin
de acceso.
Como ilustra la figura 3.24 se introduce un registro interno de propsito especfico denominado Registro de Direccin de Memoria (MAR), el cual retiene la direccin de la instruccin cuya bsqueda progresa. La direccin debe permanecer en el bus
de direcciones al menos el tiempo de acceso del CI de memoria, para permitir que ste
coloque en el bus de datos la informacin que contiene la celda seleccionada. En general para que el P pueda establecer comunicacin con cualquier dispositivo externo a la
CPU que tenga direccin asignada, sea memoria o perifrico de E/S, se requiere el uso
del MAR, el cual es en realidad el origen del bus de direcciones

66

Introduccin al Microprocesador

Registro de Direccin
de Memoria
Lneas de direcciones

add
sub
in
out
mov

Decodificador Registro
de
de
Instruccin Instruccin

Instruccin

Memoria

Lneas de datos

Fig. 3.24. El registro de direcciones de memoria contiene la direccin de bsqueda de la instruccin.

Resuelto el problema de generar direccin de la posicin de memoria que ocupa


cada instruccin, existe otro detalle de inters. Se sabe que la ejecucin del programa de
suma de dos nmeros binarios requiere que la CPU tenga acceso a un rango de direcciones comprendido entre las posiciones 0 y 4 de la memoria. Esto significa que el P no
solo debe generar una direccin, sino que debe estar en capacidad de realizar una exploracin secuencial de la memoria para poder obtener todo el programa.

Pulsos

Contador de
Programa

Reset

Registro de Direccin
de Memoria
Lneas de direcciones

add
sub
in
out
mov

Decodificador
de
Instrucci

Registro
de
Instruccin

Instruccin
Lneas de datoss

Memoria

Fig. 3.25. El contador de programa permite el barrido de las direcciones que ocupa el programa.

Para generar las direcciones consecutivas que permitan la ejecucin del programa, se usa un contador que se incremente en 1 cada vez que se ejecuta una instruccin,
de modo que en todo momento contenga la direccin de la siguiente instruccin a ejecu-

Introduccin al Microprocesador

67

tar. Este nuevo componente interno de la CPU es el Contador de Programa (PC). Como se observa en la figura 3.25, la salida del PC se conecta al registro MAR para enviar
a la memoria la secuencia de direcciones de 0 a 4 donde reside el programa. Cuando se
inicia la fase de bsqueda de una instruccin, el P carga en el MAR el contenido del PC
e incrementa a ste para apuntar a la siguiente posicin de memoria. El MAR mantiene la
direccin aplicada a la memoria hasta el final de la fase de ejecucin. La lgica de incremento del contador de programa es mostrada en la figura 3.26.

Fig. 3.26. El contador de programa usa secuenciamiento implcito para actualizar su contenido

Los registros A y B de nuestra mquina son de 8 bits al igual que el registro de


instrucciones. Ahora es necesario establecer la longitud de los nuevos registros internos
del P. Para establecer el nmero de bits del registro de memoria MAR y del contador de
programa PC, considere que para tener acceso a las 512 (29) posiciones de la memoria
SRWM seleccionada para el sistema, debe aplicarse una direccin de 9 bits a las lneas
de entrada de direcciones del dispositivo de almacenamiento. Dado que con 8 lneas de
direcciones solo es posible el acceso a todas las celdas de una memoria con capacidad de
28 = 256 posiciones, es patente la necesidad de un byte adicional para especificar todas
las direcciones. En realidad basta con un bit extra, pero como la mquina opera con formato de 8 bits se usa un mltiplo de un este valor. Al usarse dos bytes para especificar
una direccin, se deduce que el contador de programa y el registro de direcciones de
memoria deben ser ambos de 16 bits. El hecho que el MAR tenga capacidad para almacenar dos bytes le permite al P tener acceso a 216 = 65536 posiciones de memoria, lo
cual es la capacidad de direccionamientos de los P de 8 bits, incluyendo al 8085A.
Al PC no solo se aplican pulsos de reloj, sino que dispone de una entrada adicional de inicializacin o RESET. Cuando esta seal es activada, el contenido del PC va a
cero, ejecutando el programa desde la direccin de inicio. En C reales la lnea de RESET tiene otras funciones; por ejemplo: un programa en progreso que funcione mal puede ser abortado por medio de esta seal; tambin cuando se aplica potencia a un C inicialmente desactivado, un circuito de autoreset permite la estabilizacin del P hasta

Introduccin al Microprocesador

68

tanto la lnea de alimentacin alcance un valor de tensin adecuado para la correcta operacin del sistema, tpicamente un 75 % del valor nominal de la fuente de energa del CI.

El microprocesador como mquina de estados


El procesamiento de una instruccin implica la ejecucin de una secuencia de
operaciones, cada una de las cuales inician una o ms microoperaciones a la vez, sincronizadas por el reloj del P. Cada ciclo del reloj del sistema es un estado Ti, y para completar cada ciclo de instruccin se requieren varios estados.

Fig. 3.27 Cada ciclo del reloj se denomina estado.

Toda secuencia de microinstrucciones es sincronizada por el reloj maestro del


P, estando la ejecucin de cada paso del microcdigo vinculada con un estado interno o
ciclo de reloj. En general la extensin del ciclo de instruccin vara de una instruccin a
otra, de acuerdo con la cantidad de microinstrucciones necesarias para completar el procesamiento de una instruccin en particular.
Por ejemplo, es claro que el tiempo que el CPU emplea en la ejecucin de la
instruccin ADD es mayor que el que invierte en procesar la instruccin MOV, debido a
que ADD requiere un mayor nmero de operaciones internas para ser completada, o
expresado de otra manera, la ejecucin de ADD exige ms ciclos de reloj que los necesarios para MOV. Para que el P realice una suma gasta cuatro estados internos para buscar la instruccin en memoria, decodificarla, usar la ALU, y transferir el resultado al
registro acumulador; mientras que para completar MOV usa tres estados, porque despus
de la decodificacin es suficiente con realizar una transferencia desde el registro A hasta
el B.
Una ventaja de considerar al P como una mquina secuencial cuyas funciones
estn asociadas con el paso por cierto nmero de estados internos es que simplifica notablemente la comprensin del modo de funcionamiento del procesador, al permitir representar con un diagrama de transicin de estados las distintas operaciones que la mquina realiza durante la ejecucin de una instruccin.
Para definir el diagrama de estado considere que al P se le aplica un pulso de
reset que pone en cero el contador de programa. El ciclo de instruccin se inicia en el
instante que la CPU sale del estado TR de RESET. A continuacin se describe los eventos que ocurren a partir del estado interno inicial T1 y en la figura 3.28 se representan
como un diagrama de transicin de estados.

69

Introduccin al Microprocesador

T1: El contenido del PC que corresponde a la direccin de memoria donde


est almacenado el cdigo de operacin se presenta en el bus de direcciones y se almacena temporalmente en el MAR.
(bus de direcciones) (PC)
T2: La instruccin en la celda de memoria seleccionada por el MAR se
transfiere al registro de instrucciones y se decodifica.
(IR) (OC)
T3: Si el cdigo de operacin de la instruccin corresponde a IN, OUT o
MOV, se ejecuta la transferencia respectiva a, o entre registros.
T4: En el caso de una instruccin aritmtica ADD o SUB, durante el estado
T4 se ejecuta la operacin de la ALU, y se pasa a T3 para transferir el
resultado al registro acumulador.

reset

TR

reset
T1

T2

instruccin
ADD

IN OUT
MOV

T3

SUB

T4

Fig. 3.28 Diagrama de transicin de estados del P.

La fase de bsqueda de la instruccin corresponde a los estados T1 y T2, mientras


que la decodificacin del OC se realiza al final de T2. Dependiendo si la instruccin es
de transferencia de datos o aritmtica se usan uno dos estados adicionales (T3 y T4)
para completar la ejecucin. Conviene aclarar que en la mayora de los Ps la fase de
bsqueda finaliza en el instante que el OC es almacenado en el IR, en tanto que la decodificacin se realiza al inicio de la fase de ejecucin.
Para facilitar la comprensin del mecanismo que la CPU utiliza para el procesamiento del conjunto de instrucciones es usual utilizar el trmino ciclo de mquina como

Introduccin al Microprocesador

70

medida de la duracin de una determinada secuencia de estados durante los cuales el P


completa una accin determinada. Por ejemplo, bsqueda de OC, lectura a puerto... ;
pudiendo decirse que el ciclo de una instruccin lo constituyen un nmero determinado
de estos ciclos. En el caso que nos ocupa, el ciclo de instruccin de MOV consta de dos
ciclos de mquinas M1 y M2 con diferentes duraciones, estando M1 formado por dos estados (T1 y T2); y quedando claro que para toda instruccin M1 corresponde al ciclo de
mquina de bsqueda.

La unidad de control
Para el control de una mquina secuencial de estados es imperativa la introduccin de dos nuevas redes lgica en el P, estas son:

Un Contador de Estados de 2 bits (4 estados).


Un Decodificador de Estados.

Fig. 3.29 Contador de estados y decodificador de estados

En el diagrama de la figura 3.29 se aprecian los componentes incorporados a la


CPU. Esta unidad de control y temporizacin acepta: la salida activa del ID, el cual
identifica la instruccin cuya ejecucin est en proceso; y la informacin proveniente del
contador de estados (sincronizado por el reloj del P) para genera mltiples seales de
control aplicadas a todos los componentes internos de la CPU que intervienen en la ejecucin de la instruccin.
Observe que las seales S0 y S1 estn disponibles como terminales de salida del
P, pudiendo ser usadas desde el exterior para registrar el progreso de la ejecucin de
una determinada instruccin.

71

Introduccin al Microprocesador

Perifrico 2

Perifrico 1
OUT

IN

Registro B

Registro A
(A)

(B)

Unidad
Lgica y
Aritmtica
(A+B)
Seales Internas
de Control

Registro y
Decodificador
de Instruccin

Decodificador
de Estados

Reloj

S1

S0

S1

S0

Instruccin

Contador
de Estados

Memoria

Registro de Direccin
de Memoria

Pulsos

Contador de
Programa

Reset

Fig. 3.30. Una red lgica de decodificacin y control de la transicin de estados sincronizada por un reloj
de frecuencia del orden de MHz garantiza un P con gran velocidad de operacin.

Adems, la unidad de control es la responsable de entregar a dispositivos externos a la CPU las seales de control necesarias para sincronizar la operacin de los restantes elementos del sistema. Son necesarias dos seales de control RD (lectura) y WR
(escritura), ambas activas en nivel bajo, para indicar a la memoria o puerto de E/S que
el procesador esta en una operacin de lectura o escritura de dato.
La operacin eficiente de un sistema basado en P depende en forma crtica de la
capacidad de la CPU para controlar los circuitos asociados al C. El uso de RD y WR
para anunciar al sistema la realizacin de un ciclo de lectura o escritura, determina que el
espacio de direcciones disponible es comn para la memoria y para los puertos de E/S

72

Introduccin al Microprocesador

Por ejemplo, para trasladar un dato hacia un dispositivo externo el P emite la


direccin a la cual desea tener acceso, digamos 0020H, coloca la informacin en el bus
de datos y pone la seal WR en estado bajo. Debido a que el P reconoce slo un rea
de direcciones, no es capaz de distinguir si el destino de la informacin es posicin 20H
de memoria o el puerto 20H de salida. Esta situacin representa un problema crtico para
la operacin del sistema debido a dos dispositivos no pueden ser seleccionados para el
uso simultaneo del bus de datos. En consecuencia, se hace necesario aumentar el nmero
de lneas del bus de control con una seal que separe el rea de direccin de memoria del
espacio de direccin de E/S. Esta nueva lnea de control se identifica como IO/M y su
estado lgico distingue cuando la operacin de lectura o escritura es memoria o puerto.
En la figura 3.29 se observa que las tres nuevas salidas del P se originan en la seccin
del control.

Velocidad de procesamiento
La rapidez de procesamiento de las instrucciones esta vinculada con la frecuencia
del reloj maestro del P. En la medida que la fclk sea ms alta, con mayor velocidad se
realiza la ejecucin debido a que la duracin de cada estado ser menor. Si una instruccin especifica requiere 10 ciclos de reloj o estados internos para completar su ejecucin
y la fclk es conocida, puede determinarse el tiempo que utiliza el P para ejecutar la instruccin. Para calcular el tiempo que el P consume en la ejecucin del programa 1 se
repite en la tabla 3.4 la secuencia del cdigo indicando el nmero de estados requerido
para completar cada instruccin.
Tabla. 3.4 El programa 1 tiene 16
estados.
INSTRUCCIN
IN 01
MOV
IN 01
ADD
OUT 02

N total de estados

ESTADOS

3
3
3
4
3
16

Si la frecuencia de reloj de la mquina hipottica es, digamos fclk = 2 Mhz, cada


ciclo de reloj es de 500 ns. Como la duracin de un estado es 500 nS, el programa tardar en ejecutarse un tiempo igual a 16 estados x 0.5 S/estado = 8 s. En otras palabras,
sumar dos nmeros binarios de ocho bits gasta un tiempo de 8 s.
De acuerdo con la tabla 3.4, la velocidad mxima con la cual el P puede ejecutar una instruccin es de 1.5 s, en el caso de las instrucciones de transferencia de datos.
Las instrucciones aritmticas requieren 2 s para su ejecucin. De este modo que si en

Introduccin al Microprocesador

73

una aplicacin determinada es necesario calcular una suma en un tiempo inferior a 8 S,


debe recurrirse a una CPU ms rpida o bien incrementar la frecuencia del reloj maestro
sobre los 2 MHhz, debido a que la fclk impone el lmite superior de la velocidad de procesamiento.
Disponiendo de la informacin de la duracin de cada ciclo de instruccin es posible usar el P para realizar control de tiempo, al permitir al usuario programar lazos de
retardo del orden de s, segundos, horas o aos. Las rutinas de tiempo permiten, entre
otras aplicaciones, la generacin de pulsos o seales peridicas con alta precisin gracias
al hecho que el generador de reloj usa un cristal externo como componente base del oscilador, garantizando un reloj maestro con frecuencia exacta y muy estable.
El lmite inferior para el ancho de un pulso o el periodo de una seal peridica
est limitado por el la fclk. En aplicaciones de tiempo real generalmente se usa para control de tiempo un circuito LSI externo de propsito especfico conocido como temporizador de intervalos programable.

Comunicacin con perifricos lentos.


A menos que sea forzado a permanecer en estado de RESET por accin externa,
el P inicia la ejecucin del programa procesando secuencialmente cada instruccin en
memoria a partir de la direccin 0. La rutina de suma requiere recibir desde el exterior
los nmeros binarios a sumar, siendo evidente que 8 s es un tiempo insuficiente en
extremo para introducir en forma manual los datos desde los interruptores lgicos. Esta
situacin introduce un problema severo de sincronizacin entre la velocidad de operacin del P y los eventos externos a la CPU.
La solucin se inicia con la introduccin del concepto de Estado de Espera o
TWAIT, el cual no es ms que un alargamiento del ciclo del reloj en espera de la respuesta
de dispositivos de memoria o perifricos lentos. El estado de espera puede trasladarse
al diagrama de estados del P, como ilustra la figura 3.31. Observe en el nuevo diagrama de transicin de estados, que la transicin hacia TWAIT depende de la prueba de la condicin ready, de modo que es necesario establecer algn medio para que el perifrico
lento pueda controlar el estado de ready.
La solucin es dotar al microprocesador de una lnea de entrada identificada como READY, cuyo estado puede ser fijado desde el exterior de la unidad central de proceso. En el estado T2, el P prueba el estado de esta entrada, si est en nivel lgico uno
pasa a T3 y se completa la ejecucin de la instruccin en el modo acostumbrado. Si por
el contrario READY est en cero lgico, el P entrar en un estado de espera TWAIT en el
cual permanece hasta que la entrada de control retorne a nivel alto. As, la activacin
externa de READY impide que el P ejecute la instruccin en ejecucin porque el estado
TWAIT se introduce al final del ciclo de bsqueda y antes que se inicie la fase de ejecucin.

Introduccin al Microprocesador

74

Fig.3.31. El diagrama de transicin incluye un estado T5 = TWAIT para permitir la sincronizacin del P
con dispositivos de E/S lentos.

Para permitir la introduccin de los operandos de la suma se controla la entrada


READY con un interruptor S8 ubicado en el perifrico 1, como muestra el circuito de la
figura 3.32. Suponiendo que S1S0 es 01 cuando el P est en el estado T2, el flanco
posterior del reloj cargar uno en la salida Q del biestable U1, llevado la entrada READY a nivel bajo.
Si la instruccin en ejecucin es IN u OUT, el procesador examinar la entrada
READY e introducir estados de espera parando el proceso de ejecucin. El usuario proceder a introducir el operando de la suma y a continuacin activar el pulsador S8 para
regresar READY a nivel alto y completar la ejecucin de la instruccin.
En todo microprocesador existe esta seal de control, en los fabricados por INTEL (8, 16 y 32 bits) se denomina READY o RDY, en otros como el Z80 se denota
WAIT. En aplicaciones del mundo real, la lnea READY se usa para permitir la interconexin al P de memorias o circuitos de E/S con tiempos de acceso de mayor duracin
que el permitido por el P para entregar el dato. Activando READY, el componente ex-

75

Introduccin al Microprocesador

terno obliga a que la CPU dejar pasar, sin realizar operacin alguna, un nmero de entero de periodos de reloj hasta cuando el dato est disponible.

Fig. 3.32. Circuito para control de la entrada READY.

Conjunto extendido de instrucciones


La desventaja principal de la mquina propuesta est relacionada con el hecho
que sta posee un nmero limitado de instrucciones. Para superar est situacin existen
dos posibilidades: una, incorporar nuevas instrucciones, la otra, extender el alcance de
las existentes. Si por ejemplo, se modifica la instruccin MOV de modo que adems de
transferir el contenido del registro A hasta registro B, pueda cumplir la accin inversa,
se obtiene una instruccin MOV ms poderosa. La nueva MOV requiere dos operandos
para indicar el sentido de la transferencia, tales son el registro fuente (S) y el registro
destino (D). Los nemnicos de la nueva MOV son:
MOV A,B

(A) (B)

MOV B,A

(B) (A)

Ahora, tanto A como B pueden ser origen o destino de los datos. La instruccin
MOV original no necesitaba operandos debido a que la accin a ejecutar estaba implcita, esto es mover el contenido de A hasta B. El hecho que deba hacerse ahora referencia
a los registros internos de la CPU, indicando cual entrega y cual recibe datos, requiere
asignar algn cdigo a los registros para identificarlos. Los cdigos asignados a los registros son:

76

Introduccin al Microprocesador

Tabla. 3.5. Cdigo de 2 bits para identificar a los registros.


REGISTRO
CDIGO
A
00
B
01

En la figura 3.33 se identifican las zonas del cdigo de instruccin para los nuevos tipos de instrucciones para transferencia de datos entre registros, cuyo smbolo genrico es MOV r1,r2.
MOV B,A
Cdigo de operacin
Operando destino
Operando fuente

(B)(A)

MOV A,B
Cdigo de operacin
Operando destino
Operando fuente

(A)(B)

010 ? DD SS
010?010 0
010
01
00
010?0001
010
00
01

Fig. 3.33. Cdigos de instruccin para MOV r1,r2

El nuevo grupo de instrucciones con MOV completamente especificada, se


muestra en la tabla 3.6.
Tabla. 3.6. Conjunto de instrucciones con MOV mejorada.
Cdigo de la instruccin
Instruccin Operando D7 D 6 D5 D4 D3 D2 D1
ADD
0
0
1
0
0
0
0
SUB
0
1
1
0
0
0
0
IN
Puerto 1
1
0
1
0
0
0
0
OUT
Puerto 2
1
1
1
0
0
0
1
MOV
B,A
0
1
0
0
0
1
0
MOV
A,B
0
1
0
0
0
0
0

D0

0
0
1
0
0
1

La escritura de programas eficientes est relacionada con los recursos que ofrece
la CPU, por ejemplo la cantidad de registros internos accesibles por el programador, y
por supuesto con la diversidad de instrucciones del P. Si un procesador no dispone de
instrucciones de multiplicacin, cuando se requiera realizar esta operacin debe escribirse una rutina de producto en base a instrucciones de sumas y desplazamientos.
La mquina que se sintetiza, al ser un recurso didctico, presenta serias deficiencia en lo relacionado con la cantidad de instrucciones disponibles. An cuando el objetivo de esta seccin no es obtener un P real, conviene introducir nuevas instrucciones
para mostrar ciertos aspectos caractersticos de sistemas del mundo real. Para esto, suponga que se desea realizar un programa que ejecute la suma de dos nmeros binarios

77

Introduccin al Microprocesador

obtenidos del teclado primitivo conectado al perifrico 1 y luego al resultado obtenido


se le debe agregar una constante, digamos 2BH. Como este valor constante debe sumarse los datos de entradas, se introduce una nueva instruccin que cargue un dato de 8 bits
en el registro acumulador. De esta forma, esta constante puede ser sumada al resultado
de la operacin precedente N1+N2. Tal instruccin est presente en el conjunto de instrucciones de cualquier procesador y se denomina mover inmediatamente un dato, o
MVI dato.
MVI dato
Cdigo de operacin
Operando destino
Dato

(A)(dato)

110???00
110
00
PC+1

Fig. 3.36. El operando dato de MVI dato se carga en la siguiente posicin de memoria

La nueva instruccin de carga inmediato se usa en el siguiente programa para


realizar la suma N1 + N2 + 43.
Direccin Contenido de la memoria
Binario

0
1
2
3
4
5
6
7
8
9

10100001
01000100
10100001
00100000
01000100
11000000
01001011
00100000
11100010
xxxxxxxx

Comentario

Nemnico

mov b,a
in 01
add
mov b,a
mvi 2BH

; (A)(int.)
; (B)(A)
; (A)(int.)
; (A)(A+B)
; (B)(A)
; (A)(43)

add
out2

; (A)(A+B)
; (LEDs)(A)

in 01

Fig. 3.37. Este programa introduce dos nmeros a la CPU desde los interruptores, los suma y luego adiciona una constante al resultado.

Cada una de las instrucciones del programa 1 ocupa una posicin de memoria
como ilustra la figura 3.21, mientras que en el caso de la rutina anterior se aprecia con
claridad que MVI A, 43 usa las posiciones 5 y 6 de la memoria del sistema. De modo
que es una instruccin de dos bytes, el primero contiene el cdigo de la instruccin compuesto del OC (110) y del cdigo del registro destino (00); y el segundo byte corresponde al dato de 8 bits a ser almacenado en el acumulador. El decodificador de direcciones
se disea para el reconocimiento de instrucciones multibyte, por lo cual al decodificar el
cdigo de la instruccin MVI entregado por el IR, entiende que el contenido de la
prxima posicin corresponde a un dato, no a una instruccin, y que debe ser cargado en

78

Introduccin al Microprocesador

el registro acumulador. Desafortunadamente la inteligencia del decodificador de instrucciones, como la de la mayora de las personas y mquinas, tiene un lmite.
Qu sucede cuando la CPU obtiene el byte almacenado en la posicin 9 de la
memoria? Es evidente que no existe forma alguna de distinguir en una memoria si el
patrn de unos y ceros es un dato o una instruccin. En la posicin 9 puede existir cualquier cosa, una instruccin no programada, inexistente o simplemente basura. Cuando el
PC se incremente hasta est direccin el P intentar procesar esta informacin con resultados imprevisibles. El problema es que no existe una instruccin que permita sealar
cuando finaliza el programa. Una solucin parcial a esta dificultad es introducir una instruccin de salto que permita alterar la ejecucin secuencial del programa. Se trata de
cambiar el contenido del PC, de modo que cuando sea ejecutada produzca que el control
del programa sea bifurcado a otra instruccin, segn las necesidades especficas del algoritmo programado.
As, se introduce la instruccin JMP direccin, en la cual el operando corresponde a una direccin. El resultado de la ejecucin es un salto incondicional a la posicin de memoria especificada por el operando direccin, el cual seala la localidad de
memoria que contiene la prxima instruccin que debe ser ejecutada.
JMP direccin

PC (direccin)

DIRECCIN

0
1
2
3
4
5,6
7
8
9,10,11

NEMNICO
in 01
mov b,a
in 01
add
mov b,a
mvi a,43
add
out 02
jmp 0000

Fig. 3.38. La instruccin de transferencia JMP permite al programa operar en un lazo.

Es pertinente aclarar el panorama oscurecido por la introduccin de la instruccin


de salto en el programa de la figura 3.38. El operando que acompaa a JMP, la direccin
de salto, est formado por dos bytes, lo cual implica que JMP direccin es una instruccin de tres bytes. El cdigo de la instruccin lo especifica el primero de ellos, los dos
restantes sealan la direccin.
Un lector inquieto habr entendido que JMP 0000 ha creado un lazo infinito, esto
significa que la mquina ejecuta el programa continuamente esperando por la introduccin de operandos desde el teclado, sumando e indicando el resultado hasta que, como
una posibilidad, se le desconecte la alimentacin. Aun aplicando al P un pulso de RESET, el lazo se mantiene. Este modo de operacin es resultado del hecho que la unidad

79

Introduccin al Microprocesador

de control de la mquina solo dispone de dos modos de operacin: bsqueda y ejecucin.


DIRECCIN

0
1
2
3
4
5
6
7
8
9
A
B

CONTENIDO DE LA MEMORIA

Binario
10100001
01000100
10100001
00100000
01000100
11000000
00101011
00100000
11100010
10000000
00000000
00000000

COMENTARIOS

Nemnico
in 01
mov b,a
in 01
add
mov b,a
mvi 43

; (A)(Int.)
; (B)(A)
; (A)(Int.)
; (A)(A+B)
; (B)(A)
; (A)(43)

add
out 02
jmp 0000

; (A)(A+B)
; (LEDs)(A)
; (PC) (0000)

Fig. 3.39. La instruccin JMP tiene como operando la direccin de la prxima instruccin a ejecutar.

Si se permite al P tener un modo adicional de funcionamiento en el cual se detenga toda operacin, sera posible para la ejecucin de un programa en cualquier punto.
La CPU entrar en el modo de HALT (parada), como respuesta a la ejecucin de una
instruccin nueva con nemnico HLT, la cual carece de operandos. El modo HALT se
comprende mejor haciendo referencia al diagrama de transicin de la figura 3.40, donde
se muestren los 3 modos de operacin de la seccin de control del P.
reset
HALT

reset

Bsqueda

HLT

Ejecucin

Fig. 3.40. Modos de operacin del microprocesador

Con energa aplicada y liberado del estado de reset, la CPU busca y ejecuta la
secuencia de instrucciones en memoria, en caso que la instruccin obtenida corresponda
a HLT, el P entrar es un estado de parada del cual solo saldr al activarse la lnea de
RESET. Sustituyendo la instruccin de salto a al direccin cero en el programa de la figura 3.39, se asegura que el P cesar de funcionar cuando ejecute la instruccin HLT
almacenada en la direccin 9.

80

Introduccin al Microprocesador

0
1
2
3
4
5
6
7
8
9

A1
44
A1
20
44
B0
2B
20
E2
00

in 1
mov b,a
in 1
add
mov b,a
mvi a,43

; (A)(Int.)
; (B)(A)
; (A)(Int.)
; (A)(A+B)
; (B)(A)
; (A)(43)

add
out 2
hlt

; (A)(A+B)
; (LEDs)(A)
; Parar

Fig. 3.41. Los cdigos de instruccin son ms fcil de manejar si se expresan en hexadecimal.

El conjunto de instrucciones del P con los nuevos miembros MVI dato, JMP direccin y HLT es el de la tabla 3.7.
Tabla. 3.7. Conjunto de instrucciones del P hipottico.
Instruccin Operando hex D7 D 6 D5 D4
ADD
20 0
0
0
1
SUB
60 0
0
1
1
IN
Puerto 1
A1
0
1
0
1
OUT
Puerto 2
E2
0
1
1
1
MOV
B,A
44 0
0
1
0
MOV
A,B
41 0
0
1
0
MVI
dato
C0
0
1
1
0
JMP
direccin
80 1
0
0
0
HLT
00 0
0
0
0

D3

D2

D1

D0

0
0
0
0
0
0
0
0
0

0
0
0
0
1
0
0
0
0

0
0
0
1
0
0
0
0
0

0
0
1
0
0
1
0
0
0

Instrucciones no soportadas
En este punto ha finalizado la sntesis de la mquina hipottica y se supone que la
tabla 3.7 muestra el repertorio de instrucciones definitivo del P. Esto slo significa que
el diagrama de la figura 3.30 ilustra como se organizan los componentes de un P tpico
y que la tabla 3.7 presenta las instrucciones que permiten realizar la tarea especificada al
inicio de esta seccin. En modo alguno estamos en presencia de una CPU completamente funcional. Para completar la sntesis de la mquina de 8 bits se debe realizar la interconexin del P a la memoria y a los puertos de E/S. Antes de proceder a presentar el
diagrama final de la mquina se describen un tipo de instruccin que no pertenece al
juego de instrucciones del P sintetizado pero que son de inters prctico.
Estas son las instrucciones de salto condicionales en las cuales la ruptura de la
secuencia del programa se ejecuta solo si se cumple una determinada condicin previa.
En otras palabras la CPU solo cambia el contenido del PC en funcin del resultado de
una prueba que evala el cumplimiento de cierta condicin. Si tal condicin no es satisfecha el programa ejecuta la prxima instruccin en memoria.

81

Introduccin al Microprocesador

Las banderas a probar son bits de un registro especial de la CPU denominado


registro de condicin de estados o registro de banderas, el cual forma parte de la arquitectura interna del P y es accesible por el programador. Los bits de este registro son
activados por la ALU de acuerdo con el resultado producido por una determinada operacin lgica o aritmtica. La figura 3.42 muestra la conexin del registro de condiciones a
la ALU, y los bits de banderas tpicos. Los cinco bits definidos para el registro banderas
son los mismos que se encuentran en el microprocesador 8085A.

Registro A

Unidad
Lgica y
Aritmtica

Registro B

Registro de banderas

Fig. 3.42. El registro de estados permite la ejecucin de instrucciones condicionales.

Los estados que se asignan a las banderas estn relacionados, como se dijo, con
el resultado de una operacin aritmtica o lgica, de modo que dependen del contenido
del acumulador despus de la ejecucin ADD o SUB, en este caso.
Tabla 3.8 Condiciones del registro de banderas.
Se produce si:
BANDERA
ESTADO
Acarreo
CY = 1
Hay desborde desde el bit 7 del acumulador
Acarreo auxiliar
AC = 1
Ocurre desborde desde el bit 3 de A
Signo
S=1
A7 = 1
S=0
A7 = 0
Cero
Z=1
(A) = 00000000
Z=0
(A) 00000000
Paridad
P=1
El nmero de bits en 1 en A es par.
P=0
La suma de los bits en 1 en A es impar.

Debido a que cuando se describa la arquitectura del P8085A se insistir sobre


este tema, por ahora se limita el anlisis a la funcin de la bandera de acarreo CY. Por
ejemplo, si se desea realizar la operacin aritmtica 19110 + 110 = 192 10, los valores binarios en los registros conectados a las entradas a la ALU deben ser: (A) = 101111112 y
(B) = 000000012. La ejecucin de la instruccin de suma ADD produce como resultado
(A) = 110000002. El lector puede verificar que no ocurre desborde del bit 7 del acumulador, siendo la bandera CY =0.

82

Introduccin al Microprocesador

Si la operacin a realizar ahora es 19110 + 6610 = 25710, los registros de operandos a las entradas de la ALU contendrn: (A) = 101111112 y (B) = 010000102. Luego
de ejecutar la instruccin ADD, el contenido del acumulador es (A) = 000000012, resultado obviamente incorrecto. El problema estriba en que ADD ejecuta la suma de dos
nmeros y almacena el resultado en los 8 bits del A, a pesar que la solucin correcta al
problema contiene 9 bits.
1

Recuerde que con un patrn de ocho unos y ceros, el mayor nmero decimal que puede expresarse es (28 - 1) = 25510, mientras que el resultado correcto de la
suma es 25710: 1000000012 = 1x28 + 0x27 + 0x26 + 0x25 + 0x24+ 0x23 + 0x22 + 0x21 + 1x20 = 25710.
Al ocurrir un desborde del bit 7 del A, la ALU lo indica con CY =1. Las instrucciones
tpicas de salto condicional y cuya ejecucin depende de la bandera de acarreo son,
JC direccin

Salto a direccin si CY =1

JNC direccin

Salto a direccin si CY =0

Adems de realizar operaciones aritmticas la ALU debe estar en capacidad de


ejecutar operaciones lgicas. Una instruccin lgica tpica es ANA, la cual realiza la
funcin lgica AND, bit a bit, entre el registro B y el registro A. Si (A) = 11010011 y
(B) = 01100010, al ejecutar ANA, la ALU transfiere al acumulador (A) = 01000010.
Posteriormente se detallan aplicaciones de las instrucciones lgicas.
DIRECCIN

(hex)
0000
0002
0003
0004
0005
0008
0009
000B
000C
000F
0010

in 01
mov b,a
in 01
add
jc 0000
mov b,a
mvi a,43
add
jc 0000
out 02
hlt

; operando 1 al acumulador
; (b) (a)
; operando 2 al acumulador
; (a) (a) + (b)
; si cy = 1 se inicia el programa
; si cy =0 , (b) (a), resultado parcial en b
; (a) (43)
; (a) (b) + (43)
; si cy = 1 se inicia el programa
; si cy = 0 se presenta resultado final.
; parar

Fig. 3.43. Programa que usa instrucciones de salto condicional

El programa de la figura 3.43, muestra en forma sencilla el uso de JC. El resultado de la suma solo se presenta si no ocurre acarreo. Si CY = 1, el programa volver al
inicio, a pedir el operando 1. Una suma de nmeros binarios de 16 bits puede realizarse
usando a CY para que el acarreo resultante de la suma de dos bytes, se incluya en la adi-

Introduccin al Microprocesador

83

cin de los dos bytes siguientes. Los cdigos de las instrucciones ANA, JC y JNC no se
asignaron, observe que tres instrucciones adicionales incrementa a 11 el numero de instrucciones que puede ejecutar la CPU, de modo que no es posible considerar que los 3
bits ms significativos del cdigo de instruccin representan el cdigo de operacin. Los
bits del OC deben extenderse a cuatro (D7-4).
Diagrama final del microprocesador sintetizado.
El diagrama funcional terminado de la mquina de 8 bits sintetizada se presenta en
la figura 3.44, donde se incluyen los buses de direcciones, de datos y el bus interno de la
CPU. Las instrucciones y datos provenientes de la memoria y la informacin que se
obtiene o se entrega a los perifricos de E/S, circulan por un bus de datos externo comn. El P mediante seales de control de lectura y escritura en memoria y puertos determina el destino final de la informacin.

Fig. 3.44. Diagrama simplificado de un sistema C = P + Memoria + E/S

84

Introduccin al Microprocesador

La arquitectura interna de la CPU de la figura 3.44 est compuesta por unidades


funcionales similares a las de una unidad central de procesamiento tpica, mientras que
la mquina en conjunto constituye un verdadero C al disponer de CPU, memoria y
puertos de E/S.

Las seales de entrada y salida al microprocesador.


Los componentes del microcomputador se comunican por medio de grupos de lneas de interconexin o bus. Los Ps no usan el mismo principio de los computadores
grandes para la comunicacin con el exterior. Para contribuir a la reduccin del espacio
ocupado por el sistema, se utilizan canales de comunicacin comunes para todas las unidades. En un sistema con estructura de bus nico slo un dispositivo a la vez podr
transferir informacin hacia o desde el CPU. Un intento de comunicacin simultnea
crear conflictos y el inevitable deterioro de la informacin.
De acuerdo con la funcin que cumplen y con el tipo de informacin que conducen, los buses son de tres tipos: Datos, Direcciones, y Control, y se caracterizan por: el
ancho del bus o nmero de lneas que lo forman, el sentido de conduccin (unidireccionales o bidireccionales), y el tipo de funcin que cumplen las seales que portan
(datos, direcciones o control). En la figura 3.45 se presentan los smbolos ms usados
para representar un bus en diagramas elctricos.

Conexin explicita

Unidireccional

Bidireccional

Fig. 3.45. Smbolos de lneas de interconexin

El Bus de Datos (D0-D7) es bidireccional pero no puede transmitir en ambos sentidos simultneamente. Es el canal que permite el flujo de informacin desde el P
hacia la memoria y los puertos de E/S, y desde estos hacia el P. El ancho del bus de
datos lo define generalmente (el 8088 es una excepcin) el formato de las instrucciones
y datos que usa la mquina. Es comn distinguir la arquitectura de la mquina sealando
el ancho de este bus, de modo que un C de 8 bits contiene un P con bus de datos con
igual nmero de bits.

Introduccin al Microprocesador

85

El Bus de Direcciones (A0-A15) es unidireccional, solo conduce informacin


proveniente del P, la cual indica la direccin de memoria o puerto de E/S, hacia donde
debe transferirse o desde donde se obtienen los datos que circulan por el bus de datos.
Como se mencion el ancho del bus de direcciones define la capacidad de memoria de la
mquina. El P tendr acceso a un mximo de 216 (65536) posiciones de memoria, debido a que el bus de direcciones es de 16 bits.
El bus de Control ( RD , WR , IO/M , RESET, y READY) lo conforman lneas de entrada o salida a la CPU y lo constituyen las seales que sincronizan las operaciones del
P. Controla el sentido de la transferencia por el bus de datos, indicando si la transmisin es hacia o desde la memoria o puerto de E/S. Generalmente est constituido de 10
ms lneas, dependiendo del procesador. La definicin de la funcin que realiza cada
uno de los terminales del P se especifica en la Tabla 3.9.
Tabla. 3.9 Funciones de las seales del P de la figura 3.44.
+5V
VCC
Tierra
VSS
Entrada de reloj al microprocesador
CLK
Entrada que pone en cero el contador de programa.
RESET
Bus de direcciones del microprocesador.
A0-A15
Bus de datos de la CPU
D0-D7
Indica que el P desea leer la localizacin de memoria o dispositivo de E/S
RD
seleccionado. Adems avisa que el bus de datos est disponible para realizar la
transferencia.

WR
IO/M

Seala una salida vlida de datos en el bus de datos. Indica que la informacin
presente en el bus de datos ha de ser escrita en la posicin de memoria o dispositivo de E/S seleccionado.
Distingue si la operacin de lectura o escritura se realiza sobre la memoria o
puerto de E/S.
Si tiene nivel lgico alto durante la ejecucin de las instrucciones IN puerto y
OUT puerto, indica que la memoria o dispositivo de E/S est listo para recibir o
transferir datos.

READY

Si presenta nivel bajo, el procesador esperar un nmero entero de ciclos de


reloj para que READY vaya a nivel alto y completar el ciclo de lectura o escritura de E/S.

Los primeros microprocesadores de 8 bits (8080, Z80, y 6800) que dominaron el


mercado se fabricaban en un encapsulado de 40 terminales en dos lneas de 20 pines
cada una. Con la intencin de realizar comparaciones entre el nmero y funciones de las
lneas de entrada y salida de un P comercial del tipo de los mencionados, y el de la figura 3.44, se deja volar la imaginacin y se procede a integrar el P en un encapsulado
del tipo DIP 40.

86

Introduccin al Microprocesador

Las 34 seales del P se distribuyen en el encapsulado en forma arbitraria como se


muestra a la izquierda de la figura 3.46, los 6 terminales restantes del CI se consideran
no conectados. A la derecha se ofrece un diagrama de la CPU donde se agrupan las lneas en los tres buses tpicos de un P.

BUS DE
CONTROL

BUS DE
DIRECCIONES

BUS DE
DATOS

P
Fig. 3.46 Configuracin de terminales y buses del microprocesador.

Las 16 lneas de direcciones, las 8 de datos, las 2 de alimentacin, y el reloj del


sistema estn presentes en todos los Ps mencionados y ocupan 27 terminales del encapsulado. El bus de control est constituido por 7 seales, 2 de las cuales (RESET y READY )
se usan para el control de la CPU, mientras que las restantes ( IO/M , RD , WR ,S0 y S1)
est destinadas al control del sistema.
Se ha establecido que un P de uso prctico debe contar con al menos 10 seales
de control para cumplir con todas las funciones relacionadas con para la operacin de un
microcomputador. Esto significa que alguna seales de importancia estn ausentes en el
P desarrollado, debido a que en beneficio de la sencillez se han omitido ciertas entradas
y salidas. Para control de acceso directo a memoria y aceptacin de interrupciones un P
tpico destina por lo menos 4 entradas. En general los Ps disponen de seales que cumplen funciones similares en formas diferentes. El Z80 por ejemplo usa 4 seales: RD ,
WR , IOREQ , y MREQ para las funciones que el P de la figura 3.46 realiza con solo 3:
IO/ M , RD , y WR . Se puede concluir que el P desarrollado en forma descriptiva dispone de la mayora de las entradas y salidas que se encuentran en un P comercial, exceptuando el control de interrupciones y DMA, tpicos a discutir ms adelante.
3.2.2 EL SISTEMA MICROCOMPUTADOR
Considerando el modo de operacin de un microcomputador prctico, son mltiples las omisiones o simplificaciones que se han realizado a lo largo de esta seccin in-

Introduccin al Microprocesador

87

tentando exponer de modo sencillo el funcionamiento de las unidades internas del P y


los dispositivos asociados.
En Cs reales los procedimientos descritos para el acceso a la memoria y a los
puertos del P no son tan simples como los expuestos. Con relacin a la operacin conjunta del P y la memoria del sistema no se presentaron detalles sobre como el procesador selecciona la posicin a la cual desea tener acceso.
Las direcciones de memoria
S el dispositivo de memoria SRWM de Kbytes de la figura 3.20 se acopla directamente al P, conectando las lneas de direcciones de la memoria a los terminales de
direccin correspondientes del P, no sera posible la expansin futura de la memoria
del sistema. Un P de 8 bits con 16 lneas de direcciones puede tener acceso hasta un
mximo de 65536 celdas, de modo que el uso de una memoria con 9 entradas de direcciones acoplada directamente al sistema representa el desperdicio del 99.68 % de la capacidad de memoria del procesador.
A primera vista pudiese parecer que la solucin estara en usar circuitos integrados con mayor capacidad de almacenamiento, pero antes conviene considerar que a pesar que el procesador ve un espacio nico para toda la memoria del sistema, lo usual es
que aun en aplicaciones simples sea necesario el uso de ms de un chip para organizar el
subsistema de memoria. Tambin es comn que los puertos de E/S del sistema sean tratados como posiciones de memoria con la finalidad de aprovechar la potencialidad del
relativo gran nmero de instrucciones del P que hacen referencia ala memoria.
Un microcomputador requiere un rea de memoria capaz de retener los datos aun
luego de retirarle la energa, este espacio contiene el programa almacenado y es conocido como la memoria de solo lectura (ROM). Es comn que el espacio de ROM se genere usando un solo circuito integrado. En contraposicin, para organizar la zona de memoria de lectura/escritura (RWM) usada para almacenamiento temporal de datos y resultados, puede ser necesario un arreglo de paralelo o serie de dos o ms dispositivos. Esto,
debido a que los circuitos disponibles no son de la capacidad que exige las especificaciones del sistema en desarrollo, o bien porque la longitud de la palabra del CI es menor
a 8 bits.
Un CI de memoria de 8 Kbytes tienen 8192 celdas con direcciones fsicas comunes desde 0000H hasta 1FFFH. En una aplicacin que requiera esta capacidad para la
ROM y para la RAM, se encuentra que las lneas A0-A12 del bus de direcciones del P
estarn conectadas a las entradas correspondientes de ambos chips. Si no se provee al
sistema de algn medio para acoplar elctricamente al bus de datos solo un dispositivo a
la vez, un intento de leer un dato en la localizacin 01FFH, o en cualquier otra, tendr
resultados imprevisibles debido existen dos celdas con la misma direccin. La solucin
prctica para que la CPU distinga y tenga acceso a solamente la direccin seleccionada
consiste en usar un decodificador de direcciones de memoria. Tal circuito digital sec-

88

Introduccin al Microprocesador

ciona el espacio de 64 Kbytes en bloques de rango especificado y asigna cada una de las
particiones a la ROM y a la RWM del sistema de acuerdo con lo establecido en la fase de
diseo del sistema. Una representacin grfica de las zonas asignadas a cada dispositivo
o grupo de stos se conoce como el mapa de memoria del sistema, mostrndose en a
figura 3.47 el correspondiente a un sistema que tiene 8 K de ROM y 4 K de RWM.

DIRECCIN

DATOS

0000

0010000000000000

.
.
.
1FFF

.
.
.
1010111110110111

2000

0010000000000000

.
.
.
5FFF

.
.
.
0101111111111111

6000

111111111110000

.
.
6FFF

.
.
.
0101111111111111

7000

0101111111111111

.
.
.
FFFF

.
.
.
111111111111111

8 K ROM

16 K libre

4 K RWM

36 K libre

Fig. 3.47 Localizacin del rea de memoria ROM y RWM en el espacio de direcciones del P

En la mquina hipottica no tenemos memoria ROM, slo disponemos de una


memoria de 512 bytes con una pila interna para retener los datos del programa, sin importar como ste es cargado en la memoria. A continuacin se disea el de decodificador
de memoria del sistema.
El objetivo es generar una seal de seleccin del chip de memoria llamada MEM
y activa en nivel bajo, cuando en el bus de direcciones est un valor dentro del rango de
direcciones de la memoria y cuando se realice una operacin de bsqueda. Como solo
existe un dispositivo de memoria de 512 bytes el diseo de un decodificador es directo.
En el rango de direcciones del dispositivo (0000H-01FFH) las lneas A9 hasta A15 estn
siempre en estado bajo, como se puede observar en la zona ms oscura de la tabla de la
tabla 3.10, y adems durante la realizacin de una operacin sobre la memoria la seal
de control IO/ M ser cero lgico.

89

Introduccin al Microprocesador

Esta combinacin solo se presenta cuando el P desea acceso a la RWM, por lo


cual puede usarse para generar la seal de seleccin de memoria MEM , la cual se aplica
a la entrada de habilitacin CS del circuito integrado. La seal MEM responde a la la
ecuacin lgica,
MEM = A 15 + A 14 + A 13 + A 12 + A 11 + A 10 + A 9 + IO/ M

Tabla. 3.10 Estados de las lneas de direcciones del P en el espacio de 64 K.


Direccin
0000H

A15 A14 A13 A12 A11 A10


0
0
0
0
0
0

A9
0

A8
0

A7
0

A6
0

A5
0

A4
0

A3
0

A2
0

A1
0

A0
0

0001H

01FEH
01FFH
0200H
0201H

0
0
0
0

0
0
0
0

0
0
0
0

0
0
0
0

0
0
0
0

0
0
0
0

0
0
1
1

1
1
0
0

1
1
0
0

1
1
0
0

1
1
0
0

1
1
0
0

1
1
0
0

1
1
0
0

1
1
0
0

0
1
0
1

FFFEH
FFFFH

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

1
1

0
1

Se deduce por inspeccin que si cualquiera de las lneas de direcciones que intervienen en la ecuacin est en nivel alto, la direccin en el bus no corresponde a una posicin de la memoria del sistema permaneciendo MEM en estado alto, deshabilitando la
memoria. As mismo cuando IO/ M est en uno lgico, lo cual ocurre cuando el P realiza una operacin de lectura/escritura sobre un puerto de E/S, el estado lgico de MEM
ser uno. El circuito del decodificador de direcciones de memoria se muestra en la figura
3.48.

Fig. 3.48 decodificador de direcciones de la memoria RWM de 512 Bytes

90

Introduccin al Microprocesador

Las direcciones de los puertos


El circuito decodificador de puertos debe generar dos seales: la primera PEO1
para habilitar los buffers que conectan los interruptores de entrada al bus de datos del P
como ilustra la figura 3.10; la segunda PS02 para cargar en el registro paralelo de la figura 3.15 el resultado de la suma.
El circuito decodificador de direcciones de puertos tiene como tarea la identificacin y seleccionar el circuito de puerto con el cual el P intenta establecer comunicacin
cuando ejecuta las instrucciones IN puerto 1 y OUT puerto 2. Como indica la tabla 3.2
los dos bits menos significativos del cdigo de instruccin representan la direccin del
puerto. Durante una transferencia de datos hacia o desde un puerto la seal de control
IO/ M permanece en estado lgico alto, si la instruccin en ejecucin es IN puerto 1 se
activa RD , mientras que si es OUT puerto 2 WR va a cero. En ambos casos el nmero
del puerto aparece en los bits A1 y A0 del bus de direcciones.
En la tabla 3.11 se resumen los estados de las seales que intervienen en un ciclo
de transferencia de datos al puerto de entrada 01 y al puerto de salida 02.
Tabla. 3.11 Estados de las seales de control del
P durante una operacin de E/S.
Operacin
A1 A0
IO/ M
RD
WR

Entrada
Salida

1
1

0
1

1
0

0
1

1
0

Como en el sistema solo existen dos perifricos se pueden generar dos seales de
seleccin de puertos: PEO1 para el puerto de entrada 01 y PS02 para el puerto de salida
02. De la tabla 3.11 se deduce por simple inspeccin el circuito digital para obtener ambas seales.

Fig. 3.49 Circuito de seleccin de los puertos de E/S

El procedimiento usado para identificar los puertos se conoce como mtodo de


seleccin lineal y limita a cuatro (2 de entrada y 2 de salida) el nmero de puertos posibles de habilitar. Para extender a 8 puertos la capacidad de la estructura de E/S del C se
usa un CI 74LS139, el cual contiene dos decodificadores binarios 2 a 4.

91

Introduccin al Microprocesador

Tabla. 3.12 Tabla de estados del


G
B
A Y3 Y2 Y1
1
x
x
0
1
1
0
0
0
1
1
1
0
0
1
1
1
0
0
1
0
1
1
0
0
1
1
1
1
0

74LS139

Y0
1
0
1
1
1

La tabla 3.12 indica que con la entrada G est en estado bajo la salida yk estar
en nivel bajo si el nmero entero representado por la entrada B A es igual a k. La figura
3.50 muestra el diagrama elctrico del decodificador de 4 puertos de salida y 4 de entrada. Observe que las seales intermedias a las salidas de las puertas NAND ( IOR y IOW )
pueden usarse para la habilitacin de puertos en una aplicacin que incluya un perifrico
de entrada y uno de salida.
Finalmente, la figura 3.51 ilustra el diagrama del circuito final del C. Los puertos de E/S del sistema final son decodificados usando el mtodo de seleccin lineal

Fig. 3.50 Decodificador de 4 puertos de entrada y 4 de salida

3.3 ARQUITECTURA DE UN P DE 8 BITS MS VERSTIL


El microprocesador hipottico puede considerarse una aproximacin aceptable de un
P debido a que contiene las unidades funcionales caractersticas de un P tpico de 8
bits. No obstante es conveniente aclarar que al ser usado como recurso didctico para
introducir al estudiante en forma amigable y rpida en el mundo de los microprocesadores fue necesario simplificar el anlisis e incluso omitir ciertos aspectos operativos fundamentales para el funcionamiento de dispositivos reales. El autor considera que esta
altura del texto el lector conoce los principios bsicos sobre la arquitectura y funcionamiento del microprocesador y la forma de combinarlos con otros dispositivos LSI para
ensamblar un microcomputador primitivo. El propsito de este captulo, que se supone
cumplido, fue introducir en forma resumida la mayor cantidad de tpicos relacionados

Introduccin al Microprocesador

Fig. 3.51 Microcomputador de 8 bits con 512 bytes de memoria RWM y 1 puerto de entrada y 1 de salida.

92

Introduccin al Microprocesador

93

con el rea sin tener que esperar el avance por captulos para la introduccin de nuevos conceptos.
En estas pginas iniciales se exponen principios elementales como el funcionamiento de la ALU y la forma en que establece comunicacin con los registros internos, hasta conceptos algo ms elaborados como la introduccin de estados de espera.
A partir de aqu se reforzaran en forma sistemtica y detallada los conceptos aprendidos y se capacita al estudiante para el anlisis y diseo de Cs ensamblados usando
circuitos integrados y dispositivos electrnicos comerciales.
El microprocesador hipottico presenta ciertas limitaciones ausentes en P
comerciales. En primer lugar tiene solo dos registros internos: el acumulador usado
para contener un operando y el resultado en cualquier operacin realizada por la ALU
y el registro B donde se almacena el segundo operando. Un P real contiene uno o
ms acumuladores y un banco de registros para propsito general usados para almacenamiento temporal de datos y como operandos en la ejecucin de instrucciones que
usen la ALU. Un nmero reducido de registros internos de uso general representa un
serio obstculo para la escritura de programas eficientes debido a que estos registros
permiten a la ALU funcionar a gran velocidad ya que toda transferencia de datos tiene lugar en el interior del P, sin requerirse hacer referencia a la memoria externa.
Los microprocesadores modernos con arquitectura RISC tienen al menos 32 registros
internos. En segundo termino, solo se especificaron algunas seales para control de la
mquina como RESET y READY , y RD , WR , IO/M , S0 y S1 para control de los dispositivos del sistema.

Fig. 3.52 Arquitectura de un microprocesador tpico de 8 bits

Introduccin al Microprocesador

94

En la figura 3.52 se presenta un diagrama funcional de un microprocesador de


8 bits con arquitectura similar a un P comercial tpico. Observe que exceptuando el
banco de registros y los registros buffers usados para conectar las lneas de datos y
direcciones al exterior del P, todos los dems elementos estn contenidos en la CPU
de la figura 3.52. De modo que el lector puede considerarlo como una simple extensin de la CPU sintetizada en el captulo anterior.
Aunque cada fabricante produce Ps con arquitectura ligeramente distintas, al
ser los principios de funcionamiento iguales para todo P (de 8 bits), basta con familiarizarse con el modo de operacin de uno, para entender con facilidad el funcionamiento de cualquier microprocesador.
El P de la figura 3.52 tiene un acumulador y un banco de registros de 8 bits
para propsito general, denominados: B, C, D, E, F, y G. El registro de 16 bits
Apuntador de Pila (SP), mantiene la direccin tope de un rea especial de memoria
administrada por programa, llamada el Stack (pila), la cual se describe posteriormente.
El grupo de registros lo completa el Contador de Programa (PC), el Registro de Direcciones de Memoria (MAR), ambos de 16 bit, y un circuito lgico para
Incremento/Decremento de Direcciones, el cual permite el enlace automtico de las
instrucciones del programa. Cada vez que se busca el contenido de una posicin de
memoria, el contenido del PC y del MAR se incrementa en 1, apuntando a la siguiente posicin de memoria. El MAR se conecta al exterior por medio de un registro buffer de 16 bits, el cual es el origen del Bus de Direcciones (A0 - A15). El Registro/Buffer de Datos est conectado al Bus Interno de Datos del P, y sus salidas
son el Bus Externo de Datos (D0 - D7).
La Unidad Lgico Aritmtica se observa a la derecha del esquema. Las entradas a la ALU son el registro A y uno de los registros de uso general. Esto permite
la existencia de la instruccin ADD E, por ejemplo, la cual suma el contenido de los
registros A y E, y deposita el resultado de la operacin en el acumulador. La conexin
de un registro determinado a la entrada de la ALU lo realiza un multiplexor omitido
en el diagrama. La ALU tambin controla el Registro de Condiciones o Banderas
(flags), el cual contiene las banderas Z, S, AC, P, y CY.
Analizar un microprocesador genrico es difcil. En prrafos anteriores se establece que procesador est compuesto de tres bloques fundamentales: un banco de
registros, la ALU, y la unidad de control. La seccin de temporizacin y control lgico es una unidad realizada por hardware, cuya funcin es sincronizar y controlar
todas las operaciones que se realizan dentro de la CPU. La unidad de control usa el
reloj del sistema para sincronizar la bsqueda y ejecucin de las instrucciones, generando seales de control que gobiernan toda accin realizada por el P. La seccin
de control tiene como entradas:

Introduccin al Microprocesador

95

El reloj del sistema,


Lneas externas de control para alterar o interrumpir la secuencia del programa, tales como RESET, READY , y otras aun no mencionadas, y
Las salidas de la seccin formada por el Decodificador de Instrucciones y el
Codificador de Ciclos de Mquina (llamado decodificador de estados en la
figura 3.44), que portan informacin sobre la instruccin bajo procesamiento, la cual es usada por la unidad de control para generar las seales externas para manejo de memoria y dispositivos de E/S, y seales internas para
el control de la ALU y la transferencia entre registros de la CPU, estando
toda operacin sincronizada por el reloj maestro del sistema.
En general, es algo complejo separar los distintos elementos de la CPU en los
tres bloques bsicos debido a la estrecha relacin que existe entre ellos, no obstante
puede considerarse que el diagrama de la figura 3.52 reproduce en forma adecuada,
desde el punto de vista funcional, la estructura interna de un P, y lo que es ms importante desde el punto de vista didctico, no introduce contradiccin alguna con los
resultados del proceso de sntesis de la mquina hipottica.
El bus interno de datos
Un elemento de vital importancia para distinguir la arquitectura de un P es el nmero de buses internos usados para la transferencia de datos entre los registros y la ALU.

Fig. 3.53 Arquitectura de bus doble

El diagrama de la figura 3.53 corresponde a una seccin del P PACE fabricado por National Semiconductor. Este P usa una estructura de bus doble. Uno denominado bus de operandos conectado a las dos entradas de la ALU, el otro o bus de
resultados conecta la salida de la ALU con los registros internos donde se deposita el
resultado de la operacin lgica o aritmtica. Una arquitectura de este tipo mejora el
desempeo del P porque aumenta la velocidad de ejecucin debido a que los operandos y el resultado de la operacin se transfieren por vas diferentes. Si el bus de

Introduccin al Microprocesador

96

operandos en la figura 3.53 se separa en dos buses de modo que a cada entrada de la
ALU se conecte un bus de datos independiente, se obtiene un P con arquitectura de
bus triple. El esquema de tal sistema puede verse en la figura 3.54.

Fig. 3.54 Arquitectura de bus triple.

EL P de la figura 3.52 usa un bus nico conectado a las dos entradas de la


ALU. Al existir una sola va para la transferencia de datos entre los registros y la
ALU, tanto los operandos como el resultado circulan por el bus interno aunque en
tiempos diferentes. Este modo de operacin se destaca por su lentitud, mientras que el
principal beneficio que ofrece el uso de un bus simple es la poca complejidad de la
arquitectura del P y la reducida rea que ocupa las ramificaciones del bus interno
en la oblea de silicio, lo cual representa un verdadero ahorro de superficie de integracin.
La baja velocidad de ejecucin se debe a que para ejecutar la suma la ALU debe realizar tres transferencias en secuencia por el nico bus disponible, dos desde los
registros que contienen los operandos hasta cada entrada de la ALU, y una para trasladar el resultado al acumulador. Se supone que las empresas fabricantes de Ps evaluaron el compromiso entre la velocidad y el ahorro de superficie de integracin y
optaron por esta ltima, porque la mayora de los Ps usan un solo bus interno. Aunque esta arquitectura es sencilla y ocupa poco espacio en el rea de silicio del CI,
presenta problemas de sincronizacin que afectan la operacin de la ALU.

Para ilustrar esta situacin considere que la ALU es un circuito combinatorio


de modo que responde de inmediato a cualquier cambio en sus entradas. Suponga que
se carga un valor en el acumulador, el cual est conectado a la entrada izquierda de la
ALU, y se ejecuta la instruccin SUB b. La unidad de control selecciona el registro B
y lo conecta por medio del bus interno a la entrada derecha de la ALU. Al ejecutar la
sustraccin el resultado A-B debe cargarse en el acumulador. Cuando el resultado de
la operacin aritmtica se transfiere por medio del bus de datos hacia el A, el cual
debe estar habilitado, se originan dos problemas serios de sincronizacin en el interior
del P. Primero, el resultado no solo se almacena en el A, sino que a travs del bus

97

Introduccin al Microprocesador

interno alcanza la entrada derecha de la ALU y pasado el retardo de propagacin de


los circuitos que forman la ALU la salida de sta entrega un resultado distinto a la a la
resta (A) - (B).

Entradas falsas

ALU

Fig. 3.55 Ilustracin del problema de sincronizacin. Las entradas a la ALU son falsas.

En segundo lugar, para hacer ms crtico el problema, observe que aun cuando
el A asla una entrada a la ALU del bus de datos, el hecho que la instruccin de resta
use al acumulador para almacenar el resultado, implica que en el instante que la suma
se deposite en el A, la entrada izquierda de la ALU tendr un operando no deseado,
por lo cual contribuir a la obtencin de un nuevo y falso resultado.

Fig. 3.56 La CPU ejecuta dos transferencias simultneas por distintas rutas.

La solucin de ambos problemas se muestra en la figura 3.56 y consiste en


usar dos registros para almacenamiento temporal: uno denominado TEMP separa la
entrada derecha de la ALU del bus interno de datos, el otro es un acumulador temporal para aislar la entrada izquierda de la ALU del acumulador. Ambos registros TEMP
y ATEMP son de uso exclusivo del sistema y son transparentes para el programador.
Ahora, con un valor precargado en el acumulador se ejecuta la instruccin
SUB B: la existencia de los registros adicionales permite que el P realice dos transferencias de datos simultneas, una implica mover el contenido del registro B por el
bus de interno de datos hacia el registro temporal de la entrada derecha de la ALU. El

Introduccin al Microprocesador

98

otro, transferir el dato en A al acumulador temporal, y de hecho a la entrada izquierda


de la ALU. Observe que en este flujo paralelo de datos no existe conflicto, dado que
usan diferentes caminos, como se aprecia en la figura 3.57.

Fig.3.57. Para completar la ejecucin de SUB B, la salida de la ALU se lleva al acumulador.

3.4 ARQUITECTURA DE UN COMPUTADOR ESTNDAR


Con los diferentes conceptos introducidos es posible establecer el diagrama
funcional de un C estndar, recordando que desde el punto de vista didctico el objetivo es resolver problemas tpicos del ambiente industrial usando la potencia del
P, ms que disear equipos de procesamiento de datos. En la figura 3.58 se presenta
el diagrama funcional simplificado de un computador basado en un P.
El P dispone de los buses de direcciones, datos, y control, y todo circuito
LSI necesario para una aplicacin determinada se conecta a estos tres buses. La nica
diferencia entre este esquema y el logrado a partir de la sntesis del C, es que la
memoria del sistema aparece separada en dos bloques: uno corresponde a la Memoria
de Lectura/Escritura del sistema, o RWM (Read Write Memory), cuyo contenido
puede ser alterado por el usuario de la mquina. En un C de propsito general el
programa es cargado en esta unidad por medio del teclado, o unidades de discos.
Tambin contiene la informacin sobre los datos y los resultados de la ejecucin del
programa. Este circuito es voltil, lo cual significa que retirarle la energa a la mquina, implica la prdida de la informacin almacenada en el circuito de memoria.
La ROM (Read Only Memory) es la memoria de slo lectura del sistema, ni el
usuario ni las instrucciones del computador pueden cambiar su contenido, estas memorias se programan durante el proceso de produccin. y no es voltil. En Cs para
procesamiento general contiene rutinas para el arranque de la mquina, tales como
rutinas de prueba de memoria, de la fuente de alimentacin, y de control de las unidades de E/S del sistema. En computadores personales compatibles con el modelo IBM,
una variante de la ROM denominada, almacena el BIOS (Basic Input Output System)de la mquina. A diferencia de las ROM, las EPROM pueden ser programadas,
borradas y reprogramadas, usando equipos de muy bajo costo. En sistemas pequeos

Introduccin al Microprocesador

99

de propsito especfico, caso en el que se disea un C para realizar una tarea especfica, el programa de control escrito por el diseador se almacena en una EPROM
(Erasable Programmable ROM) Si se requiere fabricar un gran nmeros unidades,
se puede encargar un grupo de ROMs a compaas especializadas, las cuales las programan en durante el proceso de produccin.
La presencia de la RWM en este tipo de C no es obligada, si la aplicacin no
requiere el almacenamiento temporal de datos, puede estar ausente. Esto implica que
el programador no puede hacer uso de la tcnica de subrutinas en el desarrollo del
programa ni usar interrupciones. En cualquier caso, los requerimientos de memoria en
la solucin de problemas de poca envergadura, es baja, y los circuitos de memoria no
son costosos. Posteriormente se analizaran con ms detalle los diferentes tipos de
memoria y su modo conexin al sistema.
Conocido el funcionamiento de una CPU genrica y, por lo menos conceptualmente, el de la memoria del sistema, y el modo en que los buses del P interconectan las diferentes unidades, se considera conveniente presentar la arquitectura de
un P real, el 8085A, de modo que el estudiante se traslade al mundo real de los microprocesadores.

Introduccin al Microprocesador

Fig. 3.58. Arquitectura de un sistema estndar basado en microprocesador.

100

Arquitectura y Operacin del Microprocesador 8085A

101

Arq ui t e c t ura y O p e ra c i n d e l P

4.1 GENERALIDADES
El 8085A de INTEL es un microprocesador de 8 bits para uso general construido usando tecnologa NMOS. El dispositivo incorpora un generador de reloj interno y es capaz de tener acceso hasta 64 Kbytes de memoria y 256/256 puertos de
E/S. Con este dispositivo puede realizarse un sistema microcomputador mnimo
usando solo 3 circuitos integrados, alimentados con una fuente de poder de +5 V.
La figura 4.1a es una imagen del rea de integracin de los 20000 transistores
MOS de canal N que componen el circuito del P. El CI se presenta en un encapsulado tipo DIP-40, mostrado en la figura 4.1b, el cual era el estndar industrial para la
fabricacin de circuitos integrados VLSI, durante la dcada de los 70. El 8085A tiene
un ciclo de instruccin de 1.3 s, estando disponibles en versiones ms rpidas con
cdigos 8085A-2, 8085AH, 8085AH-1 y 8085AH-2.

(a)
Fig. 4.1 (a) Foto microscpica del P8085A. (b) Encapsulado DIP-40

(b)

Arquitectura y Operacin del Microprocesador 8085A

102

El P puede ejecutar un conjunto de 74 instrucciones sincronizado por un reloj derivado de un oscilador interno, el cual usa un cristal externo de resonancia paralela y frecuencia mxima de 6.25 MHz. Esta seal base es dividida por 2 en el interior del dispositivo para producir el reloj interno que controla todas las operaciones
del 8085A. Una versin avanzada, el 8085A-2 puede operar a 5 MHz con un cristal
de 10 Mhz.
X1
X2
RESET OUT
SOD
SID
TRAP
RST 7.5
RST 6.5
RST 5.5
INTR
INTA
AD0
AD1
AD2
AD3
AD4
AD5
AD6
AD7
Vss

8085A

Vcc
HOLD
HLDA
CLK OUT
RESET IN
READY
IO/M
S1
RD
WR
ALE
S0
A15
A14
A13
A12
A11
A10
A9
A8

Fig. 4.2. Disposicin de los terminales del microprocesador 8085A

De los 40 terminales, 12 son entradas, 18 salidas, 8 son bidireccionales, y 2


estn destinadas a la alimentacin del circuito, como ilustra la figura 4.2. La fuente de
poder de +5 V, se aplica los terminales VCC (+) y VSS (-). El cristal de cuarzo se
aplica a la entradas X1-X2. El diagrama de la derecha en la figura 4.2 indica el sentido del flujo de informacin en los terminales del 8085.
Como ilustra la figura 4.2, el 8085 no presenta buses de datos y direcciones
separados. En este P, mientras que el byte de orden alto de la direccin se presenta
en las lneas A8-A15, los 8 bits menos significativos de la direccin aparecen en los
mismos terminales (AD0-AD7) que el bus de datos. Las funciones de estos ocho pines
se presentan multiplexadas en el tiempo, encargndose la seal ALE (Address Latch
Enable) de indicar a dispositivos externos cuando la informacin presente corresponde a datos o direcciones.
La razn de la aparente complicacin que representa el multiplexado de seales est relacionada con el estado de la tecnologa de fabricacin de circuitos LSI en
la dcada de los 70. En esa poca, como en la actualidad, durante el proceso de produccin los chips eran probados usando equipos especiales y costosos para garantizar
el correcto funcionamiento del producto final. En los inicios de los setenta, tales instrumentos slo podan verificar el funcionamiento de circuitos integrados en receptculos de hasta 42 terminales. Esto no significa que treinta aos atrs no se fabricaran
CI de ms de 40 pines, se hacan de 64 pines, pero su prueba representaba un proceso
engorroso para el fabricante.

Arquitectura y Operacin del Microprocesador 8085A

103

Aunque los Ps fabricados hasta ese momento residan en paquetes tipo DIP40, las innovaciones con las cuales INTEL acompa el desarrollo de su nuevo producto exiga un nmero mayor de entradas y salidas para cumplir con las especificaciones del diseo. Si se considera que el 8085A requera 2 lneas para el cristal externo, 2 para la fuente de poder, 16 para el bus de direcciones, y 8 para el bus datos,
solo restan 12 terminales para el bus de control. Una docena de lneas de control no
permita la integracin de todas las funciones establecidas para el dispositivo, razn
por la cual INTEL recurre al multiplexado de las lneas de datos y direcciones del P.
El P 8085 fue diseado para disminuir el nmero de componentes necesarios
para la construccin de un sistema microcomputador tpico. Antes de la aparicin en
el mercado de este P, la construccin de una CPU completa (8080, por ejemplo)
requera el uso de al menos tres chips LSI: el P propiamente dicho (8080), el generador de reloj (8224), y el controlador del sistema (8228), este ltimo se encargaba de
separar el bus de control y el de datos, los cuales estaban multiplexados en este procesador. En el 8085A se integran las funciones de los circuitos 8224 y 8228, de modo que basta con conectar un cristal a las entradas X1-X2, para disponer de una CPU
autnoma. A la par, se mantuvo la compatibilidad de programacin con el 8080 y de
hardware con los componentes perifricos ms utilizados en el desarrollo de aplicaciones de Ps.
Por supuesto un lector perspicaz pudiese alegar: Al estar multiplexado los datos con las direcciones. No se requiere incluir un latch, externo al P, para separar
estas funciones, necesitndose por lo menos dos circuitos, uno LSI y otro MSI, para
la CPU? La respuesta es, si... es cierto. Pero, una de las bondades del 8085, radica en
los dispositivos LSI introducidos como perifricos para garantizar la integracin del
sistema, estos son: el 8155/56 y el 8355/8755. Los nuevos componentes combinaban
funciones de memoria, puertos de E/S y temporizadores, a la vez que se conectaban
directamente a los buses multiplexados del P. Como resultado de esta estrategia,
INTEL disminuy desde quince (con el 8080) a tres (con el 8085) la cantidad de componentes necesarios para un C mnimo.
El uso de cpsulas de 40 pines con estructura de buses multiplexados se mantuvo en los Ps de 16 bits 8086 (AD8-AD15) y 8088 (AD0-AD7). El 80186 y el
80188, tambin de 16 bits, usan 68 terminales, los Ps de 32 bits 386DX y 486DX
disponen de 132 y 168 pines respectivamente, mientras que el Pentium bsico, con
arquitectura interna de 64 bits y diseo superescalar, ocupa una pastilla de 273 terminales.
Aunque este procesador es un producto INTEL originalmente introducido en
el ao 1977, es fabricado actualmente por varias empresas. Como segundas fuentes
de del 8085 se encuentran: Siemens, NEC, AMD, OKI, Hitachi, y Toshiba.

Arquitectura y Operacin del Microprocesador 8085A

104

4.2 ESTRUCTURA FUNCIONAL DEL 8085A


Para entender como funciona un P es necesario conocer los tipos de registros
internos del dispositivo y el modo en el cual se realiza la transferencia de datos entre
stos. El conjunto de los registros y el repertorio de instrucciones son atributos de la
arquitectura de la mquina, y constituyen el modelo de programacin por excelencia.
El conocimiento de la funcin de cada uno y una tcnica apropiada de utilizacin
permiten la programacin del P. Con el propsito de introducir la arquitectura del
8085 y la manera en la cual se organizan las unidades funcionales en un microprocesador real, se reproduce en la figura 4.3 un diagrama de bloques del P, tal como es
suministrado por INTEL en la hoja tcnica del dispositivo.

RST 5.5 TRAP

INTA
INTR

RST 6.5

RST7.5

SID

SOD

Canal Serie

Control de Interrupciones

Bus Interno de Datos (8)

Acumulador

Reg. Temp.

Registro de
Instrucciones (8)

Flags

ALU

Decodificador de
Instrucciones
y
Codificador de
Ciclo de Mquina

B
D
H

(8)
(8)

C
E
L

(8)
(8)
(8)

Apuntador de Pila
Contador de Programa (16)

GND

(8)

Registro de Dir.

+5V
Buffer Dir
X1
X2

Gen.
Reloj
CLK OUT

Buffer Dir/Dat

Lgica de Control y Tiempo


CONTROL

READY

RD WR

ESTADO

ALE

S0 S1 IO/ M

Bus de Control

DMA

RESET

HLDA
RESET OUT
HOLD
RESET IN

A0 - A15
Bus De
Direcciones

AD0 - AD7

Bus de
Direcciones/Datos

Fig.4.3. Diagrama funcional del 8085

En el 8085 estn integradas todas las funciones de una unidad de procesamiento central capaz de ejecutar el conjunto de instrucciones del P, adems de un
grupo de funciones adicionales, tales como: la generacin del reloj, la seleccin y
asignacin de la prioridad de las interrupciones y el control del canal de comunicacin serie.
El circuito integrado P 8085 contiene un nmero considerable de componentes digitales interconectados para formar unidades funcionales. stas pueden estar

Arquitectura y Operacin del Microprocesador 8085A

105

constituidas por algunos elementos digitales o por arreglos complejos de puertas


lgicas, registros y biestables. En el diagrama de la figura 4.3 solo se muestran las los
bloques que ejecutan las funciones bsicas del dispositivo, tales son:
El conjunto del Registro de Instrucciones, el Decodificador de Instruccio-

nes y la lgica de Control y Tiempo, la cual conforman la Unidad de Control del microprocesador.
El Banco de Registros de propsito general (B,C,D,E,H,L) de 8 bits. El

Apuntador de Pila (SP), el Contador de Programa (PC), y el registro de direcciones de memoria (MAR), de 16 bits.
La Unidad Aritmtica y Lgica (ALU), el Acumulador (A), el Registro

Temporal y las Banderas de Estado.


El control de seleccin y asignacin de prioridad de las interrupciones.
El Control del Canal de Comunicacin Serie.
Los buffers de datos y datos/direcciones.

4.2.1 La unidad de control


Toda operacin realizada por el 8085 durante la ejecucin del programa de
instrucciones almacenado en memoria, ocurren como respuestas a seales de control
generadas por esta seccin del microprocesador. El P incorpora un generador interno de reloj, el cual usa un cristal conectado a las entradas X1-X2 para fijar la frecuencia de oscilacin. La lgica de control utiliza esta base de tiempo maestra o reloj
del sistema para generar comandos de sincronismo para toda operacin interna y externa realizada por el dispositivo. En esta seccin tambin se libera una salida CLK
OUT, a la misma frecuencia del reloj interno, la cual puede ser usada como reloj de
componentes externos.
Como se observa en la figura 4.3, las entradas de la lgica de control y tiempo son los terminales del cristal de cuarzo, las salidas de la seccin de decodificacin
de instrucciones y codificacin de ciclo de mquina, y seales externas generadas por
dispositivos externos a la CPU.
Las entradas externas a la lgica de control son tres: RESET IN , READY y
HOLD., stas permiten a circuitos perifricos modificar el modo normal de funcionamiento del P.

Arquitectura y Operacin del Microprocesador 8085A

106

En el caso de RESET IN , si por un tiempo de al menos tres ciclos de reloj se


aplica un nivel lgico bajo a este terminal, la lgica de control inicializa el P cargando cero en el contador de programa, en el registro de instrucciones y en varios bits
internos de control. La entrada al estado de reset es anunciada al exterior por la activacin de la salida RESET OUT.
El terminal de entrada READY tiene como funcin permitir el intercambio de
informacin entre dispositivos perifricos lentos y el microprocesador. Si esta seal
es activada a cero durante una operacin de acceso a memoria o puerto de E/S, significa que un dispositivo externo notifica que no est listo para transferir datos, de manera que solicita al P que proceda a entrar en un estado de espera hasta cuando pueda transmitir o recibir la informacin. El 8085 saldr del estado de espera cuando
READY retorne al nivel lgico alto.
La entrada restante de control (HOLD) es utilizada por componentes externos
para indicar al 8085 que requieren hacer uso exclusivo de los buses del sistema para
realizar una operacin de acceso directo a la memoria. La activacin de HOLD (nivel
lgico alto) implica una solicitud al CPU para que libere las lneas de datos y direcciones una vez que culmine el ciclo de mquina en desarrollo. Este modo de operacin es usado por circuitos controladores LSI para realizar transferencias de datos a
memoria sin intervencin del P.
La funcin HOLD es necesaria porque ninguna instruccin del P permite el
intercambio directo de datos entre dispositivos externos, de modo que toda transferencia de informacin desde un perifrico a memoria debe usar al 8085 como receptor intermedio. Este modo de operacin es demasiado lento para transmitir cantidades
masivas de datos desde un disco o tarjeta de video.
La lgica de control genera una salida HLDA para informar al dispositivo externo que acepta la solicitud de HOLD, y que procede a llevar a tercer estado el bus
de direcciones, el bus de datos/direcciones y algunas salidas de control. Una vez culminada la transferencia, el perifrico desactivada la seal HOLD y el 8085 recupera
el control de los buses.
El 8085 es un dispositivo microprogramado, lo cual significa que en su interior reside un programa encargado de trasladar la instruccin depositada en el IR a
una secuencia de microinstrucciones necesarias para realizar las funciones ordenadas
por el programa. El programa est almacenado en una memoria de solo lectura y no
es accesible al usuario
La figura 4.4 muestra al registro de instrucciones conectado al decodificador
de instrucciones, el cual identifica la instruccin en ejecucin y selecciona el programa correspondiente. El decodificador de instrucciones transfiere a la lgica de
control y tiempo el resultado de la interpretacin de la instruccin.

Arquitectura y Operacin del Microprocesador 8085A

107

Bus Interno de Datos

Registro de
Instrucciones

Buffer de
Dir/Datos

Decodificador de
Instrucciones y
Codificador de
Ciclo de Mquina

Lgica de
Control y
Tiempo

Bus Dir/Datos

Seales Internas
de Control

E/S externas
Fig.4.4. Seccin de decodificacin y control del P

Sincronizada por el reloj interno, la lgica de control y tiempo tiene la responsabilidad de ejecutar la secuencia de microinstrucciones que controla la bsqueda,
decodificacin y ejecucin de las lneas de cdigo almacenadas en la memoria. Segn
la naturaleza de la instruccin, la lgica de control emitir seales internas destinadas
a sincronizar la transferencia de datos entre registros, o entre stos y la ALU. Adems,
se encarga de generar seales externas dirigidas al control de la memoria, puertos de
E/S y otros perifricos del sistema. La sincronizacin de la transferencia de datos por
las lneas de interconexin y la interpretacin del estado de las entradas a la CPU, son
tambin responsabilidad de a lgica de control.
Las salidas externas del bloque de control son S1, S0, IO/M, RD, RW, ALE,
CLK OUT, RESET OUT y HLDA. Para entender las funciones de las seis primeras de
stas, considere una operacin de bsqueda en memoria. Durante el arranque del sistema, una red de RESET automtico pone a cero el contador de programa. Cuando el
P sale del estado de RESET, la lgica de control genera las seales de estado
IO/M=0, S1=1, S0=1, anunciando que se dispone a realizar una operacin de bsqueda del cdigo de operacin de la instruccin almacenada en la posicin 0000H.

Arquitectura y Operacin del Microprocesador 8085A

108

El siguiente paso es transferir desde el contador de programa al buffer de datos/direcciones los 8 bits de menor peso de las direcciones (A0-A7), mientras que el
byte de orden alto del PC (A8-A15) se carga en el buffer de direcciones. Simultneamente la UC emite una seal de control ALE para indicar a lgica externa que el contenido del bus multiplexado corresponde a direcciones.
Una vez que la direccin se estabiliza en el bus, la lgica de control enva a la
memoria un comando RD de lectura indicando que el cdigo de operacin debe ser
trasladado desde la memoria hasta el buffer de datos a travs del bus externo de datos,
y de all al registro de instrucciones para su posterior decodificacin. Si la operacin
fuese de escritura en memoria se hubiese generado un comando de escritura WR. A
continuacin se incrementa en uno el PC para apuntar a la posicin de la memoria
donde se almacena el siguiente byte de la instruccin o la prxima instruccin a ejecutar.
Si la instruccin en progreso contiene ms de un byte, la UC ordenar uno o
dos accesos adicionales a la memoria hasta tanto toda la informacin relacionada con
la instruccin sea transferida al interior del P. En este momento se inicia la ejecucin propiamente dicha. De acuerdo con el tipo de instruccin, la UC generar todas
las seales internas y externas necesarias para la transferencia entre registros, uso de
la ALU, o acceso a memoria o puertos de E/S.
4.2.2 Los registros internos
La figura 4.3 indica que el 8085 tiene un grupo de registros de 8 y 16 bits, a
los cuales se tiene acceso por medio del bus interno de datos. Siete de estos registros
son direccionables y estn a la disposicin de programador. El acumulador (A) es un
registro especial de 8 bits asociado a la ALU, debido a que es usado por casi todas las
instrucciones aritmticas y lgicas. Los seis registros restantes (B,C,D,E,H,L), tambin de 8 bits, son de propsito general y estn disponibles para almacenamiento de
datos durante la ejecucin del programa.
Para permitir la realizacin de algunas operaciones con operandos de 16 bits,
los registros de propsito general pueden ser usados como tres registros pares de 16
bits: BC, DE, y HL. El 8085 posee instrucciones que hacen referencia a registros pares. Por ejemplo: LXI D, dato, cargar el dato de 16 bits especificado por el operando de la instruccin en el registro par DE.
El uso adecuado de los registros internos resulta en la escritura de programas
eficientes y de rpida ejecucin. Al existir 7 registros de 8 bits accesibles por el programador, son necesarios slo tres bits para identificarlos, de modo que las instrucciones de transferencia entre registros y las aritmticas (exceptuando las de suma y
resta inmediata) son de un byte, al igual que en la mquina hipottica. Una instruccin corta es procesada con rapidez debido a que el P debe realizar un acceso nico
a memoria en busca de la instruccin, y toda operacin adicional es realizada dentro
de la propia CPU.

Arquitectura y Operacin del Microprocesador 8085A

109

Una particularidad del arreglo de registros programables es que cuando se tratan como registros pares, pueden almacenar la direccin de una posicin de memoria
a la cual se puede transferir, o desde la cual se pueden obtener datos.
Bus interno de Datos

B
D
H

C
E
L

MAR

PC
SP

Buffer
Direcciones

Buffer datos/
Direcciones

A8-A15

AD0-AD7

Fig. 4.5. Registros que pueden alterar el contenido de registro de direcciones de memoria.

La figura 4.5 indica que existen cuatro fuentes posibles para cargar una direccin especfica en el registro de direcciones de memoria (MAR), el cual es de 16 bits.
Estas son: el PC, los registros de propsito general, el apuntador de pila SP y dos
registros W y Z de 8 bits no accesibles por el programador. EL generador por excelencia de direcciones del P es el contador de programa, el cual es un registro de 16
bits que mantiene la direccin de la prxima instruccin a ejecutar, o la direccin de
bsqueda del 2do o 3er byte de una instruccin multibyte en proceso. Al final de la
ejecucin de una instruccin, o al concluir una bsqueda en memoria, el PC es incrementando automticamente en 1 para apuntar a la siguiente posicin de memoria.
Cuando el arreglo de registros de propsito general acta como fuente de una
direccin, sta debe ser cargada en el registro par por el programa. Instrucciones subsiguientes que hacen referencia a memoria utilizan esta informacin, por ejemplo:
LDAX D, transfiere al acumulador el contenido de la posicin de memoria cuya direccin especifica el contenido del registro par DE.
El contenido del SP, otro registro de 16 bits, representa la direccin del tope
de un bloque de memoria con estructura LIFO manejado por programa, y en la cual
se pueden almacenar datos en forma temporal, recuperndolos oportunamente. La
utilidad de la zona de la pila es obvia si se considera que debido al nmero reducido
de registros del microprocesador la capacidad de almacenamiento interno de la CPU
puede agotarse rpidamente. Durante la ejecucin de un programa determinado los
registros ocupados pueden ser liberados y los datos antiguos preservados usando la
pila como rea de almacenamiento.
La direccin de la base de la pila se fija en el inicio del programa. Cuando se
ejecuta una instruccin que haga referencia a la pila, el SP es incrementado, o decre-

Arquitectura y Operacin del Microprocesador 8085A

110

mentado, por la unidad de control. El SP tambin permite, como se explicar ms


adelante, el manejo de subrutinas como tcnica de programacin.
En la figura 4.5 se observan dos registros de 8 bits, W y Z, de uso exclusivo
por la unidad de control del P para el almacenamiento intermedio de datos o direcciones durante la ejecucin de una instruccin. Como ejemplo, durante la ejecucin
de una instruccin de tres bytes, tal como JMP direccin, el P busca en memoria el
primer byte correspondiente al cdigo de operacin de la instruccin, lo traslada al
IR, y lo interpreta; se incrementa el PC y se busca el segundo byte de la instruccin y
se deposita en Z, se vuelve a incrementar el PC en la bsqueda del tercer byte, el
cual se almacena en W. Concluida la fase de bsqueda, el registro par WZ contiene
la direccin de salto. Durante la ejecucin de la instruccin, el contenido de WZ se
transfiere al registro de direcciones de memoria, y el contenido del PC es sustituido
por WZ+1, para apuntar a la prxima posicin de memoria.
4.2.3 La unidad aritmtica y lgica
La ALU ejecuta operaciones aritmticas o lgicas con nmeros binarios de 8
bits. Si la funcin se realiza sobre dos operandos (puede ser sobre un operando), uno
estar almacenado en el acumulador y el otro en un registro de propsito general. El
resultado de cualquier operacin siempre se deposita en el acumulador, destruyendo
el contenido anterior del registro. La ALU puede realizar las siguientes operaciones
aritmticas y lgicas: Suma y resta binaria, AND, OR, OR Exclusivo, y NOT, y rotacin del acumulador hacia la derecha o izquierda. La figura 4.6 presenta a la unidad
aritmtica lgica del 8085 y sus registros de soporte.

Reg.Temp.

Banderas

ALU

Fig. 4.6. La unidad aritmtica lgica.

Se observa en la figura 4.6 el Registro de Estados o Banderas, de 5 bits, donde


la ALU deposita informacin vinculada con el resultado de una operacin aritmtica o
lgica. Las condiciones pueden ser probadas por programa.
S

AC

Fig. 4.7 Registro de condiciones de estado del 8085A

CY

Arquitectura y Operacin del Microprocesador 8085A

111

La bandera de Acarreo (CY) es activada (1 lgico) cuando el resultado de una operacin


aritmtica produce un desborde del bit 7 del acumulador, en otras palabras CY =1 cuando el
resultado no puede ser expresado por 8 bits, como se expuso en prrafos anteriores. Si no
ocurre desborde, CY = 0.
La condicin de Acarreo Auxiliar (AC) indica con un nivel alto el desborde desde el bit 3
del acumulador. Es til cuando se realizan operaciones BCD.
El bit de Signo (S) se activa si el bit ms significativo del resultado almacenado en A, es 1.
Es puesta por instrucciones que usan el bit 7 del acumulador como bit de signo. En estos
casos se permiten nmeros entre -128 a + 127.
La bandera de Cero (Z) es 1, si el resultado de operaciones lgicas o aritmticas es cero. Si
el resultado es distinto de cero, entonces Z = 0.
El bit de Paridad (P) va a 1 si nmero de bits en 1 del registro acumulador, es par. Si es
impar, P = 0.

4.2.4 El bus interno de datos


El 8085A es un P con estructura de bus nico, lo cual significa que toda transferencia de informacin en el interior del dispositivo se realiza a travs del bus interno
de datos de 8 bits. Las lneas internas de interconexin estn separadas de los buses
externos por medio de dos buffers de almacenamiento de 8 bits, cuyas salidas son de
tres estados. Estos se denominan: buffer de direcciones y buffer de datos/direcciones.
Durante una operacin de acceso a memoria o puerto de E/S, el P debe usar
el bus de direcciones para distinguir el dispositivo con el cual desea comunicarse.
Para cargar el bus externo con una direccin, el P transfiere el byte alto del registro
de direcciones de memoria al buffer de direcciones y el orden bajo del mismo registro
se carga en el buffer de datos/direcciones, el cual debe estar habilitado en modo de
salida. Debido a que el bus interno es de 8 bits, el P debe realizar dos transferencias
internas para emitir los 16 bits de la direccin.
La direccin permanece estable sobre el bus por un tiempo equivalente a un
ciclo de reloj, permitiendo que alguna lgica externa retenga el estado de las ocho
lneas de menor peso de la direccin. Al final del ciclo de reloj, la unidad de control
lleva a tercer estado las salidas del buffer de datos/direcciones. Dependiendo del tipo
de operacin a realizar con el dispositivo externo, las salidas del buffer permanecern
flotantes para que el dato en el bus externo sea transferido al interior del P durante
una operacin de lectura, o abandonarn el tercer estado para que la CPU transmita el
dato hacia el exterior durante una operacin de escritura.

Arquitectura y Operacin del Microprocesador 8085A

112

Finalmente, en la figura 4.8 se muestran el control de interrupciones y el canal


de comunicacin series, ambos conectados al bus interno de datos del 8085. Estos
tpicos sern discutidos con detalle en captulos prximos.

Fig. 4.8. Funciones auxiliares integradas en el 8085

En la prximas dos pginas se presenta una relacin completa de la definicin


funcional de los terminales del microprocesador 8085A. Muchas de estas seales son
conocidas, otras adquirirn sentido a medida que el estudiante progrese en la lectura
de este trabajo.
DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8085
VCC
VSS
X1 -X2
CLK OUT
RESET IN

+5V
Tierra
Terminales de entrada para un cristal de cuarzo o una red LC o RC para activar el
reloj interno del microprocesador
Salida de la seal de reloj del P para usar como reloj del sistema. La frecuencia
de CLK es la mitad de la de la seal en X1 X2.
Entrada que inicializa el contador de programa y los flip flops de habilitacin de
interrupcin y HLDA. Los buses de datos y direcciones y las lneas de control
permanecen en tercer estado durante el proceso de RESET. Los contenidos de los
registros internos del procesador, incluyendo el de banderas, pueden ser alterados
por RESET.

RESET OUT Salida que indica que el procesador est siendo inicializado, puede utilizarse para
restablecer los dems componentes del sistema.

A8-A15

Bus de direcciones. Los 8 bits ms significativos de las direcciones de memoria o


de dispositivos de E/S. Permanecen en tercer estado durante el proceso de RESET
o en los modos HOLD y HALT.

AD0-AD7

Bus de datos/direcciones multiplexado. Los 8 bits menos significativos de las


direcciones de memoria o dispositivos de E/S aparecen en el bus durante el primer
estado un ciclo de mquina. El bus de datos se presenta durante el 2do y 3er ciclo
de reloj.

ALE

Es una salida que indica si el contenido del bus AD0-AD7 corresponde a direcciones o datos. Se activa durante el primer ciclo de reloj de un ciclo de mquina y
permite usar un registro de 8 bits externo al procesador para memorizar la parte
baja del bus de direcciones. Nunca est en tercer estado.

Arquitectura y Operacin del Microprocesador 8085A

S0,S1-IO/M
RD

WR

READY

HOLD

Son salidas que indican si el ciclo de mquina 1 en progreso corresponde a: Bsqueda del cdigo de operacin, escritura en memoria o en puerto de E/S, lectura
en memoria o en puerto de E/S, reconocimiento de interrupcin o estado HALT.
Seal de lectura. Un nivel bajo en RD indica que el P desea leer la memoria o
dispositivo de E/S seleccionado, y que el bus de datos est listo para la transferencia de informacin. Permanece en tercer estado durante el proceso de RESET o en
los modos HOLD y HALT.
Seal de escritura. Un nivel lgico bajo en este terminal indica que el contenido
del bus de datos va a ser escrito en la memoria o dispositivo de E/S seleccionado,
y que el bus de datos est listo para la transferencia de informacin. Permanece en
tercer estado durante el proceso de RESET o en los modos HOLD y HALT.
Si tiene nivel lgico alto durante un ciclo de lectura o escritura, indica que la
memoria o dispositivo de E/S est listo para recibir o transferir datos. Si presenta
nivel bajo, el procesador esperar un nmero entero de ciclos de reloj para que
READY vaya a nivel alto y completar el ciclo de lectura o escritura. Se utiliza
cuando el sistema se comunica con perifricos lentos cuyos tiempos de acceso
sean superiores al periodo del dispositivo microprocesador.
Entrada que indica que otro procesador o controlador solicita el uso de los buses
de direcciones y datos. el CPU abandona el uso de estos buses una vez finalizado
el ciclo de mquina en progreso, poniendo en estado de alta impedancia las siguientes lneas: A8-A15, AD0-AD7, RD , WR , e IO / M .

HLDA

Reconocimiento de HOLD. Salida que indica que el P ha recibido una peticin


de HOLD y que los buses entrarn en tercer estado. HLDA vuelve a nivel bajo
una vez que la solicitud de HOLD es removida.

INTA

Reconocimiento de interrupcin. Despus que una solicitud de interrupcin ha


sido aceptada, esta salida se usa, en lugar de RD, para activar el circuito que genera la interrupcin.

TRAP
SID
SOD

Entrada de interrupcin no enmascarable. Es la interrupcin de ms alta prioridad.


Entrada de datos en serie. Los datos en la entrada SID son cargados en el bit 7 del
acumulador se ejecuta una instruccin RIM.
Salida de datos en serie. Usando la instruccin SIM, el estado del bit 7 del acumulador es cargado en esta salida.

Tabla. 4.1. Tipos de ciclos de mquina y seales de estado


IO/M
0
0
1
1
0
1
Z
Z
Z

113

Ver tabla 4.1.

S1
0
1
0
1
1
1
0
X
X

S0
1
0
1
0
1
1
0
X
X

ESTADO
Escritura en memoria
Lectura de memoria
Escritura a puerto de E/S
Lectura de puerto de E/S
Bsqueda de OP
Reconocimiento de interrupcin
HALT
HOLD
RESET

Arquitectura y Operacin del Microprocesador 8085A

114

4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A


En la seccin 3.1 se trat al P imaginario como una mquina de estado. Tal
discusin revel aspectos de inters sobre el modo como la CPU ejecuta las instrucciones y el tiempo invertido en ejecutar cada una. En el manual del usuario del
8085A se encuentra abundante informacin sobre aspectos relativos a la sincronizacin de las seales del 8085 y sobre el nmero de ciclos de reloj necesarios para procesar cada instruccin. No obstante, el autor estima que una gua sobre el funcionamiento de un P no puede soslayar este tpico, por ser fundamental para comprender
la dinmica del proceso de bsqueda y ejecucin de una instruccin.

Caractersticas del cristal


f = 2fclk
CL 30 pf, CS 7 pf, RS 75
L

Ce

Ci

Red LC de resonancia paralela

f =

1
2 L (C e + C i )

Con Ce 2Ci para un fmin 10 %


20 pf

10 K

Ci

Red RC de resonancia paralela

f = 3 Mhz
Fig. 4.9. Circuitos para fijar la frecuencia del reloj.

Toda operacin realizada por el 8085A durante el procesamiento de una determinada instruccin esta sincronizada por el reloj maestro del sistema, el cual puede
ser generado en el interior del dispositivo o suministrado por una fuente externa. Para
usar la opcin de reloj interno, debe aplicarse a las entrada X1-X2 un cristal de cuarzo, una red RC, o un circuito sintonizado LC. En cualquier caso el valor de la frecuencia de oscilacin interna debe estar comprendido entre 1 MHz y 3.125 MHZ, a
menos que se use la versin 8085A-2, la cual soporta hasta 5 MHz. La figura 4.9
ilustra el modo de conexin para cada una de las posibilidades de uso del generador
interno.
Con el uso de un cristal de cuarzo se obtiene precisin y una gran estabilidad
del valor de la frecuencia del reloj. El oscilador LC funciona en forma adecuada para
frecuencias hasta 5 MHz. Si se elige est opcin, la tolerancia de la frecuencia ser de
10 %, la cual puede considerarse apropiada para algunas aplicaciones. En los casos
donde el P no requiera realizar tareas que involucren medidas o control de tiempo
puede recurrirse a una red RC oscilando a 3 Mhz. En este ltimo caso, el fabricante
no recomienda otro valor de frecuencia.

Arquitectura y Operacin del Microprocesador 8085A

101

4.3.1 El ciclo de instruccin


Al igual que el P del captulo anterior, cuando se aplica potencia al procesador, ste inicia la ejecucin de las instrucciones en la posicin 0000H de la memoria,
esto se logra porque el sistema est provisto de una red para autoreset de la CPU. El
microprocesador buscar la primera instruccin en memoria y la ejecutar, procesando todo el programa hasta su finalizacin. Este modo de operacin se mantiene, a
menos que el P sea forzado a entrar, por una instruccin HLT, en un estado de parada (HALT). Existen otros mtodos para modificar el proceso de ejecucin normal de
un programa, tales como las interrupciones o la peticin de operacin en modo
HOLD.

M1
Estado

T1

T2

M2

T3

T4

T1

T2

M3

T3

T1

T2

M4

T3

T1

T2

T3

CLK

Ciclo de Mquina
Ciclo de Instruccin

Fig. 4.10. Estados y ciclos de mquina del microprocesador.

El tiempo necesario para que el P busque y ejecute una instruccin representa un ciclo de instruccin. Para completar la ejecucin de una instruccin, el 8085A
debe realizar de 1 a 5 operaciones de lectura/escritura a memoria o puerto de E/S.
Cada uno de estos accesos a dispositivos externos a la CPU constituyen un ciclo de
mquina (Mi), los cuales se realizan internamente por medio de una secuencia de microinstrucciones almacenadas en ROM. Cada paso de esta secuencia comprende un
estado (Ti), necesitndose de 3 a 6 estados para completar un ciclo de mquina. Un
estado corresponde a un ciclo del reloj del sistema. En la figura 4.10 se muestra un
ciclo de instruccin de cuatro ciclos de mquina.
Los ciclos de mquina de posible aparicin durante la ejecucin de una instruccin son:

Bsqueda del cdigo de operacin


Lectura de memoria
Escritura de memoria.
Lectura de puerto de E/S.
Escritura en puerto de E/S
Reconocimiento de interrupcin.

Arquitectura y Operacin del Microprocesador 8085A

102

Modo de bus inactivo.

En el transcurso del primer estado cualquier ciclo de mquina, el microprocesador asigna los estados de las seales IO/M, S1, S0, para informar a dispositivos
perifricos el tipo de ciclo de mquina que se inicia. La tabla 4.2 muestra el estado
de las seales de estado y control para cada tipo de ciclo de mquina.
Tabla. 4.2. Ciclos de mquina del 8085A.
SEALES DE ESTADO

IO/M

S1

S0

0
0
0
1
1
1
0
1
Z

1
0
1
0
1
1
1
1
0

1
1
0
1
0
1
0
1
0

SEALES DE CONTROL

CICLO DE MQUINA

Bsqueda del cdigo de operacin


Escritura en memoria
Lectura en memoria
Escritura a puerto de E/S
Lectura de puerto de E/S
Reconocimiento de interrupcin
Bus inactivo
DAD
RST/TRAP
HALT

RD

WR

INTA

0
1
0
1
0
1
1
1
Z

1
0
1
0
1
1
1
1
Z

1
1
1
1
1
0
1
1
1

Durante el ciclo de mquina de bus inactivo no se realizan operaciones con


memoria o puerto de E/S. Este tiempo es usado para operaciones internas con los
registros y la ALU.
El nmero de ciclos de mquina necesarios para completar la ejecucin normal de una instruccin depende del total de operaciones de lectura o escritura que se
realice a la memoria o dispositivo de E/S y de la complejidad de la instruccin. Algunas instrucciones de un byte, como INX rp, requieren un ciclo de mquina nico para
obtener el OC de memoria y completar su ejecucin; mientras que DAD rp, tambin
de un byte, se procesa durante tres ciclos de mquina. En este ltimo caso, los ciclos
M2 y M3, ambos del tipo de bus inactivo, son utilizados por el P para realizar operaciones internas necesarias para completar la ejecucin de la instruccin.
Considerando las instrucciones multybyte, por ejemplo JMP direccin, sta
exige tres lecturas de la memoria o ciclos de mquina para obtener el cdigo de operacin, la direccin de salto y culminar la ejecucin. En cualquier caso, ninguna instruccin del 8085A requiere ms de cinco ciclos de mquina. La fase de bsqueda del
cdigo que identifica a toda instruccin se realiza durante el primer ciclo de mquina
M1. En cada ciclo se invierten tres estados, excepto el ciclo de bsqueda del cdigo
de operacin, el cual utiliza cuatro o seis ciclos de reloj.
Para ilustrar la secuencia de operaciones necesarias para la ejecucin de una
instruccin, considere INX H, la cual produce que el contenido del registro par HL se
incremente en 1. En la figura 4.11 se observa el estado de los registros del P antes
de ejecutar la instruccin. El contenido de IR (21H) corresponde al cdigo de operacin de la ltima instruccin ejecutada, LXI H,20FFH, usada para cargar en HL, el
dato de 16 bits 20FFH.

Arquitectura y Operacin del Microprocesador 8085A

103

Fig. 4.11. Registros del CPU antes de ejecutar la instruccin INX H

Observe, en la figura 4.12, que una vez procesada la instruccin aritmtica, el


registro par contiene el valor 2100H y el registro IR mantiene el cdigo de operacin,23H, de la instruccin INX rp.

Fig. 4.12 Estado interno del CPU despus de la ejecucin de INX H.

Las figuras mostradas son una copia de la salida del programa MICRO 85, el
cual simula en ambiente WINDOWS la operacin de un microcomputador basado en
el P8085. Esta es una herramienta de gran valor didctico y prctico, pero nuestro
inters actual se centra en los detalles de la secuencia de operaciones internas que
conducen a la ejecucin de una instruccin.

Arquitectura y Operacin del Microprocesador 8085A

104

4.3.2 Secuencia de transicin de estados


El diagrama de la figura 4.13 muestra la sucesin de eventos por los cuales
transita el 8085A durante el desarrollo de un ciclo de mquina.
RESET

TR

RESET

RESET
HALT

T1

HALT
READY

T2

THALT

TW
HOLD

READY

HOLD = 1

HOLD
INTVAL

READY

BITHLDA = 1

SI

INTVAL
BITHALT= 0

BITHLDA = 1

no
M1

T3

T4

CC=6

HOLD = 1

no

CC=4

no
no

LTIMO
CICLO
SI

no

SI

BITHLDA = 1

T5

T6
BITHLDA = 1

BITINTA = 1
BITINTE = 0

SI

HOLD

THOLD
HOLD
BITHLDA = 0

INT.
VLIDA
SI
BITINTA = 1
BITINTE = 0

HALT = 1

SI

no

Fig. 4.13 Diagrama de transicin de estados del P 8085A

Para distinguir los modos de operacin del P, se analiza el diagrama de la


figura 4.13 considerando slo aquellos sucesos que modifican la transicin normal de
la ejecucin entre los estados T1 y T6. Debe recordarse que durante un ciclo de mquina el P pasa por tres estados, a menos que se trate del ciclo de bsqueda, el cual
tiene una duracin de cuatro o seis estados.

Arquitectura y Operacin del Microprocesador 8085A

105

Cuando el P sale del estado de reset, despus del arranque del sistema, inicia en el estado T1 el ciclo de mquina M1 de bsqueda del cdigo de operacin. En
este anlisis se considera que M1 es el nico ciclo de mquina y consta de seis estados. En T2 se inspecciona el estado de la entrada READY. Si est en nivel lgico
alto, el P transitar hacia T3 y luego a T4, porque el ciclo en desarrollo es M1. Si por
el contrario READY est en nivel bajo, el 8085A entrar en un estado de espera TW,
donde se mantendr hasta cuando READY vuelva a nivel alto, instante en el cual proceder hasta los estados T3 y T4.
En el estado T4 el P captura el estado de la lnea HOLD y pone a 1 un bit interno (BITHLDA), si la entrada HOLD est en 1. Si HOLD es cero el ciclo de mquina
se completa con los estados T5 y T6. Observe en el diagrama de la figura 4.13, que si
el ciclo M1 consta de 4 estados, la prueba de la lnea HOLD se realiza, mientras el
reloj CLK =1 durante los estados T2 o TW. Esto tambin ocurre si el ciclo en desarrollo no es de bsqueda del cdigo de operacin, en cuyo caso finaliza en T3.
Despus de T6, o de T4 si M1 es de 4 estados, se examina el bit de estado
HLDA, si est en 1 el 8085 entra en un estado THOLD en el prximo pulso de reloj; si
el resultado de la prueba del BITHLDA indica un nivel bajo y el ciclo en progreso es el
ltimo o nico ciclo de mquina de la instruccin, el P verifica si hay interrupciones pendientes. Si no las hay, proceder al estado T1 del ciclo M1 de la prxima instruccin, o del siguiente ciclo, en caso que la instruccin tenga ms de uno. Si existen interrupciones diferidas, se carga uno en el bit de reconocimiento de interrupcin
BITINTA, y se desactivan las interrupciones poniendo a cero el BITINTE de habilitacin
de interrupciones. En el siguiente pulso de reloj, se inicia un ciclo de mquina de
reconocimiento de interrupcin.
Una vez ejecutada la instruccin, cuando el P sale del estado T6 y no existen solicitudes de interrupcin, el 8085 se traslada estado T1 del ciclo de bsqueda
del cdigo de operacin de la siguiente instruccin. En T1 prueba un bit interno que,
cuando est en uno, indica que ltima instruccin ejecutada fue HLT. Si este es el
caso, el diagrama de la figura 4.13 indica que el P entrar en un estado de parada
(HALT). Durante el modo de operacin HALT, el 8085 permanece inactivo y los
terminales AD0-AD7, A8-A15, IO / M, RD y WR se mantienen flotantes.
El 8085A puede abandonar temporalmente THALT cuando la lnea HOLD sea
puesta en alto por un dispositivo externo en solicitud de acceso directo a memoria
(DMA). El P se trasladar al estado THOLD, atender la peticin externa y retornar a
THALT cuando HOLD vuelva cero, sealando que finaliz la operacin de DMA.
Solo por la ocurrencia de un evento externo, el 8085A podr salir del estado
THALT e iniciar la ejecucin de una nueva instruccin. Si se activa una interrupcin
vlida, el P deshabilitar el sistema de interrupciones cargando cero en el BITINTE y
transitar hacia el estado T1del ciclo M1 de la prxima instruccin. En ausencia de
solicitud de interrupcin, slo un comando de RESET permitir que el P abandone

Arquitectura y Operacin del Microprocesador 8085A

106

THALT. En este caso el sistema ser reiniciado en TR y proceder a ejecutar la instruccin en la direccin 0000H de la memoria, cuando la orden de RESET sea levantada.
Con el anlisis previo, basado en el diagrama de estados de la figura 4.13, se
pretende mostrar los modos de operacin del microprocesador 8085A, ms que detallar los sucesos que ocurren durante cada estado por el cual pasa la CPU. Debe quedar claro que si la ltima instruccin ejecutada no fue HLT y si adems ningn perifrico: solicita estados de espera, entrada en el modo de operacin HOLD o interrumpe al P; ste se trasladar en forma libre desde el estado T1 hasta completar la
ejecucin de la instruccin en el estado T4 o T6, si se trata de una instruccin con un
ciclo de mquina.
Si la bsqueda o la ejecucin de la instruccin requieren ms de una acceso a
la memoria, el primer ciclo M1 constar de cuatro o seis estados y los subsiguientes
de slo tres. Tal situacin la describe el diagrama de transicin de la figura 4.14.

RESET

RESET

TR
RESET

T1

T2

T3

T4
T6

T5

Fig. 4.14 Diagrama de transicin de estados del P 8085A sin considerar los estados THALT, THOLD,
TW, ni solicitudes de interrupcin.

Retomando el caso de la instruccin INX H, cuyo ciclo de instruccin est


constituido por un ciclo de mquina de seis estados, a continuacin se detallan todas
las operaciones, tanto externas como internas, realizadas por el 8085A durante cada
estado.
Se supone que la instruccin INX H, de un byte, se ejecuta inmediatamente
despus que el P sale del estado de RESET y que todo ciclo de mquina Mi se inicia
en el estado T1.

Arquitectura y Operacin del Microprocesador 8085A

107

T1
Externas:
Al inicio de T1, el P identifica el ciclo de mquina en progreso emitiendo
las seales, IO / M =0, S0=1 y S1=1. Para indicar a la memoria la direccin de la posicin donde se encuentra la instruccin, transfiere el contenido del contador de programa al buffer de datos/direcciones y al buffer de
direcciones. Simultneamente, el 8085A genera la seal ALE, activa en alto, para informar a dispositivos externos que el contenido del bus AD0-AD7
corresponde a los 8 bits de orden bajo de la direccin.
Internas:
Examina el flip flop de estado HALT.
T2
Externas:
El P activa la seal RD de lectura y coloca en tercer estado las salidas del
buffer de datos/direcciones para permitir que el dispositivo de memoria
transfiera el cdigo de operacin de la instruccin INX H.
Internas
El contador de programa es incrementado. El estado de las entrada READY
es capturado en el flanco de subida de T2, si es bajo se introduce un estado
de espera. La entrada HOLD es examinada y si est en nivel alto se carga
uno en el BITHLDA.
T3
Externas:
El cdigo de operacin de la instruccin es cargado en el registro de instrucciones del P. RD pasa a nivel alto.
Internas:
El cdigo de operacin es pasado al decodificador de instrucciones.
T4
Externas:
Ninguna
Internas:
El cdigo de operacin es interpretado. En este punto el P sabe que en el
prximo pulso debe transitar hacia el estado T5 por tratarse de la instruccin INX H. Si el ciclo de bsqueda de la instruccin en ejecucin tuviese
cuatro estados, al salir de T4, iniciara un nuevo ciclo de mquina en T1.
Durante T4 de instrucciones de 4T, se examina el BITHLDA, si es uno los buses pasan a tercer estado, se activa a uno la salida HLDA y el P entra en
un estado THOLD. Durante T4 de instrucciones de 6T, la entrada HOLD es
muestreada, y si est en uno el BITHLDA es cargado con uno.
T5-6
Externas:
Ninguna
Internas:
El registro HL es incrementado. Se detecta el estado del BITHLDA, si est en
uno el P se traslada al estado THOLD en el prximo pulso de reloj.

La informacin de las operaciones externas realizadas en cada estado del ciclo


de mquina M1 durante el procesamiento de la instruccin INX H, se muestra como
un diagrama de tiempo en la figura 4.15.

Arquitectura y Operacin del Microprocesador 8085A

108

M1
SEAL

T1

T2

T3

T4

T5

T6

M1
T1

CLK
S1,S0

IO / M

IO / M = 0, S 1 = 1, S 0 = 1

A8-A15

PCH

AD0-AD7

PCL

Indeterminado
23H

ALE

RD

Fig. 4.15 Ciclo de instruccin (Ciclo de mquina de bsqueda ) para la instruccin INX H (OC=23H).

En la mayora de las instrucciones del 8085, el ciclo de bsqueda tiene cuatro


estados, de modo que como indica el diagrama de figura 4.14, al final del estado T4 la
transicin ocurre hacia el estado T1 del ciclo de mquina siguiente. Las instrucciones
en las cuales se invierte 6 estados durante el ciclo de bsqueda son: CALL, CALL
condicional, DCX, INX, PCHL, PUSH, SPHL, y RET condicional. La funcin de
cada una se describir oportunamente.
El 8085A requiere seis estados para completar la ejecucin de la instruccin
INX rp. Si la frecuencia de la fundamental del cristal de cuarzo externo es 6.25 MHz,
cada estado interno tendr una duracin de 2000/6.25 ns o 320 ns. Esto significa que
para realizar la operacin de incrementar cualquiera de los registros pares, el 8085A
invierte un tiempo de 6 estados x 320 ns/estados = 1.92 s. La hoja tcnica del P
seala un ciclo de instruccin de 1.3 s. En realidad esta informacin se refiere
tiempo que corresponde a la ejecucin de las instrucciones de cuatro estados, 4x320
ns = 1.28 s. Existen instrucciones de 18 estados, en cuya ejecucin se invierte un
tiempo de 5.76 s. Una versin ms rpida, el 8085A-2 tiene un ciclo de instruccin
de 0.8 s, operando a 5 MHz. Tambin una versin CMOS de OKI semiconductor
liberada en 1998 y con cdigo MSM80C85AHRS, opera a esta velocidad.
4.3.3 El estado de espera.
Si un perifrico de E/S o un circuito de memoria son lentos comparados con
los tiempos estipulados para que el 8085A realice una operacin de lectura o escritura, el dispositivo externo puede optar por solicitar al P que pase a un estado de espera por un nmero entero de periodos de reloj, como indica la figura 4.16.

Arquitectura y Operacin del Microprocesador 8085A

109

RESET

RESET

TR
RESET

T1

T2

READY

READY

TW

READY

T3
T4
Fig. 4.16 Diagrama de transicin de estados del P 8085A considerando el estado TW.
T6

T5

En el caso de la instruccin INX H, la entrada al estado TW no modifica ninguna de las operaciones externas o internas realizadas durante el desarrollo del ciclo
de mquina, excepto que a la salida del estado T2 el P no pasa a T3. En su lugar, al
estar la entrada READY activada en nivel bajo, la transicin ocurre hacia un estado de
espera. Las actividades realizadas por el P durante el estado TW son las siguientes:
T1;
...
T2;
...
TW
Externas:
Las lneas de direcciones, datos, y control mantienen los niveles existentes
durante T2.
Internas
Se muestrea la entrada READY en el flanco de subida del estado TW, si se mantiene en
nivel bajo se introduce otro estado de espera.
T3:
...
T4:
...
T5-6
:...

El diagrama de tiempos de la ejecucin de la instruccin INX H con estado de


espera es el de la figura 4.17.

Arquitectura y Operacin del Microprocesador 8085A

SEAL

T1

T2

M1
T3

110

M1
T4

T5

T6

T1

CLK
S1,S0
IO / M

A8-A15
AD0-AD7

IO / M = 0, S 1 = 1, S 0 = 1

Indeterminado

PCH
PCL

23H

ALE

RD
READY

Fig. 4.17 Ciclo de instruccin (Ciclo de mquina de bsqueda) para INX H (OC=23H) con estado de
espera.

El estado de espera puede ser solicitado por dispositivos de memoria con


tiempo de acceso tacc mayor que el tiempo especificado para que el 8085A lea un dato
vlido, despus que la direccin est estabilizada en las lneas de direcciones. En la
figura 4.18 se muestra un ciclo de lectura de memoria, especificndose el tiempo tAD
(A0-15 valid to valid data in).

Fig. 4.18 Ciclo lectura en memoria.

El tiempo tAD es el lapso del cual dispone un dispositivo externo para cargar un
dato vlido en el bus de datos, despus que el 8085A presenta una direccin vlida
en las lneas de direcciones.
El fabricante especifica un valor de tAD = 575 ns para un cristal de 6.25 MHz.
Si la memoria tiene un tiempo de acceso mayor que tAD, deber solicitar al P que

Arquitectura y Operacin del Microprocesador 8085A

111

agregue uno o ms estados de espera al ciclo de mquina en progreso. El valor de tAD


para cualquier frecuencia del cristal dentro del rango vlido est dado por la expresin (2.5+N).T-225 ns, donde N es el nmero de estados de espera. Por cada estado
de espera, el tiempo tAD tendr un incremento efectivo de 320 ns, a la frecuencia especificada.
Aunque el concepto de estado de espera fue originalmente introducido para
sincronizar la transferencia de datos entre el P y memorias o perifricos de velocidad baja, es posible utilizarlo para detener el programa cada vez que se ejecute una
instruccin o un ciclo de mquina. Estos modos de operacin son de gran utilidad en
la fase de desarrollo de un programa.
4.3.4 El modo de operacin paso a paso
Debido a que el microprocesador 8085A debe operar con un reloj interno con
una frecuencia de al menos 500 KHz, no es posible ejecutar el programa suministrndole pulsos de reloj a una cadencia lo suficientemente lenta como deseara un diseador en la fase de depuracin de un programa. No obstante, si utilizando lgica externa
se introducen n estados de espera durante el ciclo de bsqueda del cdigo de operacin de cada instruccin del programa, este ser ejecutado instruccin por instruccin.
El circuito mostrado en la figura 4.19 permite llevar a la prctica el modo de
operacin de ejecucin de instrucciones por pasos. El funcionamiento del circuito de
paso simple se entiende mejor si se examina el diagrama de tiempos de la figura
4.20. El objetivo es detener la ejecucin de un programa cada vez que se ejecuta una
instruccin, debindose pulsar el interruptor paso de la figura 4.18 para procesar la
instruccin siguiente.
Considere el inicio de la ejecucin de un programa despus de haber reiniciado el P. Una vez que el 8085A sale del estado de RESET, procesa la primera instruccin del programa hasta el estado T2 del ciclo de mquina M1 de bsqueda del
cdigo de operacin. Durante T1 el P identifica el ciclo en progreso emitiendo las
seales de estado IO / M, S0 , y S1 . Por tratarse del ciclo de bsqueda, IO / M estar en
nivel lgico cero, mientras que S0 y S1 estarn en alto, de modo que la salida de la
puerta 74LS11 pasar a nivel alto. En el flanco descendente de la seal ALE, tambin
generada durante el estado T1, se carga uno en U2A y la entrada READY del 8085
conmutar a nivel lgico bajo.
Durante el flanco de subida del ciclo T2, el P examina la lnea READY y en
siguiente pulso de reloj entrar en un estado de espera TW. El P cesar toda actividad por la duracin de N pulsos de reloj, hasta cuando se reciba un comando PS
(CLKU2B) de paso simple.

Arquitectura y Operacin del Microprocesador 8085A

Fig. 4.19. Circuito para paso simple.

126

Arquitectura y Operacin del Microprocesador 8085A

127

Fig. 4.20 Ejecucin de una instruccin de un ciclo de mquina y cuatro estados usando el modo de
paso simple.

En la transicin positiva de PS, el biestable U2B forzar un cero en U2A, ocasionando que la entrada READY regrese a uno. El P realizar la transicin hacia los
estados T3 y T4 de M1 y hacia los estados T1 y T2 de la siguiente instruccin, repitindose el proceso descrito hasta la ejecucin de la ltima instruccin del programa en
proceso.

4.3.5 Ciclos de lectura y escritura en memoria y puertos de E/S.


Para instrucciones de ms de un byte, el 8085A debe realizar al menos un ciclo de mquina adicional al de bsqueda para obtener todos los bytes de la instruccin y completar la ejecucin.
Considere la figura 4.21, donde se presentan los estados y ciclos de mquina
necesarios para ejecutar la instruccin STA direccin. La ejecucin de STA direccin causa que los ocho bits almacenados en el acumulador sean copiados en la posicin de memoria especificada por el operando direccin.
Para procesar esta instruccin, el 8085A deben obtener tres bytes desde la
memoria del sistema: el cdigo de operacin y los dos bytes que identifican la direccin a la cual se debe realizar la transferencia.
Durante el ciclo de mquina M1, el microprocesador interpreta el cdigo de
operacin de la instruccin y detecta que debe realizar otro acceso a la memoria en
bsqueda de la direccin a la cual debe transferirse el contenido del registro acumulador.

Arquitectura y Operacin del Microprocesador 8085A

128

Fig. 4.21 Ciclos de instruccin de STA direccin.

Los ciclos de mquina M2 y M3, ambos del tipo de lectura en memoria, son
necesarios para obtener el operando direccin de STA, mientras que durante M4 se
escribe a memoria el byte en el acumulador. El P invierte cuatro ciclos de mquinas
y un total de trece estados en procesar STA direccin.

Fig. 4.22 Ciclo de instruccin para OUT 01H (OC=32H).

Los ciclos de mquina de lectura o escritura pueden ser de acceso a memoria


o a un puerto de E/S. En el repertorio de instrucciones del 8085A existen slo dos
instrucciones para comunicacin con puertos: IN puerto y OUT puerto. La ejecucin
de la instruccin de dos bytes OUT puerto, carga el contenido del acumulador en el
bus de datos, mientras que en las diecisis lneas de direcciones se duplica el nmero
de ocho bits del operando puerto. Como resultado, la informacin en el registro A es
transferida al dispositivo de salida con la direccin especificada por puerto. En la

Arquitectura y Operacin del Microprocesador 8085A

129

figura 4.22 se muestra el diagrama de tiempos de los ciclo de mquina de bsqueda y


ejecucin de la instruccin OUT 01H. El ciclo de instruccin de OUT puerto lo
constituyen tres ciclos de mquina distintos, el primero de bsqueda de OC, seguido
de un ciclo de lectura en memoria para obtener la direccin del puerto, y finalmente
un ciclo de escritura a memoria para realizar la transferencia hacia el dispositivo externo. Cada ciclo de mquina es identificado por las seales de estado
IO / M, S1 , y S 0 , como puede apreciarse en la figura 4.22. Estas salidas son generadas
al inicio de cada ciclo y mantienen sus niveles durante el transcurso del ciclo de mquina.
Durante el ciclo de bsqueda M1, la direccin en el PC es cargada en las lneas de direcciones y el PC es incrementado para apuntar al siguiente byte de la instruccin. El P activa la lnea de lectura RD y el cdigo de operacin de OUT puerto (32H) es transferido desde la memoria hasta interior del P, donde es decodificado.
A la salida de T4 , el 8085A ha interpretado el OC y est enterado que debe regresar a
la memoria y extraer el nmero del puerto. En el estado T1 de M2, la direccin PC+1
es presentada en el bus de direcciones, se activa de nuevo RD y entonces la memoria
coloca en el bus de datos el nmero del puerto (01H), la cual se almacena en el P.
Finalizado el ciclo de mquina M2, toda la informacin relativa a la instruccin en
proceso est en poder del 8085A y solo resta mover el contenido de A hacia el puerto
01H para completar la ejecucin.
Para que en el ciclo M3 de escritura a puerto se realice la transferencia del byte en el A hacia el exterior del P, es necesario cargar la direccin de 8 bits del puerto
en las lneas de direcciones. Para convertir el nmero del puerto en una direccin de
16 bits se repite la direccin (0101H) y se carga en el bus, como se observa en la figura 4.22. Al inicio del estado T2 de M3, el P activa la seal de escritura WR , y
carga en el bus externo de datos el contenido de A. Durante T3 se completa la transferencia hacia el perifrico identificado por los 8 bits altos o bajos del bus de direcciones.

4.4 LA SECUENCIA DE INICIO DEL 8085


Cuando se suministra potencia a una aplicacin basada en el 8085A, es de importancia vital para el funcionamiento adecuado del sistema, que el soporte fsico de
la mquina garantice que el P entre en un estado inicial definido, una vez que la
tensin de alimentacin alcance su valor mnimo de operacin y que la seal de reloj
se haya estabilizado. La entrada RESET IN del 8085A se usa con el propsito de
llevar a la CPU al estado inicial deseado, despus del proceso de arranque; o para
restituir las condiciones iniciales, si el P est bloqueado o funcionando en situacin
de falla. En ambos casos es necesario aplicar un nivel bajo al terminal, y mantenerlo
por un tiempo mayor o igual a la duracin de tres ciclos del reloj interno.

Arquitectura y Operacin del Microprocesador 8085A

130

Como resultado de la aplicacin de una seal vlida a RESET IN , el P entra en el estado de RESET (TR) y ejecuta una secuencia interna Durante el proceso de
inicio se pone en cero el contador de programa y el registro de instrucciones y se inhabilita el sistema de interrupciones del P. Todos los bits de control y de estado asociados a las lneas HOLD, READY, HLDA, y SOD, y los bits de ciclos de mquina y
estados de mquina, son cargados con cero. La figura 4.23 muestra el diagrama de
tiempos de la secuencia de inicio.
M1

SEAL

T1

M1
T2

TR

TR

TR

TR

T1

CLK

RESET IN

RESET OUT

Fig. 4.23 Secuencia de RESET.

Un comando de RESET finaliza la ejecucin del programa y lleva a tercer estado los buses de direcciones y datos y las lneas de control. Las banderas de condicin de estados y los registros internos del P no son manipulados durante la secuencia de inicio, pero no puede asegurarse que mantengan su contenido despus de una
operacin de RESET.
El nivel de la entrada RESET IN es examinado durante cada pulso del reloj.
Cuando un nivel bajo es detectado, el P, entra en TR y activa a uno la salida
RESET OUT , tal como indica la figura 4.23, para notificar al exterior que el P esta
siendo iniciado. RESET OUT es sincrnica con el reloj CLK y permanece activa
durante un nmero entero de ciclos de reloj. Esta salida puede usarse para el inicio de
circuitos externos del sistema.
Mientras RESET IN permanezca en cero transcurren nuevos TR y se contina
examinando el nivel de RESET IN . Durante este tiempo se ejecuta la secuencia de
inicio. Cuando se detecta el regreso a nivel alto de la lnea RESET IN , la salida
RESET OUT vuelve a cero y el 8085A entra en el estado T1 del ciclo de mquina
M1 de la primera instruccin del programa.
Cuando el P sale del estado TR, el contador de programa contiene la direccin 0000H, de modo que despus de una operacin de RESET la primera instruccin

Arquitectura y Operacin del Microprocesador 8085A

131

ser buscada en esta direccin. Por esta razn conviene que la memoria EPROM de
sistemas basados en el 8085A ocupe la zona inicial del espacio de direcciones del P.
Es usual que esta rea de la memoria contenga la identificacin del sistema, rutinas
de deteccin de fallas y comandos para programar los perifricos y controladores
asociados al sistema.
Es obvio que si el dispositivo no es iniciado durante TR, la naturaleza aleatoria de los estados iniciales alcanzados por registros y flip flops internos afectara en
forma severa el funcionamiento del sistema. La ejecucin de la secuencia de inicio
permite cargar los componentes internos de la CPU con valores lgicos procedentes
para la bsqueda y ejecucin de la primera instruccin del programa.
Existen otras situaciones en las cuales es necesario forzar el 8085A al estado
inicial. Por ejemplo, es comn insertar una instruccin HLT en un programa para
suspender temporalmente la ejecucin en espera de una solicitud de interrupcin por
parte de un perifrico. Si no ocurre la interrupcin, una operacin de RESET es el
nico medio para sacar al P del estado THALT.

6.125 MHz

+5V
8085A

R1
5.1 K

RESET

1N914

C1
10f

Fig. 4.24 Circuito de RESET.

En las versiones CMOS del 8085A, por ejemplo MSM80C85A, existe una
forma de operacin conocida como modo de consumo bajo (power down mode), durante el cual el P mantiene la informacin en memoria, pero se suspenden las actividades internas a tal punto que el consumo de potencia global se reduce en forma apreciable. Reiniciar el P, es una de las opciones para salir del modo de bajo consumo.
Un circuito tpico para generar la seal de RESET, tanto en modo automtico como
manual, se presenta en la figura 4.24.
Al activarse la fuente de +5V, el capacitor C1 aplicar un nivel bajo en la entrada RESET IN , inicindose el estado TR. A continuacin C1 se carga a travs del
resistor R1 con constante de tiempo = R1C1. El P se mantendr en TR hasta cuando

Arquitectura y Operacin del Microprocesador 8085A

132

el voltaje en C1 alcance el valor mnimo reconocido como uno lgico por el circuito
disparador de Schmitt de la entrada RESET IN . Este es VIHR = 2.4 V.
En condiciones normales de operacin, el capacitor C1 mantiene en nivel alto
la entrada de RESET. Si se acciona el pulsador de la figura 2.24, se lleva a nivel bajo
a RESET IN por algunos milisegundos, al final de este periodo se repite el proceso
de carga de C1. El diodo D1 permite la descarga rpida del C1 al desconectarse al
energa.
La duracin de TR es fijada por el valor de, de modo que bastar con seleccionarla para que asegure el mantenimiento de RESET IN en cero por un tiempo
equivalente al menos al de tres ciclos del reloj. No obstante deben tenerse presente
dos condiciones de operacin que obligan a prolongar el tiempo de RESET. Primero,
debe considerarse que el voltaje de alimentacin requiere algunos milisegundos para
alcanzar un nivel del 95% de VCC, o 4.75 V, especificado en la hoja tcnica del dispositivo como voltaje mnimo de operacin.
En segundo lugar, INTEL especifica que no garantiza, por razones concernientes a la tecnologa de fabricacin del dispositivo, el funcionamiento correcto del P
hasta 10 ms despus que la tensin de alimentacin VCC se eleve a 4.75 V . En consecuencia, conviene que durante el arranque se retarde la subida a nivel alto de la entrada RESET IN , por un tiempo mayor a t95 + 10 ms, donde t95 es el tiempo transcurrido
desde la activacin de la fuente de poder hasta cuando VCC = 4.75 V.

Fig. 4.25 Salida de la fuente de poder y seal

RESET IN durante el arranque del P.

La figura 4.25 ilustra la situacin descrita. Una vez estabilizado VCC en 4.75
V, se deja transcurrir un tiempo 10 ms + tR. En el inicio de tR el P funciona en condiciones normales y la lnea RESET IN est en cero. La rutina de inicio se ejecuta y

Arquitectura y Operacin del Microprocesador 8085A

133

el P entrar al ltimo estado TR, durante el cual se detectara un nivel alto en


RESET IN , y el 8085A transitar al ciclo de bsqueda de la primera instruccin del
programa. En realidad no representa un problema crtico la seleccin de la constante
de tiempo. El valor de 51 ms seleccionado para en el circuito de la figura 4.24,
mantiene a RESET IN en cero (por debajo de 2.4 V) durante 33 largos ms, desde el
momento de accionarse el interruptor de la fuente de poder.
Con la descripcin del circuito que hace posible el transito del 8085A hacia el
estado TR, culmina la discusin del tpico de anlisis de tiempos iniciada en este captulo. Los diagramas de tiempos correspondientes a los ciclos de mquina de reconocimiento de interrupcin y operacin en el estado HOLD y HALT, se analizan en
captulos posteriores.

El Microcomputador Bsico

134

El Microcomputador Bsico
Para el diseo de un sistema empotrado basado un microprocesador y destinado resolver un problema especfico de control, es necesario organizar un sistema microcomputador alrededor del P. Los recursos ofrecidos por el 8085A, tales como el
sistema de interrupciones y el canal de comunicacin serie, adems de la versatilidad
de los circuitos de soporte, distinguen al dispositivo como una CPU apropiada para
uso en aplicaciones de control susceptibles de realizar con mquinas de 8 bits.
Debido a que el 8085A es un microprocesador, no tiene memoria, puertos de
E/S, ni temporizadores internos. En un sistema de cmputo basado en el 8085, todas
estas funciones deben ser realizadas por circuitos externos conectados a los buses del
microprocesador.
El 8085A puede usarse para construir un microcomputador usando los circuitos de soporte del dispositivo, o interconectando el microprocesador a circuitos de
memoria y puertos de E/S estndares. La seleccin del tipo de componente a utilizar
est determinada por la capacidad de la memoria y el nmero de puertos de E/S requeridos por la aplicacin.

5.1 SISTEMA MCS-85 MNIMO


Para establecer los componentes mnimos necesarios para construir un sistema
de control tpico basado en P, considere el problema simple de supervisar los niveles
de temperatura en ocho puntos de un proceso usando termopares como sensores. El
sistema debe permitir que los valores de temperatura adquiridos, as como las eventuales condiciones de alarma sean presentados en la pantalla de un terminal o sean
transmitidos por el canal de comunicacin serie hacia un microcomputador de mayor
capacidad. Un diagrama de bloques de sistema se muestra en la figura 5.1

El Microcomputador Bsico

Vi

MUX

135

S/H

S2 S1 S0

D0-D7

CAD
S/H

start

eoc

sensores

interrupcin
salida
analgica

CDA

D0-D7

8085A

salida serie

entrada serie

PC

Fig. 5.1 Sistema de adquisicin de datos.

La adquisicin, medicin y control de temperatura es una aplicacin susceptible de ser realizada con un P de ocho bits. En otros casos, el diseador debe asegurarse que la capacidad de procesamiento y el espacio de memoria del sistema son
recursos suficientes para satisfacer las exigencias impuestas por el problema de control. De igual forma debe garantizarse que toda la restriccin de tiempo inherente a la
adquisicin de los datos y control de la planta puede ser superada por el P.
Cada sensor del sistema de adquisicin de datos de la figura 5.1 proporciona
como seal de salida una tensin analgica, cuya magnitud es una funcin no lineal
del valor de la temperatura en el punto de prueba. El multiplexor analgico (MUX)
selecciona una de las seales para ser enviada al convertidor analgico digital (CAD),
despus de ser procesada por el amplificador de instrumentacin (A) y el circuito de
muestreo y mantenimiento (S/H). Por medio de las entradas de seleccin S0-S2 del
MUX se determina cual de las tensiones de entrada va a ser muestreada y convertida
a digital.
El amplificador incrementa la amplitud y reduce el nivel de ruido del voltaje
anlogo. El circuito S/H muestrea la tensin de entrada y la mantiene constante durante el tiempo que dure la conversin. El proceso de conversin se inicia cuando es
activada la lnea START del CAD, y el fin de la conversin lo seala el CAD por medio de la salida EOC. El valor digital presente a la entrada del convertidor digital analgico (CDA) es convertido en una tensin anloga y entregado al proceso. En caso
que sea necesario disponer de otras salidas anlogas, debe usarse un circuito demultiplexor anlogo.
Los circuitos de CAD y CDA son conectados al 8085A, por medio de puertos
de E/S de direccin determinada. Como puede observarse en el diagrama de bloques
del sistema, el valor digital equivalente al voltaje anlogo desconocido es cargado en

El Microcomputador Bsico

136

el P. Este lo convertir a unidades de temperatura y posteriormente lo transmitir,


por el canal de comunicacin serie, hacia un terminal o computador central. El CDA,
conectado a un puerto de salida, recibe un valor digital desde el P y lo enva al proceso en forma de una tensin anloga.
El 8085A presenta en las entradas S0-S2 del multiplexor, el nmero del canal,
para seleccionar cual de las ocho seales va a ser convertida. Simultneamente ordena
al circuito S/H que inicie el muestreo de la seal. Transcurrido un tiempo igual al retardo de los circuitos MUX, A, y S/H, el P detendr el proceso de muestreo poniendo al S/H en el modo de mantenimiento y activar la seal START dando lugar al
inicio de la conversin.
Una vez culminada la conversin, el CAD usar la salida EOC para interrumpir al procesador. Como respuesta, el P cargar en memoria el byte resultado de la
conversin y proceder a procesar la siguiente entrada. Una vez adquiridas las ocho
seales de entradas son convertidas en unidades de temperatura y enviadas al canal
serie, reinicindose el proceso.
Para conectar la seccin de adquisicin de datos al P, son necesarios tres
puertos, uno de entrada (Puerto A) y dos de salida (Puertos B y C). La salida del CAD
se acopla al puerto A, el puerto B entrega un valor digital a las entradas de CDA y
cinco lneas del puerto C son utilizadas por el P para el control del proceso de adquisicin. El la figura 5.2 se observa que las lneas PC4- PC2 se usan para la seleccin
del canal, mientras que PC1 controla el S/H y PC0 suministra la seal de inicio de conversin.
D0-D7: CAD
PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

Puerto A: Entrada

PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

Puerto B: Salida
D0-D7: CDA

PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0


S2

Puerto C: Salida

S1 S0 S/H START

Fig. 5.2 Funciones de las lneas de los puertos de E/S.

Las funciones de memoria y puertos necesarios para el sistema de supervisin


pueden ser suplidas por los circuitos de soporte del 8085A: el 8155/56 integra en el
encapsulado 256 bytes de memoria RWM, 2 puertos programables de 8 bits, uno de 6
bits y un contador/temporizador programable de 14 bits. El 8355/8755 provee 2 Kbytes de memoria ROM/EPROM y dos puertos 8 bits.

El Microcomputador Bsico

137

En ambos dispositivos est integrado el registro de 8 bits necesario para separar los datos y direcciones del bus multiplexado. La figura 5.3 presenta el smbolo
lgico de ambos circuitos.

Fig. 5.3 Dispositivos compatibles directamente con el 8085A.

No se requieren componentes LSI adicionales para construir la tarjeta necesaria para la aplicacin. Una vez que la tensin de entrada desconocida es convertida a
digital, el CAD activar la salida EOC de fin de conversin. Esta seal conecta a una
de las entradas de interrupcin del 8085A. Pueden usarse cualquiera de las lneas
RST 5.5, RST 6.5, RST 7.5 o TRAP.
El uso del sistema de interrupciones del P para detectar el final del proceso
de conversin de una muestra de la tensin de entrada, simplifica el diseo del sistema. Cuando un perifrico aplica un nivel alto a cualquiera de estas entradas una vez
que el P acepta la solicitud, el contenido del contador de programa es almacenado
en la pila y el control del programa es transferido a una posicin determinada de la
memoria.
El programador debe tener la previsin que la primera la instruccin de la rutina que carga en memoria y procesa el dato adquirido, resida en la direccin del salto. Lo usual es que la direccin del vector de interrupcin contenga una instruccin de
salto incondicional al inicio de la rutina de servicio.
El problema propone el uso del canal serie del 8085A para que el microprocesador se comunique con un microcomputador de mayor capacidad o con un terminal remoto. La adquisicin y procesamiento local usando grupos de microcomputadores de 8 bits interconectados a un computador central es una estructura muy usada en
control de procesos. Para establecer la comunicacin se utilizan la entrada SID y salida SOD del canal serie del P. En el 8085A se integra un circuito transmisor/receptor

El Microcomputador Bsico

138

asincrnico primitivo, el cual ser programado apropiadamente para establecer el enlace.


Si el microcomputador o terminal est separado del sistema de adquisicin por
una distancia superior a 2 metros, la transferencia no puede ser realizada conectando
directamente el transmisor al receptor. A esta distancia, los niveles lgicos de 0 y
+5V sufrirn un deterioro severo debido a la atenuacin introducida por el cable, el
ancho de banda del canal y la velocidad de transmisin.
Una de las soluciones a este problema es utilizar la interfase RS232C, la cual
consiste en elevar los niveles lgicos desde 0 y 5 V a valores superiores, uno positivo
para representar el cero lgico y otro negativo para el uno lgico.
Computador

8085A

SID

1 2.0 V
0 0.8 V

0 = +V
1 = -V

1 2.0 V
0 0.8 V

SOD

Fig. 5.3 Interconexin RS232C

Los circuitos integrados LM1488 y LM1489 pueden usarse como dispositivos


de interconexin entre el P y el canal RS232C. El transmisor (LM1488) requiere
alimentacin de 12V. Si no se dispone de fuentes de doble polaridad, debe utilizarse
el dispositivo MAX-232, este circuito adems de realizar el cambio de tensin de las
seales de transmisin y recepcin, tambin permite el uso de una fuente nica al
elevar el voltaje de la fuente desde +5 V hasta 12V.
Usando los circuitos de soporte del 8085A, se disea un sistema mnimo para
el control de la adquisicin y presentacin de datos. El acoplamiento de la entrada y
salida serie al canal RS232C se realiza por medio de circuitos integrados de propsito
especfico. Para la recepcin de datos se usa el LM1489 y para la transmisin, el
LM1489.

El Microcomputador Bsico

139

Fig. 5.4 Sistema microcomputador mnimo con circuitos de la familia MCS-85

El diagrama elctrico final de la tarjeta es el de la figura 5.4. La seleccin de


los componentes y el cableado de la seccin anloga del sistema de adquisicin de la
figura 5.1, se realizar en un captulo posterior. Por ahora observe que el P configurado ofrece recursos suficientes para satisfacer las exigencias del sistema de adquisicin.
El programa de la aplicacin reside en los 2 Kbytes de memoria EPROM de
U2, mientras que las lneas de salida del CAD se conectan al puerto A del componente
U3. Al puerto B del mismo componente se acopla el CDA y por las lneas PC0-PC4 del
puerto C de U3 se generan las seales de seleccin del canal del multiplexor analgico, la entrada de control del circuito de muestreo y mantenimiento y la seal de inicio
de conversin.
Las funciones asignadas a los puertos determinan que el puerto A del 8156
debe ser programado como entrada y los puertos B y C como salidas. La programacin se realiza cargando un patrn de bits especfico en el registro interno de comandos, mostrado en la figura 5.2, del 8156. Los puertos de U2 y el temporizador/contador de U3 no se usan en esta aplicacin. La salida de fin de conversin se
aplica a la lnea de interrupcin RST 6.5 y la conexin de los circuitos de interconexin RS232C es directa, solo se requiere que la fuente de poder del sistema tenga
tensiones de salida de 12 V.

El Microcomputador Bsico

140

Las entradas de interrupcin no usadas son llevadas a nivel bajo al igual que le
entrada HOLD. Debido a que el tiempo de acceso de la RAM del 8156 y de la
EPROM del 8755 es de 400ns, no se requieren estados de espera por lo cual se mantiene la entrada READY en nivel alto. El fabricante del 8085A recomienda llevar las
salidas WR y RD a +5V usando resistores, para evitar que cuando estn en tercer
estado se produzcan selecciones falsas de dispositivos. Esto no lo muestra el diagrama de la figura 5.4. Aunque el modo de operacin y de programacin del 8155/56 y
del 8355/8755 se discute en el capitulo 9, en esta seccin conviene establecer como
est distribuido el espacio de memoria del 8085A, segn establece la interconexin de
los componentes en el diagrama elctrico de la figura 5.4.

Como se explic con anterioridad, durante una operacin de escritura o lectura en memoria o puerto de E/S, el P identifica la posicin de memoria o el puerto en
acceso colocando su direccin sobre el bus de direcciones y activa la salida
WR o RD . Segn el tipo de operacin en progreso, escribir un dato sobre el bus
AD0-AD7 o leer el contenido del mismo. El nivel lgico de la salida IO / M determina si el acceso se realiza a una direccin de memoria o a un puerto de E/S. El P
completar la lectura o escritura con independencia que el origen o destino de la informacin sea el deseado por el programador.
Cuando varios circuitos de memoria son conectados al sistema, cada dispositivo debe ser habilitado para una zona particular del espacio de memoria. El mecanismo usado para decodificar la memoria debe asegurar que no exista la posibilidad
que dos posiciones de memoria sean seleccionadas simultneamente. En el caso del
sistema de supervisin y presentacin de temperaturas, se tienen dos reas de memoria fsica: 2048 bytes correspondientes a la EPROM del circuito 8755 y 256 bytes de
la seccin de memoria RWM del 8156.
La seleccin de los circuitos de memoria y puertos de E/S se realiza usando el
mtodo de seleccin lineal. Para situar los 2 Kbytes de la EPROM en el espacio de
memoria de 64K del 8085A, se conecta la lnea de direccin A11 a la entrada habilitacin CE1 mientras que la otra entrada de seleccin, CE 2 es forzada a uno lgico.
Debido a que el circuito 8755 es habilitado cuando CE1 = 0 y CE 2 = 1 , el 8755 ser
seleccionado cada vez que la lnea A11 est en nivel bajo, como seala la tabla 5.1 de
decodificacin de direcciones.
El proceso de adquisicin se inicia una vez que el C sale del estado de RESET, despus de aplicarse potencia a la tarjeta. Debido a que el programa reside en la
EPROM, cuando una direccin de los dos primeros Kbytes (0000H-07FFH) del espacio de direcciones se presente el bus, debe habilitarse el 8355. Con el esquema seleccionado se satisface tal condicin, pero en realidad el 8355 ser seleccionado cada
vez que el bus contenga una direccin comprendida en los rangos 0-2K, 4-6K, 8-10K,
12-14K, 16-18K,...,60K-62K, lo cual representa 16 bloques de 2Kbytes, para un total
de 32 K.

El Microcomputador Bsico

141

Tabla. 5.1 Espacio de memoria ocupado por las memorias EPROM y RWM
A15 A14 A13 A12 A11 A10 A9 A8

EPROM
(2K)

RWM
(256 bytes)

A7 A6 A5 A4

A3 A2 A1 A0

x
.

x
.

x
.

x
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

1
.

Para cualquier direccin en esta zona, la lnea A11 est en cero. Observe que
esto lo determina la condicin indiferente de las lneas A12-A15. Si asignamos un nivel
bajo a estas lneas y se tiene la precaucin que ningn otro dispositivo ocupe las direcciones sealadas se puede programar el C suponiendo que el rango 0000H07FFH lo ocupa la EPROM.
El 8155 es seleccionado cuando la lnea A11 est en nivel alto, lo cual ocurre
para los restantes 32K del espacio total de memoria. Considerando de nuevo como
cero la condicin indiferente, la zona de memoria donde est situada la RWM est
comprendida desde 0800H hasta 08FFH. Como el C est dedicado a una aplicacin
especfica, es suficiente con garantizar que no existir conflicto entre las posiciones
de memoria de los dos circuitos existentes.
Al igual que ocurre con la seccin de la memoria EPROM, los puertos de E/S
del 8755 solo podrn se seleccionados cuando la lnea de direcciones A11 est en nivel bajo. El circuito 8755 tiene cuatro registros internos: el puerto A, el puerto B y
dos registros de programacin, uno para cada puerto. La direccin particular de los
puertos la especifica las lneas del bus multiplexado AD0-AD1. En la tabla 5.2 se presenta la asignacin de direcciones para los registros de E/S del 8755.
Tabla. 5.2 Direcciones de puertos de E/S para el 8755
Direccin del Puerto de E/S
AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
x
x
x
x
x
x 0
0
x
x
x
x
x
x 0
1
x
x
x
x
x
x 1
0
x
x
x
x
x
x 1
1

Registro selccionado
Puerto A de E/S
Puerto B de E/S
Registro de direccin de dato del puerto A
Registro de direccin de dato del puerto B

El Microcomputador Bsico

142

El estado lgico de la seal IO / M distingue cuando se solicita acceso a una


posicin de memoria o a un puerto. El uso de IO / M tambin determina que la lectura o escritura en un registro de E/S solo pueda realizarse mediante la ejecucin de
una instruccin IN puerto o OUT puerto. Cuando se ejecuta una de estas instrucciones, el nmero del puerto es duplicado sobre las 16 lneas de direcciones. Debido a
que la lnea de direccin A11 debe estar en cero, el operando puerto de IN y OUT debe
ser especificado como indica la figura 5.5. El estado lgico bajo del bit 3 del nmero
del puerto, garantiza que A11 estar en cero.
x

AD1 AD0

Fig. 5.5 Patrn de bits del nmero de puerto para el 8755

El circuito 8155 tiene seis registros internos, los cuales son tratados como
puertos de E/S. Cuatro de stos corresponden a la seccin de E/S del dispositivo: el
registro de comando para programar los puertos, los puertos de E/S: A, B y C, y dos
registros para programar el temporizador. Para el acceso a uno de estos registros la
salida A11 deber estar en uno lgico y la direccin particular de los puertos la determina las lneas AD0-AD2, tal como indica la figura 5.6.
x

AD2 AD1 AD0

Fig. 5.6 Patrn de bits del nmero de puerto para el 8156

La tabla de asignacin de direcciones para la seccin de E/S del 8155 se ofrece en la tabla 5.3.
Tabla. 5.3 Direcciones de puertos de E/S para el 8156

Considerando una vez ms como cero, las condiciones especificadas como indiferente en los patrones de bits de las figuras 5.5 y 5.6, se obtienen para los puertos
las direcciones especificadas por la tabla 5.4. Aunque los puertos de E/S del 8755 no
se usan en el sistema de adquisicin, sus direcciones tambin se indican.

El Microcomputador Bsico

143

Tabla. 5.4 Direcciones de los puertos de E/S


Puerto A
00H
8755
Puerto B
01H
DDR A
02H
DDR B
03H
RC/S
08H
8156
Puerto A
09H
Puerto B
0AH
Puerto C
0BH
T/C bajo
0CH
T/C alto
0DH

Se ha mostrado que el diseo un C usando el 8085A y sus circuitos de soporte, es una tarea sencilla. En realidad el trabajo se limita a conectar terminal a terminal
los 3 dispositivos. Si una aplicacin exige mayores recursos que los ofrecidos por el
sistema mnimo, pueden usarse circuitos 8755 y 8156 adicionales y utilizar las lneas
de direcciones A12 hasta A15 para seleccionarlos.
Cuando se usa el mtodo de seleccin lineal para habilitar varios dispositivos,
las reas de memoria asignadas a cada uno de los chips no corresponden a bloques
contiguos, quedando como responsabilidad del programador reconocer las reas vlidas de memoria. Otra desventaja de la seleccin lineal es que limita el nmero de
circuitos posibles de conectar al P, debido a secciona por la mitad el espacio disponible de memoria por cada lnea de direccin usada como seal de habilitacin. Este
obstculo puede ser superado usando circuitos decodificadores, como sugiere la figura 5.7. El dispositivo 8155 cumple funciones iguales que el 8156, exceptuando el
hecho que el circuito es seleccionado aplicando un nivel bajo en la entrada de habilitacin CE .
Otra posibilidad de expandir el sistema MCS-85 mnimo se muestra en la figura 5.8. El uso de los circuitos de soporte del 8085A se recomienda para sistemas
que requieran poca memoria. En la medida que se incrementen las exigencias de
memoria o de puertos de entrada y salida, debern conectarse componentes adicionales al microprocesador. Para aplicaciones que exijan capacidad de memoria mediana
o grande, puede ser preferible apelar al uso de dispositivos estndares. En tal situacin deber usarse un registro externo de 8 bits para demultiplexar el bus de direcciones /datos.

5.2 INTERCONEXIN DEL 8085A CON DISPOSITIVOS CONVENCIONALES.


Los circuitos de soporte del 8085 simplifican en forma notable el diseo de un
sistema C debido a que estn diseados especficamente para conectarse al bus multiplexado del P. Cuando se considere necesario, es posible acoplar circuitos convencionales de memoria o puertos al 8085A siempre que se separen las ocho lneas me-

El Microcomputador Bsico

144

nos significativas de las direcciones del bus AD0-AD7. Una vez que se dispone de las
16 lneas de direcciones, cualquiera de las tcnicas de seleccin expuestas en la seccin anterior pueden ser utilizadas para la habilitacin de componentes estndar.

Fig. 5.7 Sistema expandido con seleccin usando decodificadores 3 a 8

El Microcomputador Bsico

145

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto C

(6)

Puerto A

(8)

Puerto B

(8)

Puerto C

(6)

Fig. 5.8 Sistema MCS-5 expandido.

El 8085A no tiene seales de control individuales para indicar a circuitos de


memoria o puertos que se dispone a iniciar una operacin de lectura o escritura. Estas
funciones las cumple en conjunto las seales IO / M , WR y RD .
A0-A15
A8-A15
A0-A7

8085A
ALE

LACTH

EPROM

RWM

Puerto
de
Entrada

Puerto
de
Salida

D0-AD7
RD
WR

MRD

MWR

Decodificador

IO/M

Fig. 5.9 Sistema 8085 usando componentes externos convencionales

IORD

IOWR

El Microcomputador Bsico

146

Para el control del acceso a memoria y puertos convencionales, estas salidas


pueden combinarse para obtener seales de lectura y escritura correspondientes. En el
diagrama de bloques de la figura 5.9 se observa el modo de conexin del 8085A a
dispositivos externos estndar, destacndose el registro latch y una lgica para generar las salidas de lectura/escritura.
La demultiplexin del bus AD0-AD7 se realiza usando la salida ALE como seal de reloj de un registro convencional de 8 bits.

74LS373
ALE

8085A
AD0-AD7

Q0 - Q7

A0-A7

D0-D7

OC

D0-D7

Fig. 5.10 Demultiplexin del bus de direcciones/datos del 8085A.

Es conocido por el lector que la salida ALE es activada a nivel alto al inicio
del estado T1 de todo ciclo de mquina, como medio de notificar a dispositivos externos que el bus AD0-AD7 contiene informacin correspondiente a direcciones. De modo que se puede por medio del lacth capturar los ocho bits menos significativos de la
direccin generada por el P para que estn disponibles durante la duracin de todo el
ciclo de mquina.
En la figura 5.10 se muestran las conexiones necesarias para realizar la demultiplexin del bus. Las salidas Q0-Q7 del 74LS373 siguen el valor de las entradas correspondientes AD0-AD7, cuando la lnea G est en nivel lgico alto, y capturan el
ltimo valor de las entradas cuando G vuelve a cero. Conectando la salida ALE del P
a la entrada G del registro se garantiza la retencin de los ocho bits de menor peso de
la direccin.
Para generar las salidas de control para la lectura y escritura en dispositivos
convencionales de memoria y de puertos de E/S, se utiliza la lgica discreta de la
figura 5.11.

El Microcomputador Bsico

147

Fig. 5.11 Decodificador de seales de lectura y escritura en memoria y E/S

El diagrama elctrico del P 8085A, listo para ser interconectado a circuitos


de memoria o de puertos de E/S convencionales se presenta en la figura 5.12. Debido
a que el objetivo es disear un sistema mnimo basado en el microprocesador 8085A
pero que use componentes externos estndar, y sea capaz de realizar las tareas de control del sistema de supervisin de temperatura de la figura 5.1, se deben seleccionar
los dispositivos de memoria y de E/S a utilizar. A continuacin se procede a seleccionar la memoria de programa y de datos y el circuito integrado de puertos de E/S.

5.2.1 La memoria de programa

Para almacenar el programa de control del sistema de supervisin de temperatura, se requiere un circuito de memoria programable, que pueda ser eventualmente
borrada. La capacidad de almacenamiento del dispositivo debe ser de 2048 bytes y
con tiempo de acceso inferior a 575 ns. Las memorias EPROM son un tipo de ROM
que pueden ser programadas y borradas por el usuario.
En el mercado electrnico existe una extensa variedad de memorias EPROM,
disponibles para satisfacer exigencias de cualquiera aplicacin. Las EPROM ms
usadas en aplicaciones con Ps son la 2716, 2732, 2764, 27128, 27256,27512 y
271024 con capacidades desde 2Kbytes hasta 128 Kbytes y con velocidades desde
450 ns a 45 ns.
Para sustituir la seccin de memoria EPROM del dispositivo 8755 se elige el
circuito integrado con cdigo 2716, el cual es una EPROM con una capacidad de 2
Kbytes y un tiempo de acceso igual a 450 ns, para la versin ms lenta. El dispositivo
se presenta en un encapsulado de 24 pines y en la figura 5.13 se presenta la distribucin de terminales del circuito.

El Microcomputador Bsico

Fig. 5.12 Unidad de proceso central de un microcomputador clsico

148

El Microcomputador Bsico

149

A7

VCC

A6
A5

A8
A9

A4

VPP

A3

OE

A2

2716

A1

2K x 8

A10
CS/ PGM

A0

O7

O0

O6

O1

O5

A0 A10
O0 - O7

O2

O4

OE

Direcciones
Salida de Datos
Habilitar Salida

GND

O3

CS / PGM

Seleccin de chip/ Programar

Fig. 5.13 Distribucin de terminales de la EPROM 2716.

El circuito integrado cdigo 2716 tiene 11 lneas de direcciones (A0-A10) para


brindar acceso a las 2048 posiciones de la memoria, y 8 salidas de datos D0-D7. El
modo de operacin lo establece las 2 entradas de control ( CS y OE ), de acuerdo con lo
indicado en la tabla 5.5.
Tabla. 5.5 Modos de operacin de la EPROM 2716.

MODO
Deshabilitar
Lectura
Espera

OE
VIH
VIL
x

CS / PGM

VPP

VCC

SALIDAS

x
VIL
VIH

+5
+5
+5

+5
+5
+5

DATOSsalida

+25

+5

DATOSentrada

+25
+25

+5
+5

DATOSsalida

Z
Z

VIH

Programar

VIH

Verificar Programa
Inhibir Programa

VIL
VIH

VIL : TTLbajo 0.8 Vmx

VIL

VIL
VIL

VIH : TTLalto 2.0 Vmn

Z: Alta Impedancia

La EPROM tiene dos entradas de alimentacin: VCC y Vpp. En funcionamiento


normal, ambos terminales se conectan a +5 V. Durante el proceso de programacin de
la memoria, el terminal Vpp debe estar a +25 V. Como ilustra la figura 5.14, para obtener en las salidas D0-D7 el contenido de una posicin de la 2716, los terminales de
habilitacin de salida OE y de seleccin de chip CS deben estar en estado cero. Un

El Microcomputador Bsico

150

nivel alto en cualquiera de estas entradas colocan las salidas de los buffers en estado
de alta impedancia.

Fig. 5.14 Estructura interna de la EPROM.

La entrada de seleccin de chip, CS , cumple una funcin doble de control.


Adems del uso tpico de seleccionar el circuito entre un grupo de dispositivos de
memoria con salidas conectadas a un bus comn, la lnea CS permite controlar la
potencia consumida por la 2716. Cuando CS es llevada al nivel lgico uno, y con
independencia del nivel de la entrada de habilitacin de salida OE , se remueve la
alimentacin de los componentes internos de la memoria, quedando sin energa el
decodificador de fila, los buffers de salida y el multiplexor de columna. Este modo de
operacin se conoce como de consumo bajo o espera, y est caracterizado por un
gasto total de potencia que corresponde a una fraccin (25%) de la necesaria para la
operacin normal del chip.
Un ciclo de lectura de la 2716 se muestra en la figura 5.15. La entrada CS se
usa para seleccionar la memoria y OE para habilitar la presentacin de los datos en
los terminales de salida. El proceso de lectura de la EPROM se inicia con la aplicacin de una direccin vlida a las lneas A0-A10, a continuacin se selecciona la memoria y se habilitan los buffers de salida llevando a cero las entradas CS y OE , respectivamente. Transcurrido el tiempo de acceso, el dato almacenado en la posicin
escogida se presenta en las lneas O0-O7.

El Microcomputador Bsico

151

DIRECCIONES

Direccin valida

CS

tCE

OE

tOE
tOF

tACC
SALIDAS

Datos validos

Fig. 5.15 Ciclo de lectura de la EPROM 2716

Caractersticas AC
tACC

Tiempo de acceso (Access Time)


450 ns mximo
Espacio de tiempo transcurrido entre la aplicacin de una direccin estable y la aparicin de
los datos en la salida de la memoria.

tCE

Tiempo de habilitacin de salida (Output Delay from CS )


450 ns mximo
Retardo entre la aplicacin de la seal de seleccin de chip CS y la salida de datos vlidos

tOE

Output enable to output float


120 ns mximo
Tiempo que transcurre desde la activacin de la entrada OE hasta que existe un dato de
salida vlido.

tDF

Output enable high to output float


100 ns mximo
Tiempo desde la supresin de la entrada OE hasta cuando las salidas van a estado de alta
impedancia.

Como se observa en la figura 5.16, se usa seleccin lineal para situar la 2716
en la misma rea de memoria que la ocupada por la seccin de EPROM del 8755 del
C de la figura 5.4. La lnea de direccin A11 se conecta a CS y la salida de lectura
en memoria, MRD , se aplica a la entrada de habilitacin de salidas OE .
5.2.2 La memoria de datos

Para suplir la zona de memoria voltil se usa una RWM esttica 6116 de 2
Kbytes, en lugar de los 256 bytes del 8156.

El Microcomputador Bsico

152

Fig. 5.16 EPROM 2716 decodificada para el rango 0000H-07FFH

A7

A6
A5
A4
A3
A2
A1
A0
D0
D1
D2

6116
2K x 8

GND

VCC
A8
A9
WE
OE
A10
CS
D7
D6
D5
D4
D3

A0 -A10
D0 - D7
CS

Direcciones
E/S de Datos
Seleccionar Chip

OE

Habilitar Salida

WE

Habilitar Escritura

Fig. 5.17 Distribucin de terminales de la RWM 6116.

Tabla. 5.6 Modos de operacin de la RWM 6116.

MODO
Lectura
Escritura
Deshabilitar
Espera

WE
VIH
VIL
VIH
x

CS
VIL
VIL
x
VIH

OE
VIL
x
VIH
x

D0 D7
DATOSsalida
DATOSentrada

Z
Z

El Microcomputador Bsico

153

La memoria esttica 6116 dispone de 11 lneas de direcciones A0-A10 y 8 terminales para E/S de datos, D0-D7. Las lneas de control CS y OE funcionan en forma
idntica que en la EPROM 2716, mientras que la entrada WE es la seal de escritura
de datos. El tiempo de acceso de la versin ms lenta del dispositivo es de 250 ns. El
ciclo de lectura de una celda de memoria de la RWM es similar al descrito para la
EPROM. Para explicar como se almacenan los datos en la memoria, se muestra en la
figura 5.18 el diagrama de tiempos de un ciclo de escritura.
Una operacin de escritura se inicia con la aplicacin en las lneas A0-A10 de
direccin de la posicin donde se almacenar el dato, la cual debe permanecer estable
en A0-A10 durante un tiempo tAS, antes de la activacin de las seales de control CS y
WE , para permitir que la memoria decodifique la nueva direccin. Si esta restriccin
es violada, el dato en D0-D7 se almacena en una posicin con direccin imposible de
predecir.
tWC
DIRECCIN

tCSW
CS

tAS

tAH

tWP

WE

tDS

tDH

D0 - D7

Fig. 5.18 Ciclo de escritura de la RWM 6116

Cuando las entradas de seleccin y escritura van a nivel alto, la direccin debe
mantenerse vlida durante un tiempo tAH. La duracin del pulso bajo de la entrada de
seleccin de chip CS debe ser al menos tCSW para asegurar la seleccin de la celda
mientras que el ancho del pulso de escritura WE debe ser mayor o igual a tWP para
garantizar que la informacin se coloca en la direccin seleccionada .
Al colocarse el dato en los terminales de entrada, debe permanecer estable
cuando menos un tiempo tDS antes, y un intervalo tDH despus, que las entradas de
seleccin de chip CS y habilitacin de escritura WE sean removidas. La duracin del
ciclo de escritura es tWC

El Microcomputador Bsico

154

Caractersticas AC
tAS

Tiempo de preparacin de direcciones


(Address Setup Time Before Write)
Intervalo durante el cual todas las lneas de direcciones deben mantenerse estables antes
que las entradas WE y CS ( ambas en cero lgico) sean aplicadas a la memoria.

tAH

Tiempo de retencin de direcciones


(Address Hold Time After Write)
Lapso durante el cual la direccin debe permanecer vlida despus de desactivar a WE y
CS .

tCSW

Tiempo de preparacin de CS .
(Chip Select Setup Before End of Write)
Duracin mnima de la entrada de seleccin de chip.

tWP

Ancho del pulso de escritura


Ancho mnimo del pulso WE .

tDS

Tiempo de preparacin del dato


(Data Setup Time Before End of Write)
Espacio de tiempo que deben permanecer estables los datos en la entrada de la memoria
antes de la desactivacin de las entradas de seleccin y escritura.

tDH

Tiempo de retencin del dato


(Data Hold Time After End of Write)
Lapso que debe mantenerse vlido el dato a la entrada de la memoria despus de la remocin de las entradas de seleccin y escritura.

(Write Pulse Width)

Las especificaciones tcnicas de las memorias SRWM distinguen entre dos


modos de ciclo de escritura:
1. Escritura bajo control de WE
"
"
"
" CS .
2.

El diagrama de tiempos mostrado en la figura 5.18 corresponde a la memoria


de lectura/escritura esttica 6116 operando en modo 1. La diferencia la establece cual
de las dos seales, WE o CS , se activa de ltimo y se remueve primero.
Para que la memoria RWM sea decodificada en las mismas direcciones que la
seccin de RAM del 8156 de la figura 5.4, es suficiente con aplicar la a la entrada
CS , el complemento de la lnea de direcciones A11. Las seales de lectura y escritura
MRD y MRW se conectan respectivamente a las entradas o OE y WE de la 6116,
como especifica la figura 5.19.
5.2.3 Los puertos de entrada y salida

Para conectar al 8085A la etapa de adquisicin de datos de temperatura se utilizaron la seccin de E/S del 8156. Para cumplir las funciones de E/S de la CPU de la
figura 4.41, se usa un circuito programable para interconexin de perifricos del tipo
PPI 8255 (PPI: Programmable Peripheral Interface). El 8255 es un circuito LSI de
uso difundido y de bajo costo. A pesar que fue introducido en la dcada de los setenta

El Microcomputador Bsico

155

como un componente de E/S para sistemas basados en el P 8080 de INTEL, aun es


posible encontrarlo (no necesariamente como un 8255 discreto) en Cs basados en
procesadores modernos, cumpliendo funciones de puerto para la conexin de teclado
e impresora.

Fig. 5.19 RWM 6116 decodificada para las direcciones comprendidas entre 0800H-0FFFH

Una descripcin con detalle del dispositivo y la presentacin de aplicaciones


tpicas, se realizar en el captulo 9. Por ahora, interesa ms bien entender como se
interconecta el PPI al 8085A y la forma en la cual es seleccionado por el P. El 8255
tiene 24 lneas de E/S distribuidas en 3 puertos de 8 bits, los cuales los cuales pueden
ser programados como entradas o salidas en 2 grupos (A y B) de 12 lneas y puede
usarse en tres modos principales de operacin. La configuracin de los terminales y el
smbolo elctrico del circuito programable para interconexin de perifricos 8255,
son los mostrados en la figura 5.20.

8255

Fig. 5.20 Distribucin de terminales del PPI 8255

El Microcomputador Bsico

156

El grupo A est formado por el puerto A:PA0-PA7 y por los cuatro bits de orden mayor del puerto C (PC4-PC7); el grupo B est compuesto por las ocho lneas del
puerto B: PB0-PB7 y los cuatro bits menos significativos del puerto C (PC0-PC3).
Adems de los puertos el 8255 contiene un registro de comandos para la programacin del dispositivo. Para que el 8085A pueda tener acceso a uno de los registros para
programar el dispositivo o usar uno de los puertos, la entrada de habilitacin CS debe ponerse a nivel bajo. La seleccin del registro de comando o de un puerto de E/S
particular se realiza por medio de las entradas de direccin A0 y A1, segn lo indicado por la tabla siguiente.
Tabla. 5.7 Direcciones de los registros internos del PPI 8255
Direccin del Puerto de E/S
Registro seleccionado
A7 A6
A5 A4 A3 A2 A1 A0
x
x
x
x
x
x
0
0
Puerto A de E/S
x
x
x
x
x
x
0
1
Puerto B de E/S
x
x
x
x
x
x
1
0
Puerto C de E/S
x
x
x
x
x
x
1
1
Registro de comando

El tipo de operacin a realizar es determinado por la activacin de una de las


entradas de control: RD o WR . Estas lneas de entrada deben conectarse, respectivamente, a las salidas de control de lectura y escritura en puerto de E/S: IORD e IOWR
de la CPU de la figura 5.16. Las ocho lneas bidireccionales de datos (D0-D7) del
8255 se acoplan al bus de direcciones/datos AD0-AD7 y permanecern en estado de
alta impedancia cuando CS no est activa; o en caso que RD y WR estn ambas en
uno, independientemente del estado de CS . La tabla 5.8 muestra el modo bsico de
operacin del 8255.

Tabla. 5.8 Tabla de estados del PPI 8255

El Microcomputador Bsico

157

La interconexin del 8255 al P se realiza como indica la figura 5.21. Observe


que para seleccionar el circuito, se usa el complemento de la lnea de direcciones A11.

Fig. 5.21 Conexin del PPI 8255 al P 8085A

Cuando se aplica tensin para arrancar al sistema, la seal de salida de 8085A:


RESET OUT se activa en alto, y fuerza al 8255 a iniciarse con todos los puertos
programados como entrada. Si tal configuracin no es la deseada para la aplicacin,
el PPI debe ser reprogramado escribiendo un cierto patrn de bits en el registro de
comando. La seleccin lineal del 8255 usando la lnea A11, establece las direcciones
de los puertos como especifica la figura 5.22.
A15

A14 A13 A12 A11 A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

A1

A0

Puerto A
Puerto B
Puerto C
Comando

08H
09H
0AH
0BH

Fig. 5.22 El PPI 8255 es seleccionado por medio de la lnea de direccin A11.

Observe que para seleccionar el rea de 2048 Kbytes de la memoria de lectura/escritura 6116 y al PPI 8255 se usa la misma seal ( A11 ). No obstante, las lneas
de datos de ambos dispositivos nunca se conectan simultneamente al bus de direcciones/datos AD0-AD7 del 8085A. Esto es posible porque el espacio de direcciones
de memoria est separado del correspondiente a los puertos de E/S. Durante una operacin de lectura o escritura, el 8085A indica que la direccin en el bus se refiere a
una posicin de memoria activando una de las seales: MRD o MRW ; mientras que
un acceso a un puerto de E/S es notificado por medio de les seales IORD o IOWR .
Durante una operacin de lectura (escritura) de la memoria RWM, se selecciona el chip 6116 y se activa en nivel bajo la seal MRD ( MRW ) para leer (escri-

El Microcomputador Bsico

158

bir) la posicin especificada por las lneas de direcciones A0-A10. Aun cuando est
operacin pone un nivel cero en la entrada CS del 8255, el bus de datos (D0-D7) del
PPI permanece en tercer estado debido a que las entradas de control IORD e IOWR
estn ambas en nivel alto. Esto puede ser verificado consultando la tabla 5.8 de funcionamiento del 8255.
Una situacin similar ocurre cuando se ejecuta una instruccin IN puerto
(OUT puerto). Con el 8255 habilitado, se activa la lnea IORD ( IOWR ) para leer
(escribir) el registro de E/S del 8255 identificado por el estado de las lneas de direcciones A0-A1. En este caso la memoria 6116 permanece inactiva porque las seales
MRD y MRW , ambas en uno, mantienen flotantes las lneas de datos (D0-D7) del
circuito. Si se desea mantener la memoria RWM en el modo de bajo consumo
( CS =1) cuando se habilite el 8255, puede usarse una de las lneas de direcciones A12A15 (en lugar de A11) para seleccionar el PPI.
En la figura 5.23 se presenta el diagrama final de la seccin de memoria y
puertos de E/S, usando dispositivos convencionales, para el sistema de adquisicin y
supervisin de datos de la figura 5.1,

5.3 DECODIFICACIN EXHAUSTIVA DE LAS DIRECCIONES


En la tcnica de seleccin lineal, cada lnea de bus de direcciones del P se
utiliza para habilitar un componente particular del sistema. Este mtodo usado hasta
ahora para decodificar las direcciones de los circuitos de memoria y puertos tiene
varias desventajas. En primer trmino, el nmero de dispositivos posibles de seleccionar est limitado por el nmero de lneas de direccin no usadas para acceder a
posiciones de memoria.
En el caso del C de la figura 5.4 para el acceso a los 2 Kbytes de EPROM del
8755 son necesarios once lneas de direcciones, mientras que para los 256 bytes de la
RWM del 8156 bastan con slo ocho lneas. Esto significa que de los diecisis bits
del bus de direcciones, once (211=2048K) estn destinadas para el acceso a las reas
de EPROM y RAM. Es comn que la mayora de las aplicaciones requieran una zona
de EPROM de mayor capacidad que la de RWM.
Como indica la figura 5.24, las cinco lneas de direcciones A11-A15 pueden
usarse para seleccionar los componentes. La lnea A11 selecciona la EPROM y la
RAM quedando los cuatro bits restantes para habilitar otras memorias o dispositivos
de E/S. A pesar del nmero reducido de dispositivos posibles de habilitar mediante
est tcnica, es muy utilizada en sistemas pequeos por que no requiere de circuitos
decodificadores y disminuye el nmero total de componentes y el costo de construccin del sistema.

El Microcomputador Bsico

Fig. 5.23 Seccin de memoria y E/S del C de la figura 5.12.

159

El Microcomputador Bsico

160

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0

PUERTOS
DE E/S

EPROM/RAM

POSICIONES
EPROM/RAM

Fig. 5.24 Esquema de seleccin lineal.

Otra desventaja asociada a esta tcnica es que secciona por la mitad el espacio
total de 64K de memoria disponible, por cada bit individual de direccin usado como
seal de seleccin de chip. El uso de la lnea A11 para seleccionar la EPROM del 8755
en el C de la figura 5.4, divide el espacio de memoria en dos bloques de 32K cada
uno. Otra limitacin de la seleccin lineal es que si se utiliza para habilitar varios
8755, dos por ejemplo, las zonas ocupadas por la seccin de memoria de cada circuito
no son contiguas. La del primero estar asignada desde 0 a 2K y la del segundo desde
6K hasta 8K, como se deduce examinando el sistema de la figura 5.8. En estos casos,
es responsabilidad del programador reconocer las reas vlidas de memoria.
Al no utilizar todas las lneas de direcciones para decodificar la direccin de la
posicin de memoria a la cual se desea acceso, la seleccin lineal resulta en una decodificacin parcial del espacio de direcciones. Tal esquema es permitido como medio de simplificar el decodificador, siempre y cuando el sistema no utilice todo el
espacio de memoria del P. Una decodificacin incompleta significa que una misma
posicin de memoria puede ser seleccionada con direcciones diferentes. Recuerde que
se indic en la seccin 5.1 que aun cuando la EPROM est asignada a los primeros
2Kbytes (000H-07FFH), la seccin de memoria del 8755 ser seleccionada cada vez
que el bus contenga una direccin comprendida en los rangos 0-2K, 4-6K, 8-10K, 1214K,16-18K, ...,60K-62K. Estos bloques adicionales se conocen como zonas imagen
y su nmero puede ser calculado por la ecuacin,
I=2

(n j k l)

donde:
n: nmero de lneas del bus de direcciones.
j: nmero de entradas de direcciones de la memoria.
k: nmero de lneas de direcciones usadas en la decodificacin externa, y
l: nmero de lneas comunes a la decodificacin externa e interna.

En el caso en discusin, I=2(16-11-1-0) = 16. Las zonas imagen del bloque de 2K


de la EPROM del 8755 se muestran en el mapa de memoria de la figura 5.25, y corresponden a las direcciones para las cuales la lnea A11 est en cero.

El Microcomputador Bsico

161

FFFFH
60K-62K

20K-22K
16K-18K
12K-14K
8K-10K
4K-6K
0-2K

0000H

Fig. 5.25 Ubicacin del bloque de 2Kbytes en el espacio de 64 K de memoria.

Una decodificacin completa de las direcciones es posible por el uso de circuitos decodificadores. Como resultado, una y solo una posicin corresponder al
contenido del bus en un momento determinado. A cada dispositivo componente del
sistema se le asigna con exclusividad una zona del espacio total de direcciones de
memoria. En el C de la figura 3.51 se usaron puertas OR discretas para decodificar
en forma exhaustiva los 512 bytes de la memoria de lectura/escritura del microcomputador.
Ejemplo 5.1
Suponga que desea decodificar, usando lgica SSI, una memoria EPROM
2764 de 8Kbytes para el rango de direcciones 0000H1FFFH. El estado de las lneas
del bus en el rango especificado es el mostrado en la tabla 5.9.
Tabla. 5.9 Direcciones del bloque de 8K de una memoria 2764

A15 A14 A13 A12

A11 A10 A9 A8

A 7 A6 A5 A 4

A 3 A 2 A1 A0

El Microcomputador Bsico

162

Para todas las direcciones en el rea de la EPROM, las lneas A13-A15 estn en
nivel bajo y durante una lectura en memoria la salida de control IO / M tambin estar en cero. De modo que utilizando estas condiciones y aplicando RD a la entrada de
habilitacin de salidas OE de la 2732, se puede seleccionar la memoria, como sugiere
el circuito de la figura 5.26.

Fig. 5.26 Decodificador de direcciones de la EPROM 2764

Otra posibilidad para la decodificacin de la 2764, es utilizar la seal de control de lectura en memoria MRD , en lugar de RD , para habilitar las salidas de la
EPROM. Haciendo esto, el circuito decodificador se simplifica como indica el diagrama elctrico de la figura 5.27.

Fig. 5.27 Decodificador de direcciones de la EPROM 2764, usando MRD

El Microcomputador Bsico

163

El decodificador de la figura 5.27 deja abierta la posibilidad que en una operacin de acceso a puerto, la entrada de seleccin CE vaya a nivel lgico cero. Esto no
representa un problema, porque MRD estar en uno y las salidas de datos de la
EPROM permanecern flotantes. El uso de lgica integrada en escala pequea para
realizar el decodificador de direcciones no es una buena eleccin. Tal arreglo no es
prctico porque obliga a que cada componente tenga su propio decodificador con
puertas discretas, aumentando el costo del sistema. Ms conveniente es usar circuitos
MSI como decodificadores de direcciones. Los ms usados en aplicaciones con P
son:
8205
74LS139
74LS138
74LS154
74LS155
74LS156

1 de 8
2a4
3a8
4a1
2a4
2a4

Ejemplo 5.2
Considere que para un sistema que requiere 32K de memoria EPROM se utiliza un arreglo de ocho memorias EPROM 2732, cada una de las cuales contiene 4096
posiciones. Para seleccionar los dispositivos de memoria se usar un decodificador 3
a 8 del tipo 74LS138. La tabla de estados y la distribucin de los terminales del circuito, muestran en la figura 5.28.
G1

G2A

G2B

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

0
x
x
1
1
1
1
1
1
1
1

x
1
x
0
0
0
0
0
0
0
0

x
x
1
0
0
0
0
0
0
0
0

x
x
x
0
0
0
0
1
1
1
1

x
x
x
0
0
1
1
0
0
1
1

x
x
x
0
1
0
1
0
1
0
1

1
1
1
1
1
1
1
1
1
1
0

1
1
1
1
1
1
1
1
1
0
1

1
1
1
1
1
1
1
1
0
1
1

1
1
1
1
1
1
1
0
1
1
1

1
1
1
1
1
1
0
1
1
1
1

1
1
1
1
1
0
1
1
1
1
1

1
1
1
1
0
1
1
1
1
1
1

1
1
1
0
1
1
1
1
1
1
1

Vcc

Y0

C
G2A

G2B

74LS138

Y1
Y2
Y3

G1

Y4

Y7

Y5

GND

Y6

Fig. 5.28 Tabla de la verdad del decodificador 74LS138

Con un 74LS138 nico es posible seleccionar hasta ocho dispositivos diferentes de memoria o de puertos de entrada y salida. El circuito decodificador tiene ocho
salidas ( Y0 Y7 ), activas en nivel bajo; tres entradas de seleccin de salidas (A,B y
C) y tres entradas de habilitacin del circuito (G1, G 2A y G 2B ) Para que una salida
Yi est en cero lgico, la entrada G1 debe estar en nivel alto y las entradas
G 2A y G 2B deben estar en nivel bajo.

El Microcomputador Bsico

164

Por medio de las lneas A,B y C se especifica cual de las ocho salidas se activar. La EPROM 2732 funciona igual que la memoria 2716, pero tiene 12 lneas de
direcciones (A0-A11) para permitir el acceso a las 4096 posiciones del dispositivo. Las
direcciones ocupadas por cada chip 2732 son las indicadas por la tabla siguiente:
Tabla. 5.9 Cada 2732 ocupa un
bloque de 4K.

EPROM
0
1
2
3
4
5
6
7

DIRECCIN
0000H-0FFFH
1000H-1FFFH
2000H-2FFFH
3000H-3FFFH
4000H-4FFFH
5000H-5FFFH
6000H-6FFFH
7000H-7FFFH

El estado de cada lnea de direcciones para los 32Kbytes de memoria suplidos


por el arreglo de EPROM se presenta en la tabla 5.10. Para cada bloque se muestra la
direccin inicial y final.

Tabla. 5.10 Bloques de memoria de 4K asignados a cada una de las 2732.

A15 A14 A13 A12 A11 A10 A9 A8


EPROM 0

EPROM 1

EPROM 2

EPROM 7

A 7 A6 A5 A 4

A 3 A 2 A1 A0

0
0

0
0

0
0

0
1

1 1
0 0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

0
0

0
0

1
1

0
0

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
1

0
.

0
.

1
.

1
.

0 0
. .

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

0
.

El circuito decodificador de direcciones para las ocho 2732, es el presentado


en la figura 5.40. Observe que para todo el espacio de 32K, la lnea de direcciones
A15 permanece en nivel bajo, mientras que los bits A12-A14 muestran una progresin
binaria desde una EPROM a la siguiente. Forzando la entrada G1 a nivel alto y conectado la lnea de direccin A15 a G 2A y la seal IO / M a G 2B , el decodificador ser
habilitado cada vez que el bus de direcciones identifique una posicin de memoria

El Microcomputador Bsico

165

comprendida entre 0000H y 7FFFH. El bloque particular seleccionado lo establecen


las lneas A12-A14, las cuales se aplican a las entradas A, B y C del 74LS138.

Fig. 5.29 Un 74LS138 selecciona hasta 8 dispositivos de memoria.

El uso de la salida IO / M del P para seleccionar el 74LS138 de la figura


5.40, garantiza que durante una operacin de E/S todas las EPROM funcionarn en el
modo de bajo consumo, debido a que el circuito decodificador estar deshabilitado
( IO / M =1) con todas sus salidas en nivel alto. Conviene resaltar que la seal RD
pudo usarse, en lugar de MRD , para habilitar las salidas de la memoria EPROM seleccionada.
Ejemplo 5.3
Suponga que se tiene un sistema con 4 Kbytes de EPROM (2732), 2Kbytes de
RWM (6116) y un PPI 8255. Para seleccionar los componentes se debe usar un decodificador doble 2 a 4 con cdigo 74LS139. Este circuito fue usado en el capitulo 3
como decodificador de puertos. En la figura 5.30 se repite la tabla de funcionamiento
del chip.

G
1
0
0
0
0

B
X
0
0
1
1

A
x
0
1
0
1

Y3

Y2

Y1

Y0

1
1
1
1
0

1
1
1
0
1

1
1
0
1
1

1
0
1
1
1

Ga
Aa
Ba
Y0a
Y1a
Y2a
Y3a
GND

74LS139

Vcc
Gb
Ab
Bb
Y 0b
Y1b
Y 2b
Y3b

Fig. 5.30 Tabla de la verdad del decodificador 74LS139

Las direcciones se asignan a cada componente de acuerdo con lo indicado por


la figura 5.11.

El Microcomputador Bsico

166

Tabla. 5.11 Direcciones para las secciones de memoria y E/S


DISPOSITIVO
EPROM
RAM
PUERTO A
PUERTO B
PUERTO C
REG. COMANDO

DIRECCIN
0000H-0FFFH
1000H-17FFH
00H
01H
02H
03H

2732
6116
8255

La tabla de estado de las lneas de direcciones del sistema es la que sigue y el


circuito decodificador se muestra en la figura 5.31. Observe que se hace una decodificacin parcial de la direccin de los puertos del 8255.
Tabla. 5.12 Tabla de direcciones para las secciones de memoria y E/S
A15 A14 A13 A12 A11 A10 A9 A8
A 3 A 2 A1 A0
A 7 A6 A5 A 4
EPROM

0 0

0 0

1 0

0.

0.

0.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

RWM

1.

Como seala la tabla 5.12, aunque la memoria 6116 tiene slo 2Kbytes de capacidad, ocupa el rea de 4 Kbytes en el rango direcciones comprendo desde 1000H
hasta 1FFFH. De modo que el usuario del sistema debe evitar programar accesos a las
direcciones no vlidas de la memoria de lectura/escritura.
Ejemplo 5.4
En este ejemplo se discute el funcionamiento del decodificador de direcciones
de un C comercial. El MPR-85 PLUS es un microcomputador de bajo costo pero
muy completo basado el 8085A, el cual es utilizado para realizar las prcticas del
Laboratorio de Sistemas de Microprocesadores en el Departamento de Electricidad.
El MPR-85 tiene en la tarjeta de circuito impreso, incorporados 16K de EPROM
(27128), 16K de RWM (2x6264), dos dispositivos 8155, dos PPI 8255 y un controlador de teclado/display 8279. Adems, se proveen seales de seleccin para expansiones futuras de memoria y puertos de E/S.
El circuito para decodificacin de las direcciones del microcomputador fue diseado usando dos decodificadores 2 a 4 del tipo 74LS156. En la tabla 5.13 se presenta la asignacin de direcciones para memoria y puertos, la cual fue reproducida del
manual de operacin del MPR-85.

El Microcomputador Bsico

Fig. 5.31 Circuito decodificador de direcciones y de puertos.

167

El Microcomputador Bsico

168

El MPR-85 utiliza las seales de control MRD , MRW , IORD e IOWR para
tener acceso a la memoria y a los puertos de E/S. Como indica la tabla de direcciones
de la figura 5.45, los circuitos de memoria y puertos se seleccionan usando seales
comunes. Por ejemplo, la salida CS3 habilita los 8Kbytes de RWM en el rango
6000H-7FFFH y los puertos del 8279 en las direcciones 60H-7FH. Esto es posible
porque el espacio de direcciones de puertos est aislado del de memoria.
Tabla. 5.13 Direcciones para las secciones de memoria y E/S del MPR-85
MEMORIA

DIRECCIN

CS

DIRECCIN

PUERTOS

0000H-3FFFH

CS0

00H-3FH

EXPANSIN DE PUERTOS

4000H-4FFFH

CS1

40H-4FH

8155 N1

5000H-5FFFH

CS2

50H-5FH

8155 N2
8729

6000H-7FFFH

CS3

60H-7FH

CONTROLADOR DE
TECLADO/DISPLAY

HASTA 8K DE RWM O
EPROM

8000H-9FFFH

CS4

80H-9FH

8255 N1

4K PARA EXPANSION

A000H-AFFFH

CS5

A0H-AFH

EXPANSIN

2K PARA EXPANSION

B000H-B7FFH

CS6

B0H-BFH

EXPANSIN

2K PARA EXPANSION

B800H-BFFFH

CS7

B8H-BFH

EXPANSIN

8255 N2

27128 (16K EPROM)


MONITOR DEL SISTEMA

8155 N1
256 bytes de RWM

8155 N2
256 bytes de RWM

6264/2764
HASTA 8K DE RWM O
EPROM

6264/2764

El encapsulado del 74LS156 contiene dos decodificadores individuales, los


cuales operan como indica la tabla de la figura 5.32. El diagrama elctrico de la seccin de decodificacin del MPR-85 es el presentado en la figura 5.33.

1
X
0
0
0
0

1C
x
0
1
1
1
1

2C

2G

1
X
0
0
0
0

x
1
0
0
0
0

1G

B
x
x
0
0
1
1
B
x
x
0
0
1
1

A
x
x
0
1
0
1
A
x
x
0
1
0
1

Y3a

Y 2a

Y1a

Y0a

1
1
1
1
1
0
Y3b
1
1
1
1
1
0

1
1
1
1
0
1

1
1
1
0
1
1

1
1
0
1
1
1

Y 2b

Y1b

Y 0b

1
1
1
1
0
1

1
1
1
0
1
1

1
1
0
1
1
1

Fig. 5.32 Tabla de la verdad del decodificador 74LS15

1C
1G

1Y3
1Y 2
1Y1

74LS156

Vcc
2C
2G
A

1Y0

2 Y3
2Y 2
2Y1

GND

2Y0

El Microcomputador Bsico

Fig. 5.33 Decodificador de direcciones del C MPR-85.

169

El Microcomputador Bsico

170

El decodificador marcado U1 en la figura 5.33, genera las seales de seleccin


de la EPROM 27128, de los 8155 N1 y N2 y de la memoria RWM 2764. Las conexiones seleccionadas para el 74LS156 dividen en bloques de 4K, los primeros 32K
del espacio total de memoria. Esto puede verificarse en la tabla 5.14.
Tabla. 5.14 Direcciones para las secciones de memoria y E/S seleccionadas por U1.

A15 A14 A13 A12

EPROM
4 X 4K

RWM

256 bytes
RWM

256 bytes

RWM

2 X 4K

A11 A10 A9 A8

A7 A 6 A 5 A 4

A 3 A2 A1 A 0

0
0

0
0

0
0

0
1

1 1
0 0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

0
0

0
0

0
1

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

0 0

1 1

En los primeros 16K del espacio de memoria del P, las lneas de direccin
A15 y A14 (conectadas a 2G y 2C ) permanecen en nivel bajo, mientras que los bits
A13 y A12 (guiando las entradas B y A) varan desde 00 hasta 11 binario, desde un
bloque de 4K al siguiente. De acuerdo con lo especificado por la tabla de funcionamiento, esto significa que cuando el contenido del bus de direcciones identifica a una
direccin entre de la EPROM entre 0000H y 3FFFH, una de las salidas 2Yi del decodificador 2 contenido en U1, estar en cero. Como las salidas del 74LS156 son a
colector abierto, uniendo las 4 salidas 2Yi se obtiene una funcin AND cableada,
cuya salida corresponde a CS0 .
El decodificador 1 de U1 tiene las entradas de habilitacin: 1G y 1C , conectadas a las salidas de direcciones A15 y A14. Estas lneas estarn, respectivamente, en
cero y uno para cualquier direccin dentro del rea ocupada por el quinto bloque de
4K (4000H-4FFFH). Como A13 y A12 estn ambas en cero en este mismo rango, la
salida 1Y0 del decodificador se activar a nivel bajo. Esta seal se destina para seleccionar los 256 bytes de la memoria RWM 2764 y las seccin de E/S del 8155 N1.

El Microcomputador Bsico

171

Observe que A13 y A12 varan desde el quinto bloque de 4 K al siguiente, activando
progresivamente las salidas 1Y1 , 1Y2 y 1Y3 . La primera sita el 8155 N2 en la zona
de direcciones 5000H-5FFFH, mientras que las dos ltimas salidas se conectan para
seleccionar los 8Kbytes (2 bloques de 4K) de la otra memoria RWM 6264.
Las seales de seleccin CS0 CS3 operan sobre los primeros 32Kbytes del
espacio de memoria. Por medio de U2, se generan los comandos CS4 CS7 , los cuales sitan los componentes restantes del sistema dentro de los siguientes 16K (8000HBFFFH). La tabla 5.15 muestra las direcciones para U2.
Tabla. 5.15 Direcciones para las secciones de memoria y E/S seleccionadas por U2.
A15 A14 A13 A12 A11 A10 A9 A8
A 3 A2 A1 A 0
A7 A 6 A 5 A 4

RWM
4 X 2K

EXPANSIN

4Kbytes

EXPANSIN

2Kbytes
EXPANSIN

2Kbytes

1
1

0
0

0
0

0
0

0
1

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
1

0
0

0
0

0
1

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1
0

1 1

El espacio de direcciones de la tabla anterior se presenta dividido en bloques


de 2K. Una direccin entre los primeros 8K genera el comando de seleccin CS4 ,
mediante el cableado de las cuatro salidas del decodificador 2 de U2. Observe que en
estos cuatro bloques de 2K, las lneas A12 y A11 (aplicadas a las entradas B y A)
muestran una progresin binaria de un bloque de 2K al prximo y que A13 (conectada
a la entrada de habilitacin 2C ) permanece en nivel bajo. Finalmente, la combinacin lgica de las lneas de direcciones A15 y A14, realizada por las puertas U3A y
U3B, fuerzan a cero la otra entrada de habilitacin 2G .
Para entender como se genera las seales CS5 CS7 , basta con inspeccionar
la tabla de direcciones de la figura 5.49. Los 4K entre A000H y AFFFH son seleccio-

El Microcomputador Bsico

172

nados por CS5 , la cual es generada por la AND implcita con entradas1Y0 y 1Y1 . Los
siguientes dos bloques de 2K se reservan para expansin y son seleccionados por
CS6 y CS7 . Los diseadores del MPR-85 utilizaron 48Kbytes del total de 64Kbytes
posibles de manejar por el 8085A. Como indica la tabla 5.13, la salida de seleccin
CS0 tambin habilita un 8255 N 2, al cual se le ha previsto en el circuito impreso
una base para expansin. Los puertos de este dispositivo estn situados entre 00H y
3FH. De este rango de 64 bytes, se asigna al puerto de comando la direccin 00H y
las direcciones 01H, 02H y 03H a los puertos de E/S A, B, y C, respectivamente. Las
posiciones restantes dentro del rango se consideran invlidas. El modo como se asignan las direcciones de todos los puertos, es la presentada en la tabla siguiente:
Tabla. 5.16 Direcciones de puertos de E/S
PUERTO

FUNCIN

00H
01H
02H
03H
04H-3FH
40H
41H
42H
43H
44H
45H
46H-4FH

PUERTO A

DISPOSITIVO

PUERTO B
PUERTO C

8255 N 2

COMANDO

no vlidas
CONTROL
PUERTO A
PUERTO B
PUERTO C

8155 N 1

LSB TIMER
MSB DEL TIMER

no vlidas

PUERTO

50H
51H
52H
53H
54H
55H
56H-5FH
60H
61H
62H-7FH
80H
81H
82H
83H
84H-8FH
A0H-BFH

FUNCIN

DISPOSITIVO

CONTROL
PUERTO A
PUERTO B
PUERTO C

8155 N 2

LSB TIMER
MSB DEL TIMER

no vlidas
PUERTO DATOS
PUERTO CONTROL

8279

no vlidas
PUERTO A
PUERTO B
PUERTO C

8255 N 2

COMANDO

no vlidas
---------------

EXPANSIN

Ejemplo 5.5
Para finalizar esta seccin, se presenta un ejemplo final de decodificacin de
puertos usando E/S aislada. Considere que se tienen dos PPI 8255A y un puerto de
salida realizado con un registro paralelo 74LS374. Las direcciones de los puertos se
muestran en la tabla 5.17 y el circuito en la figura 5.34.
Fig. 5.17 Tabla de direcciones de puertos.
8255 #1

8255 #2

74LS374

Puerto A
Puerto B
Puerto C
Comando
Puerto A
Puerto B
Puerto C
Comando

20H
21H
22H
23H
24H
25H
26H
27H
28H*
A1= A0 =0

El Microcomputador Bsico

173

Fig. 5.34 Decodificacin completa de 7 puertos usando un 74LS138.

El decodificador de la figura 5.34 realiza una decodificacin exhaustiva de los


puertos de los 8255 y del registro paralelo.

5.4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA


El mtodo usado hasta ahora para seleccionar los puertos de E/S, se basa en el
hecho que el espacio de direcciones de memoria est separado del espacio de puertos
de E/S. Durante una operacin de lectura o escritura, el P usa la seal IO / M para
notificar a los dispositivos externos cuando la direccin presente en el bus corresponde a una posicin de memoria o a un puerto de E/S. Lo registros de puertos son diseados para responder a las seales de control IORD o IOWR y para ser seleccionados por una seal CS de habilitacin.
Este procedimiento de manejo de puertos se conoce como el mtodo de e/s estndar o de E/S aislada y slo permite acceso a puertos por medio de las instrucciones

El Microcomputador Bsico

174

IN puerto y OUT puerto. Usando est tcnica, pueden controlarse hasta 512 registros
externos (256 de entrada y 256 de salida). Recuerde que en estas instrucciones la direccin del puerto la especifica el segundo byte de la instruccin, y el nmero mximo que puede representarse con ocho bits es 255. Otra limitacin de est mtodo es
que slo consiente transferencias entre el puerto seleccionado y el registro acumulador. Una estrategia de acceso a puertos que permite superar la limitacin del nmero
de puertos impuesta por el mtodo estndar, es el mtodo de E/S mapeada como
memoria. Esta tcnica trata a los puertos como posiciones convencionales de memoria, fusionando en un mapa nico el espacio de direcciones de memoria y de puertos.
Por esta razn se hace innecesario el uso de decodificadores independientes para
memoria y E/S.
Una desventaja que se puede percibir de inmediato del mapeo de E/S como
memoria, es que reduce la cantidad de memoria disponible, debido a que una porcin
de sta es cedida para los puertos. Si el sistema tiene menos de 32Kbytes de memoria,
la lnea A15 no es utilizada para identificar posiciones de memoria, de modo que destinando este bit de direccin para distinguir entre un acceso a memoria (A15 = 0) y
una operacin con puertos (A15 = 1), se dispondr de 32K direcciones de E/S almacenamiento, sin usar la memoria instalada.
El mapeo de E/S a memoria no solo aumenta el nmero de puertos del C, sino que permite el uso para control de puertos de toda instruccin que haga referencia
a memoria. Esto simplifica la programacin de las rutinas de manejo de perifricos.
Por ejemplo, ejecutando a instruccin MOV r, M se transfiere el contenido de un
puerto de entrada a cualquiera de los registros internos del P; XRA M realiza la funcin OR exclusivo entre dato en el puerto de entrada y el acumulador; LHLD direccin transfiere los datos en dos puertos hacia los registros H y L; SHLD direccin
traslada los 16 bits en HL a dos puertos de salida; SUB M substrae el contenido de un
puerto de entrada del dato en el acumulador. Estos son slo algunos pocos ejemplos
de instrucciones que usan la memoria.
La figura 5.35 ilustra como puede tratarse la seccin de puertos de un 8755 y
de un 8255, como si fuesen localidades de memoria. Para el 8755, la lnea A15 determina cuando el acceso se realiza a la seccin de 2K de la memoria EPROM o los registros del circuito. Para acceder a un puerto basta con sumar 8000H a la direccin.
Por ejemplo si el puerto B del 8755 ha sido programado como salida y se desea mover a este puerto el contenido del acumulador, debe ejecutarse STA 8001H. Esta instruccin transfiere el contenido del A en la posicin de memoria especificada por el
operando de la instruccin. Pero como A15 est en nivel alto, el destino ser el puerto
B (de direccin xxxxxx01) del 8755. Para el 8255 el procedimiento es el mismo. En
ambos casos, los perifricos respondern a las seales de control RD y WR .
Si el programador de un sistema sabe que no debe usar las instrucciones IN
puerto y OUT puerto, porque los registros externos son considerados posiciones de
memoria no es necesario decodificar las salida IO / M para tener acceso a los puertos.

El Microcomputador Bsico

175

8755
0 x

DIRECCIN DE MEMORIA

8255
1
0

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

A1

A0

A1

A0

DIRECCIN DE PUERTO

DIRECCIN DE PUERTO

Fig. 5.35 Los puertos de E/S del 8755 y del 8255 son tratados como posiciones de memoria.

En el siguiente ejemplo se presenta un decodificador de direcciones de un C


usando el mtodo de E/S mapeada en memoria.

El Microcomputador Bsico

176

Ejemplo 5.6
El espacio de direcciones comprendido entre 0000H y 3FFFH es dividido en
bloques de 2K, como indica la tabla 5.18. Cada bloque es seleccionado por las lneas
A13, A12 y A11. Para habilitar el circuito 74LS138 se usan los las lneas de direcciones
A14 y A15, las cuales permanecen en cero en el rango especificado.

Fig. 5.36 El decodificador de direcciones permite al acceso a 16Kbytes de memoria.


Tabla. 5.18 Tabla de direcciones de cada bloque de 2K.
CS

DIRECCIN

DISPOSITIVO

CS0

0000H-07FFH

EPROM

CS1

0800H-0FFFH

RWM

CS2

1000H-17FFH

TECLADO

CS3

1800H-1FFFH

DISPLAY

CS4

2000H-27FFH

ENTRADA

CS5

2800H-2FFFH

SALIDA

CS6

3000H-37FFH

OTRO

CS7

3800H-3FFFH

OTRO

La seleccin del chip es completada por la salida de la puerta NAND, la cual


va a uno durante una operacin de lectura o escritura. Cada salida del decodificador
es una seal de seleccin CS de dispositivos de memoria o de E/S. Las direcciones
correspondientes a cada salida del decodificador son las mostradas en la tabla 5.18.
Para finalizar esta seccin, se presenta en la figura 5.38 el subsistema de memoria y puertos de un sistema 8085. Para el diseo del decodificador de puertos se
usa la tcnica de mapeo a memoria. La 27256 es una EPROM de 32 Kbytes y es seleccionada por medio de la lnea A15, lo cual sita el circuito en los primeros 32 Kbytes del espacio de direcciones del P. Para activar las salidas O0-O7 de la memoria, se
conecta la seal de control de lectura RD a la entrada OE de habilitacin de salidas
del dispositivo. Para seleccionar el grupo de tres memorias RWM 6116 y el 8255, se
usa un decodificador 74LS138. La conexin de la lnea A15 a la entrada de seleccin
G1del decodificador, garantiza que este permanecer deshabilitado, con todas sus
salidas en nivel alto, durante operaciones de lectura a la EPROM. Cualquier direccin
en el bus a partir de la posicin 8000H, pondr el bit A15 en uno habilitando el

El Microcomputador Bsico

177

74LS138. Las lneas A14, A13 y A12 (conectadas C, A, y B) determinan cual de las
salidas del decodificador se activar, para seleccionar un rea de 4K (la 6116 solo usa
2K) en el bloque superior de 32 K del espacio de direcciones. Las direcciones de activacin de las salidas del decodificador se muestran en la en la tabla 5.19 y el mapa
de direcciones de los componentes conectados al sistema en la figura 5.37.
Tabla. 5.19 Tabla de direcciones de cada bloque de 2K.
CS

DIRECCIN

DISPOSITIVO

CS0

8000H-87FFH

27256

CS1

9000H-97FFH

6116

CS2

A000H-A7FFH

6116

CS3

B000H-B7FFH

8255

PUERTO A

B000H

CS4

C000H-C7FFH

SIN USO

PUERTO A

B001H

CS5

D000H-D7FFH

SIN USO

PUERTO A

B002H

CS6

E000H-E7FFH

SIN USO

COMANDO

B003H

CS7

F000H-F7FFH

SIN USO

DIRECCIN

DATOS

0000H

0000 0000 0000 0000

.
.
.
7FFFH

.
.
.
0111 1111 1111 1111

8000H

1000 0000 0000 0000

.
87FFH
.
8FFFH

.
1000 0111 1111 1111
.
1000 1111 1111 1111

9000H

1001 0000 0000 0000

.
97FFH
.
9FFFH

.
1001 0111 1111 1111
.
1001 1111 1111 1111

A000H

1010 0000 0000 0000

.
A7FFH
.
AFFFH

.
1010 0111 1111 1111.
.
1010 1111 1111 1111

B000H

1011 0000 0000 0000

.
B7FFH
.
BFFFH

.
1011 0111 1111 1111
1011 1111 1111 1111

Fig. 5.37 Mapa de memoria para el sistema de la figura 5.38.

32 K EPROM

2 K RWM

2K

RWM

2K

RWM

8255

El Microcomputador Bsico

Fig. 5.38 Decodificador de direcciones para 32K de EPROM, 6K de RWM y un PPI 8255

178

El Microcomputador Bsico

179

5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES


Adems de usando puertas discretas y circuitos integrados MSI, el decodificador de direcciones puede realizarse usando algn tipo de dispositivo lgico programable (PLD). Estos componentes ahorran espacio en la tarjeta del circuito impreso,
su estructura es apropiada para el uso como decodificador y mantienen la confidencialidad de la lgica programada. Para ilustrar las ventajas del uso de PLD, considere
el siguiente ejemplo.
Ejemplo 5.7
Bebe disearse un decodificador de direcciones para un subsistema de memoria compuesto por 4 Kbytes de EPROM (1 x 4K), 8 Kbytes de EEPROM (1 x 8K) y
52 Kbytes de RWM (1 x 32K, 1 x 16K y 1x 4K). El espacio de memoria de la aplicacin es distribuido como indica el mapa de la figura 5.39.
En principio, se observa que el circuito de memoria conectado al sistema y
que tiene menor capacidad es el mdulo de 4K (212), de modo que para el diseo del
decodificador se divide el espaci de 64Kbytes de memoria en bloques de 4Kbytes.
Esto significa que se usan los bits de direccin A12-A15 para seleccionar el circuito
integrado al cual corresponde la direccin a la cual se desea acceso. La tabla 5.20
muestra el rango de direcciones en el cual se habilita cada salida del decodificador.
FFFFH
SRWM
F000H
EFFFH
SRWM
B000H
AFFFH
SRWM
3000H
2FFFH
EEPROM
1000H
0FFFH
EPROM
0000H

Fig. 5.39 Mapa de memoria para el sistema ejemplo de decodificador con PLD

El Microcomputador Bsico

180

Tabla. 5.20 Tabla de estados del decodificador de direcciones con PLD.


A15
0
0
0
0
0
0
0
0
1
1
1

A14
0
0
0
0
1
1
1
1
0
0
0

A13
0
0
1
1
0
0
1
1
0
0
1

A12
0
1
0
1
0
1
0
1
0
1
0

CS0
0
1
1
1
1
1
1
1
1
1
1

CS1
1
0
0
1
1
1
1
1
1
1
1

CS2
1
1
1
0
0
0
0
0
0
0
0

CS3
1
1
1
1
1
1
1
1
1
1
1

CS4
1
1
1
1
1
1
1
1
1
1
1

1
1
1
1
1

0
1
1
1
1

1
0
0
1
1

1
0
1
0
1

1
1
1
1
1

1
1
1
1
1

1
1
1
1
1

0
0
0
0
1

1
1
1
1
0

Las ecuaciones lgicas de las seales de seleccin de chip obtenidas a partir


de la informacin suministrada por la tabla de estados, son:
CS 0 = A15 + A14 + A13 + A12
CS1 = A15 + A14 + A13 A12 + A13 A12
CS 2 = A15 A14 + A15 A13 A12 + A15 A14 A12 + A15 A14 A13
CS 3 = A15 + A14 A12 + A14 A13 + A14 A13 A12
CS 4 = A15 + A14 + A13 + A12

El decodificador de direcciones realizado con circuitos 74LS138, se muestra


en la figura 5.41. Como alternativa para el diseo del decodificador especificado, las
ecuaciones del decodificador pueden programarse en un dispositivo PAL. Un circuito
programable comercial de amplio uso en aplicaciones combinatorias es el de cdigo
PAL16L8. La figura 5.40 muestra el diagrama de distribucin de terminales y en la
figura 5.42 se presenta la estructura interna del chip.

Fig. 5.40 Distribucin de terminales para el circuito PAL16L8.

El Microcomputador Bsico

Fig. 5.41 Decodificador de direcciones usando decodificadores convencionales.

181

El Microcomputador Bsico

182

I1
0 1 2 3

4 5 6 7

8 9 10 11 12 13 14 15 16 17 18 19

0
1
2
3
4
5
6
7

20 21 22 23

24 25 26 27 28 29 30 31

O1

I2
8
9
10
11
12
13
14
15

IO2

I3
16
17
18
19
20
21
22
23

IO3

I4
24
25
26
27
28
29
30
31

IO4

I5
32
33
34
35
36
37
38

IO5

39

I6
40
41
42
43
44
45
46
47

IO6

I7
48
49
50
51
52
53
54
55

IO7

56
57
58
59
60
61
62
63

O8

I8

I9

I10

Fig. 5.42 Diagrama lgico de la PAL16L8

La estructura interna de la PAL16L8 determina que el circuito integrado solo


puede ejecutar funciones lgicas cuyas ecuaciones tengan siete o menos trminos de

El Microcomputador Bsico

183

productos. Seis de los terminales de salida son bidireccionales de modo que pueden
ser usados como entradas.
Para propsitos de desarrollo del programa a grabar en la PAL puede usarse
cualquiera de los lenguajes compiladores existentes para descripcin de hardware,
tales como: ABEL, VHDL, VERILOG, ORCAD/PLD, ONCUPL... y otros. A continuacin se presentan dos versiones de un programa escrito en lenguaje VHDL y que permiten generar el archivo de mapa de fusibles necesario para programar el decodificador de direcciones en una PAL16L8. El primer cdigo describe, usando ecuaciones, la
estructura lgica del decodificador y el otro programa define el comportamiento funcional del circuito. Si se usa la segunda opcin no es necesario usar las tcnicas convencionales de diseo digital, debido a que no se requiere especificar las ecuaciones.
library ieee;
use ieee.std_logic_1164.all;
entity decdir is
port (

A12, A13,A14,A15:
CS0, CS1, CS2, CS3, CS4:
end decdir;

in std_logic;
out std_logic );

architecture rtl of decdir is


begin
CS0 <= A15 or A14 or A13 or A12;
CS1 <= A15 or A14 or(A13 and A12)or((not A13)and(not A12));
CS2<= (A15 and A14)or (A15 and A13 and A12)or((not A15)and (not A14) and(not A13))or ((not A15)and (not
A14) and (not A12));

CS3 <=(not A15)or((not A14)and(not A12))or((not A14)and(not A13))or(A14 and A13 and A12);
CS4 <= not(A15)or(not A14)or(not A13)or not(A12);
end rtl;
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DECODIR is
port ( A
CS

: in
: out

STD_LOGIC_VECTOR (15 downto 12);


STD_LOGIC_VECTOR (4 downto 0) );

end DECODIR;
architecture BEHAVIOR of DECODIR is
process (A,CS)
begin
case A is
when "0000"
when "0001"
when "0010"
when "1011"
when "1100"
when "1101"
when "1110"
when "1111"
when others
end case;
end process;
end BEHAVIOR;

begin

=>
=>
=>
=>
=>
=>
=>
=>
=>

CS
CS
CS
CS
CS
CS
CS
CS
CS

<=
<=
<=
<=
<=
<=
<=
<=
<=

"11110";
"11101";
"11101";
"10111";
"10111";
"10111";
"10111";
"01111";
"11011";

El Microcomputador Bsico

184

La herramienta usada para generar el archivo de programacin de la PAL es


ORCAD EXPRESS 9.1. La informacin siguiente es generada por el software
************************************************************************
OrCAD Simple PLD Fitter tools
************************************************************************

OrCAD PLD FITTER x1.11 11/5/98 (Source file C:\Program Files\OrCAD\CAPTURE\EJEMPLOS\DECODER\Timed


\DECODER.jed)
Copyright (C) 1988-1998 OrCAD All Rights Reserved.
RESOLVED EXPRESSIONS (Reduction 2)
Signal name

Row

Terms

CS0'

A12' A13' A14' A15'

CS1'

17
18

A12' A13 A14' A15'


A12 A13' A14' A15'

CS2'

25
26
27
28

A12' A14' A15


A12 A13 A15'
A13' A14' A15
A14 A15'

CS3'

33
34
35

A12 A13 A14' A15


A12' A14 A15
A13' A14 A15

CS4'

41

A12 A13 A14 A15

SIGNAL ASSIGNMENT
Pin

1.
2.
3.
4.
5.
6.
7.
8.
9.
11.
12.
13.
14.
15.
16.
17.
18.
19.

Signal name Column

A12
A13
A14
A15
CS4
CS3
CS2
CS1
CS0
-

2
0
4
8
12
16
20
24
28
30
26
22
18
14
10
6
-

Rows
-------------Beg Avail Used
56
48
40
32
24
16
8
0

8
0
8
0
8
1
8
3
8
4
8
2
8
1
8
0
---- ---64 11 (17%)

7. Checking for error conditions


NOTE (PLD0200) No fatal errors found in input file.
NOTE (PLD0201) No warnings.

Activity

High
High
High
High

(Three-state)
(Three-state)
High (Three-state)
High (Three-state)
High (Three-state)
High (Three-state)
High (Three-state)
(Three-state)

El Microcomputador Bsico

185

FUSE MAP FOR PAL16L8

0
32
64
96
128
160
192
224
256
288
320
352
384
416
448
480
512
544
576
608
640
672
704
736
768
800
832
864
896
928
960
992
1024
1056
1088
1120
1152
1184
1216
1248
1280
1312
1344
1376
1408
1440
1472
1504
1536
1568
1600
1632
1664
1696
1728
1760
1792
1824
1856
1888
1920
1952
1984
2016

10 12 14 16 18 20 22 24 26 28 30

xx
xx
xx
xx
xx
xx
xx
xx
--x
xx
xx
xx
xx
xx
xx
--x
xxx
xx
xx
xx
xx
-x-x
--xx
xx
xx
-x-x
-xx
xx
xx
xx
-xxx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--x
xx
xx
xx
xx
xx
xx
-x-x
xx
xx
xx
xx
xx
-x--x
-xx
xx
xx
-x--x
xx
xx
xx
xx
-xxx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--x
xx
xx
xx
xx
xx
xx
--x
-x
xx
xx
xx
xx
xx
---x
-x
xxx
xx
xx
--x
xxxx
xx
xx
xx
-xxx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--x
xx
xx
xx
xx
xx
xx
--x
-x
xx
xx
xx
xx
xx
--x
xx-x
xx
xx
xx
-xxxxx
xx
xx
xx
-xxx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

Legend:

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

x fuse intact

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

xx
xx
xx
xx
xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
---xx
xx
xx
xx
xx
-----xx
xx
xx
----xx
xx
xx
xx
--xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx
xx

El Microcomputador Bsico

186

- fuse open
475 fuses open of 2048 total.
OrCAD PLD EXPRESS
Type:
PAL16L8
*
QP20* QF2048* QV1024*
F0*
L0256 11 11 11 11 11 11
L0288 10 10 10 11 10 11
L0512 11 11 11 11 11 11
L0544 10 01 10 11 10 11
L0576 01 10 10 11 10 11
L0768 11 11 11 11 11 11
L0800 01 01 11 11 10 11
L0832 10 11 10 11 01 11
L0864 11 10 10 11 01 11
L0896 11 11 01 11 10 11
L1024 11 11 11 11 11 11
L1056 01 01 10 11 01 11
L1088 10 11 01 11 01 11
L1120 11 10 01 11 01 11
L1280 11 11 11 11 11 11
L1312 01 01 01 11 01 11
C3E74*

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

11
11
11
11
11
11
11
11
11
11
11
11
11
11
11
11

*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*

NOTE (PLD0202) 1/23/4 10:46 am (Friday)


NOTE (PLD0204) Elapsed time 4 seconds

En la figura 5.43 se muestra el circuito decodificador usando la PAL16L8 y en


la figura 5.44 se muestra el arreglo interno de fusibles para la salida CS0 del decodificador de direcciones.

Fig. 5.43 Decodificador de direcciones con PAL.

El decodificador de direcciones cuyo diagrama elctrico se muestra en la figura 5.43 no discrimina entre accesos a memoria o a puertos de E/S, por lo cual deben usarse las seales MRD y MWR para leer o escribir en el dispositivo de memoria
seleccionado.

El Microcomputador Bsico

187

I1
0 1 2 3

4 5 6 7

8 9 10 11

12 13 14 15

16 17 18 19

20 21 22 23

24 25 26 27 28 29 30 31

I2

8
9
10
11
12
13
14
15

I3

Fig.5.44. Patrn de fusibles para la salida CS0 del decodificador de direcciones.

IO2

El Microcomputador Bsico

188

5.6 CONSIDERACIONES ADICIONALES SOBRE INTERCONEXIN A LOS BUSES DEL 8085A


Todo circuito conectado a un terminal de salida del 8085A produce efectos
que pueden afectar eventualmente el funcionamiento normal del sistema microcomputador. En primer trmino, la carga total conectada a un pin de salida puede sobrecargar al terminal con consecuencias severas para el nivel lgico presente en la lnea.
En segundo lugar, la lgica usada para decodificacin introduce retardos en la propagacin de las seales, los cuales deben ser tomados en cuenta para el clculo del
tiempo de acceso de los chips de memoria a conectar al sistema. En esta seccin se
discuten brevemente ambos aspectos.
5.6.1 Carga mxima del bus del 8085A

Si el sistema est acoplado a muchos circuitos de memoria o si el C va a ser


interconectado con distintos tipos de interfaces, debe dedicarse especial atencin a la
capacidad de corriente de los terminales del P. Una lnea de salida del 8085A, cuando est en nivel alto, es capaz de entregar una corriente mxima IOH de 400 A, mientras que un terminal de salida en cero puede admitir una corriente mxima IOL de 2
mA. Si estos valores mximos son respetados, el terminal mantendr su nivel lgico.
Estas caractersticas elctricas DC fijan cuantas entradas puede guiar cada
terminal de salida del P, sin deterioro del nivel lgico de la lnea. Como ejemplo de
algunas posibilidades, las siguientes cargas pueden conectarse directamente a un pin
de salida del 8085:
1 TTL + 1 LSTTL
5 LSTTL
10 ALSTTL.

Si en una aplicacin determinada se exceden estos lmites, ser necesario el


uso de circuitos buffers para realizar la conexin de la seal sobrecargada. Lo usual es
conectar amplificadores de corriente a las lneas de direcciones y de datos, aunque en
ciertos casos puede ser necesario para alguna lneas de control, tales como RD , WR
e IO / M .
Para reforzar la capacidad de corriente del bus de direcciones/datos AD0-AD7,
puede usarse un circuito 74LS245, el cual est especialmente diseado para acoplamiento a buses bidireccionales de 8 bits. Como ilustra la figura 5.45, el circuito es
habilitado conectando la entrada G a cero. La direccin del flujo de datos es fijada
por la entrada de control de direccin DIR, a la cual se conecta la seal RD . El
74LS245 es capaz de suministrar una corriente de 15 mA (IOH) mientras que la corriente IOL es de 24 mA.

El Microcomputador Bsico

189

Fig. 5.45 Conexin de guiadores de bus al 8085A

Para incrementar la carga permisible por las lneas de la parte ms significativa del bus de direcciones (A8-A15) se recurre a un 74LS244, el cual permanece permanentemente habilitado, al aplicarse un nivel bajo a las entradas de seleccin
1G y 2G . La capacidad de corriente en nivel bajo de las salidas del chip, son idnticas
a las del 74LS245.

El Microcomputador Bsico

190

El 74LS373, usado para separar el byte bajo de direcciones del bus multiplexado AD0-AD7, puede entregar una corriente de 400 A y drenar 8 ma. Esto hace
innecesario el uso de buffers adicionales para las lneas de direcciones A0-A7.

5.6.2 Seleccin de la memoria del sistema

Es importante escoger el dispositivo de memoria que, teniendo costo de adquisicin menor, cumpla con las restricciones de tiempo impuestas por el 8085A sin
que sea necesaria la introduccin de estados de espera. En principio, considere un
ciclo de lectura tpico para una memoria ROM o WRM, ilustrado en la figura 5.46
DIRECCIONES

CS

tCE

OE

tAC tOE
D0-D7

DATO

Fig. 5.46 Ciclo de lectura caracterstico de una memoria ROM o RWM.

Los tiempos indicados son mximos y pueden considerarse como medidas de


la velocidad de la memoria. Estos lapsos se definieron para la EPROM 2716, como:
tACC retardo entre aplicacin de una direccin estable y la salida del dato.
tCE retardo entre la seleccin del chip y la salida del datos.
tOE retardo entre la habilitacin de lectura y la salida del dato.

Para la seleccin de la memoria los tiempos tACC, tCE y tOE deben comparase con
los lapsos permitidos por el P para que el dispositivo externo coloque el dato en el
bus. Estos tiempos se muestran en la figura 5.47.

CLK

A8-A15

tAD
Dato

AD0-AD7
ALE

RD

Fig. 5.47 Ciclo de lectura del 8085A.

tRD

El Microcomputador Bsico

191

Los tiempos a considerar son:


tAD: tiempo del cual dispone un dispone un dispositivo externo para cargar un dato vlido en
el bus de datos, medido a partir de la presentacin de una direccin vlida en las lneas
de direcciones.
tRD: lapso permitido desde la activacin de la seal RD , hasta la colocacin de un dato vlido en el bus.

En la figura 5.48 se muestra un diagrama de conexin entre un 8085A y un


dispositivo de memoria. Se considera que las seales de control estn acopladas por
medio de buffers.
DAD

8085A

SRWM

AD0-AD7

D0-D7
A0-A7

373

A8-A15

ALE

DCS

DB
A8-A15

CS
OE WR

IO / M

DB

DL

WR
RD

Fig. 5.48 Sistema C con acopladores de bus.

Para establecer la correspondencia entre los tiempos disponibles por la memoria para la transferencia del dato y los retardos debidos a los componentes internos de
la memoria, deben tomarse en consideracin los tiempos de propagacin de la lgica
de decodificacin y de los acopladores de bus.
Los tiempos de propagacin a considerar son los siguientes:

El Microcomputador Bsico

DB:
DAD
DCS
DL

192

retardo de los buffers de las lneas direcciones y control.


de los acopladores del bus de datos.

del decodificador de direcciones.

de la lgica de generacin de OE y WR .

Para calcular el tiempo de acceso disponible por la memoria, se usa la expresin:


t disponible por la memoria = t 8085 D i
Como la seal de seleccin de circuito CS es generada directamente por lgica combinatoria cuyas entradas son las lneas de direcciones, los tiempos de inters
son tAD y tRD.
tAD memoria = [tAD 8085 + tCAPB] [DB + DCS + DAD]
tRD memoria = [tRD 8085 + tCAPB] [DB + DL + DAD]

Los valores especificados para tAD y tRD en la hoja de datos del fabricante del
8085, consideran una capacidad de carga CL mxima. El uso de buffers para acoplamiento al bus, reduce notablemente esta carga capacitiva y mejora los tiempos de
transicin de las seales. El termino tCAPB, con un valor tpico de 15 ns, es un factor de
correccin para los datos y se denomina ganancia de transicin por acoplamiento.
5

+ N T 225 +15] [DB + DCS + DAD]


2

ns

+ N T 180 + 15] [DB + DL + DAD]


2

ns

tAD memoria = [

tRD memoria = [

Sin estados de espera y fclk = 3.125 Mhz


tAD memoria = 590 [DB + DCS + DAD]

ns

tRD memoria = 315 [DB + DL + DAD]

ns

Los retardos no especificados se obtienen de la hoja de especificaciones de los


circuitos. Calculados los tiempos de acceso de la memoria, se comparan con los correspondientes al P para establecer que existe compatibilidad. En caso contrario
existen dos opciones: si la diferencia es pequea, se puede redisear la lgica para
evitar que se superen los retardos mximos; o se sustituyen las memorias por otras de
mayor velocidad.

El Microcomputador Bsico

193

5.7 MEMORIAS EEPROM Y FLASH


Hasta hace pocos aos, el dispositivo de memoria ms usado para contener el
cdigo de una aplicacin de sistemas empotrados fue la EPROM. La desventaja principal de estas memorias es que cuando era necesario actualizar el programa o los datos, se deba retirar el circuito de memoria del circuito impreso, exponerla a la luz
ultravioleta para borrarla por completo, utilizar un quemador de EPROMs para regrabarla y finalmente reinsertarla en la tarjeta de la aplicacin. En sistemas que requeran la actualizacin peridica de datos se usaba un dispositivo SRAM con una pila
auxiliar para retener la informacin en ausencia de la alimentacin principal.
Un nuevo tipo de memoria conocida como flash, mantiene su contenido en
ausencia de energa y adems permite actualizar el cdigo y los datos con el dispositivo conectado al sistema (ISP:In System Programming). Existe un amplio rango de
aplicaciones de sistemas empotrados donde las memorias flash son usadas para almacenamiento informacin. Estas aplicaciones incluyen telfonos celulares, control de
motores de automviles, unidades de reconocimiento de voz independiente del
hablante y funciones activadas por voz. En estas dos ltimas categoras, existe un
modo de programacin del equipo en el cual el usuario programa comandos de voz
que deben ser almacenados en una memoria no voltil para ser recuperados posteriormente y comparados con la entrada de voz en cualquier momento. Estos patrones
de voz pueden ordenar el encendido o apagado de equipos o el marcado de un nmero
telefnico.
Las flash tambin se usan en sistemas que requieren preservar informacin en
caso de interrupcin del suministro de potencia de la red. Durante tal evento el procesador mueve el cdigo y/o datos contenidos en una memoria voltil a la flash. Una
vez reintegrada la energa el sistema contina en el estado presente antes de la interrupcin.
Aunque las memoria tipo flash son de relativamente reciente aparicin, estos
dispositivos pueden considerarse como una mejora del diseo de las PROM elctricamente borrables o EEPROM (Electical Eraseable Programmable Read Only Memory) inventadas al inicio de dcada de los ochenta. Un dispositivo EEPROM tpico
puede borrarse en 10 ms y el ciclo de escritura tiene una duracin de 10 ms. En una
EPROM estos lapsos son de 30 minutos y de 50 ms respectivamente. Otra ventaja
resaltante es que es posible rescribir el contenido de una o algunas posiciones, al contrario de las EPROMs que debe ser regrabadas totalmente aunque slo deba modificarse un byte.
Una memoria EEPROM con caractersticas muy mejoradas con respecto a las
primeras, es el circuito integrado de cdigo X28C64 con capacidad de 8 K x 8 e introducida por la empresa Xicor en el ao 1991. El tiempo de acceso del dispositivo
esta comprendido entre 150 ns y 250 ns dependiendo de la versin y es tan sencilla de
utilizar como una memoria RWM. Aunque en las primeras EEPROM solo se poda

El Microcomputador Bsico

194

escribir un byte a la vez, la X28C64 acepta la escritura de pginas de 64 bytes. En la


figura 5.49 se muestra el diagrama funcional de la memoria. Observe la similitud con
una RWM.

Fig. 5.49 Diagrama funcional de la X28C64

Una EEPROM tiene garantizado un nmero limitado de ciclos de escritura y


un tiempo mximo de retencin de los datos almacenados. Una X28C64 retiene los
datos por 100 aos y soporta 100 mil ciclos de grabado, lo cual significa que si el
diseo se hizo para 20 aos pueden hacerse 13.7 reescrituras por da.
Debido a que en los sistemas empotrados no existen medios de almacenamiento masivo como discos, las EEPROM son adecuadas para aquellas aplicaciones
que requieren la retencin de informacin. Por el lmite de ciclos de escritura y por su
lento tiempo de acceso, las memorias EEPROM han tenido un espectro limitado de
aplicaciones. Por aos han sido utilizadas como memoria de canales en sintonizadores de televisin, como sustituto de arreglos de interruptores de configuracin y para
almacenamiento de constantes de calibracin
Existen EEPROMs de acceso serie como el chip ST93C56 con capacidad de
256 x 8 bits y un milln de ciclos de escritura la cual se presenta en un encapsulado
de 8 terminales la cual puede usarse para almacenar por largo tiempo pequeas cantidades de datos. Por ejemplo el circuito ST93C56 puede usarse en un registrador de
llamas telefnicas para almacenar y retener el nmero y el tiempo de duracin de las
llamadas realizadas en un periodo determinado. Para acceso a este tipo de memoria se
establece un lazo serie de comunicacin con el dispositivo simulando un UART. La
memoria tiene una entrada de reloj que permite sincronizar el envo de comandos y

El Microcomputador Bsico

195

datos al chip. En la actualidad, estn disponibles EEPROMs para conexin I2C con
mayores capacidades. Por ejemplo la 24LC512 almacena hasta 64Kbytes.
Para interconectar una EEPROM a un sistema no se requieren tcnicas distintas a las explicadas antes. El chip se conecta como una memoria RWM convencional,
aplicndole el pulso de escritura WR o MWR , si es necesario. La sustitucin de la memoria voltil SRAM de datos del sistema por una EEPROM no es una buena idea. El
tiempo de acceso de una SRAM esta entre 15 ns-25 ns mientras que el acceso a una
EEPROM puede durar entre 100 ns a 250 ns. Al contrario es una excelente idea lo que
hicieron los diseadores del microprocesador PopCorn. En un sistema basado en este
procesador el cdigo reside en una EEPROM/Flash y durante el arranque es cargado
en una memoria SRAM, de modo que se puede incrementar la frecuencia del reloj del
sistema sobre el valor requerido para ejecutar el cdigo desde la memoria no voltil.
Una EEPROM/Flash puede sustituir a una EPROM para el almacenamiento
del cdigo de la aplicacin, pero si se usa ISP deben tomarse algunas previsiones y el
procedimiento de sustitucin no es tan directo. En un sistema empotrado capaz de
realizar ISP se entiende que un computador anfitrin puede descargar cdigo en la
memoria no voltil usando un canal de comunicacin, usualmente un UART, o cualquier otro que soporte el sistema. El problema es si existe la posibilidad de borrar o
escribir sobre el mismo circuito integrado que contiene el cdigo que se est ejecutando. Si las rutinas de arranque del CPU y los algoritmos de programacin (cdigo
cargador de ISP) comparten la misma memoria EEPROM/Flash, esta no estar disponible durante ISP. En la prctica es virtualmente imposible realizar ISP de una
memoria bajo el control del procesador en un sistema empotrado que contenga slo
una memoria EEPROM/Flash. El cdigo ISP debe ejecutarse desde una memoria
independiente.
Aunque las tecnologas de fabricacin de memorias EEPROM y flash son
convergentes, cada una de estas es diseada con propsito diferente. Las memorias
flash fueron creadas originalmente como reemplazo de medios de almacenamiento
masivo como discos flexibles y duros. De modo que son diseadas para capacidad
mxima, consumo de potencia mnimo y un gran nmero de ciclos de escritura. La
informacin cargada en una flash se escribe usualmente por bloques en lugar de por
bytes.
Las EEPROM se inventaron para mantener informacin de configuracin o
para permitir reprogramar dispositivos integrados programables. Generalmente tienen
capacidades de kilobits en contraposicin a los megabits de las memorias flash y son
escritas byte por byte o por pginas pequeas. Normalmente, soportan pocos ciclos de
escrituras debido a que fueron diseadas para ser actualizadas ocasionalmente en lugar de estar sometidas a continuas actualizaciones. Algunos diseos de memorias no
voltiles modernas utilizan la ms nueva tecnologa de fabricacin de flashs para proporcionar a una vida ms larga y mayores capacidades y densidad. Como resultado,
se obtienen chips con caractersticas semejantes a las EEPROM, atenuando de esta

El Microcomputador Bsico

196

forma las distinciones entre las dos categoras. Por ejemplo las flash serie son desde
el punto de vista del sistema ledas y programadas byte por byte como una EEPROM
convencional.
Aunque la lectura de una memoria elctricamente borrable se realiza como si
se tratase de una EPROM o SRWM convencional, cuando deben realizarse operaciones como borrado, escritura de datos o proteccin de segmentos de memoria contra
reescrituras no autorizadas., el procesador debe usar el algoritmo de programacin
proporcionado por el fabricante para el dispositivo. Bajo el control de este algoritmo
pueden enviarse comandos a la memoria para indicarle que debe permitir la entrada
de datos y toda tarea asociada con la programacin. En la figura 5.50 se muestran dos
modelos de programacin de una memoria flash.

Fig. 5.50 Algoritmos de programacin

Es usual que versiones de microcontroladores de los principales fabricantes se


presenten con alguna cantidad de memoria flash interna para permitir el desarrollo de
prototipos. Si la empresa produce versiones del controlador con flash y con ROM, el
diseador puede usar la versin con flash para el prototipo y la que contiene ROM
para la produccin final de la aplicacin. Un problema intrnseco es que el tiempo de
acceso de la flash puede afectar la velocidad del sistema integral.
Por otra parte, la capacidad de la flash integrada con el CPU es usualmente de
hasta 32 Kbytes, tamao que puede considerarse adecuado para la mayora de las
aplicaciones. No obstante, existen proyectos donde: o se usa compiladores C para
desarrollo del programa o por su naturaleza deban acceder a cantidades de memoria
muy superiores a la sealada. Por ejemplo, las cmaras digitales requieren muchos
megabytes para almacenar las imgenes y un sistema de reconocimiento de voz puede necesitar megabyte para retener los patrones de reconocimiento de voz. Tales
sistemas no pueden ser realizados con microcontroladores con memoria flash interna
debiendo usarse dispositivos de memoria externos para satisfacer las especificaciones.

El Microcomputador Bsico

197

Una memoria flash de 512 K x 8 bits es la Am29F040 el cual es un dispositivo


con acceso por sectores de 64 Kbytes y con tiempo de acceso mximo de 55 ns. La
figura 5.51 muestra el smbolo lgico del chip. Observe que la interconexin a un
sistema 8085A es directa, Por ejemplo pueden usarse 32 Kbytes conectando slo las
lneas de direcciones A0-A14 y dejando las restantes desconectadas.

Fig. 5.51 Memoria flash Am0F040 de 4 Mbits.

5.8 BANCOS DE MEMORIA


Aunque algunos microcontroladores modernos pueden tener acceso a un espacio de memoria externo de por ejemplo 2 Mbytes (PIC18C252), en los microprocesadores tpicos de 8 bits el ancho de 16 bits del bus de direcciones impone un lmite de
64K bytes al nmero de posiciones que el procesador puede usar para almacenar cdigo y datos. Por muchos aos las aplicaciones de sistemas empotrados de media y
baja complejidad exigieron capacidades de memoria que estaban muy por debajo de
este tope. En ese tiempo, la frontera de los 64Kbytes pareca demasiado lejana para
ser rebasada por las aplicaciones con Ps.
En la actualidad, la existencia de compiladores C para la mayora de los Ps y
Ctrls en el mercado, ha hecho posible el desarrollo de aplicaciones de tal complejidad que hubiese sido una fantasa pensarlas en programarla en lenguaje ensamblador,
herramienta bsica de trabajo para los programadores de sistemas empotrados hasta
hace pocos aos. De hecho, los diseos modernos con Ps de complejidad media
pueden requerir desde 64 K hasta 256 Kbytes de espacio de memoria.
Pareciera que la solucin ante esta situacin es apelar a los modernos Ctrls o
a un P de 16 bits como el 8088 o el 80188, con accesos a memoria de hasta 1 Mbyte.
Sin embargo, en el mundo real, no siempre la solucin ante esta disyuntiva es tan
sencilla. Considere por ejemplo que se debe actualizar un sistema basado en un P
antiguo de 8 bits. Si se elige la opcin sealada posiblemente el programador se en-

El Microcomputador Bsico

198

frentara al hecho de rescribir decenas de miles de lneas de cdigo. El costo del desarrollo del nuevo software puede ser tan alto que una decisin sabia puede ser mantener el mismo CPU, aunque puede ocurrir que la actualizacin del cdigo produzca un
programa de un tamao tal que rebase la capacidad de direccionamiento del P.
Por otro lado, existen aplicaciones cuyos requerimientos de diseo pueden ser
de tal magnitud que rebasen las capacidades de los microcontroladores disponible.
Estos usualmente tienen 6 puertos de E/S (48 lneas si no se usan algunos recursos
como el CAD y el UART) y si se usa memoria externa hay que sacrificar algunos de
estos para convertir al chip en un microprocesador. Por ejemplo, considere el desarrollo de un sistema que ejecuta operaciones de E/S sobre 80 dispositivos tales como
sensores, cmaras de TV, lasers, modem, motores y un espectrmetro de rayos X.
adems el sistema debe ejecutar 12 experimentos cuyos resultados ser vitales para el
avance de una determinada tecnologa de punta. Suponga adems que el cdigo de la
aplicacin para el control de E/S y los experimentos ocupa 16 Kbytes de PROM, 160
Kbytes de EEPROM y 576 Kbytes de RWM. Especificaciones adicionales indican que
el P debe ser de bajo consumo e inmune a la radiacin csmica.
El prrafo anterior describe a un sistema empotrado de gran complejidad con
tales especificaciones que no pueden ser satisfechas por ningn microcontrolador
estndar, a menos que ste se configure para operar como microprocesador con memoria externa y circuitos programables para interconexin de E/S. Acepto que este es
un ejemplo extremo, pero este problema tuvo que resolverlo en Laboratorio de Propulsin de Jets (JPL) de la NASA durante la preparacin de parte de la misin a Marte lanzada el 4 de julio de 1997 y conocida como Pathfinder; especficamente durante
el diseo del sistema de control del vehculo autnomo explorador Sojouner
Los diseadores del JPL seleccionaron el P de 8 bits 80C85 (versin moderna del 8085) como CPU del sistema microcomputador de control del Sojouner. El
programa se organiz como un lazo nico de control con soporte de interrupciones
para eventos ante los cuales el explorador deba reaccionar rpidamente. Esta arquitectura del sistema de control responde al hecho que el vehculo no tena suficiente
energa para hacer dos cosas a la vez. Por ejemplo no poda moverse activando los
motores de las ruedas y a la vez comunicarse usando el modem de radiofrecuencia.
Ante este modo de operacin, la NASA no vislumbro ventaja alguna en el uso
de un sistema de control multitarea de tiempo real que ms bien podra deteriorar el
funcionamiento del sistema. El 80C85 fue programado usando un compilador C de un
paquete de desarrollo adquirido por la NASA y algunas herramientas de software descargadas de Internet. Este P aparece frecuentemente en diseos de instrumentos y
controles en el rea de navegacin espacial. Muchas opiniones sealan que esto se
debe a la inmunidad del 80C85 ante los rayos csmicos y a su bajo consumo de potencia.
En todo caso tenemos dos situaciones, la segunda quizs algo extrema, en las
cuales el tamao del programa de una aplicacin basada en un P de 8 bits, excede la

El Microcomputador Bsico

199

capacidad del espacio de memoria accesible por el procesador. Debido a que el lmite
de 64 Kbytes lo impone el hecho que el P slo tiene 16 lneas de direcciones, si se
suman bits extras de direcciones es posible aumentar la capacidad de acceso a memoria. Estas nuevas lneas se conectan a los bits de direcciones de orden alto de los circuitos de memoria del sistema. Por ejemplo, usando lgica externa para generar los
bits A16 y A17, se incrementa el espacio de memoria a 256 Kbytes (218).
Al aumentar en dos las lneas de direcciones se tiene 256 Kbytes de memoria
fsica (real) y slo 64 Kbytes de memoria lgica cuyas direcciones son generadas por
el procesador. Como indica la tabla 5.21, el espacio de memoria puede verse como 4
bancos de 64Kbytes cada uno con iguales direcciones lgicas pero direcciones reales
distintas. Cuando el programa hace referencia a una posicin de la memoria, el estado
de los bits A17 y A16 establecer a cual banco corresponde la direccin. En otras palabras, cuando se haga referencia a una direccin de memoria lgica, el hardware externo de mapeo debe redirigir la llamada o salto una direccin fsica especfica.
Tabla. 5.21. Direcciones fsicas y lgicas y mapa de memoria
para un sistema con 256 Kbytes de EPROM.
DIRECCIN
Banco A17 A16
FSICA
LGICA
0
0
0
00000-0FFFFH
0000-FFFFH
1
0
1
10000-1FFFFH
0000-FFFFH
2
1
0
20000-2FFFFH
0000-FFFFH
3
1
1
30000-3FFFFH
0000-FFFFH

Fig. 5.52 Direcciones fsicas y lgicas y mapa de memoria para un sistema con 250 Kbytes de memoria de programa.

Una direccin de 17 bits de la memoria sistema, puede especificarse como


B00:7FFFH o B10:7FFFH. Donde Bxx indica el banco al cual pertenece la posicin
seleccionada y 7FFFH ser la direccin de desplazamiento en el banco. Una direccin
fsica viene dada por la expresin:
0
Dir Fsica = (N banco Tamao del banco) + Desplazame int o
Para B10 : 7FFFH
Dir Fsica = (2 10000H) + 7FFFH
Dir Fsica = (2 10000H) + 7FFFH
Dir Fsica = 27FFFH

El Microcomputador Bsico

200

No existe limitacin alguna para disear un subsistema de memoria como el


descrito. Puede usarse dos bits de un puerto de salida para las lneas extras de direcciones y cdigo adicional para conmutar los bancos. No obstante, existen algunas
consideraciones de orden prctico que deben hacerse al momento de definir el mapa
de memoria de una aplicacin real. En principio el sistema con el mapa de la figura
5.52 no tiene memoria de lectura/escritura y los programas tpicos adquieren variables externas o generan valores locales que deben almacenarse en una memoria de
datos, la cual adems soporta la pila del sistema permitiendo la codificacin de subrutinas y la gestin de interrupciones.
De modo que para disear un sistema con bancos de memoria conmutados debe realizarse un anlisis detenido de las necesidades de memoria de cdigo y de datos
y decidir o cul de ests es la que requiere el uso de bancos. Considere ahora el mapa
de memoria de la figura 5.53, el cual pertenece a un sistema con una memoria SRWM
de 32 Kbytes y un rea de cdigo de 32Kbytes que ser mapeada a 4 pginas en un
dispositivo de 128 Kbytes. La memoria de datos, en este caso, es un rea comn (sin
bancos) que es visible desde cualquiera de los bancos.

Fig. 5.53 Mapa de memorias con cuatro bancos de EPROM.

La memoria de cdigo consiste de un dispositivo EPROM MBM27C1000 de


128 Kbytes, el cual debe ser accedido como cuatro bancos de 32 Kbytes cada uno; y
una memoria voltil de 32 Kbytes tipo MBM6256AFP. Para el diseo del subsistema
de bancos de memoria, observe que del mapa de memoria de la figura 5.53 se deduce
que la lnea de direccin A15 estar en nivel alto para cualquier posicin dentro del
rango de la SRWM y en estado cero para cualquier direccin lgica de la EPROM. Es
posible entonces, usar esta lnea de direccin (A15) para seleccionar la EPROM y su
complemento A 15 , para habilitar la memoria la SRWM.
Los bits A0-A14 del P se conectan las entradas de direcciones de la EPROM y
de la SRWM. Para tener acceso a 128 Kbytes desde el espacio lgico de 32 Kbytes
asignado a cdigo, se debe generar un bit de direccin adicional A16 (217=128K) el
cual debe conectarse al terminal A16 de la EPROM. Pero como usamos la lnea A15
del microprocesador para seleccionar los circuitos de memoria, tambin debemos

El Microcomputador Bsico

201

generar una nueva lnea A15 para la EPROM, que se aplica a la entrada A15 de la
MBM27C1000.
La razn de esto es que cada vez que se tiene acceso a la EPROM, A15 estar
en cero, de modo que si la conectamos directamente al la memoria de cdigo slo se
tendr acceso al banco 0. La tabla siguiente muestra el estado de los bits de seleccin
de banco XA16 - XA15, de las lneas de direccin de la EPROM A16 - A15 y del terminal A15 del P, para cualquier posicin de la memoria de programa.
Tabla. 5.22 Tabla de estados de la memoria EPROM.
Banco
0
1
2
3

XA16
0
0
1
1

XA15
0
1
0
1

A16
0
0
1
1

A15
0
1
0
1

A15
0
0
0
0

DIRECCIN
FSICA
LGICA
00000-7FFFFH
0000-7FFFH
08000-0FFFFH
0000-7FFFH
10000-17FFFH
0000-7FFFH
18000-1FFFFH
0000-7FFFH

Para generar los nuevos bits de direcciones se usa un puerto de salida y algunas puertas como se observa en el diagrama elctrico de la figura 5.54. El puerto de
salida se realiza con un latch 74LS175, cuyas salidas son puestas a cero por la seal
RESET-OUT, durante el arranque del sistema. La memoria RAM es seleccionada con
direcciones lgicas entre 8000H y FFFFH. Cualquier direccin por debajo de este
rango, habilita el circuito mapeador externo y selecciona una posicin de memoria en
una de las pginas de 32Kbytes, dependiendo del valor de XA15-16.
Cuando se disea un subsistema de memoria usando la tcnica de conmutacin de bancos, deben realizarse previsiones para que ciertas reas de memoria de
cdigo y de datos no desaparezcan cuando se selecciona un banco. Esto significa que
el diseo debe hacerse para que exista una regin de memoria de programa y otra de
memoria de datos que sean visibles desde cualquier banco. Estas zonas se denominan
reas comunes de cdigo o de datos. Algunos prefieren llamarlas rea de cdigo del
sistema o rea de datos del sistema.
Por ejemplo, la seccin de memoria asignada al rea de la pila debe estar disponible para acceso desde cualquier banco para las llamadas y retornos a y desde subrutinas. Es necesario, adems, que exista alguna cantidad de memoria de programa
comn donde debe cargarse por ejemplo las rutinas que controlan la conmutacin de
los bancos. Las secciones de cdigo mencionadas a continuacin deben siempre residir en el rea comn:

Vectores de reset y de interrupcin: debido a que el reset e interrupcin


del P son eventos asincrnicos y pueden ocurrir cuando est seleccionado cualquiera de los bancos de cdigo, los vectores de reset y de interrupciones deben residir en el rea comn.

El Microcomputador Bsico

Fig. 5.54 Subsistema de memoria con bancos conmutados

202

El Microcomputador Bsico

203

Constantes y tablas: si un banco contiene valores constantes y tablas definidas por el cdigo, debe garantizares que esa pgina sea seleccionada en
el momento que esta informacin sea invocada por el programa. En caso
contrario estas constantes y tablas deben almacenarse en el rea comn.
Rutinas de conmutacin de bancos: esta seccin del programa as como la
tabla de saltos debe localizarse en el rea comn por ser necesarias para
todos los bancos.
Funciones de bibliotecas: las rutinas de bibliotecas usadas por el compilador en tiempo de ejecucin deben cargarse en el rea comn.
Algunos ensambladores y compiladores C incorporan soporte para conmutacin de bancos. Los programas enlazadores asociados generan automticamente el
cdigo y la informacin de mapeo necesaria para ejecutar programas con bancos. El
enlazador crea una tabla de saltos para todas las funciones almacenadas en el rea de
bancos y que son llamadas desde el rea comn o de otros bancos. Normalmente el
vendedor del software entrega un pequeo mdulo de cdigo el cual realiza la conmutacin a y desde bancos. Normalmente las instrucciones CALL, JMP, RET y sus
formas condicionales estn sujetas a remapeo cuando se ejecutan. Algunos paquetes
de desarrollo no incluyen acceso a bancos de datos, por lo cual stos deben ser manejados por el programa.
La aplicacin que usa la tcnica de conmutacin de bancos debe incluir el
mdulo fuente que contiene el cdigo que es invocado para la conmutacin de los
bancos. Este archivo debe ser configurado para que se corresponda con la tcnica de
conmutacin usada por el hardware, especificando el nmero de bancos y como son
seleccionados. Por ejemplo debe especificarse el nmero del puerto de la lgica de
conmutacin y el estado de los bits de seleccin para cada banco. El enlazador adems tiene directivas de control para especificar la localizacin y tamao de los bancos
y para asignar determinados mdulos del programa al rea de un banco o al rea comn.
Una omisin en el modo de operacin del circuito de manejo de memoria de
la figura 5.54, es que no proporciona una seccin para el rea comn de cdigo en el
espacio de la EPROM. La solucin es que debe indicarse en tiempo de compilacin,
cuales mdulos del programa deben residir en el rea del sistema. El programa enlazador entonces copia el cdigo y los datos almacenados en esta zona en cada banco,
de modo que el contenido de todos los bancos de EPROM es el mismo en el rango de
direcciones del rea comn.
Para evitar la duplicacin del cdigo comn, debe redisearse el manejador de
memoria para asignar por hardware el rea comn. Para esto considere que el tamao
de esta zona es 16 Kbytes (0000H-03FFFH) como ilustra el mapa de memoria de la
figura 5.55. El espacio de EPROM en el rango 40000H-7FFFH ser redirigido a uno

El Microcomputador Bsico

204

de ocho bancos de 16 Kbytes, usando para seleccionarlos tres bits XA14-16 de un puerto de salida.
Como muestra la figura 5.56 Las lneas de direcciones A0-A13 se conectan a
las entradas correspondientes de la EPROM. Cuando A15 es igual a cero se selecciona
la EPROM y se puede tener acceso a uno de ocho bancos de 16 Kbytes, dependiendo
del estado de los bits A14, A15 y A16 que se conectan a las tres lneas orden alto de
las entradas de direcciones del dispositivo.

Fig. 5.55 Mapa de memorias con rea comn de cdigo y siete bancos de EPROM.

Aunque algunos compiladores no soportan bancos para el rea de datos no


existe razn alguna para que la tcnica de conmutacin de bancos sea aplicada a la
memoria SRWM del microcomputador. El proceso de diseo de un mapeador para la
RAM se realiza exactamente igual a como se hizo para la memoria de cdigo.

El Microcomputador Bsico

Fig. 5.56 Subsistema de memoria con rea comn de cdigo.

205

Introduccin a la Programacin del 8085A

206

Programacin del 8085


En el captulo anterior se establecieron las bases mnimas para el diseo de un
sistema microcomputador mnimo. En este captulo, se presenta el conjunto de instrucciones del microprocesador 8085A, y se describe como usarlo para realizar procesamiento de informacin.
El P ejecuta una secuencia de instrucciones de mquina que define las operaciones a realizar. Basndose en las instrucciones, el P puede realizar tres tareas bsicas:
1. Mover datos desde una posicin de memoria a otra.
2. Usar la ALU para ejecutar operaciones matemticas y lgicas.
3. Tomar decisiones, y basarse en los resultados para transferir el control del programa hacia
un nuevo conjunto de instrucciones.

Aunque es posible, y en ocasiones conveniente, el uso de lenguajes de alto nivel para la escritura de los programas de aplicacin, para introducir al lector en la
programacin del 8085A se usar el lenguaje ensamblador. Para escribir programas
eficientes en ensamblador, el usuario debe conocer a la perfeccin:
Las funciones de los registros y la forma en que estn organizados en el interior del P.
El repertorio de instrucciones del P y
Los modos de direccionamiento.

207

Introduccin a la Programacin del 8085A

6.1 EL MODELO PARA PROGRAMACIN


Aunque un microcomputador construido alrededor del P8085, o de cualquier
otro P, comprende un nmero de unidades funcionales distintas y de complejidad
variable, las cuales estn interconectadas a los buses del microprocesador; para programar el sistema, es suficiente considerar inicialmente un modelo que represente los
recursos a la disposicin del programador.

8085A

D0-D7

A0-A15

Fig. 6.1 Modelo del microcomputador para programacin.

Los registros internos a los cuales se permite acceso al usuario constituyen el


modelo bsico de programacin del microprocesador. En la figura 6.1 se presenta un
diagrama de la estructura interna del P y de los componentes externos asociados que
integran al C. Los elementos del modelo se presentan tal como se perciben desde la
ptica de un programador. Los registros buffers de datos y de direcciones no forman
parte del modelo.
El modelo para programacin est constituido por varios registros de 8 bits,
tales como el acumulador (A), el registro de banderas o de estado, y el banco de re-

208

Introduccin a la Programacin del 8085A

gistros de propsito general (B,C,D,E,H,L); y dos registros de 16 bits: el contador de


programa y el apuntador de pila. El microcomputador tiene una memoria para instrucciones y datos con una capacidad de 64Kbytes y 512 puertos de E/S. Para efectos
de programacin, la conexin real entre el P, la memoria, y los puertos de E/S del
sistema pueden considerarse transparentes para el programador.

6.2 FORMATO DE LAS INSTRUCCIONES


Para ejecutar un programa, el microprocesador debe obtener el cdigo ejecutable y trasladarlo en secuencia al registro de instrucciones del microprocesador. Las
instrucciones y los datos del programa son obtenidos desde la memoria del sistema.
Esta almacena la informacin en palabras con formato de ocho bits.
De acuerdo con su tipo, cada instruccin puede ocupar uno, dos o tres posiciones en el interior del dispositivo de memoria. Por ejemplo, la instruccin aritmtica ADD r, realiza la suma del contenido del registro r y el dato depositado en el
acumulador, cargando el resultado de la operacin en el mismo registro acumulador.
Se requiere un byte para definir completamente la instruccin.
La instruccin MVI r, dato, mueve el valor especificado por el operando dato
al registro r, necesitndose dos bytes para especificar la instruccin. El primero para
el cdigo de operacin, y el otro para representar el dato a ser almacenado en el registro. Una instruccin JMP direccin produce un salto incondicional a la direccin especificada, y es una instruccin de tres bytes porque requiere dos palabras adicionales
al cdigo de operacin, para especificar la direccin del salto.

En la figura 6.2 se muestra el formato general para las instrucciones del 8085.

Instruccin de un
byte

Cdigo de operacin

Instruccin de
tres bytes

Dato o byte de una direccin de memoria


Byte de una direccin de memoria

Fig. 6.2 Formato de instrucciones del P 8085.

Instruccin de
dos bytes

209

Introduccin a la Programacin del 8085A

NOMENCLATURA PARA EL CONJUNTO DE INSTRUCCIONES:


Para facilitar la comprensin de las instrucciones del 8085 se presenta, en la
tabla 6.1, la simbologa usada por la empresa INTEL para las instrucciones.

Tabla. 6.1. Nomenclatura de las instrucciones del 8085.


SMBOLO
SIGNIFICADO
direccin
Expresin binaria de 16 bits.
Dato
Expresin binaria de 8 bits.
dato 16
Expresin binaria de 16 bits.
Puerto
Direccin de 8 bits de un dispositivo de E/S
r,r1.r2
Uno de los registros: A, B, C, D, E, H, L
DDD, SSS
Representacin de 3 bits del cdigo de operacin donde algunos de los registros: A,
B, C, D, E, H, L es destino (D) o fuente (S) de informacin. (Vea tabla 2)
Rp
Cada pareja de registros B-C, D-E, H-L. El registro B representa el par B-C, D al par
D-E, mientras que H representa al registro par H-L. (Vea tabla 3)
XX
Cdigo de las banderas en instrucciones de salto condicional. (vea tabla 4)
NNN
Nmero binario entre 000 y 111.
N
Nmero decimal entre 0 y 7.
Rh
El byte alto de mayor peso de un registro par.
Rl
El byte menos significativo de un registro par.
PCH y PCL Bytes de mayor y menor peso del contador de programa.
M
Referencia a memoria
PSW
Palabra de estado del programa. Consiste del contenido del acumulador ms las banderas de condicin.

(a)
Registro

DDD o
SSS

Registro
par

rp

A
B
C
D
E
H
L

111
000
001
010
011
100
101

BC
DE
HL
SP

00
01
10
11

(b)

(c)

Condicin
(XX)
NZ no cero
Z cero
NC sin acarreo
C con acarreo
PO Paridad impar
PE paridad par
P positivo
M negativo

CCC

(Z=0)
(Z=1)
(CY=0)
(Z=1)
(P=0)
(P=1)
(S=0)
(S=1)
(d)

000
001
010
011
100
101
110
111

Introduccin a la Programacin del 8085A

210

6.3 MODOS DE DIRECCIONAMIENTO


Especifican la manera en que las instrucciones del microprocesador 8085A
obtienen los datos a los cuales hacen referencia. Un modo de direccionamiento particular establece el procedimiento utilizado por el microprocesador para obtener un
dato necesario para la ejecucin de la instruccin. Este valor puede estar en la memoria del sistema, en un registro o puede ser especificado por un operando de la propia
instruccin.
Por ejemplo, ADD r y ADD M son ambas instrucciones que ejecutan una
suma, con uno de los operandos almacenado en el acumulador. El modo en el cual la
instruccin obtiene el segundo elemento de la operacin, establece una diferencia
entre estas dos instrucciones. En un caso, el valor es obtenido desde un registro r,
mientras que en el segundo caso se encuentra en la posicin de memoria especificada
por el contenido del registro par HL.
Para la escritura de programas eficientes es necesario entender con claridad
los distintos modos de direccionamiento que puede utilizarse con cada instruccin del
P. En general, la potencia de cmputo de un determinado P est determinada por el
nmero de modos de direccionamientos disponibles.
Las instrucciones del 8085A tienen cuatro modos de obtener los datos:
Direccionamiento directo.
Direccionamiento por registro.
Direccionamiento indirecto por registro.
Direccionamiento inmediato.

6.3.1 Direccionamiento directo


La instruccin indica en forma explicita la direccin de la posicin de memoria donde est el dato. Este modo corresponde a instrucciones de tres bytes, donde el
segundo indica los 8 bits de menor peso de la direccin, mientras que el tercer byte
corresponde a los 8 bits de mayor peso de la direccin donde est el dato.
Suponga que una instruccin STA 2045H est almacenada en la direccin
2000H de la memoria del sistema. Esta instruccin realiza la operacin de mover el
contenido del acumulador a la direccin de memoria especificada por los bytes 2 y 3
de la instruccin, esto es [(byte 3) (byte2)], (A).
La figura 6.3a muestra como se almacena la instruccin en memoria, y la figura 6.3b presenta el contenido del dispositivo de memoria despus de ejecutarse la
instruccin.

211

Introduccin a la Programacin del 8085A

MEMORIA

A
F3
PC
20

00

2000H
2000H

32
32

STA
STA

2001H
2001H

45
45

45
45

2002H
2002H

20
20

20
20

2003H
2003H

2045H
2045H

xx
F3

2046H

(a)
MEMORIA

A
F3
PC
20

03

2000H

32

STA

2001H

45

45

2002H

20

20

2003H

2045H

F3

2046H

(b)
Fig.6.3 Direccionamiento directo de una posicin de memoria. (a) antes de la ejecucin. (b) Despus
de la ejecucin

6.3.2 Direccionamiento Inmediato


La instruccin contiene en forma explcita el dato a utilizarse en la ejecucin
de la instruccin. Este tipo de referencia a datos corresponde a instrucciones de dos y
tres bytes. Por ejemplo, la instruccin ANI dato, ejecuta una operacin AND entre el
contenido del byte dos de la instruccin y el dato en el acumulador. El resultado de la
operacin lgica se deposita en el acumulador. La bandera de acarreo y la de acarreo
auxiliar son puestas a cero, las otras son afectadas segn el resultado.

212

Introduccin a la Programacin del 8085A

Suponga que el acumulador contiene el dato binario 110111112. El resultado


de ejecutar ANI 011010112, es:
1101 1111
0110 1011

(A)
(byte 2)

0100 1011

(A)

(S) = 0 , (Z) = 0, (P) = 1, (AC) = 0, (CY) = 0

MEMORIA

DF

X X

PC
00
F3

20

2000H
2000H

E6
32

ANI
STA

2001H
2001H

6B
45

6B
45

2002H
2002H

x
20

2003H

F3
2046H

Fig.6.4 Direccionamiento inmediato de un dato. Contenido del acumulador, el contador de programa,


la memoria, y el registro de condiciones, antes de ejecutar la instruccin.

A
CF

0 0

PC
20

02
F3

MEMORIA
1

2000H

E6
32

ANI
STA

2001H
2001H

6B
45

6B
45

2002H
2002H

x
20

2003H

F3
2046H

Fig.6.5 Direccionamiento inmediato de un dato. Contenido del acumulador, el contador de programa,


la memoria y el registro de condiciones, luego de ejecutar la instruccin.

213

Introduccin a la Programacin del 8085A

6.3.3 Direccionamiento por registro


La instruccin especifica el registro r de 8 bits, o rp de 16 bits, donde se halla
el dato. La instruccin INX rp, es un ejemplo de este tipo de referencia a dato. Se trata
de una instruccin de un byte, cuya ejecucin incrementa en 1 el contenido del registro par rp, esto significa (rh) (rl) ((rh) (rl) +1). Si el registro B contiene el dato
12H y el registro (C ) = 4FH, al ejecutarse la instruccin INX B, el contenido de BC
cambiar como muestra la figura 6.7.
B

(B-C)

12

FF

(B-C) + 1

13

00

Fig. 6.6 Direccionamiento por registro.

6.3.4 Direccionamiento indirecto por registro


La direccin de memoria donde est el dato es especificada por el contenido
de un registro par. La instruccin ADC M suma el contenido de la posicin de memoria indiada por el registro par H-L ms el bit de acarreo contenido del acumulador, el
cual contendr el resultado de la operacin. Esto es: (A) (A) + [(H)(L)] + (CY).
Si antes de ejecutar la instruccin:
(A) = 1F

(CY) = 1

(H) = 20

(L) = 50

[2050] = 23

Despus de ejecutar la instruccin:


(A) = 43

(H) = 20

(L) = 50

[2050] = 23

y el estado de las banderas ser:


(S) = 0

(Z) = 0

(AC) = 1

(P) = 0

(CY) = 0

En las figuras 6.8 y 6.9 se presentan los contenidos de los registros y memoria, antes y despus de ejecutar la instruccin.

214

Introduccin a la Programacin del 8085A

MEMORIA
A
1F

F
X X

2000H
2000H

8E
32

2001H

x
45

F3
50

2002H

20

F3
00

2050H

23
F3

20
F3

ADC

PC
20
F3

2046H
2045H

Fig.6.7 Direccionamiento indirecto por registro de un dato. Contenido del acumulador, el registro par
H-L, el contador de programa, la memoria y el registro de condiciones, antes de ejecutar la
instruccin.
MEMORIA
F

A
1F

0 0

2000H
2000H

8E
32

2001H

x
45

50
F3

2002H

20

F3
01

2050H

23
F3

20
F3

ADC

PC

F3
20

2046H
2045H
Fig.6.9 Direccionamiento indirecto por registro de un dato. Contenido del acumulador, el registro par
H-L, el contador de programa, la memoria y el registro de condiciones, luego de ejecutar la
instruccin.

6.4 EL CONJUNTO DE INSTRUCCIONES DEL 8085


El p8085A puede ejecutar 246 operaciones distintas agrupadas en 74 instrucciones generales, ests pueden distinguirse en los siguientes grupos:

Transferencia de datos.
Operaciones lgicas.
Bifurcaciones.
Instrucciones de manejo de pila (stack), E/S, y control de la mquina.
Operaciones Aritmticas.

215

Introduccin a la Programacin del 8085A

6.4.1 Grupo de instrucciones para transferencia de datos


Permiten el movimiento de datos entre los distintos componentes del sistema
computador. Transfieren informacin entre los registros internos del microprocesador, desde un registro hacia la memoria del sistema, o hacia los puertos de entrada y
salida, o bien desde la RWM o dispositivos de E/S, hacia un registro. Estas instrucciones deben especificar la fuente donde se localizan los datos, y el destino donde
debe copiarse la informacin. Cuando se ejecuta una transferencia (mover), el contenido del registro fuente permanece inalterable. Las instrucciones de este grupo no
afectan las banderas. En la tabla 6.2 se presentan las instrucciones del 8085A destinadas a transferir datos.
Tabla. 6.2 Instrucciones para carga y movimiento de datos.

Instrucciones para transferencia de datos


MOV r1,r2

(r1) (r2)

STA direccin

[(direccin)](A)

MOV r,M

(r) [(H)(L)]

LHLD direccin

(L) [(direccin)]
(H) [(direccin+1)]

MOV M,r

[(H)(L)] (r)

SHLD direccin

[(direccin)] (L)
[(direccin+1)] (H)

MVI r,dato

(r) (dato)

LDAX rp

(A) [(rp)]

MVI M,dato

[(H)(L)] (dato)

STAX rp

[(rp)] (A)

LXI rp,dato 16

(BC) dato 16

XCHG

(H) (D)
(L) (E)

LDA direccin

(A) [(direccin)]

IN puerto
OUT puerto

(A) (puerto)
(puerto) (A)

Los datos son transferidos entre registros o entre un registro y la memoria por
la instruccin MOV, esta se especifica de la siguiente forma, dependiendo del origen
y destino de los datos:
MOV r1,r2

(r1)(r2)

Transfiere el contenido del un registro fuente r2 a al registro destino r1 , puede


especificarse cualquier registro interno de 8 bits.
MOV r,M

(r)[(H) (L)]

Mueve el contenido de la posicin de memoria apuntada por el registro par


HL al registro r. El registro HL debe cargarse con la direccin de memoria cuyo contenido se quiere transferir. Existen varios mtodos para cargar la direccin, pero una
forma comn es usar la instruccin:

Introduccin a la Programacin del 8085A

LXI rp, direccin

216

(rl)(byte 2); (rh)(byte 3)

Esta instruccin de 3 bytes, carga el registro par rp con los bytes 2 y 3 de la


instruccin, por ejemplo: LXI H, 10FFH, carga el registro H con el byte 10H y L con
FFH.
Otra forma de cargar un registro o una posicin de memoria es con la instruccin MVI, mover inmediatamente.

MVI r ,dato

(r)(byte 2)

Carga el registro r de 8 bits con el dato especificado por el byte 2 de la instruccin

MVI M,dato

[(H)(L)](byte 2)

Permite copiar el dato especificado por el byte 2 de la instruccin en la posicin de memoria con direccin indicada por el contenido del registro HL.
Las instrucciones LXI y MVI pueden usarse para cargar cualquier registro o
posicin de memoria cambiando el operando destino, o el modo de direccionamiento.
Por ejemplo LXI B, direccin deposita en el registro par BC los bytes 2 y 3 de la instruccin. La instruccin LXI SP, direccin carga el apuntador de stack con la direccin del tope de la pila.
Algunas instrucciones para transferencia de datos con memoria no hacen referencia al registro par HL.
LDAX rp

(A) [(rp)]

La informacin en la posicin de memoria especificada por el contenido del


registro par rp es transferida al acumulador.
LHLD direccin

(L) [(byte 3) (byte 2)]; (H) [(byte 3) (byte 2) +1]

El contenido de la direccin de memoria especificada por el byte 2 y 3 de la


instruccin es cargado en el registro L, y el contenido de la prxima posicin de memoria es transferido al registro H.
LDA direccin

(A) [(byte 3) (byte 2)]

El dato en la posicin de memoria especificado por el byte 2 y 3 de la instruccin es movido al acumulador.

217

Introduccin a la Programacin del 8085A

STAX rp

[(rp)](A)

El byte almacenado en el registro acumulador es transferido a la posicin de


memoria cuya direccin est especificada por el contenido del registro par rp.

SHLD direccin

[(byte 3) (byte 2)](L); [(byte 3) (byte 2) +1](H)

Mueve el contenido del registro L a la posicin de memoria sealada por los


bytes 2 y 3 de la instruccin. El contenido del registro H es transferido a la siguiente
posicin de memoria.
[(byte 3) (byte 2)] (A)

STA direccin

El contenido del acumulador es almacenado en la direccin de memoria especificada por los bytes 2 y 3 de la instruccin.
Las instrucciones LDA y STA proveen un medio para transferir inmediatamente datos entre el acumulador y la memoria. Usando estas instrucciones, esto puede realizarse con tres bytes en lugar de los cuatro bytes necesarios para cargar el registro par HL con una direccin y mover datos desde o hacia la memoria.
Ejemplo 6.1
El cdigo siguiente mueve el contenido de la direccin de memoria 451FH al
registro acumulador.
lda
1F
45
3 bytes

XCHG

lxi h
1F
45
mov a,m
4 bytes

(H) (D); (L) (E)

Intercambia los datos contenidos en los registros pares HL y DE:


La eleccin de las instrucciones que permiten la transferencia de informacin
entre el microprocesador y los dispositivos de entrada y salida, depende del tipo de
estructura que utilice el sistema para la decodificacin de los puertos de E/S. Son posibles dos esquemas:
E/S estndar. (E/S aislada)
E/S direccionada como memoria. (Mapeo de memoria)

218

Introduccin a la Programacin del 8085A

Posteriormente se analizaran en detalle los modos de seleccin ms comunes


para dispositivos de E/S. En lo que se refiere al programador, basta con distinguir las
instrucciones que se pueden utilizar en cada caso.
Para el esquema E/S estndar se usan las instrucciones de dos bytes IN puerto
y OUT puerto. El primer byte de la instruccin contiene el cdigo de operacin y el
segundo la direccin del puerto que se desea seleccionar:
IN puerto

(A)(dato)

El byte colocado en el bus de datos por el puerto especificado por el segundo


byte de la instruccin, es depositado en el acumulador.
OUT puerto

(dato)(A)

El contenido del registro A es colocado en el bus de datos para ser transmitido


al puerto especificado por el segundo byte de la instruccin
Es obvio que como la direccin del puerto se especifica con un byte, solo es
posible el acceso a 512 puertos, 256 de entrada, y 256 de salida. Un puerto de entrada puede tener la misma direccin que uno de salida, las seales de control de lectura
y escritura en puerto realizarn la distincin.
Cuando se ejecuta una instruccin IN la seal de control de lectura, RD , se
activa para permitir la lectura del puerto, en el caso de la ejecucin de una instruccin
OUT se activar la seal WR , de escritura en memoria o puerto de E/S. La lnea
IO / M es puesta en alto para indicar que la transferencia es a un registro de E/S.
Adems, el 8085A coloca la direccin del puerto sobre las ocho lneas de direccin de
menor peso A0-A7, duplicando esta informacin en las ocho lneas de mayor peso del
bus de direcciones A8-A15.
Cuando los puertos de entrada y salida son seleccionados como si se tratara de
posiciones de memoria, se pueden usar las instrucciones que hacen referencia a memoria para transferir datos a, o desde dispositivos de E/S. En este caso, el procesador
no puede distinguir entre un puerto tratado como memoria y una direccin de la memoria del sistema.

6.4.2 Grupo de instrucciones que ejecutan operaciones lgicas


El microprocesador 8085A posee un grupo de instrucciones que usan la unidad lgica y aritmtica para hacer posible la realizacin de operaciones lgicas, de
forma equivalente a como las puertas bsicas digitales las ejecutan por hardware. La
nica diferencia es que el microprocesador opera con datos de 8 bits. Las instruccio-

219

Introduccin a la Programacin del 8085A

nes de este grupo facilitan la manipulacin y control de bits individuales de un registro o posicin de memoria.
Tabla. 6.3 Instrucciones del grupo lgico.

Instrucciones lgicas
ANA r

(A)(A) ( r)

ANA M

(A) (A) [(H)(L)]

ANI dato

(A) (A) (dato)

CMP

ORA r

(A) (A) ( r)

CMP M

(A) - [(H)(L)]

ORA M

(A) ( A) [(H)(L)]

CPI dato

(A) - (dato)

ORI dato

(A) (A) (dato)

RRC

(An)(An+1); (A7)(A0)
(CY) (A0)

XRA r

(A)(A) (r)

RLC

(An+1)(An); (A0)(A7)
(CY) (A7)

XRA M

(A)(A) [(H)(L)]

RAR

(An)(An+1); (CY)(A0)
(A7) (CY)

XRI dato

(A)(A) (dato)

RAL

(An+1)(An); (CY)(A7)
(A0) (CY)

CMA

(A)(A)

(CY ) (CY)

CMC

(CY) 1

STC
r

(A) - ( r)

Cuando en una instruccin de este grupo intervienen dos operandos, como en


ANA r, que ejecuta una operacin AND entre un registro y el acumulador, la operacin se realiza simultneamente entre los bits correspondientes de cada byte. En el
caso de la instruccin CMA de complemento, la operacin de complementar se efecta sobre los ocho bits del acumulador. En todas las instrucciones lgicas, exceptuando aquellas que se refieren a la bandera de acarreo (CY), uno de los operandos est en
el acumulador. Cuando intervienen dos operandos, el otro puede estar: implcito en la
instruccin, en otro registro del microprocesador o en la memoria.
Las instrucciones de este grupo afectan todas las banderazas operaciones lgicas posibles son: AND, OR, OR Exclusivo, Complemento, Comparacin, y Desplazamientos.
Instrucciones que ejecutan la funcin AND
ANA r, ANA M y ANI dato realizan la funcin AND entre el acumulador y el
operando de referencia. Afectan todas las banderas de condiciones: CY es puesta a
cero y AC a 1. Los valores de P, S y Z son asignados de acuerdo con el resultado de
la operacin.
ANA r
(A)(A) ( r)

220

Introduccin a la Programacin del 8085A

Realiza la funcin AND bit a bit entre el acumulador y el registro especificado, el resultado se deposita en el acumulador.
Ejemplo: ANA C, con (A) = B6H y (C)=63H
10110110 (A) B6H
01100011 (C) 63H
00100010 (A) 22H

(A) (A) [(H)(L)]

ANA M

Ejecuta la operacin AND entre el acumulador y el contenido de la posicin


de memoria apuntada por el registro par HL, el resultado se carga en el acumulador.
(A) (A) (dato)

ANI dato

Realiza una funcin AND entre el segundo byte de la instruccin y el contenido del acumulador. El resultado se almacena en el acumulador.
La utilidad de las instrucciones que ejecutan operaciones lgicas puede no ser
obvia. Por ejemplo, la funcin AND permite poner en cero algunos bits especficos de
una palabra, mientras que los restantes permanecen inalterables. Si es necesario borrar los bit 7 y 0 del A, basta con usar un byte de mscara (7EH) y ejecutar la instruccin ANI 7EH.
10101001 (A) A9H
01111110 (C) 7EH mscara
00101000 (A) 28H

xxxxxxxx (A) xxH


01111110 (C) 7EH mscara
0xxxxxx0

Instrucciones que ejecutan la funcin OR

Las instrucciones ORA r, ORA M y ORI dato, disponibles en el grupo de instrucciones lgicas del microprocesador 8085A, ejecutan la funcin OR entre el acumulador y el operando especificado. Al igual que en el caso anterior el segundo operando puede ser un registro de 8 bits, la memoria del sistema, o un dato contenido en
el segundo byte de la instruccin OR inmediato (ORI). Estas instrucciones afectan
todas las banderas: CY y AC son puestas a cero.
(A)(A) ( r)

ORA r

Realiza la funcin OR bit a bit entre el acumulador y el registro especificado,


el resultado se deposita en el acumulador.
Ejemplo: ORA B, con (A) = B6H y (B)=63H

221

Introduccin a la Programacin del 8085A

10110110 (A) B6H


01100011 (B) 63H
11110111 (A) F7H

(A) (A) [(H)(L)]

ORA M

Ejecuta la operacin OR entre el registro A y el contenido de la posicin de


memoria apuntada por el registro par HL, el resultado se carga en el acumulador.
(A) (A) (dato)

ORI dato

Produce la ejecucin de una funcin OR entre el segundo byte de la instruccin y el contenido del acumulador, el resultado se almacena en el acumulador.
Una aplicacin inmediata de la funcin OR es poner a uno un bit de una palabra de control, manteniendo el estado lgico de los dems bits. Como ejemplo, la
ejecucin de la instruccin ORI 70H fuerza a uno el bit A6 del registro acumulador.
El programa que se ofrece a continuacin muestra el uso de las instrucciones lgicas
AND y OR para la conversin de nmeros codificados en ASCII al sistema BCD y
viceversa. Para convertir un carcter ASCII (37H) a su equivalente decimal (07H),
basta con poner a cero los bits A4-6 del valor ASCII. Esto se logra con la instruccin
AND 0FH. Para revertir el proceso, se retornan a uno el mismo grupo de bits, ejecutando ORI 30H.
Ejemplo 6.2
El puerto de entrada 80H contiene el cdigo ASCII de un digito decimal y en
el registro D est almacenado el equivalente binario de un nmero decimal. El programa debe leer el puerto de entrada, convertir el carcter ASCII a BCD y almacenarlo en la posicin de memoria 0200H. El dgito decimal en D, debe ser convertido a
ASCII y escrito en el puerto de salida 90H.
in
ani
sta
mov
ori
out
hlt

80h
0fh
0200h
a,d
30h
90h

; Obtener carcter ASCII


; Convertir a BCD
; Almacenar en memoria
; Cargar en a el nmero decimal
; Convertir en ascii
; Escribir a puerto

En aplicaciones de control es a menudo necesario probar el estado lgico de


uno o ms bits de un registro o de una posicin de memoria determinada. Considere
que el contenido del registro acumulador es A9H y se requiere detectar el estado del
bit A3.
10100001 (A) A9H
00001000 (C) 08H mscara

10101001 (A) A9H


00001000 (C) 08H mscara

222

Introduccin a la Programacin del 8085A

00000000 (A) 00H


(Z) = 1

00001000 (A) 08H


(Z) = 0

La forma ms directa y sencilla de realizar esta tarea es usar un byte de mascara especfico, 08H en este caso, para ocultar todos los bits del A excepto el correspondiente a la prueba. Ejecutando la instruccin ANI 08H, se coloca la mscara. El resultado de la prueba se indica mediante la bandera de cero (Z), la cual se activar slo en
el caso que A3 sea igual a cero. El ejemplo 6.3 ilustra un mtodo para realizar prueba
de bits.
Ejemplo 6.3
El programa detecta el estado del bit 4 de la posicin de memoria con direccin 300H. Si est en uno, se cargarn ceros en todos los bits de la posicin 0500H.
Si por el contrario el bit 4 es cero, se pondrn a uno todos los bits de la misma celda
de la memoria.

uno:
mem:

lxi
mov
ani
jz
ani
jmp
ori
sta
hlt

h,0300h
a,m
10h
uno
00h
mem
ffh
0500h

; Apunta la direccin del bit a probar


; Palabra de prueba al a
; Prueba de a4
; Si cero, todos a uno
; Si uno, todos a cero

;Actualiza indicador

Instrucciones que ejecutan la funcin OR EXCLUSIVO


El P 8085A permite realizar las funciones: XRA r, XRA M y XRI dato. La
ejecucin de cualquiera de estas instrucciones ponen a cero las banderas de acarreo y
de acarreo auxiliar, el resto de los bits de condiciones son afectados segn el resultado de la operacin lgica.
Al ejecutar la instruccin OR exclusivo entre bits de igual valor lgico, se obtiene como resultado un cero, mientras que entre bits distintos se produce uno. Esto
indica que si el dato en el acumulador coincide con el operando de la instruccin OR
exclusivo, el registro acumulador es cargado con cero y la bandera de cero (Z) es activada a uno.
(A)(A) (r)

XRA r

La funcin OR exclusivo se ejecuta entre el acumulador y el registro r, el resultado se deposita en el acumulador.


Ejemplo: XRA B, con (A) = B6H y (B)=63H

223

Introduccin a la Programacin del 8085A

10110110 (A) B6H


01100011 (B) 63H
11010101 (A) D5H

(A)(A) [(H)(L)]

XRI M

Realiza la operacin OR exclusivo entre el contenido de A y el byte en la posicin de memoria apuntada por el registro par HL., el resultado se carga en el A.
(A)(A) (dato)

XRI dato

Ejecuta una funcin OR exclusivo entre el segundo byte de la instruccin y el


contenido del acumulador, el resultado se almacena en el acumulador.
Para el programador, es una prctica habitual tener que cargar el registro acumulador con cero. Esta operacin puede ser realizada por la instruccin de dos bytes
MVI A,0. Una forma ms eficiente para iniciar en cero el A es utilizar la instruccin
de un bytes XRA A, la cual adems torna a cero las banderas de acarreo (CY) y acarreo auxiliar (AC).
En forma similar a como se us la funcin AND para poner bits a cero y la OR
para hacerlos uno, la operacin OR exclusivo puede usarse para complementar bits.
Por ejemplo XRI F0H produce la inversin lgica de los cuatro bits de mayor orden
del registro acumulador.
1011 1110 (A) BEH
1111 0000 (B) F0H
0100 1110 (A) 4EH

El ejemplo 6.4 muestra el uso de la funcin OR exclusivo para prueba de byte.


Ejemplo 6.4
El programa lee una palabra de control del puerto 0BH y lo compara con una
copia del dato almacenada en la direccin 3000H de la memoria. Si son iguales, se
hace uno el bit 5 de la posicin de memoria 3200H. Si los bytes comparados difieren,
se actualiza la copia de la palabra de control.
lda
mov
in
mov
xra
jnz

3000h
c,a
0ah
b,a
c
difer

; Copia de palabra de control en c


; Leer palabra de control
; Comparar con copia
;Son diferentes

224

Introduccin a la Programacin del 8085A

lda
ori
sta
jmp
difer: mov
sta
fin: hlt

3200h
20h
3200h
fin
a,b
3000h

; Son iguales
; Bit 5 a uno

; Actualizar copia en memoria

Observe que la actualizacin de la palabra de control ocurre nicamente si


hubo cambios en sta.
Instrucciones que realizan complemento
Son dos instrucciones de un byte: complementar el acumulador, CMA, y
complementar la bandera de acarreo, CMC.
CMA

(A)( A )

El contenido de acumulador es complementado. El registro de banderas no


es modificado.
CMC

(CY)( CY )
Solo afecta la bandera de acarreo.
Existe otra instruccin que acta directamente sobre el bit de acarreo:

STC

(CY)1
La bandera de acarreo es puesta a uno, las otras permanecen mantienen su

valor.

Instrucciones de comparacin
La instruccin OR exclusivo (XRA) se us en el ejemplo 6.4 para comprobar
si dos datos son iguales. Si se requiere comparar bytes e indicar si uno es mayor o
menor que el otro, no puede usarse XRA. La comparacin de dos valores binarios en
trminos de sus magnitudes relativas, puede ser realizada usando las instrucciones de
comparacin, descritas a continuacin.
CMP r, CMP M y CPI dato, comparan el contenido del acumulador con: el
de cualquier registro interno del P (incluyendo al propio A), con el de una posicin
de memoria, o con un dato inmediato. La comparacin consiste en substraer el byte

Introduccin a la Programacin del 8085A

225

operando del contenido del acumulador. Todas las banderas son afectadas. Los bits Z
y CY son afectadas de acuerdo con el resultado de la comparacin.
CMP r

(A) - ( r)
Si (A) = (r), la bandera de cero Z es puesta a 1
Si (A) < (r) el bit de acarreo CY se hace 1.

CMP M

(A) - [(H)(L)]

Si (A) = [(H)(L)] , Z = 1
Si (A) < (r) , CY= 1.
CPI dato

(A) - (dato)

Si (A) = (dato), Z=1


Si (A) < (r), CY es 1.
En todas las instrucciones de comparacin, el dato en el acumulador antes de
la ejecucin de la instruccin, permanece invariable. Los valores de las banderas de
estado son asignados de acuerdo con el resultado de la comparacin realizada.

Ejemplo 6.5
La instruccin de comparacin CMP r es utilizada para resolver el problema
planteado en el ejemplo anterior. Es suficiente con sustituir la lnea de cdigo XRA C
del ejemplo 6.4, por la instruccin CMP C.

difer:
fin:

lda
mov
in
mov
cmp
jnz
lda
ori
sta
jmp
mov
sta
hlt

3000h
c,a
0ah
b,a
c
difer
3200h
20h
3200h
fin
a,b
3000h

226

Introduccin a la Programacin del 8085A

Ejemplo 6.6
Para la comparacin de la magnitud de dos nmeros se puede usar el siguiente
cdigo.
.
.
.
cpi 50h
jz no50
.
.
.
no50: jc men50
.
.
.
men50:
.

; Saltar si distinto a 50h


; Es igual a 50h

; Saltar si menor de 50h


; Mayor que 50h

; Es menor a 50h
.

Las instrucciones de comparacin pueden usarse para determinar si un nmero


est dentro de un intervalo determinado. El programa del ejemplo 6.7, verifica si un
dato obtenido desde un puerto de entrada, corresponde al carcter ASCII de un dgito
decimal.
Ejemplo 6.7
Si el dato captado por el microprocesador desde el puerto de entrada con direccin 00H, es un dgito decimal, ste debe almacenarse en la posicin de memoria
2000H. En caso contrario, el valor obtenido desde el puerto debe copiarse en el registro E.

inval:
vali :
salir:

lxi
in
mov
cpi
jm
cpi
jm
mov
jmp
mov
hlt

h,2000h
00h
c,a
30h
inval
40h
vali
e,a
salir
m,a

; Leer dgito de puerto de entrada.


; Almacenar dgito en registro c.
; Comparar con ascii 0.
; Si es < , no es un digito decimal.
; Comparar con ascii 9+1.
; Si es <, el digito esta entre 0 y 9.
; Carcter no decimal al registro e.
; Nmero decimal a memoria

Para concluir la exposicin sobre las instrucciones de comparacin, se presenta un ejemplo del uso del microprocesador 8085A en la solucin de un problema
simple de control industrial.

227

Introduccin a la Programacin del 8085A

Ejemplo 6.8
Un 8085A debe supervisar en forma continua el valor de una variable analgica de un proceso industrial. Si la magnitud de la variable supera un valor de referencia, debe generarse una alarma visual. En la figura 6.12 se ofrece un diagrama de bloques del proceso.

Fin de conversin

CAD

C 8085

Sensor
Amplificador
Seleccin
Inicio de conversin
Lectura del dato

Fig. 6.10 Supervisin de un proceso industrial.

El conversor de datos usado es el ADCC0804, el cual se presenta en un encapsulado de veinte terminales con todas las funciones necesarias para facilitar la conexin al bus de un microprocesador. En la figura 6.11 se observa el smbolo del circuito y las funciones de los terminales.
Seal

Funcin

DB0-DB7
VI+, VI-

Salidas digitales
Entradas analgicas

CS

Seleccin De circuito

RD

Habilitacin de salida

WR
INTR

Iniciar conversin
Fin de conversin

AGND

Tierra analgica

VREF
CLK

Tensin de referencia
Entrada de reloj externo

Fig. 6.11 El convertidor A/D de 8 bits ADC0804.

El ADC0804 convierte el voltaje de entrada a un valor digital de 8 bits. Las


salidas DB0-DB7 son tri- estados. La resolucin del CAD es de 19.6 mV. Las entradas
analgicas VI+ y VI- permiten la conversin de entradas diferenciales. Con entrada

228

Introduccin a la Programacin del 8085A

no diferencial, el voltaje a convertir se aplica a VI+ y VI- se conecta a la tierra analgica AGND. Con el terminal VREF a circuito abierto, el rango de la seal de entrada
es 0-5V.
Posee un generador de reloj interno de frecuencia 1/(1.1RC), donde RC son
componentes externos conectados a los terminales CLKR y CLK. Con alimentacin
de +5 V, la frecuencia de trabajo permitida est entre 100 KHz y 800 KHz. Puede
usarse un reloj externo conectado a la entrada CLK. En la figura 6.12 se muestran las
seales que intervienen en el proceso de adquisicin de datos.
Inicio de
conversin

Fin de
conversin

Lectura
de datos

CS
WR
INTR
RD
DB0-7

tc

Dato

Fig. 6.12 Diagrama de tiempos del ADC0804.

Para habilitar al ADC0804, la entrada CS debe estar en cero. Con el dispositivo seleccionado, la aplicacin de un pulso de nivel bajo en la entrada WR pone al
CAD en operacin y la seal INTR cambia a nivel alto. El proceso de conversin
propiamente dicho se inicia una vez que las seales CS y WR han regresado al nivel
alto. Al finalizar el proceso, INTR vuelve a cero, sealando que puede proceder a
leerse el dato habilitando las lneas de salida DB0-DB7 con la aplicacin de un comando de lectura en la lnea RD .
La seccin de adquisicin de datos y generacin de alarma del sistema supervisor se muestra en la figura 6.13. Las salidas de datos del circuito convertidor
ADC0804 se conectan al bus AD0-AD7 del 8085 y las lneas de inicio de conversin y
de habilitacin de salidas se aplican, respectivamente, a los terminales de control
WR y RD .
Los valores de los componentes externos, resistencia y capacitor fijan una frecuencia de trabajo de 606KHz la cual est dentro de las especificaciones de funcionamiento del circuito. El decodificador de direcciones realiza una decodificacin parcial situando al ADC0804 en el puerto 04H, y a la seal de fin de conversin ( INTR )
en 00H. El indicador luminoso se conecta a la salida Q de un circuito 74LS74 y se

229

Introduccin a la Programacin del 8085A

controla aplicando las entradas de seleccin de puerto ( CS2 y CS3 ) a las lneas
asincrnicas de puesta a uno ( PR ) y puesta a cero ( CL ).
Una operacin de escritura al puerto con direccin 08H apagar al diodo indicador durante la operacin normal, mientras que la seleccin del puerto 0CH, lo iluminar cuando el sistema funcione bajo falla. El contenido del bus de datos durante el
acceso a estos dos puertos es irrelevante.

Fig. 6.13 Seccin de adquisicin de datos e indicacin de alarma.

El programa de control se muestra a continuacin.


ctrl.:

adc:
esp:

adc1
esp1:

lda
mov
out
out
in
ani
jnz
in
cmp
jc
out
out
in
ani
jnz
in

e200h
b,a
8
4
0
80h
esp
4
b
adc
0ch
4
0
80h
esp1
4

; Obtener valor de referencia


; almacenarlo en B.
; Se asegura que el LED est apagado
; Inicio de la conversin
; Se lee la lnea INTR.
; Prueba de INTR
; Esperar hasta cuando sea cero.
; Leer resultado de la conversin.
; Comparar con la referencia.
; Si es menor, adquirir nuevo valor
; Es mayor, activar led
; Adquirir variable y esperar
; que disminuya por debajo del
; valor de referencia.

230

Introduccin a la Programacin del 8085A

cmp
jnc
jmp

b
adc1
ctrl

; Reiniciar proceso.

Al inicio de la ejecucin, se desactiva el diodo luminoso. A continuacin una


operacin de escritura en el puerto 4 da inicio al proceso de conversin. Para verificar
el fin de la conversin, se examina continuamente el contenido del puerto 0 hasta
cuando el bit D7 sea cero. En este momento se lee el dato de salida del CAD. Este
valor se compara con la referencia. Si es menor, se contina adquiriendo valores de la
variable. Cuando la magnitud de la seal de entrada supera el valor de referencia se
activa la alarma. Con el diodo iluminado, se adquieren nuevos valores hasta cuando la
magnitud de la tensin de entrada cae bajo el nivel de referencia. Se apaga el diodo y
de inicia de nuevo el proceso de supervisin.
El programa del ejemplo 6.8 se mantiene en un lazo sin fin supervisando continuamente la variable del proceso. La redundancia de cdigo mostrada por el programa se corregir cuando se trate el tpico de subrutinas. Tambin puede ordenarse
el apagado del diodo, aun cuando est desactivado, al inicio del lazo de adquisicin y
de este modo no ser necesario lazos separados de adquisicin para condiciones normal y bajo falla. Observe que las puertas OR en la figura 6.13 pueden suprimirse si en
el sistema no existe un puerto 0 de salida ni puertos 8 y 0CH de entrada. Esto debido
a que el 74LS139 selecciona el puerto sin discriminar si es de entrada o salida.

Fig. 6.14 Decodificador de puertos con PLD para la seccin de adquisicin de datos e indicacin de
alarma.

231

Introduccin a la Programacin del 8085A

Como alternativa, en figura 6.14 se muestra el circuito de la figura 6.13 con


un decodificador de puertos que realiza una decodificacin completa de las direcciones de los puertos y adems usa un solo chip.
El cdigo a programar en el circuito PAL es el siguiente:
library IEEE;
use IEEE.STD_LOGIC_1164.all;
entity DECDIR is
port (
IOM,RD,A7,A6,A5,A4,A3,A2,A1,A0:
CS0, CS1, CS2, CS3:
);
end DECDIR;

in STD_LOGIC;
out STD_LOGIC

architecture RTL of DECDIR is


begin
CS0 <= NOT(IOM)OR RD OR A0 OR A1 OR A2 OR A3 OR A4 OR A5 OR A6 OR A7;
CS1 <= NOT(IOM) OR A0 OR A1 OR NOT (A2) OR A3 OR A4 OR A5 OR A6 OR A7;
CS2<= NOT(IOM)OR NOT(RD) OR A0 OR A1 OR A2 OR NOT(A3) OR A4 OR A5 OR A6 OR A7;
CS3<= NOT(IOM)OR NOT(RD) OR A0 OR A1 OR NOT(A2) OR NOT(A3) OR A4 OR A5 OR A6
OR A7;
end RTL;

Instrucciones de rotacin
Las instrucciones de este grupo desplazan el contenido del acumulador un bit
a la derecha, o a la izquierda. Son instrucciones de un byte, y su ejecucin solo afecta
la bandera de acarreo.
(An)(An+1); (A7)(A0); (CY) (A0)

RRC

La instruccin RRC, desplaza el contenido del A un bit hacia la derecha. El


bit menos significativo del A (A0) se transfiere al de mayor peso (A7) y al bit de acarreo, como ilustra la figura 6.15.

CY

A7

A6

A5

A4

Fig 6.15 Rotacin del acumulador un bit hacia la derecha

A3

A2

A1

A0

232

Introduccin a la Programacin del 8085A

(An+1)(An); (A0)(A7); (CY) (A7)

RLC

Realiza una rotacin hacia la izquierda del contenido del acumulador. A7 se


transfiere hacia A0 y hacia la bandera de acarreo.

CY

A7

A6

A5

A3

A4

A2

A1

A0

Fig. 6.16 Rotacin del acumulador un bit hacia la izquierda

(An)(An+1); (CY)(A0); (A7) (CY)

RAR

El contenido del acumulador se desplaza un bit hacia la derecha a travs del


bit de acarreo. El bit A0 pasa a CY, y el bit de acarreo a A7.

CY

A7

A6

A5

A3

A4

A2

A1

A0

Fig. 6.17 Rotacin de un bit hacia la derecha a travs de la bandera de acarreo.

(An+1)(An); (CY)(A7); (A0) (CY)

RAL

El byte en el acumulador es desplazado un lugar hacia la izquierda a travs del


bit de acarreo. El bit A7 ocupa el lugar del CY, y el contenido de la bandera de acarreo
se transfiere al bit A0.

CY

A7

A6

A5

A4

A3

A2

A1

Fig. 6.18 Rotacin del acumulador un bit hacia la izquierda a travs de CY.

A0

233

Introduccin a la Programacin del 8085A

Ejemplo 6.9
Se requiere empaquetar los nibbles menos significativos de las posiciones de
memoria E400H y E4001H en la direccin E500H, como indica la figura 6.19.

Fig. 6.19 Despus de ejecutar el programa, el dato en la posicin E500H es 92H

lhld
mov
rlc
rlc
rlc
rlc
ani
mov
mov
ani
ora
sta
hlt

e400h
a,l

; Se cargan en h y l los datos en memoria


; Se mueve al acumulador el valor en e400h.
; Intercambio de nibbles del acumulador.

f0h
b,a
a,h
0fh
b
e500h

; Se pone a cero el nibble de orden menor y


; Se mueve al registro b
; Cargar el a con el dato en e401h
; Se hace cero el nibble de mayor orden.
; Se empaquetan valores
; Resultado a posicin e500h.

En este captulo se ha intentado presentar programas tiles para el desarrollo


de aplicaciones prcticas de sistemas empotrados. Sin embargo, esta tarea es obstaculizada por el hecho que an no se ha presentado el repertorio completo de instrucciones del 8085A. La potencialidad real de algunas instrucciones se revelar a medida
que se avance en la exposicin.
Por ejemplo, las instrucciones de rotacin combinadas en un programa con
instrucciones aritmticas, permiten realizar operaciones matemticas diversas, algunas de stas son: multiplicacin, divisin, clculo de logaritmos y de funciones trigonomtricas.
En el siguiente ejercicio se muestra otra aplicacin sencilla de las instrucciones de rotacin.

234

Introduccin a la Programacin del 8085A

Ejemplo 6.10
A los terminales del puerto de salida 20H estn conectados 8 indicadores luminosos (LED0-7), los cuales deben iluminarse de acuerdo con las siguientes condiciones:
a. Los LEDs deben estar inicialmente apagados.
b. Si la lnea 7 del puerto 40H est en:
0, active

LED0, LED2, LED4 y LED6

1, active

LED1, LED3, LED5 y LED7

c. Si el bit 0 del puerto de entrada 40H esta en cero no debe haber cambios en el estado de
los LEDs.

orden:

l1357:

ori
out
in
rrc
jnc
in
rlc
jc
mvi
out
jmp
mvi
out
jmp
hlt

0ffh
20h
40h

; Obtener permiso para cambios

orden
40h

; Permiso negado
; Obtener patrn de encendido

l1357
a,0aah
20h
orden
a,55h
20h
orden

; Apagar los ocho LEDS

; P40.7 = 0 >>

LED0, LED2, LED4 y LED6

; P40.7 = 1 >>

LED1, LED3, LED5 y LED7

6.4.3 Instrucciones para manejo de la pila


La pila o stack es una zona de almacenamiento cuya presencia es imprescindible en todo computador debido a que es utilizada para asignar niveles de subrutinas
y de interrupciones. En algunos microprocesadores, la pila se encuentra en el interior
del CPU y en otros, forma parte de la memoria del sistema. Esta rea de memoria es
una estructura LIFO (Last Input First Output), la cual acumula eventos en forma cronolgica. Esto significa que la primera informacin en entrar al stack ocupara la base, mientras que la ms reciente estar en la cima de la pila.
En la figura 6.20 se observa un grupo de cilindros apilados. A cada pieza se le
asigna un nmero, segn el orden de entrada a la pila. La operacin de retirar un elemento del snack, se denomina POP, mientras que la tarea de aadir un cilindro se
identifica como PUSH. En el caso de una memoria, un comando POP leer la pila y
un comando PUSH escribir a la pila.

235

Introduccin a la Programacin del 8085A

Como indica la figura 6.20, el primer elemento en dejar la pila es el nmero 6,


el cual fue el ltimo cilindro colocado. La zona del stack puede corresponder a un
rea de memoria fsica o puede ser establecida por programa. Una pila de hardware
ocupa un nmero determinado de registros de la CPU, lo cual garantiza una velocidad alta de operacin pero una capacidad de almacenamiento limitada.
6
5

PUSH

POP

Fig. 6.20 Representacin conceptual de una memoria con estructura LIFO

La pila programada usa la memoria RWM del C y est limitada slo por la
capacidad de memoria del sistema. El contenido del registro apuntador de pila indica
siempre la direccin ocupada por el ltimo dato en entrar a la pila El programador
selecciona la base de la pila en cualquier parte de la memoria RWM y el control de la
informacin almacenada es realizada en forma automtica por el SP. En trminos de
direcciones de memoria, la pila progresa hacia abajo y el tope de la pila corresponde a
la direccin del ltimo elemento en entrar, sealada por el SP.
El 8085A usa una pila por programa y la manipulacin de la pila se realiza por
medio de dos instrucciones especiales. La instruccin PUSH deposita el contenido de
un registro par en la parte superior de la pila, mientras que POP lee los dos ltimos
bytes almacenados en el stack y los transfiere a un registro par. La tabla 6.4 detalla las
instrucciones de este grupo.
PUSH rp

[(SP) - 1] (rh); [(SP) - 2] (rl); (SP) (SP) -2

Los datos en el registro par rp son transferidos a la pila, como se indica. El SP


es disminuido en dos.
PUSH PSW

[(SP) - 1] (A); [(SP) - 2] (PSW); (SP) (SP) - 2

El contenido del A es movido a la posicin de memoria inmediatamente inferior a la apuntada por el SP. Las banderas de estados son empaquetadas como una

236

Introduccin a la Programacin del 8085A

palabra de estados denominada PSW (Program Status Word), la cual es copiada a la


posicin cuya direccin es menor en dos unidades que el contenido del SP.
Tabla. 6.4 Instrucciones de salto y de manejo de subrutinas

Instrucciones para manejo de la pila

PUSH rp

[(SP) - 1] (rh)
[(SP) - 2] (rl)
(SP) (SP) -2

POP PSW

PUSH PSW

[(SP) - 1] (A)
[(SP) - 2]0 (CY)
[(SP) - 2]2 (P)
[(SP) - 2]4 (AC)
[(SP) - 2]6 (Z)
[(SP) - 2]7 (S)
[(SP) - 2]1,3,5 X
(SP) (SP) - 2

XTHL

POP rp

(rh) [(SP)]
(rh) [(SP+1)]
(SP) (SP) +2

SPHL

(CY) [(SP)]0
(P) [(SP)]2
(AC) [(SP)]4
(Z) [(SP)]6
(S) [(SP)]7
(A) [(SP+1)]
(SP) (SP) + 2

(L) [(SP)]
(H) [(SP)+1]

(SP) (H) (L)

(rh) [(SP)]; (rh) [(SP+1)]; (SP) (SP) +2

POP rp

Los datos en el registro par se transfieren a la pila, como indica la secuencia.


POP PSW

(banderas) [(SP)]; (A) [(SP+1)]; (SP) (SP) + 2

Se restituyen las banderas desde la direccin de memoria apuntada por el SP.


El registro A es cargado con el dato en la posicin de memoria con direccin mayor
en uno a la indicada por el SP. El SP es incrementado en dos.
XTHL

(L) [(SP)]; (H) [(SP)+1]

El byte depositado en el registro L es intercambiado con el contenido de la posicin cuya direccin seala el SP. El dato en el registro H se intercambia con el byte
almacenado en la posicin de memoria con direccin es mayor en uno que la indicada
por el SP.
SPHL

(SP) (H) (L)


El contenido del registro par HL es copiado en el apuntador de pila.

237

Introduccin a la Programacin del 8085A

El manejo de la pila es sencillo. El programador solo debe asegurarse que extrae la informacin desde el STACK en el orden correcto. Tambin es recomendable
asignar el tope de la pila en las ltimas direcciones de la memoria del sistema.
Usualmente se requieren pocas posiciones de memoria para la zona del stack, pero
conviene asegurarse que est rea no sea sobrescrita por alguna instruccin del programa. En el ejemplo 6.11 se muestra lo que no debe hacerse al extraer datos desde la
pila.
Ejemplo 6.11

lxi
push
push
pop
pop
hlt

sp,3000h
b
d
b
d

; Asignar el tope de la pila


; Cargar bc en el stack
; Transferir de a la pila
; Recuperar bc del stack.
; Restaurar de desde la pila

En el programa del ejemplo 6.1 no se consider que el contenido del registro


par BC se traslad a la pila antes que el del registro DE. El intento de recuperar primero a BC y luego a DE producir un error de lgica durante la ejecucin del programa. A continuacin se describe la situacin.
LXI SP,3000H
PILA
X
X

63

85

41

24

2FFCH

2FFDH

2FFEH

SP

2FFFH

3000

3000H

Fig. 6.21 Se carga el apuntador de pila con la direccin 3000H

238

Introduccin a la Programacin del 8085A

PUSH B
PILA
X
X

63

85

41

24

X
X

2FFDH

85

2FFEH

SP

63

2FFFH

2FFE

3000H

Fig. 6.22 El contenido del registro par BC se almacena en la pila

PUSH D
PILA
X
X

24

2FFCH

63

85

41

2FFDH

85

2FFEH

41

24

63

2FFFH

3000H

SP

2FFC

Fig. 6.23 El dato de 16 bits en DE se mueve al stack

239

Introduccin a la Programacin del 8085A

POP B
PILA
X
X

41

24

41

24

24

2FFCH

41

2FFDH

85

2FFEH

SP

63

2FFFH

2FFE

3000H

Fig. 6.24El contenido de la pila se transfiere al registro par BC

POP B
PILA
X
X

41

24

63

85

24

2FFCH

41

2FFDH

85

2FFEH

SP

63

2FFFH

3000

3000H

Fig. 6.25 El contenido de la pila se mueve al registro DE

Observe que como resultado de la ejecucin del programa, se intercambiaron


los contenidos de los registros pares. Para mantener intacta la informacin en los registros BC y DE, primero se debi rescatar DE, el ltimo que se almacen. Si se
hubiese deseado intercambiar el contenido de los registros pares, el procedimiento
empleado en el ejemplo 6.9 puede ser utilizado.

240

Introduccin a la Programacin del 8085A

La pilas un rea ideal para almacenamiento temporal y fcil recuperacin de


variables de un programa. En el siguiente ejemplo se usa el stack para intercambiar
datos de dos posiciones de la memoria RWM.
Ejemplo 6.12
Utilizando la pila como medio de almacenamiento temporal, intercambie los
contenidos de las direcciones de memoria 2020H y 2021H
lxi
lda
push
lda
sta
pop
sta
hlt

sp,3000h
2020h
psw
2021h
2020h
psw
2021h

; Cargar en el a el dato en 2000h


; Mover el byte en a hacia la pila
; Cargar en a el dato en 3000h
; Mover el a a la posicin 2000h
; Recuperar dato de la pila
; Copiarlo en 3000h

6.4.4 Grupo de instrucciones para bifurcaciones


A menos que una instruccin de este grupo sea ejecutada, el flujo normal de
un programa consistir en la ejecucin de las instrucciones almacenadas en secuencia
en la memoria. La tabla 6.5 presenta las instrucciones de este tipo. El 8085A tiene
instrucciones que permiten cambiar el contenido del contador de programa, de modo
que la prxima instruccin sea buscada en una direccin de memoria especificada, en
lugar de en la posicin siguiente.
La bifurcacin del programa puede ser originada por un salto (JUMP) o una
llamada a subrutina (CALL). La alteracin de la secuencia de ejecucin puede ser
incondicional, cuando al ejecutarse la instruccin se modifica inmediatamente el contenido del contador de programa; o condicional, la cual requiere la satisfaccin de una
condicin de bandera antes de producirse la ruptura de la secuencia.

Instrucciones que producen salto


Las instrucciones de este grupo son bien conocidas por lector, debido a que
fueron introducidas el capitulo 3 como soporte lgico del P hipottico. Por tal razn,
han sido usadas en los programas de ejemplos anteriores. Para mantener la secuencia
de presentacin del repertorio de instrucciones del 8085A, se trataran en forma breve
en esta seccin.
Las instrucciones de salto ocupan tres bytes de la memoria del sistema. El
primero corresponde al cdigo de operacin y los dos siguientes especifican la direccin de memoria hacia la cual se ejecutar el salto.

241

Introduccin a la Programacin del 8085A

Tabla. 6.5 Instrucciones de salto y de manejo de subrutinas

Instrucciones para bifurcaciones

RET

(PCL) [(SP)]
(PCH) [(SP) + 1]
(SP)(SP) + 2

Rx

Si x es verdad
(PCL) [(SP)]
(PCH) [(SP) + 1]
(SP)(SP) + 2

CALL direccin

[(SP)-1] (PCH)
[(SP)-2] (PCL)
(SP)(SP) -2
(PC)(byte3) (byte2)

RST n

[(SP)-1] (PCH)
[(SP)-2] (PCL)
(SP) (SP) -2
(PC) 8*n

Cx direccin

Si x es verdad
[(SP)-1] (PCH)
[(SP)-2] (PCL)
(SP)(SP) - 2
(PC)(byte3) (byte2)

PCHL

(PCL) (L)
(PCH) (H)

JMP direccin

(PC)(byte3) (byte2)

Jx direccin

Si x es verdad
(PC)(byte3) (byte2)

JMP direccin

(PC)(byte3) (byte2)

Realiza un salto incondicional a la direccin especificada por los bytes 2 y 3


de la instruccin.
IF x D (PC) (byte3) (byte2)

Jx direccin

Se produce un salto a la direccin especificada por los bytes 3 y 3 de la instruccin, si se satisface la condicin especificada. Hay varios tipos de saltos condicionales, los cuales prueban el estado de una bandera y el salto se produce nicamente si la bandera es uno o si es cero. Los saltos condicionales son:

Tabla. 6.6 Instrucciones de salto condicionales

Instruccin

Condicin
Salto si la bandera de:

JZ
JNZ

cero es 1
cero es 0

JC
JNC

acarreo es 1
acarreo es 0

JPE
JPO

paridad es 1
paridad es 0

JM
JP

signo es 1
signo es 0

Introduccin a la Programacin del 8085A

242

El estado de las banderas se modifica por la ejecucin de una instruccin aritmtica o lgica. El programador debe asegurarse que la instruccin de la cual depende el salto afecte la bandera, y que no sea modifica por instrucciones subsecuentes.

Instrucciones para manejo de subrutinas


El microprocesador 8085A no tiene instrucciones directas para realizar algunas operaciones de uso comn en ciertas aplicaciones. Por ejemplo, no es posible
programar las lneas:
TIME n
DIV B

; Retardo de n milisegundos
; (A) (B) (A)

Cuando se requiere realizar un retardo por programa, o una operacin de divisin, el programador debe especificar una secuencia de instrucciones que realice la
tarea. En una aplicacin donde se realice control de tiempo es usual tener que generar
retardos de diferente duracin en varios puntos de un programa y es posible que un
programa deba ejecutar en forma repetida operaciones de divisin. Una forma de
cumplir con estas tareas consiste repetir las lneas de cdigo tantas veces como sea
necesario.
La repeticin de lneas de cdigo, conlleva un desperdicio de la memoria del
sistema, debido a que existe redundancia en el cdigo objeto resultante. Una solucin
ms eficiente y que permite un ahorro de memoria, es codificar la rutina de retardo o
de divisin como una subrutina. Este trmino identifica a una secuencia de instrucciones que realiza una tarea especfica. Una subrutina es identificada por la direccin
(etiqueta) de memoria donde se encuentra la primera instruccin. La llamada a la subrutina es realizada usando una instruccin CALL direccin o Cx direccin.

CALL direccin

[(SP)-1] (PCH); [(SP)-2] (PCL); (SP)(SP) -2 (PC)(byte3) (byte2)

La direccin de la instruccin siguiente a CALL es transferida a la pila y el SP


es disminuido en dos. A continuacin, se ejecuta un salto hacia la posicin de memoria cuya direccin es indicada por el operando de la instruccin.

Cx direccin

IF x D (pila) (PC); (SP)(SP) -2 (PC)(byte3) (byte2)

Si se satisface la condicin, se realiza la llamada a subrutina. En caso contrario se ejecuta la siguiente instruccin.

243

Introduccin a la Programacin del 8085A

(PCL) [(SP)]; (PCH) [(SP) + 1]; SP)(SP) + 2

RET

Los contenidos de las direcciones de memoria apuntada por el SP y la inmediatamente superior son cargadas en el contador de programa, como indica la secuencia. El apuntador de pila es incrementado en dos.
IF x D (PC) (pila) [(SP) + 1]; (SP)(SP) + 2

Rx

Si la condicin x es cierta, se realiza el retorno. De otra manera se ejecuta la


instruccin siguiente.
Una de las funciones de la pila de memoria es almacenar la direccin de la
prxima instruccin a ejecutarse, despus que se produce una llamada a subrutina. La
instruccin CALL introduce la direccin de retorno en el stack, mientras que RET la
extrae de la pila. Este procedimiento es automtico, de modo que la ltima lnea de
cdigo de toda subrutina debe ser una instruccin de retorno RET, o una de sus variantes.
En la figura 6.26 se muestra como se altera el flujo de un programa durante la
ejecucin de una subrutina, y en la figura 6.27 se observa el estado cronolgico de la
pila durante el proceso. Tambin se indica el contenido del contador de programa y
del apuntador de stack.

Programa principal
1001H

----

1002H

----

1003H

----

1004H

CALL 2000H

1007H

----

Subrutina
1ra instruccin

----

--------RET

Fig. 6.26 Secuencia de llamada a subrutina y retorno al programa principal

2000H

244

Introduccin a la Programacin del 8085A

Antes de ejecutar CALL 2000H

PC

SP

1004H

3000H

3000H

Pila

Despus de ejecutar CALL 2000H

PC

SP

2000H

2FFEH

07

10
X

3000H

Pila

Despus de ejecutar RET

PC

SP

07

10
1007H

3000H

X
X

Pila
Fig. 6.27 Contenido de la pila durante el llamado a subrutina

3000H

245

Introduccin a la Programacin del 8085A

El programa principal se ejecuta en secuencia hasta cuando ocurre la llamada


a subrutina CALL 2000H. En ese momento, el control del programa pasa a la direccin 2000H donde se encuentra la primera instruccin del subprograma. Al finalizar
ste, una instruccin RET produce el retorno del control a la instruccin siguiente a la
llamada CALL en el programa principal.
Cuado se ejecuta un programa, puede presentarse el caso donde una subrutina,
previamente llamada desde el programa principal, requiera el servicio de una segunda
subrutina, sta de una tercera, y as sucesivamente. Esta situacin conoce como anidamiento de subrutinas. La direccin de retorno de cada subprograma se almacena
ordenadamente en la pila. La figura 6.28 ilustra el proceso usando dos subrutinas.

Programa principal
----

Subrutina 1

----

1ra instruccin

---1000H

CALL 1200H

1003H

----

1200H

Subrutina 2

-----

----

1ra instruccin

CALL 1300H

1210H

---

---

1213H

-----

RET

--RET

Fig. 6.28 Desde el programa principal se llama a la subrutina 1, sta llama a la subrutina 2.

Antes de ejecutar CALL 1200H


X

PC

SP

1000H

3000H

X
X

Pila
Fig. 6.29 Estado de la pila antes de la llamada a la subrutina 1

3000H

1300H

246

Introduccin a la Programacin del 8085A

Despus de ejecutar CALL 1200H


PC
1200H

SP
2FFEH

03

2FFEH

10

2FFFH

3000H

Inmediatamente antes de ejecutar CALL 1300H


PC
2010H

SP
2FFEH

Pila
03

2FFEH

10

2FFFH

3000H

Inmediatamente despus de ejecutar CALL 1300H

Pila
13

12

PC
1300H

SP
2FFCH

2FFCH
2FFDH

03

2FFEH

10

2FFFH

3000H

Inmediatamente despus del primer RET

PC
1213H

SP
2FFEH

Pila
13

2FFCH

12

2FFDH

03

2FFEH

10

2FFFH

3000H

Pila

Inmediatamente despus del segundo RET

PC
1007H

SP
3000H

07

2FFCH

10

2FFDH

2FFEH

2FFFH

3000H

X
Fig. 6.30 Estado de la pila durante un anidamiento de subrutinas.

Pila

Introduccin a la Programacin del 8085A

247

Para que una subrutina realice la tarea para la cual fue escrita, se requiere que
el programador le suministre los datos o parmetros necesarios. Generalmente estos
datos se transfieren desde el programa principal, y una vez ejecutada la subrutina entregar resultados hacia el programa principal. La transferencia puede realizarse por
medio de:

Registros del microprocesador.


Tabla de datos.
La pila.
Posiciones reservadas de memoria.

Si el nmero de parmetros que deben ser transferidos es pequeo, por ejemplo dos operandos para una rutina de multiplicacin, pueden utilizarse los registros
internos. Estos se cargan con el multiplicando y el multiplicador, y luego se realiza la
llamada a subrutina. El producto puede volver al programa principal usando uno de
los mismos registros. Si los operandos superan el nmero de registros disponibles,
este mtodo no es apropiado.
Cuando es necesario suministrar a una subrutina una gran cantidad de parmetros, estos pueden residir en la memoria en forma de tabla de datos. Desde el programa principal se transferir nicamente la direccin de inicio de la tabla de datos desde
la memoria
La pila de memoria puede utilizarse como medio para trasladar datos y resultados entre el programa principal y la subrutina. Las instrucciones de carga de datos
PUSH y recuperacin de informacin POP, se usan con este propsito. El hecho que
el stack contenga la direccin de retorno al programa principal, no representa problema alguno. Ms bien, el uso de la pila tiene la ventaja que la subrutina es independiente de posiciones especficas de memoria, en forma similar a cuando se usan los
registros internos del P.
Los datos tambin pueden obtenerse desde posiciones de memoria previamente reservadas por el programa. Los resultados de la ejecucin de la subrutina son depositados tambin en celdas de memoria previamente definidas.

Ejemplo 6.13
El programa que se presenta a continuacin realiza la misma funcin que el
mostrado en el ejemplo 6.8. En este caso, las instrucciones para la conversin de datos, para la lectura de las salidas del convertidor analgico-digital y para la comparacin del dato obtenido con la referencia, han sido codificadas como una subrutina
denominada ADC.
El programa principal realiza dos llamadas a esta subrutina, una en operacin
normal y la otra cuando ocurre una falla.

248

Introduccin a la Programacin del 8085A

;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
ctrl:
lda
e200h
; Obtener valor de referencia
mov
a,b
out
08h
; Apagar LED
men:
call
adc
; Adquirir hasta que la variable supere
jc
men
; El valor de referencia
out
och
; Generar condicin de alarma
may:
call
adc
; Adquirir hasta que cese la situacin
jnc
may
; de falla
jmp
ctrl
; Reiniciar proceso.
;---------------------------------------------------------------------------------;
Subrutina de adquisicin de datos
;---------------------------------------------------------------------------------adc:
out
04h
; Inicio de la conversin
esp:
in
00h
; Se lee la lnea intr.
ani
80h
; Prueba de INTR
jnz
esp
; Esperar hasta cuando sea cero.
in
04h
; Leer resultado de la conversin.
cmp
b
; Comparar con la referencia.
ret

Al inicio de la ejecucin del programa, en condiciones normales de operacin,


se lee la variable supervisada hasta que aumente sobre el punto de equilibrio. Al superarse el umbral, se activa el indicador luminoso y se inicia un nuevo proceso de adquisicin y comparacin de datos, hasta cuando finalice la situacin de alarma. Al
regresar la variable a un valor permitido, se inicia el proceso con la salida de alarma
desactivada.
La siguiente instruccin de este grupo es RST n, sta es en realidad una instruccin de interrupcin. En el captulo 8 se describir como usar esta instruccin
durante una operacin de interrupcin.

RST n

n: 0,1,2,7

(pila) (PC); (SP) (SP) 2; (PC) 8*n

El contenido del contador de programa es cargado en la pila. El registro SP es


decrementado en dos. La prxima instruccin del programa es buscada en la posicin
de memoria cuya direccin es el resultado de multiplicar por ocho el operando de la
instruccin. Esta instruccin est destinada a ser usada durante el proceso de interrupcin del P. Es equivalente a una llamada CALL direccin, pero solo ocupa un byte de
memoria, en lugar de tres bytes.
Cuando un dispositivo externo interrumpe al procesador activando la lnea
INTR, el procesador detiene la ejecucin del programa y espera que el perifrico co-

249

Introduccin a la Programacin del 8085A

loque en el bus una instruccin RST n con la direccin de la rutina de servicio de interrupcin.
(PCL) (L); (PCH) (H)

PCHL

Produce un salto a la posicin de memoria cuya direccin es especificada por


el contenido del registro par HL

6.4.5 Grupo de instrucciones aritmticas


La mayora de las tareas de cmputo realizadas por el 8085A exigen la ejecucin de operaciones aritmticas como suma, sustraccin, multiplicacin y divisin.
Adems para la realizacin de lazos de programacin son necesarias instrucciones de
incremento y decremento del contenido de un registro usado como contador. Estas
ltimas instrucciones, y las de suma y resta estn disponibles en el repertorio de instrucciones del P. Para realizar cualquier otra operacin matemtica, debe escribirse
una rutina usando las instrucciones de suma y resta y la capacidad de rotacin del
registro acumulador.
Las instrucciones de este grupo ejecutan operaciones con registros, y posiciones de memoria y datos inmediatos de ocho bits, estando siempre uno de los operandos en el acumulador, donde tambin se deposita el resultado. La mayora de las instrucciones aritmticas afectan las banderas.
Tabla. 6.7 Grupo de instrucciones aritmticas

Instrucciones aritmticas
INR r

(r) (r) + (1)

ADC M

(A)(A)+ [(H)(L)]+(CY)

INR M

[(H)(L)] [(H)(L)] + (1)

ACI dato

(A) (A) + (dato) +(CY)

DCR r

(r) (r) - (1)

DAA

DCR M

[(H)(L)] [(H)(L)] - (1)

SUB r

(A)(A) - ( r)

INX rP

(rP) (rh) (rl) + (1)

SUB M

(A) (A) - [(H)(L)]

DCX rP

(rP) (rh) (rl) - (1)

SUI dato

(A) (A) - (dato)

ADD r

(A)(A) + ( r)

SBB r

(A) (A) - (r) - (CY)

ADD M

(A) (A) + [(H)(L)]

SBB M

(A)(A)- [(H)(L)] - (CY)

ADI dato

(A) (A) + (dato)

SBI dato

(A) (A) - (dato) - (CY)

ADC r

(A)(A)+ (r) + (CY)

DAD rP

(H) (L) (H) (L)+ (rh) (rl)

Ajuste Decimal del A

250

Introduccin a la Programacin del 8085A

Instrucciones de incremento y decremento


Las instrucciones que producen el incremento y el decremento en la unidad
de un registro o posicin de memoria son de uso obligado para el establecimiento de
lazos de programacin. stos permiten ejecutar N veces una secuencia de cdigo especifica, hasta cuando una condicin terminal es alcanzada. En su forma bsica, un
lazo repite una serie de instrucciones, tantas veces como indique un contador cargado
antes de iniciar la iteracin. En cada paso se disminuye o incrementa el contador hasta cuando llegue a cero o a un valor determinado. Una instruccin de salto condicional se encarga de decidir, de acuerdo con el estado del contador, la realizacin de una
nueva iteracin o la salida del bucle.

(a)

(b)

Fig. 6.31 Modos de establecer lazos de programacin. a) REPEAT-UNTIL b) DO-WHILE

La figura 6.31 muestra los diagramas de flujo de dos formas de realizar un bucle. La estructura lgica de la izquierda se conoce como REPEAT-UNTIL o iteracin
al menos un paso. Esta ltima denominacin es debida a que, la secuencia de cdigo
se ejecuta y luego se examina la condicin. Como contador puede usarse cualquiera
de los registros internos o una posicin de memoria. El modo de conteo puede ser

251

Introduccin a la Programacin del 8085A

ascendente o descendente. El diagrama de la estructura REPEAT-UNTIL de la figura


6.35, usa el modo de conteo hacia abajo. Una instruccin condicional JNZ garantiza
la realizacin de un nuevo pasa hasta cuando el registro llegue a cero. Para disminuir
e incrementar un registro de 8 bits o un dato en memoria, se utilizan las instrucciones
DCR e INR.
(r)(r) + (1)
[(H)(L)] [(H)(L)] + (1)

INR r
INR M

El dato especificado por el operando, es incrementado en uno.


(r)(r) - (1)
[(H)(L)] [(H)(L)] - (1)

DCR r
DCR M
Resta uno del contenido del byte especificado

Las instrucciones INR y DCR afectan todas las banderas excepto el bit de acarreo. Al conservar el estado de CY, pueden se utilizadas en rutinas aritmticas de precisin mltiple.
El ejemplo 6.14 es una muestra de un lazo de programacin realizado con estructura lgica al menos un paso.

Ejemplo 6.14
La tarea consiste en sumar el contenido de los valores almacenados en dos
bloques A y B de la memoria del sistema. El usuario suministra la direccin inicial de
cada bloque y el nmero de valores a sumar. El programa retorna la suma, en el bloque A.

smem:

lxi
lxi
mvi
ldax
add
mov
inr
inr
dcr
jnz
hlt

h,dira
b,dirb
e,num
b
m
m,a
l
c
e
smem

; Direccin inicial bloque a


;

b
; Nmero de valores a sumar
; Dato del bloque b al a
; Sumar con dato del bloque a
; Resultado al bloque A
; Direccin siguiente de ambos
; bloques
; Decremento del contador
; Repetir hasta contador igual 0

Al inicio del programa se introducen las direcciones de inicio de ambos bloques de memoria, y el nmero de elementos de cada bloque. El lazo SMEM, se inicia
sumando las posiciones correspondientes de ambas reas, hasta cuando el registro
contador llega a cero, momento cuando finaliza el lazo.

252

Introduccin a la Programacin del 8085A

El modo alterno para control de iteracin es DO-WHILE o estructura quizs


ningn paso. En la figura 6.31 se observa que la decisin de control del lazo es realizada al inicio del lazo, por lo cual existe la posibilidad que nunca se ejecute la secuencia de cdigo. Si se usa DO-WHILE para realizar N iteraciones, debe cargarse el
contador con el valor N+1, como indica el ejemplo 6.15
Ejemplo 6.15
Use una estructura DO-WHILE para resolver el problema planteado en el
ejemplo anterior.

smem:

salir:

lxi
lxi
mvi
dcr
jz
ldax
add
mov
inr
inr
jmp
hlt

h,dira
b,dirb
e,num+1
e
salir
b
m
m,a
l
c
smem

; Direccin inicial bloque a


;

b
;Nmero de valores a sumar
; Decremento del contador
; Si contador cero, salir
; Dato del bloque b al A
; Sumar con dato del bloque a
; Resultado al bloque a
; Direccin siguiente de ambos
; Bloques
; Repetir

En este caso la consulta se realiza al inicio del lazo, observe que si carga el valor 1 en el contador, no se ejecutar paso alguno. El primer decremento del contador,
lo hace cero y la instruccin de salto condicional forzar la salida de la rutina.
El uso de registros de 8 bits como contadores, limita el nmero posible de iteraciones a 256. En casos que sea necesario un nmero mayor de pasos en un bucle,
pueden usarse registros pares para el control de los pasos. El 8085A tiene instrucciones para el incremento y decremento de registros pares. Estas son: INX y DCX.
(rp)(rp) + (1)

INX rp
Suma uno al registro par especificado
DCX r

(rp)(rp) - (1)
Substrae la unidad del registro par especificado.

Estas instrucciones, por desgracia, no afectan las banderas de P. De modo


que para probar cuando el registro contador llega a cero, debe usarse otro mtodo.
Considere ahora que el programa anterior deba sumar el contenido de un nmero de posiciones de memoria superior a 256, por ejemplo 512. La solucin se
muestra en el ejemplo 6.16.

Introduccin a la Programacin del 8085A

253

Ejemplo 6.16
Use una estructura REPEAT-UNTIL para sumar los contenidos de las posiciones correspondientes de dos bloques de memoria de 512 bytes. La direccin inicial de
cada rea de la memoria es: E200H y E800H
;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------Lxi
sp,tope
; Se inicia el apuntador de pila
lxi
h,e200h
lxi
b,e800h
lxi
d,200h
; Se sumarn 512 valores
call
smem
hlt
;---------------------------------------------------------------------------------;
Subrutina SMEM
;---------------------------------------------------------------------------------smem:
ldax
b
add
m
mov
m,a
inx
h
inx
b
dcx
d
; Decremento del contador
mov
a,e
; Byte bajo del contador al a
ora d
; Se realiza un OR con el byte bajo
jnz
smem
; Si z=1, el contador lleg a cero
ret

El programa principal carga las direcciones de inicio de cada zona de la memoria donde se encuentran los sumandos. El registro par DE se usa como contador de
las 512 posiciones a sumar. La subrutina SMEM realiza la suma y en cada paso comprueba si el contador lleg a cero. Para esto se ejecuta una funcin OR entre ambos
bytes del contador. El resultado ser cero slo cuando el contenido de los registros D
y E sean ambos cero.
No es imprescindible conocer con anterioridad el nmero de pasos que debe
transitar un bucle de programacin. La salida o mantenimiento del lazo puede depender de la ocurrencia de un evento y no del estado de un contador.
Ejemplo 6.17
Dada la direccin de inicio de una zona de la memoria, el programa debe leer
cada posicin. Si el valor en una celda es mayor o igual a 16, debe sustituirse con
FFH. En caso que el dato sea menor que 16, debe escribirse el nmero 20H en la posicin de memoria bajo prueba. El proceso debe culminar cuando el dato ledo sea
igual a 41H.

254

Introduccin a la Programacin del 8085A

prox:

menor:
seguir:
salir:

lxi
mov
cpi
jz
cpi
jc
mvi
jmp
mvi
inx
jmp
hlt

h,e200
a,m
41h
salir
10h
menor
m,ffh
seguir
m,20h
h
prox

; Direccin de inicio en hl
; Mover valor al a
; Comparar con 41h
; Si igual, salir
; Comparar con 16
; Si menor, escribir 20h
; Si mayor o igual, escribir ffh

; Apuntar posicin siguiente


; Leer valor siguiente

El nmero de pasos que cumple el lazo depende de en cual posicin se encuentre el patrn 41H. Si es hallado en la primera celda examinada: E200H, el programa finalizar sin recorrer algn paso. Si 41H est almacenado en la posicin con
direccin E9FFH, se leern 2048 celdas y se realizarn las sustituciones correspondientes.
Ejemplo 6.18
Se requiere llenar un rea de memoria con un valor determinado. Los datos de
entrada son la direccin inicial y final de la zona de memoria y el dato a escribir.
;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
lxi
h,dinicio
lxi
d,dfinal
inx
d
mvi
b,dato
call
llenar
hlt
;---------------------------------------------------------------------------------;
Subrutina LLENAR
;---------------------------------------------------------------------------------llenar:
mov
m,b
inx
h
mov
a,l
cmp
e
jnz
llenar
mov
a,h
cmp
d
jnz
llenar
ret

El programa lee la posicin de inicio: DINICIO, y sustituye su contenido, y el


de posiciones consecutivas, con el valor DATO. El proceso culmina cuando se ha
escrito la posicin de memoria con direccin DFINAL.

255

Introduccin a la Programacin del 8085A

Instrucciones de suma
ADD r, ADD M y ADI dato suman el contenido del A y el operando de referencia. Las otras tres instrucciones de suma: ADC r, ADC M, y ACI dato suman el
operando y el bit de acarreo al byte en el acumulador. Afectan todas las banderas.
ADD r

(A)(A) + ( r)

Suma el acumulador y el registro especificado, el resultado se deposita en el


acumulador.

Ejemplo: ADD C, con (A) = 34H y (C)=76H


00110100 (A) 34H
+ 01110110 (C) 76H
10101010 (A) AAH

(A) (A) + [(H)(L)]

ADD M

Ejecuta la suma entre el acumulador y el contenido de la posicin de memoria


apuntada por el registro par HL, el resultado se carga en el acumulador.
(A) (A) + (dato)

ADI dato

Realiza la suma entre el segundo byte de la instruccin y el dato en el A.


(A) (A) + ( r) + (CY)

ADC r

Suma el dato en el acumulador, el contenido del registro especificado y la


bandera de acarreo. El resultado se deposita en el acumulador.

ADC M

(A) (A) + [(H)(L)] + (CY)

Suma el dato en la posicin de memoria, el acumulador y el bit de acarreo.

ACI dato
El bit de acarreo y el dato se suman al acumulador.

(A) (A) + (dato) + (CY)

Introduccin a la Programacin del 8085A

256

Suma de nmeros binarios


La instruccin de suma ADD realiza la operacin de adicin de dos nmeros
de 8 bits, sin considerar el estado del bit de acarreo, pero activa a CY si ocurre desborde desde el bit 7 del acumulador. Las reglas para la suma binaria son como se indica a continuacin,
0+0=0
0+1=1

1+0=1
1 + 1 = 0, con acarreo igual a 1

El programa mostrado en el ejemplo 6.19, ejecuta la suma de dos nmeros almacenados en posiciones consecutivas de memoria
Ejemplo 6.19
Dos valores obtenidos desde los puertos de entrada 00H y 04H, son almacenados en posiciones consecutivas de memoria, a partir de la direccin MEM. El programa principal llama a una subrutina SUMA, la cual realiza la suma de los valores
en memoria y devuelve el resultado en la posicin con direccin MEM+2.
;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
in
00h
sta
mem
in
04h
sta
mem+1
call
suma
hlt
;---------------------------------------------------------------------------------;
Subrutina SUMA
;---------------------------------------------------------------------------------suma:
lhld
mem
; Cargar en hl los datos de la suma
mov
a,h
; Mover dato en h al acumulador
add
l
; Sumar con el otro dato en l
sta
mem+2
; Resultado a memoria
ret

Observe que los sumandos son pasados a la subrutina desde la memoria y el


resultado tambin es devuelto en la memoria. Para sumar ahora los contenidos de dos
posiciones de memoria no consecutivas, analice el ejemplo 6.20.
Ejemplo 6.20
Dos valores estn almacenados en las posiciones de memoria no consecutivas
MEM1 y MEM2, El programa debe sumar los nmeros y depositar el resultado en la
direccin de memoria RESULT.

257

Introduccin a la Programacin del 8085A

;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
lxi
h,mem1
; En HL direccin del sumando 1
lxi
b, mem2 ; En BC direccin del sumando 2
lxi
d, resul
; En DE direccin del resultado.
call
suma
hlt
;---------------------------------------------------------------------------------;
Subrutina SUMA
;---------------------------------------------------------------------------------suma: ldax
b
; Cargar en a sumando 1
add
m
; Sumar con el otro operando
stax
d
; Resultado a memoria
ret

En este caso las direcciones donde se encuentran los sumandos y donde debe
depositarse el resultado, son pasadas a la subrutina en los registros pares del
microprocesador. La pila de memoria tambin puede ser utilizada para transferir datos
a una subrutina. El ejemplo 6.21 ilustra el uso de esta zona de la memoria para el paso
de los operandos de una subrutina de suma.
Ejemplo 6.21
Escribir un programa que sume la penltima entrada al stack con la palabra en
memoria cuya direccin est en el tope de la pila. Esta direccin debe contener el
resultado de la operacin con el byte menos significativo del resultado en la direccin
ms baja. Considere que el contenido de la memoria antes de ejecutar el programa es
el mostrado en la figura 6.32.

pila

BA

0200H

4E

0200H

76

0201H

A8

0201H

00

1FFCH

00

1FFCH

02

1FFDH

02

1FFDH

94

1FFEH

94

1FFEH

31

1FFFH

31

1FFFH

2000H

2000H

Antes

pila

Despus

Fig. 6.32 Contenido de la memoria y de la zona de pila antes y despus de ejecutar el programa.

Introduccin a la Programacin del 8085A

258

La operacin a realizar es:


00110001
+ 01110110
10101000

10010100 (3194H) Segunda entrada de la pila


10111010 (76BAH) Contenido de la direccin 201H-200H
01001110 (A84EH)
1
CY

POP
POP
MOV
ADD
MOV
INX
MOV
ADC
MOV
HLT

H
B
A,M
C
M,A
H
A,M
B
M,A

; Se obtiene direccin de sumando 2


; Sumando 1 a registro BC
; Byte bajo de sumando 2 al A
; Se suma a byte bajo de sumando 1
; Resultado parcial a memoria
; Direccin de Byte alto de sumando 2
; Byte alto de sumando 2 al A
; Se suma al byte alto de sumando 1 y al CY

Observe que el uso del la instruccin ADC, garantiza que el valor del acarreo
desde el bit 7 del acumulador despus de la suma de los bytes menos significativos de
los sumandos de 16 bits, es tomado en cuenta y agregado a la suma de los bytes altos.
No se considera el acarreo desde el bit 7 del byte de orden alto.
Suma de nmeros decimales
Los perifricos de entrada al microcomputador no siempre entregan los datos
numricos al computador en cdigo binario o ASCII. Un interruptor rotativo (Thumbwheel switch) de 1 polo y 10 posiciones, por ejemplo, produce una salida de 4 bits
con la informacin codificada en decimal. La lectura del puerto transferir al acumulador el nmero BCD. Si se usa un puerto para cada dgito, los valores pueden ser
almacenados en posiciones consecutivas de memoria para estar disponibles para procesamiento posterior.
En el caso de sistemas que presenten informacin de salida en indicadores de
siete segmentos, los resultados del tratamiento de los datos de entrada deben ser escritos al puerto codificados en BCD. El procedimiento usual es convertir los datos de
entrada a binario natural, procesarlos y volverlos a convertir a BCD antes de transferir
los resultados. Si el procesamiento numrico de los datos consiste en operaciones
aritmticas simples, puede ser conveniente realizarlas directamente como operaciones
en BCD, sin necesidad de utilizar las rutinas de conversin de datos de BCD a binario
y de binario a BCD.
Aunque el 8085A no tiene instrucciones para ejecutar suma de nmeros decimales. Para realizar este tipo de operacin pueden sumarse los valores BCD usando

Introduccin a la Programacin del 8085A

259

la instruccin para suma binaria ADD, y realizar a continuacin un ajuste decimal del
resultado en el acumulador. Para esta ltima operacin, se usa la instruccin DAA.
DAA
Ensambla el byte en el acumulador como dos dgitos de cuatro bits codificados en decimal. Afecta todas las banderas y requiere el uso del bit de acarreo auxiliar,
AC. Para entender como funciona la instruccin considere la siguiente operacin de
dos nmeros BCD:
ADD C, con (A) = 3410 y (C)=7610
0011 0100 (A) 34H
+ 0111 0110 (C) 76H
1010 1010 (A) AAH

El resultado de la operacin es incorrecto, porque ADD considera los valores


de entrada y la salida como binarios. La suma en decimal de 3410 y 7610 debe ser
11010.
Si ahora se ejecuta la instruccin de ajuste decimal,
DAA, con (A) = AAH
PASO

Si el nibble de orden bajo del acumulador es mayor que 9 o la bandera AC es uno, se suma 6
al acumulador. Como A es mayor que 9,
1010
+ 0000
1011

1010 AAH
0110 06H
0000 B0H
1
AC

PASO

Si el nibble de orden alto del acumulador es mayor que 9 o la bandera de acarreo es uno, se
suma 6 al nibble ms significativo del acumulador. Debido a que B es mayor que 9,

+
1

1011 0000 B0H


0110 0000 60H
0001 0000 1010

CY

La bandera de acarreo est activada a 1 y el dato en el acumulador es 1010, de


modo que el resultado es 11010, si se considera el estado del bit CY.

Introduccin a la Programacin del 8085A

260

Considere ahora la suma de los dgitos 710 y 810,


ADD C, con (A) = 0810 y (C)=0710
0000 1000
+ 0000 0111
0000 1111 (A) 0FH

El resultado de sumar 810 y 710 es 1510.


DAA, con (A)
PASO

= 0FH

0000
+ 0000
0001

1111 AAH
0110 06H
0101 1510
1
AC

Como el nibble de orden alto del acumulador es menor que 9 y AC es cero,


es innecesario el paso 2, y el resultado en decimal corresponde al contenido
del A.
En realidad conviene realizar un par de observaciones sobre el modo en que el
P realiza las operaciones internas durante la ejecucin de DAA. Para esto suponga
que se tiene el valor 00H en el acumulador y uno en el bit de acarreo, como resultado
de la suma binaria 87H+79H=100H. S ahora se realiza el ajuste decimal del A.
DAA, con (A) = 00H (CY) = 1 (AC)=1
PASO

Como bandera AC es uno, se suma 6 al acumulador.


0000 0000 00H
0000 0110 06H
0000 0110 06H

La bandera de acarreo CY permanece activada.


PASO

La bandera de acarreo es uno, por lo cual se suma 6 al nibble ms significativo del registro
acumulador.

0000 0110 06H


0110 0000 60H
0110 0110 6610
La bandera de acarreo CY se mantiene en uno.

261

Introduccin a la Programacin del 8085A

La bandera de acarreo est en 1 y el dato en el acumulador es 6610, de modo


que el resultado es 16610, si se considera el estado del bit CY. Las sumas internas del
paso 1 y 2 de DAA, pueden afectar la bandera de acarreo. Si durante el paso 1, ocurre
un desborde desde el bit A3, y este se propaga hasta salir del bit A7, efectivamente la
bandera CY se activar. Pero si est en uno como resultado de la suma binaria, la adicin interna no la pondr en cero. Durante el paso 2 ocurre algo similar. La suma de
06H a los cuatro bits de orden alto del A, puede llevar a uno a CY, pero no la inicia en
cero despus de una suma sin acarreo. La preservacin de la bandera CY de la suma
binaria, permite realizar operaciones de suma decimal mayores de dos dgitos.
Como dato curioso, ninguno de los simuladores del 8085A utilizados por el
autor para probar los ejemplos, ejecutaron la instruccin DAA en forma correcta. Se
probaron al menos una decena de simuladores.
Es necesario que el lector entienda que la instruccin DAA no convierte el dato en el registro acumulador a nmeros decimales. Solo ensambla como dos dgitos
BCD el byte almacenado en el A, resultado de la suma de dos nmeros decimales.
Esta es la nica instruccin que requiere examinar la bandera de acarreo auxiliar para
realizar su funcin. DAA debe ser usada slo con instrucciones que afecten este bit de
estado. Por ejemplo, suponga que se carga en el registro acumulador el valor 20H
usando la instruccin MVI A,20H. Si a continuacin se ejecuta DAA, el contenido del
acumulador se mantiene en 20H. Si por el contrario, los registros A y B contienen los
valores decimales: A=1710 y B=0910, y se suman usando ADD B, se obtiene como
resultado A=20H y la bandera AC se pone a uno. Si ahora se realiza un ajuste decimal
del A, el dato en el A despus de ejecutar DAA ser 2610. Tenga en cuenta en cuenta
que 1710 + 0910 = 2610.

Ejemplo 6.22
Deben sumarse dos nmeros decimales de 4 dgitos. Los operandos estn almacenados en la memoria como indica la figura 6.33. Los 3 bytes del resultado, se
cargarn en las 2 posiciones de memoria ocupada por el operando 1, y en la siguiente.

48

37

67
95
Antes

E040H

15

E040H

E041H

33

E041H

01

E042H

67

E050H

E050H

E051H

Despus

Fig. 6.33 Contenido de la memoria antes y despus de ejecutar el la suma 3748+9567.

Introduccin a la Programacin del 8085A

262

El procedimiento para realizar la operacin y el programa de suma decimal, se


presentan a continuacin:
Cargar cero en el bit de acarreo.
Sumar los dos dgitos menos significativos de los operandos:
Realizar el ajuste decimal del resultado.
Mover los dos dgitos del resultado a la memoria.
Sumar los dgitos restantes y la bandera de acarreo.
Si existe acarreo desde el bit 2*N, mover 1 a la memoria.

;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
mvi
b,2
; Cargar contador de dgitos
lxi
h,e040h
; HL apunta a sumando 1
lxi
d,e050h
; DE apunta a sumando 2
call
sumdec
; Realizar la suma
hlt
;---------------------------------------------------------------------------------;
Subrutina SUMDEC
;---------------------------------------------------------------------------------sumdec:
ana
a
; Bit de acarreo a cero
sum:
ldax
d
; Dos dgitos de sum.1 al a
adc
m
; Sumar a dos dgitos del sum2
daa
; Ajuste decimal
mov
m,a
; Resultado parcial a memoria
dcr
b
; Contador menos 1
jz
acarr
; Al terminar, probar CY
inx
h
; Siguientes dgitos de sum.2
inx
d
; Siguientes dgitos de sum.1
jmp
sum
; Continuar operacin
acarr:
rnc
; Retornar si cy es cero.
inx
h
; Si CY=1, cargar la siguiente
mvi
m,01
; Posicin de la memoria
ret

Fig. 6.34 Resultado de la suma de dos nmeros de 6 dgitos

263

Introduccin a la Programacin del 8085A

La subrutina SUMDEC puede sumar valores decimales de 2N dgitos, con


N igual al valor inicial del contador. Por ejemplo para 6 cifras, debe cargarse 03H en
el registro B. El resultado de la operacin se presenta como un valor de 2N+1 dgitos.
La figura 6.34 muestra el contenido de la memoria despus de la ejecucin de la suma
954.567 + 954.567. El cdigo del programa a partir de E000H y el resultado de la
operacin en E040H-E043H.
Una aplicacin de las instrucciones aritmticas en la comprobacin del funcionamiento del sistema microcomputador, consiste en la prueba de la memoria
EPROM o ROM usando el mtodo de verificacin por suma total (checksum). La
prueba requiere que en el momento de la programacin del chip, se grabe en la posicin final un valor correspondiente al resultado de sumar los datos de todas las posiciones de la memoria, excepto la que contiene la suma total. La operacin de suma no
debe considerar el acarreo. En algunos casos se usa como se usa el complemento a
dos de la suma total.
Es usual que al arrancar un sistema, ejecute unas rutinas de diagnstico que
incluye la prueba de la EPROM. La rutina obtiene la suma total y la compara con el
byte almacenado en la posicin final de la memoria. Si los datos coinciden, es muy
probable que el dispositivo est en buen estado. Una divergencia en los valores comparados, indica con certeza que la memoria est daada. La confiabilidad de la prueba
es alta, a pesar que existe una pequea probabilidad que una combinacin de errores
en los datos programados hagan que el resultado coincida con la suma total.
Ejemplo 6.23
Escriba un programa de que permita probar el estado de una memoria ROM,
usando el mtodo de verificacin por suma total.

cont:

lxi
lxi
mvi
mov
add
mov
inx
mov
cmp
jnz
mov
cmp
jnz
mov
xra
hlt

d,dfin
h,dini
b,0
a,m
b
b,a
h
a,e
l
cont
a,d
h
cont
a,b
m

; Obtener direccin final de la ROM


; Cargar direccin final en HL
; Suma se inicia en cero
; Dato en memoria al acumulador
; Agregar a suma acumulada
; Guardar resultado
; Apuntar direccin siguiente
; Comprobar si el contenido del
; Registro par HL
; Corresponde a la
; Direccin de la
; tima posicin de la memoria
; Si no esa s, leer posicin siguiente
; Mover al a, la suma total calculada
; Poner Z=1 si la ROM est buena

El programa coloca en uno la bandera de cero cuando la ROM est en buen estado.

264

Introduccin a la Programacin del 8085A

Instrucciones de sustraccin
El 8085A tiene seis instrucciones dedicadas a realizar la operacin de resta de
nmeros binarios. SUB r, SUB M y SUI dato sustraen el contenido del acumulador y
el operando especificado. Las otras dos instrucciones de resta son: SBB r, SBB M, y
SBI dato sustraen el operando y la bandera de acarreo del byte en el A. Afectan todas
las banderas.
SUB r

(A)(A) - (r)

Resta el dato en el registro especificado del contenido del acumulador, en el


cual se deposita el resultado. La operacin se realiza sumando al A el complemento a
dos del sustraendo, como se muestra a continuacin.
Ejemplo: SBB C, con (A) = B4H y (C)=76H
10001001 -76H complemento a 1 del sustraendo
+ 00000001
10001010 8AH complemento a 2 del sustraendo

1
CY

10110100 (A) B4H


+ 10001010 (C) 8AH
00111110 (A) 3EH

La suma con complemento a dos no afecta el contenido del registro, pero activa el bit de acarreo. La instruccin complementa a CY para usarse como bandera
de prstamo.

SUB M

(A) (A) - [(H)(L)]

Ejecuta la sustraccin del contenido de la posicin de memoria apuntada por


el registro par HL, del dato en el acumulador.

SUI dato

(A) (A) - (dato)

Resta inmediata del dato especificado del byte en el acumulador.


SBB r

(A) (A) -(r) - (CY)

Sustrae el byte almacenado en el registro especificado y el bit de acarreo, del


contenido del acumulador. Al incorporar a la operacin el bit CY, puede ser usado
para sustracciones multibyte. SBB opera como se indica a continuacin:

265

Introduccin a la Programacin del 8085A

SSB C, con (A) = 10H, (C)=08H, (CY)=1


00001000 (C) 08H
+ 00000001 (CY)01H
00001001 (C) 09H

00010000 (A) 10H


+ 11110111 (CY)F7H complemento a 2 (C+CY)
00000111 (C) 07H

SBB agrega la bandera CY al sustraendo, obtiene el complemento a 2 del resultado y lo suma al valor en el acumulador.
(A) (A) - (r) - (CY)

SBB M

Resta el byte en la posicin de memoria indicada por el registro par HL y el


bit de acarreo, del valor en el acumulador.
(A) (A) - (dato) - (CY)

SBI dato

El dato especificado y la bandera de acarreo, son sustrados del contenido del


acumulador.
Resta de nmeros binarios
La programacin de operaciones de sustraccin de nmeros binarios, se realiza en forma similar a como se procede para la suma. Para operandos de 8 bits se usa
la instruccin SUB o SUI, mientras que para restas de nmeros de varios bytes se
recurre a SBB o SBI. Las reglas de la operacin aritmtica de substraccin son,
00=0
0 1 = 1, con prstamo igual a 1

10 =1
11 =0

Ejemplo 6.24
Escribir una subrutina que realice la resta de dos valores de 32 bits. El minuendo y el sustraendo estn almacenados en memoria como indica la figura 6.35.
2B

1000H

C7

1000H

4A

1001H

FC

1001H

23

1002H

22

1002H

23

1003H

23

1003H

F2

2000H

sustraendo

F2
minuendo

2000H

46

2001H

46

2001H

46

2002H

46

2002H

46

2003H

46

2003H

Fig. 6.35 Ubicacin en la memoria del minuendo y el sustraendo.

266

Introduccin a la Programacin del 8085A

;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
ora
a
; Bit de acarreo a cero
mvi
b,04
; Cargar contador de bytes
lxi
h,1000h
; HL apunta a sustraendo
lxi
d,2000h
; DE apunta a minuendo
call
resta
; Realizar operacin
hlt
;---------------------------------------------------------------------------------;
Subrutina RESTA
;---------------------------------------------------------------------------------resta:
ldax
d
; Minuendo al A
sbb
m
; Restar sustraendo
mov
m,a
; Resultado parcial a memoria
dcr
b
; Contador menos 1
rz
; Retornar si z=1
inx
h
; Byte siguiente del sustraendo
inx
d
; Byte siguiente del minuendo
jmp
resta
; Continuar operacin

Un contador cargado por el programa principal, permite variar el nmero de


bytes de los operandos de la sustraccin.
Resta de nmeros decimales
La instruccin de ajuste decimal DAA no funciona sobre el resultado de la
resta de dos nmeros decimales, de modo que para realizar operaciones de sustraccin decimal debe representarse el minuendo como un valor decimal negativo y sumarse al minuendo. Considere la operacin simple de restar el nmero 1710 de 7810.
7810
- 1710
61

7810
+ 8310
16110

El resultado de la operacin a la derecha es 6110 si se descarta el desborde


ocurrido en el dgito de las decenas. Esto se debe a que el valor 8310 es el complemento a diez del sustraendo 1710. Para obtener este complemento debe formarse el
complemento nuevo restando cada dgito del nmero nueve y sumrsele al resultado
la unidad,
99
- 17
82
+ 1
83

sustraendo
complemento nueve
complemento diez

En operaciones con varios dgitos debe considerarse la bandera de prstamo.


En este caso el bit de acarreo en uno indica la ausencia de prstamo desde el sustraendo, debindose sumar el complemento a diez al prximo dgito. Si el bit de aca-

Introduccin a la Programacin del 8085A

267

rreo tiene un valor cero, indicando la ocurrencia de prstamo, debe usarse el complemento a nueve en la siguiente operacin.

Ejemplo:
982510
- 345210
637310
PASO 1

Obtener el complemento a diez del nmero 5210 y sumrselo a 2510


01001000 (48H) Complemento diez de 52
+ 00100101 (25H)
001101101 (6DH)
El bit de prstamo es cero
PASO 2

Realizar el ajuste decimal del resultado parcial


0110
+ 0000
0111

1101 6DH
0110 06H
0011 7310
1
AC

PASO 3

Obtener el complemento a nueve del nmero 3410 y sumrselo a 9810


01100101 (34H)
+ 10011000 (98H)
011111101 (FDH)
PASO 4

Realizar el ajuste decimal del resultado


1111
+ 0000
0000

1101 FDH
0110 06H
0011 1310
1
AC

0000
+ 0110
0110

0011 FDH
0000 60H
0011 6310
1
AC

Introduccin a la Programacin del 8085A

268

Ejemplo 6.25
El programa siguiente usa la subrutina RDEC para restar dos valores decimales de 2*N bits. El minuendo est almacenado el la direccin de memoria MINU y el
sustraendo en SUBST. En est ltima posicin se carga el resultado de la operacin.
;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
lxi
sp,dpila
; Se fija la base de la pila
lxi
h,sustr
; Direccin del sustraendo a hl
lxi
d,minu
; Direccin del minuendo a de
mvi
b,n
; Contador de par de dgitos decimales
call
rdec
hlt
;---------------------------------------------------------------------------------;
Subrutina RDEC
;---------------------------------------------------------------------------------rdec:
stc
; Acarreo en uno. no prestamo.
rep:
mvi
a,99h
; 9910 al acumulador
aci
0
; Se suma el acarreo al a
sub
m
; Complemento 10 del sustraendo
xchg
; HL apunta al minuendo
add
m
; Suma del complemento al minuendo
daa
; Ajuste decimal del resultado
xchg
; HL apunta al sustraendo
mov
m,a
; Resultado a memoria
dcr
b
; Disminuir B
rz
; Retornar si B es cero
inx
h
; Prximo byte (2 dg..) del sustraendo
inx
d
; Prximo byte (2 dg..) del minuendo
jmp
rep

Multiplicacin de nmeros binarios


El producto de dos nmeros binario sin signo puede obtenerse por medio de
dos tcnicas: sumas repetidas y sumas y desplazamientos. El primer mtodo consiste
en sumar el multiplicando tantas veces como indique el multiplicador. Tal procedimiento tiene la desventaja de ser muy lento, pero si la velocidad de cmputo no es un
factor crtico puede ser utilizado.

Ejemplo 6.26
Debe usarse el mtodo de suma repetidas para multiplicar dos nmeros binarios enteros de 8 bits. El operando multiplicador se carga en el registro C y el multiplicando en el registro E.

269

Introduccin a la Programacin del 8085A

mult:

mvi
mov
mov
dad
dcr
jnz
hlt

l,0
h,l
d,h
d
c
mult

; Resultado bajo a cero


; Resultado alto a cero
; Multiplicando alto en cero
; Suma multiplicando a resultado
; Decremento del multiplicador
; Si cero salir.

La rutina de multiplicacin por sumas repetidas fue utilizada para computar el


producto 45H*64H = 1AF4H, requirindose 2417 estados para completar la operacin. A una frecuencia de 3.125 MHz, esto representa un tiempo de 0.7 mS. El tiempo
de cmputo del programa vara con el valor del multiplicador.
La tcnica de sumas y desplazamiento para multiplicar es mucho ms rpida
y se realiza en forma similar a como se obtiene un producto usando lpiz y papel. Las
reglas de la multiplicacin binaria son como se indica a continuacin,
0*0=0
0*1=0

1*0 =0
1*1 =1

El producto final de la operacin es la suma de una serie de productos parciales. Existe un resultado parcial por cada bit del multiplicador. Si un dgito del multiplicador es igual a uno, el producto correspondiente es igual al multiplicando. En caso
que el bit sea cero, el producto parcial ser cero. Cada producto intermedio estar
desplazado un lugar a la derecha con respecto al inmediatamente inferior.
Ejemplo:
11001101 (CDH) Multiplicando
11000111 (C7H) Multiplicador
11001101
11001101
11001101
00000000
00000000
00000000
11001101
11001101
1001111101011011 (9F5BH) Resultado de 16 bits

La multiplicacin de nmeros de 1 byte produce un resultado de 2 bytes. En


general, el nmero de bits del resultado es igual a la suma del nmero de bits de los
operandos. De modo que al multiplicar un valor de 8 bits por uno de 16 bits se obtendr un producto de 24 bits.
Cuando se programa el algoritmo de multiplicacin es ms conveniente sumar
cada producto parcial al ser formado, en vez de totalizarlos todos al final como se
realiza en forma manual.

270

Introduccin a la Programacin del 8085A

Para simplificar el programa se forman los productos parciales desde abajo


hacia arriba, lo cual es equivalente a procesar los bits del multiplicador de izquierda
a derecha, en contraposicin a como se realiza con lpiz y papel. Antes de sumar un
producto parcial, se desplaza un lugar a la izquierda produciendo el mismo efecto
que si cada producto intermedio hubiese sido desplazado un lugar a la derecha con
respecto al de abajo.
Ejemplo 6.27
Escribir un programa para multiplicar dos valores binarios enteros de 8 bits.
Se supone que el registro C contiene el operando multiplicador y el E el multiplicando. El producto resultante se carga en el registro par HL.

mul:

nsu:

mov
mvi
mov
mvi
dad
jnc
dad
dcr
jnz
hlt

h,c
l,0
d,l
b,8
h
nsu
d
b
mul

; Multiplicador al registro h
; Se carga cero en byte bajo del resultado.
; Byte alto del multiplicando a cero
; Contador de bits
; Bit msb del multiplicador al carry.
; Si es 0,no sumar multiplicando a resultado
; Si es 1, sumar multiplicando a resultado
; Disminuir contador de bits.
; Si b es no cero, procesar prximo bit del
; Multiplicador. si b cero, salir

Para probar cada bit del multiplicador, ste se carga en el registro H y se utiliza la instruccin DAD H para rotar el registro HL. Cada ejecucin de esta instruccin
tiene doble efecto. Si el bit 7 de H es uno, ocurrir un desborde y la bandera de acarreo se pone en uno, detectndose un bit uno del multiplicador. La prueba posterior
del bit de acarreo indica si debe sumarse el producto parcial, evitando la suma de los
productos intermedios en cero.
El segundo efecto de la instruccin es que produce el desplazamiento hacia la
izquierda del producto parcial, originalmente en L, el cual progresivamente ocupa los
16 bits de HL, a medida que los bits del operando multiplicador (en H) van siendo
procesados.
El P 8085A invirti 317 estados en calcular el producto 45H*64H = 1AF4H,
lo cual equivale a 0.1 mS. Aunque el tiempo necesario para completar una operacin
de multiplicacin vara con el valor del multiplicador, tal dependencia no es significativa, debido a que solo se requiere realizar una suma (7 estados) por cada bit del
multiplicador en uno.
Para culminar el tema de multiplicacin binaria de enteros sin signo, el ejemplo 6.28 presenta la lista de instrucciones de un programa que ejecuta una multiplicacin binaria con resultado de 24 bits.

271

Introduccin a la Programacin del 8085A

Ejemplo 6.28
En el siguiente programa realiza el producto de un multiplicando de 16 bits
(en el registro par DE) por un multiplicador de 8 bits (almacenado en el registro C).
El byte ms significativo del producto se carga en C y los otros dos bytes en HL. Se
supone que los operandos se cargan en los registros correspondientes antes de ejecutar el programa.
mul168:

mul:

nsu:

mov
mvi
lxi
dad
ral
jnc
dad
aci
dcr
jnz
mov
ret

a,c
b,8
h,0
h
nsu
d
0
b
mul
c,a

; Multiplicador al registro a
; Contador de bits del multiplicador
; Bytes 2 y 3 del resultado a cero
; Desplazar resultado a la izquierda
; Cargar bit del multiplicador en CY
; Si bandera de acarreo es 0, no sumar
; Si cy es 1, sumar multiplicando
; Si hay desborde, sumar CY al a
; Disminuir b
; Si B es no cero, prximo bit
, Si B es 0, salir.

El algoritmo de la multiplicacin de 16 x 8 bits es similar al utilizado para


programar el producto de dos nmeros de 8 bits. En este caso, para formar el resultado de 24 bits, el producto parcial se desplaza desde el registro HL hacia el acumulador a travs del bit de acarreo. Rotando el A hacia la bandera de acarreo se prueban
los bits del multiplicador. Para considerar el desborde del bit ms significativo del
registro par HL se usa la instruccin ACI 0, la cual suma el bit de acarreo al contenido del acumulador.
Divisin de nmeros binarios
La operacin de divisin se ejecuta usando las reglas de multiplicacin y sustraccin, tal como se realiza en aritmtica convencional. Por ejemplo, considere la
divisin A5H 12H,
Ejemplo:
1001 Cociente
Divisor 10010 10100101 Dividendo
10010
000101
00000
001010
00000
010101
10010
00011 Residuo

El resultado de la operacin es 1001B (09H) y el residuo 11B (03H).

272

Introduccin a la Programacin del 8085A

La divisin es un poco ms compleja de realizar que la multiplicacin, pero


se basa en los mismos principios usados en la aritmtica clsica. El procedimiento
para realizar la operacin de divisin binaria, se expone a continuacin,
1. Se seleccionan los bits del dividendo, iniciando por el ms significativo. Mientras el
grupo de bits elegidos representen un valor menor que el divisor se colocan ceros en
el cociente.
2. Cuando los dgitos extrados del dividendo forman un nmero que supera al divisor,
se coloca uno en el cociente y el divisor es restado del dividendo parcial. El resultado constituye el primer residuo parcial.
3. En cada paso del proceso se toman bits adicionales del dividendo y se colocan en el
residuo parcial. El divisor es comparado con nuevo residuo parcial. Si el divisor es
menor o igual, se sustrae del residuo parcial y uno es colocado en el cociente. En caso contrario, se pone cero en el cociente permaneciendo invariable el residuo parcial.
4. Despus de cada paso el residuo parcial es desplazado un bit hacia la izquierda. El
proceso finaliza cuando se halla seleccionado el bits menos significativo del dividendo

Ejemplo 6.29
Escribir una rutina para dividir dos valores binarios de 16 bits y producir un
cociente y un residuo de 16 bits. El registro par DE contiene el dividendo y el cociente. El registro BC almacena el divisor y el residuo se carga en el registro HL.
div1616:
div1:

cy0:
cont:

div2:

mvi
lxi
xchg
dad
xchg
jnc
dad
inr
jmp
dad
inr
push
mov
sbb
mov
mov
sbb
mov
jnc
dcr
dad
pop
dcr
jnz
ret

a,10h
h,0

; Contador de bits a 16
; HL en cero al inicio
; CY msb del dividendo

h
cy0
h
l
cont
h
e
psw
a,l
c
l,a
a,h
b
h,a
div2
e
b
psw
a
div1

; Bit del dividendo se carga en


; HL desde CY y HL se
; desplaza
; un bit
; hacia la izquierda
; Uno al cociente
; Se salva el contador de bits
; Se resta el
; Dividendo parcial
; Del divisor
; El resultado
; Queda
; En HL
; Si resultado es positivo, continuar
; Si es negativo cero al cociente
; Restaurar residuo parcial
; Recuperar contador
; Siguiente bit del dividendo.

273

Introduccin a la Programacin del 8085A

La programacin del cdigo de divisin se realizo en forma algo diferente al


algoritmo descrito. Al inicio del proceso, se coloca uno en el registro cociente y el
divisor se substrae del dividendo parcial cada vez que un nuevo bit del dividendo es
seleccionado. Si el resultado es negativo, se remueve el uno del cociente (se cambia
por cero) y se restaura el dividendo parcial, sumndole el dividendo al divisor. Al
obtenerse el primer uno vlido en el cociente, el proceso contina como se indic.

Multiplicacin y divisin de nmeros decimales


Los algoritmos para multiplicar y dividir valores decimales son lentos y ocupan mucha espacio de memoria. En muchos casos puede ser ms conveniente utilizar
un mtodo alternativo. Este, puede consistir en convertir los operandos decimales a
binario, ejecutar la operacin en este al sistema de representacin numrica y convertir el resultado a BCD. La multiplicacin decimal puede hacerse por el mtodo de
sumas repetidas, mientras que para la divisin, puede acudirse al procedimiento de
restas repetidas.
Ejemplo 6.30
Este ejemplo ilustra el mtodo de sumas para realizar el producto de un valor
BDC de 4 dgitos almacenado a partir de la posicin de memoria MPNDO por un
nmero de dos dgitos decimales en la direccin MPDOR. A partir de sta ltima posicin se obtiene el producto de 6 cifras BCD.

rep:

lxi
lxi
mov
mvi
mvi
lxi
lxi
call
mov
adi
daa
mov
jnz
hlt

sp,tope
h,mpdor
c,m
m,0
b,3
h,mpdor
d,mpndo
sumdec
a,c
99h
c,a
rep

; Se inicia el apuntador de pila


; Direccin del multiplicador
; Multiplicador al registro c
; Se inicia a suma en cero
; Producto de 6 dgitos bcd
; Direccin del multiplicador
; Direccin del multiplicando
; Se realiza la suma
; Decremento
; del
; contador
; BCD
; Si cero, salir

La rutina SUMDEC es llamada tantas veces como indique el multiplicador.


Tal valor viene expresado en BCD. Para utilizar una variable BCD como contador,
se suma 99H al valor del registro y se ajusta el resultado a decimal con DAA. Suponga que el A contiene 15H, al sumarle 99H se obtiene AEH, y despus del ajuste
decimal el A tendr 14H y la bandera de acarreo se activar a 1. Si se desea incrementar el contador BCD, debe sumarse 01H al A antes de realizar el ajuste decimal.

274

Introduccin a la Programacin del 8085A

La ltima instruccin aritmtica del 8085A, aun no comentada, realiza la suma de nmeros de 16 bits. Esta es DAD rp.
DAD rP

(H) (L) (H) (L)+ (rh) (rl)

Suma el dato de 16 bits almacenado en el registro par especificado, al contenido del registro par HL. El resultado de la operacin aritmtica se carga en HL. Esta
instruccin solo afecta la bandera de acarreo. Los registros operandos permitidos
son: BC, DE, HL y el SP.
La instruccin DAD, adems de permitir la suma de nmeros de doble precisin, puede ser usada para el desplazamiento hacia la izquierda de datos de 16 bits.
Las instrucciones de rotacin del 8085A slo actan sobre valores de 8 bits almacenados en el acumulador. Cuando se requiere desplazar datos de 2 bytes, debe escribirse una rutina con tal propsito.

Ejemplo 6.31
Escribir un programa para rotar a la izquierda nmeros de 16 bits,
;----------------------------------------------------------------------------------;
Programa principal
;-----------------------------------------------------------------------------------lxi
sp,tope
; Se inicia el apuntador de pila
lxi
h,dato16
; Valor a desplazar
mvi
b,nrot
; Nmero de desplazamientos
ora
a
; Bandera de acarreo acero
call
rotar
;Rotar
hlt
;---------------------------------------------------------------------------------;
Subrutina ROTAR
;---------------------------------------------------------------------------------rotar:
mov
a,l
; Byte bajo al acumulador
ral
; Rotar a la izquierda
mov
l,a
; resultado parcial
mov
a,h
; Byte alto al acumulador
ral
; Rotar a la izquierda
mov
h,a
; resultado parcial
dcr
b
jnz
lazo
; prximo desplazamiento
ret

La subrutina ROTAR desplaza el dato en el registro par HL, NROT posiciones hacia la izquierda. El procedimiento consiste en usar la bandera de acarreo como
paso intermedio para desplazar el bit 7 del registro L al bit 0 del registro H. Considere que el dato de dos bytes es 34A7H y que debe desplazarse dos bits hacia la izquierda. En la figura 6.36 se muestra el contenido del registro HL, despus de cumplirse cada rotacin.

275

Introduccin a la Programacin del 8085A

H
0

CY

Estado inicial
0

Despus de la primera rotacin de L

Despus de la primera rotacin de H

Despus de la segunda rotacin de L

Despus de la segunda rotacin de H

Fig. 6.36 Desplazamiento de un nmero de 16 bits dos lugares hacia la izquierda.

Aunque en este caso no es necesario, antes de rotar el contenido del registro


H debe cargarse cero en la bandera de acarreo. Esto previene que un 1 se introduzca
en el bit 0 de L cuando el registro se rota hacia la izquierda. El resultado de rotar el
nmero 34A7H (1347910) es D29CH (5391610).
El lector puede verificar con facilidad que el desplazamiento de 34A7H, dos
lugares hacia la izquierda, ha multiplicado el nmero por cuatro. En general, el desplazamiento de un valor entero hacia la izquierda multiplica el nmero por 2, mientras hacia la derecha, lo divide por 2. Por supuesto, debe considerarse si la operacin
desplaza un uno desde el bit 7 del dato, en cuyo caso el resultado de la multiplicacin
no puede representarse con un byte. Las operaciones de multiplicacin y divisin por
nmeros potencias de dos, son factibles de realizarse con desplazamientos hacia la
derecha o hacia la izquierda.
El uso de la instruccin DAD simplifica de modo considerable la tarea de rotar hacia la izquierda valores de 16 bits, si se considera que la operacin 2*X es
equivalente a X+X. La instruccin DAD H efectivamente desplaza el contenido del
registro par a HL, un bit hacia la izquierda. De modo que, una secuencia de cuatro
instrucciones DAD H, realizan la misma tarea que la subrutina rotar, con NROT = 4.

Introduccin a la Programacin del 8085A

276

6.5 ARITMTICA DE PUNTO FIJO O DE PUNTO FLOTANTE


Los nmeros binarios pueden ser representados en el computador como un valor entero o de punto flotante. Cada modo de representacin tiene alguna ventaja que
en general depende del tipo de aplicacin. Los Ps y Ctrls usan por defecto aritmtica
entera para procesar los operandos. Para proveer representacin en punto flotante en
sistemas empotrados lo usual es usar una librera matemtica que se incorpora al cdigo del proyecto. En cambio, los procesadores modernos incorporan en su interior
un coprocesador matemtico que funciona en paralelo con el P y puede realizar
adems de las operaciones fundamentales, clculos con funciones trigonomtricas,
exponenciales y logartmicas. En este caso, si el programa que se ejecuta usa el coprocesador, el desempeo del sistema aumenta sustancialmente.
Las caractersticas bsicas de los sistemas de representacin numrica de punto fijo y de punto flotante, son las siguientes:
Punto fijo
Los nmeros son representados y manipulados como valores enteros.
El rango de valores posibles de representar es menor.
Requiere un cdigo ms complejo.
Punto flotante
Los nmeros son representados por la combinacin de una parte fraccional o mantisa y
una parte exponencial.
Hardware adicional puede procesar estas partes.
Tiene mayor costo y es ms lento.

La representacin en punto flotante puede usarse si los requisitos de memoria


y velocidad de la aplicacin no se ve comprometida por el cdigo adicional necesario.
El uso de hardware de punto flotante aumenta la velocidad pero incrementa los costos. En sistemas basados en microprocesadores lo usual es utilizar aritmtica entera
para realizar las operaciones matemticas y usar formatos especiales para representar
fracciones.
Como debe haber observado el lector, todas las operaciones matemticas realizadas con el lenguaje de mquina del 8085, produce como resultado un nmero entero. En algunas aplicaciones es comn que el P deba trabajar con nmeros muy
grandes que no pueden ser representados con un byte. En estos casos, debe recurrirse
a la aritmtica de precisin mltiple donde son necesarios 2 o ms bytes para almacenar los operandos y resultados. En la seccin anterior se mostraron diversos ejemplos
de operaciones matemticas con entradas y salidas de nmeros con varios dgitos.
Tambin puede ser necesario que el P realice alguna tarea que involucre la represen-

Introduccin a la Programacin del 8085A

277

tacin de valores fraccionales. El equivalente binario de la fraccin puede ser representado por un nmero entero que ocupe uno o ms bytes, separando las partes enteras y decimal por un punto decimal imaginario. La exactitud de la representacin es
variable. En ocasiones, la fraccin puede ser representada en forma exacta en el sistema binario.
Por ejemplo, el sen(30) = , puede almacenarse como sen(30) = 5000, tenindose en cuenta que para obtener el resultado correcto debe dividirse este valor
por 10000. Por el contrario, el nmero decimal sen(60) = 0,866025403, no tendra
un equivalente binario exacto con este mtodo. El valor decimal original, debe ser
truncado o redondeado para ser cargado en dos bytes: sen(60) = 8660
Tambin es posible que el rango de las variables procesadas durante una tarea
sea tan grande, que la representacin binaria de los nmeros enteros y fraccionales
como valores multibytes, exija una cantidad de memoria apreciable. No siempre la
precisin requerida del procesamiento, justifica el uso de nmeros de precisin mltiple. En estos casos, si se desea un ahorro de la memoria del sistema puede apelarse a
la representacin de punto flotante. En este trabajo, no se discute este tpico, pudiendo el lector consultar la literatura recomendada.
Suponga ahora que debe multiplicarse por 1.73 el valor DATO (9410) usando
nmeros de punto fijo, almacenado en memoria. Como el nmero 1.73 no puede ser
representado, se multiplica por 100 y se ejecuta la operacin entera:
N=

(173 DATO) (173 94) 16262


=
=
= 162
100
100
100

Expresado en nmeros hexadecimales como,


N=

(ADH 5EH) 3F86H


=
= A2H = 16210
64H
64H

Observe que el valor DATO (9410) es multiplicado efectivamente por el nmero 1.73, (el resultado real es 162.62) an cuando solo se usaron nmeros enteros.
La precisin puede ser mejorada si se redondea el resultado.
Considere ahora que el P debe medir y presentar el valor de una variable z,
la cual depende de un parmetro w, conocido. Para esto se debe resolver la ecuacin:

z = 0.43 w 62
La ecuacin es escalada multiplicndola por 100, para que los coeficientes del
polinomio puedan representarse con nmeros enteros.

Introduccin a la Programacin del 8085A

278

z = 43 w 6200
Se us el valor de 100 para escalar la ecuacin porque conviene por la naturaleza de la aplicacin. Se trata de un instrumento que adquiere desde un conversor
A/D el valor de la muestra w, lo multiplica por 43 y luego le suma el complemento a
dos de 6200. El resultado z obtenido es entonces convertido a BCD. Aunque este
valor esta centuplicado no es necesario usar una rutina de divisin para dividirlo por
100, basta con activar el punto decimal en el tercer dgito BCD, contado a partir del
dgito del extremo derecho.
En aplicaciones de procesamiento digital de seales es usual el uso de hardware de punto fijo, por lo limitado de la memoria disponible y las restricciones de
velocidad. Como los coeficientes de los filtros digitales son pequeos, los valores de
punto fijo deben ser escalados. En general, cuando se usa aritmtica de punto fijo, los
nmeros deben ser escalados para evitar condiciones de desborde errores altos de
cuantizacin.
El punto binario es el medio por el cual los nmeros de punto fijo son escados. Es el programa quien determina la posicin del punto binario. La ALU ejecuta
operaciones como suma y resta sin detectar el factor de escala. Las operaciones de
punto fijo con o sin signo son ejecutadas como si el punto binario estuviese a la derecha del bit menos significativo. Los nmeros en punto fijo pueden ser escalados por
tipos de datos cuyo escalamiento es definido por la posicin por defecto del punto
decimal o se puede usar un tipo de datos en punto fijo con un escalamiento lineal
arbitrario.
Los tipos de datos de punto fijo son:
Enteros

Para enteros con o sin signo el punto binario por defecto est colocado a la derecha del bit
menos significativo.
Fracciones

Para fracciones sin signo, el punto binario por defecto est ubicado a la izquierda del bit
ms significativo mientras para nmeros con signo est a la derecha del bit ms significativo.
Nmeros de punto fijo generalizados

No existe un punto binario por defecto.

Un tratamiento con detalle del tpico de representacin de datos en punto fijo


y de las tcnicas de escalamiento escapa al alcance de este trabajo. El lector interesado debe consultar literatura relacionada. Como ejemplo, considere que se debe representar el nmero fraccional 0.95 y -0.75 usando una palabra de 16 bits. Una notacin

279

Introduccin a la Programacin del 8085A

utilizada en sistemas empotrados y apropiadas para este caso es el conocido formato


Qm,n, donde:
Q indica que el nmero est en formato Q.
m es el nmero de bits usado ara representar la porcin entera en complemento dos del nmero.
n indica nmero de bits usado ara representar la porcin fraccional en complemento dos del
nmero o el nmero de bits a la derecha del punto binario.

Por ejemplo un nmero de 16 bits con signo y con 15 bits a la derecha del
punto binario se expresa como Q0.15 o simplemente Q.15. Los valores indicados se
representan como:
0.9510
bn-1

bn-2

b0

-0.7510
1

Fig. 6.37 Notacin en formato Q.15

Para encontrar la representacin se multiplica el coeficiente por 215. Observe


que el valor del nmero puede ser encontrado con:
N = b n 1 20 + b n 2 2 1 " + b1 2 (n 2) b 0 2 (n 1)

Una aplicacin tpica donde puede usarse el formato Q.15 es en un filtro digital. Este adquiere una muestra de una seal bipolar de entrada y la usa para resolver
una ecuacin diferencia que describe el algoritmo de filtrado. A continuacin, el valor
resultante del procesamiento de la muestra de entrada aplicado a las entradas de un
conversor D/A. El formato Q.15 se usa para representarse los coeficientes de la ecuacin del filtro. La notacin Q.15 permite representar valores entre -1 y 0.99 con la
ventaja que al ser todos los nmeros .1 no puede ocurrir desborde durante las operaciones de multiplicacin.
Debido a que los clculos se realizan usando aritmtica de complemento dos,
los valores entregados por el conversor A/D deben ser trasladados a este formato.
Esto puede hacerse en forma sencilla si el circuito de entrada es diseado para leer
los valores en formato binario desplazado. En esta representacin al voltaje de entrada ms negativo se le asigna el nmero 0, cero voltios lo representa el nmero 128 y
255 es asignado al voltaje ms positivo.

Introduccin a la Programacin del 8085A

280

Debido a que los microcontroladores tienen un convertidor A/D de entrada


unipolar, la seal de entrada al filtro debe ser ajustada usando amplificadores operacionales con la onda centrada en + 2.5 voltios con variacin entre 0 y +5 voltios. El
valor de la muestra de entrada en binario desplazado es convertido a complemento
dos simplemente mediante la inversin lgica del bit ms significativo de la palabra.
Una vez completados los clculos de procesamiento de la seal, el nmero resultante
es convertido a binario desplazado complementando el bit de mayor peso y es enviado al conversor D/A.
Para efectos de los clculos, los coeficientes en formato Q.15 se almacenan
en la memoria del sistema y las muestras de la seal de entrada se leen del CAD de 8
bits. La ecuacin del filtro puede resolverse mediante sumas y productos, esto es los
coeficientes se multiplican con signo por valores de entrada y los productos parciales
son sumados con signo. El byte de entrada es multiplicado por 256 para obtener un
nmero de 16 bits el cual es multiplicado por el coeficiente que corresponda obtenindose un nmero de 32 bits, lo cual implica un bit extra de signo que debe ser
suprimido. Los resultados parciales son sumados y el resultado final es truncado o
redondeado a un valor de 8 bits que va al conversor D/A y al circuito de acondicionamiento de salida.
Por ejemplo, suponga que la entrada del filtro es una forma de onda seno de
2.5 V de amplitud. Si se le inserta a la seal un nivel DC de +2.5 V, se obtiene la onda deseada con variacin entre 0 y + 5 V. Suponga que para simplificar el ejemplo, la
onda de entrada debe ser multiplicada por el coeficiente +0.75 (6000H). Considere
que en un instante determinado, se adquiere desde el convertidor A/D una muestra de
valor FFH, la cual se pasa a complemento dos como 7FH y a un valor de 16 bits como 7F00H. Ahora se realiza la multiplicacin con signo la cual da como resultado el
nmero de 32 bits 6000H 7F00H = 2FA00000H. Eliminando el bit de signo adicional se obtiene 5F400000H.
Truncando este valor a una longitud de 8 bits se tiene 5FH el cual es retornado a binario desplazado como DFH. Este valor es aplicado al convertidor digital analgico produciendo un voltaje de + 4.355 V. Al restituir el nivel DC de la seal se
obtiene una tensin de + 1.855 V. Observe que el resultado de multiplicar la entrada
por 0.75 es una salida de + 1.875 V por lo tanto se ejecut con xito la operacin
deseada.
En la prctica, programar este procedimiento para microcontroladores o microprocesadores, requiere arduos esfuerzos. Adems, debe prestarse especial atencin
a los efectos de usar palabras de longitud limitada para representar los nmeros. Estos efectos se relacionan con: cuantizacin de la seal en la conversin A/D, errores
por redondeo-truncado y cuantizacin de los coeficientes del filtro. Esto puede resultar en desplazamiento de los polos y ceros de la funcin de transferencia del filtro, lo
cual puede causar variaciones en la ganancia, en las frecuencias de corte del filtro o
en la estabilidad del sistema.

281

Introduccin a la Programacin del 8085A

Lo recomendado es simular el algoritmo usando un programa de simulacin


adecuado, para verificar el modelo del filtro con aritmtica de punto fijo y palabras
de la longitud seleccionada. El paquete MATLAB y su herramienta para aritmtica de
punto fijo, es una buena eleccin para el propsito sealado.
Clculo de la raz entera de un nmero binario
Las operaciones matemticas posibles de ejecutarse usando aritmtica de punto fijo no se limitan a suma, resta, multiplicacin y divisin. En realidad, cualquier
funcin matemtica por compleja que sea, puede ser programada si se dispone del
algoritmo adecuado. Usando lenguaje de mquina puede calcularse el logaritmo, la
raz cuadrada, el seno o cualquier otra funcin de una variable. Las limitaciones para
el cmputo de cualquiera de estas funciones las impone el tiempo de CPU exigido
por la aplicacin. Segn el caso, pueden utilizarse formulas especificas, algoritmos
de aproximacin o tablas de consulta. Esta ltima tcnica disminuye en forma notable el tiempo de CPU necesario para el clculo de la funcin.
Considere ahora que debe calcularse la raz cuadrada de un nmero entero N
usando aritmtica de punto fijo. Una forma realizar esta operacin es usando el mtodo de aproximaciones sucesivas de Newton-Raphson. Dado el valor entero y positivo N, si xn es una aproximacin a la raz de N, la expresin para obtener la aproximacin siguiente xn+1, viene dada por,
x n +1 =

1 N

+ x n
2 xn

El diagrama de flujo del algoritmo se presenta en la figura 6.37 y el programa


en el ejemplo 6.32.
Ejemplo 6.32
El siguiente programa realiza el clculo de la raz de un valor entero. El nmero cuya raz se pretende calcular es de 16 bits y se obtiene a desde la posicin de memoria DMEM y DMEM+1. El resultado se carga en el registro DE.
raiz:

rep:

lhld
inx
mov
rrc
mov
mov
rar
mov
lhld
xchg
call
mov

dmem
h
a,h
b,a
a,l
c,a
dmem
div1616
h,b

; x=N
; x =N+1
; x(n)=x/2, x(n)BC
;.
;.
;.
;.
;.
; nHL
; HLDE
; x(n+1)=n/x(n) DE=DE/BC
; x(n+1)=x(n+1)+ x(n)

282

Introduccin a la Programacin del 8085A

mov
dad
inx
mov
rar
mov
mov
rar
mov
mov
cmp
jnz
mov
cmp
rz
cont:

mov
mov
jmp

l,c
d
h
a,h
:.
d,a
a,l

;.
;.
; Redondear
; x(n+1)=x(n+1)/2
;.
;.
;.
;.
; Comparar x(n) con x(n+1)
;
BC
DE
; Diferentes, x(n)=x(n+1)
;.
;.
; Iguales, raz en DE y
; retornar
; x(n)=x(n+1)

e,a
a,b
d
cont
a,c
e

b,d
c,e
rep

;.
; Siguiente aproximacin

Fig. 6.37 Algoritmo para extraccin de la raz cuadrada de un nmero entero.

283

Introduccin a la Programacin del 8085A

Para algunos valores, el algoritmo de aproximacin no funciona en forma


apropiada, entrando en un lazo sin fin para aproximaciones sucesivas que difieren
por uno. Esto puede corregirse detectando cuando xn-xn+ 1=1, y usando xn+1 como el
valor final de la raz. Una forma ms conveniente consiste en sumar 1 al valor que se
divide por 2 en la formula de aproximacin, lo cual redondea el cociente evitando la
oscilacin. Si se suprime la instruccin INX H en el lazo de aproximacin y se ejecuta el programa con N=3, xn y xn+1 alternaran continuamente entre 1 y 2. Otro falla
ocurre cuando N=1, debido a que se obtiene cero como resultado. La instruccin
INX H al inicio del programa, selecciona N+1 como aproximacin inicial a la raz y
corrige el problema. La precisin del clculo depende del valor del nmero N. La
tabla 6.8 presenta algunos resultados de la ejecucin del programa, pudiendo observarse que para valores grandes de N, la aproximacin a la raz cuadrada es mejor.
Tabla. 6.8 Resultados de rutina RAIZ.
N
Raz
Raz
tcpu

3
125
300
670
1560
7834
16384
30000
64637

programa

calculador

(ms)

2
11
17
26
40
89
128
173
254

1.7320
11.1803
17.3205
25.8844
39.4968
885099
128.0000
173.2051
254.2381

1.37
3.47
9.66
4.15
4.79
5.57
6.04
7.64
7.07

El tiempo de CPU invertido en calcular la raz es variable. Aunque la tabla


sugiere que se incrementa con el valor de N. Observe que el tCPU es mayor para
N=300 que para N=30000. Este tiempo depende en realidad del comportamiento de
la formula de aproximacin. En el caso de N=300 se requieren 13 aproximaciones
para alcanzar el resultado, mientras que para N=30000, solo se realizan 11 estimaciones antes obtenerse la raz cuadrada.
Note que el error en el clculo de la raz de 3 es significativo. Si debe calcularse el valor de y, para x =3, se obtendra,
y = 159 x = 159 2 = 318 , en lugar del valor real:

y = 159 x = 159 1.73 = 275.4

El error en el resultado es inaceptable, gracias a la burda aproximacin de 2,


al valor de la raz cuadrada de 3. En la tabla se observa que la precisin del resultado
aumenta para los valores: x = 300 y x =30000. Si antes de extraer la raz se multiplica el valor de x por 10000, se ejecuta el producto y el resultado se divide por 100, se
tiene:
y=

159 3 10 4
10 2

= 275

284

Introduccin a la Programacin del 8085A

El programa del ejemplo 6.33 realiza esta operacin.


Ejemplo 6.33
lxi
mvi
call
shld
call
mvi
call
mvi
xchg
call
hlt

d,2710h
c,3
mul168
dmem
raiz
c,9fh
mul24
c,64h
div1616

;1000010 a DE
;3 al registro C
;HL=3*10000
;30000 a memoria
;DE=raiz(30000)
;15910c
;HL=159*raiz(3000)
;10010c
;DEhl
;DE=159*raiz(3000)/100

6.6 INSTRUCCIONES ADICIONALES


Se han presentado 68 del conjunto general de 74 instrucciones del 8085A,
habindose utilizado la mayora de estas en los ejemplos de programacin. De las
instrucciones restantes, la funcin HLT es conocida por el lector. Las instrucciones
SIM, RIM, EI y DI se discutirn cuando se trate el tpico de interrupciones.
Tabla. 6.9 Instrucciones no comentadas

Instrucciones adicionales
HLT

Parada

EI

Habilitar interrupcin

SIM

Poner mscara de interrupcin

DI

Inhibir interrupcin

RIM

Leer mscara de interrupcin

NOP

Ninguna operacin

Durante la ejecucin de la instruccin NOP no se realizan operaciones externas o internas, no afecta las banderas y requiere 4 estados. Usualmente se utiliza para
consumir tiempo en lazos de retardo

6.7 RUTINAS DE RETARDO


La realizacin de retardos por programa es una tarea obligada en muchas aplicaciones con microprocesador. Por ejemplo, puede ser necesaria la generacin de un
pulso de ancho determinado o de una forma de onda peridica para un dispositivo de
externo conectado a un puerto de salida. Tambin, la supresin del rebote por contacto de un interruptor en un puerto de entrada puede ser lograda con un lazo de retardo.

285

Introduccin a la Programacin del 8085A

Adems, estas rutinas son apropiadas para establecer tiempos de espera para la entrada o salida de informacin durante la ejecucin de un programa.
El hecho que el tiempo de ejecucin de cada instruccin sea conocido deja
abierta la posibilidad de utilizar el P para realizar funciones de control de tiempo o
temporizacin. Los lazos que usan un registro contador para control de la repeticin,
son adecuados para esta tarea. Si se requiere establecer un retardo de una duracin
determinada, basta calcular el tiempo empleado por el procesador para ejecutar un
paso por el lazo y cargar el registro con el valor que permitir obtener el tiempo de
espera deseado.

6.7.1 El lazo de retardo bsico


Considere que se usa el registro B como contador y se ejecuta un lazo N veces, con la siguiente secuencia de instrucciones
.
ESTADOS
LAZO:

MVI
DCR
JNZ

B,N
B
LAZO

4
7/10

La instruccin DCR requiere 4 estados y JNZ 10 estados cuando se produce


el salto y 7, en caso contrario. El lazo ser ejecutado N veces, los primeros N-1 pasos
tendrn una duracin de 4 +10 = 14 estados cada uno y el lazo final, slo 7 + 4 = 11
estados. De modo que el retardo total es,
TD = [( N 1) 14 + 11] Treloj

(7.1)

Para una frecuencia de operacin interna de 3.125 MHz, un estado tiene una
duracin igual a Treloj = 0.32 s. De modo que el tiempo necesario para ejecutar el
lazo y salir puede calcularse conociendo el nmero de estados que emplea el ciclo de
instruccin de DCR y JNZ. Esta informacin es suministrada en el manual del usuario por el fabricante del dispositivo procesador.
TD = [( N 1) 14 + 11]

1
3.125 MHz

TD = ( N 1) 4.48 s + 3.52 s

El mayor nmero que puede representarse con un byte es 25510. Sustituyendo


este valor en la ecuacin 7.1 se tiene,
TD max = ( 255 1) 4.48 s + 3.52 s = 1141.44 S

Esta cantidad es el valor mximo del retardo que puede generarse con la rutina. La ecuacin 7.1 tambin indica que el tiempo de espera mnimo obtenible es de
3.52 s, cuando N = 1. Observe adems que el retardo mximo puede ser incrementa-

Introduccin a la Programacin del 8085A

286

do si se carga el registro B con cero, debido a que el primer decremento lo llevar


hasta 255.
Establecido como calcular el tiempo de retardo de un lazo de programacin
conociendo el valor del mdulo del contador, conviene formular el proceso inverso.
Para un tiempo de retardo especificado. Cul valor debe asignarse a la variable N,
para obtenerlo? Por supuesto la respuesta es directa, basta despejar N de la ecuacin
7.1, resultando,
N=

TD 11 Treloj
14 Treloj

+1

(7.2)

La formula 7.2 puede ser generalizada, si se toma en cuenta que el trmino


14Treloj es la duracin de un paso a travs del lazo y 14Treloj corresponde a la duracin del paso final.
N=

TD Tpaso
Tfinal

+1

En la prctica el programa de retardo se realiza como una subrutina, cargando


el registro contador desde el programa principal, como se indica a continuacin,
.
mvi b,n
call retad
.
.
.
hlt

retad:

dcr b
jnz retad
ret

En tal caso, la ecuacin de retardo vara al incluirse los 38 estados consumidos


por las instrucciones CALL (18) y RET (10). La nueva formula de retardo es,
TD = [( N 1) 14 + 39 ] Treloj

Ejemplo 6.34
Considere que se desea generar por programa un pulso de nivel alto con una
duracin de tp = 70 S. El bit 4 del puerto 01 se usar como salida del pulso.

287

Introduccin a la Programacin del 8085A

Estados

lazo:

xra
out
mvi
mvi
out
dcr
jnz
xra
out

a
01
b,n
a,10h
01
b
lazo
a
01

; El acumulador a cero
; Bit 4 del puerto p01 a cero.
; Cargar contador de lazo
; Bit a4= 1
; Pulso a nivel alto.
; Decremente contador
; Si (b) 0, repita el lazo.
; Si (b) = 0 haga (a) = 0
; Pulso cae a cero.

4
7/10
4
10

Al inicio del programa se carga cero en el acumulador y se asegura que la lnea 4 del puerto 1 est en nivel bajo. Las siguientes dos instrucciones conmutan el bit
4 de P0.1 a nivel alto, antes de entrar al lazo. Se mantiene el pulso en alto por tp y las
dos ltimas instrucciones proveen el flanco de bajada de la onda.
Se sabe que cada paso por el lazo dura 14 estados. Cuando el registro B llega
a cero, JNZ no produce salto y dura solo 7 estados. Esto implica una duracin del
paso final hasta que se escribe en el puerto, de: 4 + 7 + 4XRA + 10OUT = 25 estados.
Usando la ecuacin se calcula el valor a cargar en el registro B, para obtener el ancho
de pulso deseado, como resultado se obtiene N = 14.84. Debido a que N debe ser un
nmero entero, seleccionando N = 14 se obtiene un tiempo de retardo igual a 66.24
S y de 70.72 s con N= 15.
Existen situaciones donde la duracin del pulso a generar es un parmetro crtico, esto significa que debe obtenerse un ancho de pulso lo ms cercano posible a los
70 S. Para esto se selecciona para el entero inmediatamente inferior y se alarga la
duracin del retardo usando instrucciones que no realicen funcin, pero que consuman tiempo. El ajuste del tiempo puede hacerse usando instrucciones NOP fuera del
lazo. Seleccionando N =14, y agregando tres NOP al programa del ejemplo, se obtiene la rutina,
estados

lazo:

xra
out
mvi
mvi
out
dcr
jnz
nop
nop
nop
xra
out

a
01
b,0eh
a,10h
01
b
lazo

a
01

4
7/10
4
4
4
4
10

La duracin del paso final es 4 + 7 + 34NOP + 4XRA + 10OUT = 37 estados. El


ancho de pulso ser:
t P = [(14 1) 14 + 37] 0.32 s = 70.08 s

288

Introduccin a la Programacin del 8085A

Depender de la habilidad y paciencia del programador lograr el ajuste necesario. Es obvio que podra usarse cualquier instruccin distinta a NOP para alargar el
retardo. Por ejemplo, el programa del ejemplo 6.32 puede ser modificado para generar un pulso de 50 s, Cargando N = 8 en el registro B y usando dos instrucciones
DAD H y una LDA DMEM para el ajuste del tiempo.
Estados

lazo:

xra
out
mvi
mvi
out
dcr
jnz
dad
dad
lda
xra
out

a
01
b,8
a,10h
01
b
lazo
h
h
dmem
a
01

4
7/10
10
10
13
4
10

La generacin por programa de una seal cuadrada a una frecuencia especificada requiere alternar de alto a bajo por tiempos iguales, el estado de una lnea de un
puerto de salida. Un circuito de interconexin externo fijar la magnitud y polaridad
de los niveles de tensin de la forma de onda.

Ejemplo 6.35
Escribir un programa para generar un tren de pulsos de ciclo de trabajo 50 % y
frecuencia 500 Hz, en todas las lneas de salida del puerto 20H.
tpul:

lazo:

out
cma
mvi
dcr
jnz
lxi
lxi
mvi
nop
jmp

20h
b,dbh
b
lazo
d,0
d,0
e,0
tpul

; (a) (puerto 20h)


; Complementar el (a)
; argar contador de lazo
; Decremente contador
; Si (b) 0, repita el lazo
; Epere
; Epere
; Epere
; Epere
; Cambiar nivel del pulso

estados
10
4
7
4
7/10
10
10
7
4
10

Un semiciclo de la seal cuadrada tiene una duracin de,


T
= [10 + 4 + 7 + ( 219 1) 14 + 4 + 7 + 10 + 10 + 7 + 4 + 10] 0.32 s = 1000 s
2
f = 500 Hz

289

Introduccin a la Programacin del 8085A

La frecuencia de la onda es igual a 500 Hz como especifica el problema. Por


supuesto, la rutina del ejemplo 6.31 representa un lazo sin fin durante el cual se genera continuamente la onda cuadrada.
6.7.2 Retardos de mayor duracin
Si el ancho tp del pulso generado en el ejemplo 6.33 debe extenderse hasta 500
ms, es imposible lograrlo con el uso del registro B como contador de lazo. El lapso de
retardo mximo posible con un registro de ocho bits, para una frecuencia de reloj interna de 3.125 MHz, es de aproximadamente 1.14 ms. Si se utiliza una pareja de registros de ocho bits como un registro nico de 16 bits, y la instruccin de decremento
de registro par DCX rp ser posible repetir el bucle 65536 veces, si se asigna el valor
cero a N.
Debe considerarse que la instruccin DCX rp no afecta las banderas, por lo
cual debe usarse un mtodo diferente al usual, para detectar cuando el registro par
llegue a cero. El lazo de espera usando un contador de 16 bits se muestra a continuacin,
retad:

dcx
mov
ora
jnz
ret

b
a,b
c
retad

estados
6
4
4
7/10
10

Antes de ejecutar la subrutina de retardo, el registro par BC debe cargarse con


el valor de N usando la instruccin LXI rp,dato16. La instruccin DCX B decrementa
en 1 el registro de 16 bits BC. Desafortunadamente, DCX rp, no afecta la bandera de
cero Z. Una solucin para determinar cuando el contador alcanza cero, e indicarlo con
Z=1, es cargar el acumulador con el contenido de B, lo cual corresponde al byte de
orden alto del registro contador, ejecutar una funcin OR exclusivo con el registro C
como operando. La bandera de cero ser activada, solo cuando se cumpla que (B) =
(C) = 00H. La ecuacin de retardo con el contador de 16 bits est expresada por,
TD = [ (N 1) 24 + 49] 0.32 s

El cual tendr un valor mximo a la frecuencia especificada, de


TDmax = [ (65536 1) 24 + 49] 0.32 s = 503.32 ms

Ejemplo 6.36
Usando una rutina de retardo, debe generarse un pulso de ancho 500 ms en la
lnea 7 del puerto de salida B0H.

290

Introduccin a la Programacin del 8085A

estados

lazo:

lxi b,n
mvi a,10h
out b0h
dcx b
mov a,b
ora c
jnz lazo
lxi d,0
lxi d,0
lxi d,0
mvi d,0
nop
xra a
out 01

; cargar contador de lazo


; bit a7 = 1
; pulso a nivel alto.
; decremento registro par bc
; byte alto del contador al a.
; or entre b y c.
; salto si contador es cero
; esperar
; esperar
; esperar
; esperar
: esperar
; (a) = 0
; pulso a nivel bajo.

6
4
4
7/10
10
10
10
7
4
4
10

Como es usual debe calcularse el valor de N a cargar en el contador para obtener la duracin deseada para la seal. La nica diferencia entre este programa y el
usado par generar el pulso de ancho 70 ms es el procedimiento usado para registrar el
final de la cuenta. De modo que se escribe la expresin del retardo, como,
TD = [( N 1) 24 + 35] 0.32 s
TD = ( N 1) 7.68 s + 11.2 s

El valor correspondiente de N es igual a,


N=

TD 11.2
= 65102.7
7.68

Seleccionando N = 6510210 (FE4EH) y ajustando el tiempo con instrucciones


no funcionales, se obtiene un ancho de pulso de,
TD = ( N 1) 7.68 s + 11.2 s + 41 0.32 s = 500 ms

El pulso permanece en nivel alto por 1562500 estados, lo cual corresponde en


forma exacta a 500 ms.
Un tiempo de 0.5 s pudiese ser demasiado corto para las necesidades de algunas aplicaciones. Por ejemplo, un controlador de trfico urbano basado en P, requiere retardos mayores para establecer los lapsos de encendido de la luces del semforo.
Para lograr tiempos de espera largos puede usarse un bucle externo para repetir n veces el retraso logrado con la pareja de registros.
estados
ext:
int:

mvi
lxi
dcx
mov

d,20h
b,fe50h
b
a,b

; Contador externo en 32
; Contador interno para 0.5 s
;
;

7
6
4

291

Introduccin a la Programacin del 8085A

ora
jnz
dcr
jnz

c
int
d
ext

;.
; Fin de lazo interno
;
; Fin de lazo externo

4
7/10
6
7/10

La rutina provee un retardo de 16 segundos. Durante 50000541 estados. El retardo interno es 0.5 segundos y se repite 32 veces. Al usar un contador de 8 bits para
control de la repeticin del lazo interno, con este programa pueden obtenerse tiempos
de hasta aproximadamente 2 minutos. La rutina del ejemplo 6.37 permite retardos
mayores.
Ejemplo 6.37
Escribir una rutina de retardo para alcanzar tiempos de espera del orden de
horas.
Para un lapso de 9 horas, basta con repetir 65535 veces el lazo interno de 0.5
segundos del programa anterior. Para lo cual es necesario sustituir el contador que
controla el lazo externo por un contador con registro par. En lugar de usar el registro
D, se usa DE. Esto puede ser realizado como ejercicio. En este caso se prefiere usar
un procedimiento algo diferente, pero que igual utiliza dos contadores de 16 bits.

cont:

lxi
lxi
dcx
mov
ora
jnz
dcx
mov
ora
jnz

d,n1
b,n2
b
a,b
c
cont
d
a,d
e
conT

El retardo mximo obtenible con este programa es de 9 horas a la frecuencia


de 3.125 MHz. Todos los ejemplos de cdigo de retardos han supuesto esta frecuencia de operacin. Si se usa una versin del 8085 de 5 MHz, los tiempos de espera se
reducen al disminuir la duracin de un estado a 0.2 s. La tcnica de control de tiempo por programa, puede usarse adems para generar formas de ondas ms complejas,
audio e incluso msica. Examine el ejemplo siguiente donde se usa un programa para
generar el sonido del timbre de un telfono.
Ejemplo 6.38
Se desea generar una seal que simule el tono de timbre telefnico. Esta forma de onda se obtiene liberando durante 1 segundo 8 tonos de 320 Hz, seguidos por
12 tonos de 480 Hz y al final 2 segundos de silencio.

Introduccin a la Programacin del 8085A

292

Para resolver el problema se escribe una rutina denominada tono que genera
el nmero de tonos indicado por el registro L, con la frecuencia especificada por el
registro D. Observe que 8 ciclos de 320 Hz corresponden a un tiempo de 25 ms y 12
tonos de 480 Hz transcurren en este mismo lapso, de modo que se requieren 50 ms
para una combinacin (8 tonos320Hz+12 tonos480Hz) de los ciclos de distinta frecuencia. Para lograr el lapso de segundo se repiten 20 veces la combinacin de 50 ms. Al
final se pone la salida del puerto a cero y se esperan 2 segundos antes de reiniciar la
transmisin de una nueva combinacin de tonos.
;-------------------------------------------------------------------------------------------------------------------------;
Programa principal
;------------------------------------------------------------------- -----------------------------------------------------lazo:
mvi e,20
; Se repiten veinte veces los tonos
; de 320 Hz y de 480 Hz
seguir:
mvi l,8
; Son 8 tonos de 320 Hz
mvi d,0dcH
; D = 0DCH para 320 Hz
call tono
; Generar 8 tonos de 320 Hz
mvi l,12
; Son 12 tonos de 480Hz
mvi d,92h
; D = 92h para 480Hz
call tono
; Generar 12 tonos de 480Hz
dcr e
; Contador=Contador-1
jnz seguir
; No cero, seguir generando
xra a
; Lista las 20 veces, A a cero
out 0
; Puerto de salida a cero
call ret2s
; Esperar 2 segundos de silencio
jmp lazo
; Repetir por siempre
;-------------------------------------------------------------------------------------------------------------------------;
Subrutina TONO
;------------------------------------------------------------------- -----------------------------------------------------tono:
mov h,l
; Mover a H el nmero de ciclos
tt:
mvi c,2
; Son dos semiciclos por tono
t1:
out 0
; Contenido del acumulador a puerto 0
cma
; Complementar acumulador
mov b,d
; Mover B frecuencia deseada
t2:
dcr b
; Generar hasta contador de ciclos=0
nop
nop
jnz t2
dcr c
jnz t1
dcr h
jnz tt
nop
ret
; Retornar
;-------------------------------------------------------------------------------------------------------------------------;
Subrutina RET2S
;------------------------------------------------------------------- -----------------------------------------------------ret2s:
mvi d,5
; Lazo interno se repite 5 veces
ret2_1:
lxi b,0cb72h
ret2_2:
dcx b
mov a,c
ora b
jnz ret2_2

293

Introduccin a la Programacin del 8085A

dcr d
jnz ret2_1
ret

Los semiciclos del tono generado tienen una duracin ligeramente distinta:
Semciclo1 = ((B 1) 22 + 61) * 0.32s

Semciclo 2 = ((B 1) 22 + 69) * 0.32s

B = 220 = 0DCH = f = 319.98 Hz


B = 146 = 92H = f = 480.03 Hz

La figura 6.38 muestra la conexin del parlante a la lnea 0 del puerto de salida 0.

Fig. 6.38 El transistor 2N2905 provee la corriente necesaria para activar la corneta de 8 /0.125W.

El retardo de la rutina ret_2s viene dado por

Re tardo ret _ 2s = 0.32 s 18 + 7 + 10 + (D 1) (B 1) 24 + 21 + 4 + 10 + 1 + (B 1) 24 + 21 + 11 + 10

Re tardo ret _ 2s = 0.32 s 6249977 = 1.99999264 seg

Desarrollo y Simulacin de Programas

294

Desarrollo y Simulacin de Programas

La habilidad para escribir programas para microprocesadores proviene de la


comprensin que se tenga del conjunto de instrucciones del P, de lo que cada una
de stas hace, y fundamentalmente de la experiencia de quien programa. A diferencia
de la elaboracin de programas en lenguajes de alto nivel, como C, ADA o Pascal, el
programador de microprocesadores debe conocer la arquitectura de la mquina en la
cual se ejecutar la rutina, debiendo entender como las instrucciones afectan al hardware.
Para desarrollar una aplicacin basada en P se requiere que el equipo de diseo incluya personal con conocimientos de electrnica digital y de programacin. En
este tipo de sistemas es usual que el desarrollo del cdigo ejecutable represente una
inversin de tiempo y dinero superior al costo del diseo del soporte fsico del sistema. El reto principal a enfrentar por el programador es la seleccin del lenguaje de
programacin del microprocesador. De hecho, el costo del desarrollo del soporte lgico de la aplicacin y la eficiencia del funcionamiento del producto final estn determinados por el lenguaje utilizado para programar el microprocesador.

7.1 EL LENGUAJE DE PROGRAMACIN


Para desarrollar un programa ejecutable por un microprocesador existen dos
opciones, usar: lenguaje de mquina o lenguaje de alto nivel. Los cdigos en lenguaje
de mquina son los que puede ejecutar directamente el microprocesador, los escritos
en ensamblador, C o Pascal deben ser traducidos a cdigo de mquina antes de ser
ejecutados.

295

Desarrollo y Simulacin de Programas

El trmino lenguaje de mquina usualmente se asigna a la secuencia binaria de


instrucciones que ejecuta la CPU, mientras que lenguaje ensamblador identifica a la
representacin simblica del cdigo binario de las instrucciones del procesador.
Un programa en lenguaje de mquina es una secuencia de instrucciones y datos en binario, y es el cdigo que la mquina entiende y ejecuta. Programar en cdigo
ejecutable exige un conocimiento completo del conjunto de instrucciones del P y de
la arquitectura de la mquina, debido a que cada instruccin en este lenguaje es una
indicacin directa al hardware para que ejecute una operacin.
Programar en cdigo de mquina conduce a un control total sobre los recursos
que ofrece el sistema C, a un manejo ptimo la memoria del sistema, adems de
producir programas con alta velocidad de ejecucin. La forma ms primitiva de programacin en lenguaje de mquina implica la escritura de cada cdigo de operacin,
direccin o dato usando el sistema binario.
Tabla. 7.1 Cdigo para generacin de pulsos
Direccin
Binario
Hex
0200H
0201H
0202H
0203H
0204H
0205H
0206H
0207H
0208H
0209H
020AH
020BH
020CH
020DH
020EH
020FH
0210H
0211H
0212H
0213H
0214H

11010011
00100000
00101111
00000110
01000100
00000101
11000010
00000101
00000010
00010001
00000000
00000000
00010001
00000000
00000000
00011110
00000000
00000000
11000011
00000000
00000010

D3H
01H
2FH
06H
DBH
05H
C2H
05H
02H
11H
00H
00H
11H
00H
00H
1EH
00H
00H
C3H
00H
02H

Ensamblador
OUT
20
CMA
MVI B
DB
DCR B
JNZ
05
02
LXI D
00
00
LXI D
00
00
MVI E
00
NOP
JMP
00
02

La segunda columna de la lista de la tabla 7.1 es una representacin en binario


de la rutina del ejemplo 6.34 del captulo 6, la cual ha sido cargada en memoria a partir de la direccin 200H. Inspeccionando esta secuencia de bytes es difcil determinar
que genera un tren de pulsos en las lneas del puerto de salida 20H. De hecho, la naturaleza binaria de los programas escritos en cdigo de mquina implica gran dificultad para escribirlos, entenderlos y modificarlos.

Desarrollo y Simulacin de Programas

296

Una forma simple de facilitar el arduo camino que significa desarrollar programas en lenguaje de mquina, consiste en usar el sistema de numeracin hexadecimal para la codificacin de las instrucciones, tal como ilustra la columna tres de la
tabla 7.1. Aunque esto resulta en una versin simplificada del programa en binario, la
complejidad para entenderlo persiste. Algunos C de uso didctico aceptan la entrada
de instrucciones directamente en hexadecimal, por teclado o terminal, encargndose
el programa monitor de realizar la conversin a binario de las instrucciones, almacenarlas en memoria y ejecutarlas.
El lenguaje de mquina no fue diseado pensando en la comunicacin con
humanos, y esto no es una falla del diseador del P. En realidad el cdigo de mquina permite expresar algoritmos de forma que puedan ser decodificados o interpretados por la unidad de control del P.
La programacin directa en cdigo de mquina no debiera considerarse como
opcin para el desarrollo del programa de aplicaciones basadas en P, debido a las
considerables dificultades que supone escribir los cdigos de operacin y los datos
usando los sistemas de representacin binario o hexadecimal. Para aprovechar las
ventajas de programar el P usando su conjunto de instrucciones, es posible usar el
lenguaje simblico o lenguaje ensamblador, constituido por los nemnicos de los cdigos de operacin de cada instruccin. Observe que con cierta destreza, es posible
deducir la funcin del programa con la informacin que se obtiene de la inspeccin
de la columna cuatro de la tabla 7.1.
7.1.1 Traduccin de programas
Como recursos tiles para la escritura del software del sistema, existen programas traductores que permiten realizar la conversin desde un archivo fuente en
lenguaje simblico o de alto nivel, al cdigo objeto ejecutable por la CPU. Un traductor es un programa que convierte secuencias de instrucciones de una forma a otra. Los
traductores abarcan interpretadores, ensambladores y compiladores y permiten al
programador expresar un algoritmo (instrucciones y datos) en un lenguaje adecuado
para la comprensin por parte de seres humanos.
Los traductores pueden distinguirse en dos grupos principales de acuerdo a la
operacin que ejecutan al analizar el programa fuente, estos son:
Interpretadores.
Generadores.

Los interpretadores ejecutan directamente la operacin resultante del proceso


de anlisis del programa fuente. Para cada posible operacin existir una subrutina
para realizarla. Son programas fciles de escribir pero son de lenta ejecucin debido a

Desarrollo y Simulacin de Programas

297

que toda instruccin del archivo fuente es analizada cada vez que ejecuta el programa, lo cual significa que la traduccin es simultnea a la ejecucin. En contraposicin, los generadores crean un cdigo objeto posible de ejecutarse en un tiempo posterior a al conversin del programa fuente. En general, el trmino generador se aplica
a programas orientados a la mquina, como los ensambladores, mientras que los
orientados al usuario (C, Pascal, ADA) se les denomina compiladores. El cdigo resultado de la interpretacin del programa fuente es de gran tamao, debido a que debe
mantenerse en memoria no slo la rutina a procesar sino tambin el programa kernel
encargado de interpretar y ejecutar el programa de usuario. Esta opcin puede ser til
para propsitos didcticos o puede ser usada durante el desarrollo del programa. Para
Ps de 8 bits existen interpretadores como el FORTH, BASIC y algn interpretador
C. Este tipo de traductor no se considera en este trabajo.

Fig. 7.1 Mtodos de traduccin de programas en un computador

Aunque los interpretadores no se recomiendan como una opcin viable para el


desarrollo de programas para Ps, esto no significa que la tcnica de interpretacin no
sea utilizada. En realidad ambos mtodos de traduccin son ampliamente usados.
Como puede observarse en la figura 7.1, un interpretador por hardware se encarga de

Desarrollo y Simulacin de Programas

298

trasladar las instrucciones en lenguaje de mquina a las acciones internas que resultan
en la ejecucin del programa. Tambin un interpretador traslada las instrucciones del
sistema de operativo a cdigo de mquina.
La figura 7.1 muestra el uso de los mtodos de compilacin e interpretacin
en un computador. El objetivo de la traduccin es entregar como salida un programa
en el lenguaje de la mquina Los programas escritos en lenguaje ensamblador son
traducidos por el programa ensamblador a cdigo de mquina. La compilacin de un
programa fuente escrito en un lenguaje de alto nivel, produce como salida otro programa en lenguaje ensamblador, o directamente en cdigo de mquina. En el primer,
caso debe usarse un ensamblador para la traduccin final. Los programas del sistema
operativo son traducidos a lenguaje de mquina por un interpretador. Un interpretador
microprogramado se encarga de realizar la traduccin desde el lenguaje de la mquina
a las operaciones internas que conducen a la ejecucin de cada instruccin.

7.1.2 Lenguaje ensamblador o de alto nivel


Descartada la opcin de programar el P usando directamente el cdigo numrico de mquina, la eleccin del lenguaje de soporte se reduce a dos posibilidades:
lenguaje ensamblador o de alto nivel. Este escenario se basa en que todo P tiene al
menos una versin de ensamblador; y se supone la existencia de algn compilador
para el microprocesador usado en la aplicacin.
Esta disyuntiva es un tema tradicional de discusin entre los programadores
de computadores, y es ms polmico aun entre los diseadores de sistemas empotrados. En esta seccin, no se pretende intervenir en tal controversia. Nuestro objetivo
no es seleccionar el mejor lenguaje para desarrollar soluciones basadas en P, ms
bien consiste en elegir el lenguaje ms apropiado para escribir los programas incluidos en una gua introductoria de sistemas microprocesadores. El inters es establecer,
Cul lenguaje debe usarse en un curso de introduccin a la programacin de Ps?
El lenguaje de alto nivel ms utilizado en la actualidad para programar Ctrls,
es el C. Existen compiladores C para todos los microcontroladores existentes en el
mercado y para microprocesadores de 8 bits como el Z80 y el 8085, entre otros. Una
encuesta realizada el ao pasado entre los usuarios del sitio WEB
http://www.8052.com, revel que el 52 % de los programadores de la familia de
Ctrls 8051 utilizan el lenguaje ensamblador, mientras que un 35 % programa en C.
El grupo restante, usa otros compiladores. Dada el extenso uso de la familia MCS-51
en aplicaciones industriales, es de suponer que esta proporcin se mantiene para otros
dispositivos usados en sistemas empotrados.
El traductor denominado ensamblador se encarga de la conversin a lenguaje
de mquina del programa fuente escrito con los nemnicos que identifican a cada
instruccin de la mquina. Constituye un recurso que en la prctica, automatiza la
programacin en cdigo de mquina. En su forma ms simple, los ensambladores

Desarrollo y Simulacin de Programas

299

traducen cada instruccin del archivo fuente en una instruccin en cdigo objeto, con
una correspondencia 1:1. Ensambladores ms elaborados, realizan la traslacin del
programa fuente de forma que ste puede ser enlazado con otros programas, antes de
la ejecucin.
Adems de admitir la utilizacin de nemnicos para identificar las instrucciones, se pueden usar etiquetas para las direcciones, y los datos pueden ser expresados
en formatos diferentes al sistema binario. Estas posibilidades simplifican mucho el
desarrollo de un programa, mientras preserva las ventajas inherentes al uso de cdigo
de mquina. Con ensamblador, pueden realizarse programas de miles de lneas de
cdigo con un eficiente uso de la memoria y un aprovechamiento mximo de la potencia del microprocesador. El programador mantiene un control total sobre la mquina, esto se debe a que las instrucciones hacen referencia explcita a la arquitectura
de computador. Por tal razn, es usual calificar el ensamblador como un lenguaje de
bajo nivel.
La separacin entre el ensamblador y el lenguaje nativo del P es sutil, la nica diferencia con el lenguaje de mquina es que los cdigos de operacin, operandos
y direcciones pueden representarse simblicamente. Es una tradicin suponer que un
programa escrito en ensamblador por un programador experimentado, produce un
cdigo de menor tamao y de ms rpida ejecucin que su equivalente realizado con
un interpretador o con lenguaje de alto nivel. No obstante, en modo alguno el ensamblador constituye la panacea para el desarrollo del soporte lgico del sistema. La escritura de un software extenso y complejo puede representar una tarea de larga duracin y alto costo, mientras que el cdigo resultante es difcil de entender, de mantener
y es no porttil por naturaleza.
Desde los inicios del desarrollo de los Ps han existidos compiladores de lenguajes de alto nivel, como FORTRAN, COBOL o ALGOL, ejecutables en sistemas
basados en los Ps ms populares. No obstante, el propsito de tales compiladores
era permitir el uso del P como CPU de un microcomputador de propsito general
destinado al procesamiento de datos, siendo inapropiados para desarrollar programas
para proyectos de control.
Las primeras empresas en introducir lenguajes de alto nivel dedicados al desarrollo del software de aplicaciones especficas, fueron INTEL y MOTOROLA con los
compiladores PLM80 para la familia 8080 y MPL para el P 6800. Esta tendencia ha
proseguido hasta la fecha. Las compaas fabricantes de dispositivos y otras empresas
de diseo de software ofrecen compiladores destinados a ser usados como recurso de
primera lnea en la fase de diseo de aplicaciones.
La programacin en lenguaje de alto nivel reduce significativamente el tiempo
de desarrollo y produce programas ms fciles de entender y de mantener que sus
equivalentes en ensamblador. En general, el cdigo resultante de la compilacin es de
mayor tamao y de ejecucin ms lenta que el generado por el ensamblador. El uso
de compiladores ofrece cierto grado de portabilidad. Un programa escrito un P en

Desarrollo y Simulacin de Programas

300

lenguaje C, puede ser usado para otro dispositivo si se compila con el traductor correspondiente. La salida de un compilador puede ser un archivo en lenguaje ensamblador, el cual debe ser traducido a cdigo de mquina; o puede entregar en forma
directa el cdigo ejecutable, a expensas de la simplicidad del traductor y de la velocidad de compilacin.
En esta breve discusin se han establecido de modo muy general que las ventajas del ensamblador sobre los compiladores son dos: produce un cdigo que requiere menos memoria para almacenarse y el programa es de ejecucin rpida. Si estas
dos cualidades del ensamblador fuesen irrefutables, no existira ninguna duda sobre
cual lenguaje emplear para el desarrollo de sistemas empotrados. Esto debido a que
en este tipo de aplicaciones se dispone de recursos limitados, principalmente memoria
y es usual que el sistema este sometido a restricciones de tiempo crticas.
Lo cierto es, que lo afirmado en el prrafo anterior sobre el rendimiento del
ensamblador relativo a los compiladores, ha sido devastadoramente cierto hasta hace
algunos aos. En nuestros das, el panorama se ha visto modificado con la aparicin
de compiladores ms sofisticados. Los diseadores de los nuevos lenguajes de alto
nivel para sistemas empotrados, han introducido tcnicas de optimizacin en la compilacin, las cuales toman en consideracin la limitacin de recursos inherentes a tales aplicaciones. Estos traductores novedosos, permiten que el usuario seleccione si
debe intentarse que el cdigo a generar sea optimizado para reducir el tamao o para
aumentar la velocidad de ejecucin.
En los compiladores actuales se incorpora a la estructura del traductor una
seccin que optimiza el cdigo intermedio reorganizando las estructuras de lazo y
optimizando la evaluacin de expresiones. La etapa final de la compilacin es el generador de cdigo que produce el programa objeto en lenguaje de mquina. La nueva
generacin de compiladores ha reducido en forma notoria la distancia existente entre
el cdigo producto del ensamblaje y el obtenido por compilacin. Esto significa que
actualmente es posible obtener, usando lenguajes de alto nivel, programas de tamao
relativamente pequeos.
Una consideracin de inters en esta discusin es la productividad del programador. Est demostrado que un programador produce un determinado nmero de
lneas de cdigo en el tiempo, independientemente del lenguaje de programacin utilizado. Debido a que una lnea de un archivo fuente de alto nivel corresponde a n (3 a
10) instrucciones en ensamblador, la eficiencia de un programador en un lenguaje
compilado supera en n veces la de aquel que usa ensamblador. Adems, los programas en alto nivel son sencillos de comprender y simples de mantener, incluso por
personal distintos a los autores del programa. Entonces, la pregunta es: se justifica
programar en ensamblador.
La respuesta es: si... sin duda alguna. Antes de alegar alguna razn, es preciso
destacar como un hecho que un buen programador en ensamblador es capaz de afinar
un programa, o una seccin de ste, de forma tal que se obtenga el cdigo ms rpido

Desarrollo y Simulacin de Programas

301

posible. En algunos casos, puede que esto implique un trabajo excesivo y que no se
justifique el esfuerzo y tiempo dedicado en perfeccionar el cdigo.
En otros proyectos, principalmente durante el desarrollo de sistemas empotrados, existe la posibilidad que la velocidad de ejecucin del cdigo de la aplicacin
constituya un factor crtico para el desempeo del sistema. Es comn que en estas
aplicaciones. Algunas acciones de control en tiempo real sean realizadas por el programa. Es obvio, que programando en ensamblador tiene un absoluto conocimiento y
control sobre el tiempo de ejecucin de las instrucciones y lazos, siendo ms sencillo
la realizacin de retardos precisos o la generacin de eventos de duracin especfica.
La programacin en lenguaje de alto nivel hace difcil el seguimiento de la duracin
de la ejecucin de procedimientos e instrucciones. Esto introduce cierta vaguedad en
la posible respuesta del programa a eventos externos en tiempos especificados como
crticos.
Otro factor que justifica programar en ensamblador se relaciona con el aprovechamiento de la capacidad de la memoria EPROM (EEPROM) de la aplicacin. Si
este recurso est muy limitado, un buen programa en ensamblador puede reducir la
capacidad necesaria para almacenar los programas y los datos. A pesar de la habilidad
del compilador para optimizar el cdigo para tamao y velocidad, estos traductores
no siempre son capaces de determinar cuando una seccin del cdigo puede ser sustituida por una simple instruccin. Un programador en cdigo de mquina, a diferencia
del compilador, entiende el algoritmo en desarrollo y conoce la estructura y la ms
recndita instruccin del programa, en tal forma que es capaz de lograr que secciones de cdigo sean ms eficientes, como recompensa a una buena dosis de coraje y a
un gran esfuerzo.
Pareciera que la opcin apropiada es recurrir a la programacin en lenguaje de
alto nivel cuando, para una aplicacin especfica, el tiempo de ejecucin de las tareas
no sea un factor determinante y en caso contrario, utilizar lenguaje ensamblador. En
realidad existe una tercera posibilidad que representa una solucin ms conveniente
para programar el sistema. Esta consiste, en utilizar una tcnica mixta que explote la
potencia de ambos lenguajes. Con este mtodo, casi todo el programa se escribe en
lenguaje de alto nivel y las rutinas de tiempo crtico se programan en ensamblador.
La eficiencia de la utilizacin de la tcnica mixta est basada en el principio
de localidad de las referencias. Este establece que durante la ejecucin de un programa el procesador hace referencias frecuentes a un conjunto de instrucciones almacenadas en un rea pequea de la memoria. Esto es cierto para espacios cortos de tiempo, en lapsos largos puede cambiar la secuencia de cdigo que se repite, pero la validez del principio se mantiene. En sntesis, el P invertir la mayor parte del tiempo de
ejecucin en procesar una pequea seccin del cdigo. Si el 90% del tCPU se invierte
en ejecutar el 10% del programa, esta parte del cdigo se programa en ensamblador.
El 90% restante del programa, responsable del 10% del tCPU, se escribe en lenguaje de
alto nivel.

302

Desarrollo y Simulacin de Programas

Lo usual es que durante el desarrollo del software, el programa integro se escribe en lenguaje de alto nivel. El programa se ejecuta y se detectan las secciones de
cdigo a las cuales se dedica el mayor tCPU, y se reprograma en ensamblador. Como
resultado se obtiene un programa con velocidad de ejecucin comparable al escrito en
ensamblador y con costo de desarrollo mucho menor.
Parece evidente que pese a las desventajas inherentes a la programacin en
lenguaje ensamblador, es necesario que el estudiante conozca el lenguaje. Las razones
son varias y algunas han sido mencionadas. Para cerrar esta discusin se mencionan
tres:
Una mejora en la velocidad de ejecucin en el cdigo crtico de una aplicacin puede ser la
nica opcin para la viabilidad del proyecto. De modo que el programador debe estar en capacidad de escribir esta seccin del programa en ensamblador.
La segunda razn se apoya en que las rutinas de librera de los lenguajes de alto nivel deben
escribirse en ensamblador.
Finalmente, la salida del compilador puede ser un programa en ensamblador, lo cual significa que para que comprender el funcionamiento de los compiladores debe estudiarse el ensamblador.

Al ser el material que se presenta, una gua para el aprendizaje de los fundamentos de sistemas de microprocesadores, el uso del lenguaje ensamblador es una
necesidad ineludible. El tipo de problemas a resolver usando el P, usualmente tienen
restricciones de tiempo y el cdigo a desarrollar no es necesariamente muy extenso.
Usando el ensamblador, el estudiante se mantendr en contacto continuo con la arquitectura de la CPU y se enfrentar a la programacin directa de circuitos programables
de interconexin de E/S.
La forma en que el programador en ensamblador debe manipular los registros
del P, la memoria del sistema y los dispositivos de E/S permitirn al estudiante adquirir una base slida en programacin de Ps, adems de hacer ms fcil la tarea de
programar en lenguajes de mayor nivel y de capacitarlo para la escritura de rutinas
para la librera del compilador. Para finalizar la discusin sobre el nivel del lenguaje a
utilizar para programar el P, considere el ejemplo 6.33. Este ejercicio presenta un
cdigo escrito en ensamblador para calcular el valor de y, por medio de la expresin:
y = 159 x = y = 159 3 =

159 30000
100

El algoritmo usado para hallar la raz cuadrada de N es:

x n +1 =

1 N
+ xn

2 xn

Desarrollo y Simulacin de Programas

303

El programa principal MAIN y las subrutinas MUL168, DIV1616 y RAZ escritas en ensamblador comprenden aproximadamente 79 lneas de cdigo. El archivo
ejecutable ocupa 118 bytes de memoria. Una versin de este programa fue realizada
usando el compilador MICRO-C para el 8085 y se muestra a continuacin.

Ejemplo 6.33 escrito en lenguaje C

int N,x,xn,y;
main ()
{
x=3*10000;
N=x;
xn=(x+1)>>1;
while (x != xn)
{ x=xn;
xn=(N/x+x+1)>>1;
}
y=(159*x)/100;
}

Como se observa se requieren slo diez lneas de cdigo, pero el archivo generado por el compilador C ocupa 471 posiciones de memoria. Esto significa que el
uso de MICRO-C genera un cdigo objeto con cuatro veces el tamao que el resultante de usar el ensamblador.

7.1.3 El formato HEX-INTEL


Las opciones de compilacin, ensamblaje y enlazado de las herramientas para
desarrollo de programas para microprocesadores, permiten seleccionar el formato del
archivo que contiene el cdigo que va a ser grabado en EPROM. Uno de los ms usados es el formato HEX INTEL. Este estndar, permite que el proceso de programacin
se realice en un PC y que el cdigo sea cargado en la tarjeta prototipo y ejecutado
desde la memoria RAM. Tambin el archivo en formato HEX INTEL puede ser convertido a binario y cargado en un simulador del P o en un grabador de EPROM. Un
programa en formato HEX, es un archivo ASCII el cual contiene un registro por lnea.
Un ejemplo se muestra a continuacin,
:10000000213F00460548237E23BEDA120056772B97
:10001000722305C207000D41C21C0076214000C3B7
:020020000700D7
:0A003F0009082345677D889099F5B4
:00000001FF
Fig. 7.2 Archivo HEX INTEL

304

Desarrollo y Simulacin de Programas

Cada uno de los registros del archivo de la figura 7.2 tiene el formato indicado
en la tabla 7.2. Aislando los campos de la lnea tres del archivo ejemplo, se obtiene:
:020020000700D7
:
Marcador de registro.
02
Longitud del registro. Dos bytes de datos.
0020
Direccin de carga 0020H, 0021H.
00
Tipo de registro: datos.
0700
Datos.
D7
Byte para verificacin por suma total.

La lnea se inicia con el carcter dos puntos, sealando que corresponde a un


registro en el formato HEX INTEL. Los siguientes dos caracteres (02H) indican que la
lnea contiene 2 bytes de datos, los cuales deben ser cargados a partir de la direccin
0020H. El prximo par de caracteres: 00H, informa que la lnea es un registro de datos. El primer byte de dato es 07H y el ltimo es 00H. Los ltimos dos caracteres
D7H son el checksum de la lnea. Para calcular el byte de verificacin se realiza la
suma hexadecimal:
02 + 00 + 20 + 00 + 07 + 00 = 29H

El complemento dos de 29H es D7H


29H + D7H = 0
Tabla. 7.2 Formato HEX INTEL.
CARCTER

DESCRIPCIN

Marcador de registro: El primer carcter de una lnea siempre es : para identificar el


inicio de un registro.

2-3

Longitud de registro: El nmero de bytes de datos expresado con dos dgitos hexadecimales. No incluye los nueve primeros ni los dos ltimos caracteres de la lnea.

4-7

Direccin: Este campo indica la direccin de memoria donde se cargaran los datos. Se
expresa con cuatro dgitos hex (0000H-FFFFH)

8-9

Tipo de registro: Estos dos caracteres identifican el tipo de registro para la lnea. Los ms
comunes son:
00
01
02

Registro de datos
Registro de fin de archivo
Registro de direcciones de segmento extendido

10

Datos: A partir del dcimo carcter se encuentran los bytes de datos tiles. Esta es la
informacin a cargar en la EPROM o en la memoria del simulador o emulador. Se representa como dos dgitos hex.

Dos ltimos

Checksum: Este campo es la verificacin por suma total para la lnea. Se obtiene calculando el complemento dos de la suma sin acarreo de todos los bytes anteriores de la lnea
exceptuando el marcador de registro (:)

Desarrollo y Simulacin de Programas

305

En la figura 7.3 se muestra el archivo HEX generado por el ensamblador para


el programa del ejemplo 6.32 y la figura 7.4 presenta la salida de compilador C para
el mismo programa.
:0E0000001110270E03CD1700CD4F000E9FCD1F
:09000E0017000E64EBCD2B007607
:0E0017007906080E00616C298FD22500198928
:0600250005C21E004FC9D8
:0E002B003E10210000EB29EBD23B00292CC334
:0E0039003C00291CF57D996F7C9867D2490028
:080047001D09F13DC23000C9A2
:0E004F002230087C0F477D1F4F2A3008EBCD72
:0E005D002B00606919237C1F577D1F5F78BA46
:0B006B00C2710079BBC8424BC35800B3
:00000001FF

Fig. 7.3 Salida del ensamblador para el programa del ejemplo 6.33.

:20400000310060AF32E341CD6A41CF396EC9E56069C139716069C9397E23666FC9E5606982
:20402000C1397123706069C9EB5E23562BEBC9EB7323722BEBC97E23666FC97D02037C023E
:20404000C97D079F67C9EB4E23462378B1CA5E407E23BBC258407EBA23C24740C5C97E2365
:20406000666FE92B7C2F677D2F6FC97CB5210000C023C979956F789C67C9D5EB2100007B46
:204080000FD2854009A77A1F577B1F5FB2CA9A4079174F781747B1C27F40D1C9CDA24060FB
:2040A00069C9D5EB2100003E1132D741A779174F7817473AD7413DCAD84032D7417D176F3A
:2040C0007C1767BADAAC407DC2CF40BBDAAC40936F7C9A6737C3AD40D1C979A56F78A46787
:2040E000C979B56F78B467C979AD6F78AC67C97CB5CAFF40A7781F47791F4F2DC2F44060EC
:2041000069C97CB5CA1241A779174F7817472DC207416069C9CD5F41C82BC9CD5F41C02B79
:20412000C9E56069C1CD4F41D82BC9CD4F41D8C82BC9CD4F41D02BC9E56069C1CD5F41D858
:204140002BC9CD5F41D8C82BC9CD5F41D02BC978ACF25F41210100A0FA5D41B5C937C97833
:20416000BCC2664179BD210100C921307522DD412ADD4122DB412ADD41444D210100094425
:204180004D210100CDEF4022DF412ADF4122DD417CB5CAC0412ADF4122DD412ADB41444D8B
:2041A0002ADD41CD9C40444D2ADD4109444D21010009444D210100CDEF4022DF41C38A41F1
:1741C0002ADD41444D219F00CD7A40444D216400CD9C4022E141C9FC
:00000001FF

Fig. 7.4 Salida del compilador MICRO-C 8085 para la versin en C del ejemplo 6.33.

Es notable que el tamao del cdigo generado por el compilador C sea mucho
mayor que el correspondiente en ensamblador. En realidad el compilador MICRO-C
tiene algunas deficiencias. Compiladores C para el 8085, con costo elevado, utilizan
tcnicas de optimizacin que disminuyen el tamao del cdigo de salida.
Aunque los compiladores modernos y las nuevas arquitecturas de los microcontroladores intentan da a da que el archivo de salida ocupe menos espacio en memoria, y adems se ejecute a mayor velocidad, puede considerarse que los ensambladores se mantienen como lderes en la competencia de generar cdigo pequeo y de
velocidad alta. El autor compar, usando una rutina de prueba, el cdigo generado
por el ensamblador y el compilador C de un microcontrolador MCS-51. A pesar que el
traductor C se ofrece como un compilador moderno, se mantuvo la diferencia de tamao entre los archivos generados por ambas herramientas.

Desarrollo y Simulacin de Programas

306

7.2 ESTRUCTURA DEL PROGRAMA


Para realizar el proceso de representar un algoritmo como un programa capaz
de realizarlo, el programador debe prestar especial atencin al uso de tcnicas que
faciliten el desarrollo de diagramas de flujo y de programas. Entre estas tcnicas se
consideran,
1. Programacin modular. El programa est compuesto por procedimientos o mdulos cada
uno de los cuales realiza una funcin especfica. Cada mdulo puede ser escrito, codificado y probado en forma independiente.
2. Diseo hacia abajo. Al inicio se define la funcin global del programa (mdulo principal)
como un conjunto de subfunciones generales (mdulos especficos). A continuacin el diseo contina en descenso hasta cuando cada subfuncin es definida y los mdulos son
programados.
3. Cdigo estructurado. Para escribir el programa se usan slo ciertas estructuras lgicas de
programacin. Tales formas lgicas pueden constituir lazos de cdigo o estructuras condicionales

7.2.1 Programacin modular


Consiste en seccionar el programa en rutinas, las cuales pueden ser escritas y
probadas por separado para posteriormente ser integradas en un programa capaz de
resolver el problema propuesto originalmente. Cada uno de los mdulos en los cuales
se divide el programa debe tener una entrada y una salida, y debe realizar una funcin
nica, la cual debe ser independiente de las que realizan los otros bloques del programa. La comunicacin entre mdulos debe ser mnima.
Los mdulos se programan usando procedimientos. Dependiendo de la complejidad de la tarea que realice un mdulo especfico, ste puede contener ms de un
procedimiento. Esta tcnica simplifica en forma notable el proceso de diseo y el
mantenimiento ulterior de los programas. El desarrollo de un programa extenso y
complejo se facilita si el cdigo es separado en bloques funcionales que contengan un
nmero relativamente pequeo de instrucciones. No existen reglas totales para la programacin modular con relacin al nmero de lneas que debe tener un mdulo para
formar parte de un programa eficiente. Slo deben cumplirse con tres reglas bsicas
al escribir cada mdulo. Este debe,
1. Realizar una funcin nica.
2. Contener todas las instrucciones necesarias para llevarla a cabo.
3. Tener una entrada y una salida

Desarrollo y Simulacin de Programas

307

La tcnica de programacin modular disminuye el tiempo de desarrollo de un


programa, al separar la funcin global del cdigo en tareas pequeas realizadas por
subprogramas cortos, mas simples de escribir y de depurar que un programa extenso.
Las unidades de cdigo pueden ser escritas por ms de un programador y en forma
independiente.
Debido a que las fallas de posible aparicin durante el proceso de depuracin
de un programa son especificas de cada mdulo, stas son fciles de encontrar y corregir. Una vez verificados los mdulos en forma independiente, stos son enlazados
y relocalizados para formar un bloque nico de cdigo, el cual puede ser cargado en
memoria y ejecutado.
Otra ventaja de la programacin modular es patente cuando un programa desarrollado y en operacin debe ser modificado. Esto puede responder a que un procedimiento particular debe ser reformado o que nuevos mdulos deben ser incluidos. En
ambos casos, los cambios necesarios pueden realizarse sin afectar al resto de los archivos del programa. Finalmente, la programacin de rutinas funcionales permite
establecer una biblioteca de procedimientos factibles de ser usados en programas futuros.
Los beneficios obtenibles por el diseador con la utilizacin de la tcnica de
programacin modular son de tal proporcin, que sta tcnica ha sido adoptada como
un recurso de presencia obligada durante el proceso de diseo y escritura del software
de soporte de aplicaciones basadas en microcontroladores y microprocesadores. No
obstante, pueden sealarse algunos puntos dbiles del uso de mdulos, pero que en
modo alguno pueden considerarse desventajas significativas.
La programacin modular requiere de sostn extra de programas para desarrollo. Los procedimientos individuales deben ser relocalizables y debe disponerse de
un programa enlazador (linker). La cesin del control del programa a los mdulos
consume tiempo de CPU y memoria. Adems, es necesario escribir rutinas para depuracin de los mdulos, los cuales son verificados antes de la prueba del programa
final.

7.2.2 Diseo hacia abajo


Este mtodo de diseo descendente permite organizar el programa como un
conjunto de bloques de cdigo relacionados en forma jerrquica. Un mdulo particular est constituido usualmente por un procedimiento, pero no siempre es de este modo. En la prctica cualquiera seccin de cdigo que realice una funcin especfica,
puede ser un mdulo.
Cada rectngulo del diagrama de tres niveles de la figura 7.5 corresponde a un
mdulo del programa. En el nivel superior se encuentra el programa principal, el cual
para realizar la tarea llama a 10, 20 y 30, ubicados en el nivel 1. La subtarea ejecutada

Desarrollo y Simulacin de Programas

308

por el mdulo 10 requiere que ste llame a 11, 12 y 13; mientras que 20 usa a 21 y 22.
El mdulo 30 no llama a ningn procedimiento.

Fig. 7.5 Organizacin jerrquica de los mdulos

Una vez establecida la tarea que debe realizar el programa, como resultado de
la suma de pequeas subtareas propuestas en forma general, el proceso contina con
la progresiva sustitucin de cada proposicin con secuencias especficas de cdigo.
1. La primera fase del diseo consiste en escribir y depurar el mdulo principal, el cual incluir las
llamadas necesarias a los mdulos restantes del programa. Para la prueba, cada rutina puede
substituirse por un cdigo auxiliar que entregue la misma respuesta que debera entregar el subprograma codificado y verificado.
2. Durante la segunda fase, cada mdulo es codificado y depurado. Una vez verificado un mdulo,
el cdigo auxiliar correspondiente es sustituido por el cdigo operativo.
3. Codificados todos los mdulos, se prueba el programa final.

La ventaja ms resaltante del mtodo de diseo en descenso es que no requiere


codificar y probar todos los mdulos y posteriormente realizar la prueba del programa. Esta tcnica convierte el proceso de desarrollo de un programa en una serie de
etapas donde se mezclan la escritura y depuracin de secciones de cdigo. Existen
algunos defectos que pueden afectar negativamente los resultados obtenibles al aplicar esta tcnica. Es obvio que la escritura de los programas auxiliares puede ser una
labor compleja y en casos extremos, imposible de realizar.
El mdulo principal debe se cuidadosamente definido, escrito y depurado.
Cualquier error en el diseo o escritura de esta seccin causar resultados fatales en la
eficiencia u operatividad del programa desarrollado.
7.2.3 Cdigo estructurado
El uso de programacin estructurada como mtodo de desarrollo de programas es una va para eludir el uso indiscriminado de instrucciones tipo GO TO, debido

Desarrollo y Simulacin de Programas

309

a que este comando de bifurcacin resulta en el desarrollo de programas confusos y


difciles de analizar. Para escribir un programa eficiente no se requieren estructuras
complejas de control. La aplicacin prctica de teoremas de estructura ha verificado
que un programa con cualquier grado de complejidad puede ser desarrollado sin el
uso de instrucciones GO TO concibindolo en trminos de tres estructuras lgicas de
control bsicas: secuencial, condicional y lazos. Considerando las variantes de las
estructuras condicionales y lazo, se tienen cinco tipos comunes de formas lgicas
simples, ampliamente usadas en lenguajes de programacin de alto nivel. Estas son:
1. SECUENCIAL
2. IF-THEN/ELSE.
3. CASE.
4. WHILE-DO.
5. REPEAT-UNTIL.

La programacin estructurada requiere un lenguaje en el cual las estructuras


de control puedan ser codificadas. En la prctica, existe cierta dificultad para programar en forma estructurada usando lenguaje ensamblador, debido a que la construccin de lazos y proposiciones CASE en este lenguaje, implica el uso de instrucciones de salto. A pesar que es imposible alcanzar el nivel de estructuracin posible
en lenguajes de alto nivel, es factible el uso de cdigo estructurado en programas en
ensamblador.
Toda seccin de cdigo que realice una tarea representada por la realizacin
de una accin especifica y distinguible, tendr una entrada y una salida y las instrucciones se ejecutarn tal como estn almacenadas consecutivamente en memoria. Una
tarea o proceso puede consistir de: una operacin de lectura de un puerto de entrada
para adquirir datos provenientes de un convertidor anlogo digital, la carga inmediata
de un valor en el acumulador o de una secuencia de cdigo que programe convenientemente los dispositivos de E/S conectados al sistema.
Tambin representa un proceso: un programa completo o una seccin de este
que resuelva un problema matemtico o ejecute algn tipo de procesamiento de datos.
En cualquier caso, el procesamiento se inicia en la entrada de la rutina, ejecutndose
cada instruccin hasta la finalizacin del programa.

Estructura secuencial
Las instrucciones del programa son ejecutadas en el orden que aparecen en el
listado o lo que es igual se procesan instrucciones almacenadas en posiciones sucesivas de memoria. En la figura 7.6 se muestra la secuencia de ejecucin de tres procesos.

Desarrollo y Simulacin de Programas

310

Fig. 7.6 Estructura secuencial.

Los procesos individuales pueden tener un nivel de complejidad interna variable. Una tarea particular puede ser realizada por una instruccin simple o puede ser
necesaria una secuencia larga o compleja de instrucciones para programarse la tarea.
Si cada proceso corresponde a una instruccin, el programa completo descrito por la
figura 7.5, constar de tres instrucciones.
En las otras estructuras de programacin, una proposicin fija las condiciones
que se requieren para el control de la direccin de ejecucin del programa. Cuando se
ejecuta la proposicin, se prueba una condicin y se transfiere el control hacia una de
dos vas, de acuerdo con el resultado de la prueba. Dependiendo de la estructura bsica, la transferencia puede producir dos acciones: en un caso, el resultado de la prueba
conduce a la ejecucin de un proceso determinado, o la salida del mdulo; en el otro,
se selecciona uno de dos ms procesos posibles. En ambos modos la culminacin de
la ejecucin del cdigo implica la salida de la rutina.
La utilizacin de stas estructuras lgicas simplifica el desarrollo de programas, al sentar las base de la tcnica de programacin estructurada, en la cual un conjunto de mdulos, con una entrada y una salida, se combinan para formar algoritmos
lgicos ms complejos, los cuales tambin disponen de solo una entrada y una salida.
El resultado es el desarrollo de programas ms eficientes, fciles de entender y de
modificar.

311

Desarrollo y Simulacin de Programas

Estructura IF-THEN/ELSE
Un elemento de decisin es usado para aprobar la ejecucin de un proceso o
para seleccionar entre la ejecucin de uno de dos procesos. En el primer caso la estructura se reduce a IF-THEN. La forma general de la proposicin es,
IF condicin 1 THEN proceso 1
ELSE proceso 2

En la figura 7.7 se muestra el algoritmo de esta estructura de cdigo y en el


ejemplo 7.1 se presenta el listado de n programa que usa la estructura lgica IFTHEN/ELSE.

(a)

(b)

Fig. 7.7 Estructuras de control: a) IF THEN. b) IF-THEN/ELSE

Ejemplo 7.1
Usando la estructura lgica IF-THEN/ELSE, escriba un programa para activar
la bandera de acarreo e iluminar un LED conectado al bit 7 del puerto de salida 20H,
si el dato en el puerto de entrada 20H corresponde al caracter ASCII R. En caso
contrario el indicador de acarreo debe ser 0 y se activar un LED conectado al bit 3
del mismo puerto de salida.

312

Desarrollo y Simulacin de Programas

En la figura 7.8 se muestra el diagrama de flujo del cdigo y a continuacin el


listado del programa.

noesr:
led:

in 20h
cpi 52h
jnz noesr
stc
mvi a, 80h
jmp led
stc
cmc
mvi a, 08
out 20h
hlt

; Lee el puerto 20h.


;Compara el contenido de a con r.
; Salto si el caracter no es r.
; Cy=1.
; Bit 7 del a a 1.
; Salto a escribir en puerto 20h.
; Cy=1.
; Se complementa cy
; Bit 3 del a a 1.
; Se escribe en puerto de salida 20h.

Fig. 7.8 Diagrama de flujo del programa del ejemplo 7.1

Una vez realizada la lectura del puerto 20H se compara el valor en el registro
acumulador con el cdigo 52H. El elemento de decisin es el estado del bit de cero Z,
el cual es probado con una instruccin JZ de salto condicional, para determinar la
secuencia de instrucciones a ejecutarse, entre dos posibilidades. Observe que al realizarse la tarea correspondiente se produce la salida del programa.

Desarrollo y Simulacin de Programas

313

Estructura CASE
Es usual que un programa deba seleccionar la realizacin de una tarea dentro
de un grupo de opciones. Para codificar una estructura de seleccin mltiple existen
dos caminos: el primero es utilizar varias proposiciones IF-THEN y una IFTHEN/ELSE, de la forma,
IF condicin 1 THEN proceso 1
IF condicin 2 THEN proceso 2
IF condicin 1 THEN proceso 3
.
.
.

ELSE proceso n

Fig. 7.9 Seleccin mltiple

Se ejecutar el proceso correspondiente a la condicin que sea verdadera. Una


vez realizada la tarea seleccionada se sale del programa. Si ninguna condicin es verdadera se ejecuta el ltimo proceso. Este tipo de seleccin puede complicar innecesariamente un programa. La estructura CASE es la segunda va disponible para seleccin mltiple. La proposicin CASE permite que el valor de una variable entera entre
0 y n, determine cual de varios procesos debe ser ejecutado. El valor ndice puede ser

Desarrollo y Simulacin de Programas

314

resultado de la evaluacin de una expresin o puede ser suministrado por un perifrico. La forma de la proposicin CASE es,
CASE variable
proceso 0
proceso 1
.
.
.

proceso n

Fig. 7.10 Estructura CASE

Para el caso igual a i se ejecuta el proceso i, al culminar la ejecucin de la tarea seleccionada, el control abandona la rutina. Si el valor ndice es mayor que n, el
comportamiento de la proposicin CASE es impredecible, auque puede programarse
algn cdigo de proteccin contra tal eventualidad.
Suponga ahora que desee escribir una rutina con estructura CASE para ejecutar uno de cuatro procesos diferentes, segn indique un nmero binario almacenado
en el registro E, este dgito puede ser: 0, 1, 2, 3. Para codificar la proposicin CASE
se usar una tabla de saltos almacenada en memoria, la cual contiene las direcciones
de inicio de los cuatro procesos. Los dos primeros bytes de la lista contienen la direccin de inicio de la rutina correspondiente al proceso 0, y as sucesivamente. Los

Desarrollo y Simulacin de Programas

315

elementos de la tabla ocupan 8 bytes de memoria. Conocido el proceso a ejecutar se


debe encontrar la direccin del proceso en la tabla.
Para el acceso a la tabla se programa un modo de direccionamiento conocido
como base ms desplazamiento, donde la base representa la direccin de inicio del
arreglo de datos, mientras que el desplazamiento seala la ubicacin relativa en el
arreglo de un elemento de 16 bits. Si llamamos i el nmero del proceso a ejecutar, su
direccin en la tabla estar a partir de la posicin de memoria base + 2*i, como indica la tabla 7.3.
Tabla 7.3 Ubicacin de las direcciones de salto
Direccin en la tabla
Byte alto
Byte bajo
Proceso
0
base+1
base
1
base +3
base+2
2
base +5
base+4
3
base +7
base+6

Observe que si nos ubicamos en el inicio de la tabla, bastar desplazarse dos


veces el valor del nmero binario de entrada, para apuntar la direccin de inicio del
proceso. Esto significa que si el nmero es 3, basta con ir a la direccin base+6 para
encontrar el byte de orden bajo de la direccin de salto.
Ejemplo 7.2
Escribir un programa con estructura CASE utilizando una tabla de saltos. El
nmero de la tarea a ejecutar se encuentra el registro E de 8 bits.
Conviene utilizar direccionamiento indirecto por registro para acceder a la tabla. La posicin del elemento seleccionado en la tabla est almacenada en el registro
par HL. Para crear la direccin se carga la base del arreglo en HL y se le suma dos
veces el valor del nmero del proceso, obtenindose la direccin en HL. Con este
registro apuntando la posicin deseada se transfiere desde la memoria hasta el registro DE la direccin de la posicin de que contiene la rutina. Esta informacin se
transfiere a HL y finalmente al contador de programa, hacindose efectiva la ejecucin del proceso.
mvi
lxi
dad
dad
mov
inx
mov
xchg
pchl

d,0;
h, tabla
d
d
e,m
h
d,m

; Byte alto del desplazamiento de la tabla a cero.


; Cargar hl con la base de la tabla.
; Sumar el desplazamiento a la base de la tabla.
; Sumar de nuevo
; El byte bajo de la direccin de salto en e.
; HL apunta a direccin siguiente.
; El byte alto de la direccin de salto en d.
; Intercambiar los contenidos de hl y de.
; Saltar al proceso.

Desarrollo y Simulacin de Programas

316

Para garantizar que la estructura CASE tenga una entrada y una salida, cada
rutina de proceso debe asegurar que una vez ejecutado, el control de programa vaya a
la misma direccin de la memoria. Aunque las dos ltimas estructuras de control se
discuten en el capitulo 6, para mantener la continuidad, se repiten aqu.

Estructura DO-WHILE
Las instrucciones de salto permiten el establecimiento de lazos de programacin, en los cuales un grupo de instrucciones se ejecutan repetidamente mientras una
instruccin de salto condicional se encarga de controlar la repeticin y salida del lazo.

Fig. 7.11 Estructura DO-WHILE.

En esta estructura la condicin al inicio del lazo es repetidamente evaluada, y


el resultado de la prueba indicar si se debe ejecutar el lazo o salir de este. Cuando se
utiliza un contador podra concebirse como ejecute el proceso mientras el contador
sea distinto de cero. En tanto esta condicin sea cierta, la tarea se realizar repetidamente. Cuando el contador llegue a cero, la condicin ser falsa y se saldr del programa.
Ejemplo 7.3
Este programa transfiere un bloque de 16 datos desde una zona de memoria
con direccin de inicio en DORG, hasta otra rea con direccin de inicio DDES. En
este caso el lazo debe repetirse 16 veces para lograr la transferencia del bloque de
datos de 16 bytes. Pero, debido a que el contador se decrementa antes de la ejecucin
del primer lazo, el contador debe cargarse con un valor N, siendo (N-1) el nmero de
veces que debe repetirse el lazo.

317

Desarrollo y Simulacin de Programas

lazo:

lxi
lxi
mvi
dcr
jz
mov
stax
inr
inr
jmp

h,dorg
d,ddes
b,17
b
salir
a,m
d
l
e
lazo

; Cargar en hl la direccin de inicio del bloque origen.


; Cargar en de la direccin de inicio del bloque desti no
; Inicializar el contador de nmero de datos a mover.
; Disminuir contador.
; Si el ltimo dato fue transferido, salir de la rutina.
; Leer un dato desde el bloque origen.
; Transferir el dato al bloque destino.
; Incrementar apuntador de bloque origen.
; Incrementar apuntador de bloque destino

salir:

Estructura REPEAT-UNTIL
En este tipo de proposicin, el control entra al lazo y el proceso es ejecutado
incondicionalmente, posteriormente se prueba la condicin y dependiendo del resultado se repite el lazo o se abandona este. A diferencia de la estructura DO-WHILE en
la cual es posible que el lazo nunca se ejecute, en REPEAT-UNTIL se ejecuta por lo
menos una vez.

Fig. 7.12 Estructura REPEAT-UNTIL

En el caso que se use un registro como contador para el control del lazo, la
proposicin puede concebirse como: repita el proceso hasta cuando el contador alcance cero. Mientras la condicin sea falsa, se ejecuta la tarea. Cuando sea verdadera

318

Desarrollo y Simulacin de Programas

se sale del programa. El ejemplo 7.4 muestra el cdigo del ejemplo 7.3 usando la estructura REPEAT-UNTIL.
Ejemplo 7.4

lazo:

lxi h,dorg
lxi d,ddes
mvi b,16
mov a,m
stax d
inx h
inx d
dcr b
jnz lazo

; Cargar en hl la direccin de inicio del bloque origen.


;Cargar en de la direccin de inicio del bloque desti no
; Inicializar el contador de nmero de datos a mover.
; Leer un dato desde el bloque origen
; Transferir el dato al bloque destino.
; Incrementar apuntador de bloque origen
; Incrementar apuntador de bloque destino
; Decrementar contador.
; Si el ltimo dato fue transferido, salir de la rutina.

No siempre estas dos ltimas estructuras de programacin requieren un contador para el control de repeticin del lazo, es posible mantener activo el lazo hasta la
ocurrencia de un evento externo, como la introduccin de un caracter por un puerto, o
la lectura de un dato de control almacenado en memoria.
Ejemplo 7.5
Considere que un grupo de datos numricos almacenados en una tabla en memoria deben ser transferidos al puerto de salida 1. El final del arreglo de datos es indicado con el cdigo del caracter ASCII P (parar). Una rutina que realiza esta tarea
se escribe a continuacin.
lazo:

lxi
mov
cpi
jz
out
inx
jmp

h,tabla
a,m
80h
salir
01
h
lazo

; Cargar en hl direccin de inicio de la tabla.


; Mover al acumulador el contenido de m.
; Comparar el dato en a con el caracter p.
; Si es p, salir.
; Si no es p, escribir en puerto de salida.
; Incremente hl.
; Repetir lazo.

salir:

Es obvio que el nmero de veces que el lazo se repite es desconocido, dado


que es fijado por la localizacin del caracter P en memoria.

7.3 EL LENGUAJE ENSAMBLADOR


El ensamblador permite representar en forma simblica el lenguaje de mquina del procesador, facilitando la escritura o lectura de un programa. Cada P viene
con su propio ensamblador, aunque es usual que segundas fuentes provean otras versiones del lenguaje para un mismo P. Aunque la sintaxis y potencia del traductor

Desarrollo y Simulacin de Programas

319

puede variar de una versin a otra, existen ciertas caractersticas comunes. Por ejemplo todo buen ensamblador permite,
Usar una secuencia de caracteres alfanumricos (TPULSO, LAZO, LAZO1) para el manejo simblico de direcciones.
Definir constantes en bases distintas: 255, FFH, 377Q, 11111111B, representan el mismo
nmero en decimal, hexadecimal, octal y binario respectivamente.
La asignacin de direcciones de memoria usando expresiones aritmticas.
Reservar reas de la memoria para el almacenamiento del programa y los resultados.
El uso de seudo-instrucciones o directivas para controlar el proceso de ensamblaje.

Tales caractersticas resultan en el incremento de la productividad del programador al evitarse los errores inherentes a la representacin de instrucciones, direcciones y datos en binario, y simplifica el proceso de modificacin y documentacin de
los programas. Una de las desventajas del lenguaje ensamblador es que al estar ntimamente relacionado con la estructura de la mquina, cada microprocesador deber
disponer de su propio ensamblador.
7.3.1 El proceso de ensamblaje
En su forma ms simple un ensamblador lee un archivo fuente escrito siguiendo la sintaxis del traductor. El nombre del archivo es elegido por el usuario y su extensin es fijada por el diseador del traductor. Por ejemplo: nombre.asm, nombre.a85 y nombre.scr, son archivos tpicos de entrada para ensambladores del P
8085A.
Como muestra la figura 7.13, el traductor procesa el programa fuente y lo traduce a cdigo objeto. El archivo objeto contiene el cdigo ejecutable con todos las
referencias simblicas de cdigos de operacin, datos y direcciones convenientemente convertidas a binario. Cuando el ensamblador traduce el programa fuente tambin
incorpora en el archivo binario generado informacin adicional adems de la versin
en lenguaje de mquina del cdigo. Esta informacin permite control de la carga en
memoria del cdigo ejecutable.
Lo usual es que el archivo objeto tenga un formato adecuado para ser cargado
en un grabador de EPROM o EEPROM, en la memoria de un equipo emulador del P
o para ser entrada de un programa simulador del P. En cualquier de estos casos el
cdigo objeto generado por el ensamblador puede ser probado y depurado.
El ensamblador genera adems un archivo texto o programa lista que contiene
una combinacin del programa fuente y el cdigo de mquina generado, indicando las
direcciones de memoria utilizadas para almacenamiento del programa, y mensajes de
posibles errores cometidos en la escritura del texto fuente. Opcionalmente, algunos

Desarrollo y Simulacin de Programas

320

ensambladores entregan otro archivo texto denominado referencia cruzada, el cual


ofrece una herramienta de diagnstico para el desarrollo de programas, al contener
informacin sobre los smbolos usados, su clase, direccin y lneas del programa
donde aparecen. El archivo lista se identifica como nombre.lst o nombre.prn, y la
referencia cruzada como nombre.crf.

Fig.7.13 Salidas del proceso de ensamblaje

Al inicio del ensamblaje, el programa ensamblador activa un contador de localizaciones (LC), el cual se inicia por defecto en la direccin 0000H. Este contador se
incrementa a medida que se procesa cada instruccin del programa fuente para indicar al ensamblador la posicin de memoria donde se ensamblar la siguiente instruccin. El contenido del LC puede ser modificado por el comando ORG direccin. Al
final del proceso de traduccin, el archivo objeto contiene todas las direcciones de
carga del cdigo especificadas pudiendo ser cargado directamente en memoria. Este
tipo de archivo se conoce como archivo objeto absoluto. El proceso descrito supone
la existencia de un solo archivo fuente. En el momento de la traduccin el ensamblador conoce las direcciones de memoria donde se cargarn todas las etiquetas del programa. Una direccin puede expresarse como un nmero: 0100H, o con una etiqueta
como DIRM. El ensamblador se encarga de determinar el valor absoluto de la direccin y lo asigna a la etiqueta, manteniendo un registro en una tabla de smbolos.

7.3.2 Proceso de ensamblaje de un programa modular


El ensamblador genera un cdigo objeto absoluto cuando en el programa
fuente todas las direcciones se declaran en forma absoluta. Esto requiere que el programador conozca y defina las direcciones de carga en memoria de las instrucciones
de datos del programa. Este modo de programacin es ineficiente porque especificar
la direccin de carga del cdigo en memoria impide la ejecucin del programa en otra
rea de memoria y el desarrollo de programas en forma modular. La funcin del ensamblador que permite superar estas limitaciones se denomina relocalizacin y capacita al programador par codificar un programa o partes de ste sin desvelarse por la

Desarrollo y Simulacin de Programas

321

ubicacin en memoria del cdigo objeto final. El uso de la relocalizacin genera un


cdigo reubicable, el cual es un software cuya direccin de carga puede cambiar. El
cdigo puede ser movido en el espacio de direcciones del P y ejecutado en ms de
una direccin. Un programa relocalizable puede ejecutarse en la direccin cero en un
caso, y en 2000H en otro.
Para ilustrar una de las ventajas de la relocalizacin de cdigo considere que
subsistema de memoria de una aplicacin con P est compuesto por una combinacin de memoria EPROM y RWM, con direcciones lgicas determinadas. Es claro que
el programa final a ejecutar en el hardware debe hacer referencia a estas direcciones.
No obstante, es comn que en la fase de desarrollo y depuracin del software se usen
recursos como equipos emuladores o simuladores con un espacio de direcciones de
memoria distinto al de la tarjeta de la aplicacin. La relocalizacin permite la prueba
del programa en cualquier direccin y posteriormente la reubicacin del cdigo a las
direcciones correspondientes al hardware desarrollado.
Adems, la aplicacin de la tcnica de programacin modular en el desarrollo
de programas con ensamblador es posible gracias a la relocalizacin de cdigo. Esta
funcin hace posible el ensamblaje y depuracin de los mdulos independientes, los
cuales sern posteriormente enlazados para formar un programa nico ejecutable. Los
ensambladores son diseados para permitir el uso de programacin modular, pudiendo el programador estar en capacidad de disear, codificar, y probar en paralelo mdulos distintos del programa y limitar las modificaciones necesarias a un modulo especifico en lugar de hacerlo al programa completo.
En la etapa inicial de desarrollo del programa, las tareas a realizar son definidas y divididas en rutinas. El programa constar de varios archivos o mdulos, los
cuales son escritos y ensamblados independientemente. Adems, el programa puede
requerir el uso de algn cdigo contenido en una biblioteca de programas, el cual
debe ser incorporado durante el proceso de traduccin al archivo binario ejecutable
final. Un mdulo de entrada tiene un nombre asignado por el usuario y puede contener uno o ms segmentos o segmentos parciales.
Un segmento es una seccin de cdigo o de datos en memoria generada a partir de cdigo o datos del archivo fuente, y puede ser absoluto o relocalizable. Un
programa ejecutable consistir de un mdulo nico que es una combinacin de los
segmentos absolutos y relocalizables de los mdulos de entrada.
Un segmento absoluto identifica una seccin de cdigo con su direccin de
carga completamente especificada, estos se usan para definir cdigo cuya direccin
nunca cambiar. Los segmentos absolutos normalmente se usan (an en mdulos que
contengan segmentos relocalizables) para puertos mapeados en memoria o para cargar cdigo en direcciones fijas usadas por el procesador, por ejemplo rutinas de inicio
o vectores de interrupcin.

Desarrollo y Simulacin de Programas

322

Los segmentos relativos contienen cdigo cuya direccin de carga en memoria


aun no est definida. Un segmento relocalizable tiene nombre, tipo y otros atributos.
Los segmentos que tengan el mismo nombre pero procedan de diferentes mdulos
son considerados parte del mismo segmento y son denominados segmentos parciales.
Estos son combinados por el por el programa enlazador. Los segmentos absolutos no
tienen atributos y no pueden combinarse con otros segmentos.
Los segmentos se definen al inicio del programa. El ensamblador AVMAC85
asigna un contador de posiciones para cada segmento. Cuando un segmento definido
es activado, su LC es puesto a cero (en segmentos absolutos, ORG direccin puede
modificar el LC) y toda instruccin o dato subsiguiente es asignado a este bloque de
memoria. La activacin de un nuevo segmento inicia un nuevo LC y desactiva el
segmento en curso.
El smbolo ($) hace referencia al valor del LC en el segmento activo. El LC
apunta al espacio de direcciones dentro del segmento y su contenido representa una
direccin lgica para segmentos absolutos o un desplazamiento para segmentos relocalizables. Las direcciones lgicas identifican posiciones reales de memoria usadas
por el microprocesador cuando requiere acceso a instrucciones o datos del programa
en el espacio de memoria del microcomputador. Para segmentos relocalizables la
direccin inicial de carga puesta por el ensamblador siempre es cero y el LC se incrementa a medida que se agregan lneas de cdigo.
Una etiqueta en la primer byte de la seccin de cdigo relocalizable se le asigna la direccin cero. De modo que cualquier lnea dentro del segmento estar en una
direccin que representa un desplazamiento con relacin a la localizacin final de
carga del segmento. Cuando los segmentos relativos son vinculados por el enlazador
se le asigna su direccin real de carga y todas las etiquetas relativas son resueltas.
El proceso de traduccin de los archivos de entrada que componen cada programa fuente se describe a continuacin:
1.

Durante el primer paso el ensamblador examina cada programa fuente y agrupa las referencias simblicas en una tabla.

2.

En el segundo paso, el ensamblador genera un cdigo el cual no est totalmente en cdigo de mquina. Ms bien es un cdigo muy cercano al lenguaje de mquina, denominado
cdigo relocalizable, al cual llamaremos cdigo objeto.

3.

Un programa denominado enlazador/relocalizador se encargar de procesar los distintos


mdulos objetos para formar un programa nico ejecutable.

En la figura 7.14 un diagrama de bloques ilustra el proceso de generacin de


un programa objeto absoluto a partir de varios mdulos de entrada.

Desarrollo y Simulacin de Programas

323

Fig.7.14 Secuencia de traduccin de un programa modular

Despus que el diseo del programa es completado, se escriben los distintos


mdulos fuente y se traducen uno a uno a cdigo objeto usando el ensamblador. Este
genera un archivo objeto de tipo relocalizable, si al menos uno de los segmentos del
respectivo mdulo fuente es de este tipo, en caso contrario el cdigo objeto resultante
para ese mdulo particular ser absoluto. Opcionalmente, el traductor entregar los
resultados del ensamblaje en un archivo texto o listado del programa por cada mdulo
de entrada.
El programa objeto contiene las instrucciones del cdigo en lenguaje de mquina y los datos a ser cargados en memoria y ejecutados, adems incorpora comandos de control adicionales que dirigen el proceso de carga. Para un mdulo particular,
el ensamblador puede producir un programa objeto en cdigo relocalizable, pero si el
mdulo contiene solo segmentos absolutos, el archivo objeto producto del ensamblaje
ser cdigo absoluto. Este puede ser cargado en memoria sin pasar por el programa
enlazador/relocalizador.
El archivo mapa es un fichero ASCII donde se registra informacin sobre el
proceso de enlace de los archivos objeto con cdigos relocalizables y absolutos. Al
final del ensamblaje de todos los mdulos del programa, el programa enlazador procesa el archivo en mdulo objeto. La funcin del enlazador/relocalizador es asignar
direcciones de memoria absolutas a todos los segmentos relocalizables, combinando
segmentos del mismo nombre y tipo.
Adems el enlazador resuelve todas las referencias entre mdulos. Las salidas
del linker son: Un programa objeto en cdigo absoluto listo para ejecutar y un programa lista que muestra los resultados del proceso de enlazado y reubicacin. Por
ejemplo se indican los segmentos del programa especificando el tipo las direcciones
de inicio y final, adems de las direcciones de carga en memoria de cada mdulo del
programa.

Desarrollo y Simulacin de Programas

Fig. 7.15 Proceso de desarrollo de un programa

324

Desarrollo y Simulacin de Programas

325

La figura 7.15 muestra, que el cdigo absoluto de salida puede ser programado en una memoria no voltil y ejecutado por el P. Por ejemplo en un grupo de
ROMs programadas por mscara en la fbrica, o en una PROM, EPROM o EEPROM
programada por el usuario. El emulador en la figura 7.15 es una herramienta especializada para la depuracin de programas para sistemas basados en microprocesadores.
Lo comn y deseable es que el desarrollo del programa, desde el diseo, ensamblaje,
prueba y depuracin, hasta la grabacin en memoria sean realizado usando equipos
microcomputadores de propsito especfico, denominados Sistemas de Desarrollo
(SD), los cuales incluyen todas las herramientas necesaria para el diseo y desarrollo
de programas . Es comn que cada fabricante de Ps ofrezca un SD adecuado para el
diseo de aplicaciones generales que usen el dispositivo que producen.
Algunos C de bajo costo como el MPR-85 requieren que el cdigo objeto absoluto est en formato hexadecimal para proceder a su ejecucin. En este caso, se
requiere el uso de un programa para convertir desde cdigo objeto a formato hexadecimal. En realidad, algunos enlazadores entregan directamente un archivo ejecutable
en formato hex...

7.3.3 Lenguaje ensamblador para el 8085


Para un proceso de ensamblaje exitoso es necesario que el archivo texto que
contiene el cdigo fuente cumpla estrictamente con ciertas reglas de codificacin,
propias de cada ensamblador. Existen muchos ensambladores para el P 8085A, los
cuales pueden presentar diferencias en la sintaxis del lenguaje. No obstante existen
algunas caractersticas comunes a todos los ensambladores que permiten la descripcin de los aspectos resaltantes del lenguaje usando una versin especfica. En esta
seccin se presenta el ensamblador original (ASM80) diseado por la empresa INTEL
para el 8085A, el cual es descrito con detalle en el 8080/8085 Assembly Language
Programming Manual. El uso de otra versin del lenguaje usualmente implica modificaciones menores en el programa fuente.
Un programa fuente escrito en lenguaje ensamblador consiste de una secuencia de lneas que suministran al ensamblador la informacin necesaria para ejecutar
el proceso de traduccin. El ensamblador reconoce tres tipos de lneas fuentes:
Instrucciones en nemnicos que sern traducidas a cdigo de mquina. Este tipo de lnea
genera cdigo ejecutable.
Directivas generales de ensamblador para especificar la estructura del programa y definir
los tipos y alcance de los smbolos usados. Por ejemplo, especifican el valor de inicio del
contador de localizaciones, sealan el final del programa, permiten reservar direcciones o
cargar datos en memoria. Tambin se usan para definir y activar segmentos o para definir
si un smbolo tiene un alcance local o global.
Directivas de control de ensamblador para fijar el modo de ensamblaje. Por ejemplo,
usando una de estas directivas puede especificarse el nombre de un archivo en ensambla-

326

Desarrollo y Simulacin de Programas

dor que debe ser incluido como parte del programa que est siendo traducido. Tambin
puede establecerse los archivos de salida a generarse, el ancho o longitud de la pgina y el
ttulo del programa.

Formato de lnea
El formato de una lnea del programa fuente consta de cuatro campos, separados al menos por un espacio en blanco.
CAMPO 1

Etiqueta

CAMPO 2

Cdigo de operacin

CAMPO 3

CAMPO 4

Operando(s)

; Comentarios

Fig. 7.16 Formato de lnea del ensamblador

El campo de etiqueta identifica en forma simblica la posicin de memoria donde se localiza la instruccin que es ensamblada y debe finalizar con dos puntos (:). Es opcional, y
puede consistir de uno a seis caracteres alfanumricos, pero el primer caracter debe ser alfabtico o uno de los caracteres especiales ? o @. El ensamblador indicar error si una
etiqueta es definida ms de una vez en el programa.
El campo de cdigo de operacin Puede contener el nemnico de una instruccin del P
que debe ser ensamblada o una directiva de ensamblador para ser ejecutada.
El campo de operando especifica explcitamente o identificando el lugar de origen de los
datos o dato que usar la instruccin definida en el campo de cdigo de operacin. Este
campo estar vaco para instrucciones que no requieran operandos, STC por ejemplo, o
puede contener dos operandos cuando deba especificarse el destino de los datos, como en
MOV A,B. El operando puede ser un registro, una referencia a memoria, un dato, o una
direccin.
El campo de comentarios expone la funcin la operacin que ejecuta la instruccin. Es
opcional y en una lnea fuente puede existir solo este campo. Un caracter (;) marca el inicio del comentario.

Etiqueta
Cdigo de operacin Operando(s)
; Comentarios
; ********************Esto es una seccin del ejemplo 6.32*********************
LAZO:

DCX
MOV
ORA

B
A,B
C

;Decremento registro par BC


;Byte alto del contador al A.
; OR entre B y C.

Fig.7.17 Ejemplos de lneas fuente vlidas. La primera lnea solo tiene campo de comentario.

327

Desarrollo y Simulacin de Programas

Conjunto de caracteres
Los siguientes caracteres son reconocidos por el ensamblador:
a) Las letras del alfabeto Ingls. Desde la A hasta la Z.
b) Los dgitos del 0 al 9
c) Los caracteres especiales + - * / , ( ) & ...
d) Cualquier caracter del cdigo ASCII que forma parte de una constante encerrada entre
apstrofes (R , abef), o que forme parte de un comentario.

Delimitadores
Son caracteres especiales usados para indicar la finalizacin de una lnea o para separacin entre campos.
Tabla.7.4 Delimitadores legales en el asm80/85
CARACTER
USO
b
Uno o ms espacios en blanco Separador de campo.
,
Coma
Separador de operandos.
;
Punto y coma
Inicio de comentario
:
Dos puntos
ltimo caracter de la etiqueta

Dos apstrofes
Delimita cadena de caracteres.
()
Dos parntesis
Delimita una expresin.

Especificacin de operandos
Cuando existen dos operandos, el primero identifica el destino del resultado,
mientras que el segundo seala el origen del dato. Los tipos de operandos posibles
son:

Registro.
Registro par.
Dato inmediato.
Direccin de 16 bits.

Los operandos pueden especificarse de distintas formas:


Hexadecimal
Una cantidad hexadecimal iniciada con un dgito del 0 al 9, y que finalice con
la letra H.
EJEMPLO
00H

23C5H

0DFH

0FFFCH

328

Desarrollo y Simulacin de Programas

Octal
Un nmero octal seguido por la letra Q u O.
EJEMPLO
45Q

1234Q

230Q

7600Q

Binario
Cualquier cantidad en binaria seguida por la letra B.
EJEMPLO
11010100B

Constante ASCII
Un caracter encerrado entre apstrofes define una constante ASCII.
EJEMPLO
MVI

A,G

; Carga el A con el valor 47H,


;correspondiente al cdigo en
;ASCII del caracter G.

Valores asignados a etiquetas


Las directivas SET y EQU permiten asignar valores a etiquetas. Si DATO tiene asignado el valor 0DH, puede ser usada como operando, de modo que las siguientes instrucciones son equivalentes:
EJEMPLO
SUI
SUI

0DH
DATO

Etiquetas de instrucciones o datos


El ensamblador asigna a las etiquetas usadas para identificar lneas de programa, el valor de la direccin del primer byte de la instruccin. A partir de la declaracin de la etiqueta, cualquier instruccin del cdigo fuente puede utilizar esta etiqueta como operando.
EJEMPLO
LAZO2:

DCX
MOV
ORA
JNZ

B
A,B
C
LAZO2

; Salto a instruccin en lazo2 si Z=0.

329

Desarrollo y Simulacin de Programas

Expresiones
Cualquier de los operandos anteriores pueden se usados conjuntamente con
operadores, para formar expresiones utilizables como operandos en una instruccin.
EJEMPLO
SUI
MVI

2*DATO
A,DATO + 5

Referencia al contador de posiciones


El ensamblador usa un contador para mantener un seguimiento de las direcciones de las instrucciones en lenguaje de mquina. Debido a que estas direcciones en
ltima instancia especifican posiciones de la memoria principal, el contador es denominado contador de posiciones (Location counter (LC)). Antes del ensamblaje el LC
es puesto a cero. Luego que cada lnea fuente ha sido examinada en el primer paso, el
LC es incrementado en un valor igual al nmero de bytes de cada instruccin. Existe
una directiva de ensamblador, ORG, la cual permite inicializar el LC en una direccin
diferente a cero.
El caracter especial $ hace referencia al contenido actual del contador de posiciones, y puede formar parte de un operando.
EJEMPLO
SALTO:

JMP

$-5

; Salto a la direccin 5 bytes


; atrs del primer byte de esta
; instruccin.

Smbolos reservados
Los smbolos utilizables en el lenguaje ensamblador tienen el formato especificado para las etiquetas. Existen ciertos smbolos que no pueden ser definidos como
smbolos de usuario debido a que tienen un significado especfico para el ensamblador. Por ejemplo, los nemnicos de las instrucciones y las directivas son smbolos
reservados por el ensamblador. Los operandos de la tabla 7.5 tampoco pueden usarse
como smbolos de usuario.
Definicin de smbolos
Un smbolo global es aquel que mantiene su significado a lo largo del programa. Si una direccin especifica de una instruccin se le asigna el smbolo SALTO1,
se puede hacer referencia a este smbolo desde cualquier parte del programa. Un sm-

Desarrollo y Simulacin de Programas

330

bolo global solo puede definirse una vez en el programa, de lo contrario habr una
indicacin de error.
Tabla. 7.5 Smbolos de operandos reservados por el ensamblador.
SMBOLO
SIGNIFICADO
Referencia al contador de posiciones
$
Acumulador
A
Registro B o registro par BC
B
Registro C
C
Registro D o registro par DE
D
Registro D
E
Registro H o registro par HL
H
Registro L
L
Registro apuntador de pila
SP
Palabra de estado del programa.
PSW
Corresponde al contenido del acumulador y del registro banderas.
Referencia a memoria usando la direccin almacenada en HL
M

Cuando se desarrolla un programa, es comn que exista una secuencia de instrucciones que es ejecutada a menudo cambiando nicamente ciertos parmetros. Para
estos casos el ensamblador ofrece la posibilidad de definir una rutina denominada
MACRO que puede ser tratada como una entidad. Cada vez que el macro sea llamado
desde el programa principal pueden ser reemplazados un grupo de parmetros por
otros. La posibilidad de usar macros evita la codificacin repetida un grupo de instrucciones (con parmetros distintos) a lo largo del programa.
Un smbolo local tiene significado solamente dentro de un macro o en una
llamada a macro, su nombre deriva del hecho que son locales al macro. Si un nombre
dentro de un macro es definido como global, al realizar la segunda llamada al macro
se recibir un mensaje de error indicando la duplicacin de un smbolo global. Si el
valor de un smbolo es constante durante el proceso de ensamblaje se dice que es un
smbolo permanente, en caso contrario se habla de smbolo redefinible.
Los programas relocalizables son ensamblados con referencia a la posicin de
memoria 0, siendo posteriormente relocalizados a otra rea de memoria. Un smbolo
absoluto mantiene constante su direccin durante el proceso de reubicacin, mientras
que un smbolo relocalizable la cambia. Un smbolo relocalizable externo es usado
en un mdulo, pero definido en otro.
Un smbolo relocalizable pblico es definido en un mdulo pero puede se
usado por otro mdulo. Estos dos ltimos tipos de smbolos son de utilidad cuando se
usa un enlazador/relocalizador para enlazar mdulos de programas relocalizables y
producir un slo programa. El ensamblador tiene directivas que permiten definir el
tipo de smbolo.

Desarrollo y Simulacin de Programas

331

Evaluacin de expresiones
Una expresin puede ser absoluta o relocalizable, y contiene smbolos, nmeros y operadores. El ensamblador trata a las expresiones como valores de 16 bits. El
nmero 10H, por ejemplo, se representa internamente como 0010H. Los operadores
vlidos en el ensamblador permiten la ejecucin de operaciones:
1.
2.
3.
4.
5.

Aritmticas
De desplazamiento
Lgicas
De comparacin
De aislamiento de byte.

Operadores aritmticos:
Los operadores aritmticos son los siguientes:
+
*
/
MOD

Suma.
Resta.
Multiplicacin.
Divisin sin residuo. (13/2 = 6).
Mdulo. El resultado es el residuo de una divisin (13 MOD 2=1).

Operadores de desplazamiento :
Los operadores de desplazamiento son dos:
y SHR x Desplace operando y a la derecha, x posiciones de bit.
y SHL x Desplace operando y a la izquierda, x posiciones de bit.
EJEMPLO
Si (VALOR) = 10010110 = (150)10
La ejecucin de la instruccin afectar al operador VALOR:
VALOR SHR 2
(VALOR) = 00100101 = (37)10.

Observe que al desplazar un nmero binario a al derecha, ste queda dividido por 2. Si el desplazamiento ocurre hacia la izquierda el efecto ser la multiplicacin del nmero por 2.
Operadores lgicos:
Los operadores lgicos reconocidos por el ensamblador son: NOT (complemento), AND, OR y XOR. Estos operadores se usan extensamente en conjunto con la

332

Desarrollo y Simulacin de Programas

directiva de ensamblaje condicional IF. Actan solamente sobre el bit 0 del resultado
de la operacin.
EJEMPLO
Si el smbolo DIR est definido como 07D3, la instruccin:
LXI H,NOT DIR +1

producir

(H)(L) = (11111000) (00101011)

Operadores de comparacin:
La operacin de comparacin produce un resultado booleano Si la evaluacin de la expresin es cierta, el valor del resultado es todos los bits en 1, cuando es
falso ser todos bits en cero. Al igual que los operadores lgicos, los de comparacin
se usan en directivas IF.
Los operandos para comparacin son:
EQ
EN
LT
LE
GT
GE
NUL

Igual
Desigual
Menor que
Menor o igual
Mayor que
Menor o igual
Usado para pruebas de omisin de parmetros en macros.

Operadores de aislamiento de byte:


Cuando se requiere obtener un nmero de 8 bits desde una expresin, o si se
desea obtener un byte de una direccin, se usan los operadores:
HIGH
LOW

Obtiene el byte ms significativo de un valor de


16 bits.
Obtiene el byte menos significativo de un valor
de16 bits

Aqu finaliza una breve introduccin a la sintaxis del lenguaje ensamblador. El


lector habr notado que todos los programas fuente que se han presentado en este
trabajo estn escritos en ensamblador.
Traduccin de un archivo fuente
Antes de presentar las directivas de ensamblador ms usadas conviene realizar
la traduccin de un programa ejemplo para mostrar como el programa traductor reali-

333

Desarrollo y Simulacin de Programas

za el procesamiento del archivo fuente. Con este objetivo inspeccione el programa del
ejemplo 7.6 en el cual se aplican algunos de los conceptos expuestos en esta seccin.
Ejemplo 7.6
El objetivo del programa es leer 16 caracteres ASCII del puerto de entrada 0 y
determinar si corresponden a dgitos vlidos del sistema de numeracin hexadecimal.
Cada vez que un dato se presente en el puerto 0, el bit 0 del puerto 02 se pone en nivel alto.
Si el digito en el puerto pertenece al conjunto:
{0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}

debe almacenarse en un bloque de memoria con inicio en 1000H. Si la prueba falla,


el valor debe escribirse en el puerto de salida 01H. La tabla 7.6 muestra los cdigos
ASCII para los nmeros hexadecimales.
Tabla. 7.6 Cdigo ASCII de dgitos hex.
CARACTER
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

ASCII (hex)
30
31
32
33
34
35
36
37
38
39
41
42
43
44
45
46

El algoritmo para identificar un nmero hexadecimal es simple. Basta con


examinar el valor del caracter obtenido del puerto de entrada, el cual est almacenado
en el acumulador. Si se cumple que:
30H (A) 39H

41H (A) 46H,

El caracter es un dgito hexadecimal.

El listado del programa que resuelve el problema planteado, se muestra a continuacin.

334

Desarrollo y Simulacin de Programas

Etiqueta

LAZO:
BIT01:

VALI:
INVAL:
BIT10:

SALIR:

Cdigo de
operacin
LXI
MVI
DCR
JZ
IN
ANI
JZ
IN
CPI
JM
CPI
JM
CPI
JM
CPI
JP
MOV
INX
JMP
OUT
IN
ANI
JNZ
JMP
HLT

Operando(s)
H,1000H
B,17
B
SALIR
02H
01H
BIT01
00H
'0'
INVAL
'9'+1
VALI
'A'
INVAL
'F '+1
INVAL
M,A
H
BIT10
01H
02H
01H
BIT10
LAZO

Comentarios
; Direccin de almacenamiento de digitos hex.
; Cargar contador de digitos .
; Decrementar contador de digitos.
; Salir si se evalu ltimo digito.
; Leer la palabra de control en el puerto 02.
; Probar si el bit 0 est en nivel alto.
; Si es cero, saltar a esperar que pase a 1.
; Leer digiro de puerto de entrada.
; Comparar con ASCII 0.
; Si es menor , no es un digito hexadecimal.
; Comparar con ASCII 9+1.
; Si es menor, el digito esta entre 0-9.
; Comparar con ASCII A.
; Si es menor no es un digito hexadecimal.
; comparar con ASCII F+1.
; Si es mayor, invlido.Debe estar entre A-F.
; Mover a memoria el digito hex en el reg. (C).
; Apuntar a prxima direccin de memoria.
; Escribir en puerto de salida valor no hex.
; Leer la palabra de control en el puerto 02.
; Probar si el bit 0 est en nivel bajo.
; Si es uno, saltar a esperar que pase a 0.
; Saltar a leer nuevo valor.
; Salir al leer los 16 valores del puerto.

El camino ms adecuado para comprender como se lleva a cabo un proceso de


ensamble de un programa, es realizndolo manualmente. El procedimiento lgico
pareciera ser realizar un barrido del programa en un paso y traducirlo de acuerdo con
la sintaxis del lenguaje ensamblador. Para esto se asigna una direccin de memoria al
cdigo de operacin de la primera instruccin, la cual es el origen del programa, y se
incrementa de acuerdo al nmero de bytes que tenga cada instruccin. Se elije la direccin 0000H como direccin de inicio del programa anterior. Cada etiqueta que se
encuentre debe registrarse en una tabla de smbolos, asignndole el valor del primer
byte de la instruccin que est en la lnea donde se halla la etiqueta.
Lnea
1
2
3
4
5
.
.
.

Direccin
0000H
0003H
0005H
0006H
0009H
.
.
.

Mnemnico
LXI H,1000H
MVI B,17
LAZO: DCR B
JZ SALIR
IN 02H
.
.
.

Cdigo Objeto
210010
0611
05
CA????
DB02
.
.
.

TABLA DE SMBOLOS
LAZO
SALIR

0005
????

Fig.7.18 Ensamblaje parcial del programa del ejemplo 7.6 usando un solo paso.

Longitud
Bytes
3
2
1
3
2
.
.
.

335

Desarrollo y Simulacin de Programas

Como se observa en la figura 7.18, no existe problema alguno para ensamblar


las primeras 3 lneas del programa.
Lnea 1:

LXI H,1000H

Inicio del programa, direccin 0000H. El cdigo objeto generado corresponde


al cdigo de operacin de la instruccin (21H) y a la direccin a almacenarse en el
registro par HL (1000). Las direcciones siempre se almacenan ubicando el byte de
menor orden en una posicin de memoria y el byte de mayor orden en la siguiente. La
instruccin en la lnea 1 ocupar 3 bytes de la memoria a partir de la posicin 1000H.
Lnea 2:

MVI B,17H

El contador de posiciones se ha incrementado en 3 bytes. El cdigo de operacin de la instruccin (06H) se almacena en la posicin 0003H y el dato a mover al
registro B (11H=1710) ocupar la posicin siguiente. La instruccin requiere 2 bytes
para su almacenamiento.
Lnea 3:

LAZO: DCR B

(LC) = 0005H

((LC)+2)

Cdigo de operacin = 05

1 byte

En esta lnea se encuentra una etiqueta, y debe asignrsele un valor igual a la


direccin del primer byte de la instruccin. Esto es:
LAZO = 0005H

Cuando se avance en el anlisis de las lneas del programa, cualquier referencia a SALTO, corresponde a la direccin de memoria 0005H. Este valor queda registrado en la tabla de smbolos.
Lnea 4:

JZ SALIR

(LC) = 0006H

Cdigo de operacin = CA????

3 bytes

En esta lnea existe una instruccin de salto condicional (Salto si Z=1) a una
referencia denominada SALIR. Al tratar de ensamblar la lnea 4, nos encontramos
que no conocemos el valor del smbolo SALIR, al no estar incluido en la tabla de
smbolos debido a que aparece posteriormente al final del programa. En consecuencia, no es posible ensamblar la lnea 4 por completo. Una situacin similar ocurrir
cuando se pretendan ensamblar las lneas 8, 10, 12, y 14. Las etiquetas INVAL y VALI son indefinidas. Es obvio que con este procedimiento, al llegar al final del programa, quedaran algunas lneas ensambladas en forma incompleta por lo cual se requerir realizar un segundo paso por el programa para completar el proceso. Al final de
este segundo paso el programa quedar completamente ensamblado. La mayora de
los ensambladores son de dos pasos pero no es el descrito, el camino que se usa para

336

Desarrollo y Simulacin de Programas

realizar el anlisis de las lneas del programa. Un procedimiento ms eficiente es el


siguiente:
Paso I:
Se localizan las direcciones de memoria que corresponden al cdigo de operacin de cada
instruccin y se ubican en la columna de direcciones, crendose una tabla que contiene todas las etiquetas que denoten posiciones de memoria.
Paso II:
En el segundo paso se examina cada instruccin nuevamente, esta vez se traduce cada cdigo de operacin al valor hexadecimal que representa la operacin en lenguaje de mquina,
y el mnemnico se sustituye por el cdigo de mquina equivalente. Esta informacin se coloca en la columna de cdigo objeto. Si una instruccin es de dos bytes o ms, y el operando est definido en forma simblica, se examina la tabla de smbolos creada en el primer
paso para asignar el cdigo hexadecimal correspondiente al operando simblico.

En las figuras 7.19 y 7.20 se muestran los resultados de realizar cada paso
con el programa ejemplo.
Lnea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
29
20
21
22
23
24
25

Direccin
0000
0003
0005
LAZO:
0006
0009
BIT01:
000B
000D
0010
0012
0014
0017
0019
001C
001E
0021
0023
0026
VALI:
0027
0028
002B
INVAL:
002D
BIT10:
002F
0031
0034
0037
SALIR:

Nemnico
LXI H,1000H
MVI B,17
DCR B
JZ SALIR
IN 02H
ANI 01
JZ BIT01
IN 00H
CPI 0
JM INVAL
CPI 9+1
JM VALI
CPI A
JM INVAL
CPI F+1
JP INV
MOV M,A
INX H
JMP BIT10
OUT 01H
IN 02
ANI 01
JNZ BIT10
JMP LAZO
HLT

TABLA DE SIMBOLOS:
LAZO

0005

BIT01

0009

VALI

0026

INVAL 002B

BIT10

002D

SALIR

0037

Fig.7.19 Resultado del proceso de ensamblaje a mano. Paso I.

Cdigo Objeto

Longitud (Bytes)
3
2
1
3
2
2
3
2
2
3
2
3
2
3
2
3
1
1
3
2
2
2
3
3
1

337

Desarrollo y Simulacin de Programas

Lnea
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
29
20
21
22
23
24
25

Direccin
0000
0003
0005
LAZO:
0006
0009
BIT01:
000B
000D
0010
0012
0014
0017
0019
001C
001E
0021
0023
0026
VALI:
0027
0028
002B
INVAL:
002D
BIT10:
002F
0031
0034
0037
SALIR:

Nemnico
LXI H,1000H
MVI B,17
DCR B
JZ SALIR
IN 02H
ANI 01
JZ BIT01
IN 00H
CPI 0
JM INVAL
CPI 9+1
JM VALI
CPI A
JM INVAL
CPI F+1
JP INV
MOV M,A
INX H
JMP BIT10
OUT 01H
IN 02
ANI 01
JNZ BIT10
JMP LAZO
HLT

Cdigo Objeto
210010
0611
05
CA3700
DB02
E601
CA0900
DB00
FE30
FA2B00
FE3A
FA2600
FE41
FA2B00
FE47
F22B00
77
23
C32D00
D301
DB02
E601
C22D00
C30500
76

TABLA DE SIMBOLOS:
LAZO

0005

BIT01

0009

VALI

0026

INVAL 002B

BIT10

002D

SALIR

0037

Fig.7.20 Resultado del proceso de ensamblaje a mano. Paso II.

Longitud (Bytes)
3
2
1
3
2
2
3
2
2
3
2
3
2
3
2
3
1
1
3
2
2
2
3
3
1

338

Desarrollo y Simulacin de Programas

La figura 7.21 muestra el resultado de ensamblar el programa del ejemplo 7.6,


usando el programa ensamblador ASM80 de INTEL, ejecutable en ambiente MSDOS.
ASM80 EJEM76.SRC
ISIS-II 8080/8085 MACRO ASSEMBLER, V4.1
LOC
0000
0003
0005
0006
0009
000B
000D
0010
0012
0014
0017
0019
001C
001E
0021
0023
0026
0027
0028
002B
002D
002F
0031
0034
0037

OBJ
210010
0611
05
CA3700
DB02
E601
CA0900
DB00
FE30
FA2B00
FE3A
FA2600
FE41
FA2B00
FE47
F22B00
77
23
C32D00
D301
DB02
E601
C22D00
C30500
76

MODULE PAGE 1

LINE
SOURCE STATEMENT
1
LXI
H,1000H
2
MVI
B,17
3 LAZO: DCR B
4
JZ
SALIR
5 BIT01: IN
02H
6
ANI
01H
7
JZ
BIT01
8
IN
00H
9
CPI
'0'
10
JM
INVAL
11
CPI
'9'+1
12
JM
VALI
13
CPI
'A'
14
JM
INVAL
15
CPI
'F'+1
16
JP
INVAL
17 VALI: MOV M,A
18
INX
H
19
JMP
BIT10
20 INVAL: OUT
01H
21 BIT10: IN
02H
22
ANI
01H
23
JNZ
BIT10
24
JMP
LAZO
25 SALIR: HLT
END

PUBLIC SYMBOLS
EXTERNAL SYMBOLS
USER SYMBOLS
BIT01 A 0009 BIT10 A 002D INVAL A 002B LAZO A 0005 SALIR A 0037 VALI A 0026
ASSEMBLY COMPLETE, NO ERRORS
Fig. 7.21. Salida del macro ensamblador ASM80/85

339

Desarrollo y Simulacin de Programas

En la figura 7.22 se presenta la salida del ensamblador ASM85, incorporado


en el programa SID85. Este ofrece la mayora de las funciones realizadas por ensambladores comerciales. Observe la generacin automtica de una lista de referencia
cruzada.
1 0000 21 00 10
2 0003 06 11
3 0005 05
4 0006 CA 39 00
5 0009 DB 02
6 000B E6 01
7 000D CA 09 00
8 0010 DB 00
9 0012 FE 30
10 0014 FA 2C 00
11 0017 FE 40
12 0019 FA 27 00
13 001C FE 41
14 001E FA 2C 00
15 0021 FE 47
16 0023 F2 2C 00
17 0026 77
18 0027 23
19 0028 C3 2F 00
20 002B D3 01
21 002D DB 02
22 002F E6 01
23 0031 C2 2F 00
24 0034C3 05 00
25 0037 76

LAZO:
BIT01:

VALI:
INVAL:
BIT10:

SALIR:

Etiquetas Definidas
===================
LAZO
0005
SALIR
INVAL
002B
VALI

LXI
MVI
DCR
JZ
IN
ANI
JZ
IN
CPI
JM
CPI
JM
CPI
JM
CPI
JP
MOV
INX
JMP
OUT
IN
ANI
JNZ
JMP
HLT

0037
0026

H,1000H
B,17
B
SALIR
02H
01H
BIT01
00H
30H
INVAL
3AH
VALI
41H
INVAL
47H
INVAL
M,A
H
BIT10
01H
02H
01H
BIT10
LAZO

BIT01
BIT10

0009
002D

Referencia Cruzada
==================
LAZO #3 24
SALIR 4 #25
BIT01 #5 7
INVAL 10 14 16 #20
VALI 12 #17
Fig.7.22. Salida del ensamblador cruzado del programa SID85.

El procedimiento de ensamblaje manual realizado, no es ms que un ejercicio


didctico. Para el desarrollo de los programas asignados en el curso se debe usar un
programa ensamblador comercial. Todos los programas simuladores suministrados a
los estudiantes tienen un ensamblador el cual compila y carga en memoria el archivo
binario. Tambin la herramienta MICROIDE tiene un ensamblador (ASM85). Estos

340

Desarrollo y Simulacin de Programas

ensambladores en general son de desempeo limitado y no permiten el uso de macros


ni generan cdigo relocalizable. Entre los programas de trabajo del curso se encuentra
el paquete ISISII de INTEL, el cual incluye el ensamblador ASM80 y el enlazador
LINK80. Otro recurso al alcance del estudiante de sistemas de microprocesadores es
el software distribuido por la empresa AVOCET y dirigido al desarrollo de programas
para el 8085A. Este conjunto de programas incluye un ensamblador (AVMAC85) con
capacidad para procesar macros, un enlazador/relocalizador (AVLINK) y otros programas asociados.

Directivas generales del ensamblador


El ensamblador reconoce un grupo de rdenes de ensamblaje que no pertenecen al conjunto de instrucciones del procesador y que no generan cdigo de mquina.
Estas se denominan pseudos-instrucciones y pueden usarse para controlar el proceso
de ensamblaje, reservar reas de memoria, almacenar datos y resultados, ignorar o
ensamblar lneas de cdigo, definir variables de trabajo y fijar las direcciones de inicio y final del cdigo generado por el ensamblador. Las directivas reconocidas por el
ensamblador son:
Tabla. 7.7 Directivas de control de ensamblaje.
ORG
Define la direccin de inicio del programa o de un rea de datos.
END
Seala el final de un programa en lenguaje ensamblador.
EQU
Define constantes numricas.
SET
Asigna un valor numrico a un smbolo.
IF
Inicio de ensamblaje condicional.
ENDIF
Fin de ensamblaje condicional.
DB
Define bytes de datos.
DW
Define palabra de datos.
DS
Reserva reas de memoria para almacenamiento de datos.

Las directivas se ubican en el campo de operacin, pudiendo ser precedidas


por una etiqueta y/o seguidas por un comentario. Todas las pseudos-operaciones requieren un argumento, exceptuando a END y ENDIF.
ORG

Fija el inicio de las direcciones absolutas del programa o rea de datos, al poner el contador de posiciones LC al valor especificado por el operando expresin.
Tiene la forma:
etiqueta:

ORG

expresin

;comentario

Los campos de etiqueta y comentario son opcionales. Expresin es un valor


de 16 bits, o una expresin que al ser evaluada produce un valor de 16 bits (una direccin). Un programa puede tener varias declaraciones ORG si se requiere ensamblar secciones del programa en direcciones diferentes. Si se usa una expresin en lu-

341

Desarrollo y Simulacin de Programas

gar de un valor absoluto, en el campo de expresin, la etiqueta usada debe ser definida en lneas anteriores. Si no existe una directiva ORG antes de la primera instruccin
del programa, ste se ensamblar con inicio en la direccin 0000H.
END

Seala el punto de culminacin del programa y que el proceso de ensamblaje


debe detenerse. Slo debe existir una directiva END y debe estar al final del texto del
programa.
El formato de esta directiva es:
etiqueta:

END

Un ejemplo del uso conjunto de las instrucciones ORG y END es el siguiente:


ORG
.
.
.
.
ORG
.
.
.
END

0500H

; inicio del programa

1000H

; rea de datos

EQU

Sirve para facilitar la lectura del programa. Esta directiva asigna un valor numrico a un nombre. Tiene la forma:
nombre:

expresin

EQU

El valor de expresin es asignado al nombre especificado en el campo de etiqueta. Por ejemplo, si el valor de inicio de un rea de datos es 2000H. La asignacin:
DIRDAT

EQU

2000H

permite a cualquier instruccin hacer referencia al comienzo del bloque de datos,


usando el nombre DIRDAT. En consecuencia las instrucciones siguientes, son equivalentes:
LXI H, 2000H

LXI H, DIRDAT

342

Desarrollo y Simulacin de Programas

El valor asignado a un smbolo por una directiva EQU no puede ser cambiado
por otra declaracin EQU. Algunos ensambladores no requieren los dos puntos al
final de la etiqueta.
SET

Es idntica a la directiva EQU, exceptuando el hecho que una asignacin SET


posterior puede cambiar el valor de nombre. De modo que el valor de un identificador fijado por una asignacin EQU es vlido para todo el programa, mientras que el
definido por un comando SET es vlido hasta la prxima directiva SET que contenga
el nombre.
IF y ENDIF

Permiten incluir o excluir partes de un programa durante el proceso de ensamblaje. El formato de esta directiva es:
etiqueta:

IF

expresin
instruccin 1
instruccin 2
.
.
.
instruccin n

ELSE
.
.
.
ENDIF

El programa ensamblador evala la expresin que acompaa a la declaracin


IF, y si el bit 0 del resultado es un valor lgico uno (evaluado como 0FFFFH), las
instrucciones entre la directiva IF y el prximo ELSE o ENDIF son ensambladas, en
este caso las instrucciones de la 1 a la n. Si el resultado es cero (0H) las n instrucciones son ignoradas.
Toda declaracin IF debe estar asociada a un ENDIF. La directiva ELSE es
opcional y solo una puede aparecer en un bloque IF-ENDIF. Si existe ELSE, cuando
la prueba de IF resulte cero las declaraciones entre ELSE y ENDIF se ensamblaran; si
el bit 0 es uno lgico, sern ignoradas.
Los bloques de cdigo acotados por directivas IF-ENDIF se usan con frecuencia en la fase de prueba y depuracin de programas. Suponga que se tiene un programa que contiene un lazo cuya ejecucin es controlada por un valor desconocido cargado desde un puerto de entrada en la posicin de memoria MEM. Se desea saber

343

Desarrollo y Simulacin de Programas

cuantas veces se repite en lazo en algn momento. La rutina mostrada a continuacin


puede usarse con ese propsito.
SI
NO
PRUEBA
MEM

LAZO:

EQU
EQU
EQU
EQU

-1
0
SI
2000H

LHLD MEM
LXI B,0
DCX H
IF PRUEBA
INX B
ENDIF
JNZ LAZO
END

Al final de la ejecucin del programa el registro par BC contendr el nmero


de veces que el lazo se repite. El cdigo objeto resultado de ensamblar la rutina es el
siguiente,
ASM80 IF.SRC
ISIS-II 8080/8085 MACRO ASSEMBLER, V4.1
LOC OBJ
FFFF
0000
FFFF
2000
0000 2A0020
0003 010000
0006 2B
0007 03
0008 C20600

MODULE PAGE 1

LINE
SOURCE STATEMENT
1 SI
EQU -1
2 NO
EQU 0
3 PRUEBA
EQU SI
4 MEM
EQU 2000H
5
6
LHLD MEM
7
LXI B,0
8 LAZO:
DCX H
9
IF PRUEBA
10
INX B
11
ENDIF
12
JNZ LAZO
13
END

PUBLIC SYMBOLS
EXTERNAL SYMBOLS
USER SYMBOLS
LAZO A 0006 MEM A 2000 NO A 0000 PRUEBA A FFFF SI A FFFF
ASSEMBLY COMPLETE, NO ERRORS

Observe que la directiva EQU ubicada en la lnea 3 se usa para asignar al smbolo PRUEBA el valor 0FFFFH. La evaluacin del bit 0 de prueba produce uno lgico, ensamblndose la instruccin INX B, dentro del bloque IF-ENDIF. Una vez que el
programa ha sido depurado simplemente se le fija el valor NO al identificador

344

Desarrollo y Simulacin de Programas

PRUEBA. Cuando se ensambla de nuevo la rutina, no se ensambla el cdigo responsable de registrar el nmero de veces que se ejecuta el lazo. Esto, debido a que el valor de PRUEBA es 0 (NO).
ASM80 IF.SRC
ISIS-II 8080/8085 MACRO ASSEMBLER, V4.1
LOC OBJ
FFFF
0000
0000
2000
0000 2A0020
0003 010000
0006 2B

0007 C20600

MODULE PAGE 1

LINE
SOURCE STATEMENT
1 SI
EQU -1
2 NO
EQU 0
3 PRUEBA
EQU NO
4 MEM
EQU 2000H
5
6
LHLD MEM
7
LXI B,0
8 LAZO:
DCX H
9
IF PRUEBA
10
INX B
11
ENDIF
12
JNZ LAZO
13
END

PUBLIC SYMBOL
EXTERNAL SYMBOLS
USER SYMBOLS
LAZO A 0006 MEM
A FFFF

A 2000

NO

A 0000

PRUEBA A 0000

SI

ASSEMBLY COMPLETE, NO ERRORS

La utilidad del uso del ensamblaje condicional en la fase de desarrollo del


software de una aplicacin se hace patente cuando se disea una tarjeta de control con
la opcin de seleccionar, entre varias opciones, los sensores de entrada y los actuadores de salida. En este caso el programa de aplicacin, incluyendo el bloque de cdigo
del programa que realiza el algoritmo de control, es el mismo para cualquiera de las
posibilidades. La diferencia estar en el cdigo de los sensores y actuadores. Si existen 3 tipos de sensores y 4 de actuadores, ser necesario escribir 12 programas para
cubrir todas las opciones. El uso bloques IF-ENDIF permite la escritura de un solo
programa, con todas las rutinas de entrada y salida sujetas a ensamblaje condicional.
Cuando deba programarse una tarjeta particular se selecciona las rutinas correspondientes al sensor y al actuador elegido por el usuario.
DB

La directiva DB (Definicin de byte) carga una serie de posiciones consecutivas de memoria con valores de ocho bits. Se escribe como:
etiqueta

DB

lista de expresiones o cadenas de caracteres

345

Desarrollo y Simulacin de Programas

El campo etiqueta es opcional, si existe se le asigna el valor del contador de


posiciones, y en esa direccin se almacena el primer byte especificado por la directiva
DB. Los smbolos en expresin deben definirse previamente. La lista puede incluir
hasta 8 elementos separados por comas. Para facilitar la lectura de la lista pueden
usarse varias declaraciones DB. Algunos ejemplos se muestran a continuacin,
Cdigo objeto
01C508

LISTA:

DB

1, 0C5H, 1000B

LISTA:

DB
DB
DB

1
0C5H
1000B

01C508

MEM:

DB

R.A.M

522E412E4D

MULT:

DB

2*8,4*8

1020

Observe en la figura 7.23 la forma en la cual se almacena la cadena R.A.M


en memoria:
Direccin

Contenido

MEM

01010010

52

MEM+1

00101110

2E

MEM+2

01000001

41

MEM+3

00101110

2E

MEM+4

01001101

4D

Fig. 7.23 La cadena R.A.M ocupa 5 bytes consecutivos de la memoria a partir de la direccin MEM.
DW

La directiva definicin de palabra es similar a DB, con la nica diferencia que


almacena valores de 16 bits de la lista de expresiones como direcciones de memoria.
etiqueta

DW

lista de expresines o cadenas de caracteres

Si la evaluacin de una expresin resulta en un nmero de ocho bits, este resultado corresponde al byte de bajo del resultado, mientras que el byte alto ser 00H.
Algunos ejemplos del uso correcto de la directiva de definicin de palabra, se muestran a continuacin. El smbolo POS1 es definido en un programa como 2064H:

346

Desarrollo y Simulacin de Programas

Cdigo objeto
6420

DIR:

DW

POS1

TEMP:

DW

0DH

0D00

ABCD:

DW

AB,C

42414300

Si el contador de posiciones es igual a 0300H cuando se alcanza el smbolo


DIR, los datos se almacenarn en la unidad de memoria del sistema en la forma que
se muestra en la figura 7.24.
Direccin
DIR:

TEMP:

ABC:

Contenido

0300H

01100100

64H

301H

00100000

20H

0302H

00001101

0DH

0303H

00101110

00H

0304H

01000010

42H

0305H

01000001

41H

0306H

01000011

43H

0307H

00000000

00H

Fig.7.24. Forma de almacenamiento de los datos y direcciones de las etiquetas.

DS

Es una directiva usada para reservar posiciones de memoria para almacenamiento de datos generados por el programa. La sintaxis de DS es:
etiqueta

expresin

DS

El ensamblador evala la expresin y reserva el nmero de bytes de memoria


especificado por el resultado. Los smbolos en expresin deben definirse con antelacin a la declaracin DS. La directiva DS no genera datos, el contenido de las posiciones de memoria reservadas es impredecible al inicio de la ejecucin del programa.
DS reserva la memoria incrementado el LC al valor definido por expresin.
RESULT:

DS

20

;Reserva 20 bytes a partir de RESULT.

347

Desarrollo y Simulacin de Programas

Los comandos anteriores son algunas directivas generales del ensamblador.


Las usadas en relocalizacin de cdigo se explican ms adelante y las directivas de
control no se discuten en este trabajo. Para demostrar el uso de algunas de las directivas cuya uncin se describi, considere el ejemplo 7.7.
Ejemplo 7.7
Escribir una rutina con el propsito de encontrar los valores mximo y mnimo
de una tabla de 16 nmeros almacenada en la memoria a partir de la direccin 0300H.
El programa debe cargarse en la direccin 0200H.
NUM
MENOR:
LAZO1:

MENOR:

LAZO2:

MAYOR:

ORG
EQU

0200H
010H

; Inicio del programa.


; Nmero de elementos de la tabla.

LXI
MVI
MOV
INX
DCR
JZ

H,TABLA
B,NUM
A,M
H
B
MENOR

CMP

JC

LAZO1

MOV
JMP
STA
LXI
MOV
MVI
INX
DCR
JZ
CMP

A,M
LAZO1
MIN
H,TABLA
A,M
B,NUM
H
B
MAYOR
M

JNC

LAZO2

MOV
JMP
STA
HLT

A,M
LAZO2
MAX

;Cargar direccin de inicio de la tabla HL.


;Cargar contador de nmeros.
;Mover al acumulador el primer nmero.
;Apuntar al prximo elemento en la tabla.
;Decrementar contador de elementos de la lista.
;Si (B)=0, el mnimo est en el acumulador.
;Almacenarlo en memoria y buscar el mayor.
;Comparar un valor con el posible mnimo
;cargado en el acumulador.
;Si elemento es mayor, comparar con el
;prximo.
;Si es menor, es el nuevo mnimo. Cargar en A.
;Comparar el nuevo mnimo con el siguiente valor.
;Almacenar el valor mnimo de la tabla.
;Al inicio de la tabla en bsqueda del mayor.
;Primer valor al acumulador.
;Inicializar contador de elementos.
;Apuntar a prximo valor.
;Decrementar contador.
;Si (B)=0, almacenar mximo en memoria y salir.
;Comparar elemento de la tabla con el potencial
;mximo depositado en el acumulador.
;Si valor en la tabla es menor, comparar con el
;siguiente.
;Si es mayor, sustituir el anterior
;Comparar nuevo mximo con prximo en la tabla.
;Almacenar en memoria el mximo.
;Parar.

ORG 0300H
MIN:
MAX:
TABLA:

;Inicio del rea de datos

DS 1
; Posicin para almacenar el mnimo.
DS 1
; Posicin para almacenar el mximo.
DB 64H,45,23Q,60H,90H,3H,24H,15H
DB 20H,15,34H,80H,50H,2H,101011B,30
END

348

Desarrollo y Simulacin de Programas

Dos declaraciones ORG fijan los inicios de las reas de programas y datos. La
tabla de valores se introduce usando directivas DB. Las direcciones para depositar los
valores mximo y mnimo se reservan usando la directiva DS. Observe que los datos
de la tabla se representan en los sistemas numricos: hexadecimal, octal, binario y
decimal.
Primero se halla el valor mnimo y luego el mximo. El proceso se inicia
asumiendo que el primer elemento es el mnimo. Este se compara con los datos siguientes y mientras sea menor permanecer como mnimo. Cuando un elemento sea
mayor que el prximo, ste ltimo pasa a ser el nuevo mnimo y se procede a compararlo con el que sigue. Cuando el registro B contador de elementos llegue a cero, el
mnimo estar en el acumulador. El procedimiento para encontrar el mayor es similar
como se deduce del listado del programa.
La salida del ensamblador para el archivo del ejemplo se muestra a continuacin.
ASM80 EJEM2.SRC
ISIS-II 8080/8085A MACRO ASSEMBLER, V4.1
LOC
0200
0010
0200
0203
0205
0206
0207
0208
020B
020C
020F
0210
0213
0216
0219
021A
021C
021D
021E
0221
0222
0225
0226
0229
022C
0300
0300

OBJ

210203
0610
7E
23
05
CA1302
BE
DA0602
7E
C30602
320003
210203
7E
0610
23
05
CA2902
BE
D21C02
7E
C31C02
320103
76

MODULE PAGE 1

LINE
SOURCE STATEMENT
1
ORG 0200H
2
NUM
EQU 010H
3
4
LXI H,TABLA
5
MVI B,NUM
6
MOV A,M
7
LAZO1: INX H
8
DCR B
9
JZ MENOR
10
CMP M
11
JC LAZO1
12
MOV A,M
13
JMP LAZO1
14
MENOR: STA MIN
15
LXI H,TABLA
16
MOV A,M
17
MVI B,NUM
18
LAZO2: INX H
19
DCR B
20
JZ MAYOR
21
CMP M
22
JNC LAZO2
23
MOV A,M
24
JMP LAZO2
25
MAYOR: STA MAX
26
HLT
27
28
ORG 0300H
29
30 MIN:
DS 1

349

Desarrollo y Simulacin de Programas

0301
0302
0303
0304
0305
0306
0307
0308
0309
030A
030B
030C
030D
030E
030F
0310
0311

64
2D
13
60
90
03
24
15
20
0F
34
80
50
02
2B
1E
35
36

31 MAX:
32 TABLA:

DS 1
DB 64H,45,23Q,60H,90H,3H,24H,15H

33
34

DB 20H,15,34H,80H,50H,2H,101011B,30

END

PUBLIC SYMBOLS
EXTERNAL SYMBOLS
ISIS-II 8080/8085A MACRO ASSEMBLER, V4.1

MODULE PAGE 2

USER SYMBOLS
LAZO1 A 0206 LAZO2 A 021C MAX A 0301 MENOR A 0213
MIN
A 0300 NUM A 0010
MAYOR A 0229 TABLA A 0302
ASSEMBLY COMPLETE, NO ERRORS

Para cargar los elementos de la tabla se usan dos directivas DB. Observe que
el ensamblador carga los datos a partir de la direccin 0300H seleccionada por la segunda directiva ORG en la lnea 28.

Directivas generales para relocalizacin de cdigo


Todo lo expuesto en pginas anteriores sobre la sintaxis del lenguaje ensamblador para el 8085A es vlido para un gran nmero de las versiones disponibles del
traductor y ofrecidas por segundas fuentes. Esto significa que un programa escrito
para ser traducido por el ASM80 de INTEL puede ser usado como entrada de otro en-

Desarrollo y Simulacin de Programas

350

samblador realizando pequeas modificaciones al cdigo fuente. Por ejemplo, algunos programas ensambladores en lugar de usar la nomenclatura: 02BH para representar el nmero 4310 en hexadecimal, utilizan: 0x02B, H02B, o simplemente 02B. Como otro ejemplo, los smbolos %IF y %ENDIF sustituyen a las directivas IF y ENDIF.
A diferencia de lo establecido en el prrafo anterior para la sintaxis del traductor, el nmero y tipo de directivas generales usadas para controlar la generacin de
cdigo relocalizable y el posterior enlazado de los mdulos objetos, si presenta diferencias representativas de una versin de ensamblador a otra. En esta seccin se discuten las directivas para relocalizacin del Macroensamblador AVMAC85, resaltando
que todo lo expuesto en pginas anteriores sobre el lenguaje ensamblador es vlido
para el AVMAC85. Para ilustrar el uso de este traductor, considere que prueba.asm es
el nombre de un archivo fuente. La sintaxis del comando necesario para ensamblar el
programa fuente, es la siguiente:
C:\avmac85 prueba

Como resultado se obtienen dos archivos:


prueba.obj
prueba.prn.

archivo objeto
archivo de listado

Aunque el programa fuente conste de un mdulo de entrada nico y slo contenga segmentos absolutos, el archivo objeto puede ser procesado por AVLINK por
medio del comando:
C:\avlink nombre=prueba.obj

Como salida se obtiene un archivo en formato HEX INTEL llamado: nombre.hex.


El programa enlazador/relocalizador denominado AVLINK, puede procesar varios mdulos con segmentos reubicables y crear un archivo nico ejecutable, a partir
de los segmentos de cada archivo fuente. La sintaxis del enlazador se detalla en la
figura 7.25. Aunque parece engorroso especificar por lnea de comando, las rdenes
necesarias para configurar y ejecutar el enlazador, ms adelante se explicar como es
posible automatizar el proceso de ensamblar y enlazar los archivos de un programa
fuente.
El AVMAC85 puede distinguir dos tipos de directivas para relocalizacin de
cdigo: aquellas usadas para definir y seleccionar los segmentos del programa (DEFSEG y SEG) y las usadas para dirigir el enlazado del cdigo objeto relocalizable (PUBLIC y EXTERN).
En la tabla 7.8 se especifican las directivas de ensamblador usadas para relocalizacin del cdigo.

351

Desarrollo y Simulacin de Programas

Fig.7.25. Pantalla de ayuda del programa AVLINK.

Tabla. 7.8. Directivas para relocalizacin de cdigo.


DEFSEG
Asigna el nombre de un segmento.
SEG
Activa el segmento.
PUBLIC
Define un smbolo pblico.
EXTERN
Define un smbolo externo.

El cdigo es ensamblado y enlazado para ejecutarse en direcciones lgicas. El


hecho que las direcciones del P sean cantidades de 16 bits limita el tamao de los
segmentos a un valor menor o igual 64K. Los distintos segmentos usados por el programador en una aplicacin determinada deben definirse al inicio del programa. La
seleccin de un segmento previamente definido causa que toda instruccin o dato
subsiguiente sea ensamblado en esa rea de memoria. Los segmentos se usan para
definir la posicin en memoria del cdigo, datos constantes y datos que pueden ser
modificados.
A continuacin se presentan las directivas usadas para la definicin y activacin de segmentos.
DEFSEG

La sintaxis de esta directiva es,


DEFSEG

nombre

, atributos

Define un segmento de usuario denominado nombre. Si no se especifican atributos, el segmento es relocalizable y de clase CODE. El punto de carga del nuevo

Desarrollo y Simulacin de Programas

352

segmento es puesto a cero. Los segmentos son por defecto relocalizables y concatenables. Esto significa que tal seccin de cdigo o datos se concatena (uno se inicia
donde termina el otro) con otros segmentos del mismo nombre, incluso si residen en
mdulos distintos.
DEFSEG define el segmento pero no lo activa. Aunque los atributos son declarados en el archivo fuente esta informacin no es usada por el ensamblador. En
realidad la definicin de los atributos de un segmento es prorrogada hasta el momento
del enlazado. Los atributos permitidos son los siguientes y debern estar separados
por comas,
START= expresin
Asigna la direccin lgica de inicio del segmento. Si ste es absoluto, acta como una directiva ORG. En caso contrario, START indica al enlazador la direccin de origen del segmento
relocalizable. Este atributo se usa para aquellos segmentos reubicables que solo pueden ser
cargados en direcciones determinadas. Puede ser usado para indicar que el cdigo debe cargarse en EPROM o EEPROM y que los resultados deben almacenarse en la zona de RWM.
La informacin de START es usada por el enlazador/relocalizador y puede ser modificada en
el momento del enlace, como se observa en las opciones del AVLINK en la figura 7.28.
ALIGN= valor
Fija el alineamiento del segmento. Cuando el segmento es enlazado por AVLINK, el atributo
START= es ajustado para que se inicie en valor, donde ste debe ser una potencia de dos. Si
valor no es potencia de dos, el alineamiento ocurre en la direccin representada por la potencia de dos inmediatamente inferior a valor.
CLASS= clase
Es opcional y asigna el nombre de la clase del segmento. Si el atributo CLASS es omitido, la
clase CODE se fija por defecto.
Las clases vlidas son:
CODE
DATA
IOSPACE

Ubica al segmento en la clase CODE. Este es un segmento relocalizable de memoria.


Coloca al segmento en la clase DATA. Este es un segmento relocalizable de memoria
Pone al segmento en la clase IOSPACE. Este es un segmento relocalizable del espacio
de entrada/salida del procesador.

Debido a que los chips microcontroladores tienen una arquitectura con rea determinadas de
memoria interna, las clases son vitales para especificar la clase de espacio de memoria donde
residir el segmento. En el caso del AVMAC85, ste no parece distinguir entre las clases
CODE y DATA, en el sentido que no agrupa segmentos de la misma clase. El ensamblador si
diferencia los segmentos de memoria 'M' (CODE y DATA) de aquellos de entrada/salida 'I'
(IOSPACE). Esta discriminacin hace posible definir segmentos M e I en el mismo rango de
direcciones, debido a que corresponden a posiciones lgicas pertenecientes a espacios distintos. Aunque en la figura 7.28 se indica que existen opciones de AVLINK para fijar la direccin de inicio y final de los segmentos pertenecientes a una clase, las pruebas realizadas no
tuvieron xito.
ABSOLUTE
Establece que el segmento es absoluto. Asignar este atributo hace posible el uso de ORG direccin en el cuerpo del segmento, recuerde que si no declara atributos al definir un segmento, ste ser relocalizable por defecto y el uso de la directiva ORG causar la emisin de un

Desarrollo y Simulacin de Programas

353

mensaje de error. El comando ORG direccin puede utilizarse en un segmento relocalizable


pero nicamente si ste tiene el atributo START= y pertenece por entero a un mdulo.
OVERLAID
Este atributo slo puede ser usado para segmentos del mismo nombre en ms de un mdulo.
Si el segmento tiene START=, la condicin OVERLAID permite el uso de la directiva general ORG direccin, aunque el segmento resida en varios mdulos. Adems el atributo indica
que secciones del programa con el mismo nombre pueden ocupar direcciones que se solapan
en el espacio de direcciones lgicas aunque permanecen en direcciones fsicas diferentes. Esto
permite el uso de bancos de memoria conmutados durante la ejecucin.
BLOCK= expresin
Fija el valor mximo permitido para el segmento. Si esta restriccin es violada, AVLINK genera un mensaje de error.
Ejemplos:
DEFSEG PROG, CLASS=CODE, START=0
DEFSEG LAB, BLOCK=8000h, CLASS=CODE
DEFSEG ABS, ABSOLUTE, START=40H
DEFSEG SOLP, OVERLAID
DEFSEG DATO, ALIGN=80H

SEG

Activa el segmento llamado nombre definido previamente con la directiva


DEFSEG. Su sintaxis tiene la forma,
nombre

SEG

Toda instruccin o dato declarado a continuacin se ensamblar en este segmento, hasta que el bloque sea desactivado por otra directiva SEG que seleccione un
nuevo segmento. Cada clase tiene un segmento predefinido por el ensamblador, los
cuales son de uso opcional por el programador. La directiva SEG puede activar a los
bloques predefinidos con nombres: CODE, DATA e IOSPACE sin requerir el uso de
DEFSEG para estos segmentos.
Ejemplos:
DEFSEG PROG, CLASS=CODE, START=0
SEG PROG
lxi sp,stack
xra a
.
.
.

Desarrollo y Simulacin de Programas

354

SEG CODE
lxi sp,stack
xra a
.
.
.

DEFSEG DATOS, CLASS=DATA, START=2000H


SEG DATOS
DB 1,2,3,4,5,6,7,8
SEG DATA
DB 1,2,3,4,5,6,7,8
DEFSEG ABS, ABSOLUTE
SEG ABS
ORG 300H
DB
'UDO 2003'
ORG 500H
DB
'Prueba final'

Observe que los segmentos CODE y DATA no fueron definidos antes de su


seleccin. El segmente CODE es ensamblado a partir de la direccin cero y una vez
terminado se ensambla el bloque DATA. En el momento del enlace puede definirse la
direccin de carga de un segmento usando la opcin AVLINK: -PS (nombre_seg, dir).
Las directivas restantes: PUBLIC y EXTERN, usadas en relocalizacin de cdigo, hacen posible la comunicacin entre los diferentes mdulos que componen un
programa. Una rutina contenida en un mdulo determinado puede ser llamada desde
otro mdulo y una etiqueta de direcciones o datos puede ser usada por el cdigo localizado en un archivo fuente, aunque sta sea definida en otro.
PUBLIC

Declara que el operando etiqueta tiene un alcance publico. Puede especificarse


ms de una etiqueta, en cuyo caso deben separarse por comas.
PUBLIC

etiqueta

El smbolo etiqueta deber estar definido en el mdulo donde se declara como


pblico y estar disponible para uso de los otros mdulos del programa. Slo puede
existir una directiva PUBLIC para una etiqueta. Un smbolo externo no puede definirse como pblico.
EXTERN

Especifica que el operando etiqueta tiene un alcance externo. Puede especificarse varias etiquetas separadas por comas.
EXTERN

etiqueta

355

Desarrollo y Simulacin de Programas

Hace posible el uso en un mdulo de una etiqueta aunque est definida en


otro mdulo. El smbolo etiqueta deber ser declarado como pblico en el mdulo
donde es definido o en caso contrario AVLINK emitir un mensaje de error.
Si en un mismo archivo fuente o en mdulos diferentes se define una etiqueta
ms de una vez, se produce una indicacin de error por definiciones mltiples de un
mismo identificador. Una solucin a este obstculo es el uso de procedimientos, los
cuales permite el uso de smbolos locales conocidos slo dentro del procedimiento.
Esto significa que una etiqueta local puede ser usada en otra seccin del programa sin
causar error. Un procedimiento es una forma de escribir una subrutina. Las siguientes
directivas definen un procedimiento,
PROC y ENDPROC

El inicio de un procedimiento denominado nombre, lo marca la directiva


PROC.
nombre

; inicio procedimiento nombre

PROC

Considere que los siguientes procedimientos pertenecen a un mismo programa. El uso de la etiqueta data dos veces no causa mensaje de error debido a que toda
identificador cuyo nombre va precedido por (..) slo es conocido entre la directiva
PROC anterior y la directiva ENDPROC posterior. El smbolo data tiene alcance local al ser precedido por dos puntos contiguos.
ylog
..data

PROC
ds 10H
ENDPROC

yln
..data

PROC
ds 10H
ENDPROC

; Primera definicin del identificador: data


; Segunda definicin del identificador: data

El ejemplo siguiente muestra el uso de procedimientos y smbolos locales.


Ejemplo 7.8
Debe escribirse un programa que examine el contenido del acumulador y si:
(A) = 'M'

(HL) (C) (E)

(A) 'M'

(H) (C) (E)

(L)residuo

356

Desarrollo y Simulacin de Programas

Las operaciones aritmticas se realizan con operandos de 8 bits y deben usarse


procedimientos para cada una. La multiplicacin se har por sumas sucesivas y la
divisin por restas sucesivas.
stack:

salto:

equ 07ffh
lxi sp,stack
cpi 'M'
jnz salto
call mul
hlt
call div
hlt

; Compare A con ASCII M


; Si igual, multiplique
; Si no igual, divida

; Multiplicacin por sumas sucesivas


PROC
lxi h,0
mov b,h
..salto: dad b
dcr e
jnz ..salto
ret
mul
ENDPROC
; Divisin por restas sucesivas

(HL) (C)*(E)

mul

;Resultado cero al inicio


;Operando de 8 bits, B a cero
;HL = HL + BC
;Repetir las veces que indique el multiplicador
(H)(C)/(E)

(L)residuo

div

PROC
mvi h,0
mov a,c
..salto: sub e
cmp e
inr h
jnc ..salto
mov l,a
ret
div
ENDPROC
END

El programa supone que los operandos son cargados en los registros B (multiplicando o dividendo) y en C (multiplicador o divisor). El resultado de 16 bits del
producto se almacena en el registro par HL. El cociente de 8 bits se deposita en L y
el residuo en E. Observe que la etiqueta salto se define dos veces, pero al ser un smbolo local no hay indicacin de error.
A continuacin se presenta un ejemplo que muestra los pasos a seguir para
programar una tarea en forma modular e ilustra el proceso de ensamblaje, enlazado y
relocalizacin de distintos segmentos contenidos en mdulos diferentes.

Desarrollo y Simulacin de Programas

357

Ejemplo 7.9

La tarea a programar consiste en adquirir diecisis valores hexadecimales del


puerto de entrada con direccin 8 y almacenarlos en posiciones consecutivas de la
memoria RWM del sistema. Estos datos representan ocho nmeros de 16 bits, a cada
uno de los cuales debe extrarsele la raz cuadrada. Los resultados de cada operacin
deben cargarse en la memoria RWM. Suponga que el sistema tiene de 2Kbytes de
EPROM con inicio en cero y de Kbytes de RWM a partir de 0800H. Cada vez que
un nuevo dato est disponible para lectura el bit 7 del puerto de entrada 9 se pone a
nivel alto
. El diagrama elctrico de los puertos del sistema se muestra en la figura 7.26.
El puerto 8 consiste de un registro latch del tipo 74LS373 y el puerto de entrada 9 se
realiza con un buffer de tres estados 74LS125. Cuando el dispositivo externo coloca
un dato en las entradas D0-D7 del puerto 8, el flanco positivo de la seal CLK lo transfiere a la salida de los flip-flops internos del latch.
Estas salidas siguen el valor de las entradas hasta que el flanco negativo de
CLK retiene el ltimo dato. Esta ltima transicin tambin carga un estado lgico alto
en la salida Q del biestable 74LS74 anunciando la presencia de un nuevo valor de
entrada. En este momento el pulso CLK ha desaparecido, la indicacin de dato listo el
dato est activa y la informacin ha sido cargada por el perifrico en el interior del
registro. Este mantiene sus salidas en tercer estado porque la entrada OC de habilitacin de salida est en nivel alto.
El programa se mantiene leyendo continuamente el puerto 9 hasta detectar que
est en nivel alto, en cuyo caso leer el valor en el puerto de entrada 8. Observe que
cada vez que se carga un dato en el P desde el registro latch, la salida Q del flip-flop
D se pone a cero y se mantiene en este estado hasta cuando el perifrico coloque un
nuevo dato.
La figura 7.28 muestra los resultados de la simulacin del circuito de puertos
usando la herramienta ORCAD/PSPICE. En t =0, el perifrico coloca el dato
10101010 a la entrada del 74LS373 y activa el pulso CLK en t =5 uS. El puerto 0 se
lee en t =10.45 uS y el puerto 8 en t =15.43 uS. Las lneas triples indican estado de
alta impedancia.
Las tareas a realizar por el programa se distribuirn en cinco mdulos en archivos particulares. Estos son:
PRPAL.ASM:
ENTSAL.ASM:
ADAT.ASM:
RAIZ.ASM:
DIV1616.ASM:

Programa principal.
Rutina de manejo de datos y resultados
Rutina de adquisicin de datos.
Extrae la raz cuadrada entera de un nmero de dos bytes.
Cdigo usado por RAIZ.

Desarrollo y Simulacin de Programas

Fig.7.26. Puertos de entrada para el ejemplo 7.9.

Fig.7.27. Diagrama estructurado del programa del ejemplo 7.8

358

Desarrollo y Simulacin de Programas

Fig. 7.28 Salidas de la simulacin con ORCAD/PSPICE para el circuito de la figura 7.26.

359

Desarrollo y Simulacin de Programas

360

Los mdulos se organizan en forma jerrquica como se ilustra la figura 7.27.


En el programa principal se define la pila y todas las constantes. El programa PPRAL
llama a la rutina ENTSAL la cual almacena en memoria los datos de entradas adquiridos por el subprograma ADAT. A continuacin ENTSAL extrae un nmero de 16
bits desde la memoria y llama al mdulo RAIZ, el cual a su vez usa la rutina
DIV1616 para extraer la raz cuadrada del valor. Finalmente la rutina ENTSAL carga
el resultado en la memoria del sistema.
El cdigo fuente de cada mdulo del programa se presenta a continuacin:
$title(Procesamiento de tabla de valores)
$subtitle(Clculo de raiz cuadrada)
;Modulo de programa principal
public p8,pb9,tabl,sqrt,temp1
extern entsal
;--------------------------------------------------------------------------------------------------------------------------------i_stack
equ 08F0H
; Inicio de la pila
i_rwm
equ 0800H
; Direccin de inicio de RWM
ndatos
equ 10H
; nmero de datos de entrada
;--------------------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
defseg puertos,start=8, class=iospace
; Direccin de puertos de entrada
defseg stack, start=i_stack
; La pila reside en la RWM
defseg datos, class=data, start=i_rwm
; 256 bytes de RWM a partir de 0800H
defseg progr, class=code, start=0
; 2k de EPROM desde 0000H
;--------------------------------------------------------------------------------------------------------------------------------; Puertos de entrada del sistema
seg puertos
p8
ds 1
p9
ds 1
;--------------------------------------------------------------------------------------------------------------------------------; Los 16 bytes ltimos de RWM soportan el stack.
seg stack
ds 10H
;--------------------------------------------------------------------------------------------------------------------------------t_stack:equ $-1
; Base de la pila
; Segmento de datos en RWM
seg datos
tabl
ds 10H
sqrt
ds 10H
temp1
ds 2
;--------------------------------------------------------------------------------------------------------------------------------; Segmento de cdigo en EPROM
seg progr
lxi sp,t_stack
;Se carga el apuntador de pila
mvi b,ndatos
;Contador de valores de entrada
lxi h,tabl
;Direccin del elemento 1 de la tabla de valores
call entsal
;Se inicia proceso
hlt
;Fin de programa
end
;---------------------------------------------------------------------------------------------------------------------------------

Desarrollo y Simulacin de Programas

$title(Entrada de datos y salida de resultados)


;Modulo ENTSAL
public entsal,noper
extern adat,raiz,tabl,sqrt
noper

equ 8

;Son 8 nmeros de 2 bytes

defseg progr
seg progr
entsal:

prox:

call adat
mvi a,noper
lxi b,sqrt

;Obtiene los 16 valores desde el puerto 8


;Contador de nmeros de 16 bits
;Direccin de los resultados en BC

lxi h,tabl
push psw
mov e,m
inx h
mov d,m
push h
push d
xchg
push b
call raiz
mov a,e
pop b
stax b
inr c
mov a,d
stax b
inr c
pop d
pop h
pop psw
dcr a
inx h
jnz prox
ret
end

;Direccin de los datos en HL

;Se extrae la raz del contenido de HL


;resultado en DE
;Se almacena byte bajo del resultado.
;Se almacena byte alto del resultado
;BC apunta al nmero siguiente

;Apunta a prximo dato


;Terminar si se procesaron todos los valores.

;--------------------------------------------------------------------------; Los datos desde el puerto se cargan en memoria en posiciones


; consecutivas y representan 8 valores de 16 ;bits.
; Datos de entrada: Puerto 08
; Bit de control: Lnea 7 del puerto 09
;--------------------------------------------------------------------------$title(adquisicin de datos)
;Modulo ADAT

adat:

public adat
extern p8,p9
defseg adatos
seg adatos
in p9
ani 80H
jz adat
in p8
mov m,a
inx h
dcr b
jnz adat
ret
end

361

362

Desarrollo y Simulacin de Programas

$title(Clculo de raz cuadrada)


;Modulo RAIZ

raiz:

rep:

cont:

public raiz
extern div1616,temp1
defseg progr
seg progr
shld temp1
mov a,h
rrc
mov a,l
rar
mov c,a
lhld temp1
xchg
call div1616
mov h,b
mov l,c
dad d
inx h
mov a,h
rar
mov d,a
mov a,l
rar
mov e,a
mov a,b
cmp d
jnz cont
mov a,c
cmp e
rz
mov b,d
mov c,e
jmp rep
end

$title(Divisin entera 16x16)


;Modulo DIV1616
public div1616
defseg progr
seg progr
div1616: mvi a,10H
lxi h,0
div161: xchg
dad h
xchg
jnc yyy
dad h
inr l
jmp www
yyy:
dad h
www:
inr e
push psw
mov a,l
sbb c
mov l,a
mov a,h
sbb b
mov h,a
jnc div162
dcr e
dad b
div162: pop psw
dcr a
jnz div161
ret
end

Para generar el archivo ejecutable denominado ejem78.hex, se ejecuta la siguiente secuencia de comandos:
avmac85 prpal.asm
avmac85 calc.asm
avmac85 adat.asm
avmac85 raiz.asm
avmac85 div1616.asm
avlink ejem78=prpal.obj calc.obj adat.obj raiz.obj div1616

El programa ejemplo consta de cuatro segmentos definidos en el programa


principal, tres de los cuales son de memoria (progr, stack y datos) y el restante (puertos) es de espacio de E/S. El segmento progr contiene el cdigo del programa y se
origina en la direccin de inicio de la EPROM. Segmentos parciales del mismo nombre se activan en cada mdulo y son tratados por el enlazador como un segmento nico de cdigo.
El bloque stack corresponde al apila del sistema y se ubica en las posiciones
finales de la memoria RWM. El segmento datos reserva 32 posiciones de RWM para
los datos adquiridos y los resultados y 2 localidades para variables temporales. Finalmente, puertos define las direcciones de los puertos de entrada.

363

Desarrollo y Simulacin de Programas

Cada archivo fuente se ensambla en forma independiente, generndose un


mdulo objeto. Debido a que las direcciones reales no se conocen en el momento del
ensamblaje, el archivo objeto no contiene direcciones absolutas. El listado siguiente,
es la salida con extensin prn (lista) producto del ensamblaje del mdulo entsal.asm.
Observe que por ser relocalizable el cdigo dentro del mdulo, las direcciones an no
estn definidas.

=0008

0000& CD 0000*
0003& 3E 08
0005& 01 0000*
0008& 21 0000*
000B& F5
000C& 5E
000D& 23
000E& 56
000F& E5
0010& D5
0011& EB
0012& C5
0013& CD 0000*
0016& 7B
0017& C1
0018& 02
0019& 0C
001A& 7A
001B& 02
001C& 0C
001D& D1
001E& E1
001F& F1
0020& 3D
0021& 23
0022& C2 000B&
0025& C9

1
2
3
4 noper
5
6
7
8
9 entsal:
10
11
12
13 prox:
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36

public entsal,noper
extern adat,raiz,tabl,sqrt
equ 8

;Son 8 nmeros de 2 bytes

defseg progr
seg progr
call adat
mvi a,noper
lxi b,sqrt
lxi h,tabl
push psw
mov e,m
inx h
mov d,m
push h
push d
xchg
push b
call raiz
mov a,e
pop b
stax b
inr c
mov a,d
stax b
inr c
pop d
pop h
pop psw
dcr a
inx h
jnz prox
ret
end

;Obtiene los 16 valores desde el puerto 8


;Contador de nmeros de 16 bits
;Direccin de los resultados en BC
;Direccin de los datos en HL

;Se extrae la ramz del contenido de HL


;resultado en DE
;Se almacena byte bajo del resultado.
;Se almacena byte alto del resultado
;BC apunta al nzmero siguiente

;Apunta a prsximo dato


;Terminar si se procesaron todos los valores.

El programa enlazador/relocalizador usa la informacin suministrada por las


directivas de relocalizacin declaradas en el cuerpo del programa para generar un mdulo ejecutable con direcciones completamente definidas. Cuando el enlazador avlink.exe se ejecuta activando la opcin sm, se genera en forma adicional un archivo
ASCII con extensin map que contiene informacin detallada sobre el proceso de
enlazado. En la pgina que sigue se muestra el contenido de este archivo.
Observe que los mdulos predefinidos por el ensamblador (CODE, DATA e
IOSPACE) no se usan. Modificando el programa principal se puede variar el nmero
de valores a procesar y el rea de almacenamiento de datos y resultados. Adems, si
en lugar de extraer la raz cuadrada se requiere realizar alguna otra operacin sobre
los datos, se deben sustituir los mdulos correspondientes y las nuevas rutinas deben
ser llamadas desde ENTSAL.

364

Desarrollo y Simulacin de Programas

AVLINK ---- LOAD MAP


For: Avocet 8085/Z80 Assembler v2.02, #01235

RELOCATED SEGMENTS SEGMENT NAME


PUERTOS
RELOCATED SEGMENTS SEGMENT NAME
PROGR
ADATOS
DATOS
STACK

CLASS 'I'
START
0008

STOP
0009

LENGTH ovl/cat def/undef


0002 Concat
Defined

STOP
007b
008b
0821
08ff

LENGTH ovl/cat def/undef


007c Concat
Defined
0010 Concat
Defined
0022 Concat
Defined
0010 Concat
Defined

CLASS 'M'
START
0000
007c
0800
08f0

ZERO LENGTH SEGMENTS


SEGMENT
CODE
DATA
IOSPACE

START
0000
0000
0000

SYMBOLS -- CLASS 'I'


SYMBOL NAME
P8
P9

START
0008
0009

SYMBOL'S SEGMENT def/undef


PUERTOS
Defined
PUERTOS
Defined

START
000c
0032
0058
007c
0800
0810
0820

SYMBOL'S SEGMENT def/undef


PROGR
Defined
PROGR
Defined
PROGR
Defined
ADATOS
Defined
DATOS
Defined
DATOS
Defined
DATOS
Defined

START
0008

SYMBOL'S SEGMENT def/undef


ABSOLUTE
Defined

SYMBOLS -- CLASS 'M'


SYMBOL NAME
ENTSAL
RAIZ
DIV1616
ADAT
TABL
SQRT
TEMP1
SYMBOLS -- CLASS 'N'
SYMBOL NAME
NOPER
No Transfer Address.

MODULE DATA -------MODULE:

prpal
SEGMENT NAME
CODE
DATA
IOSPACE
PUERTOS
STACK
DATOS
PROGR

MODULE:

OFFSET
0000
0000
0000
0000
0000
0000
0000
entsal

SEGMENT NAME
CODE
DATA
IOSPACE
PROGR

OFFSET
0000
0000
0000
000c

NUMBER OF SEGMENTS: 7
STOP
0000
0000
0000
0001
000f
0021
000b

LENGTH
0000
0000
0000
0002
0010
0022
000c

NUMBER OF SEGMENTS: 4
STOP
0000
0000
0000
0031

LENGTH
0000
0000
0000
0026

365

Desarrollo y Simulacin de Programas

MODULE:

adat
SEGMENT NAME
CODE
DATA
IOSPACE
ADATOS

MODULE:

OFFSET
0000
0000
0000
0000
raiz

SEGMENT NAME
CODE
DATA
IOSPACE
PROGR
MODULE:

OFFSET
0000
0000
0000
0032
div1616

SEGMENT NAME
CODE
DATA
IOSPACE
PROGR

OFFSET
0000
0000
0000
0058

NUMBER OF SEGMENTS: 4
STOP
0000
0000
0000
000f

LENGTH
0000
0000
0000
0010

NUMBER OF SEGMENTS: 4
STOP
0000
0000
0000
0057

LENGTH
0000
0000
0000
0026

NUMBER OF SEGMENTS: 4
STOP
0000
0000
0000
007b

LENGTH
0000
0000
0000
0024

7.4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS


La realizacin de un proyecto de una aplicacin basada en Ps transciende el
simple uso de un ensamblador. En el diseo de sistemas de cierta envergadura es casi
obligatoria la presencia de un sistema de desarrollo, el cual por su costo elevado rara
vez est a la disposicin de quienes asisten a un curso bsico de sistemas de P. Una
solucin comn para superar este obstculo es desarrollar el programa usando un C
de propsito general, un PC por ejemplo, dotado con las herramientas de programacin mnimas necesarias, estas son: editor de textos, ensamblador cruzado, enlazador/relocalizador y un simulador del P. En la figura 7.29 se muestra un diagrama de
flujo de los pasos a seguir para el diseo de programas usando estos recursos.
Un sistema de desarrollo y emulador profesional para el 8085A puede costar
la astronmica cifra de $6000, aunque es posible adquirir sistemas de bajo costo con
menos prestaciones por menos de una dcima parte del precio sealado. Aunque en la
actualidad pueden obtenerse en INTERNET ms de veinte simuladores para el 8085A,
con ejecucin en plataformas Linux y Windows, la situacin hace diez aos era bien
diferente ya que el estudiante de Sistemas de Microprocesadores no dispona de simulador alguno.
Para solventar este problema se desarroll en el ao 1995, el Sistema Integral
de Desarrollo para el Microprocesador 8085 (SID85), realizado como tesis de grado
por el Ing. Csar Garca, egresado de nuestra Universidad. El SID85 ofrece en un
ambiente orientado a ventanas los siguientes recursos:

Desarrollo y Simulacin de Programas

Fig.7.29 Fases del desarrollo del programa

366

Desarrollo y Simulacin de Programas

367

Editor de texto.
Ensamblador cruzado (ASM85).
Simulador del P8085A (SIM85).
Conexin con el microcomputador MPR85.

El SID85 represent, sin duda alguna, un recurso de gran valor para la enseanza de Ps y para el desarrollo de aplicaciones. Un programa puede ser creado y
modificado, simulado en modo de corrida libre o paso a paso, ofreciendo capacidad
de edicin de registros, memoria y puertos de E/S. El SID85 permite la simulacin de
interrupciones de hardware y de las lneas de comunicacin serie. Una tarjeta para
desarrollo MPR85 conectada al puerto paralelo del PC, habilita la prueba en tiempo
real del programa bajo desarrollo.
Si se toma en cuenta que un programa objeto creado y depurado con el SID85
est listo para ser grabado en EPROM, es justo decir que se dispone de un sistema de
desarrollo de bajo costo. Es obvio que la utilizacin del SID85 garantiza que la grabacin de la memoria EPROM solo se realiza una vez, cuando el programa pasa la
prueba de la simulacin y de la ejecucin en tiempo real. Informacin adicional sobre
el SID85 puede obtenerse en el informe del trabajo de grado.
Para ilustrar el uso de nuestro primer simulador, se usa el SID85 con el programa del ejemplo 7.6. El la figura 7.30 se muestra la pantalla de inicio del programa.

Fig.7.30 Presentacin del SID85

Desarrollo y Simulacin de Programas

368

Fig.7.31 Editor del SID85

Al ensamblar el archivo ejem7_6.asm, se generan: ejem7_6.lst y ejem7_6.obj.


El procedimiento para realizar la simulacin, es el siguiente:
1. Se carga el archivo ejem7_6.obj en la direccin de memoria 0000H. El cdigo objeto
ocupa 55 bytes consecutivos de la RAM 1 del sistema, como muestra la figura 7.32.

Fig7.32 Editor de memoria del SID85 mostrando como se almacena en la RAM el cdigo objeto del
ejemplo 7.6.
1

Hasta 4 K en el SIM85, con posibilidad de extenderse a 64 K

369

Desarrollo y Simulacin de Programas

2. Se activa el editor de registros de la figura 7.33a para almacenar en el contador de programa la direccin de inicio del programa a ejecutar. En este caso no existe necesidad de
cambiar el contenido del PC, debido a que apunta a la direccin 0000H.

(a)

(b)
Fig.7.33 (a) Registros internos del P b) Ventana de seleccin modo de ejecucin.

Desarrollo y Simulacin de Programas

370

3. Debido a que para lograr su propsito, la rutina del ejemplo 7.6 se hace referencia a la
memoria (direccin 1000H) y a los puertos de E/S (00, 01 y 02), se activan los editores de
memoria y puertos en las direcciones sealadas, como ilustran las figuras 7.34 y 7.35.

Fig 7.34. Bloque de memoria 1000H-1077H, mostrando los resultados de la simulacin.

Fig. 7.35 Editor de puertos del SID85

La simulacin debe ejecutarse paso a paso. El perifrico conectado al puerto


de entrada seala al P, con un pulso de control en el bit 0 del puerto 02H, que en el
puerto 00H existe un caracter vlido para lectura.
Para probar el programa se edita el puerto de entrada 00H y se escribe el primer caracter. El pulso de habilitacin se simula escribiendo la palabra de control 01H
(subida del pulso) en el puerto 02H, se activa el paso a paso hasta que el caracter sea

Desarrollo y Simulacin de Programas

371

almacenado en memoria, si es un dgito vlido, o escrito al puerto 01H, en caso de no


ser un caracter hexadecimal. Para la lectura de un nuevo caracter, el pulso de control
debe ir primero a cero (bajada del pulso), escribiendo 00H en el puerto 02H, antes de
que se registre el nuevo caracter. El proceso contina hasta que sean escritos los 16
dgitos, y el control sea transferido al sistema.
Si la ejecucin se hace en modo de corrida libre (RUN), el sistema entrar en
un lazo, esperando que el pulso de control suba a nivel alto. Debido a que en modo
RUN no es posible editar los puertos no es posible simular activar/desactivar el bit de
control.
Es posible escribir una rutina, en forma de programa principal, que transfiera
los 16 caracteres en forma automtica hacia el puerto, y a la vez emule el pulso de
control. Cada vez que un caracter se presente al puerto, se llamara a una subrutina
que se encargara de distinguir los dgitos y escribirlos a memoria o puerto. Esta forma requiere la realizacin de algunas modificaciones en el programa del ejemplo 7.6,
y solo sera un recurso para la depuracin del programa. Recuerde que en el mundo
real la entrada del dato es controlada por el dispositivo de entrada, no por el procesador.

7.4.1 Programas para simulacin del microprocesador 8085


El sistema integrado para desarrollo SID85 no es la nica ni la mejor herramienta disponible para desarrollar programas para el microprocesador 8085. Este
programa fue escrito por un estudiante del curso de Sistemas de Microprocesadores
dado la necesidad de disponer de un sistema de desarrollo de bajo costo para realizar
las asignaciones de la asignatura. En su momento y aun ahora el SID85 puede cumplir
tal funcin.
Versiones de evaluacin, ms o menos funcionales, de ambientes integrados
para desarrollo de cdigo, y programas de uso pblico para simulacin del 8085 pueden ser descargados de Internet.
El autor ha evaluado dos decenas de estos programas y se ha verificado su
funcionamiento. La mayora operan en forma correcta aunque algunos fallas en la
ejecucin de instrucciones especficas. Tales errores han sido participados a los autores de los simuladores y en ciertos casos stos han realizados las correcciones correspondientes. Algunos de estos programas trascienden a la simple simulacin de la ejecucin de las instrucciones del CPU y se presentan como simuladores de un microcomputador basado en el 8085, usando perifricos comerciales, teclado y pantalla de
visualizacin. Estos permiten el desarrollo de los programas de la aplicacin en un
entorno muy similar al real.
En la figura 7.36 se muestran los iconos de 16 simuladores, todos contenidos
en el disco compacto entregado al inicio del curso.

372

Desarrollo y Simulacin de Programas

8085 Instruction Set Simulator

8085 Simulator Ide

Micro 3

AVSIM85 (DOS)

Micro85

8085 Simulator

Microprocessor 8085 Simulator

MPS85-KIT

SID85 (DOS)

Sim8085

Simulator

Vsim

Win85

8085 Virtual Kit

8085-Simulator [SW]

WSIM85

Fig. 7.36 Algunos de los simuladores en el CD de trabajo.

La seleccin del simulador a usar depende estrechamente de las necesidades


de la aplicacin. Si el usuario desea verificar la ejecucin de un programa y examinar
el contenido de los registros, memoria y puertos de E/S; puede usar cualquiera de los
programas de la figura 7.36, La nica excepcin son: el 8085 Simulator y el MPS85KIT, los cuales slo soportan puertos mapeados como memoria (no reconocen las
instrucciones IN/OUT). Si se desea simular la operacin de perifricos comerciales
como el PPI 8255, mdulo LCD, teclado para entrada de datos, transmisor/receptor
universal UART 8251, un controlador de teclado/display 8279; ser necesario escoger el WSIM85 como herramienta de simulacin
Este trabajo no dispone de espacio para presentar en forma detallada el funcionamiento de los programas. Todos disponen de algn tipo de ayuda y de ejemplos
para orientar a quien se inicia A continuacin se presentan las caractersticas dignas
de resaltar de aquellos simuladores que se consideran de mayor utilidad para el curso. Se recomienda al estudiante visitar la WEB peridicamente, en busca de nuevas
herramientas y de las actualizaciones de las versiones disponibles.

MICRO 85
Es una aplicacin de ambiente WINDOWS que simula la operacin de una tarjeta de evaluacin comercial denominada MICRO 85. Puede editarse la memoria y
los registros incluyendo el de mscara de interrupcin y el de banderas. Ofrece soporte para interrupciones, pero no emula las lneas SID y SOD para comunicacin serie.
El ambiente grfico es muy amigable y los programas una vez ensamblados se
cargan automticamente en memoria. Permite la ejecucin del cdigo en modo de

Desarrollo y Simulacin de Programas

373

corrida libre y paso a paso. El ensamblador es limitado y el programa no corre en


ambientes Windows 2000, Millenium o XP.

Fig. 7.37 Editor de textos y contenido de la memoria 6264.

Las siguientes funciones de la tarjeta MICRO85, son simuladas por el programa.


CPU 8085.
Memoria RAM 6264 de 8K.
Un PPI 8255.
Mapa de memoria
E000H-FFFFH RAM
Mapa de E/S
08H 0BH

PPI8255

Interrupciones
Los vectores de interrupcin han sido cambiados segn se indica:
TRAP
RST7.5
RST6.5

0024H FFB0H
003CHFFB3H
0034H FFB6H

Desarrollo y Simulacin de Programas

RST5.5
INTR
RST 0
RST 1
RST 2
RST 3
RST 4
RST 5
RST 6
RST 7

374

002CHFFB9H
Ejecuta una de las RST n
0000H0000H
0008HFFCBH
0010HFFC8H
0018HFFC5H
0020HFFC2H
0028HFFBFH
0030HFFCBH
0038HFFCEH

En la figura 7.37 se observa el editor de textos y la ventana de memoria RAM.


Una vez escrito el programa fuente se pulsa el botn ensamblar y el programa es traducido y cargado en RAM.

Fig. 7.38 Registros internos del 8085 y sistema de interrupciones.

El contenido de los registros puede ser modificado en la ventana del CPU,


mostrada en la figura 7.38. El circuito para interconexin de E/S 8255 puede ser programado en la ventana del PPI de la figura 7.39 o directamente por programa. El contenido de los puertos de entradas tambin puede ser modificado.

Fig. 7.39 Puertos de Entrada y salida.

Desarrollo y Simulacin de Programas

375

El ensamblador no contiene todas las funciones de un programa comercial pero en general, el simulador puede ser de alguna utilidad.

WSIM85
Es quizs el ms til de todos los simuladores del 8085. Es capaz de simular el
CPU y diversos dispositivos perifricos y el ensamblador es aceptable. La versin de
evaluacin acepta programas hasta 256 bytes de tamao. Desafortunadamente el archivo fuente debe ser ensamblado por un programa externo. Acepta archivos en formatos HEX y binario.
La aplicacin WSIM85 tiene una opcin de configuracin que permite definir
el mapa de la memoria EPROM/RAM del sistema y los perifricos conectados al
8085. Los recursos disponibles son:
Para especificar el tipo y capacidad de la memoria disponible, pueden definirse hasta 4
bancos de RAM/EPROM definiendo las direcciones de inicio y fin de cada banco.
Pueden definirse las direcciones de los puertos de los controladores de perifricos a conectarse al P. Los mdulos posibles de interconectar al 8085 son:
8279 Controlador programable de teclado/display.
8155 RAM + E/S + Temporizador.
8255 Interconexin programable de E/S
8251 Transmisor receptor universal.
8253 Temporizador programable.
LCD Mdulo de cristal lquido

Las ventanas principales del WSIM85 se muestran en la figura 7.40 Se observa


la ventana de cdigo, los registros internos, la memoria y de los mdulos de E/S conectados en la aplicacin. Excepto el cdigo todos estos elementos pueden ser modificados con un click del ratn. Cada controlador tiene su ventana de dialogo para
definir su modo de operacin. Por ejemplo la figura 7.41 corresponde al 8279 pudindose especificar la direccin del puerto y la entrada de interrupcin del 8085 a la
cual se conecta la salida de interrupcin del 8279. Tambin es posible definir los cdigos de siete segmentos para los caracteres de acuerdo con el tipo de indicador utilizado.
Las opciones de este simulador son diversas y no pueden exponerse con detalle en este trabajo. Se recomienda al estudiante el uso de esta herramienta por ser de
suma utilidad. La ayuda es aceptable y ofrece programas ejemplos. El programa en
memoria puede ejecutarse en corrida libre o en modo paso a paso. Acepta la insercin
de puntos de ruptura durante la corrida lo cual hace ms fcil la depuracin del cdigo. Ofrece soporte para el sistema de interrupciones del microprocesador pero no
simula los terminales SID y SOD para comunicacin serie.

Desarrollo y Simulacin de Programas

Fig. 7.40 Entorno grfico de WSIM85

Fig. 7.41 Ventana de configuracin del controlador de teclado/display 8279

376

Desarrollo y Simulacin de Programas

377

El autor escribi un programa mon85.asm para el control de un microcomputador (Pro 85) con teclado y pantalla de 6 dgitos. El C puede usar el teclado para
examinar y modificar la memoria RWM y los registros del 8085 y adems se puede
ejecutar programas previamente cargados en la tarjeta. El cdigo fue simulado en el
WSIM85. El resultado fue realmente un xito que permiti desarrollar el software
para una aplicacin real sin tener que construir el prototipo.
Otra ventaja de esta herramienta que supera el obstculo del uso obligado de
un ensamblador externo, la representa el hecho que al aceptar la carga de archivos de
entrada desde la lnea de comando, puede incorporase a un Entorno Integrado para
Desarrollo o IDE (Integrated Development Environment). El proceso de edicin, ensamblaje y enlazado se realiza con los recursos del IDE y al final se invoca el
WSIM85 para simular el archivo ejecutable.

MICRO3

Aunque este programa no simula controladores de perifricos comerciales su


modo de operacin es de gran ayuda desde el punto de vista del seguimiento de la
ejecucin del programa. El editor de instrucciones no es muy amigable pero tiene un
teclado de cdigo que facilita la escritura del programa. Una vez introducido el programa se pulsa el botn RUN y el archivo fuente es ensamblado y el cdigo objeto
es cargado en memoria. Como todos los simuladores el programa pude ser ejecutado
por pasos o en corrida libre. No soporta interrupciones ni los terminales para comunicacin serie. No tiene editor de memoria pero se pueden definir y modificar hasta
cuatro puertos de E/S.
Para controlar la ejecucin del programa se pueden insertar puntos de ruptura
accionando el ratn sobre la instruccin correspondiente. Cuando el programa es ejecutado se presenta una ventana denominada simulador con la historia de las ltimas
25 instrucciones ejecutadas, mostrando para cada una el contenido de los registros
internos, de las banderas y de los puertos de E/S. La figura 7.42 muestra la ventana de
cdigo, el teclado de instrucciones y la ventana del simulador.
8085 Virtual Kit
Este recurso es un verdadero modelo de programacin de una tarjeta real de
evaluacin y entrenamiento para el microprocesador 8085A. Este software intenta
simular un sistema microprocesador con hardware real.
Por ejemplo el controlador de teclado/display opera en forma similar al 8279.
Posee un teclado totalmente funcional y 6 indicadores de siete segmentos para presentar informacin como ilustra la figura 7.43.

Desarrollo y Simulacin de Programas

Fig. 7.42 Ventanas del simulador MICRO3.

378

Desarrollo y Simulacin de Programas

379

Fig. 7.43 Ventana principal del 8085 Virtual Kit.

El SDA 85 tiene las siguientes caractersticas:

Editor de textos excelente.


Modela hardware similar al real.
Programa monitor incorporado con posibilidad de modificacin.
Simulacin de teclado e indicadores visuales.
Soporte para interrupciones y comunicacin serie.
Ejecucin de programas paso a paso.
En el modo trace se visualiza la ejecucin de instrucciones en el programa fuente.

Al no tener editor de memoria, slo puede examinarse/modificarse la memoria


de datos desde el teclado pero los programas a ejecutar se cargan automticamente en
RAM. Posee un editor de puertos pero los registros slo pueden modificarse por programa, lo cual es una desventaja severa.
El programa monitor mon85.asm fue modificado y usado como monitor del
8085 Virtual Kit, funcionando en forma correcta. El archivo no solo incorpora el
examen/modificacin de memoria y la ejecucin de programas, sino que se incluye la
opcin de examen/modificacin de registros, funcin no realizada por la versin original del 8085 Virtual Kit.

Desarrollo y Simulacin de Programas

380

8085 Simulador IDE


Este programa constituye una herramienta de gran valor para el desarrollo de
software de aplicaciones basadas en el microprocesador 8085. En un ambiente grfico
integra un compilador BASIC, ensamblador, simulador del P, depurador y desensamblador. Las caractersticas del programa son:

Editor de texto y ensamblador integrado.


Acepta la entrada de archivos con extensiones .obj y .hex.
Editor de memoria.
Mdulo de dispositivos perifricos.
Mdulos externos.
Editor de puertos.
Administrador de puntos de ruptura.
Compilador BASIC.
Desensamblador.
Registrador visual de la simulacin.

La figura 7.44 muestra la ventana principal del programa donde se observan los registros internos incluyendo el registro de banderas (todos editables), la
ltima y la siguiente instruccin a ejecutar, el nmero de estados del programa, el
contador de instrucciones, las lneas de comunicacin serie y las interrupciones del
microprocesador.

Fig. 7.44 Ambiente de trabajo del 8085 Simulator IDE.

Desarrollo y Simulacin de Programas

381

Fig. 7.45 Editores de memoria y puertos.

Este programa se recomienda porque es muy completo y facilita la simulacin


de cdigo. El contenido de cualquier posicin de memoria o de un puerto puede ser
modificado en el curso de la simulacin. La figura 7.45 muestra los editores correspondientes. Adems el usuario dispone de un mdulo de dispositivos perifricos,
mostrado en la figura 7.46, con indicadores luminosos conectados a las lneas de cua-

Desarrollo y Simulacin de Programas

382

tro puertos de E/S y una ventana de un terminal ASCII de salida de informacin. La


herramienta mdulos externos permite establecer una interconexin entre el modelo
de simulacin y hasta 5 mdulos externos diseados como aplicaciones cliente/servidor. El controlador LCD de la figura 7.47 es un ejemplo de este tipo de recurso. La figura 7.48 presenta la ventana del administrador de puntos de rupturas,
mediante el cual se pueden fijar puntos de parada durante la ejecucin del programa
en modo de corrida libre. Aunque se puede fijar la velocidad de ejecucin del cdigo
de entre cinco opciones, puede ser preferible usar este administrador debido a que
permite realizar la simulacin por pasos, con un tamao de paso variable y elegido
por el usuario.

Fig. 7.46 Mdulo de dispositivos perifricos

Fig. 7.47 Mdulo de pantalla de cristal lquido

Desarrollo y Simulacin de Programas

383

Fig. 7.48 Administrador de puntos de parada

Otras herramientas como el compilador BASIC y el desensamblador son comentadas en la ayuda del 8085 Simulator IDE.

VSim Simulador
Este es un programa limitado y sin mayores pretensiones. La ventana de trabajo se muestra en la figura 7.49 donde se observa los registros de internos y las banderas, los controles para la simulacin y el editor de memoria. Tambin se dispone de
un editor de puertos. No se modela el sistema de interrupciones del P ni los terminales SID y SOD para entrada y salida serie.
Pese a sus carencias, para aplicaciones que requieran simular entradas usando
interruptores lgicos y salidas a indicadores luminosos conectados a puertos del sistema, puede simplificar el trabajo usar el panel de LED & Switch del VSim, mostrado
en la figura 7.50.

Desarrollo y Simulacin de Programas

Fig. 7.49 Ventana principal del VSim.

Fig. 7.50 Mdulo de interruptores y LEDs del VSim.

384

Desarrollo y Simulacin de Programas

385

8085 Emulator (Win85)


El programa Win85 no tiene editor de textos ni ensamblador incorporado. La
memoria y los registros internos slo pueden ser modificados por programa y nicamente se dispone de un puerto de entrada y uno de salida. Soporta interrupciones y no
modela las el canal de comunicacin serie.
A pesar de estas carencias, los perifricos conectados al sistema y los ejemplos que vienen con el software son de tal calidad que hacen que Win85 sea de uso
obligado para quienes siguen un curso introductorio de Ps con el 8085A. La figura
7.51 muestra los recursos que acompaan al emulador.

Fig. 7.51 Herramientas del Win85.

En la parte superior izquierda de la figura se observa la ventana principal del


simulador donde se despliega el contenido de los registros internos y de banderas del
P. Adems se muestra el estado de las interrupciones, el registro de mscara de interrupciones, la frecuencia del reloj y el nmero de estados. Para ver el contenido de la
memoria existen dos ventanas de memoria y otra para la pila del sistema.

Desarrollo y Simulacin de Programas

386

El parte superior derecha de la figura 7.51 se muestra la ventana de dispositivos perifricos con los puertos e interrupciones asociadas. Se distinguen:

Puertos bsicos de E/S


Teclado
Monitor de puertos
Mdulo LCD con capacidad grfica tipo Seiko G1216B1N000

Tanto el teclado como el mdulo LCD pueden usarse en los programas de


usuario. La lectura del puerto de teclado carga el valor de la tecla pulsada en el acumulador. Ejemplos del manejo conjunto del teclado/LCD son suministrados por el
autor como algunos buenos esfuerzos de programacin en ensamblador del 8085A
como los juegos PacMan y Tetris, y otras animaciones sencillas.

Fig. 7.52 Salidas de las simulaciones de PacMan.bin y Runner.bin en Win85

8085 Simulador y Sim8085


Estos dos programas son tiles para ejecutar las funciones bsicas de simulacin de las instrucciones del microprocesador. El Sim8085 posee editor de memoria y
puertos y el 8085 Simulator carece de esta ltima herramienta, adems no reconoce
las instrucciones IN y OUT de modo que slo permite puertos mapeados como memoria.
El Sim8085 incorpora un asistente en forma de teclado para escritura de cdigo y un diseador de rutinas de retardo. Ninguno de estos programas simula el sistema de interrupciones ni los terminales SID y SOD para interconexin con perifricos
serie. Las ventanas principales de ambos programas se muestran a continuacin en la
figura 7.53.
Todos los programas en este trabajo han sido probados usando algunos de los
simuladores de la figura 7.36 y ejecutados en el Sistema de Evaluacin MPR85
PLUS. Es necesario que el estudiante seleccione la herramienta de su preferencia y

Desarrollo y Simulacin de Programas

387

Fig. 7.53 Ventanas principales del 8085 Simulator y del Sim8085

la use para simular el mayor nmero de programas posibles hasta obtener un completo conocimiento de los recursos que ofrece el simulador. La mayora de las asignacio-

Desarrollo y Simulacin de Programas

388

nes del curso deben desarrollarse en un ambiente de simulacin y posteriormente deben ser probadas con hardware real. De modo que el cursante debe explorar exhaustivamente su simulador hasta lograr una confianza total en los resultados que ste entrega.
Es conveniente destacar que la naturaleza interactiva de muchas simulaciones
hace que la presentacin de ejemplos de stas no sea muy ilustrativa. Cuando se considere necesario se realizaran observaciones sobre simulaciones realizadas por el autor. A continuacin se presentan resultados obtenidos de la simulacin de algunos
ejemplos seleccionados. As, la figura 7.54 muestra los resultados de simular la ejecucin del programa del ejemplo 7.7 usando el SID85. Debido a que este simulador le
asigna a la directiva DS una funcin distinta a la descrita en este trabajo, el cdigo
debe ser modificado sustituyendo las directivas DS por:
MIN:
MAX:

DB 0
DB 0

Esto asigna a MIN la direccin 0300H y a MAX 0301H. Cada posicin es


cargada al inicio con cero. El resultado es el mismo que usar DS.

Fig. 7.54 Resultados de simular el programa del ejemplo 7.7.

Observe la lista de valores a partir de la posicin de memoria 0302H, el valor


mnimo en 0300H, y el mximo en 0301H. El acumulador contiene el mximo, el
cual fue el ltimo nmero escrito en memoria, mientras que el registro par HL apunta
al final de la tabla. El contador de programa contiene la direccin de la prxima instruccin.

Desarrollo y Simulacin de Programas

389

El programa tambin fue simulado usando WSIM85. Como la versin de evaluacin acepta archivos menores de 256 bytes detectando cuando el cdigo se carga
sobre la direccin 0100H, se fij el rea de cdigo a partir de 0020H y la de datos se
inicia en 0080H. El ensamblador de WSIM85 tampoco reconoce la directiva DS.

Fig. 7.55 Al inicio las posiciones 0080H y 0081H estn en cero.

Fig. 7.56 Despus de simular en programa contienen el mnimo y el mximo de la tabla de valores
que se inicia en 0082H.

Desarrollo y Simulacin de Programas

390

Este simulador presenta un problema adicional para ejecutar el programa del


ejemplo 7.7. Los datos a cargar en memoria por medio de DB deben estar expresados
en hexadecimal o decimal. El ensamblador de WSIM85 no acepta los bytes de DB en
octal o binario, por lo cual debe hacerse la modificacin correspondiente en el programa fuente. Otra posibilidad es usar otro ensamblador y convertirlo a hex intel antes de cargarlo en WSIM85. Las figuras 7.55 y 7.56 muestran la ventana grfica de
WSIM85 antes y despus de ejecutar el programa.
A continuacin, el programa del ejemplo 7.9 se simula a usando el 8085 Simulator Ide. Previamente se gener el archivo ejecutable Ejem_78.hex, el cual se carga
en la memoria del simulador como muestra la figura 7.57

Fig. 7.57 El archivo Ejem_78.hex se carga en la memoria del simulador.

Fig. 7.58 Cuadro de dialogo para entrada de dato a puerto.

Con el programa en ejecucin, cada ver que ocurra una lectura a puerto se
despliega la ventana de la figura 7.58 (si esta opcin est habilitada) de modo que
pueda cargarse el valor adecuado en el puerto. Esto hace muy sencilla la simulacin

Desarrollo y Simulacin de Programas

391

del cdigo al facilitar la entrada de los 8 valores de 16 bits en el puerto P8 y el estado


de la seal de control en la lnea P9.7. El resultado de la simulacin se almacena en
memoria a partir de la direccin 0810H, como ilustra la figura 7.59.

Fig. 7.59 Editor de memoria con las entradas y salidas del ejemplo 7.8

Ejemplo 7.10
Escribir un programa que calcule el periodo de la seal aplicada a la lnea 0
del puerto 10H. La frecuencia de la onda est comprendida entre 0.1 Hz y 1 KHz. El
cdigo debe escribirse para ser simulado en el 8085 Virtual Kit, en cuya pantalla deber presentarse la medida con el formato de la figura 7.60.

Fig. 7.60 Medida del periodo de una onda.

El periodo de la seal de entrada est en el rango 1 ms Ti 10000 ms, de


modo que bastar determinar cuantos milisegundos transcurren entre una transicin
positiva de la onda y el siguiente flanco de subida.

Desarrollo y Simulacin de Programas

392

El nico problema es que el simulador no presenta el carcter m, .por lo cual


debe hacerse una pequea modificacin al monitor del programa para desplegar las
unidades de medida. Basta con agregar al mapa de caracteres del monitor del SDA 85
la lnea db 37h como se indica en el siguiente listado.
;----------------------------------------------------------;--------------------- Character Map ----------------------org 0700h
CharMap:
db
3fh
; map for '0'
db
06h
db
5bh
db
4fh
db
66h
db
6dh
db
7dh
db
07h
db
7fh
db
67h
db
77h
db
7ch
db
39h
db
5eh
db
79h
db
71h
;'F'
0fh
db
1110110b
;'H'
10h
db
0111000b
;'L'
11h
db
1110011b
;'P'
12h
db
0110000b
;'I'
13h
db
1010000b
;'R'
14h
db
0000000b
;' ' -blank
15h
db
0111110b
;'U'
16h
db
1000000b
;'-'
17h
db
37h
;'m'
24
;----------------------- END CharMap -----------------------

El uso de un contador hexadecimal para registrar el nmero de milisegundos


del periodo de la seal bajo medida, implica que el registro contador contendr un
valor hex para indicar el periodo. Este valor debe ser convertido a BCD antes de presentar. Otra posibilidad es usar un contador con incremento en decimal.
Usando la primera opcin, se requiere seleccionar un algoritmo para la conversin de binario a BCD. Existen muchos de stos. En este caso se usa el siguiente:
bin_bcd:
acum_bcd = 0
contador = precisin
repetir
bin = 2 x bin
bcd = 2 x bcd + acarreo
contador = contador -1
hasta contador = 0
fin bin_bcd

Este algoritmo calcula el valor BCD de un nmero, como se hace con lpiz y
papel.

Desarrollo y Simulacin de Programas

393

El listado de programa para medida y presentacin del perodo de la onda se


muestra a continuacin:
;------------------------------------------------------------------------------- ----------------------------------------; Ejemplo 7.10
;------------------------------------------------------------------------------- ----------------------------------------;Subrutinas de monitor
output
equ ADDR 05fcH
; Presenta cadena alfanumrica en pantalla
updad
equ ADDR 06bcH
; Presenta contenido de memoria en pantalla
;------------------------------------------------------------------------------- ----------------------------------------dir_dec
equ addr 0fff7h
; Direccin presentada por UPDAD
dir_bin
equ addr 0f000h
tope_pila
equ addr 8700h
puerto
equ byte 10h
; Seal en P10.0
nbytes_dec
equ byte 2
nbytes_bin
equ byte 2
org
8000h
;------------------------------------------------------------------------------- ----------------------------------------; Unidades de medida (ms)
;------------------------------------------------------------------------------- ----------------------------------------unid:
db 5
db 24
;------------------------------------------------------------------------------- ----------------------------------------; Programa principal
;------------------------------------------------------------------------------- ----------------------------------------org 8100h
lxi sp,tope_pila
lxi h,unid
mvi a,01h
mvi b,00h
call output
; Se ppresenta 'Ms' en pantalla sin pd
bit10:
in puerto
ani 1
; Esperar que seal pase a nivel bajo
jnz bit10
bit01:
in puerto
; Detectar flanco positivo de la onda
ani 1
jz bit01
lxi d,0
; Contador de milisegundos a cero
de10:
call medir
; Detecta fin de semiperiodo y contina medida
jnz de10
de01:
call medir
; Mide hasta transicin positiva
jz de01
xchg
shld dir_bin
; En DE periodo de la seal
call bin_bcd
; Convierte medida a BCD
call updad
; Presenta medida en campo de direcciones
hlt
;------------------------------------------------------------------------------- ----------------------------------------; Incrementa en 1 el registro BC entre transiciones positivas
;------------------------------------------------------------------------------- ----------------------------------------medir:
inx d
; Incrementa medida en 1 ms
call retard
; Retardo de 1ms
in puerto

Desarrollo y Simulacin de Programas

394

ani 1
ret
;------------------------------------------------------------------------------- ----------------------------------------; Retardo de 1 ms a f = 2.85 Mhz
;------------------------------------------------------------------------------- ----------------------------------------retard:
mvi b,0cbh
retad1:
dcr b
jnz retad1
ret
;------------------------------------------------------------------------------- ----------------------------------------;
Conversin multidgito de binario a BCD.
;------------------------------------------------------------------------------- ----------------------------------------bin_bcd:
mvi c,nbytes_dec
; 4 dgitos BCD
mvi d,nbytes_bin
; 16 bits binarios.
; bcd_acum = 0
lxi h,dir_dec
xra a
mov b,c
llenar:
mov m,a
inx h
dcr b
jnz llenar
; contador = 8*nbytes_dec
; contador = 16 en este caso
mov a,d
ral
ral
ral
mov e,a
; repetir
;bin = 2 * bin
cont:
lxi h,dir_bin
mov b,d
dsplzm:
mov a,m
ral
mov m,a
inx h
dcr b
jnz dsplzm
;bcd = 2 * bcd + acarreo
lxi h,dir_dec
mov b,c
decadj:
mov a,m
adc a
daa
mov m,a
inx h
dcr b
jnz decadj
dcr e
; hasta que contador = 0
jnz cont
ret
;------------------------------------------------------------------------------- -----------------------------------------

Desarrollo y Simulacin de Programas

395

El cdigo fue simulado y funcion en forma correcta. Para presentar las unidades de medida y valor del perodo en la pantalla del SDA 85 se usaron las rutinas de
usuario OUTPUT y UPDAD, respectivamente. Consulte la ayuda del programa para
ms detalles. Los resultados de la simulacin se presentan en la figura 7.61. Para simular se us la herramienta trace del 8085 Virtual Kit.

Fig. 7.61 Medida del periodo de una seal.

Como puede observar el lector, aunque el programa del ejemplo anterior consta de varias subrutinas, ste fue escrito como un solo mdulo despreciando el disfrute
de los beneficios de la programacin modular. Esto se debe a que el ensamblador del
simulador no procesa cdigo relocalizable y no se puede usar un ensamblador externo
por que no carga un archivo binario o hex desde la lnea de comando.
Esta situacin se repite en otros simuladores, por lo cual el usuario debe adaptar cada programa a la sintaxis del ensamblador usado. Los dos obstculos son indeseables: es necesario programar en forma modular y usar un programa ensamblador
de potencia tal que simplifique en forma resaltante la escritura del programa.
Una solucin al problema planteado es utilizar un verdadero sistema de desarrollo de programas. Los recursos modernos para el desarrollo de programas para
sistemas empotrados usando microprocesadores microcontroladores se presentan
incorporados a una aplicacin WINDOWS o LINUX identificada como Entorno Integrado para Desarrollo o IDE (Integrated Development Environment), la cual incluye
editor, ensamblador, compilador C y muchos otros recursos que simplifican la escritura de programas usando tcnica modular .

396

Desarrollo y Simulacin de Programas

7.4.2 Sistema integrado para desarrollo de programas


Una aplicacin IDE estndar contiene al menos:

Editor de texto.
Macroensamblador.
Compilador ANSI C.
Biblioteca de programas.
Enlazador/Relocalizador.
Simulador

Un diagrama que ilustra los recursos de una aplicacin IDE estndar, se muestra en la figura 7.62.
EDITOR DE TEXTO

MACRO
ENSAMBLADOR

COMPILADOR
ANSI C

BIBLIOTECA
ESTANDAR

BIBLIOTECA

CPU

S.O.
TIEMPO
REAL

ENLAZADOR/RELOCALIZADOR

DEPURADOR

SIMULADOR

GRABADOR
DE EPROM

EMULADOR

Fig. 7.62 Funciones tpicas de un entorno integrado para desarrollo de programas

El proceso de desarrollo del programa se inicia cuando se escribe en C o en


ensamblador, usando el editor de texto, los archivos fuente del programa principal y
de las subrutinas de la aplicacin. Estos mdulos aparecen como archivos independientes y son organizados como un proyecto que contiene todos los mdulos fuente y
de biblioteca necesarios para construir el programa de la aplicacin. Activando la
funcin: construir proyecto, se compilan los archivos en C o se ensambla los programas en ensamblador. El enlazador relocalizador a continuacin resuelve todas las

Desarrollo y Simulacin de Programas

397

direcciones relativas de memoria generando un cdigo objeto absoluto. Las salidas


del enlazador es son: un archivo binario que contiene el cdigo ejecutable o una versin en formato HEX INTEL y un archivo ASCII que contiene informacin relativa al
proceso de traduccin.
El programa ejecutable puede ser simulado en el microcomputador, cargado
en un equipo emulador de microprocesadores o en una memoria EPROM. Algunas
IDE ofrecen recursos adicionales como un sistema operativo de tiempo real apropiado
para aplicaciones que involucran tareas de tiempo crtico. El lector dispone de una
IDE denominada MICROIDE dirigida a diversos microprocesadores y microcontroladores. Esta tiene todas las funciones descritas, pero desafortunadamente la versin de
evaluacin para el 8085 no contiene simulador, pero es posible incorpraselo. Con
esta herramienta se puede programar en forma modular y el cdigo final puede ser
ejecutado en un simulador asociado o cargado en un emulador o grabador de
EPROM.
En el Laboratorio de Microprocesadores existen 5 microcomputadores de bajo
costo para desarrollo aplicaciones con el 8085, denominados MPR-85 PLUS. Esta
herramienta dispone de todos los recursos necesarios para la prueba del hardware de
prototipos y la verificacin del programa. Para construir, con los pocos recursos disponibles, un sistema de desarrollo bsico pero funcional, se usa un computador personal, el macroensamblador AVMAC85, el paquete de programacin MicroIde, y algunos simuladores seleccionados. Con el IDE en marcha, el usuario puede usar un
ensamblador/relocalizador profesional para escribir los mdulos de su programa, simular el cdigo en un simulador, descargar el programa en la memoria del MPR85PLUS, verificar su operacin y finalmente grabar la memoria EPROM.
La aplicacin Micro-IDE de Bipom, en el CD de trabajo, es una versin de
evaluacin con las siguientes caractersticas:
1. Permite el desarrollo de programas en forma modular con el compilador C: MICROC-85.
2. Para programacin en ensamblador utiliza el ASM85, el cual no procesa macros ni cdigo
relocalizable, haciendo imposible la programacin modular.
3. Limita el tamao del cdigo a 500 lneas.
4. No incorpora un simulador para la versin correspondiente al 8085.
5. Dispone de un terminal por medio del cual se puede conectar al MPR-85.
6. Se puede incorporar nuevas herramientas de desarrollo de programa como macroensambladores y enlazadores.

Para que el estudiante utilice un entorno para desarrollo de programa que sea
ms profesional y eficiente que el ofrecido por el software MICROIDE, se hace uso
de las opciones de configuracin de la misma aplicacin IDE para:

Desarrollo y Simulacin de Programas

398

a) Sustituir el ensamblador original por un Macroensamblador AVMAC85 con capacidad para


procesar cdigo relocalizable; e incorporar el enlazador/relocalizador correspondiente
(AVLINK).
b) Aadir al men de herramientas dos programas simuladores/depuradores: WSIM85 y
WIN85. Esto permite cargar en el simulador el archivo generado por el proceso de ensamblaje.

El proceso para configurar el entorno de desarrollo usa una herramienta incluida en el paquete de software MICROIDE denominada Toolkit configurator. Con
este recurso es posible:
Incorporar el ensamblador AVMAC85 como opcin para el desarrollo de proyectos.
Especificar la forma en que el programa enlazador AVLINK debe procesar los archivos objetos generados por el ensamblador.
Convertir el archivo con extensin .hex generado por AVLINK a un archivo binario que
pueda ser cargado en el simulador WIN85. El programa WSIM85 acepta como entradas archivos en formato HEX-INTEL o en binario.

Configurando MICROIDE
1. Ejecute el programa Toolkit Configurator de MICRO-IDE.

Fig.7.63. Ventana principal del Toolkit Configurator de MICRO-IDE

Desarrollo y Simulacin de Programas

399

2. Seleccione la opcin: Add New Toolkit

Fig.7.64. Se agrega un nuevo ensamblador


3.

En la ventana de dialogo de la figura 7.64 escriba el nombre de la nueva herramienta.

4.

Escriba los comandos necesarios para el ensamblaje de los mdulos del programa,
el enlace y la conversin a binario del archivo .HEX resultado de la compilacin.

Fig.7.65. Configuracin de la nueva herramienta

Desarrollo y Simulacin de Programas

400

El comando {TOOLKITDIR}\avmac85 {SOURCEFILES} procesa uno o ms


archivos fuente (con extensin ASM) y los ensambla a uno o ms archivos con extensin OBJ. El enlazador AVLINK procesa el (los) archivos .OBJ y genera un archivo
nico (SIMUL.HEX) con el cdigo ejecutable. Este archivo est en formato HEXINTEL. Una vez obtenido el mdulo ejecutable (SIMUL.HEX), se convierte a binario
(SIMUL.BIN) usando la herramienta HEX2BIN. El simulador WSIM85 acepta como
entrada ambos tipos de archivos, pero WIN85 solo simula archivos binarios.
NOTA
Cuando cree en Micro-IDE un nuevo proyecto (con cualquier nombre) puede seleccionar como lenguaje ensamblador el AVMAC85. Al construir el proyecto obtendr siempre un archivo SIMUL.HEX. Este
nombre comn no es problema, si cada proyecto reside en su carpeta particular.

Creando un nuevo proyecto:


1. Del men Projects seleccione New project

Fig.7.66. Creacin del proyecto Ejemplo1

2.

Indique la carpeta (el programa la crear) donde residir el proyecto dentro del
directorio de trabajo \EXAMPLES. La carpeta puede tener el mismo nombre del
proyecto.

3.

Seleccione la herramienta (Toolkit).

Desarrollo y Simulacin de Programas

401

Fig.7.67. El proyecto Ejemplo1 est vaco.

4.

Usando el men Projects\Add files to project adjunte los archivos al proyecto.


Estos deben residir en la carpeta Ejemplo1.

Fig. 7.68. Se suman los archivos.asm a Ejemplo1.

Completado el procedimiento, el proyecto est listo para compilacin y enlazado como ilustra la figura 7.69.

Desarrollo y Simulacin de Programas

402

Fig.7.69. El proyecto est listo para procesarse.

Es de suponer que con la configuracin del AVMAC85 y del AVLINK realizada


con el Toolkit Configurator, no es necesario realizar ajustes adicionales. No obstante
examinemos Project\Settings:

Fig.7.70. Seleccione Generic Serial Loader.

Al seleccionar un cargador es posible transferir al MPR85 (Por un puerto serie


del PC) el archivo SIMUL.HEX.

Desarrollo y Simulacin de Programas

403

Fig.7.71. El directorio de trabajo puede ser tambin {ROOTDIR}\microc.

Fig.7.72. La extensin del archivo objeto debe marcarse como obj.

El comando {TOOLKITDIR}\avmac85 {SOURCEFILES} procesa uno o ms


archivos fuente (.ASM) y los ensambla a uno o ms archivos con extensin OBJ.

Desarrollo y Simulacin de Programas

404

Fig.7.73. Ventana del enlazador

El enlazador AVLINK procesa el (los) archivos .OBJ, salidas del AVMAC85 y


genera un archivo nico (SIMUL.HEX) con el cdigo ejecutable. Este archivo est en
formato HEX-INTEL. Las opciones son:
sy
sp

Activa la generacin de un archivo de smbolos y


Incluye informacin de smbolos en el archivo .map
generado por AVLINK.

Fig.7.74. Marque simul.hex como archivo de salida. Se pone por defecto nombre_proyecto.hex

Una vez obtenido el mdulo ejecutable SIMUL.HEX se convierte a binario


(SIMUL.BIN) usando la herramienta HEX2BIN. Finalmente use Build\Build Simul.hex
para generar el archivo ejecutable.

Desarrollo y Simulacin de Programas

Fig.7.75. Proceso de generacin del archivo ejecutable

Incorporando los simuladores


1. Seleccione Tool\Add Tool .

Fig.7.76. Configure el simulador Wsim85 como herramienta de usuario.

405

Desarrollo y Simulacin de Programas

406

2. . Seleccione Tool\Add Tool y agregue los programas de simulacin. El simulador

WSIM85 acepta como entrada archivos .hex o .bin

Fig.7.77. El simulador Win85 requiri el auxilio de un archivo .bat para ejecutarse

El contenido del archivo win85.bat consiste de la lnea:


c:\avocet\win85\win85 simul.bin
Los programas avmac85.exe, avlink.exe, hex2bin.exe y win85.bat deben residir en el directorio: C:\bipom\devtools\microc.

Comunicacin entre el C MPR85 y MICRO-IDE


Micro-IDE tiene una herramienta Terminal que permite la comunicacin entre
el PC y el microcomputador MPR85. Para la descarga de archivos se usa la herramienta Loader esta permite, una vez puesto el MPR85 en el modo de recepcin de
archivo, descargar el programa SIMUL.HEX en un rea de memoria del MPR-85
PLUS para su posterior ejecucin. Tambin es posible que el microcomputador MPR85 PLUS transfiera un archivo HEX hacia el PC.

Desarrollo y Simulacin de Programas

Fig.7.78. Ahora se tiene acceso a dos simuladores

1.

Para configurar Terminal use Tools\Options\Terminal

Fig.7.79. El puerto serie del MPR85 se conecta al COM1 del PC.

407

Desarrollo y Simulacin de Programas

408

En este caso la velocidad de transmisin del canal serie del MPR85 debe ajustarse a 9600 baudios.
2.

Para configurar Loader use Tools\Options\Loader. La configuracin del cargador


es similar a la de Terminal.

Fig.7.80. Seleccione dos bits de parada.

Los cargadores disponibles en Micro-IDE no estn destinados para la transferencia de archivos en el MPR85. Se us El Generic Serial Loader. Aunque este indica un error al tratar de poner al MPR85 en modo RUN, realiza la transferencia del
archivo en forma correcta.

Fig.7.81. Cargadores para download.

409

Desarrollo y Simulacin de Programas

7.5 MACROS
Cuando se escribe un programa es comn encontrar que un conjunto de instrucciones se repiten con frecuencia variando nicamente algunos de los parmetros.
En estos casos puede ser conveniente usar una instruccin macro para simplificar el
desarrollo del programa. Un macro es una instruccin que puede ser llamada dentro
de un cdigo, obtenindose como resultado la sustitucin de cada llamada por una
expansin de cdigo equivalente a una secuencia de instrucciones. El uso de macros
reduce las lneas de cdigo del programa y permite la creacin de libreras de que
pueden ser usadas en cualquier programa.
Suponga que necesita generar un retardo por software con una duracin de
cinco segundos y posteriormente en otro punto del programa se requiere un tiempo de
espera de veinte segundos. Las rutinas capaces de generar el lapso de retardo tienen el
mismo cdigo excepto por el parmetro tiempo retardo. En lugar de escribir dos rutinas, el diseador puede utilizar un macro definiendo en cada llamada el tiempo deseado. Las aplicaciones de macro son diversas, recomendndose su uso cuando el
nmero de instrucciones que componen el macro son pocas. Los programas ensambladores con capacidad para procesar macros se denominan Macroensambladores.
Usted dispone de copias de dos traductores de este tipo: el isis-ii 8080/8085 macroassembler y el avmac85. Los macros deben definirse en el programa antes de ser invocados. Con este propsito el ensamblador acepta las siguientes directivas relacionadas
con tal definicin:
Tabla. 7.9. Directivas para control de macros.
MACRO
Definicin de macro.
ENDM
Fin de cuerpo del macro.
LOCAL
Asigna a smbolo alcance local.
REPT
Repetir bloque.
IRP
Repetir indefinidamente.
IRPC
Repetir caracter indefinidamente.
EXITM
Salida del macro antes de ENDM.

Las pseudo instrucciones anteriores corresponden al isis-ii 8080/8085 macroassembler. Si usa el avmac85, a stas las precedes el carcter % (%MACRO, por
ejemplo). La definicin del cuerpo de un macro se inicia con la directiva de ensamblador MACRO a la cual se le asigna: el nombre para llamar el macro y una lista de
parmetros a ser reemplazados durante la expansin del macro. El formato es el siguiente:
nombre

MACRO
{
cuerpo
del
macro

lista de parmetros falsos

}
ENDM

Desarrollo y Simulacin de Programas

410

Si los smbolos que aparecen dentro del cuerpo del macro tienen alcance global, toda llamada al macro, excepto la primera, causar error por duplicacin de definiciones de smbolos. A un identificador o etiqueta puede asignrsele un alcance limitado (dentro del cuerpo del macro) usando la directiva LOCAL, la cual asigna un valor nico para el smbolo cada vez que el macro es llamado y expandido.
Si se desea copiar un grupo de lneas de cdigo dentro de un macro, pueden
usarse las directivas: REPT: repeat block, IRP: Indefinite repeat e IRPC: Indefinite
repeat caracter 1 .
Una vez que el macro es definido puede ser llamad cualquier nmero de veces
en un programa. La llamada consiste del nombre del macro y la lista de parmetros
reales que reemplazaron a los falsos durante la expansin del macro. Durante el proceso de ensamblaje cada llamada a un macro es sustituida por el cdigo en el cuerpo
del macro y los parmetros falsos son reemplazados por los verdaderos. El ensamblador deber encontrar la definicin del macro antes de la primera llamada o generar
un mensaje de error.
Como ejemplo, suponga que en un programa se leen repetidamente datos en
puertos de entrada y se cargan en los registros internos del microprocesador. Sabemos
que los valores en puertos son cargados en el registro acumulador y despus debe
usarse otra instruccin para copiarlos en otro registro interno. El macro PUERTOreg
carga directamente en cualquier registro distinto al acumulador, la informacin presente en un puerto de entrada.

Pdato
EQU 80H
;----------------------------------------------------------------------Definicin de macro PUERTOreg
;----------------------------------------------------------------------PUERTOreg
%MACRO r,PUERTO
IN PUERTO
MOV r,A
%ENDM
;-----------------------------------------------------------------------

Las siguientes instrucciones de llamadas al macro cargarn en el registro B el


contenido del puerto 80H, en C el de 81H, en D el de 82H y en E el de 83H.
;-----------------------------------------------------------------------PUERTOreg B,Pdato
PUERTOreg C,Pdato+1
PUERTOreg D,Pdato+2
PUERTOreg E,Pdato+3
;-----------------------------------------------------------------------

Estas directivas no se discuten. El interesado puede recurrir al manual del isis-ii 8080/8085

411

Desarrollo y Simulacin de Programas

La sintaxis del cdigo corresponde al avmac85. El siguiente ejemplo ilustra


el uso del isis-ii 8080/8085, este ltimo programa muestra claramente en el archivo
de salida .lst, la expansin del macro. Observe el cambio en la sintaxis.
Ejemplo 7.11
Usando el programa isis-ii 8080/8085 obtenga el archivo .lst para el macro
PUERTOreg.
$MACROFILE
; ejem_711.src
;----------------------------------------------------------; Puerto de entrada
;----------------------------------------------------------Pdato
EQU 80H
;----------------------------------------------------------; Definicin de macro
;----------------------------------------------------------PUERTOreg
MACRO r,PUERTO
IN PUERTO
MOV r,A
ENDM
PUERTOreg B,Pdato
PUERTOreg C,Pdato+1
PUERTOreg D,Pdato+2
PUERTOreg E,Pdato+3
END

Ejecute la secuencia de comandos:


C:\ISIS_II\isim85.exe
- attach :f0:=c:
-asm80 ejem_711.src

y obtendr el archivo ejem_710.lst, cuyo contenido se muestra a continuacin:


ASM80 Ejem_7110.SRC
ISIS-II 8080/8085 MACRO ASSEMBLER, V4.1
LOC OBJ
0080
-

MODULE PAGE 1

LINE
SOURCE STATEMENT
1 $MACROFILE
2 Pdato
EQU 80H
3
4
PUERTOreg
MACRO r,PUERTO
5
IN PUERTO
6
MOV r,A
7
ENDM
8

412

Desarrollo y Simulacin de Programas

9
10+
11+
12
13+
14+
15
16+
17+
18
19+
20+
21

0000 DB80
0002 47
0003 DB81
0005 4F
0006 DB82
0008 57
0009 DB83
000B 5F

PUERTOreg B,Pdato
IN Pdato
MOV B,A
PUERTOreg C,Pdato+1
IN Pdato+1
MOV C,A
PUERTOreg D,Pdato+2
IN Pdato+2
MOV D,A
PUERTOreg E,Pdato+3
IN Pdato+3
MOV E,A
END

PUBLIC SYMBOLS
EXTERNAL SYMBOLS
USER SYMBOLS
PDATO A 0080 PUERTO + 0000
ASSEMBLY COMPLETE, NO ERRORS

Observe la declaracin inicial $MACROFILE. Esta es un control de ensamblaje del sistema operativo ISIS-II y seala que el archivo fuente contiene macros.
Esto no es necesario si usa el avmac85. El hecho que el macro PUERTOreg sea llamado cuatro veces implica que este ser expandido, con parmetros distintos, igual
nmero de veces. Las instrucciones que resultan de la expansin se muestran con el
caracter (+) al final del nmero de lnea. Es apreciable adems que la definicin de
macro no genera cdigo objeto.
Como otro ejemplo de aplicaciones de macros, considere el problema de control de trfico urbano suministrado como asignacin y cuya interseccin se repite en
la figura 7.84. El sistema de control se disea de modo que las luces se controlen por
medio del byte escrito en el puerto de salida 10H. El nibble de orden alto controla las
luces en direccin NS, mientras que el de orden bajo se usa para las luces en direccin EO, de acuerdo a la siguiente secuencia.
Tabla. 7.10. Estados de las luces.
P10.7

P106

P10.7

Norte-Sur
0
0
0
0
0
0
0
0
1
0
0
1

P10.4

0
1
0
1

Estado de las luces

Apagadas
Rojo
mbar
Verde

P10.3

0
0
0
0

P10.2

P10.1

Este-Oeste
0
0
0
0
0
1
0
1

P10.0

0
1
0
1

413

Desarrollo y Simulacin de Programas

Fig.7.82.Interseccin vial simple

En la figura 7.83 se muestra un flujo grama para el ciclo principal de cambio


de luces, considerando la presencia de vehculos en ambas avenidas.

INICIO

ns en verde
eo en rojo

ns en rojo
eo en verde

esperar
20
segundos

esperar
15
segundos

ns en amarillo

eo en amarillo

esperar
5
segundos

esperar
5
segundos

Fig. 7.83 Secuencia para el cambio de luces con circulacin continua de en ambas direcciones.

Desarrollo y Simulacin de Programas

414

El cdigo presentado a continuacin usa macros para resolver el problema de


control de una interseccin bsica.
;------------------------------------------------------------------------------------------------------------; Iniciar secuencia
;------------------------------------------------------------------------------------------------------------ciclo:
PONluz
ns,verde
; Permitir paso en direccin norte-sur
PONluz
eo,roja
; Prohibir circulacin en direccin este-oeste
ESPERAR
20
; Esperar 20 segundos
;------------------------------------------------------------------------------------------------------------; Cambiar luces
;------------------------------------------------------------------------------------------------------------PONluz
ns,ambar
ESPERAR
5
PONluz
ns,roja
PONluz
eo,verde
ESPERAR
15
;------------------------------------------------------------------------------------------------------------; Cambio para repetir ciclo luces
;------------------------------------------------------------------------------------------------------------PONluz
eo,ambar
ESPERAR
5
REPETIR
ciclo

Como ilustracin se programa el macro PONluz dir,color. El macro ESPERAR


se omite por tratarse de una asignacin.
;------------------------------------------------------------------------------------------------------------;Control de trafico
;------------------------------------------------------------------------------------------------------------luz
equ 10h
nsbits
equ 4
eobits
equ 0
noluz
equ 0
rojo
equ 1
ambar
equ 2
verde
equ 3
;------------------------------------------------------------------------------------------------------------; Macro PONluz dir,color
;------------------------------------------------------------------------------------------------------------PONluz MACRO
dir,color
mvi
a,color shl dir&bits
out
luz
ENDM
;------------------------------------------------------------------------------------------------------------; Macro ESPERAR segundos
;--------------------------------------------------------------------------------------------------------------ESPERAR
MACRO
segundos
{ Cuerpo
del
macro }
ENDM

415

Desarrollo y Simulacin de Programas

;------------------------------------------------------------------------------------------------------------; Macro REPETIR destino


;------------------------------------------------------------------------------------------------------------REPETIR MACRO
destino
jmp
destino
ENDM

En la declaracin mvi a,color shl dir&bitss la cadena dir es sustituida por ns


(nsbitss) o eo (eobitss) segn la direccin sea norte-sur o este-oeste.

7.6 TABLAS DE CONSULTA (LOOKUP TABLES)


Es usual que el microprocesador sea usado para convertir datos desde un
dominio a otro. En un dominio todas las unidades son iguales, por ejemplo todas las
velocidades en Km/h o todas las temperaturas en C. Si se requiere convertir una cadena de caracteres ASCII a binario, el P solo debe realizar una operacin de enmascaramiento, seguida de una rotacin y una suma. Para convertir de grados Centgrados a Fahrenheit, basta con que el procesador realice una multiplicacin y una suma:
F = 9/5 x C + 32

C = 5/9 x (F 32)

En estos casos el proceso de conversin entre dominios se reduce a aplicar


una funcin matemtica conocida. En otros, el procedimiento no es directo. Observe
la tabla 7.11, donde se muestra la relacin existente entre un dgito hexadecimal y el
cdigo usado con un indicador de 7 segmentos de ctodo comn. Note la complejidad
de la relacin.
Fig. 7.11 Cdigo de 7 segmentos
Dgito binario
Cdigo 7-Segmentos
Binario
hex
gfedcba
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

0111111
0000110
1011011
1001111
1100110
1101101
1111101
0000111
1111111
1100111
1110111
1111100
0111001
1011110
1111001
1110001

3FH
06H
5BH
4FH
66H
6DH
7DH
07H
7FH
67H
77H
7CH
39H
5EH
79H
71H

Desarrollo y Simulacin de Programas

416

Fig. 7.84 Cdigo de 7 segmentos para un indicador con ctodo comn

El bits D6 corresponde al segmento g y D0 al segmento a. El bits ms significativo D7 se asume cero. Un nivel uno activar el segmento y un cero lo apagar. En
lugar de intentar encontrar una expresin de la relacin entre el nmero binario y el
patrn de siete segmentos, se recurre a una tabla de consulta para realizar la conversin. La tabla contendr el arreglo de unos y ceros que se requieren para presentar
todos los nmeros. Una rutina capaz de realizar la conversin desde binario a siete
segmentos es la siguiente.

dig:

salir:
bin7seg:

org 100h
lxi sp,300h
lxi h,150h
mvi b,255
inr b
mov a,b
cpi 16
jz salir
call bin7seg
mov m,a
inr l
jmp dig
hlt

; B contiene el dgito a convertir


; Si dgito F parar
; Convertir digito a 7 segmentos
; Guardar cdigo en memoria

push h
lxi h,tabla
add l
mov l,a
mov a,m
pop h
ret
; ----------------------------------------------------------------------------------; Tabla de conversin
; ----------------------------------------------------------------------------------; la tabla se inicia en la direccin 200h
org 200H
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db 7fh,67h,77h,7ch,39h,5eh,79h,71h
end

Desarrollo y Simulacin de Programas

417

El programa carga en forma secuencial, iniciando en cero, en el registro B los


dgitos hexadecimales, encuentra el cdigo siete segmentos correspondientes y lo
almacena en memoria a partir de la direccin 150H. En la prctica esta conversin se
realiza para presentar informacin BCD en pantallas con dispositivos de 7 segmentos
conectados a puertos del sistema. Un simulador llamado Simulador de 8085 y creado
en el Departamento de Arquitectura y tecnologa de Computadores de la Universidad
de Granada en Espaa permite simular el programa de conversin. En la figura 7.85
se muestra el hardware para presentacin.

Fig. 7.85 Visualizadores del simulador conectados a los puertos 00H-07H.

El programa de conversin usa el indicador ms la derecha de la figura 7.85,


el cual est conectado al puerto de salida 9. Los dgitos desde 0 hasta F se presentan
en el display y al final el programa se detiene. La simulacin del cdigo fue realizada
en forma correcta. En la prctica se requiere un lapso de al menos un segundo entre
presentaciones. Esto no es necesario para la simulacin porque usando el men Opciones\De ejecucin de la barra de herramientas del programa de emulacin, puede
ajustarse al velocidad del P para hacer visible la presentacin de los dgitos. La figura 7.86 muestra la ventana principal del programa durante la simulacin.
El Simulador de 8085 no fue presentado en la seccin 7.4, pero es una herramienta til para la simulacin de programa. El sistema emulado tiene puertos de entrada con interruptores y teclado y puertos de salida con LEDs e indicadores de siete y
de quince segmentos, adems ofrece pantallas de texto y grficas monocromticas y a
colores, asociadas con reas especficas de memoria. Esta herramienta es fcil de usar
y es acompaada con manual de usuario, gua para el ensamblador y algunos ejemplos.

Desarrollo y Simulacin de Programas

Fig. 7.86 Ventana del simulador.

418

Desarrollo y Simulacin de Programas

419

La tcnica de tablas de bsqueda puede usarse en aplicaciones donde una conversin deba realizarse en el menor tiempo posible, o para realizar conversiones
cuando no exista una relacin analtica conocida entre los datos a convertir. Por ejemplo es usual el uso de tablas en lugar de series para el clculo de funciones como seno, coseno o tangente de un ngulo, el logaritmo natural de un nmero o conversin
entre cdigos.
Si una tabla de consulta se utiliza para determinar el seno y coseno de un ngulo, est puede tener 90, 180 360 entradas, esto depende de la complejidad de la
subrutina que realice el acceso a la tabla, de la velocidad a la cual debe ejecutarse la
conversin, de la cantidad de memoria disponible para almacenar los datos de la tabla
y de la precisin deseada para el resultado. Si la tabla de datos tiene 90 entradas, cada
elemento representar el seno de un ngulo entre 0 y 90 grados o entre 0 y 360 grados con una diferencia de 4 grados entre entradas. Con una tabla de bsqueda de 90
entradas que representen el seno de ngulos entre 0 y 90 grados, puede determinarse
el seno y coseno de cualquier ngulo. Esto implica llevar todos los ngulos a sus correspondientes en el primer cuadrante y asignar el signo del seno y coseno.
Aunque la relacin entre grados centgrados y grados Fahrenheit es bien conocida, el tiempo para que el P convierta de una temperatura a otra usando rutinas
que ejecuten clculos matemticos, puede ser demasiado largo en algunas aplicaciones. En estos casos el uso de tablas puede imprimir velocidad al proceso de conversin.
Ejemplo 7.12
Se requieren dos rutinas que usen tablas de consulta para realizar la conversin desde grados Centgrados a Fahrenheit y viceversa. El rango es entre 0 C y 100
C y debe evaluarse la temperatura con un grado de diferencia.
La siguiente rutina realiza la conversin del valor en C cargado en el acumulador a F y lo almacena en la direccin 150h. Se usa una tabla de 101 entradas.
; Conversin de Centigrados a Fahrenheit
;---------------------------------------------------------------------------------------------------------------tempf equ 150h
org 100h
lxi sp,200h
call gcaf
sta temp
hlt
;---------------------------------------------------------------------------------------------------------------gcaf:
lxi h,tabla
add l
mov l,a
mov a,m
ret

Desarrollo y Simulacin de Programas

tabla:

420

org 200h
db 32,34,36,37,39,41,43,45,46,48,50,52
db 54,55,57,59,61,63,64,66,68,70,72,73
db 75,77,79,81,82,84,86,88,90,91,93,95
db 97,99,100,102,104,106,108,109,111,113,115,117
db 118,120,122,124,126,127,129,131,133,135,136,138
db 140,142,144,145,147,149,151,153,154,156,158,160
db 162,163,165,167,169,171,172,174,176,178,180,181
db 183,185,187,189,190,192,194,196,198,199,201,203
db 205,207,208,210,212
end

;----------------------------------------------------------------------------------------------------------------

Para convertir desde F a C, se usa una tabla de 181entradas (212-32+1) la


temperatura de entrada en Fahrenheit no se suma simplemente a la direccin base
como en el caso anterior, es necesario restar al contenido del acumulador el valor 32.
Observe el cdigo a continuacin.
; Conversin de Fahrenheit a Centigrados
;---------------------------------------------------------------------------------------------------------------tempc
equ 150h
org 100h
lxi sp,300h
call gfac
sta tempc
hlt
gfac:
lxi h,tabla
sui 32
add l
mov l,a
mov a,m
ret
org 200h
tabla:

db 0,1,1,2,2,3,3,4,4,5,6,6
db 7,7,8,8,9,9,10,11,11,12,12,13
db 13,14,14,15,16,16,17,17,18,18,19,19
db 20,21,21,22,22,23,23,24,24,25,26,26
db 27,27,28,28,29,29,30,31,31,32,32,33
db 33,34,34,35,36,36,37,37,38,38,39,39
db 40,41,41,42,42,43,43,44,44,45,46,46
db 47,47,48,48,49,49,50,51,51,52,52,53
db 53,54,54,55,56,56,57,57,58,58,59,59
db 60,61,61,62,62,63,63,64,64,65,66,66
db 67,67,68,68,69,69,70,71,71,72,72,73
db 73,74,74,75,76,76,77,77,78,78,79,79
db 80,81,81,82,82,83,83,84,84,85,86,86
db 87,87,88,88,89,89,90,91,91,92,92,93
db 93,94,94,95,96,96,97,97,98,98,99,99
db 100
end
;----------------------------------------------------------------------------------------------------------------

421

Desarrollo y Simulacin de Programas

Ejemplo 7.13
Un programa debe calcular el seno y el coseno de un ngulo en el rango de
0 a 360. El valor de se carga en el registro BC y el sen() y el cos() deben salvarse en los registros de 16 bits BC y DE, respectivamente. El signo del sen/cos lo indicar el bit ms significativo del registro par B/D.
Use una tabla de consulta que registre, con incrementos de un grado, los valores del seno o coseno del ngulo para en el cuadrante I.
Por ejemplo:
5000 sen (30)

8660 sen (60)

Para determinar el valor del seno y el coseno se usar una tabla de bsqueda
con 91 entradas, la cual contiene el seno de los ngulos entre 0 y 90 multiplicados
por 10000. Para encontrar el coseno de se usa la relacin trigonomtrica de ngulos
complementarios:
cos() = sen (90 D )

Adems es necesario trasladar los ngulos en el rango 90 < 360 hacia el


primer cuadrante. La tabla siguiente muestra las relaciones necesarias y el signo de
las funciones para cada cuadrante.
Tabla. 7.12. Signos de sen y cos por cuadrantes.
Cuadrante
Relacin
sen()

cos()

II

=180 -

III

= - 180

IV

=360 -

El cdigo consta de un programa principal el cual determina el cuadrante en


el cual se ubica el ngulo, realiza la traslacin si es necesario y llama una rutina calc
la cual encuentra el seno y el coseno de. Tambin se llama a dos subrutinas senneg y
cosneg que colocan el signo negativo a las funciones cuando corresponda.
;--------------------------------------------------------------------------------------------------------------------------; Programa principal
;--------------------------------------------------------------------------------------------------------------------------defseg prog
seg prog
; ngulo en grados en registro BC
sencos:
lxi sp,0200h
lxi h,tbsenx
mov a,b
; byte de orden alto del ngulo a B
cpi 1
; ngulo es mayor de 255 grados

422

Desarrollo y Simulacin de Programas

cuad23:

III:

III_IV:

IV:

salir:

jz III_IV
mov a,c
cpi 90
jnc cuad23
call calc
jmp salir
cpi 180
jnc III
mvi a,180
sub c
call calc
call cosneg
jmp salir
sui 180
call calc
call senneg
call cosneg
jmp salir
mov a,c
cpi 14
jnc IV
adi 76
call calc
call senneg
call cosneg
jmp salir
mvi a,104
sub c
call calc
call senneg
hlt

; si, ubicar el cuadrante entre el 3 4


; ngulo no mayor de 255 grados
; teta est en cuadrante 1?
; si, extraer seno de la tabla
; no, probar si est en cuadrante 2 3
; si, est en cuadrante 3, pasar a cuadrante 1
; no, est en el cuadrante 2...
; pasar a cuadrante 1
; extraer seno de la tabla
; coseno negativo
; de cuadrante 3 al 1
; extraer seno de la tabla
; seno negativo
; coseno negativo
; si, en el cuadrante 3 o 4
; probar entre cuadrantes 3 4
; teta est en el cuadrante 4
; teta en el 3, pasar al cuadrante 1
; extraer seno/cos de la tabla
; seno negativo
; coseno negativo
; pasar de cuadrante 4 al 1
; seno negativo

;---------------------------------------------------------------------------------------------------------------; Subrutina CALC de bsqueda en la tabla


;---------------------------------------------------------------------------------------------------------------calc:
mvi b,2
mov c,a
ccos:
add a
; extraer seno/cos de la tabla
add l
mov l,a
mov e,m
inx h
mov d,m
dcr b
jz retor
push d
mvi a,90
sub c
lxi h,tbsenx
jmp ccos
retor:
pop b
; BC contiene el senx y DE el cosx
ret

Desarrollo y Simulacin de Programas

423

;--------------------------------------------------------------------------------------------------------------------------; Subrutina SENNEG para colocar el signo negativo al seno


;--------------------------------------------------------------------------------------------------------------------------senneg:
mov a,b
; seno negativo
cpi 0
jz oks
ori 80h
mov b,a
oks:
ret
;--------------------------------------------------------------------------------------------------------------------------; Subrutina COSNEG para colocar el signo negativo al coseno
;--------------------------------------------------------------------------------------------------------------------------cosneg:
mov a,d
; coseno negativo
cpi 0
jz okc
ori 80h
mov d,a
okc:
ret
defseg datos,start=100H
seg datos
;--------------------------------------------------------------------------------------------------------------------------; Tabla de senos.
;--------------------------------------------------------------------------------------------------------------------------tbsenx:
dw 0000,0175,0349,0523,0698,0872,1045,1219,1392,1564
dw 1736,1908,2079,2250,2419,2588,2756,2924,3090,3256
dw 3420,3584,3746,3907,4067,4226,4384,4540,4695,4848
dw 5000,5150,5299,5446,5592,5736,5878,6018,6157,6293
dw 6428,6561,6691,6820,6947,7071,7193,7314,7431,7547
dw 7660,7771,7880,7986,8090,8192,8290,8387,8480,8572
dw 8660,8746,8829,8910,8988,9063,9135,9205,9272,9336
dw 9397,9455,9511,9563,9613,9659,9703,9744,9781,9816
dw 9848,9877,9903,9925,9945,9962,9976,9986,9994,9998
dw 10000
end

Interpolacin
En algn caso puede ser necesario usar tablas de consulta reducidas y recurrir
a la tcnica de interpolacin para determinar la funcin para valores que no son entradas de la tabla. En general el uso de interpolacin mejora la precisin de la determinacin de la funcin.
Cuando la relacin entre dos variables es marcadamente no lineal, la curva
puede ser aproximada por una secuencia de segmentos de lneas rectas. En aquellas
regiones de curvatura moderada los segmentos de lneas pueden ser ms largos. Conocido entonces un valor para la variable independiente, el valor de la funcin puede
ser encontrado por interpolacin lineal sobre el segmento correspondiente.

Desarrollo y Simulacin de Programas

424

Fig. 7.87 El valor de y para la entrada x puede calcularse por interpolacin

Para un valor x cualquiera de la variable independiente, la salida correspondiente puede calcularse de,
y=

y i y i 1
( x x i 1 ) + y i 1
x i x i 1

Usando interpolacin en la tabla del ejemplo anterior mejora la precisin a


0.1, suficiente para la mayora de los problemas de triangulacin en navegacin.
Suponga que un intervalo de un grado es suficientemente cercano para considerar un
comportamiento lineal y desea determinar el seno de 60.25 grados. Como el valor de
la funcin para 60 y 61 grados, entonces:

y=

sen (61D ) sen (60 D )


D

61 60

( x 60 D ) + sen (60 D )

y = sen (61D ) sen (60 D ) (60.25 D 60 D ) + sen (60 D )


y = 0.8681739796
y calc = 0.8681989814
Error = 2.4834 10 5

Al contrastar el valor dado por la interpolacin y el obtenido de una calculadora, se obtiene un error despreciable. El proceso implica una multiplicacin y una divi-

Desarrollo y Simulacin de Programas

425

sin y conviene redondear el cociente despus de la divisin. El redondeo en el sistema binario se realiza de igual forma que en el decimal. Se examina el bit ms significativo de la parte fraccionaria y si es igual a uno se lleva el valor al inmediato superior. Para hacer visible la parte fraccionaria se multiplica el numerador por dos y se
ejecuta la divisin. Si el bit menos significativo del cociente es uno, se divide el resultado por dos y se incrementa en uno. Si este bit es cero slo se realiza la divisin por
dos.
En aplicaciones de instrumentacin que usan transductores con relacin no lineal entre la entrada y el voltaje equivalente, la variable x corresponde a la salida de
un convertidor analgico digital mientras que la variable dependiente y puede ser
temperatura o cualquier otra magnitud fsica. El uso de una tabla de bsqueda con
interpolacin es el procedimiento a usar para convertir a C la tensin a la salida del
sensor. El cdigo para interpolacin no conlleva complicacin alguna y su escritura se
deja al estudiante como ejercicio.

Tcnicas de gestin de Entrada y Salida

426

cnicas de Gestin de E/S


TT
Un funcionamiento adecuado de un sistema basado en P est ntimamente relacionado con el diseo del soporte fsico y lgico que controla la comunicacin entre
la CPU y los dispositivos de E/S conectados al sistema. Se precisa garantizar que una
operacin de lectura o escritura de E/S resulte en la recepcin o en la transmisin a
travs del bus de datos de la informacin correcta en el instante justo. Una seleccin
inadecuada del circuito de interconexin que permite que el procesador pueda comunicarse con el mundo exterior, o de la tcnica usada en la rutina de transferencia, puede degradar significativamente el comportamiento del sistema durante el proceso de
comunicacin. Debido a que es comn que el P debe intercambiar grandes cantidades de informacin con varios perifricos que operan a distintas velocidades velocidad, mltiples consideraciones debe realizar el tcnico, para el diseo de la seccin
de E/S de una aplicacin especfica.
Las caractersticas operacionales del perifrico conectado al sistema, determina cuan complejo es el circuito de interconexin, pudiendo requerirse desde simples registros y/o buffers de tres estados hasta circuitos LSI programables de propsito general. En este ltimo caso, se le exige a la estructura de E/S cierta versatilidad,
que incluye desde la posibilidad de programacin de los registros de entrada y salida
o de bits especficos de cada puerto hasta la capacidad de establecer dilogos bajo
control de interrupciones generadas por el perifrico. Los trminos dispositivos para
Interconexin Perifrica Programable (PPI), Adaptador para Interconexin Perifrica
(PIA), Adaptador para Interconexin Verstil (VIA), y Unidad de E/S programable
(PIO), identifican algunos de los componentes integrados programables de E/S ofrecidos por empresas fabricantes de circuitos digitales.
El desarrollo del programa que controla el acceso al perifrico es una fase del
diseo que requiere tanta atencin como la seleccin del circuito de puerto, esto debido a que en algunas aplicaciones no solo es necesario seleccionar el puerto y ordenar

Tcnicas de gestin de Entrada y Salida

427

la transferencia, sino que se requiere algn tipo de control del propio perifrico conectado al puerto.
Si se adopta la estrategia de realizar la mayor parte de las funciones de control de la comunicacin por programa, se reduce el nmero de circuitos necesarios
para construir el puerto, pero es necesaria una gran cantidad de lneas de cdigo para
escribir las rutinas de control. En este caso, es vital verificar que el P es capaz de
manejar esta carga computacional. La cantidad de tiempo que el CPU destina a procesar la informacin proveniente del exterior y la velocidad con la cual el perifrico
requiere la entrega de los resultados, son tambin factores que pueden hacer inapropiada la seleccin de una solucin por programa para el control de la comunicacin.
El uso de dispositivos programables para interconexin perifrica simplifica en forma
significativa la complejidad del programa debido a que muchas de las funciones de
control son realizadas por el circuito integrado, el cual es capaz de admitir y procesar
seales de interrupcin generadas por el perifrico cuando necesita servicio de parte
del CPU.
Una aplicacin de simple en extremo donde el proceso de comunicacin se
reduce a la transmisin/recepcin incondicional de un byte portador de algn tipo de
informacin significativa, puede ayudar a entender lo establecido en el prrafo anterior. Suponga que por medio de un arreglo de 8 interruptores lgicos se introduce
informacin al C, con los datos se realiza algn tipo de clculo y se entrega el resultado a un puerto de salida donde se conectan 8 indicadores luminosos.
La seleccin de los circuitos de interconexin en este caso es directa: para el
puerto de entrada es suficiente con conectar los interruptores al bus de datos del P
por medio de un CI de tres estados del tipo 74LS244, considerando que no es necesario que el circuito de puerto tenga capacidad de almacenamiento. Para el puerto de
salida, debido a que los datos enviados por el P a un puerto determinado permanecen en el bus de datos un espacio muy corto de tiempo, los perifricos de salida generalmente exigen que la informacin sea retenida por el circuito de interconexin
despus que culmina la operacin de escritura en puerto. En el caso que se discute,
para presentar y mantener el resultado numrico en los diodos luminosos el puerto de
salida puede consistir en un registro de almacenamiento paralelo como el 74LS373.
La ausencia en el ejemplo de condiciones para la transferencia se refiere a que
no es necesario el establecimiento de algn tipo de conversacin o dialogo entre el P
y el puerto antes, durante o despus de la transferencia. El cdigo necesario para el
manejo del puerto de entrada se reduce al uso de la instruccin IN puerto. Cuando
sta se ejecute el decodificador de direcciones del sistema activar la seal de seleccin del puerto conectada a las entradas de control del 74LS244, y el estado de los
interruptores se transferir al acumulador a travs del bus de datos. En el caso del
puerto de salida, cuando se ejecuta una instruccin OUT puerto el contenido del
acumulador pasa bus de datos y a la entrada del 74LS373. La lnea de habilitacin

Tcnicas de gestin de Entrada y Salida

428

del chip proveniente del circuito de decodificacin del sistema y conectada al reloj
del CI se encarga de transferir la informacin a la salida del registro, mantenindose
el estado de los diodos hasta que sean cambiados por una nueva operacin de escritura. El intercambio de datos entre el P y un puerto no siempre es tan sencillo como
ilustra el ejemplo anterior, en el caso de perifricos cuyo modo de funcionamiento es
relativamente complejo, es fundamental establecer un protocolo de comunicacin
para sincronizar la transferencia de datos entre el P y los dispositivos, e incluso entre perifricos y otras unidades del sistema. En tales casos, puedes ser necesario que
el P detecte si un dispositivo determinado est en disposicin de transmitir o recibir
datos, y adems debe sincronizar la transferencia correcta de la informacin. Un caso
tpico en donde la transferencia de datos est sujeta a condiciones impuestas por el
perifrico, es cuando la comunicacin se realiza con perifricos lentos, que no son
capaces de mantener el intercambio de datos a la alta velocidad impuesta por la frecuencia de operacin del P.
Una vez seleccionado el hardware que conforma el puerto y realizada la conexin a los buses del sistema, se requiere establecer la estrategia a usar para la gestin de la informacin que el P enva a o recibe desde los puertos de E/S. No siempre la informacin que entra o sale del sistema es compatible con el tipo de seal
comprensible por el microprocesador o por el dispositivo de E/S. En estos casos el
puerto debe proveer elementos que permitan la adaptacin. Tales elementos pueden
consistir de circuitos desplazadores de nivel para aumentar, disminuir o cambiar la
polaridad de la tensin de entrada o salida de acuerdo con las caractersticas elctricas
del sistema o del perifrico. Puede ser necesario tambin el uso de convertidores analgico digital y digital analgico para modificar la naturaleza de la seal de entrada o
salida.
Es posible tambin que la informacin acceda a un puerto a una velocidad y lo
abandone a otra. Una memoria RWM, por ejemplo, puede operar en forma rpida y
soportar una velocidad alta. Pero las unidades controladoras de discos flexibles son,
por su naturaleza electromecnica, lentas e incapaces de entregar o aceptar datos a
frecuencias elevadas como a la que funciona el P. En estos casos la estructura de
E/S debe proveer algn tipo de almacenamiento intermedio para el intercambio correcto de informacin entre el puerto y el sistema.
Algunos perifricos requieren establecer un dialogo con el sistema. En este tipo de comunicacin asincrnica, el P y el dispositivo externo debern indicarse uno
a otro, por medio de un protocolo de enlace, cuando la informacin est lista para ser
transferida, y cuando el receptor est listo para recibir datos. Por ejemplo, si el sistema est enviando 8 bits de datos en paralelo a una impresora, inicialmente carga el
puerto y avisa al dispositivo de salida que los datos estn listos. La impresora lee el
puerto de control, e indica al procesador que est disponible para recibir ms datos,
el P cargar el puerto con el prximo dato y el proceso se repite. El P puede entregar a la impresora ms caracteres por segundo, que los que sta puede imprimir, el
dialogo adapta la velocidad del P a la de la impresora. Es obvio que si la impresora

Tcnicas de gestin de Entrada y Salida

429

no imprime la palabra recibida desde el sistema antes que arribe el prximo dato,
habr prdida de informacin.
Un puerto de E/S deber estar en capacidad de recibir seales relativamente
deterioradas y de enviar seales de suficiente amplitud para que lleguen al perifrico
destino sin degeneracin apreciable. De modo que el puerto de E/S debe ser capaz de
cambiar la amplitud de las seales de control e informacin para cumplir con los requisitos del P, y de los perifricos remotos. El uso de buffers garantiza que los dispositivos conectados a los buses del sistema no signifiquen una carga excesiva cuando el dispositivo est activo. Esto es particularmente importante cuando varios puertos de salida son conectados al bus de datos, debido a la carga acumulativa que implica esta situacin. Como dos puertos de entrada no pueden manejar simultneamente
el bus, los buffers de entrada ser tri-estados.
Finalmente, un problema serio durante la transmisin de seales es la interferencia por ruido, el cual puede ser debido a fuentes externas, a lneas de potencia situadas en la proximidad del sistema, o a electricidad esttica. Es importante que el
puerto este en capacidad de limpiar la seales que entran al sistema, el uso de amplificadores con histresis, permiten ejecutar esta funcin.
En conclusin, la conexin de un perifrico al C requiere:

El uso de un puerto de E/S, y dependiendo de la naturaleza de las seales aceptadas o entregadas por el dispositivo externo, puede ser necesario un circuito de interconexin para
acondicionar las seales que entran o salen del CPU.

Una tcnica de gestin apropiada.

Existen tres tcnicas principales de gestin para establecer comunicacin entre


un perifrico y el P, stas son:
1. E/S por programa.
2. E/S usando interrupciones.
3. Acceso directo a memoria (DMA)

8.1 ENTRADA Y SALIDA POR PROGRAMA


La entrada y salida de datos de los dispositivos de E/S estn sincronizadas por
el programa en ejecucin. Toda transferencia de informacin entre el P y un puerto
es consecuencia de la ejecucin de una instruccin de E/S. Existen dos modos de realizar la E/S por programa: en la primera, el P lee o escribe en el puerto sin consultar
la disponibilidad del perifrico para aceptar o recibir los datos. Ejemplos de esta modalidad es la lectura de un arreglo de interruptores, la activacin de un indicador luminoso o la generacin de una palabra de configuracin para un circuito de E/S pro-

Tcnicas de gestin de Entrada y Salida

430

gramable. En estos casos es responsabilidad del programa realizar todas las operaciones necesarias para una correcta entrada o salida de datos. Por ejemplo, si se presenta
informacin numrica en una pantalla multiplexada de indicadores de 7 segmentos,
ser responsabilidad del cdigo transmitir los datos a la velocidad adecuada para que
stos sean visibles. La puesta en prctica del modo de gestin requiere circuitos de
poca complejidad y al ser una tcnica sincrnica, se sabe el momento exacto en el
cual la. CPU atiende al perifrico y el tiempo usado en ejecutar la rutina de servicio.
El siguiente ejemplo usa E/S por programa en el primer modo para comunicar
al procesador con dispositivos externos
Ejemplo 8.1
En la figura 8.2 se muestra un arreglo de ocho interruptores lgicos conectado
al puerto de entrada 16 y un indicador de siete segmentos en el puerto de salida 17. Se
deben escribir dos programas que:
1. Cuando un interruptor sea presionado y liberado, se presente en el indicador el nmero del pulsador.
2. Muestre el nmero de veces que S5 es activado. El programa debe parar la
dcima vez.
Tome en consideracin el efecto de rebote de los pulsadores.

Un dispositivo de entrada de uso comn en aplicaciones de control, son interruptores mecnicos como los mostrados en la figura 8.1. Cuando stos se incluyen en
un diseo debe prestarse especial cuidado al efecto de rebote de contactos

(a)

(b)

Fig. 8.1. (a) Interruptor deslizante. (b) Pulsador.

Considerando una escala microscpica, la superficie de los contactos no es lisa sino que est formada por elevaciones y depresiones y minsculos promontorios
originados por las chispas de las continuas conmutaciones. Los interruptores usualmente son diseados para que al ser activados, un contacto se ubique sobre el otro.
Esta accin libera partculas microscpicas de oxido y corrosin de modo que ocurren muchos cierres y aperturas de contactos antes que el interruptor se establezca en
la condicin de cerrado. En interruptores que usen resortes, el impacto mecnico de la
tensin de esta parte puede producir rebotes antes que el contacto real ocurra.

Tcnicas de gestin de Entrada y Salida

Fig.8.2 Puertos de E/S para el ejemplo 8.1.

431

Tcnicas de gestin de Entrada y Salida

432

Es claro que si los interruptores son usados como entradas en circuitos digitales se requiere un contacto limpio sin los indeseables rebotes que sugieren que el dispositivo ha sido accionado varias veces en lugar de una vez. La forma de onda generada durante el accionamiento de un interruptor convencional, se presenta en la figura
8.3. Durante el cierre del pulsador ocurren rebotes intermitentes durante 5-25 ms y en
la apertura este tiempo se reduce a 2-8 ms. La duracin indicada para el rebote es un
estimado y depende fuertemente de la calidad y tiempo de uso del dispositivo. En
pulsadores de costo elevado se usan contactos con un bao de oro para disminuir el
oxido y la corrosin.

Fig. 8.3. Efecto del rebote de contactos en un interruptor mecnico.

El uso de pulsadores o teclas de bajo costo en aplicaciones de microprocesadores es factible siempre y cuando se tomen medidas para suprimir el efecto de rebote. En la prctica la intermitencia de contactos pude ser eliminada con circuitos o por
programa. Si se tiene un interruptor SPDT, el circuito de la figura 8.4 es ideal para
esta funcin.

Fig.8.4. Un biestable con puertas NAND suprime el efecto de rebote en un interruptor SPDT.

Tcnicas de gestin de Entrada y Salida

433

En el flanco de cada del primer rebote, la salida D0 es llevada a uno o cero


dependiendo de la posicin del interruptor. Cualquier rebote posterior no tiene efecto
sobre la salida.
En pulsadores e interruptores del tipo SPST, el circuito de la figura 8.4 no
puede ser utilizado. Para eliminar la accin de rebote en estos dispositivos pueden
usarse varios mtodos, el primero de los cuales se muestra en la figura 8.5.

Fig.8.5. Supresin del rebote de un pulsador.

El capacitor en la figura 8.5 est normalmente cargado a 5 V produciendo un


nivel lgico alto en D0. Cuando el pulsador es activado, el capacitor es conectado a
tierra a travs del resistor de 390. La constante de tiempo del circuito RC se elige de
tal manera que los pulsos de rebote no afecten significativamente el proceso de descarga como ilustra la parte izquierda de la figura 8.7, de modo que D0 cae a estado
bajo. La apertura del pulsador inicia de nuevo la carga del capacitor como muestra la
figura 8.7. Observe que el cierre y apertura del interruptor slo ocurre una vez. La
figura 8.7 superpone la seal de rebote, con duracin de 5 ms, a la onda real en el
terminal D0. La duracin y la separacin de los pulsos de rebote corresponden a un
interruptor real.
Otro mtodo de eliminacin de la intermitencia en los contactos es usar un
multivibrador monoestable que produzca un pulso con una duracin mayor al tiempo
de rebote. Un chip circuito integrado del tipo 74LS121 puede usarse con tal propsito.
Finalmente, un circuito antirebote prctico puede construirse combinando una
red RC y un disparador de Schmitt, como ilustra la figura 8.6. En este caso la salida es
el complemento lgico de la entrada: cuando el interruptor est liberado, la salida es

Tcnicas de gestin de Entrada y Salida

434

cero lgico y al ser presionado sube a estado uno. Cuando el pulsador es activado el
voltaje del capacitor se descarga rpidamente. Cuando esta tensin cae por debajo del
umbral inferior de histresis VT-, la salida conmuta a nivel alto hasta cuando el interruptor es desactivado. En este momento el capacitor vuelve a cargarse y cuando el
voltaje sube por encima de VT+, la salida del 74LS14 cae a cero lgico. La salida es
un pulso en nivel alto, totalmente limpio.

Fig.8.6. Circuito antirebote con disparador de Schmitt.

La eliminacin de la accin de rebote por hardware se recomienda cuando


existen pocos interruptores en la aplicacin. Para muchos pulsadores o un teclado es
preferible usar el programa para suprimir el rebote de contactos. El cdigo necesario
es una rutina que retardo que espere hasta cuando los contactos del interruptor han
dejado de rebotar. Para resolver el ejemplo 8.1 se usar esta tcnica. A continuacin
se presenta la solucin al primer apartado del ejemplo 8.1.
Solucin parte 1:
Esta parte del ejemplo 7.8 pide que luego de activado un interruptor se espere
su liberacin para presentar el nmero del pulsador en el indicador. Si el rebote al
cierre no es suprimido, el P tomar el rebote como la desactivacin del dispositivo
y lo identificar sin esperar la apertura real.
El programa se realiz suponiendo que no ocurren cierres simultneos de dos
o ms de los ocho interruptores. El diagrama de flujo para el cdigo del ejemplo puede verse en la figura 8.8.
Se supone una duracin de 10 ms para el transitorio del rebote de contactos.
Debido a que el nmero con el cual se identifica el interruptor es un valor binario,
ste debe convertirse al cdigo adecuado para presentarse en el indicador de siete
segmentos antes de ser escrito en el puerto de salida 17. El cdigo consta del programa principal y dos subrutinas: una para el retardo de 10 ms y la otra para la conversin, como se aprecia en la figura 8.9.

Tcnicas de gestin de Entrada y Salida

435

Fig.8.7. Formas de ondas resultado de la simulacin del circuito antirebote de la figura 8.5. En t=0 se cierra/abre el interruptor el cual estaba abierto/cerrado en t=0-.

Tcnicas de gestin de Entrada y Salida

436

Fig.8.8. Flujograma para identificar el interruptor activado y presentar su nmero, una vez liberado.

Tcnicas de gestin de Entrada y Salida

Fig.8.9. Ventana principal de Microide con el proyecto del ejemplo 8.1

;------------------------------------------------------------------------------------------------------; Ejemplo 8.1


;------------------------------------------------------------------------------------------------------; Programa principal
;------------------------------------------------------------------------------------------------------defseg progr, start=0
defseg p8255,start=16, class=iospace
;-----------------------------------------------------------------------------------------------------extern ret_10ms,bin_7seg
tope_pila
equ 0300h
;----------------------------------------------------------------------------------------------------seg p8255
pa:
ds 1
pb:
ds 2
pctrl:
ds 1
;-----------------------------------------------------------------------------------------------------seg progr
lxi sp,tope_pila
mvi a,95h
out pctrl
; programar 8255
mvi a,255
out pb
; apagar indicador
esper_cierre:
in pa
; esperar cierre de un interruptor
cpi 0ffh

437

Tcnicas de gestin de Entrada y Salida

jz esper_cierre
; ninguno cerrado, esperar
call ret_10ms
; alguno cerrado, retardar 10 ms
mvi b,0ffh
; identificar interruptor
otro:
inr b
rar
jc otro
; probar otro pulsador
esper_apert:
in 10h
; esperar apertura para presentar nmero
cpi 0ffh
;
jnz esper_apert
;
mov a,b
; nmero al acumulador
call bin_7seg
; convertir a 7 segmentos
cma
; el indicador es nodo comn
out pb
; presentar nmero
hlt
; salir
end
;------------------------------------------------------------------------------------------------------

;-----------------------------------------------------------------------------------------------------; Rutina de retardo


;------------------------------------------------------------------------------------------------------

ret_10ms:
ret1:

public ret_10ms
defseg retardo
seg retardo
push psw
lxi d,502h
dcx d
mov a,e
ora d
jnz ret1
pop psw
ret
end

;-----------------------------------------------------------------------------------------------------; Rutina de conversin de binario a siete segmentos


;-----------------------------------------------------------------------------------------------------public bin_7seg
defseg convers
seg convers
bin_7seg:

lxi h,tabla
add
l
mov
l,a
mov a,m
ret
;-----------------------------------------------------------------------------------------------------; tabla de conversin
;-----------------------------------------------------------------------------------------------------tabla:
db 3fh,06h,5bh,4fh,66h,6dh,7dh,07h
db 7fh,67h,77h,7ch,39h,5eh,79h,71h
end

438

Tcnicas de gestin de Entrada y Salida

439

El cdigo programa un PPI8255 en la direccin 10H con el puerto A como entrada y el puerto B como salida. El ejemplo se simul con WSIM85 y funcion bien.

Fig.8.10. Simulacin del ejemplo 8.1 parte 1 con el interruptor S4 activado.

Solucin parte 2:
En la parte anterior se deba esperar la liberacin del interruptor para proceder
a parar al programa, lo cual suceda con el primer rebote de apertura. En este caso se
desea registrar el nmero de veces que el interruptor 5 es presionado, esto significa
que es necesario tambin eliminar los rebotes durante la desactivacin. De otro modo,
estos seran contabilizados como cierres/aperturas.
El diagrama de flujo para el programa se presenta en la figura 8.11 y a continuacin se muestra el cdigo para el programa principal. La programacin de la subrutina de retardo y la de conversin de binario a siete segmentos fue realizada en la
parte anterior del ejemplo.

Tcnicas de gestin de Entrada y Salida

Fig.8.11. Flujograma para presentar el nmero de veces que el interruptor S5 es activado.

defseg progr, start=0


defseg p8255,start=16, class=iospace

tope_pila

extern ret_10ms,bin_7seg
equ 0300h

pa:
pb:
pctrl:

seg p8255
ds 1
ds 2
ds 1

440

Tcnicas de gestin de Entrada y Salida

esper_cierre:

esper_apert:

salir:

seg progr
lxi sp,tope_pila
mvi a,95h
out pctrl
mvi a,not(3fh)
out pb
mvi b,0
in pa
cpi 0ffh
jz esper_cierre
call ret_10ms
inr b
mov a,b
cpi 10
jz salir
mov a,b
call bin_7seg
cma
out pb
in 10h
cpi 0ffh
jnz esper_apert
call ret_10ms
jmp esper_cierre
hlt
end

441

; indicador a cero
; contador inicia en cero
; esperar cierre de un interruptor
; ninguno cerrado, esperar
; alguno cerrado, retardar 10 ms

; nmero al acumulador
; convertir a 7 segmentos
; indicador es nodo comn
; presentar nmero
; esperar apertura para presentar nmero
;
;
; esperar siguiente cierre

Retomando lo dicho sobre la existencia de dos modos de realizar E/S por programa, se tiene que la segunda modalidad es la de consultas sucesivas o polling cuando el P pregunta peridicamente a cada perifrico si requiere atencin. Si la respuesta es negativa, el P consultar al siguiente dispositivo de E/S, permaneciendo en
el lazo hasta cuando se le solicite servicio. Para preguntar al puerto, se debe examinar
un bit de estado activado por el perifrico cuando necesita atencin. Si existen varios
dispositivos de E/S, cada uno deber generar su propio bit de estado. La lgica necesaria para poner en prctica esta modalidad es sencilla, pero al ser una comunicacin
asincrnica, se gasta tiempo de CPU en forma innecesaria debido a que para garantizar el funcionamiento del sistema, el lazo de consulta debe ejecutarse en intervalos
regulares aunque los perifricos no requieran servicio.
En la figura 8.12 se repite el circuito de la figura 7.30, el cual constituye un
ejemplo de E/S programada con consulta. En este caso el P examina la lnea P8.7 y si
est en nivel alto, lee el contenido del puerto P7. En otras palabras el perifrico sube a
uno el terminal P8.7 para anunciar la presencia de un nuevo dato en la entrada del
puerto 8. Una vez que el P lee el puerto, desactiva el bit de condicin.
El cdigo para la transferencia se present en el ejemplo 7.8. Considere ahora
que se tienen ocho puertos de entrada P0-P7, cada uno con su bit de estados particular
en la lnea correspondiente del puerto P8. Por ejemplo el terminal P8.5 corresponde al

Tcnicas de gestin de Entrada y Salida

442

puerto de entrada P5. El P debe leer el puerto P8 y examinar los bits individuales
para determinar en cual puerto se ha cargado un nuevo dato.
El siguiente cdigo permite ejecutar la rutina de servicio correspondiente a los
puertos que requieran atencin.
conslt_suc:

in 8
rar
cc rut_0
rar
cc rut_1
rar
cc rut_2
rar
cc rut_3
rar
cc rut_4
rar
cc rut_5
rar
cc rut_6
rar
cc rut_7
ret

; leer bits de estados


; bit 0 a la bandera de acarreo
; leer nuevo dato en puerto 0 si bit 0 es uno

; bit 7 a la bandera de acarreo


; leer nuevo dato en puerto 7 si bit 7 es uno

Fig.8.12. Entrada de datos usando un bit de condicin.

Tcnicas de gestin de Entrada y Salida

443

8.2 ENTRADA Y SALIDA USANDO INTERRUPCIONES


El mtodo de E/S por programa es adecuado para atender perifricos muy lentos como interruptores e indicadores visuales, los cuales pueden ser registrados o actualizados en cualquier momento. Otros dispositivos de E/S con mayor velocidad como: teclados, impresoras y sistemas de adquisicin de datos, deben ser atendidos
cuando estn disponibles para transmitir o recibir informacin. En estos casos, el programa estar a la expectativa por la activacin de una bandera de condicin que notifique que el perifrico est libre. El tiempo de espera desperdicia tiempo de CPU y
requiere ms lneas de cdigo para su realizacin.
Suponga que el perifrico de la figura 7.30 tarda un segundo en transmitir los
16 valores. El lazo en la rutina ADAT del ejemplo 7.8 que examina la bandera de
estado tiene una duracin de 8.64 s/paso.
adat:

in p9
ani 80H
jz adat

El ancho de banda del perifrico nos sugiere que el examen de la bandera tendr xito cada 62.5 ms. No obstante la verificacin ocurrir 115741 veces cada segundo, lo cual equivale a 7234 veces antes de la transmisin de cada carcter. La prdida de tiempo es del 99.99 %, debido a que el tiempo til es de 138.24 s por cada
segundo.
La solucin a este problema es el uso de la tcnica de interrupciones. Una interrupcin es una solicitud realizada al microprocesador por parte de un perifrico
para solicitar servicio. Todo P tiene al menos una entrada INTR para este propsito
y una salida INTA de reconocimiento de interrupcin. La figura 8.13 muestra como el
puerto de bit de estado de la figura 8.12 puede ser eliminado para que en respuesta a
una interrupcin el P lea el dato cargado en el puerto de entrada por el dispositivo
externo.

Fig.8.13. Entrada de datos usando una interrupcin.

Tcnicas de gestin de Entrada y Salida

444

Cuando el P recibe una interrupcin puede tomar dos acciones: parar la ejecucin del programa en progreso y ejecutar una rutina de servicio a la interrupcin
para luego regresar al programa principal; o ignorar la peticin si la interrupcin est
deshabilitada. La entrada INTR puede ser sensible a flanco o a nivel, en el primer
caso cuando se presenta el flanco correspondiente en la entrada INTR se registra el
evento activando un bit interno del procesador hasta cuando el CPU reconozca la
interrupcin. De modo que la seal de solicitud no tiene porque permanecer en uno
lgico. En el otro caso, la seal debe permanecer aplicada con un nivel estable hasta
cuando la interrupcin sea aceptada. Si INTR es sensible a nivel, debe usarse un latch
para memorizar la peticin de interrupcin como ilustra la figura 8.14.

Fig.8.14. Entrada de datos usando una entrada INTR sensible a nivel.

Fig.8.15. Proceso de atencin a una interrupcin.

Tcnicas de gestin de Entrada y Salida

445

Una interrupcin, como todo evento asincrnico, puede producirse en cualquier momento durante la ejecucin de un programa. Cuando ocurre, se completa la
instruccin que est en ejecucin, el P acepta la peticin y transfiere el control a una
rutina de servicio de interrupcin (RSI) la cual salva las variables para preservar las
operaciones a reanudarse y atiende al perifrico que origin la llamada. Una vez
completada la RSI, el control se transfiere de nuevo al programa principal. La figura
8.15 muestra como se interrumpe el procesamiento normal de un programa y se reanuda una vez ejecutada la RSI. Las tareas que siguen a una interrupcin son las siguientes:
Culmina la ejecucin de la instruccin en curso.
Se activa la seal de reconocimiento de interrupcin.
El contenido del contador de programa se almacena en la pila.
El PC se carga con la direccin de la primera instruccin de la RSI.
Se ejecuta la rutina de servicio.
Se recupera el contenido del PC guardado en la pila.

Considere de nuevo el caso del perifrico que transmite 16 bytes por segundo.
Si la transferencia se ejecuta por medio de una interrupcin, el procesador ser interrumpido 16 veces cada segundo y ejecutar la rutina de servicio para leer y cargar en
memoria el valor. Si la duracin del cdigo en la RSI es digamos 15 s, para poder
transmitir y almacenar en memoria los 16 valores se invierte un tiempo de CPU de
aproximadamente 240s, en contraste con el tiempo de ms de un segundo que requiere el P para examinar la bandera de estado, leer el puerto y almacenar los valores cuando se usa el mtodo de polling.
Las interrupciones que pueden ser inhabilitadas por el programa, se dice que
son enmascarables, mientras que aquellas que el sistema no puede suspender son no
enmascarables. Existen instrucciones especficas del microprocesador para la habilitacin o no de una interrupcin particular o de todo el sistema de interrupciones.
Cuando una seal es aplicada a una entrada de interrupcin vectorizada, se le suministra internamente al procesador la direccin a la cual se debe transferir el control
del programa. En el caso de interrupciones no vectorizadas, el P espera que una lgica externa provea tal direccin.

8.2.1 El sistema de interrupciones del 8085A


El P 8085A tiene cinco de entradas de interrupcin: TRAP, RST 7.5, RST
6.5, RST 5.5 e INTR. Todas son enmascarables excepto TRAP, la cual no puede ser
deshabilitada por el sistema. Las interrupciones TRAP, RST 7.5, RST 6.5 y RST 5.5
son vectorizadas, de modo que cuando son activadas y estn habilitadas, se genera
una instruccin RST n.x interna que suministra la direccin de salto. En el caso de
activacin de la lnea INTR, el P espera que en respuesta a la conmutacin de la
salida INTA , alguna lgica externa coloque en el bus de datos una instruccin CALL
direccin o preferiblemente una RST n.

Tcnicas de gestin de Entrada y Salida

446

El terminal INTR es sensible a nivel, de modo para activar esta interrupcin


debe aplicarse un 1 lgico a la entrada y mantenerse hasta cuando la interrupcin sea
reconocida. El vector de interrupcin de la entrada INTR debe suministrarse externamente.

Fig.8.16. Entradas de interrupcin y salida de reconocimiento de interrupcin

La entrada TRAP tiene prioridad mxima y es sensible a flanco y a nivel, lo


cual significa que el flanco de subida de la seal aplicada dispara el proceso de interrupcin, pero la entrada deber ser mantenida en uno hasta cuando la solicitud sea
reconocida.
La lnea RST 7.5 es disparada por el flanco anterior de la seal presentada a
esta entrada. Debido a que el P registra la ocurrencia del flanco cargando uno en un
bit interno, no es necesario mantener a RST 7.5 en alto. Cuando la interrupcin es
atendida la bandera vuelve a cero. Las restantes entradas: RST 6.5 y RST 5.5 son
sensibles a nivel alto, como INTR.
El 8085 tiene varias instrucciones destinadas a ser usadas con las interrupciones. Estas son: EI, DI, SIM, RIM y la conocida RST n.

Tabla. 8.1 Instrucciones asociadas al sistema de interrupciones.

Instrucciones asociadas con interrupciones


EI

Habilitar interrupcin

SIM

Poner mscara de interrupcin

DI

Inhibir interrupcin

RIM

Leer mscara de interrupcin

Tcnicas de gestin de Entrada y Salida

447

EI
Habilita las interrupciones del microprocesador despus de la ejecucin de la
siguiente instruccin. EI pone en uno la bandera de habilitacin de interrupcin o
BITINTE, autorizando todas las interrupciones enmascarables.
DI
Pone en 0 la bandera de habilitacin de interrupcin o BITINTE, deshabilitando
todas las interrupciones enmascarables, inmediatamente despus la ejecucin de DI.
Cuando una seal es aplicada a la entrada TRAP, la interrupcin es atendida
de inmediato independientemente que el sistema de interrupciones est deshabilitado
con DI. Para que una solicitud de interrupcin realizada en la lnea INTR sea atendida
basta con que la entrada est habilitada por medio de la instruccin EI. Por el contrario, las entradas RST 7.5, RST 6.5 y RST 5.5 disponen de un mecanismo de enmascaramiento que permite la autorizacin o no de cada entrada en forma independiente.
Para que una de estas entradas sea habilitada se debe desenmascarar la interrupcin
correspondiente usando la instruccin SIM y posteriormente se debe ejecutar la instruccin EI.
Tabla. 8.2 Caractersticas de las interrupciones del 8085A.
Entrada
Prioridad Habilitacin
Disparo
TRAP
RST5.5
RST6.5
RST7.5
INTR

Vector de interrupcin

Ninguna

Flanco y nivel

0024H

SIM
EI

Nivel

002CH

SIM
EI

Nivel

0034H

SIM
EI

Flanco anterior

003CH

EI

Nivel

Externo
(CALL dir o RST n)

El espacio de direcciones entre 0000H y 0040H debe preservarse para el manejo de interrupciones. Observe que entre los vectores de las interrupciones existe un
espacio de ocho posiciones de memoria, lo cual es suficiente para contener una instruccin de salto a la RSI. Las rara nomenclatura de las interrupciones RST n.x se
debe a que su vector se encuentra en el punto medio entre la RST n anterior y la subsiguiente. Por ejemplo RST 6 tiene como vector 0030H (8 x 6) y 38H (7 x 8) es el de
RST 7, de modo que a RST6.5 le corresponde 34H (6.5 x 8).
Como se expuso en el captulo 4, la presencia de una interrupcin es detectada por el P durante el flanco negativo del pulso de reloj anterior al fin de la instruccin durante la cual la interrupcin es activada. Esto permite la culminacin de la

Tcnicas de gestin de Entrada y Salida

448

ejecucin de la instruccin en curso antes de atender la interrupcin. Si el P est en


el estado HALT el muestreo se realiza en cada ciclo de reloj.
En la figura 8.17 se muestra un diagrama de transicin simplificado de la operacin del 8085. Observe que al final del ltimo ciclo de mquina de la instruccin
en ejecucin se pregunta si hay alguna interrupcin pendiente que est habilitada y/o
desenmascarada. Si la respuesta es negativa el P buscar la siguiente instruccin. Si
existen solicitudes diferidas, se desactivan las interrupciones poniendo a cero el
BITINTE de habilitacin y se reconoce la peticin cargando uno en el bit de reconocimiento de interrupcin BITINTA, y. En el siguiente pulso de reloj, se inicia un ciclo
de mquina de reconocimiento de interrupcin o INA, si e trata de INTR o un ciclo
de mquina del tipo de bus inactivo o BI, en el caso de TRAP y RST.

Fig.8.17. Diagrama de transicin de estados simplificado del 8085A.

El ciclo de mquina INA es similar al ciclo de bsqueda excepto que IO / M


va a nivel alto y se activa INTA en lugar de RD . Durante el ciclo de mquina BI se

Tcnicas de gestin de Entrada y Salida

449

genera la instruccin RST interna que suministra el vector de interrupcin para las
entradas TRAP y RST.
Cuando una interrupcin es reconocida, se deshabilita el sistema de interrupciones al ponerse a cero el BITINTE. Tambin en un evento de RESET son puestos a
cero el BITINTE, el bit interno de reconocimiento de flanco del RST 7.5 y TRAP y se
colocan (ponen a 1) las mscaras de interrupcin a RST 7.5, RST 6.5 y RST 5.5.
Usualmente un flip flop de habilitacin se pone a uno para permitir la interrupcin
mientras que un flip flop de mscara se pone a cero para desenmascarar la interrupcin.
Interrupciones disparadas por la entrada INTR
Estando habilitada INTR por medio de la instruccin EI, el proceso de interrupcin se inicia cuando el perifrico pone en alto la entrada. A continuacin se deshabilitan las interrupciones poniendo a cero el BITINTE y el P inicia un ciclo de mquina tipo de reconocimiento de interrupcin con S1 = 1 , S 2 = 1 , IO / M = 1 y la lnea
INTA activada a nivel bajo. Durante el ciclo INA no se incrementa el contador de

programa, el cual contiene la direccin de la instruccin que sigue a la que estaba en


ejecucin en el momento de producirse la interrupcin. Mientras INTA est en nivel
bajo, el P esperar que el dispositivo que interrumpe coloque en el bus de datos el
cdigo de operacin de la prxima instruccin a ejecutar. Tal instruccin debe suministrar a la CPU la direccin de inicio de la rutina de servicio de interrupcin. Tambin debe almacenar en la pila el contenido del contador de programa para que el
programa pueda reasumir, una vez finalizada la RSI, las operaciones que estaba realizando antes de producirse la interrupcin. Para esta funcin, slo dos instrucciones
son factibles de usar: CALL direccin y RST n.
La instruccin RST n requiere menos lgica externa para esta tarea que la
CALL. El cdigo de instruccin de RST n es:
D7
1

D6
1

D5
N

D4
N

D3
N

D2
1

D1
1

D0
1

Donde NNN es el valor de n en binario. La ejecucin de RST n carga en la pila


el contenido del PC y carga en el PC el valor 0000000000NNN000 8 x n, el cual es
la direccin de la primera instruccin de la RSI o de una instruccin de salto a sta.
Tabla.8.3. Vectores de interrupcin para las instrucciones RST n.
Instruccin Vector de interrupcin
Instruccin
Vector de interrupcin
RST0

0000H

RST4

0020H

RST1

0008H

RST5

0028H

RST2

0010H

RST6

0030H

RST3

0018H

RST7

0038H

Tcnicas de gestin de Entrada y Salida

450

Un circuito que permite cargar en el bus de datos cualquiera de las instrucciones RST n cuando la lnea INTA est en nivel cero se muestra en la figura 8.18. La
lgica consiste de ocho buffers de tres estados del tipo 74LS244 y tres interruptores
lgicos. El interruptor S permite seleccionar la instruccin RST n (n: 0-7) y la seal
INTA habilita los buffers de modo que la instruccin RST n programada pase al bus
de datos del P.

Fig.8.18. Interconexin de una RST n al 8085.

Debido a que la instruccin RESTART slo salva en la pila el contenido del


contador de programa, es responsabilidad del programador incluir al inicio de la RSI
las instrucciones PUSH necesarias para preservar el contenido de los registros que
van a ser modificados, los cuales deben ser recuperadas con POP al culminar la RSI.
La rutina de servicio de interrupcin debe terminar con una instruccin RET para

Tcnicas de gestin de Entrada y Salida

451

reasumir el programa principal y sta debe estar precedida por una EI para habilitar
de nuevo las interrupciones enmascarables, las cuales fueron inhibidas por el proceso
de interrupcin previo.
A continuacin se expone un ejemplo del modo de operacin de un puerto de
entrada con interrupcin.
Ejemplo 8.2
La figura 8.19 muestra el diagrama elctrico de un circuito de conversin analgico digital ADC0804 conectado al microprocesador 8085. Cuando el dispositivo
finaliza el proceso de conversin de una muestra de la entrada analgica Ve, activa a
nivel bajo la salida de fin de conversin del conversor A/D INTR , e interrumpe al
procesador al aplicar un nivel alto a la entrada de interrupcin INTR. El latch mantiene a INTR en uno hasta cuando el CPU reconoce la interrupcin, instante cuando la
salida INTA inicia a cero el biestable. Se debe escribir un programa que maneje el
puerto del ADC y cargue 16 datos partir de la direccin de memoria 2000H.
;----------------------------------------------------------------------------------------------------------; Ejemplo 8.2
;----------------------------------------------------------------------------------------------------------jmp inicio
org 28H
; vector de interrupcin de RST 5
rst5:
jmp leer_dato
; salto a rutina de servicio de interrupcin
org 100h
inicio:
lxi h,dat
; inicio de zona de almacenamiento de datos
mvi b,17
; contador de datos
ret_int:
lxi sp,b_stack
dcr b
jz proceso
out puerto_adc
; iniciar conversin
ei
; habilitar interrupciones
hlt
; esperar interrupcin
proceso:

leer_dato:

; procesamiento de los
; datos adquiridos
;.
;.
;.
in puerto_adc
mov m,a
inx h
jmp ret_int
end

; leer valor desde ADC


; cargar dato en memoria
; prxima posicin
; muestra siguiente

En las aplicaciones usuales de interrupciones, el P est ejecutando una seccin de cdigo y en cualquier momento es interrumpido por un perifrico. Luego de
atender al dispositivo externo, el procesador retorna a ejecutar el programa que proce-

Tcnicas de gestin de Entrada y Salida

452

saba antes de ser interrumpido. En este ejemplo, la CPU inicia el proceso de conversin y a continuacin espera, sin realizar ninguna accin, por una interrupcin. El P
slo espera por la interrupcin y no se requiere cdigo de consulta de una bandera de
estado ni una lnea de puerto adicional para el bit de estado.
Al inicio, el programa coloca en el registro par HL, la direccin de carga del
primer dato e inicia en 17 el contador de datos adquiridos. A continuacin, carga el
apuntador de pila y prueba si el dato anterior fue el ltimo. Si lo es, ejecutar un cdigo no mostrado para procesar la informacin obtenida. En caso contrario, se inicia el
proceso de conversin de una muestra, habilitando las interrupciones con EI y se lleva
al P a un estado de parada, en espera de la interrupcin de fin de conversin. Cuando
la lnea INTR del conversor cae a cero, se ejecuta una instruccin RST 5 y el control
salta a la rutina de lectura del CAD.

Fig.8.19.El ADC0804 interrumpe al P al final de cada conversin.

La RSI no finaliza con un RET porque el P retornara a la siguiente instruccin despus de HLT y lo que se requiere es adquirir la siguiente muestra o procesar
los datos adquiridos. El retorno se realiza a restaurar el valor del apuntador de pila y
probar el contador de datos.

Tcnicas de gestin de Entrada y Salida

453

El programa fue simulado con WIN85, como ilustra la figura 8.21. La mayora
de los simuladores detienen la ejecucin del programa al ejecutar HLT y no simulan el
modo de parada. WIN85, por el contrario, si lo emula, permaneciendo en estado HALT
del cual puede ser sacado con una interrupcin o con un pulso de RESET.
Interrupciones disparadas por las entradas RST
Cuando el P reconoce una interrupcin provocada por la aplicacin de una
seal en las entradas TRAP, RST 7.5, RST 6.5 o RST 5.5, transita a un ciclo de mquina de bus inactivo durante el cual se genera una instruccin RST n.x interna, la cual
provee el vector de interrupcin. Durante el ciclo BI no se incrementa el contador de
programa. La slo ejecucin de la instruccin EI, no habilita las entradas de interrupcin RST. Es necesario que previamente se desenmascare la interrupcin, usando la
instruccin SIM (Set Interrupt Mask).
SIM
Esta instruccin permite que el contenido del acumulador sea usado como indica la figura 8.20 para programar el registro interno de mscara de interrupciones.
D7

D6

D5

D4

D3

D2

D1

D0

SOD

SOE

R7.5

MSE

M7.5

M6.5

M5.5

Mscaras de
interrupcin

Habilitacin de
puesta de mscaras.
Reset RST7.5
Sin uso
Habilitacin
de salida serie
Salida serie
de datos
Fig.8.20.El registro de mscaras de interrupcin como es puesto por la instruccin SIM.

Tcnicas de gestin de Entrada y Salida

Fig.8.21.Ventana principal de WIN85 mostrando los resultados de la simulacin.

454

Tcnicas de gestin de Entrada y Salida

455

Un 1 debe ser cargado en el bit 3 del acumulador para poder poner/quitar la


mscara de cualquiera de las entradas de interrupciones RST. Un 1/0 en los bits D0-2
deber poner/quitar la mscara de la entrada correspondiente. Quitando la mscara se
habilita la interrupcin correspondiente. Si el bit 4 del acumulador es puesto a 1 antes
de ejecutar SIM, se pone en cero el flip flop interno de RST7.5. La salida de este biestable es puesta a 1 cuando se presenta un flaco positivo a la entrada RST7.5 independientemente de que la entrada est enmascarada. Este biestable tambin es puesto en
cero cuando se reconoce la interrupcin o despus de un RESET. La instruccin SIM
tambin carga el bit 7 del acumulador en la salida SOD si el bit 6 est en 1.
La ltima instruccin asociada al sistema de interrupciones es RIM (Read Interrupt Mask), la cual carga en el acumulador el estado del bit de validacin de interrupciones, el estado de las mscaras RST y las interrupciones pendientes.
RIM
Carga en el acumulador con las mscaras de las entradas RST, las interrupciones solicitadas y an no atendidas, la bandera de habilitacin de interrupciones y el
estado de la lnea SID de entrada serie como indica la figura 8.22.

D7

D6

D5

D4

D3

D2

D1

D0

SID

I7.5

I6.5

I5.5

IE

M7.5

M6.5

M5.5

Mscaras de
interrupcin
Bandera de habilitacin de interrupciones

Interrupciones
pendientes

Entrada serie
de datos
Fig.8.22.El registro de mscaras de interrupcin como es ledo por la instruccin RIM.

Tcnicas de gestin de Entrada y Salida

456

Cuando las interrupciones estn pendientes, pero enmascaradas, puede usarse


la instruccin RIM para dar servicio a o a los perifricos que solicitan atencin. Si la
entrada es RST 7.5 debe ponerse a 1 el bit 4 del acumulador por medio de SIM, antes
que sea detectada una nueva solicitud.
Ejemplo 8.3
La figura 8.23 muestra un pulsador conectado a la entrada de interrupcin RST
7.5. Escriba un programa que cargue el puerto de salida 20H el nmero de veces que el
pulsador S1 es presionado.
+5V

2.2k
S1
220
RST7.5
74LS14
10F

Fig.8.23.El pulsador S1 dispara la interrupcin RST7.5.


;---------------------------------------------------------------------------------------------; Ejemplo 8.3
;---------------------------------------------------------------------------------------------defseg prog, absolute, start=0
seg prog
jmp inicio
;a inicio del programa
;---------------------------------------------------------------------------------------------; Rutina de servicio de interrupcin
;---------------------------------------------------------------------------------------------org 3ch
; vector de RST7.5
inr a
; Se incrementa contador de pulsaciones
out 20h
; salida al puerto 20H
ei
; Se vuelven a habilitar las interrupciones
ret
; retorno desde interrupcin
;--------------------------------------------------------------------------------------------;
Programa principal
;--------------------------------------------------------------------------------------------org 0100h
inicio:
lxi sp,b_stack
mvi a,0bh
; desenmascara RST7.5
sim
ei
; habilita sistema de interrupciones
xra a
; el contador se inicia en cero
out 20h
esper:
jmp esper
; espera por interrupcin
end

Tcnicas de gestin de Entrada y Salida

457

Para habilitar la entrada de interrupcin es necesario quitar la mscara de interrupcin con la secuencia,
mvi a, 00001011b
sim
ei

El bit 3 en uno permite manipular los bits de mscara. El bit 2 en cero quita la
mscara a RST 7.5, mientras que los bits 1 y 0 en uno mantienen RST 6.5 y RST 5.5
enmascaradas. Para completar la habilitacin de las interrupciones se ejecuta EI. Antes del retorno de la RSI se rehabilita el sistema de interrupciones con EI.
El programa fue simulado con WIN85. Observe en la figura 8.24 que el simulador muestra el contenido del puerto directamente en decimal. En la prctica debe
usarse una instruccin DAA despus del incremento del acumulador para que la
cuenta sea en BCD.
Ejemplo 8.4
Debe repetirse el ejemplo anterior, pero con la entrada RST 7.5 enmascarada.
Use la instruccin RIM para detectar una solicitud e interrupcin.
;--------------------------------------------------------------------------------------------------------------; Ejemplo 8.4
;--------------------------------------------------------------------------------------------------------------defseg prog, absolute, start=0
seg prog
org 0100h
mvi b,0
contar: rim
; leer registro de mscaras de interrupciones
ani 40h
; ocultar todos los bits excepto el de RST7.5 pendiente
jz contar
; no hay interrupcin pendiente, esperar
inr b
; se activo el pulsador y se incrementa contador.
mov a,b
;
out 20h
; salida al puerto 20H
mvi a,10h
; se inicia flip flop que indica flanco detectado en entrada
sim
; RST7.5
jmp contar
; a esperar por interrupcin
end
;---------------------------------------------------------------------------------------------------------------

En este caso las interrupciones no se habilitan, de modo que las solicitudes al


P son ignoradas. Sin embargo, usando RIM puede detectarse si se ha realizado una
peticin en cualquiera de las entradas RST. Cuando esto ocurre puede brindarse atencin al dispositivo en una forma similar a la tcnica de consultas. Debido a que el flip
flop interno de RST 7.5 es puesto a 1 cuando se aplica un flanco positivo a esta entrada, el programador debe llevar a cero este bit usando SIM para que una nueva solicitud pueda ser detectada. Si las interrupciones hubiesen estado habilitadas la salida
de este biestable volvera a cero, al ser reconocida la interrupcin.

Tcnicas de gestin de Entrada y Salida

Fig.8.24.La instruccin RIM permite atender a perifricos cuando el sistema de interrupciones est deshabilitado.

458

Tcnicas de gestin de Entrada y Salida

459

Ejemplo 8.5
Escribir un cdigo que permita ver en la pantalla del SDA 85, el nmero de
veces que la tecla Rst 7.5 es presionada.

Fig.8.25.Teclado y pantalla del SDA 85.


El monitor del SDA 85 tiene en la direccin ROM:003CH un salto a la posicin de memoria
RAM:0FFB1H. En esta ltima direccin debe estar la primera instruccin de la RSI.
La subrutina UPDDT (06D3H) presenta en el campo de datos de la pantalla el byte almacenado
en la direccin 0FFF9H.

En un C como el SDA 85 lo usual es que el controlador de teclado suprima


en forma automtica el rebote de contactos de cada una de las teclas. En este caso, el
pulsador Rst 7.5 est conectado directamente a la entrada de interrupcin RST 7.5, de
modo que se produce efecto de rebote, al ser pulsado. Como consecuencia, si se presiona est tecla una sola vez se generarn mltiples peticiones de interrupcin. El
programa de este ejemplo debe garantizar que se produce una solicitud de interrupcin por cada activacin de la tecla Rst7.5.
La solucin es que la rutina de servicio de interrupcin espere 30 ms (duracin del rebote), a continuacin suprima toda interrupcin pendiente y finalmente
proceda a incrementar el contador.
;--------------------------------------------------------------------------------------------------------------; Ejemplo 8.5
;--------------------------------------------------------------------------------------------------------------upddt
equ
addr 06d3h
; direccin de rutina UPDDT
cont
equ
addr 0fff9h
; direccin cuyo contenido muestra UPDDT
;--------------------------------------------------------------------------------------------------------------; Programa principal
;--------------------------------------------------------------------------------------------------------------org 4000h
lxi sp,4800h
mvi a,0bh
; quitar mascara a RST7.5
sim
ei
; habilitar interrupciones

Tcnicas de gestin de Entrada y Salida

ocup:

mvi a,0
sta cont
mvi b,00h
call upddt
jmp ocup

460

; contador se inicia en vero


; sin punto decimal
; presentar contador en campo de datos
; esperar por interrupcin

;--------------------------------------------------------------------------------------------------------------; Subrutina de servicio de interrupcin.


;--------------------------------------------------------------------------------------------------------------rst7.5:
call rebot
; Suprimir rebote
mvi b,00h
; sin punto decimal
lda cont
; contador al acumulador
inr a
; incrementar contador
daa
; cuenta en decimal
sta cont
; presentar contador
call upddt
rim
ei
; rehabilitar interrupciones
ret
;--------------------------------------------------------------------------------------------------------------; Eliminar rebote de tecla Rst7.5
;--------------------------------------------------------------------------------------------------------------rebot:
call ret30ms
;Esperar 30 ms
mvi a,10h
;Suprimir interrupciones no deseadas
sim
;Limpiando el FF RST 7.5
mvi a,0bh
sim
;Desenmascarar RST7.5
ret
;--------------------------------------------------------------------------------------------------------------; Retardo de 30 ms
;--------------------------------------------------------------------------------------------------------------ret30ms:
lxi d,0deah
ret30:
dcx d
mov a,e
ora d
jnz ret30
ret
;--------------------------------------------------------------------------------------------------------------; Vector de interrupcin RST 7.5
;--------------------------------------------------------------------------------------------------------------org 0ffb1h
jmp rst7.5
;---------------------------------------------------------------------------------------------------------------

Si el efecto de contactos no es eliminado, el contador se incrementar por


cuatro cada vez que se pulse la tecla Rst7.5.
Las interrupciones normalmente estn asociadas al funcionamiento de circuitos de control de tiempo o temporizadores y en casos donde el P intercambia datos
con un perifrico o con otro procesador. Estos tpicos se tratan ms adelante. Para
finalizar el captulo se presenta un ejemplo que involucra tres eventos, dos de los
cuales son controlados por interrupcin.

Tcnicas de gestin de Entrada y Salida

Fig.8.26 La tecla Rst 7.5 se presion treinta y seis veces.

461

Tcnicas de gestin de Entrada y Salida

462

Ejemplo 8.6
El microcomputador SDA 85 del simulador 8085 Virtual Kit debe ser convertido en un reloj de tiempo real. Esto es que debe presentar la hora del da en su pantalla de acuerdo con el formato de la figura 8.27.

Fig.8.27.Formato del reloj de 24 horas.

El funcionamiento del programa debe ser como se indica a continuacin:


1. El reloj presentar continuamente la hora del da en un formato de 24 horas.

2. Pulsando la tecla <RST7.5> del teclado del microcomputador se genera una interrupcin
que permite ajustar la hora como se indica.

3. Pulsando la tecla <END> se modifican los minutos.

4. Tecleando de nuevo <END> se presenta la nueva hora.

Como base de tiempo se usar una rutina de retardo de 1 segundo. En la prctica se prefiere aplicar la seal de un oscilador externo de frecuencia estable a una de
las entradas de interrupcin, para generar el retardo base de 1 segundo. Pero el simulador no permite aplicar tal seal a la entrada RST 6.5, al estar conectada a una tecla
con efecto de rebote.

Tcnicas de gestin de Entrada y Salida

463

Para escribir el programa de reloj digital se usan las rutinas de usuario mostradas en la tabla 8.4.
Tabla.8.4.Rutinas de monitor del SDA 85.
Rutina
Direccin

Descripcin

OUTPUT

05FCH

Presenta en pantalla la cadena de caracteres apuntada por


HL. Si (A)=0 se usa el campo de direcciones. Si (A)=1
se usa el campo de datos. Si (B)=0 se muestra el punto
decimal. Si (B)=1 sin punto decimal.

RDKBD

0634H

Espera la pulsacin de una tecla y retorna en el A el


cdigo de la tecla.
La interrupcin RST5.5 debe ser desenmascarada.

06BCH

El contenido de las direcciones de memoria FFF7H y


FFF8H se presenta en el campo de direcciones de la
pantalla. El registro B controla el punto decimal.

06D3H

El byte en la posicin FFF9H se presenta en el campo de


datos de la pantalla. El registro B controla el punto decimal.

UPDAD
UPDDT

El programa ejecutar un programa principal el cual mide y presenta horas,


minutos y segundos. Una interrupcin RST 7.5 ejecutar una rutina de servicio que
permite modificar las horas y los minutos. Esta rutina debe desenmascarar la entrada
RST 5.5, para poder leer el teclado.
El programa usa tres contadores en memoria para presentar la hora. Cada vez
que transcurre un segundo, se incrementa el primer contador (SEG). Cuando SEG
alcance 60, se pone a cero y se suma uno al contador de minutos (MIN) y cuando
MIN llegue a 60, se lleva a cero y se incrementa en uno el contador de horas (HOR).
Cuando HOR indique 24, se pone en cero y se reinicia la cuenta. Para simplificar el
programa las posiciones de memoria que se usan como contadores son:
MIN
HOR
SEG

0FFF7H
0FFF8H
0FFF9H

Observe que SEG corresponde a la posicin cuyo contenido UPDDT presenta en el campo de datos y MIN y HOR son las direcciones cuyos bytes UPDAD
muestra en el campo de direcciones. El vector de RST7.5 (003CH) contiene un salto a
la posicin de memoria RAM: FFB1H. Aqu se inserta un salto a la rutina de servicio
pon_hm.
Los diagramas de flujo del programa principal y de la rutina de servicio de interrupcin RST 7.5 se muestran en las figuras 8.28 y 8.29 y el listado del cdigo a
continuacin.

Tcnicas de gestin de Entrada y Salida

Fig.8.28. Diagrama de flujo del programa principal

464

Tcnicas de gestin de Entrada y Salida

Fig.8.29. Rutina de servicio RST 7.5.

465

Tcnicas de gestin de Entrada y Salida

466

;***************************************************************************
; Programa reloj digital
;***************************************************************************
output
rdkbd
updad
upddt
seg:
hor:
min:

equ
equ
equ
equ
equ
equ
equ

addr
addr
addr
addr
addr
addr
addr

5fch
634h
6bch
6d3h
0fff9h
0fff8h
0fff7h

;***************************************************************************
; Programa principal
;***************************************************************************
.code
org 4000h
xra a
sta seg
; inicio en 00:00:00
sta min
sta hor
inicio:
lxi sp, 5000h
mvi a,0bh
; desenmascarar interrupcin RST7.5
sim
ei
; habilitar interrupciones
call upddt
; presentar segundos
call updad
; presesentar horas-minutos
call ret1s
; esperar un segundo
mvi b,2
; contador para control de seg-min
lxi h,seg
; apuntar segundos
inc_min:
mov a,m
; cargar en acumulador seg/min anterior
inr a
; incrementar seg/min
daa
; cuenta en decimal
mov m,a
; actualizar seg/min
cpi 60h
; comparar con 60
jc inicio
; si menor presentar hh:min:seg
mvi m,0
; si mayor seg/min a cero
dcx h
dcx h
; apuntar min
dcr b
jnz inc_min
; incrementar minutos
inx h
; apuntar hora
inx h
inx h
mov a,m
; cargar hora anterior en el acumulador
inr a
; incrementar hora
daa
; contador decimal
mov m,a
; actualizar hora
cpi 24h
; comparar con 24
jc inicio
; si menor presentar hh:min:seg
mvi m,0
; si mayor hor a cero
jmp inicio
; presentar hh:min:seg
;***************************************************************************

Tcnicas de gestin de Entrada y Salida

467

;***************************************************************************
; Rutina de servicio RST7.5.
;***************************************************************************
pon_hm:
push psw
; salvar registros
push b
push d
push h
mvi a,0eh
;desenmascarar RST5.5 (RDKBD)
sim
lxi h,msj_h
; presentar mensaje HorA
xra a
; en campo
call output
; de direcciones
lda hor
; cargar hora anterior en acumulador
may24:
call hm
; modificar hora
cpi 24h
; comparar con 24
jnc may24
; si mayor o igual modificar hora
sta hor
; si menor actualizar hora
lxi h,msj_m
; presentar mensaje Minu
xra a
; en campo
call output
; de direcciones
lda min
; cargar minuto anterior en acumulador
may60:
call hm
; modificar minuto
cpi 60h
; comparar con 60
jnc may60
; si mayor o igual modificar minutos
sta min
; si menor actualizar minutos
xra a
; empezar en cero segundos
sta seg
mvi a,10h
; se suprime efecto del rebote
sim
; Eliminando interrupciones pendientes
pop h
; recuperar registros
pop d
pop b
pop psw
ei
ret
;***************************************************************************
; Modifica horas/minutos
;***************************************************************************
hm:
sta seg
call upddt
; presentar Hora/Minuto en campo de datos
noend:
call rdkbd
; leer teclado
cpi 0ah
; determinar si valor es decimal
jc form_2d
; si es decimal: dar formato de dos dgitos
cpi 10h
; no es decimal, comparar con tecla <END>
jz listo
; es <END>, cargar valor en campo de datos en A
jmp noend
; no es <END>, leer teclado
form_2d:
mov b,a
; en registro B ltima entrada desde teclado
lda seg
; al acumulador valor anterior de hor/min
add a
; desplazar 4 bits a la izquierda
add a
add a
add a
ora b
; combinar con ltima entrada desde teclado
jmp hm
; prximo dgito
listo:
lda seg
; retornar con nuevo valor de Hora/Minuto en A

Tcnicas de gestin de Entrada y Salida

468

ret
;***************************************************************************
; Rutina de retardo de 1 segundo
;***************************************************************************
ret1s:
push b
push d
push psw
mvi b,3
ret2:
lxi d,09aeah
ret1:
dcx d
mov a,e
ora d
jnz ret1
dcr b
jnz ret2
pop psw
pop d
pop b
ret
;***************************************************************************
; Mensajes
;***************************************************************************
msj_h:
db 10
;A
db 25
;r
db 27
;o
db 16
;H
msj_m:

db 28
;u
db 26
;n
db 29
;i
db 24
;M
;***************************************************************************
; Vector de interrupcin RST7.5
;***************************************************************************
org 0ffb1h
jmp pon_hm
; salto a rutina de servicio

El programa anterior fue simulado usando el 8085 Virtual Kit y funcion como se esperaba. Otra solucin para el ejemplo del reloj es usar una base de tiempo
externa. La seal maestra puede tambin derivarse de la red de 60 Hz como ilustra el
circuito de la figura 8.31 y se aplica a la entrada de interrupcin RST6.5. El circuito
no est aislado de la lnea de potencia. La onda seno es rectificada y aplicada a un
disparador de Schmitt obtenindose una seal de variacin rpida, frecuencia 60 Hz y
nivel TTL. El cdigo para sta versin del reloj fue escrito para el microcomputador
real MPR-85 PLUS, debido a las dificultades presentes para la simulacin. Este C es
una tarjeta de desarrollo de bajo costo pero de gran utilidad. Las rutinas de usuario se
ejecutan usando la secuencia de cdigo:

mvi a,n
rst 7

; n es el nmero de la rutina de monitor

Tcnicas de gestin de Entrada y Salida

Fig.8.30. El SDA 85 ejecutando el programa de reloj digital.

469

Tcnicas de gestin de Entrada y Salida

470

Fig.8.31. La salida del circuito se aplica a las entradas RST 6.5 y SID del 8085A.

Para escribir el programa de reloj para el MPR-85 PLUS se usan las rutinas de
usuario mostradas en la tabla 8.5.
Tabla.8.5.Rutinas de monitor del MPR-85 PLUS.
Rutina
Descripcin
Presenta en pantalla el caracter cuyo cdigo de 7segmentos est cargado en el registro C. El nmero del
indicador donde se presentar el carcter lo indica el
valor en el registro B.

L0 L1 L2 L3

L4 L5

El contenido del registro par HL o L se presenta en pantalla.

10

C=(00)L en campo de datos.


C=(10)L en campo de datos con punto decimal
C=(01)HL en campo de direcciones.
C=(11)HL en campo de direcciones con punto decimal

12

Espera la pulsacin de una tecla y retorna en el A la


posicin de la tecla.

Debido a que la entrada RST 6.5 es sensible a nivel, la subrutina de servicio


espera que el pulso de solicitud conmute a nivel bajo antes de habilitar las interrupciones y retornar desde la rutina de servicio a esta entrada. Esto se logra examinando
la entrada SID por medio de la instruccin RIM. Se usan 4 posiciones consecutivas
de memoria como contadores:
RED
SEG
MIN
HOR

1/60
segundos
minutos
horas

Tcnicas de gestin de Entrada y Salida

471

Cada vez que se ejecuta la subrutina de la interrupcin RST6.5 se incrementa


el primer contador (RED) y este se usa para dividir la frecuencia de la red por 60, de
modo que cuando RED llegue 60 se incremente en 1 el contador de segundos (SEG),
inicindose la cuenta.
La interrupciones generan un salto al rea de memoria 4000H-40FFH, la cual
est reservada por el programa monitor El vector de RST6.5 (0034H) contiene un
salto a la RAM: 4004H., aqu se inserta un salto a la rutina de servicio medir. El vector de RST7.5 (003CH) provee un salto a la direccin de memoria RAM: 4006H,
desde donde se transfiere el control del programa a salto a la rutina de servicio
pon_hm.
El programa se carga en la RAM de usuario a partir de la direccin 6002H.
Para simplificar el cdigo se escribe una rutina escrb_cad, la cual presenta en pantalla
la cadena de caracteres apuntada por el registro par HL: si B = (00), en el campo de
direcciones y si B = (01), en el campo de datos. El listado de la rutina se muestra a
continuacin:
;-------------------------------------------; Rutina ESCRB_CAD
;-------------------------------------------escrb_cad:

camp_dat:
escr:

push b
push d
push psw
mov a,b
ani 1
jnz camp_dat
mvi b,0
mvi d,4
jmp escr
mvi b,4
mvi d,6
mov c,m
mvi a,9
rst 7
inx h
inr b
mov a,b
cmp d
jnz escr
pop psw
pop d
pop b
ret

Del manual de usuario del MPR-85 se extrajeron los cdigos de los caracteres
a presentar, estos son:
A 77H
n 54H

H 76H
O 3FH

I 13H
r 50H

M 37H
U 3EH

Tcnicas de gestin de Entrada y Salida

472

El programa del reloj digital es el siguiente:


;*************************************************************************
; Programa reloj digital para MPR-85 PLUS
;*************************************************************************
flecha
equ
; Tecla ()
A
equ 77h
; Letra A
H
equ 76h
; Letra H
I
equ 13h
; Letra I
M
equ 37h
; Letra M
n
equ 54h
; Letra n
0
equ 3fH
; Letra O (cero)
r
equ 50h
; Letra r
U
equ 3eh
; Letra U
;*************************************************************************
; Vectores de interrupcin
;*************************************************************************
org 4004 h
jmp medir
; salto a rutina de servicio para medir tiempo
org 4006 h
jmp pon_hm
; A rutina de servicio RST7.5 para ajustar hor/min
;*************************************************************************
;*************************************************************************
; Programa principal
;*************************************************************************
org 6002h
inicio:
lxi sp,6500h
mvi a,8
; Se desenmascaran las interrupciones
sim
ei
; Se habilitan las interrupciones
phm:
lhld seg
; A registro L contador de segundos
mvi c,0
; Se presentan segundos en campo de datos
mvi a,0ah
rst 7
lhld min
; cargar en minutos en L y horas en H
mvi c,1
; Presentar en campo de direcciones
mvi a,0ah
rst 7
jmp inicio
; Presentar hh:mm:ss
;*************************************************************************
;*************************************************************************
; Rutina de servicio RST6.5
;*************************************************************************
medir:
push h
; Salvar registros
push d
push b
push psw
mvi b,3
; Se repite el mismo lazo para red, seg y min
lxi h,red
; Apuntar a contador red
seguir:
mov a,m
; Cargar en A: red/seg/min
inr a
; Incrementar contador
daa
; Cuenta en decimal
mov m,a
; Actualizar: red, seg, min
cpi 60h
; Comparar con 60

Tcnicas de gestin de Entrada y Salida

473

jc sal
; Si menor presentar hh:mm:ss
mvi m,0
; Si llego a 60, cargar 0 en: red/seg/min
inx h
; Apuntar contador siguiente
dcr b
; Decrementar contador de lazo
jnz seguir
; No es cero, seguir con:seg/min
mov a,m
; Es cero, al A contador de horas
inr a
; incrementar hora
daa
; Cuenta en decimal
mov m,a
; Actualizar hora
cpi 24h
; Comparar con 24
jc sal
; Si menor presentar hh:mm:ss
mvi m,0
; Si es 60, cargar cero en hora
sal:
rim
; Esperar que RST6.5 sea cero
ana a
; habilitar interrupciones
jm sal
pop psw
; Recuperar registros
pop b
pop d
pop h
ei
; Habilitar interrupciones
ret
; Retornar
;***************************************************************************
; Los contadores se inician en cero
red:
db 0
; Contador 1/60
seg:
db 0
; Contador de segundos
min:
db 0
; Contador de minutos
hor:
db 0
; Contador de horas
temp:
ds 1
; Almacn temporal
;*************************************************************************
; Rutina de servicio RST7.5
;*************************************************************************
pon_hm:
push psw
; Salvar registros
push b
push d
push h
mvi a,0eh
; Se enmascaran las interrupciones
sim
lxi h,msj_h
; Apuntar a mensaje HorA
mvi b,0
; Se usar campo de direcciones
call escrb_cad
; Imprimir mensaje HorA
lda hor
; Contador hor al acumulador
may24:
call hm
; Modificar hora
cpi 24h
; Comparar hora con 24
jnc may24
; Es mayor, modificar hora
sta hor
; Es menor, actualizar hora
lxi h,msj_m
; Apuntar a mensaje MinU
mvi b,0
; Se usar campo de direcciones
call escrb_cad
; Imprimir mensaje MinU
lda min
; Contador min al acumulador
may60:
call hm
; Modificar minutos
cpi 60h
; comparar con 60
jnc may60
; Es mayor, modificar minutos
sta min
; Es menor, actualizar minutos
xra a
; Acumulador a cero

Tcnicas de gestin de Entrada y Salida

474

sta red
; Contadores red y seg a cero
sta seg
pop h
; Recuperar registros
pop d
pop b
pop psw
ei
; Habilitar interrupciones
ret
hm:
push h
; Salvar registros
push b
push d
otro:
sta temp
; Salvar hor/min
mvi c,0
; Se presentar hor/min
mvi a,0ah
; en campo de
rst 7
; datos
esper:
mvi a,12
; Esperar tecla
rst 7
cpi 0ah
; Comparar con diez
jc men_diez
; Es un dgito decimal
cpi flecha
; Es mayor que 9, comparar con flecha
jz es_flecha
; Es flecha, listo
jmp esper
; No es flecha, ni dgito decimal, leer teclado
men_diez:
mov b,a
; Preservar ultimo dgito decimal
lda temp
; Cargar en A hor/min anterior
add a
; Suprimir dgito de ms peso
add a
add a
add a
ora b
; Insertar nuevo dgito decimal
jmp otro
; Siguiente valor
es_flecha:
lda temp
; Nueva hor/min al acumulador
pop d
; Recuperar registros
pop b
pop h
ret
; Retornar con nueva hor/min en el A
;**************************************************************************
; Mensajes
;**************************************************************************
msj_h:
db ?H,o,r,?A
msj_m:
db ?M,i,n,u
;*************************************************************************

En esta seccin se han mostrados las ventajas de la tcnica de interrupciones


para gestin de entrada y salida. El procesador responde en forma rpida a las solicitudes. Se gasta menos tiempo en examinar bits de estados y puede eliminar la necesidad de rutinas de retardo. La desventaja principal de las interrupciones es que al ser
un evento de naturaleza asincrnica no se puede precisar el momento cuando ocurren, lo cual hace que los programas de las aplicaciones sean difciles de depurar. Las
rutinas de servicio de interrupcin deben tener cdigo extra para asegurar la preservacin de los registros y banderas de estado con independencia del momento que
ocurra la interrupcin. Puede ser complicado establecer cuando una determinada interrupcin debe estar habilitada. Si la velocidad de transferencia es muy alta, el uso

Tcnicas de gestin de Entrada y Salida

475

de interrupciones puede ser ineficiente o imposible de realizar. Finalmente, en algunos casos puede requerirse circuitos adicionales para el control de las interrupciones.
8.2.2 El controlador de interrupciones 8259A
En aplicaciones complejas que requieran el uso de un nmero de entradas de
interrupciones superior a las del procesador, puede usarse un circuito LSI controlador
de interrupciones 8259A, el cual se encarga de administrar hasta ocho lneas de solicitudes de interrupcin e informar al procesador, aplicando su salida INT a la entrada
INTR del P, cuando un perifrico necesita servicio. Es posible conectar varios
8259A en cascada para aumentar el nmero de fuentes de interrupcin hasta 64. Las
cuatro funciones ms relevantes del controlador son:
Recibe solicitudes de interrupcin de 8 fuentes.
Asigna las prioridades y controla la cola de solicitudes simultneas.
Pone la mscara a interrupciones por solicitud del programa.
Genera una seal de interrupcin aplicada a la entrada INTR y cuando la salida INTA del
P se activa, coloca sobre el bus de datos una instruccin CALL direccin, con la direccin
programada por el usuario.

Hasta los PC diseados con microprocesadores 80486, el sistema inclua al


menos dos 8259A en cascada para controlar la nica entrada de interrupcin INTR
del procesador. La otra entrada de interrupcin NMI es similar a TRAP. A partir del
Pentium se incorpor dentro del chip un controlador local de interrupciones APIC
(Advanced Programmable Interrupt Controller) compatible con el 8259A. La figura
8.32 muestra el diagrama funcional y la distribucin de terminales del 8259A.

Fig.8.32. El controlador de interrupciones 8259A.

Tcnicas de gestin de Entrada y Salida

476

DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8259A


+5V
Tierra
Un nivel bajo en este terminal permite la comunicacin entre el P y el 8259A.

VCC
GND

CS
WR

Cuando
P.

RD

Cuando CS est activo, un cero en esta entrada habilita al 8259A para colocar informacin de estado
en el bus de datos del sistema.
Es el bus de datos bidireccional por medio del cual se transfieren comandos, informacin de estados y
los vectores de interrupcin.
Lneas de cascada que permiten controlar una estructura multinivel de 8259s. Son salidas para el
dispositivo maestro y entradas para los esclavos.
Terminal con doble funcin. Cuando se usa en sistemas grandes que requieren el uso de buffers en el

D0-D7

CAS0-CAS2

SP/ EN

CS est activo, un cero en esta entrada autoriza al 8259A para aceptar comandos desde el

buffers es una entrada


INT
IR0-IR7

INTA

EN para habilitar los buffers. Cuando se usa el modo sin


SP de identificacin de maestro ( SP =1) o de esclavo ( SP =0).

bus de datos, puede ser usado como salida

Salida usada para interrumpir al P. Se activa a nivel alto cuando se realiza una solicitud vlida de
interrupcin. Debe conectarse a la entrada de interrupcin del CPU.
Son lneas de solicitudes de interrupcin. En el modo de disparo por flanco, se conmuta la entrada de
cero a uno y se mantiene en uno hasta cuando se reconozca la solicitud. En el modo de disparo por
nivel slo se requiere mantener un nivel alto en la lnea IR.
Entrada de reconocimiento de interrupcin. Habilita al 8259 para cargar en el bus de datos el vector de
interrupcin por medio de una secuencia de pulsos

A0

INTA suministrados por el P.

CS , WR y RD conforman un cdigo que permite al P escribir


comandos y leer informacin de estado de los registros del controlador. Usualmente se conecta a la
salida A0 del 8085A.
En conjunto con las entradas

Interconexin con el sistema 8085A.


El 8259A se conecta fcilmente a un sistema 8085A como ilustra la figura
8.33. El controlador se conecta al puerto 40H y la entrada SP/ EN se lleva a nivel alto
para indicar que el dispositivo es un maestro.
Los pasos de la secuencia de interrupcin son los siguientes:
Uno o varias de las lneas IR0-7 conmutan a nivel alto, activando el bit correspondiente
en el registro de solicitud de interrupcin IRR (Interrupt Request Register). Este registro almacena todos los niveles de interrupcin que han solicitado servicio.
Si es procedente el 8259A genera una seal activa en alto en la salida INT para interrumpir al P.
El CPU reconoce la solicitud y activa la salida INTA .
Al recibir el pulso INTA , el bit de ms alta prioridad del registro ISR (In Service Register) es puesto. El ISR almacena todos los niveles de interrupcin que estn siendo
atendidos. Simultneamente el bit correspondiente del IRR es llevado a cero. Tambin, el 8259A carga en el bus de datos el cdigo de una instruccin CALL direccin.
La instruccin CALL libera dos pulsos INTA adicionales, el primero de los cuales
causa que el controlador coloque en el bus de datos el byte menos significativo de la

Tcnicas de gestin de Entrada y Salida

477

direccin preprogramada de la rutina de servicio de interrupcin. El segundo INTA


permite la carga de los ocho bits de orden alto de la direccin de la RSI.
Con esto se completa la carga de los tres bytes de la instruccin CALL direccin. Si el
controlador funciona en el modo de fin automtico de interrupcin (AEOI), el bit ISR
es cargado con cero al final del tercer pulso INTA . En caso contrario, el bit del ISR
permanecer en uno hasta cuando un comando EOI sea ejecutado al final de la secuencia de interrupcin.

Fig.8.33. Interconexin de un controlador de interrupciones 8259A con el P 8085A.

Direcciones de las rutinas de servicio


El 8259A suministra la direccin de la rutina de servicio sincronizados por los
pulsos INTA generados por el P, como se expone a continuacin:
Primer pulso

INTA :

El cdigo de operacin CDH de la instruccin CALL direccin es cargado sobre el bus de


datos. El contenido de AD0-7 ser el siguiente.
AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
1
1
0
0
1
1
0
1
Fig.8.34. Primer byte del vector de interrupcin.

Tcnicas de gestin de Entrada y Salida

Segundo pulso

478

INTA :

Durante este evento se coloca en el bus de datos los ocho bits de menos peso de la rutina
de servicio. Los ocho niveles de interrupcin generarn CALLs a 8 posiciones de memoria
igualmente espaciadas.

Fig.8.35. Segundo byte del vector de interrupcin


El nmero de bytes de espaciamiento entre los vectores de interrupcin puede ser seleccionado por programa entre 4 u 8.
Si el intervalo seleccionado es de 4, los bits de direccin A5-A7 son programados por el
usuario mientras que A0-A4 son insertados por el controlador. Cuando el intervalo es 8,
A6-A7 son programados por el usuario mientras que A0-A5 son implantados por el 8259A.
La figura 8.40 muestra los bits a programar del byte bajo de la direccin de la RSI, De
acuerdo con el intervalo seleccionado.

Tercer pulso

INTA :

El byte de orden alto de la direccin de la RSI se carga en el bus de datos. Este byte es
programado previamente por el usuario en la secuencia de inicio.

AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0


A15 A14 A13 A12 A11 A10 A9 A8

Fig.8.36 Tercer byte del vector de interrupcin.

El diagrama de tiempos de la secuencia de

INTA

se muestra en la figura 8.37.

Varios controladores 8259A pueden conectarse en cascada para aumentar el


nmero de fuentes de interrupcin. Con nueve chips se arma una estructura de 64

Tcnicas de gestin de Entrada y Salida

479

fuentes de interrupcin. En este caso la salida INT del maestro se conecta a la entrada
INTR del P y las salidas INT de cada esclavo se aplican a entradas IR especficas
del maestro. De este modo cualquier peticin de interrupcin proveniente desde un
esclavo es primero notificada al maestro, el cual se encarga de iniciar la secuencia de
interrupcin. Si los 8259s estn correctamente programados, durante el primer pulso
el maestro debe colocar el cdigo de operacin la instruccin CALL en el bus de datos y depositar en las lneas C0-C2 la identificacin del esclavo que realiz la solicitud
de interrupcin. El control es tomado entonces por el esclavo, el cual se encarga de
cargar en el bus de datos el vector de interrupcin correspondiente.

Fig.8.37 La seal INTA sincroniza la carga sobre el bus de datos de la instruccin CALL dir

Programacin del 8259A


Al contrario de otros dispositivos LSI de E/S, el 8259A debe ser programado
antes de ser utilizado. Esto se logra usando las palabras de rdenes de inicio ICWs
(Initialization Command Words), las cuales consisten de una secuencia de 2 a 4 bytes
que se cargan en el dispositivo bajo la sincronizacin de WR . Una vez inicializado
por las ICWS, el 8259A entra, por defecto, en operacin en un modo denominado
completamente jerarquizado en el cual se asigna la mayor prioridad a la entrada IR0 y
menor prioridad a IR7. Este esquema de prioridades alcanza a los chips conectados en
cascada.
Un nuevo modo de operacin puede asignarse al controlador en funcionamiento por medio de las palabras de rdenes de operacin OCWs (Operacional
Command Words). Estos modos son:
1. Modo completamente jerarquizado:
A IR0 se la asigna la mayor prioridad y a IR7, la menor.

Tcnicas de gestin de Entrada y Salida

480

2. Modo con prioridad igual rotante:


Todos los dispositivos tienen la misma prioridad, a la interrupcin en ejecucin se le asigna la menor prioridad una vez culminada la ejecucin de su RSI.
3. Modo con prioridad especificada rotante:
La prioridad puede ser asignada una vez ejecutada la RSI.
4. Modo bsico de mscara:
Cualquiera de las ocho entradas IR pueden ser enmascaradas.
5. Modo especial de mscara:
Permite que una interrupcin de prioridad ms baja interrumpa una interrupcin de una
prioridad ms alta
6. Modo de consulta:
En este modo la lnea de salida INT no se utiliza. En lugar un puerto de estado que puede
ser consultado proporciona a una indicacin de cual interrupcin ha ocurrido.

Palabras de rdenes de inicio


En la figura 8.39 se presentan los formatos de las cuatro palabras de rdenes de inicio. Las dos primeras ICW1 ICW2 son obligatorias mientras que las otras
son opcionales.

Palabras ICW1 e ICW2


Cuando una orden es dada al controlador con A0 igual cero y D4 en uno, como
ilustra la figura 8.38, se interpreta como ICW1, la cual arranca la secuencia de inicio.

Fig.8.38 Formato de ICW1 e ICW2.

Tcnicas de gestin de Entrada y Salida

Fig.8.39 Formatos de palabra de los comandos de inicializacin.

481

Tcnicas de gestin de Entrada y Salida

482

El bit ADI selecciona el espaciamiento entre las instrucciones CALL generadas por cada solicitud de interrupcin. Un valor de 1 selecciona un intervalo de cuatro
posiciones de memoria y un valor 0 de ocho localizaciones. Los bits A5-7 fijan el valor del byte bajo del vector de interrupcin segn indica la tabla de la figura 8.35. El
byte alto de la direccin de salto A8-15 es programado por el usuario por medio de
ICW2, la cual se aplica con A0 igual a 1. LTIM en 1 deshabilita la lgica de deteccin
de flanco y las entradas IR sern disparadas por nivel. Si SNGL est en 1, existe un
solo 8259A y no ser necesario programar la palabra de inicio ICW3, la cual define el
modo de cascada cuando SNLG es 0. El bit IC4 de ICW1 se pone a 0 cuando no es
necesario usar ICW4, en caso contrario debe ir a 1.
Ejemplo:
ICW1 = 16H =
ICW2 = 10H =

00010110
00010000

Vectores de interrupcin a partir de 1000H (IR0).


Disparo por flanco.
Intervalo de 4.
Un solo chip
Sin ICW4.
Despus de programar esta secuencia, el 8259A puede ser usado en una estructura de un controlador operando en el modo completamente jerarquizado.

Palabra ICW3
Es aceptada cuando existe ms de un controlador en la estructura de interrupcin, lo cual significa que fue programado en el modo cascada (ICW1, SNGL es 0).
La funcin de los bits de ICW3 vara si el controlador a programar es el maestro o un
esclavo.
Si el dispositivo es un maestro, porque el terminal SP / EN es llevado a uno o
en el modo con acoplador cuando M/S = 1 en ICW4, los bits S0-7 permiten indicar
cuales entradas IR del maestro tiene salidas INT de esclavos conectadas a stas. Si un
esclavo se conecta a la entrada IR5, entonces el bit S5 debe ser puesto a 1. Si el dispositivo es un esclavo, porque el terminal SP / EN es llevado a 0 en el modo con acoplador cuando M/S = 0 en ICW4, los bits ID0-2 identifican al esclavo. Para el ejemplo
anterior, ID2 = 1, ID1 = 0, ID0 = 1 para establecer que este esclavo est conectado a la
entrada IR5 del maestro.
Palabra ICW4
Procede si el bit IC4 de ICW1 fue programado como 1. Esta palabra permite
seleccionar varios modos de operacin. La funcin de los bits son las siguientes:

Tcnicas de gestin de Entrada y Salida

483

PM:

Es puesto a 0 para uso en sistemas 80/85. En 1 selecciona el modo MCS-86-88.

AEOI:

Cuando est en 1 selecciona el modo de fin automtico de interrupcin. Cuando es


puesto a 0, un comando EOI (End Of Interrupt) debe ejecutarse al final de la RSI.
Estos son comandos aplicados con palabras OWCs para notificar al 8259A la culminacin de la rutina de servicio de interrupcin.

M/S:

Se usa en conjunto con el modo con acoplador. Este modo se utiliza en sistemas
grandes donde se requiere acopladores bidireccionales para el bus de datos. En
ese caso el terminal SP / EN se usa para habilitar los acopladores y M/S se usa
para establecer cuando el controlador es un maestro o un esclavo. Cuando M/S es
1, el 8259A opera como maestro y como esclavo cuando M/S es 0. Si no se programa el modo con acoplador, el estado de este bit no es considerado.

BUF:

Si este bit es puesto a 1 se programa el modo con acoplador y el terminal

SP / EN se usa para habilitar los acopladores bidireccionales. Si por el contrario,


BUF es puesto a 0 no se selecciona el modo con acoplador y SP / EN establece si
el dispositivo opera como maestro o esclavo. En el caso que no se use ICW4 tambin SP / EN define operacin como maestro o esclavo.
SFNM:

Permite tener una verdadera estructura completamente jerarquizada entre las entradas IR de los esclavos cuando se opera en cascada. Si este bit es 1 se selecciona
un modo especial completamente jerarquizado, si es 0 este modo no es seleccionado. Slo el maestro deber ser programado en este modo. La necesidad de este
modo especial se debe a que si un esclavo recibe una interrupcin de mayor prioridad que aquella que est siendo atendida (generada a travs del mismo esclavo),
est no ser reconocida por el maestro. Esto se debe a que el bit ISR de la interrupcin servida est en 1, ignorndose toda solicitud de igual o mayor prioridad. De
modo que la peticin de mayor prioridad no ser atendida hasta que el bit ISR respectivo sea puesto a cero por un comando EOI ejecutado al final de la RSI de menor prioridad. Usando el modo especial completamente jerarquizado el maestro solo ignorar solicitudes de menor prioridad que la que est en servicio y responder
a solicitudes de igual o mayor prioridad. As, si un esclavo recibe una solicitud de
mayor prioridad que la atendida, esta ser procesada.

Palabras de rdenes de operacin


Luego que el 8259A es iniciado por la secuencia de ICWs, estar listo para
operacin en el modo completamente jerarquizado. En cualquier momento este modo
puede ser cambiado por medio de tres OCWs. La figura 8.40 muestra los formatos de
las palabras OCWs disponibles.
Palabra OCW1
Se usa para activar/desactivar los bits de mscaras del registro de mscara de
interrupcin IMR. Los bits Mi de OCW1 se usan para controlar la mscara de las entradas IR. Si Mi es 1, la entrada IR correspondiente es deshabilitada. Si Mi es cero el
canal IRi es habilitada.

Tcnicas de gestin de Entrada y Salida

Fig.8.40 Formatos de palabra de los comandos de operacin.

484

Tcnicas de gestin de Entrada y Salida

485

Fig.8.41 Formato de OCW1.

Palabra OCW2
Permitir definir por medio de los bits R, SL y EOI las operaciones de fin e interrupcin, rotacin automtica y rotacin especfica. Comandos asociados y las modalidades de estas operaciones (exceptuando ICW4, AEOI) se seleccionan usando una
combinacin de los bits de OCW2.

Fig.8.42 Formato de OCW2.

La definicin de los bits de OCW2 son las siguientes:


L0-L2:

Especifican, cuando el bit SL est en 1, el nivel de interrupcin (0-7) para la operacin seleccionada por R, SL y EOI,.

EOI:

Se usa para toda orden de final de interrupcin (excepto el modo AEOI). Cuando
est en 1, una forma del comando de fin de interrupcin ser ejecutado dependiendo del estado de R y SL. Si EOI es 0, no se ejecutar una orden de fin de interrupcin.

SL:

Especifica un nivel de interrupcin para una operacin determinada. Cuando es 1,


los bits L0-2 son habilitados y la operacin seleccionada por los bits EOI y R ser
ejecutada sobre el nivel de interrupcin indicado. Cuando SL es 0, los bits L0-2 son
deshabilitados.

R:

Controla las operaciones de rotacin del 8259A. Si R est en 1, una forma de rotacin de prioridad ser ejecutada dependiendo del estado de los bits SL y EOI. Si R
es cero no se ejecuta la rotacin.

Palabra OCW3
Es usada para determinar el estado del proceso de interrupcin y para seleccionar el modo especial de enmascaramiento. La funcin de cada bit de OWC3 se
indica a continuacin:

Fig.8.43 Formato de OCW3.

Tcnicas de gestin de Entrada y Salida

486

RIS:

Se usa para especificar el registro comando a leer entre el ISR (cuando RIS est en
1) y el IRR (cuando RIS es 0). El estado del bit RIS se considera si el bit RR es 1.

RR:

Cuando es puesto a 1 indica que el registro comando indicado por el bit RIS se va a
leer. Si es 0, no se leer el registro comando.

P:

Un nivel 1 en este bit ejecuta un comando de consulta. En el modo de consulta el


CPU deshabilita su entrada de interrupcin. El servicio al dispositivo es realizado
por programa por medio de un comando de consulta, en el cual se habilita al siguiente pulso de RD (por medio de una instruccin IN puerto) para leer el valor
BCD de la solicitud de mayor prioridad y poner a 1 el bit ISR correspondiente. Para operar en el modo de consulta una palabra OCW3 deber ser escrita previo a cada lectura

SMM:

Se usa para habilitar el modo especial de mscara. Si SMM est en 1, selecciona el


modo especial de mscara, si est en 0 no lo selecciona. El estado de SMM slo se
considera si el bit ESMM est en 1.

ESMM: Habilita (cuando est en 1) o deshabilita (cuando es 0) al bit EMM.

Para completar la presentacin del modo de programacin se describen algunos modos asociados con las OWCs.
Modo completamente jerarquizado
Este es el modo de operacin en el cual entra por defecto el 8259A despus de
la secuencia de inicio programada usando las ICWs. Las prioridades de las ocho entradas IR son asignadas desde la ms alta a IR0 hasta la ms baja a IR7. Cuando una
interrupcin es reconocida, la solicitud de mayor prioridad es determinada desde el
IRR y su rutina de servicio es ejecutada. Adems, el bit correspondiente del registro
ISR es activado para sealar la rutina en servicio. Este bit permanecer activado hasta
cuando un comando EOI de fin de interrupcin sea ejecutado. Mientras el bit del ISR
est habilitado, solicitudes de servicio de igual o menor prioridad no sern atendidas.
Una peticin de mayor prioridad generar una interrupcin y la ejecucin de la rutina
de servicio asociada si se ha ejecutado una instruccin EI en la RSI que estaba siendo
procesada antes de ocurrir la interrupcin de mayor prioridad.
Considere que en el modo totalmente jerarquizado ocurre una interrupcin en
la entrada IR5 durante la ejecucin del programa principal. Si las interrupciones estn
habilitadas se ejecutar la rutina de servicio RSI5. Durante la ejecucin de RSI5 se
produce una solicitud en la entrada IR4 y se mantiene hasta ser reconocida. Como IR4
tiene mayor prioridad que IR5, generar una interrupcin en la lnea INTR, la cual
ser reconocida despus de la ejecucin de EI en la rutina RSI5.
Cuando la solicitud en IR5 es reconocida, el bit ISR5 es activado. Al reconocerse la peticin en IR4 se activara adems ISR4, debido a que ninguna de las dos rutinas de servicio se ha completado. Un comando EOI al final de RSI4 deber desactivar
el bit ISR4 para notificar al controlador que la rutina servida ha culminado. La ins-

Tcnicas de gestin de Entrada y Salida

487

truccin final RET en RSI4 transfiere el control del programa a la rutina RSI5. En
este momento el nico bit del registro ISR que permanece activado es el ISR4, el cual
ser desactivado por el comando EOI al final de RSI5, cuya instruccin RET retornar
el programa al programa principal. Esta forma de operacin indica que en el modo
totalmente jerrquico, el ms reciente nivel reconocido y atendido siempre es el de
mayor prioridad.
Fin de interrupcin
Al completarse una RSI, el 8259A debe ser notificado para que actualice el registro ISR. Esto se realiza con un seguimiento de cuales niveles de interrupcin estn
en proceso y su prioridad relativa. Existen tres tipos de comandos EOI:
1. Comando EOI no especifico.
2. Comando EOI especifico.
3. Modo EOI automtico.
Comando EOI no especifico:
Con este comando el programa indica al 8259A cuando la rutina de servicio
ha culminado sin especificar el nivel de de la interrupcin. El controlador deber determinar el nivel de la interrupcin y desactivar el bit ISR correspondiente. El comando EOI no especfico slo debe ser usado cuando el ltimo nivel reconocido y
servido sea el de mayor prioridad. Cuando el 8259A recibe este comando desactiva
el bit ISR de mayor prioridad para indicar la finalizacin de la rutina de mayor prioridad entre las que estn siendo atendidas. De modo que si se opera en el modo totalmente jerrquico el comando EOI no especfico puede ser utilizado.
Ejemplo:
OCW2 = 20H = 0 0 1 0 0 0 0 0

Comando EOI especifico:


Contrario al anterior, este comando notifica cuando la RSI de un nivel determinado ha culminado. Es decir, este comando indica el bit del registro ISR que debe
ser desactivado. Esta orden se usa en situaciones cuando el controlador no puede
determinar el bit ISR que debe ser borrado. Por ejemplo, si la rutina RSI en ejecucin
cambia las prioridades de los niveles de interrupcin y existen otras RSI atendidas, un
EOI no especfico puede desactivar el bit ISR incorrecto.
Ejemplo:
OCW2 = 3xH = 0 0 1 1 0 L2 L1 L0

Tcnicas de gestin de Entrada y Salida

488

Modo EOI automtico:


Cuando AEOI e 1 en ICW4, se operar en el modo AEOI. La programacin de
este modo elimina la necesidad de que el programa notifique la culminacin de la
rutina servida. En su lugar el controlador ejecuta un comando EOI no especfico en el
flanco de subida del tercer pulso de la seal INTA (modo 80/85). Este comando slo
debe usarse cuando no se requiere una estructura multinivel jerarquizada. Considere
que el bit ISR de la rutina en servicio es desactivado inmediatamente despus de su
reconocimiento de modo que no que da indicacin en el ISR de cual RSI est en ejecucin. Si en este momento ocurre una interrupcin, est ser atendida independientemente de su prioridad.
Rotacin automtica-Prioridad igual:
Este modo es til en aplicaciones donde los perifricos atendidos tienen la
igual prioridad. Despus que un dispositivo es atendido, no se le dar servicio de
nuevo hasta cuando, en el peor caso, al resto de igual prioridad, hayan sido asistidos.
Esto se logra asignndole la menor prioridad al ltimo perifrico atendido. Existen
dos formas de rotacin automtico de acuerdo con su combinacin con el comando
EOI, estas son: Rotar en comando EOI no especfico y Rotar en modo EOI automtico.
Rotar en comando EOI no especfico:
Cuando este modo es programado el bit ISR de ms prioridad es desactivado, como
lo hace un comando EOI no especifico, y al nivel IR se le asigna la menor prioridad.
Las prioridades de los otros IR son rotadas para ajustarse al modo completamente
jerarquizado con base en la prioridad ms baja que fue asignada. Si estn en servicio
las rutinas RSI5 (prioridad 5) y RS3 (prioridad 3) y en RS3 se ejecuta un comando rotar en EOI no especifico entonces el bit ISR3 es desactivado y a IR3 se le asigna la
prioridad ms baja quedando ISR4 como el nivel de mayor prioridad.
Rotar en modo EOI automtico:
Es similar al anterior, con la diferencia que la rotacin de prioridad se realiza
de manera automtica pasado el tercer pulso de INTA (modo 80/85) de una secuencia de interrupcin. Se puede entrar en este modo fijando en la palabra OCW2 los bits
R SL EOI = 1 0 0 y salir del modo con R SL EOI = 01 0 0.
Rotacin especfica (Prioridad especfica)
El programa puede modificar las prioridades asignando la ms baja. Las restantes se asignarn automticamente: si IRi es la de menor prioridad, entonces IRi+1
ser la de mayor prioridad. El comando poner prioridad se programa usando OCW2
por medio de los bits R SL EOI sobre el nivel indicado por L2 L1 L0.

Tcnicas de gestin de Entrada y Salida

489

Ejemplo:
OCW2 = 6xH = 0 1 1 0 0 L2 L1 L0

Esta horma es independiente del comando EOI tambin seleccionado por


OCW2. Si se desea modificar loa prioridad durante un comando EOI se puede usar el
comando rotar en comando EOI especfico:
Ejemplo:
OCW2 = 7xH = 0 1 1 1 0 L2 L1 L0

Ejemplo 8.7
Escribir el cdigo de inicio y la tabla de saltos (inicio en 1000H) de una estructura con un controlador 8259A para ocho niveles de interrupcin. El sistema se
interconecta como muestra la figura 8.33. Deben usarse las palabras ICW1, ICW2 y
OCW2.
;---------------------------------------------------------------------------------------------------------------; Ejemplo 8.7
;---------------------------------------------------------------------------------------------------------------p8259_A0_0
equ 40H
; puerto del 8259A con A0=0
p8259_A0_1
equ 41H
; puerto del 8259A con A0=1
icw1
equ 16h
; palabra de orden de inicio
; ICW1: A7,A6,A5=0; disparo por flanco;
; intervalo de 4, un solo chip y sin ICW4
icw2
equ 10h
; ICW2: A15-A8=10H. Direccin IR0=1000H
ocw2
equ 20h
; Comando EOI no especifico
;---------------------------------------------------------------------------------------------------------------; Programa principal
;---------------------------------------------------------------------------------------------------------------lxi sp,tope_pila
; pila en RWM
call inic_8259
; programar secuencia de inicio del 8259.
; modo totalmente jerarquizado
ei
.
.
.

; contina programa principal


.
.
.

;---------------------------------------------------------------------------------------------------------------; Rutina de inicializacin del 8259A


;---------------------------------------------------------------------------------------------------------------inic_8259:
mvi a, icw1
out p8259_A0_0
; Escribir ICW1
mvi a, icw2
out p8259_A0_1
; Escribir ICW2
ret
;----------------------------------------------------------------------------------------------------------------

Tcnicas de gestin de Entrada y Salida

Fig.8.44 Cascada de 8259As.

490

Tcnicas de gestin de Entrada y Salida

491

;---------------------------------------------------------------------------------------------------------------; Rutina RSI0


;---------------------------------------------------------------------------------------------------------------RSI0:
push ..
; Preservar registros
push ..
.
.
.
ei
; rehabilitar interrupciones
mvi a,ocw2
out p8259_A0_0
; Programar EOI no especfico
pop ..
; Restaurar registros
pop ..
ret
; Retornar desde interrupcin
;---------------------------------------------------------------------------------------------------------------; Se escribe una rutina para cada RSI
;---------------------------------------------------------------------------------------------------------------;Tabla de vectores de interrupcin
; --------------------------------------------------------------------------------------------------------------org 1000h
jmp RSI0
nop

; salto a RSI de IR0

jmp RSI1
nop
jmp RSI2
nop
jmp RSI3
nop
jmp RSI4
nop
jmp RSI5
nop
jmp RSI6
nop
jmp RSI7
nop
;----------------------------------------------------------------------------------------------------------------

El 8259A se programa para que el vector de interrupcin de IR0 est en la direccin 1000h y los vectores de interrupcin estn espaciados 4 posiciones de memoria. La tabla de saltos se inicia en 1000H y contiene un salto para cada RSI, ocupando
32 bytes de memoria. La estructura funciona por defecto en el modo completamente
jerarquizado de modo que se utiliza un EOI no especfico para indicar el fin de la

Tcnicas de gestin de Entrada y Salida

492

RSI. Al inicio se habilita el sistema de interrupciones y cada RSI debe habilitarlo de


nuevo.
En la figura 8.44 se presenta una estructura de interrupciones con 22 niveles.
Un maestro U1 y dos esclavos U2-3 estn conectados en cascada. El terminal SP / EN
del maestro se conecta a 5 voltios y los pines SP / EN de loa esclavos se llevan a tierra. La salida INT de cada esclavo se aplica a una entrada IR del maestro. Las lneas
de control de cascada CAS0-2 del maestro actan como salidas y se conectan a los
terminales correspondientes en los esclavos, donde son entradas. La salida INT del
maestro va a la entrada de interrupcin INTR del P y cada 8259A recibe la seal
INTA .
Cada controlador debe recibir su propia secuencia de inicio. Para la programacin del modo en cascada se usa la palabra ICW3 en el maestro para indicar cuales de
las lneas IR del maestro reciben solicitudes desde la salida INT de los esclavos. A los
esclavos se les debe ser identificado con el cdigo de la entrada IR del maestro al cual
est conectada su salida INT. La nica consideracin que se debe tener en estructura
donde las IR del maestro no slo reciben solicitudes de interrupcin desde los esclavos sino que algunas IR aceptan peticiones directamente desde perifricos es que la
entrada IR0 desde el maestro no debe usarse para solicitudes desde esclavos. Esto
debido a que cuando una entrada IR sin esclavo recibe una solicitud, las lneas CAS0-2
no se activarn permaneciendo el direccionamiento por defecto para IR0 (esclavo
IR0). Si un esclavo es conectado a IR0, cuando se genere una interrupcin sobre una
lnea sin esclavo, pueden presentarse fallas. La programacin de la rutina de inicio y
la tabla de saltos para el arreglo de la figura 8.48 se deja al lector como ejercicio.

8.3 ACCESO DIRECTO A MEMORIA


El DMA es una tcnica de entrada y salida en la cual un dispositivo LSI de
propsito especfico, denominado controlador de DMA, ejecuta toda la operacin.
Durante una operacin de acceso directo a memoria, el microprocesador cede el control de los buses al controlador, el cual transfiere los datos directamente entre el perifrico y el subsistema de memoria. Para que el controlador transmita bloques de datos
deber suministrar direcciones y seales de control. Por ejemplo, la direccin de memoria inicial y el nmero de palabras ha enviar, as como el inicio y final de la operacin.
El hecho que el controlador de DMA ejecuta todas las tareas de la transferencia de datos sin intervencin del procesador (el hardware sustituye al programa),
siendo el tiempo de acceso del circuito de memoria la nica restriccin para la velocidad a la cual se ejecuta la operacin; convierten a esta tcnica en el modo ms rpido de ejecutar operaciones de E/S. Las operaciones de DMA no se realizan de una
sola vez, ms bien el controlador sustrae ciclos de reloj al CPU hasta completar la

Tcnicas de gestin de Entrada y Salida

493

transmisin. Usualmente el controlador dispone de varios canales para atender ms de


un perifrico.

Las tareas del controlador durante una operacin de DMA son:


Solicitar al procesador el inicio del DMA.
Realizar el control de los buses del sistema de modo que no obstaculicen el funcionamiento
del P.
Indicar la ubicacin y tamao de los datos a transferir.
Sealar el final de la operacin

El mtodo DMA ms sencillo consiste en usar los ciclos de reloj cuando el P


no realiza accesos a la memoria. Esta tcnica se conoce como robo de ciclos (Cycle
stealing) y la CPU puede usar los buses del sistema sin notificar al P. Pero esta modalidad puede requerir circuitos adicionales para detectar los estados internos durante
los cuales la CPU no accede a la memoria. Adems este tipo de operaciones de DMA
son ocasionales y el tamao de la transferencia es variable. Un modo ms eficiente de
realizar DMA es solicitar al P que ceda al controlador el control de los buses. En un
sistema 8085, esto se logra aplicando un nivel alto en la entrada HOLD. Despus de
finalizar el ciclo de mquina en progreso, la CPU atender la solicitud poniendo en
estado de alta impedancia las lneas A8-A15, AD0-AD7, RD , WR , e IO / M y sube a
nivel alto la salida HLDA para indicar al controlador de DMA que reconoce la peticin de DMA. El terminal HLDA se mantiene en alto durante toda la operacin.

Fig.8.45 Controlador de DMA 8237 de INTEL.

Tcnicas de gestin de Entrada y Salida

494

DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8237

CLK
CS
RESET

READY
HLDA
DREQ0-3:

DB0-7

IOR

IOW

EOP

A0-.A3

A4-A7
HRQ
DACK0-3
AEN
ADSTB

MEMR
MEMW

Reloj.
Entrada de seleccin de chip.
Inicia los registros de comando, estado, solicitud y los temporales; pone a cero la bandera last/first y el contador de registro de modo; el registro de mscara se asigna para ignorar las solicitudes. El 8237 queda en Ciclo Inactivo.
Entrada de solicitud de estados de espera
Reconocimiento de solicitud de DMA.
Lneas asincrnicas para solicitud de DMA. En el modo de prioridad fija, DREQ0 tiene
la mayor y DREQ3 la menor. Los perifricos solicitan el servicio de DMA en estas lneas y esperan a bajarlas hasta el correspondiente DACK. La polaridad de DREQ es
programable. Las lneas no usadas deben ser enmascaradas.
Bus de datos. Durante los ciclos de DMA, los 8 bits ms significativos de la direccin
son cargados en el bus de datos con objeto de ser almacenados en un latch externo controlado por ADSTB. En las operaciones memoria-memoria, el bus de datos recibe y
enva los bytes a transferir.
I En el ciclo inactivo es una entrada empleada por la CPU para leer los registros de control; en el ciclo activo acta como lnea de salida para que el 8237 controle la lectura de
datos de los perifricos.
En el ciclo inactivo es una entrada empleada por la CPU para escribir los registros del
8237; en el ciclo activo acta como lnea de salida para que el 8237 controle la escritura
de datos en los perifricos.
End Of Process. Lnea bidireccional que informa de la finalizacin del servicio DMA. El
8237 permite que un ente exterior fuerce el final de un servicio bajando esta lnea. El
propio 8237 genera un pulso en ella cuando se alcanza un TC (Terminal Count, fin de
cuenta) en algn canal, salvo en el modo memoria-memoria del canal 0 (en ese caso, la
seal se produce al alcanzarse el TC del canal 1). Esta patilla est conectada en el interior del chip a un transistor en colector abierto, por lo que requiere una resistencia externa. Cuando llega una seal -EOP, el 8237 finaliza el servicio aunque en el modo de autoinicializacin los registros base volvern a ser escritos en los registros en curso del canal
implicado. El canal resulta enmascarado salvo en el caso del modo de autoinicializacin.
Lneas bidireccionales triestado de direcciones. En el ciclo inactivo son entradas empleadas para direccionar los registros internos a leer o escribir. En el ciclo activo, son salidas
y proveen los 4 bits menos significativos de la direccin.
Salidas de los 4 bits de mayor peso de la direccin durante el ciclo activo.
Lnea de salida para solicitar, durante una operacin DMA, el control de los buses al P.
Notifica a los dispositivos de E/S que ha sido atendida su solicitud. El nivel de operacin
de esta lnea es programable. RESET las baja.
Habilita el latch de 8 bits que guarda la parte alta de la direccin. Sirve tambin para
inhibir el acceso al bus por parte de otras fuentes.
Lnea que controla la carga de la parte alta de la direccin en el latch externo.
Salida USADA para acceder a la memoria durante la lectura o las transferencias memoria-memoria.
Salida parra acceder a la memoria durante la escritura o las transferencias memoriamemoria.

Un dispositivo DMA compatible con sistemas basados en el 8085A es el 8237,


el cual es un controlador de 4 canales, programables en tres modos, con posibilidad

Tcnicas de gestin de Entrada y Salida

495

de conexin de varios chips en cascada. El 8237 realiza tambin transferencias memoria-memoria, incluyendo llenar un bloque de la memoria con un dato. La interconexin con el P, los modos de funcionamiento y la programacin del controlador
DMA 8237 no se tratarn en este trabajo. Para mayor informacin usar la hoja tcnica
del fabricante.

Dispositivos de E/S Programables

496

Dispositivos de E/S Programables


En este captulo se presentarn aplicaciones prcticas que usan dispositivos
programables para interconexin de E/S. El modo de operacin de tales circuitos es
programado al inicio del cdigo y puede ser modificado en cualquier momento. El
uso de estos chips simplifica el circuito de interconexin y reduce el nmero de lneas
del programa de control.
En el interior del encapsulado de los dispositivos microcontroladores modernos se integra un grupo de circuitos programables los cuales realizan las funciones
mnimas necesarias para resolver una tarea tpica de control de complejidad baja. Estas funciones son: E/S digital, control de tiempo, conversin D/A y modulacin por
ancho de pulso. En contraposicin, para que un microprocesador pueda ser usado en
aplicaciones de control es necesario interconectar a la CPU circuitos LSI externos
para que realicen las distintas tareas bajo la direccin del P. Tambin en caso que
los recursos de un microcontrolador no sean suficientes para una aplicacin determinada, es necesario convertir el ctrl en un microprocesador y conectarle hardware
externo.
Aunque estos dispositivos externos pueden ser simples acopladores de tres estados o registros paralelos, el desarrollo de la tecnologa del P introdujo desde hace
30 aos un grupo de dispositivos programables para interconexin de E/S, los cuales
pueden realizar en forma eficiente cualquier tarea que involucre gestin de E/S. Aunque cada fabricante de semiconductores (Intel, Motorola y Zilog entre otros) introdujo su propio grupo de chips programables durante la dcada de los setenta. En este
captulo se prestar atencin a los circuitos programables diseados originalmente por
INTEL para la serie MCS-80/85, adoptados luego por los sistemas MCS-86/88 y que
han sido incorporados, bien sea dentro del P o en el conjunto de chips, a los modernos sistemas Pentium.

Dispositivos de E/S Programables

497

El circuito de interconexin de E/S paralela PPI 8255A, el controlador de interrupciones PIC 8259A, el USART 8251, el temporizador programable 8253/54 o versiones avanzadas de estos componentes son ejemplos de dispositivos que cumplen
funciones en sistemas PCs modernos y que son compatibles con sistemas basados en
el 8085A. El avance en la tecnologa de fabricacin de circuitos integrados ha hecho
obsoletos a muchos de estos chips (controladores de CRT y de discos). No obstante
algunos componentes como el USART 8251A y el PPI 8255A mantienen hoy en da
toda su funcionalidad y son usados en aplicaciones con Ps como controladores de
perifricos. En el caso del controlador de interrupciones, las funciones del PIC8259A
se incorporaron al P Pentium como una unidad funcional interna. En este captulo se
discutir el uso de estos chips en ejemplos del mundo real.

9.1 CIRCUITO PARA INTERCONEXIN DE PERIFRICOS 8255


EL PPI 8255A (Peripheral Interface Programmable) fue diseado originalmente para Ps INTEL, pero ha siso usado en aplicaciones realizadas con la mayora
de los microprocesadores existentes. El 8255A ofrece 24 terminales de E/S las cuales
pueden programarse en dos grupos (A y B) de 12 lneas. El dispositivo puede operar
en tres modos diferentes (0, 1 y 2). La figura 9.1 muestra el diagrama de bloques y la
distribucin de terminales del 8255A.

8255

Fig.9.1. El PPI 8255A.

Dispositivos de E/S Programables

498

DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8255A


VCC
GND

CS
WR
RD
D0-D7
RESET
A0 A1

+5V
Tierra
Un nivel bajo en este terminal permite la comunicacin entre el P y el 8255A.
Esta entrada se activa a cero durante una operacin de escritura del P.
Entrada activa en cero durante una operacin de lectura del P.
Es el bus de datos bidireccional y tres estados por medio del cual se transfieren comandos y/o datos
entre el PPI y el P.
Un nivel alto en esta entrada inicia el registro de control con todos los puertos en el modo de entrada.
En conjunto con las entradas

CS , WR y RD controlan el acceso a uno de los tres puertos de E/S o


al registro de control. Usualmente se conectan a las salidas A0-1 del 8085A.

PA0-PA7

Puerto A: Ocho bits de un latch de salida, buffer y un latch de entrada.

PB0-PB7

Puerto C : Ocho bits de un latch de salida , buffer y un latch de entrada.

PC0-PC7

Puerto C: Ocho
bits.

bits de un latch de salida, y buffer de entrada. Puede usarse como dos puertos de 4

Al grupo A pertenecen el puerto A: PA0-PA7 y los cuatro bits ms significativos del puerto C (PC4-PC7); el grupo B agrupa las ocho lneas del puerto B: PB0-PB7
y los cuatro bits de orden bajo del puerto C (PC0-PC3). Adems de los puertos, el
8255A contiene un registro de comandos para la programacin del dispositivo. Para
que el 8085A pueda tener acceso a uno de los registros para programar el dispositivo,
o usar uno de los puertos, la entrada de habilitacin CS debe ponerse a nivel bajo. La
seleccin del registro de comando o de un puerto de E/S particular, se realiza por medio de las entradas de direccin A0 y A1, segn lo indicado por la tabla 9.1.
Tabla. 9.1 Direcciones de los registros internos del PPI 82550
A7
x
x
x
x

A6
x
x
x
x

Direccin del puerto de E/S


A5 A4 A3 A2 A1
x
x
x
x
0
x
x
x
x
0
x
x
x
x
1
x
x
x
x
1

A0
0
1
0
1

Registro seleccionado
Puerto A de E/S
Puerto B de E/S
Puerto C de E/S
Registro de comando

El tipo de operacin a realizar es determinado por la activacin de una de las


entradas de control: RD o WR . Estas lneas de entrada puede conectarse a los terminales de igual nombre del P o a las salidas de control de lectura y escritura en puerto de E/S: IORD e IOWR , de acuerdo con el modo que se decodifica la direccin del
dispositivo. Las ocho lneas de datos D0-D7 van al bus de direcciones/datos AD0-AD7
y permanecern en estado de alta impedancia cuando CS no est activa; o en caso
que RD y WR estn ambas en uno, independientemente del estado de CS . La tabla de
estados del funcionamiento bsico del 8255, se ofrece en la tabla 9.2.

El modo en el cual el PPI se interconecta con la CPU se muestra en la figura


5.21, donde se usa seleccin lineal para habilitar el 8255A. Cuando al sistema se le

Dispositivos de E/S Programables

499

aplica energa, la lnea RESET OUT del P sube a nivel alto y obliga al 8255A a
iniciarse con todos los puertos programados como entrada. Si tal configuracin no es
la deseada para la aplicacin, el PPI debe ser reprogramado escribiendo un cierto patrn de bits en el registro de comando.
Tabla. 9.2 Operacin del PPI 8255A.

9.1.1 Puertos de entrada y salida

El 8255A tiene tres puertos A, B, C de ocho bits, pudiendo dividirse el puerto


C en dos registros de E/S de cuatro bits cada uno. Los cuatro puertos se organizan
como dos grupos A y B, donde cada grupo es formado por un puerto de ocho bits y
otro de cuatro lneas. Como ilustra la figura 9.1, el grupo A est compuesto por el
puerto A y el nibble ms alto del puerto C. Al grupo B lo forma el puerto B y los cuatro bits de orden bajo del puerto C.
Grupo A: PA0-7 + PC4-7
Grupo B: PB0-7 + PC0-3

La funcin de las lneas de cada grupo la fija una palabra de control que se
carga en el registro de comando (A0-1=112), para operacin en tres modos diferentes.
9.1.2 Modos de operacin del 8255A

El cdigo de la aplicacin puede programar los grupos A y B del 8255A para


que funcione en uno de tres modos de operacin. Estos son:
1. Modo 0
2. Modo 1
3. Modo 2

E/S normal.
E/S con protocolo de enlace.
Transferencia bidireccional.

Dispositivos de E/S Programables

500

Modo 0

Los terminales de los puertos A, B y C pueden programarse como entradas o


salidas con retencin (slo las salidas) de los datos. El puerto C puede usarse como
dos puertos de 4 bits, con posibilidad de activar/desactivar cualquiera de las lneas
individualmente. Son posibles 16 configuraciones diferentes de E/S en este modo.
Modo 1

La transferencia desde/hacia los puertos A y B es controlada por un protocolo


de enlace usando las lneas del puerto C. Los grupos A y B pueden ser programados
en forma independiente para usar el puerto de ocho bits para transferencias controladas por las cuatros lneas del puerto C del grupo correspondiente. El puerto A y B
puede ser entrada o salida, ambas con retencin de datos. Los terminales del puerto C
respectivo se usan como seales de control o de estado del puerto de ocho bits.
Modo 2

El puerto A puede programarse para transmisin o recepcin de datos sobre


las mismas lneas. Tanto las entradas como las salidas son retenidas y se usan cinco
lneas del puerto para controlar y examinar el estado de la transferencia a travs del
puerto A.
9.1.3 Programacin del 8255A

La palabra escrita en el registro de control es decodificada por la lgica interna del dispositivo para establecer cual de dos funciones posibles ser realizada. Estas
son:
1. Definicin de modo de operacin.
2. Activacin/desactivacin de bits del puerto C.

Cuando el bit ms significativo (D7) de la palabra de control es uno, esta se


interpreta como un byte de definicin de modo de operacin. El formato de esta palabra se muestra en la figura 9.2
Se puede configurar al componente para operacin en un modo o en una combinacin de estos. La figura 9.3 muestra un ejemplo de seleccin de modo. En este
caso los grupos A y B se configuran como entradas/salidas en el modo 0. Si la direccin del puerto de control es 0BH y la palabra de control es 91H, el siguiente cdigo
realizar la programacin de chip.
pctrl_8255

equ

0bh

mvi a,10010001b
out pctrl_8255

; Direccin del registro de control


; Dalabra de control al acumulador
; Se programa el dispositivo

Dispositivos de E/S Programables

Fig. 9.2 Palabra de definicin del modo de operacin.

Fig. 9.3 Ejemplo de configuracin en modo 0.

501

Dispositivos de E/S Programables

502

Cuando el bit D7 de la palabra de control es cero lgico, los circuitos internos


del PPI la entienden como una orden de activacin/desactivacin de uno de los bits
del puerto C. El formato de este comando se muestra en la figura 9.4. Esta funcin se
denomina bit set/reset, y permite poner a uno o a cero cualquiera de las lneas del
puerto C.

Fig. 9.4 Formato de la palabra de control para activar/desactivar un bit del puerto C.

Suponga que se desea generar un pulso de nivel alto en el terminal 2 del puerto C. El siguiente programa realizar la tarea.
;---------------------------------------------------------------------------------------------pctrl_8255
equ 0bh
; Direccin del registro de control.
; Pulso se inicia en cero
mvi a,00000100b
out pctrl_8255

; Palabra de control al acumulador


; Bit 2 a cero, al inicio.

; Poner bit a nivel alto


mvi a,00000101b
out pctrl_8255

; Palabra de control al acumulador


; Bit 2 a uno.

; Poner bit a nivel bajo


mvi a,00000100b
; Palabra de control al acumulador
out pctrl_8255
; Bit 2 a cero al final del pulso.
;----------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

503

9.1.4 Aplicaciones del 8255

A continuacin se presentan un grupo de ejemplos prcticos que ilustran el


uso del PPI 8255A en sus diferentes modos de operacin.
Operacin en el modo 0

La primera aplicacin del modo 0 consiste en la interconexin de un teclado al


sistema usando un 8255A y la rutina de lectura del teclado.
Ejemplo 9.1
Se debe escribir un programa para la lectura del teclado numrico de la figura
9.5. Cuando se pulse una tecla, debe retornarse su valor en el registro acumulador.

(a)

(b)

Fig. 9.5 Teclado numrico. a) Aspecto mecnico. b) Smbolo elctrico.

El teclado de la figura 9.5 se usa para introducir al C informacin numrica


en representacin hexadecimal. El perifrico de entrada est formado por 16 pulsadores conectados en una matriz 4 x 4. La presin de un pulsador conectar la fila donde
se encuentra la tecla, con la columna correspondiente.
Las funciones que debe realizar el programa de control de teclado son:

Detectar la pulsacin de una tecla.


Suprimir los rebotes de contactos.
Identificar la tecla.
Generar el cdigo correspondiente.
En forma opcional: proteger al sistema contra pulsaciones simultneas de teclas distintas.

Para conectar el teclado, se usa el puerto C del 8255 funcionando en modo 0.


Las filas del se conectan a los terminales PC0-3 y las columnas a las lneas PC4-7, como indica la figura 9.6. Tanto las filas como las columnas se fuerzan a +5 V por medio de resistores.

Dispositivos de E/S Programables

Fig. 9.6 Un PPI 8255 funciona como puerto para el teclado.

504

Dispositivos de E/S Programables

505

El programa esperar en un lazo hasta que ocurra la pulsacin de una tecla. La


activacin de un pulsador conectar la fila donde ste se ubica con la columna correspondiente. A cada elemento de la matriz le corresponde un nmero para indicar su
ubicacin y un cdigo que representa el valor de la tecla.
Las teclas se numeran: 00, 11,FF. De modo que para este caso, el cdigo de la tecla se corresponde con su nmero. Por ejemplo la tecla 6 (nmero 6) estar en la fila 1 columna 2. El algoritmo para determinar el valor de una tecla consiste en identificar la fila y la columna de la tecla presionada. El nmero (posicin en la
matriz) del pulsador viene dado por:
D
D
D
N = N de la Fila Nmero de Columnas + N de la Columna

La tecla de valor 6 tendr como nmero 1 x 4 + 2 = 6. En este caso el nmero corresponde con el valor. Si el teclado tiene teclas de funcin ser necesario el
uso de una tabla, a la cual se entra con el nmero de la tecla para encontrar el valor
correspondiente.
Identificacin de la fila:
PCbajo: Entrada
PCalto: Salida

Fig. 9.7 Identificacin de la fila.

Se escribe el patrn de bits 0000 en el puerto PCalto y se procede a leer en el


puerto PCbajo: 1101. El bit 1 estar en nivel bajo debido a que la tecla 6 fue pulsada.

Dispositivos de E/S Programables

506

El valor en el acumulador permite identificar la fila a la cual pertenece el pulsador activado.


Identificacin de la columna:
PCbajo: Salida
PCalto: Entrada

Fig. 9.8 Identificacin de la columna.

Se escribe el patrn 0000 en el puerto PCbajo y se lee en el puerto PCalto: 1011.


El bit 2 estar en cero debido a que la tecla 6 fue pulsada. Una vez identificadas la fila
y la columna puede calcularse el nmero del pulsador como se describe en la pgina
previa.
En la figura 9.9 se muestra el diagrama de flujo del programa tecla, el cual espera por la presin de una tecla y suprime el efecto del rebote del interruptor o una
activacin falsa por ruido. Si ocurre una pulsacin vlida, se procede a determinar el
nmero del pulsador como se indic. El cdigo de la rutina Tecla se presenta a continuacin y considera que el 8255 de la figura 9.6 se decodifica en la direccin 0. La
posicin de la tecla pulsada es cargada en el registro acumulador.
El teclado del ejemplo 9.1 solo permite introducir al sistema nmeros del cdigo hexadecimal. En la prctica, es usual que las aplicaciones requieran teclados con
pulsadores de funcin. Por ejemplo una tecla puede validar un nmero previamente
introducido. Otras pueden permitir: el borrado de la pantalla, el desplazamiento en un
men de opciones, la ejecucin de un programa, especificar la direccin de giro de un
motor o calcular la raz cuadrada del valor cargado previamente.

Dispositivos de E/S Programables

Fig. 9.9 Rutina tecla para detectar activacin, eliminar rebote e identificar pulsador.

507

Dispositivos de E/S Programables

508

;--------------------------------------------------------------------------------------------------------------------------; Rutina de lectura de teclado 4x4


;--------------------------------------------------------------------------------------------------------------------------palb_ctrl1
equ 91h
palb_ctrl2
equ 8ah
pc_8255
equ 2
pctrl_8255
equ 3
;--------------------------------------------------------------------------------------------------------------------------tecla:

leer:

releer:

mvi a,palb_ctrl1
out pctrl_8255
mvi a,0fh
out pc_8255
in pc_8255
ani 0fh
cpi 0fh
jnz leer
call r20ms
in pc_8255
ani 0fh
cpi 0fh
jz releer
call r20ms
in pc_8255
ani 0fh
cpi 0fh
jz releer
mov c,a
mvi a,palb_ctrl2
out pctrl_8255
mvi a,0f0h
out pc_8255
in pc_8255

;PCL:entrada, PCH:salida
; Nibble alto del acumulador a cero
; Todas las columnas a cero
; Leer filas
; Poner mascara
; Si tecla pulsada, leer
; Teclas liberadas, esperar 20 ms
; Leer filas
; Poner mascara
; Detectar tecla pulsada
; Tecla no pulsada, leer puerto
; Tecla pulsada, esperar 20 ms
; Detectar error por ruido
; Detectar pulsacin falsa
; Si ruido, leer puerto
; Cargar patrn de filas en C
; PCL:salida, PCH:entrada
; Todas las filas en cero
; Patrn de columnas en A

; Identificar columna
iden_c:

mvi b,3
ral
jnc fila
dcr b
jmp iden_c

; Contador de columnas a 3
; Desplazar a la izquierda
; Si CY=0, en B numero de columna
; Si CY=1, restar 1 a contador de colum.
; Volver a desplazar

; Identificar fila
fila:
iden_f:

listo:

mov a,c
mvi c,0
rar
jnc listo
inr c
jmp iden_f
mov a,c
ral
ral
ora b
ret

; Patrn de filas en acumulador


; Contador de filas a cero
; Desplazar a la derecha
; Si CY=0, en C numero de fila
; Si CY=1, incrementar contador de filas
; Desplazar
; Numero de fila al acumulador
; Numero de la fila x 4
; Sumar nmero de columna
; Nmero de tecla en registro A

Dispositivos de E/S Programables

509

El ejemplo que sigue describe el modo de interconexin al sistema y el programa de control de un teclado con teclas cuyas funciones son especificadas por el
diseador.
Ejemplo 9.2

La figura 9.10 presenta un teclado de 20 teclas arregladas en una matriz de 4x5


con cuatro pulsadores de funcin. Escriba una rutina que lea el teclado y cargue el
cdigo de la tecla en el registro acumulador.

Fig. 9.10 Matriz de 20 teclas con cuatro funciones.

Debido a la distribucin de los pulsadores en la matriz, el nmero que indica


la posicin no corresponde con el valor que debe retornar la tecla. Por ejemplo la tecla nmero 4 es F4 y la nmero 5 tiene el valor 4. Esto determina que una vez determinada la posicin del elemento en la matriz, debe usarse una tabla de bsqueda para
encontrar el cdigo correspondiente. Tambin deben usarse cuatro lneas del puerto A
para las filas y cinco del puerto B para las columnas. El siguiente cdigo realiza la
tarea solicitada en el ejemplo.
;--------------------------------------------------------------------------------------------------------------------------; Seccin de programa principal que llama a rutina tecla.
; Con el nmero del pulsador entra en una tabla de consulta y encuentra el cdigo de la tecla activada y
; lo retorna en el registro acumulador.
;--------------------------------------------------------------------------------------------------------------------------tope_pila
equ 300h
;--------------------------------------------------------------------------------------------------------------------------lxi sp,tope_pila
call tecla
lxi h,cod_tecla
add l
mov l,a
mov a,m
.
.
.

Dispositivos de E/S Programables

510

;--------------------------------------------------------------------------------------------------------------------------; Tabla de cdigo de tecla


;--------------------------------------------------------------------------------------------------------------------------cod_tecla:

db 00h ; tecla 0
db 01h ; tecla 1
db 02h ; tecla 2
db 03h ; tecla 3
db 10h ; tecla f1
db 04h ; tecla 4
db 05h ; tecla 5
db 06h ; tecla 6
db 07h ; tecla 7
db 11h ; tecla f2
db 08h ; tecla 8
db 09h ; tecla 9
db 0ah ; tecla a
db 0bh ; tecla b
db 12h ; tecla f3
db 0ch ; tecla c
db 0dh ; tecla d
db 0eh ; tecla e
db 0fh ; tecla f
db 13h ; tecla f4
;--------------------------------------------------------------------------------------------------------------------------; Rutina de lectura de teclado 4x5. Retorna nmero de tecla en el acumulador
;--------------------------------------------------------------------------------------------------------------------------palb_ctrl1
equ 91h
palb_ctrl2
equ 8ah
pa_8255
equ 0
pb_8255
equ 1
pctrl_8255
equ 3
;--------------------------------------------------------------------------------------------------------------------------tecla:
mvi a, palb_ctrl1
out pctrl_8255
xra a
out pb_8255
leer:
in pa_8255
ani 1fh
cpi 1fh
jnz leer
call r20ms
releer:
in in pa_8255
ani 1fh
cpi 1fh
jz releer
call r20ms
in pa_8255
ani 1fh
cpi 1fh
jz releer
mov c,a
mvi a, palb_ctrl2
out pctrl_8255
xra a

Dispositivos de E/S Programables

iden_c:

fila:
iden_f:

listo:

out pa_8255
in pb_8255
mvi b,0
rar
jnc fila
inr b
jmp iden_c
mov a,c
mvi c,0
rar
jnc listo
inr c
jmp iden_f
mov a,c
ral
ral
add c
add b
ret

511

;Numero de la fila x 5
;Sumar nmero de columna

Observe que a las cuatro teclas de funcin se les asigna cdigos arbitrarios y
diferentes a los dgitos del sistema hexadecimal. Por ejemplo 10H para F1, 11H para
F2, 12H para F3 y 13H para F4. Estos valores permiten al programador conocer cual
funcin fue seleccionada en cualquier momento.
Es usual que una aplicacin basada en Ps requiera adems de perifricos de
entrada algn tipo de dispositivo para exhibicin de informacin. Los sistemas de
bajo costo usan mdulos LCD o indicadores de siete segmentos. An cuando las pantallas LCD de 2 a 4 neas han disminuido en costo y no requieren refrescar continuamente los datos presentados, los visualizadores con diodos 7-segmentos son de uso
difundido en el medio industrial sobre todo cuando la luz ambiental es deficiente.
Puede considerarse que la presentacin con dispositivos tipo LEDs permanecer durante muchos aos como una opcin vlida para el despliegue de informacin en sistemas e instrumentos electrnicos de bajo costo. El ejemplo siguiente ilustra el uso de
tales indicadores para exposicin de informacin alfanumrica.
Ejemplo 9.3
La figura 9.11 muestra un circuito visualizador de ocho dgitos con indicadores
de siete segmentos tipo nodo comn, conectados a un PPI 82C55. Para minimizar el
nmero de lneas de interconexin se usa la tcnica de multiplexado de los datos a
presentar. Se debe escribir una rutina para el control de exhibidor, mostrando en la
pantalla el mensaje: Udo 2005.
Al multiplexar en el tiempo, cada indicador es seleccionado durante un lapso
determinado, pero debido a la persistencia de la imagen en la retina humana, ste aparenta estar continuamente activado. Los segmentos de todos los LEDs se conectan en
ocho lneas comunes y cada dgito se activa a una frecuencia fmux.

Dispositivos de E/S Programables

Fig. 9.11. Circuito de presentacin con ocho caracteres alfanumricos.

512

Dispositivos de E/S Programables

513

Para una presentacin con parpadeo mnimo, la frecuencia de multiplexado


debe estar comprendida entre 100 Hz y 1.5 KHz. Esto significa que si los N indicadores se activan en intervalos Tx de 500 s, la frecuencia fmux ser igual:
f mux =

1
Tx N

f mux =

1000
= 250 Hz
0.5 8

El circuito debe estar sincronizado. Esto significa que debe cargarse en el


puerto A del 82C55 (funcionando en modo 0) el complemento del cdigo de 7 segmentos del caracter a presentar en un LED y simultneamente debe aplicarse un nivel
bajo, por medio de una lnea del puerto B, en la base del transistor que aplica energa
al indicador correspondiente. Este proceso se repite para cada dgito, a una frecuencia
Nfmux.
Como se observa en la figura 9.11, el puerto A del 82C55 se usa para activar
los segmentos. Para proveer la corriente necesaria para los segmentos se usa un circuito amplificador ULN2003 el cual puede manejar con comodidad corrientes de salida de hasta 500 mA. Debido a que el chip solo tiene siete pares darlington, se usa un
transistor discreto Q2N222A para el punto decimal. La seleccin de dgitos se logra
activando con un nivel bajo en el terminal correspondiente del puerto B, uno de los
transistores PNP Q2N4405.
La seleccin de la corriente que debe circular por cada segmento para garantizar una brillantez adecuada ante el observador, depende de distintos factores fsicos y
humanos. La distancia de observacin, el ngulo de visin, la altura del carcter, la
iluminacin ambiental y la razn de contraste entre el indicador y el color del fondo
ambiental son algunos de los parmetros a considerar para fijar el valor adecuado de
la corriente por segmento. En nuestro caso se considera que, de acuerdo con las especificaciones del fabricante del indicador, una intensidad de If =10 mA por segmento
garantizar un brillo aceptable. La corriente If es provista por los amplificadores del
ULN2003 y por el transistor Q2N222A. La corriente que circula por el circuito de
colector de los transistores Q2N4405 de manejo de dgito ser igual a kIf con k igual
al nmero de segmentos iluminados en el indicador correspondiente.
Debido a que cada LED permanece apagado la mayor parte del tiempo, la corriente promedio que circula por un segmento ser mucho menor que 10 mA y en
consecuencia la iluminacin percibida por el observador ser deficiente. Para compensar el efecto del multiplexado sobre el nivel de corriente directa, se calcula la resistencia Rp de modo el pico de corriente en el segmento produzca una intensidad
promedio de 10 mA. La corriente que circula en promedio durante un periodo de multiplexado es:
If =

I pico
N I
pico =
T
N

Dispositivos de E/S Programables

514

Esto indica que para obtener un nivel de iluminacin equivalente a la que producira una corriente de 10 mA en condiciones de corriente continua, el pico de corriente debe ser igual a 80 mA, para una pantalla de ocho dgitos. Esto es:
I pico = N I f

Para calcular el valor del resistor limitador de corriente Rp se usa el circuito de


la figura 9.12 que muestra la trayectoria de la corriente por un segmento de un indicador.

Fig. 9.12 Circuito equivalente para el clculo de Rp.

El transistor Q1 de la figura 9.12 conduce por la aplicacin de un nivel bajo en


su base. Esta tensin proviene de una lnea del puerto B. El transistor Q2 del par darlington del ULN2003 est activado cerrando el camino de la corriente a travs del
segmento a. Para iluminar un segmento, se aplica un nivel alto a la entrada del
ULN2003. El valor del resistor de 510 en la base de Q1 se calcula para que cuando
todos los segmentos del indicador estn activados, circule una ICQ1 = 8x80 mA= 640
mA. El VCESATQ1, bajo estas condiciones, es de aproximadamente 600 mV, mientras
que la tensin de saturacin de Q2 a una corriente de 80 mA, es de 0.8 V. Con estos
valores se calcula Rp:

RP =

5V VCEsatQ1 VF VCEsatQ 2
I pico

(5 0.6 2.4 0.8)V


= 15
80 mA

Dispositivos de E/S Programables

515

La resistencia en la base del transistor que maneja el punto decimal se calcula


de modo que una tensin de 4.6 V en la lnea PA7 produzca una intensidad de 80 mA
en el circuito de colector del Q2N2222 con una tensin colector-emisor de 0.8 V.
El programa de control para el circuito de la figura 9.11 se muestra a continuacin. Este presenta el mensaje especificado con una frecuencia de multiplexado de
250 Hz. La presentacin se inicia por el indicador del extremo derecho.
;---------------------------------------------------------------------------------------------------------------; Este programa presenta el mensaje Udo 2005 en
; una pantalla de indicadores de 7-segmentos.
;---------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------i_stack
equ 8fbh
; Inicio de la pila
num_dig
equ 8
plbr_ctrl equ
80h
;---------------------------------------------------------------------------------------------------------------; Definicin de segmentos
defseg puertos,start=0, class=iospace
; 8255 en direccin 0
defseg stack, start=i_stack
; La pila reside en la RWM
defseg progr, class=code, start=0
;---------------------------------------------------------------------------------------------------------------; Puertos del 8255
seg puertos
pa_8255
ds 1
; Salidas a segmentos
pb_8255
ds 2
; Seleccin de dgitos
pctrl_8255
ds 1
; Puerto de control
;---------------------------------------------------------------------------------------------------------------; Los 8 bytes ltimos de RWM soportan el stack.
seg stack
ds 8
t_stack:equ $-1
; Base de la pila
;---------------------------------------------------------------------------------------------------------------; Segmento de cdigo en EPROM
seg progr
lxi sp,t_stack
; Se inicia el apuntador de pila
mvi a,plbr_ctrl ; Palabra de control del 8255
out pctrl_8255 ; Se programan puertos A y B como salidas
rep:
lxi h,msj
; Registro par H apunta a primer caracter del mensaje
call visual
; Presentar mensaje
jmp rep
; Repetir por siempre
;---------------------------------------------------------------------------------------------------------------; Rutina visual
;---------------------------------------------------------------------------------------------------------------visual:
mvi b,num_dig ; Registro B es el contador de dgitos
mvi a,0feh
; Primero se activa el dgito 0
mov c,a
; Salvar patrn de seleccin de indicador
pres:
out pb_8255
; Activar dgito n
mov a,m
; Al registro acumulador primer caracter del mensaje
xchg
; Salvar direccin del mensaje en registro par DE

Dispositivos de E/S Programables

516

lxi h,cod_7seg ; HL apunta al inicio de la tabla de cdigos 7-segmentos


add l
; Sumar desplazamiento
mov l,a
mov a,m
; Cdigo de 7-seg al registro acumulador
out pa_8255
; Sacar por puerto A
xchg
; Recuperar direccin de caracter del mensaje
call r500us
; Esperar 500 s
mov a,c
; Recuperar patrn de seleccin de dgito
rlc
; Se activar el dgito siguiente
mov c,a
; Guardar patrn
inr l
; Apuntar siguiente caracter del mensaje
dcr b
; Contador de caracteres menos 1
jnz pres
; Si no cero, siguiente caracter
ret
; Retornar si caracter final.
;---------------------------------------------------------------------------------------------------------------; Mensaje
;---------------------------------------------------------------------------------------------------------------msj:
db u,?d,o,espac,dos,cero,cero,cinco
;---------------------------------------------------------------------------------------------------------------; Tabla de cdigos de siete segmentos
;---------------------------------------------------------------------------------------------------------------cod_7Seg:
cero
equ $-cod_7Seg
db 0f3h
db 60h
dos
equ $-cod_7Seg
db 0b5h
db 0f4h
cuatro
equ $-cod_7Seg
db 66h
cinco
equ $-cod_7Seg
S
equ $-cod_7Seg
db 0d6h
db 0d7h
db 70h
ocho
equ $-cod_7Seg
db 0f7h
db 7eh
?A
equ $-cod_7Seg
db 77h
?B
equ $-cod_7Seg
db 0c7h
?C
equ $-cod_7Seg
db 93h
?d
equ $-cod_7Seg
db 0e5h
?E
equ $-cod_7Seg
db 97h
F
equ $-cod_7Seg
db 17h
g
equ $-cod_7Seg
db 0f6h
?H
equ $-cod_7Seg
db 67h
?L
equ $-cod_7Seg

Dispositivos de E/S Programables

517

db 85h
equ $-cod_7Seg
db 0e6h
n
equ $-cod_7Seg
db 45h
i
equ $-cod_7Seg
db 20h
J
equ $-cod_7Seg
db 0e1h
o
equ $-cod_7Seg
db 0e4h
P
equ $-cod_7Seg
db 37h
q
equ $-cod_7Seg
db 76h
r
equ $-cod_7Seg
db 05h
t
equ $-cod_7Seg
db 44h
u
equ $-cod_7Seg
db 0Eh

equ $-cod_7Seg
db 0a3h
_
equ $-cod_7Seg
db 80H
espac
equ $-cod_7Seg
db 00h
end
;---------------------------------------------------------------------------------------------------------------?M

Ejemplo 9.4
En este ejemplo se mide y presenta el valor de una tensin continua positiva
en el rango de 0 a +5 V. Se construir y programar un convertidor anlogo digital
por aproximaciones sucesivas (AS). El mtodo de AS usa un conversor digital analgico y un comparador como ilustra la figura 9.13. El proceso de conversin se realiza
en un nmero de pasos igual al de bits (en este caso ocho) que tenga el CDA.

Fig. 9.13. Convertidor A/D por aproximaciones sucesivas.

Dispositivos de E/S Programables

518

Algoritmo:

Al inicio del proceso de conversin se aplica a las entradas del CDA un valor
digital con el bit ms significativo puesto a nivel alto y los bits restantes a cero y se
lee la salida del comparador. Un nivel lgico 1/0 indica que la seal de entrada es
mayor/menor que la generada por el CDA. El valor lgico de la salida del comparador se asigna en la siguiente etapa al bit que se procesa. A continuacin se repite el
proceso con el siguiente bit y as sucesivamente hasta el menos significativo. El principio de AS est basado en un mtodo de ensayo y error que aproxima el valor de la
seal de entrada a la mitad superior e inferior del rango de representacin de cada
etapa. En la figura 9.15 se presenta el diagrama de transiciones para un convertidor
anlogo digital por aproximaciones sucesivas de cuatro bits. Las seales Vo y Vr representan las salidas del circuito comparador y del conversor digital anlogo respectivamente. La primera slo puede tomar valores 1 0, segn la tensin de entrada sea
mayor o menor que la generada por el CDA y la segunda es la tensin generada por
este conversor.

Fig.9.14. Circuito del convertidor A/D por aproximaciones sucesivas.

Existen convertidores analgico digital del tipo descrito presentados como un


chip en el cual el controlador se realiza por hardware y se integra al encapsulado. En
este caso se usa el P como controlador, conectando un DAC0808 al puerto de salida
B (01H) de un 8255A y examinando la salida del comparador LM311 por el bit 7 del
puerto de entrada C (02H), como ilustra la figura 9.14. El PPI 8255A funcionar en
modo 0 y no se muestra en el diagrama.
EL convertidor D/A tiene una resolucin de 8 bits y se configura para entregar
una corriente de salida IOUT desde 0 hasta IFS cuando las entradas A8-1 van desde 00
hasta FFH. El amplificador operacional LM741 a la salida del CDA es un conversor
de corriente a voltaje y provee una tensin de salida igual a:
VS = I OUT 5.6K
VS =

VREF
2

A base10 =

5
A base10
256

Dispositivos de E/S Programables

519

Fig. 9.15. Diagrama de transiciones para un CAD por aproximaciones sucesivas.

Los objetivos de este ejemplo son:


1 Escribir un programa en ensamblador para obtener el valor binario de la
tensin analgica de entrada Vi usando el P para resolver el algoritmo de
aproximaciones sucesivas.
2 Desarrollar una rutina que convierta el valor binario de Vi en tres dgitos
BCD y los almacene en memoria.
3 Realizar un programa que permita presentar el valor BCD de tres dgitos en
el circuito de exposicin visual de la figura 9.16.

Dispositivos de E/S Programables

520

Fig. 9.16. Pantalla de tres dgitos con indicadores tipo ctodo comn.

El mdulo de presentacin est formado por un display que contiene tres indicadores de 7 segmentos ctodo comn y es especialmente fabricado para uso con la
tcnica de multiplexado. El circuito usa un decodificador CMOS 4511 para generar el
cdigo de 7 segmentos. La frecuencia de multiplexado debe ser 333.33 Hz (1000/3).
Solucin:
El programa de control para el voltmetro de corriente continua del ejemplo
consta de 4 mdulos, estos son:
Programa principal
Configura el 8255A para operar en el modo 0 con los puertos A y B como salidas y el puerto C como entrada.
Llama a la rutina ADC, la cual realiza el algoritmo de consultas sucesivas y retorna el valor
digital de la muestra.
Convierte el valor del voltaje de entrada desde binario a BCD y lo almacena en memoria.
Para la conversin a decimal se usa el hecho que dada la salida A del convertidor A/D, el valor del voltaje de entrada es:
5
Vi =
A base10
256

En representacin hexadecimal se tiene:


5
Vi =
A base16
100H

Dispositivos de E/S Programables

521

Si el resultado de la conversin es 25510 = FFH, entonces el valor del voltaje es:


Vi =

5
255 = 4.98 Volt
256

Un nmero de 8 bits, al ser multiplicado por 5 por 10 siempre producir un resultado (supuesto de 12 bits) cuyo dgito ms significativo es un nmero BCD. De modo que bastar
ejecutar el producto 5 x FFH = 4FBH para obtener el primer dgito BCD (4) del resultado.
El valor FBH es el residuo despus de la divisin por 256. En realidad esta ltima operacin
no se realiza sino que el remanente FBH se multiplica por diez, resultando 9CEH. La divisin entera de este valor por 256 entrega el dgito BCD (9) de las dcimas de voltios y un
residuo de C0H. Repitiendo el proceso con el nuevo residuo resulta el valor 80CH y se obtienen las centesimas (8) de voltios. Con este algoritmo sencillo puede convertirse el dato
entregado por el ADC a un voltaje en BCD.
Rutina ADC
Realiza el algoritmo de aproximaciones sucesivas y retorna en el registro acumulador la representacin digital del voltaje Vi de entrada. Esta tcnica pone a 1 el bit ms significativo
del puerto conectado al convertidor D/A, de modo que la salida del DAC tendr la tensin
de media escala. Este nivel es comparado con el valor del voltaje desconocido de entrada. Si
el voltaje de prueba a la salida del CDA es demasiado bajo, el bit es puesto a 1 permanentemente y se prueba el bit menos significativo siguiente. En caso contrario, el bit ms significativo es puesto a cero y se procede con el prximo. Este proceso contina tratndose todos los bits de izquierda a derecha, hasta el ltimo.
Rutina POR5
Multiplica por 5 el contenido del registro L y retorna el resultado en el registro par HL.
Tambin es llamada para ejecutar el producto por 10. En este caso el valor de 16 bits retornado por el programa POR5, se desplaza un bit hacia la izquierda.
Rutina VISUAL
Es llamada por el programa principal para presentar el valor de la tensin almacenado en
BCD en la memoria del sistema. Una subrutina RET1MS genera el retardo de 1ms para fijar
la frecuencia de multiplexado deseada. Para disminuir el parpadeo del dgito menos significativo, el periodo de muestreo del voltaje de entrada se ajusta aproximadamente a 1 segundo. La rutina de retardo forma parte del mismo mdulo que VISUAL.

A continuacin se presentan el contenido de cada mdulo, en el mismo orden como se describieron:


;-------------------------------------------------------------------------------------------------------------$title(Voltmetro DC)
; Modulo de programa principal
;-------------------------------------------------------------------------------------------------------------public pa_8255,pb_8255,pc_8255,temp,num_dig
extern adc,por5,visual
;-------------------------------------------------------------------------------------------------------------i_stack
equ 8500H
; Inicio de la pila
i_rwm
equ 8000H
; Direccin de inicio de RWM para datos
num_dig
equ 3
; Nmero de indicadores LEDs
plbr_ctrl
equ 89H
; PA y PB: Salidas PC: Entradas
;--------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

522

; Definicin de segmentos
defseg puertos,start=0, class=iospace
defseg stack, start=i_stack
defseg datos, class=data, start=i_rwm
defseg progr, class=code, start=6002H

; 8255 en direccin 0
; La pila reside en la RWM
; Datos a partir de 8000H
; Primera posicin de RWM de
; usuario en el MPR-85 PLUS
;-------------------------------------------------------------------------------------------------------------; Puertos del 8255
seg puertos
pa_8255
ds 1
; Salida de datos BCD y seleccin de indicadores
pb_8255
ds 1
; Salida a convertidor D/A
pc_8255
ds 1
; Lnea PC0 = P2.0, salida del comparador
p_ctrl
ds 1
; Puerto de control del 8255
;-------------------------------------------------------------------------------------------------------------; Los 16 bytes ltimos de RWM soportan el stack.
seg stack
ds 10H
t_stack:equ $-1
; Base de la pila
;-------------------------------------------------------------------------------------------------------------; Segmento de datos en RWM
seg datos
temp
ds 3
; Direccin de almacenamiento de valor medido
;-------------------------------------------------------------------------------------------------------------; Segmento de cdigo cargado en RWM de usuario del MPR-85 PLUS
seg progr
lxi sp,t_stack
; Se carga el apuntador de pila
mvi a,plbr_ctrl
; Palabra de control al A
out p_ctrl
; Se programa el 8255
prpal:
call adc
; Adquirir muestra de la entrada
mov l,a
; Valor digital de muestra al registro L
call por5
; Se inicia conversin de binario a BCD
mov a,h
; Dgito ms significativo al A
sta temp
; Dgito ms significativo a memoria
call por5
; Remanente se multiplica por 10 (x5)
dad h
; Resultado se multiplica x2
mov a,h
; Dgito siguiente al A
sta temp+1
; Dgito siguiente a memoria
call por5
; Nuevo residuo x10 (x5)
dad h
; Resultado x2
mov a,h
; Dgito menos significativo al A
sta temp+2
; Dgito menos significativo a memoria
call visual
; Presentar resultado de la medida
jmp prpal
; Buscar muestra siguiente
end
;-------------------------------------------------------------------------------------------------------------;-------------------------------------------------------------------------------------------------------------;Rutina ADC
;-------------------------------------------------------------------------------------------------------------public adc
extern pb_8255,pc_8255
defseg progr
seg progr
adc:
lxi b,8000h
; Patrn de media escala en B, registro C a cero
mov a,b
; Salvar patrn de media escala.

Dispositivos de E/S Programables

prob:

ora c
out pb_8255
in pc_8255
ani 1
jz alto

523

; Sumar valor anterior de prueba


; Valor de prueba al convertidor D/A
; Se lee salida del comparador. Tp-->0
; Se pone mscara
; Saltar si valor de prueba es mayor que el
; desconocido
; Recuperar valor de prueba actual
; Formar el total hasta ahora
; Salvar total
; Recuperar ltimo valor de prueba
; Desplazar hacia prximo bit menos significativo
; Guardar nuevo patrn
; Si acarreo es 1, es el ltimo bit
; Valor de tensin al registro A

mov a,b
ora c
mov c,a
alto:
mov a,b
rar
mov b,a
jnc prob
mov a,c
ret
end
;-------------------------------------------------------------------------------------------------------------;-------------------------------------------------------------------------------------------------------------; Rutina POR5
;-------------------------------------------------------------------------------------------------------------public por5
defseg progr
seg progr
por5:
mvi h,0
; Byte alto de nultiplicando a cero
mov d,h
; Multiplicando a registro par DE
mov e,l
dad h
; Multiplicando x2
dad h
; Multiplicando x2
dad d
; Sumar multiplicando.
; mulx2 + mul x2 + mul = mulx5
ret
end
;-------------------------------------------------------------------------------------------------------------;-------------------------------------------------------------------------------------------------------------; Rutina VISUAL
;-------------------------------------------------------------------------------------------------------------public visual
extern temp,pa_8255,num_dig
defseg progr
seg progr
visual:
rep:

precib:

lxi d,327
push d
mvi b,num_dig
lxi h,temp
mvi c,40h
mov a,m
ora c
out pa_8255
call f_mux
mov a,c
rar

; Salvar contador de 16 bits


; Nmero de dgitos al registro B
; Apuntar digito 1 en memoria
; Patrn de seleccin de LED 1
; Dgito n en BCD (D0-D3) al acumulador
; Agregar al acumulador (D4-D6) patrn
; de seleccin de indicador
; Salida de cdigo BCD y seleccin de display
; Presentar durante 1/(3 x fmux)
; Patrn de seleccin actual al A
; Rotar hacia la derecha

Dispositivos de E/S Programables

524

mov c,a
; Patrn de seleccin de dgito siguiente a C
inx h
; Apuntar direccin del caracter siguiente
dcr b
; Contador de dgitos -1
jnz precib
; No es el ltimo dgito, continuar
pop d
; ltimo dgito, recuperar contador
dcx d
; Contador menos uno
mov a,d
; Probar si alcanz cero
ora e
jnz rep
; No es cero, seguir presentando muestra
ret
; Es 0, retornar en bsqueda de muestra siguiente
;-------------------------------------------------------------------------------------------------------------; Rutina de retardo
;-------------------------------------------------------------------------------------------------------------f_mux:
lxi d,80H
fmux:
dcx d
mov a,d
ora e
jnz fmux
ret
end
;--------------------------------------------------------------------------------------------------------------

Fig. 9.17. Ventana principal de MICRO-IDE con el proyecto del ejemplo 9.4.

Los circuitos de la figuras 9.14 y 916 fueron construidos e interconectados al


C MPR85-PLUS. Los mdulos del proyecto fueron compilados y enlazados usando
la herramienta Micro-IDE. El programa ejecutable resultante fue descargado por el

Dispositivos de E/S Programables

525

puerto serie del PC en la memoria del MPR-85 PLUS. El diseo fue probado y funcion en forma correcta, presentado en pantalla el valor del voltaje fijado en el potencimetro. Contrastando la lectura con la de un voltmetro comercial, no se aprecia error
alguno. Este ejemplo fue un ejercicio didctico donde se mostr como pueden usarse
circuitos integrados CDA de bajo costo para que, con apoyo de cdigo, puedan realizarse funciones ms complejas como la conversin analgica digital. En la prctica los
voltmetros se construyen con CAD de doble pendiente, los cuales vienen integrados
en chips multifuncin. Por ejemplo, adems de la conversin proveen salidas en BCD e
incluso seales y temporizacin para la pantalla multiplexada.
El modo 0 del PPI 8255A tambin puede usarse para el control de perifricos
que requieran un protocolo de enlace sin uso de interrupciones. El ejemplo siguiente
ilustra el uso del PPI para la interconexin de un sistema 8085A a una impresora paralela.
Ejemplo 9.5
Realizar la interconexin de una impresora CENTRONICS a un P8085A
usando un 8255A funcionando en el modo cero. Escribir una rutina para enviar al
perifrico el carcter cuyo cdigo ASCII se encuentra en el registro B.
CENTRONICS es un estndar usado por muchos aos para enviar datos desde
un C hacia una impresora paralela. Su uso es tan extendido que la mayora de las
impresoras hasta hace dos aos usaban este protocolo. Las impresoras modernas ofrecen adems un puerto USB. EL puerto paralelo puede realizarse con un 8255A bajo el
control del programa de transferencia. La figura 9.18 muestra un diagrama de tiempos
de una transferencia CENTRONICS y en la figura 9.19 se indican las funciones de las
lneas del bus y su ubicacin en el conector CANON DB-25.

Fig. 9.18. Transferencia de un carcter a una impresora usando el protocolo de enlace CENTRONICS.

Dispositivos de E/S Programables

526

Terminal
1
2-9

Seal

E/S 1

STB : DATASTROBE

DATA 0 DATA 7

10

ACK : ACKNOWLEDGE

11

BUSY

12

PO:

13

SLCT:

PAPER OUT
SELECT

E
E

Funcin
Salida normalmente en nivel alto. Es
puesta a cero por el C durante 1 s para
notificar que se envi un dato.
Salidas de los ocho bits de datos. Deben
ser estables al menos 0.5 s antes y despus del pulso STB .
Seal activa en bajo generada por la impresora cuando est lista para recibir un
nuevo carcter. Es generada cuando la
lnea BUSY va a nivel bajo.
Entrada OCUPADA que indica la disponibilidad de la impresora. Est en nivel alto
cuando sta no puede recibir datos.
Entrada que cuando est en nivel alto
notifica que no hay papel en la bandeja de
la impresora.
Indica el estado de la impresora. Cuando
est en lnea, la seal conmuta a uno
lgico.
ON LINE:
Al energizar la impresora.

14

AFD :

15

ERROR

16

RESET

17

SL

AUTOFEED XT

S
18-25

TIERRA

Cuando se aplica un

RESET .

Al presionar el interruptor ON LINE.

OFF LINE:
Impresora sin papel.
Cubierta exterior abierta
La impresora es colocada en OFF LINE.
Salida que indica con un nivel bajo si a
cada comando de retorno de carro (CR) le
seguir uno de alimentacin de lnea (LF).
Activa en bajo por la ocurrencia de un
error. Condiciones de error son:
Ausencia de papel en la bandeja.
Impresora en OFF LINE.
Estado de sobrecarga.
Cubierta exterior abierta
En cero inicializa la impresora. Detiene el
equipo y borra el buffer de datos.
Cuando es cero se selecciona la impresora.
Si est en nivel alto la transferencia de
datos no es aceptada.

Fig. 9.19. Conector CANON DB25 hembra y descripcin de las seales del estndar CENTRONICS.

Entrada/Salida con respecto al microcomputador

Dispositivos de E/S Programables

Nota:
La tarjeta de impresora debe tener resistores conectados a +5V en todas las entradas.
Fig. 9.20 Puerto de impresora

527

Dispositivos de E/S Programables

528

El protocolo CENTRONICS trasmite en paralelo los datos a imprimir y adems presenta varias seales para que el P controle la transferencia, y un grupo de
lneas de salida desde la impresora indican en cualquier momento el estado del perifrico.
Como ilustra el diagrama de tiempos de la figura 9.18, el cdigo ASCII del carcter a imprimir es presentado por el P en las lneas de datos DATA0-7 y entonces se
examina la entrada BUSY para verificar, si est en cero lgico, que la impresora est
disponible. En este caso, el procesador coloca en nivel bajo la salida STB durante al
menos 1 s, para sincronizar la transferencia del dato. La impresora lee el dato durante
el flanco positivo de STB . Si la lnea BUSY est en alto, porque la impresora est
ocupada, el P permanecer en espera hasta cuando BUSY retorne a cero. Cuando la
impresora ha aceptado un carcter, activa a cero durante 5 s la seal de reconocimiento ACK .
Debido a que ACK es disparada en el flanco posterior de BUSY, puede ser
tratada como una notificacin de lista para recibir un nuevo dato, al igual que BUSY.
Esto significa que durante la transferencia de datos a la impresora, ACK puede ser
ignorada y el programa slo tiene que examinar si la impresora est libre, colocar el
dato y generar la seal STB .
El puerto de conexin a la impresora se muestra en la figura 9.20 Los bits del
carcter a imprimir se entregan por el PA del 8255A, el cual debe ser configurado para
operacin en el modo 0. La salida BUSY de la impresora se aplica a la lnea PC0 del
puerto de entrada C, y por el terminal PC4 se genera la seal de sincronizacin STB .
Se utilizan buffers de colector abierto en todas las salidas del 8255A. Los resistores de
colector se encuentran en el circuito de entrada a la impresora.
;---------------------------------------------------------------------------------------------------------------; Rutina SAL_IMPR de salida a impresora
; Imprime bloque a partir de direccin 2000h
; Carcter de escape
; NULL 0
;---------------------------------------------------------------------------------------------------------------inic_blq
equ 2000h
; Direccin de primer caracter a imprimir
pa_8255
equ 80h
; Puerto A
pc_8255
equ 82h
; Puerto C
pctrl_8255
equ 83h
; Registro de control
plbr_ctrl
equ 83h
; Palabra de control. modo 0, PA:salida
; PCL:entrada, PCH:salida
stb_cero
equ 8
; Activar STB
stb_uno
equ 9
; Desactivar STB
escap
equ 0
; Caracter de escape.
;----------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

529

mvi a,plbr_ctrl
out pctrl_8255
; Se programa 8255A
mvi a,stb_uno
out pctrl_8255
; STB se pone a uno
lxi h, inic_blq
; Apuntar primer caracter a imprimir
prox:
mov b,m
; Caracter de memoria a registro B
mov a,b
; Examinar caracter
cpi escap
; Es el byte de escape?
jz cont
; Si, continuar programa principal
call sal_impr
; No, Imprimir byte en registro B
inr l
; Apuntar siguiente caracter
jmp prox
; Continuar impresin
cont:
;.
;.
;.
sal_impr:
in pc_8255
; Leer estado de BUSY
ani 1
; Poner mscara
jnz sal_impr
; Si BUSY es alto, esperar
mov a,b
; BUSY es cero
out pa_8255
; Enviar caracter a impresora
mvi a,stb_cero
out pctrl_8255
; Poner seal STB en cero
mvi a,stb_uno
out pctrl_8255
; Desactivar lnea STB
ret
;----------------------------------------------------------------------------------------------------------------

El cdigo anterior imprime un bloque de memoria de una pgina mximo y


contina ejecutando el cdigo de usuario. El carcter NULL seala el final del bloque a
imprimir. La rutina de salida a impresora examina el estado de la lnea BUSY. Si est
en nivel alto, se mantiene la prueba hasta cuando BUSY retorne a cero. En este momento, conmuta a cero lgico la lnea STB , la cual se mantiene en bajo por un tiempo
superior a 1 s, instante cuando se retorna al programa principal.
Con el ejercicio 9.5 finalizan los ejemplos de operacin del 8255A en modo
cero. Lo presentado es una muestra pequea que en modo alguno agota las posibilidades del uso prctico del modo cero en combinacin con el programa para control de
perifricos. Este modo puede usarse para el control de motores por paso o servomotores o para el control de de la potencia suministrada a cargas de corriente alterna.

Operacin en el modo 1
El ltimo ejemplo del modo 0, fue una muestra de una operacin de entrada y
salida con un perifrico que requiere un protocolo de enlace para realizar las transferencias. El modo 1 de operacin est especialmente diseado para la realizacin de
transmisiones y recepciones de informacin, usando seales de dialogo generadas por
el microprocesador y por el equipo de E/S. En este caso, la transferencia desde/hacia

Dispositivos de E/S Programables

530

los puertos A y B es controlado por un protocolo de enlace, realizado usando los terminales del puerto C.
Como se expuso en pginas anteriores ambos grupos A y B pueden programarse para funcionamiento en este modo, como se indica a continuacin:
Grupos A y B.
Cada grupo con un puerto de 8 bits de datos y puerto de 4 bits de control/datos.
Los puertos de 8 bits (PA y PB) pueden ser entradas o salidas, ambas con retencin.
El puerto de 4 bits (PCH y PCL) se usa para control/estado del puerto de datos de 8 bits.

Modo 1: Entrada

La figura 9.21muestra los formatos de la palabra de entrada para la configuracin de los grupos A y B para operacin en el modo 1. Observe que tanto el puerto A
como el B se programan como entradas, si ambos grupos operan en modo 1. Tres bits
de PCH o de PCL se usan para controlar la transferencia de datos desde el perifrico
hacia el sistema a travs de los puertos PA y PB, respectivamente. Las dos lneas restantes, PC6-7, del puerto C quedan disponibles para ser usadas como lneas de E/S.

Fig. 9.21 Formatos de palabra de control para operacin en el modo 1 de entrada.

Dispositivos de E/S Programables

531

Aunque en este caso se considera que ambos grupos se configuran en el modo


1 de entrada, en la prctica pueden programarse una combinacin de modo 1, en cuyo
caso uno de los grupos se programa como entrada y el otro como salida. La funcin
de las seales de control y el diagrama de tiempo de una transferencia de entrada en
el modo 1 se muestra en la figura 9.22.
STB

Strobe Input

Cuando se activa esta entrada el dato entregado por el perifrico es cargado en el


registro latch del puerto de entrada.
Salida que notifica la presencia de un dato en el registro de entrada. Es una seal

IBF

Input Buffer Full

INTR Interrupt Request

de reconocimiento activada como respuesta a la entrada


cuando el P lee el puerto.

STB y es llevada a cero

Salida puesta a 1 cuando STB retorna a nivel alto, IBF es uno y el bit INTE est
en 1. Regresa a 0 cuando el puerto es ledo por el P. Este modo de operacin
permite que con solo cargar un dato en el puerto, un perifrico interrumpa al

CPU.
Las interrupciones deben estar habilitadas por:
INTE A: bit set/reset de PC4
INTE B: bit set/reset de PC2
PC7 y PC6

Lneas disponibles para E/S.

Fig. 9.22. Entrada en modo 1.

El modo 1 de operacin permite que el dato desde el perifrico se almacene en


el puerto A o en el puerto B hasta cuando el P pueda leerlo. Al inicio de la transferencia, el perifrico coloca el dato en los terminales del puerto de entrada y pone en
nivel bajo al lnea STB para cargar el byte en el registro de entrada. A continuacin,
una seal de reconocimiento IBF se pone en alto para indicar la presencia de un dato
en el latch de entrada. Al retornar STB a uno lgico, se dispara la seal INTR de solicitud de interrupcin, si las interrupciones estn habilitadas.
El P puede detectar cuando el perifrico transmite un dato, mediante un programa que examine el estado de IBF o al ser interrumpido por INTR. El flanco de

Dispositivos de E/S Programables

532

subida de RD desactiva la seal IBF, mientras que el flanco de cada de RD remueve la solicitud de interrupcin. Observe que en el modo de interrupcin, la solicitud
es realizada con slo cargar el dato en el registro de entrada.
Ejemplo 9.6
Escriba una rutina para leer un dato desde un dispositivo de entrada. Cada vez
que el perifrico coloca un byte en las lneas del puerto de entrada, genera un pulso
negativo.
Esta situacin es apropiada para el uso del modo 1. Como ilustra el diagrama
simplificado de la figura 9.23, las salidas de datos se aplican al PB configurado como
entrada y la seal de sincronizacin DATO LISTO se conecta al terminal PC2 o STB B .

Fig. 9.23 Entrada en modo 1.

Si el perifrico es un teclado, este entregar al puerto B el cdigo ASCII y una


seal de habilitacin a PC2 cada vez que una tecla es presionada. Los circuitos electrnicos asociados al teclado, detectan la prsin de la tecla, la identifican, le asignan
el cdigo correspondiente, suprimen el efecto de los rebotes de contactos y protegen
contra la pulsacin simultnea de varios pulsadores. El siguiente programa carga el
dato D0-D7 en el registro acumulador, cada vez que una tecla es activada.
;--------------------------------------------- -----------------------------------------------------------------; Rutina de lectura de teclado
;--------------------------------------------- -----------------------------------------------------------------pb_8255
equ 81h
; Puerto B
pc_8255
equ 82h
; Puerto C
pctrl_8255
equ 83h
; Registro de control
plbr_ctrl
equ 10000110b
; Palabra de control. Modo 1, PB:entrada
;--------------------------------------------- -----------------------------------------------------------------teclado:
mvi a,86H
;Puerto B, Modo 1:Entrada
out pctrl_8255
exam_IBF:
in pc_8255
;Leer puerto C
ani 2
;Examinar IBF
jz exam_IBF
;Si IBF=0, registro vaco
in pb_8255
;Si IBF=1, leer el latch de PB
ret
;--------------------------------------------- ------------------------------------------------------------------

Dispositivos de E/S Programables

533

Modo 1: Salida

El puerto A o el B se configuran como salidas y tres seales del puerto PCH o


PCL, respectivamente, controlan la salida de datos hacia el perifrico. Al igual que el
el modo 1 de entrada, pueden usarse interrupciones durante la transferencia.
En la figura 9.24 se muestran las seales de control del puerto C para cada
grupo y el formato de la palabra de control para los grupos A y B.

Fig. 9.24. Formatos de palabra de control para operacin en el modo 1 de salida.

Las funciones de las seales de control y el diagrama de tiempo de la transferencia de datos en el modo 1 de salida, se muestran en la figura 9.25.
Observe que cada vez que el Procesador escribe un dato en el puerto A o en
el puerto B, la salida OBF respectiva, conmuta a nivel bajo para indicar existe un
dato disponible en el registro de salida. Esto ocurre durante el flanco de subida de
WR .
Cuando el perifrico acepta el dato, coloca en estado cero la seal de reconocimiento ACK , la cual desactiva la lnea OBF notificando que el dato fue recibido y
que el registro est vaco. La seal INTR puede usarse para interrumpir al P cuando
el perifrico ha ledo el dato enviado por la CPU. El terminal INTR es puesto a 1

Dispositivos de E/S Programables

534

cuando la salida de reconocimiento ACK , la lnea de indicacin de latch lleno OBF y


el bit INTE, son todas uno. Es llevada a cero, por el flanco de cada de WR .
Salida en nivel bajo cuando el P escribe un dato en el puerto A o B. Es activada

OBF

por el flanco posterior de WR y desactivada por el flanco de bajada de la seal de

Output Buffer Full

reconocimiento ACK generada por el perifrico.


El dispositivo externo pone a nivel bajo est entrada para indicar al P que el dato
en el puerto A o B ha sido recibido.

ACK
Acknowledge Input

INTR Interrupt Request

PC4 y PC5

Salida activa cuando ACK conmuta a nivel alto, OBF es uno y el bit INTE est
en 1. Regresa a 0 cuando el el P escribe un dato en el puerto. Este modo de operacin permite interrumpir al CPU cuando un perifrico acepta un dato transferido
por el P. Las interrupciones deben estar habilitadas por:
INTE A: bit set/reset de PC4
INTE B: bit set/reset de PC2
Lneas disponibles para E/S.

Fig. 9.25. Formatos de palabra de control y diagrama de tiempos de salida en modo 1

Ejemplo 9.7
Usar el modo 1 de salida, para enviar un bloque de datos a una impresora paralela. Escribir la rutina de salida de datos a la impresora.
Como puede verse en la figura 9.26, para la interconexin a la impresora se
usa el grupo A, programado en el modo 1. La impresora recibe el cdigo ASCII del
carcter a imprimir por las 8 lneas del puerto A. Para la lnea de sincronizacin de
transmisin de datos STB del puerto CENTRONICS, se usa el bit PC5. Aunque la
seal OBF indica que existe un dato vlido en el registro de salida, sta no puede ser

Dispositivos de E/S Programables

535

usada como STB , porque se requiere un pulso para indicar a la impresora que hay un
dato listo. Por tal razn se usa PC5.
Una vez que la impresora acepta el dato genera la seal de reconocimiento
ACK para indicar que est lista para recibir otro dato. Esta salida se conecta a la entrada ACK A o PC6 del 8255A y cuando se activa retorna a nivel alto a OBF .

Fig. 9.26. Salida a impresora en modo 1

El programa examinar OBF para detectar si la impresora est disponible.


Esto ocurre cuando la impresora acepta el dato y borra el registro de salida. Con la
impresora libre el P carga el dato en el registro de salida PA y genera por PC5 el
comando STB . El cdigo de la rutina se muestra a continuacin.
;---------------------------------------------------------------------------------------------------------------; Rutina SAL_IMPR de salida a impresora
; Imprime bloque a partir de direccin 2000h
; Carcter de escape
; NULL 0
;---------------------------------------------------------------------------------------------------------------inic_blq
equ 2000h
; Direccin de primer caracter a imprimir
pa_8255
equ 80h
; Puerto A
pc_8255
equ 82h
; Puerto C
pctrl_8255
equ 83h
; Registro de control
plbr_ctrl
equ 0A0h
; Palabra de control. modo 1, PA:salida
; PCH:salida
stb_cero
equ 10
; Activar STB
stb_uno
equ 11
; Desactivar STB
escap
equ 0
; Caracter de escape.
;---------------------------------------------------------------------------------------------------------------mvi a,plbr_ctrl
out pctrl_8255
; Se programa 8255A
mvi a,stb_uno
out pctrl_8255
; STB se pone a uno
lxi h, inic_blq
; Apuntar primer caracter a imprimir

Dispositivos de E/S Programables

536

prox:

mov b,m
; Caracter de memoria a registro B
mov a,b
; Examinar caracter
cpi escap
; Es el byte de escape?
jz cont
; Si, continuar programa principal
call sal_impr
; No, Imprimir byte en registro B
inr l
; Apuntar siguiente caracter
jmp prox
; Continuar impresin
cont:
;.
;.
;.
sal_impr:
in pc_8255
; Leer estado de OBF
ani 80h
; Poner mscara
jnz sal_impr
; Si OBF es bajo, esperar
mov a,b
; OBF es cero
out pa_8255
; Enviar caracter a impresora
mvi a,stb_cero
out pctrl_8255
; Poner seal STB en cero
mvi a,stb_uno
out pctrl_8255
; Desactivar lnea STB
ret
;----------------------------------------------------------------------------------------------------------------

Operacin en el modo 2

Es el modo de transferencia bidireccional sobre los terminales del puerto A.


Ejemplos del uso de este modo de operacin es la interconexin con un controlador
de discos flexibles, transferencias paralelas con el estndar para instrumentacin de
propsito general GPIB (IEEE-448) y para la comunicacin entre computadores. En
la figura 9.27 se muestran las seales asociadas al modo 2 y la palabra de control para
operacin en ambas direcciones.

Fig. 9.27. Palabra de control y seales asociadas con el modo 2 de operacin.

Dispositivos de E/S Programables

OBF
Output Buffer Full

537

Salida en nivel bajo cuando el P escribe un dato en el puerto A


indicando que el latch de salida est lleno.

ACK
Acknowledge Input

Entrada que en cero lgico habilita los buffer de tres estados de


salida del puerto A. Si ACK est en alto, las salidas de PA permanecen en alta impedancia.

STB Strobe Input

Cuando se activa esta entrada el dato entregado por el perifrico es


cargado en el registro latch del puerto A-

IBF
Input Buffer Full

Un alto en esta salida indica que un dato ha sido cargado en el


registro de entrada.

Salida activa que en nivel alto puede usarse para interrumpir al P


durante transferencias tanto de entrada como de salida.
INTE 1: Bit set/reset PC6
INTR Interrupt Request
INTE 2: Bit set/reset PC4
PC2, PC1 y PC0

Lneas disponibles para E/S controladas por bit set/reset.

Fig. 9.28. Formatos de palabra de control y diagrama de tiempos para el modo 2

Debido a que la conexin de una unida de disquetes al sistema y la comunicacin interprocesador son aplicaciones fuera del alcance de este trabajo, el siguiente
ejemplo se limita a la presentacin de rutinas de transmisin y recepcin en el modo
de operacin 2.

Dispositivos de E/S Programables

538

Ejemplo 9.8
1. Escribir un programa que transmita por las lneas bidireccionales del puerto
A el dato cargado en el registro acumulador.
2. Una rutina debe recibir por las lneas bidireccionales del puerto A el dato
enviado por un dispositivo externo.
Sin mayores comentarios se presenta el cdigo de transferencia en el modo 2
de operacin.
;----------------------------------------------------------------------------------------------------------; Ejemplo en modo 2
;----------------------------------------------------------------------------------------------------------pa_8255
equ 80h
; Puerto A
pc_8255
equ 82h
; Puerto C
pctrl_8255 equ 83h
; Registro de control
;----------------------------------------------------------------------------------------------------------; Programa principal
mvi a,plbr_ctrl
out pctrl_8255
; Se programa 8255A
;.
;.
;.
;----------------------------------------------------------------------------------------------------------; Rutina TRASM. Transmite el dato en el registro B por las lneas del puerto A
;----------------------------------------------------------------------------------------------------------trasm:
in pc_8255
; Leer puert C
ani 80h
; Examinar OBF
jz trasm
; Si OBF es 0, registro de salida lleno
mov a,b
; Si OBF es 1. Prximo dato al acumulador
out pa_8255
; Transmitir byte
ret
;----------------------------------------------------------------------------------------------------------; Rutina RECIB. Recibe el dato por las lneas del puerto A y lo retorna en el acumulador
;----------------------------------------------------------------------------------------------------------recib:
in pc_8255
; Leer puerto C
ani 20h
; Examinar IBF
jnz recib
; Si IBF es 0, registro de entrada vaco
in pa_8255
; Si IBF es 1, leer dato
ret
;----------------------------------------------------------------------------------------------------

El lector debe haber notado que para detectar el estado de las seales de control, en los modos de operacin 1 y 2, basta con realizar una lectura convencional del
puerto C. La figura 9.29 muestra los formatos de la palabra de estado para los modos
1 y 2.

Dispositivos de E/S Programables

539

Fig. 9.29. Formatos de las palabras de estado para los modos 1 y 2.

9.2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER


Es conocido por el lector, que el circuito integrado 8155/56 es un dispositivo
de funciones mltiples, diseado para compatibilidad pin a pin con el P 8085A. Es
fabricado por varias empresas, en incluso la compaa INTERSIL ofrece una versin
(HS-81C55RH) con alta resistente a la radiacin csmica, destinada al diseo de instrumentos y controles que viajan al espacio.

Fig.9.30. El dispositivo multifuncin 8155.

Dispositivos de E/S Programables

540

Los recursos ofrecidos por el 8155/56 son:

2Kbits de memoria RWM esttica arregladas como 256x8 bytes.

2 puertos programables de 8 bits


para E/S.

1 puerto programable de 6 bits


para E/S.

1 temporizador/contador binario
programable de 14 bits.

Registro latch interno controlado


por ALE para decodificar el

by-

te bajo de direcciones.

Registro de comando/estado
Fig.9.31. Secciones del 8155/56

DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8155


VCC
GND

CS
WR

+5V
Tierra
Un nivel bajo en este terminal permite la comunicacin entre el P y el 8155. Para el 8156 esta entrada
es activa en alto.
Esta entrada en cero con CS activado causa que el byte en el bus multiplexado sea escrito en la RAM
o en los puertos de E/S y registro comando/estado, dependiendo de la entrada

RD

IO/ M
AD0-AD7

RESET
ALE

Esta entrada en cero con CS activado habilita los buffers de salida AD0-AD7. Si el terminal

IO / M est en nivel bajo el contenido de la posicin de RWM seleccionada ser cargado en el bus de
datos/direcciones. En caso contrario el contenido de un puerto de E/S o del registro de estado ser
colocado en el bus multiplexado.
Selecciona la RWM si es cero y los puertos de E/S y el registro comando/estado si est en alto.
Es el bus de datos/direcciones bidireccional y tres estados por medio del cual se transfieren comandos
y/o datos entre el 8155 y el P. Los ocho bits bajos de las direcciones se cargan en el latch interno
durante el flanco de bajada de la seal ALE.
Un nivel alto en esta entrada durante al menos dos pulsos de reloj inicia el registro de control con todos
los puertos en el modo de entrada.
En el flaco de cada de esta entrada se carga dentro del chip el estado de las lneas de direccin AD0AD/,

PA0-PA7
PB0-PB7
PC0-PC7

TIMER IN
TIMER OUT

IO / M .

CS e IO / M .

Puerto A: Ocho lneas de E/S de propsito general. La direccin es programada escribiendo en el


registro de comando.
Puerto B: Ocho lneas de E/S de propsito general. La direccin es programada escribiendo en el
registro de comando.
Puerto A: seis lneas de E/S de propsito general o pueden usarse como lneas de control para transferencia del pA y B en los modos ALT3 y ALT4. Los modos de operacin se programan escribiendo en
el registro de comando.
Entrada al temporizador contador. Usualmente se conecta el reloj del P aunque puede conectarse
cualquier seal digital con frecuencia menor o igual a fclk

Salida de onda cuadrada o pulso segn el modo seleccionado para el temporizador..

Dispositivos de E/S Programables

541

El acceso a la zona de memoria RWM, con IO / M en nivel bajo, o a los puertos de E/S, cuando IO / M conmuta a nivel alto, se realiza a travs del bus multiplexado AD0-AD7, bajo el control de las seales: ALE, la cual indica si el bus contiene
datos o direcciones, y WR y RD que sealan cuando el acceso corresponde a una
operacin de escritura o de lectura.
Como ilustra la figura 9.32, el dispositivo 8155 contiene una memoria RAM
esttica de 256 bytes y siete registros internos. Estos son: dos puertos de E/S: PA y
PB de 8 bits, un puerto PC de 6 bits, los registros de comando/estado (C/S) para la
programacin y examen del estado del dispositivo, y un contador/temporizador de 14
bits. El circuito integrado no requiere lgica externa para conectarse al P 8085, el
estado lgico de la seal IO / M distingue cuando la direccin presente en las lneas
AD0-AD7 corresponde una posicin de la memoria SRAM o hace referencia a uno de
los registros internos del circuito.
La entrada ALE se aplica a un registro latch interno para demultiplexar el byte
de orden bajo A0-A7 del bus de direcciones, una direccin vlida se presenta en las
lneas de direcciones en el flanco anterior de ALE, mientras que esta informacin, y
los estados de IO / M y CS se aplican a la lgica interna del chip durante el flanco
posterior de ALE.
9.2.1 Seccin de entrada y salida del 8155

Las direcciones asignadas a los registros internos del 8155 se muestran en la


tabla 9.3 y en el captulo 5 se expone todo lo relacionado con el diseo del decodificador de direcciones para el 8155/56.
Tabla. 9.3 Direcciones de los registros internos del 8155
Direccin del Puerto de E/S
Registro seleccionado
AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0
x
x
x
x
x
0
0
0 Registro de Comando/Estado
x
x
x
x
x
0
0
1 Puerto A de E/S
x
x
x
x
x
0
1
0 Puerto B de E/S
x
x
x
x
x
0
1
1 Puerto C de E/S
x
x
x
x
x
1
0
0 8 bits de orden bajo del temporizador/contador
x
x
x
x
x
1
0
1 6 bits de orden alto del temporizdor/contador
y 2 bits del modo temporizador.

El 8155/56 tiene tres puertos programables de E/S. Los puertos A y B son de 8


bits y pueden ser usados para transferencias de E/S controladas por programa segn el
modo programado en el circuito. Los 6 bits del puerto C pueden a su vez funcionar
como entradas o salidas de propsito general o como lneas de control y estado para
transferencias sobre el puerto A y B, de acuerdo con la configuracin del 8155.

Dispositivos de E/S Programables

542

Registro de comando

Los registros de comando y de estado tienen la misma direccin, pero son unidades independientes. La informacin transferida al registro de comando durante una
operacin de escritura en puerto, permite programar las funciones de los puertos de
E/S, de acuerdo con el formato de palabra mostrado en la figura 9.32 Los bits 0 a 3
definen el modo de los puertos, los bits 4 y 5 habilitan o no las interrupciones desde
el puerto C cuando ste es usado como puerto de control y los dos bits ms a la derecha son destinados para el control del temporizador.

Fig. 9.32 Formato de la palabra de control del 8155.

El puerto A puede ser usado como entrada o salida segn establezca el bit 0 de
registro C/S, y de acuerdo con las funcin seleccionada para el puerto C, puede funcionar en el modo bsico de E/S o en el modo con protocolo de enlace. El puerto B
tiene las mismas caractersticas mencionadas para el puerto A. Su direccin la esta-

Dispositivos de E/S Programables

543

blece el estado del bit 1 del registro de C/S. Las seis lineas del puerto C pueden configurarse como entradas o salidas convencionales (ALT1 Y ALT2) o como seales de
control de los puertos PA y PB (ALT3 y ALT4) de acuerdo con el estado de los bits 2
y 3 del registro de comando.
Los modos de funcionamiento del puerto C o ALTn (alternatives) se presentan
a continuacin.
Tabla. 9.4 Modos del puerto C
TERMINAL
ALT1
PC0
ENTRADA
PC1
ENTRADA
PC2
ENTRADA

PC3
PC4
PC5

ENTRADA
ENTRADA
ENTRADA

ALT2
SALIDA
SALIDA
SALIDA

ALT3
INTRA
BFA

ALT4
INTRA
BFA

STB A

STB A

SALIDA
SALIDA
SALIDA

SALIDA
SALIDA
SALIDA

INTRB
BFB
STB B

INTR: Salida de SOLICITUD DE INTERRUPCIN del puerto A o B. Un alto en esta lnea


indica que el perifrico ha enviado un dato pero este an no ha sido ledo por el P o
que el dato escrito en el puerto por la CPU ha sido aceptado por el perifrico.
BF:

Salida BUFFER LLENO que en nivel alto notifica que un dato ha sido cargado en
por el P/perifrico en el latch del puerto pero aun no ha sido transferido al perifrico/Procesador.

STB : Entrada STROBE que se activa en nivel bajo para indicar la disponibilidad de un
dato de entrada o la aceptacin de un dato de salida.

Los modos que usan el puerto C para controlar la transferencia a los puertos A
y B son ALT3 (solo puerto A) y ALT4 (puertos A y B). Cuando se usan estos modos
tres bits del puerto C se asignan a control del puerto A y los tres restantes al puerto B.
En el modo ALT3 donde solo se controla el puerto A, los bits PC3-5 funcionan como
salidas. En las figuras 9.36 se muestran los diagramas de tiempos para transferencias
de E/S bajo control del puerto C.
Como se observa en los diagramas de tiempos de la figura 9.33, el funcionamiento en los modos ALT3 y ALT4 es similar al modo 1 del 8255A. La nica diferencia es en la nomenclatura de las seales. Por ejemplo, la seal de buffer lleno se denomina BF tanto para entrada como para salida (OBF e IBF en el 8255A) y la seal
de reconocimiento en modo salida, llamada ACK en el 8255, se nombra STB para el
8155.
Dada la similitud en los modos de operacin de ambos dispositivos, se considera que los ejemplos presentados para el 8255, operando en los modos 0 y 1, pueden
adaptarse con facilidad al 8155.

Dispositivos de E/S Programables

544

Fig. 9.33 Formas de ondas para transferencias de entrada y salida bajo el control del puerto C.

Registro de estado

Una operacin de lectura al registro de estado de siete bits, entrega informacin de estados de los puertos de E/S y el temporizador. El programa puede examinar
esta informacin en cualquier momento. El P no puede escribirse sobre este registro,
porque al compartir la misma direccin con el registro comando, la escritura sera a
este ltimo. El formato de la palabra de estado se muestra en la figura 9.34.
Una lectura del registro de estado puede indicar si en el latch de entrada o salida existe un dato aun no transferido al receptor, el estado de las lneas de interrupciones y si stas estn habilitadas. Pudindose adems detectar cuando el temporiza-

Dispositivos de E/S Programables

545

dor contador llega a la cuenta final despus de haber sido iniciado. Esto ltimo se
logra detectando el estado del bit 6 del registro de estado.

Fig. 9.34. Formato de la palabra de estado del 8155.

Ejemplo 9.9
Se debe controlar la presentacin de informacin alfanumrica en una pantalla
de cristal lquido.

Fig. 9.35. Pantalla de cristal lquido conectada a un 8155.

Dispositivos de E/S Programables

546

1. Realizar la interconexin a un sistema 8085A, de un mdulo de cristal lquido de 16x2 caracteres (controlador HD44780U), basndose en el diagrama simplificado de la figura 9.35.
2. Escribir el programa de control de presentacin, e imprima la temperatura
en dos puntos de un proceso. Los valores de temperatura son de dos dgitos
y est almacenados a partir de la direccin de memoria MEM. El dgito
ms significativo en la posicin ms baja. El formato de presentacin es el
de la figura 9.36.

Fig. 9.36. Valores de temperatura y estado del proceso.

Solucin:
La pantalla LCD de la figura 9.36 es de 16x2 caracteres, lo cual significa que
puede presentar 2 lneas de 16 caracteres cada una. El carcter se construye en una
matriz de 5x7 puntos Existe un gran nmero de mdulos LCD producidos por diferentes fabricantes y existe un estndar que facilita la interconexin entre el dispositivo y un P o Ctrl, independientemente del modelo. Tal estndar se conoce como
HD44780U.
Este es un sistema microcontrolador y manejador de pantallas LCD, para presentacin de caracteres alfanumricos y smbolos. Esta unidad provee todas las funciones como memoria de presentacin, generador de caracteres y los manejadores de
cristal lquido necesarios para el control de una matriz de puntos, por lo cual se simplifica la interconexin del LCD con el sistema procesador.
Como ilustra la figura 9.35, para comunicarse con el mdulo LCD se requieren tres lneas de control: E, RS, R / W y ocho lneas para datos y comandos. El cdigo de la aplicacin puede programar al dispositivo para operacin con datos de 4 bits,
en cuyo caso slo sern necesarias siete lneas de interconexin. Las funciones y distribucin de los terminales del dispositivo LM032L se muestran en la figura 9.37.
El HD44780U tiene dos registros de 8 bits:
Registro de Datos (DR)
Contiene temporalmente los datos a ser ledos o escritos en la memoria RAM
de datos a presentar (DDRAM: Display Data RAM) y en la memoria RAM del

Dispositivos de E/S Programables

547

VDD:
VSS:
VEE:
RS:

Alimentacin de 2.7 V a 5.5 V.


Tierra.
Regulacin de contraste de la pantalla (0-5 V)
Selects registers.
Cuando es 0 se escriben comandos en el registro de instruccin (IR) o se leen desde IR el estado de la bandera de ocupado y del contador de direcciones.
Cuando es 1 se escribe o lee desde el registro de datos (DR)

R/ W :

Read/Write
Seleccin de operaciones de lectura y escritura.
0: Escritura.
1: Lectura.
Enable.
Inicia las operaciones de lectura y escritura.
Nibble mas significativo del bus de datos bidireccional. Comunica el P con el HD44780U. El
bit D7 puede usarse como bandera de ocupado.
Nibble bajo del bus de datos bidireccional. Comunica el P con el HD44780U. Estas 4 lneas
no se usan durante el modo de operacin con transferencias de 4 bits.

E:
D4-D7:
D0-D3:

Fig. 9.37. El dispositivo LM032L usa el estndar HD44780U.

generador de caracteres (CGRAM: Character Generador RAM). La CGRAM


contiene caracteres definidos por el usuario.
Cualquier informacin cargada en el DR por el P, es almacenada automticamente en la DDRAM o en la CGRAM. Cuando el P lee datos desde la
DDRAM o CGRAM, estos son transferidos al DR.
Registro de Instrucciones (IR)
Almacena los cdigos de las instrucciones, como por ejemplo: limpiar pantalla, ocultar cursor o desplazar cursor; y direcciones para la DDRAM o la
CGRAM. Cuando una direccin es escrita en el IR, un dato es ledo desde la
DDRAM o CGRAM y cargado en el DR para ser transferido al P. Una vez
que el P lee el dato, el contenido de la siguiente posicin de la memoria se
enva al DR para una prxima lectura por el sistema.
La lnea de control RS permite seleccionar uno de los registros como indica la
tabla 9.5.

Dispositivos de E/S Programables

548

Tabla. 9.5. Seleccin de registros.


RS
0

R/ W
0

OPERACIN

Escritura de instruccin o direccin en el IR


Lectura de la bandera de ocupado BF (D7) y del contador de direcciones (D0-D6).
Escritura en el DR (Dato desde el DR a la DDRAM o
CGRAM)
Lectura del DR (Dato desde DDRAM o CGRAM hacia
el DR)

Cuando el HD44780U est realizando una operacin interna, la bandera de


ocupado estar en alto y el controlador no aceptar transferencia alguna hasta cuando
BF retorne a nivel bajo. Como se expone en la tabla 9.5, el estado de BF y del contador de direcciones puede ser examinado por el programa.
El contador de direcciones (AC:Address Counter) es un apuntador de direcciones para la DDRAM y la CGRAM. Cuando el P escribe la direccin de una instruccin en el IR, sta es cargada en el AC. La propia instruccin especifica si el destino es la DDRAM o la CGRAM. El AC es incrementado/disminuido en 1, por cada
operacin de escritura/lectura.
El diagrama de tiempos de una operacin de escritura al mdulo LCD se presenta en la figura 9.39. Una escritura en el mdulo, puede tener dos propsitos: uno,
la presentacin de un caracter ASCII en la pantalla (Operacin de escritura al DR con
RS =1); el otro, la ejecucin de una instruccin (Borrar pantalla, por ejemplo. Operacin de escritura en el IR con RS =0). El procedimiento implica: poner RS en el estado correspondiente, llevar la lnea R / W a cero, poner la entrada E en alto, cargar el
dato en el bus D0-D7 y retornar E a cero lgico. En la prctica est secuencia no es
crtica. Por ejemplo, se puede activar E, fijar el estado de RS y R / W , colocar el dato, y al final retornar a cero la lnea E. Es en realidad el flanco de cada de la seal E,
el evento que ejecuta las operaciones internas.
La memoria de datos a presentar o DDRAM contiene los cdigos de 8 bits de
los caracteres en pantalla. Su mxima capacidad son 80 caracteres. Todo texto escrito
en el HD44780U se almacena en esta memoria y el Ctrl a continuacin leer la
DDRAM y presentar el mensaje en el LCD. Para el dispositivo de 16x2 caracteres, la
DDRAM puede representarse con el siguiente mapa de memoria.

Fig. 9.38. Memoria DDRAM

Dispositivos de E/S Programables

549

Fig. 9.39. Ciclo de escritura en el HD44780U.

El rea ms oscura en la figura 9.38 corresponde a los caracteres visibles o


16x2 caracteres, y el nmero indica la direccin de la memoria que corresponde a
cada posicin en la pantalla. El primer caracter pertenece a la posicin 0, el segundo a
la 1 y as sucesivamente.
Si escribimos un carcter el la direccin 0FH, ste aparecer en la ultima posicin de la lnea 1, el siguiente carcter enviado no aparecer al comienzo de la segunda lnea (direccin 40H) debido a que fue escrito en la direccin 10H. En este caso
antes de enviar el caracter debe ejecutarse un comando que desplace el cursor hacia la
primera posicin de la lnea 2. El rea que no se usa para presentar caracteres puede
usarse como RAM de propsito general. Los caracteres imprimibles se muestran en la
tabla de la figura 9.40.
Las instrucciones disponibles, sus cdigos y el nmero de ciclos de reloj invertidos en la ejecucin de cada una, se muestran en la tabla 9.6.

Dispositivos de E/S Programables

Fig. 9.40. Patrones en la ROM del generador de caracteres.

550

Dispositivos de E/S Programables

Tabla. 9.6. Conjunto de instrucciones del mdulo LCD.

I/D:

1 = Avance del cursor.


0 = Retroceso del cursor.

S:

1 = Desplaza el contenido de la pantalla con cada nueva escritura de dato.


0 = Presentacin normal.

D:

1 = Pantalla activada.
0=

apagada.

C:

1 = Cursor est activo.


0 = Cursor oculto.

B:

1 = Cursor parpadea si est activo.


0 = Cursor normal.

S/C:

1 = Desplaza el contenido de la pantalla.


0 = Mueve el cursor.

R/L:

1 = Desplazamiento hacia la derecha.


0=

izquierda.

BF:

1 = Mdulo LCD est ocupado.


0 = Dispositivo libre para aceptar comandos o datos.

DL:

1 = Bus de 8 bits.
0 = Bus de 4 bits.

N:

1 = Presenta 2 lneas de caracteres.


0 = Muestra 1 lnea de caracteres.

F:

1 = Caracteres de 5 x 10 puntos.
0=

5 x 7 puntos.

551

Dispositivos de E/S Programables

552

Configurando el mdulo LCD

Antes de usar la pantalla de cristal lquido, el HD44780U debe ser configurado por medio de una secuencia de instrucciones enviada al controlador del mdulo.
En principio, se usa la instruccin Function Set para especificar que se usa un ancho
de 8 bits para el bus de datos, 2 lneas de caracteres y una matriz de 5x7 puntos. Esto
se corresponde con el byte 38H=000011102, como se deduce de la tabla 9.6.
La instruccin siguiente de la secuencia de inicio corresponde al comando
0EH=000011102 de la instruccin Display Control, la cual activa la pantalla y muestra el cursor. Finalmente, un comando 06H=000001102 de la instruccin Entry Mode
Set, establece, que cada vez que se presente un nuevo carcter, la posicin del cursor
se mueva hacia la derecha.
Para borrar la pantalla en cualquier momento, se ejecuta Clear Display, cuyo
cdigo es 01H=000000012. Esta orden limpia la pantalla y coloca al cursor en la posicin del primer carcter de la primera lnea. Si se escribe en la lnea 1 y se desea
que el carcter que sigue se presente en la posicin 5 de la segunda lnea se usa la
funcin Set DDRAM Addr o C5H=110001012 (Direccin DDRAM= 45H).
El manual de usuario del HD44780U especifica que un circuito interno de
RESET inicia dispositivo, al aplicrsele energa. En este caso, se ejecuta una sucesin
de instrucciones que lleva al mdulo LCD, por defecto, a un estado inicial. Tambin
se indica, que si no se satisfacen las condiciones de la fuente de alimentacin para la
operacin del circuito de RESET interno, el programa de la aplicacin deber ejecutar
las instrucciones de configuracin del LCD. La secuencia de inicio por instrucciones,
sugerida por el fabricante, para el modo de 8 bits, es la siguiente:
Esperar 15 ms despus que VCC alcance 4.7 V.
Ejecutar la instruccin Function Set (30H: bus 8 bits).
Esperar al menos 4.1 ms.
Ejecutar la instruccin Function Set (30H: bus 8 bits).
Esperar al menos 100 s.
Ejecutar la instruccin Function Set(* ) (30H: bus 8 bits).
Esperar al menos 40 s.
Ejecutar la instruccin Function Set (38H: bus 8 bits, 2 lneas matriz 5x7).
Esperar al menos 40 s.
Ejecutar la instruccin Display Control (08H: pantalla y cursor desactivados).
Esperar al menos 40 s.
Ejecutar la instruccin Clear Display (01H: borrar pantalla).
Esperar al menos 1.64 ms.
Ejecutar la instruccin Display Control (0EH: Activar pantalla y mostrar cursor).
Esperar al menos 40 s.
Ejecutar la instruccin Entry Mode set (06H:Auto incremento. Avanzar el cursor).
Esperar al menos 40 s.
* Antes de esta instruccin los tiempos de espera deben cumplirse. No basta con examinar la bandera de
ocupado BF para detectar cuando el mdulo est disponible. Los tiempos de espera despus de esta
instruccin se corresponden con el tiempo de ejecucin de la misma, por lo cual es suficiente con verificar a BF.

Dispositivos de E/S Programables

553

El programa desarrollado para establecer la comunicacin entre el P y el


HD44780U y presentar el texto de la figura 9.36 consta nueve mdulos, los cuales se
describen a continuacin:
LCD
Programa principal.
INIC_LCD
Rutina de inicio. Configura el mdulo LCD y lo deja listo para ser usado.
SAL_CMD
Escribe en el registro de intrucciones IR, el comando cuyo cdigo est cargado en el registro
acumulador. Antes de ejecutar una instruccin determinada se detecta si el dispositivo est
libre.
SAL_DATO
Escribe en el registro de datos DR el cdigo ASCII del carcter a presentar, el cual debe
cargarse en el acumulador. Antes de ejecutar la transferencia se verifica que el LCD est
disponible.
LCD_OCUP
Verifica el estado de la bandera de ocupado. Si BF est en uno, espera hasta cuando retorne
a cero para continuar la ejecucin del programa.
PULSO_E
Genera un pulso de nivel alto en la lnea de control ENABLE (E).
TEXTO1
Enva al LCD la cadena de caracteres cuyo primer elemento est almacenado en la posicin
con direccin de memoria apuntada por el registro par HL. El carcter de escape es NULL
(00H).
TEXTO2
Enva al LCD la cadena de caracteres BCD de longitud especificada por el contenido del registro C y cuyo primer elemento est almacenado en la direccin de memoria especificada
por el registro par HL.
ESP_5MS
Retardo de 5 ms (>4.1ms) para permitir satisfacer los tiempos especificados en la rutina de
inicio.

El programa consta de 9 mdulos ensamblados con el AVMAC85 y enlazados con el AVLINK. El archivo resultante en de formato hex se carg en el programa
8085SimulatorIde el cual emula un mdulo LCD. El resultado se presenta en la figura
9.41, la interconexin del LCD con el 8085A en la figura 9.42. Las instrucciones del
programa de control del mdulo LCD, se muestran a continuacin.

Dispositivos de E/S Programables

$title(Manejo LCD)
$subtitle(Mdulo LCD)
;--------------------------------------------------------------------------------------------------------------------; Modulo de programa principal
;--------------------------------------------------------------------------------------------------------------------public pa_8155,pc_8155,escrb_cmd,escrb_dat,E_alto,E_bajo,escap,bcd_ascii,leer_dato1
public func_set1,func_set2,dspy_ctrl1,dspy_ctrl2,clr_dspy,ent_mod_set,leer_dato2
extern inic_lcd,sal_cmd,texto1,texto2
;--------------------------------------------------------------------------------------------------------------------; Definicin de etiquetas
;--------------------------------------------------------------------------------------------------------------------i_stack
equ 08F0H
; Inicio de la pila
i_rwm
equ 0800H
; Direccin de inicio de RWM
func_set1
equ 30h
; Interconexin de 8 lneas
func_set2
equ 38h
; Interconexin de 8 bits, 2 lneas de 5x7 puntos
dspy_ctrl1
equ 8
; Pantalla off y cursor oculto
dspy_ctrl2
equ 0EH
; Pantalla on y mostrar cursor
clr_dspy
equ 1
; Borrar pantalla cursor a la esquina izquierda
ent_mod_set
equ 6
; Autoincremento y avanzar cursor
escrb_cmd
equ 0
; Lneas de control para escribir comando
escrb_dat
equ 2
; Lneas de control para escribir dato
E_alto
equ 4
; Mscara para activar lnea enable
E_bajo
equ 0fbh
; Mscara para llevar enable a cero
leer_dato1
equ 5
; Lneas de contro (E=1) para leer LCD
leer_dato2
equ 1
; Lneas de contro (E=0) para leer LCD
escap
equ 0
; Caracter de escape para texto1
bcd_ascii
equ 30h
; Conversin BCD a ASCII
;--------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
;--------------------------------------------------------------------------------------------------------------------defseg puertos,start=50h, class=iospace
; 8155 en direccin 50h
defseg stack, start=i_stack
; La pila reside en la RWM
defseg datos, class=data, start=i_rwm
; RWM a partir de 0800H
defseg progr, class=code, start=0
; 2k de EPROM desde 0000H
;--------------------------------------------------------------------------------------------------------------------; Puertos del 8155
;--------------------------------------------------------------------------------------------------------------------seg puertos
pctrl_8155
ds 1
; Puerto de control del 8155
pa_8155
ds 2
; Lneas de datos del mdulo LCD
pc_8155
ds 1
; PC0-->RW
; PC1-->RS
; PC2-->EN
;--------------------------------------------------------------------------------------------------------------------; rea de la pila
;--------------------------------------------------------------------------------------------------------------------seg stack
ds 10H
t_stack:equ $-1
; Base de la pila
;---------------------------------------------------------------------------------------------------------------------

554

Dispositivos de E/S Programables

;--------------------------------------------------------------------------------------------------------------------; rea de variables


;--------------------------------------------------------------------------------------------------------------------seg datos
mem
ds 4
temp
ds 1
;--------------------------------------------------------------------------------------------------------------------; Segmento de cdigo
;--------------------------------------------------------------------------------------------------------------------seg progr
lxi sp,t_stack
; Se carga el apuntador de pila
mvi a,0dH
; Pa:salida Pc:salida
out pctrl_8155
; Programar 8155
call inic_lcd
; Configuracin de inicio del mdulo LCD
lxi h,cad1
; Apuntar mensaje 'T1='
call texto1
; Presentar texto 'T1='
lxi h,mem
; Apuntar valor de temperatura 1
mvi c,2
; Son dos dgitos BCD
call texto2
; Presentar temperatura 1
lxi h,cad2
; Apuntar 'grados centigrados'
call texto1
; Presentar 'grados centigrados'
lxi h,cad3
; Apuntar mensaje 'T2='
call texto1
; Presentar texto 'T2='
lxi h,mem+2
; Apuntar valor de temperatura 2
mvi c,2
; Son dos dgitos BCD
call texto2
; Presentar temperatura 2
lxi h,cad2
; Apuntar 'grados centigrados'
call texto1
; Presentar 'grados centigrados'
mvi a,0cdh
; Direccin de posicin 13 de lnea 2
call sal_cmd
; Mover cursor
lxi h,cad4
; Apuntar mensaje '(-->)'
call texto1
; Presentar '(-->)'
hlt
;--------------------------------------------------------------------------------------------------------------------; rea de mensajes
;--------------------------------------------------------------------------------------------------------------------cad1:
cad2:
cad3:
cad4:

db 'T1=',0
db 0dfH,'C ',0
db 'T2=',0
db '(',7eh,')',0
end
;---------------------------------------------------------------------------------------------------------------------

555

Dispositivos de E/S Programables

556

;---------------------------------------------------------------------------------------------------------------------; Rutina INIC_LCD


;----------------------------------------------------------------------------------------------------------------------public inic_lcd
extern sal_cmd, func_set1,func_set2,dspy_ctrl1,dspy_ctrl2
extern clr_dspy,ent_mod_set,esp_5ms,lcd_ocup
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------inic_lcd:
call esp_5ms
; Esperar al menos 15 ms
call esp_5ms
call esp_5ms
mvi a,func_set1
; Function set
call sal_cmd
call esp_5ms
; Esperar al menos 4.1 ms
mvi a,func_set1
; Function set
call sal_cmd
call esp_5ms
; Esperar al menos 100 s
mvi a,func_set1
; Function set
call sal_cmd
call lcd_ocup
; Esperar al menos 40 s
mvi a,func_set2
; Function set
call sal_cmd
mvi a,dspy_ctrl1
; Display Control
call sal_cmd
mvi a,clr_dspy
; Clear Display
call sal_cmd
mvi a,dspy_ctrl2
; Display Control
call sal_cmd
mvi a,ent_mod_set
; Entry Mode Set
call sal_cmd
ret
end
;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------; Rutina SAL_CMD
;---------------------------------------------------------------------------------------------------------------------public sal_cmd
extern lcd_ocup,escrb_cmd,temp,pa_8155,pc_8155,pulso_E
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------sal_cmd:
mov b,a
; Salva cdigo de instruccin
call lcd_ocup
; Espera que el mdulo est libre
mvi a,escrb_cmd
; Lneas de control para inicio de ejecutar instruccin
sta temp
; Salvar estado de RS y RW
out pc_8155
; E=0, RS=0, RW=0
mov a,b
; Recuperar cdigo de instruccin
out pa_8155
; Cargar instruccin en bus de datos
call pulso_E
; Generar un pulso en E
ret
end
;----------------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

557

;---------------------------------------------------------------------------------------------------------------------; Rutina SAL_DATO


;---------------------------------------------------------------------------------------------------------------------public sal_dato
extern lcd_ocup,escrb_dat,temp,pa_8155,pc_8155,pulso_E
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------sal_dato:

mov b,a
; Salvar dato
call lcd_ocup
; Espera que el mdulo est libre
mvi a,escrb_dat
; Estado de lneas de control para inicio de enviar dato
sta temp
; Salvar estado de RS y RW
out pc_8155
; E=0, RS=1, RW=0
mov a,b
; Recuperar dato
out pa_8155
; Cargar dato en el bus
call pulso_E
; Generar un pulso en E
ret
end
;----------------------------------------------------------------------------------------------------------------------

;---------------------------------------------------------------------------------------------------------------------; Rutina LCD_OCUP


;---------------------------------------------------------------------------------------------------------------------public lcd_ocup
extern pa_8155,pc_8155,leer_dato1,leer_dato2
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------lcd_ocup:

mvi a,0cH
; Pa:entrada Pc:salida
out pctrl_8155
; Programar 8155 para lectura
mvi a,leer_dato1
; E=1, RS=0, RW=1
out pc_8155
nop
; Tiempo extra
in pa_8155
; Leer estado de bandera de ocupado
mov e,a
; salvar BF en registro E
mvi a,leer_dato2
; E=0, RS=0, RW=1
out pc_8155
mov a,e
; Recuperar BF
rlc
; BF a la bandera de acarreo
jc lcd_ocup
; Si BF es 1, esperar
mvi a,0dH
; Pa:salida Pc:salida
out pctrl_8155
; Programar 8155 para escritura
ret
end
;-------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

;---------------------------------------------------------------------------------------------------------------------; Rutina PULSO_E


;---------------------------------------------------------------------------------------------------------------------public pulso_E
extern temp,E_alto,E_bajo,pa_8155,pc_8155
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------pulso_E:
lda temp
; Recuperar estado de RS y R/W
ori E_alto
; Mscara con E = 1
out pc_8155
; E=1, RS, RW
nop
; Tiempo adicional
ani E_bajo
; Mscara con E = 0
out pc_8155
; E=0, RS, RW
ret
end
;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------; Rutina TEXTO1
;---------------------------------------------------------------------------------------------------------------------public texto1
extern escap,sal_dato
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------texto1:
mov a,m
; Caracter desde la memoria al acumulador
cpi escap
; Probar si es el ltimo caracter del mensaje
rz
; Retornar si fin de cadena
call sal_dato
; Presentar caractes
inx h
; Apuntar siguiente elemento de la cadena
jmp texto1
; Continuar presentando
end
;---------------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------------; Rutina TEXTO2
;---------------------------------------------------------------------------------------------------------------------public texto2
extern escap,sal_dato,bcd_ascii
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------texto2:
mov a,m
; Dgito BCD desde memoria al acumulador
adi bcd_ascii
; Convertir a ASCII
call sal_dato
; Presentar dgito
inx h
; Apuntar dgito siguiente
dcr c
; Cuenta de valores presentados
jnz texto2
; Si no es el ltimo valor, continuar presentando
ret
; Es el ltimo, retornar.
end
;----------------------------------------------------------------------------------------------------------------------

558

Dispositivos de E/S Programables

;---------------------------------------------------------------------------------------------------------------------; Rutina ESP_5MS


;---------------------------------------------------------------------------------------------------------------------public esp_5ms
defseg progr
seg progr
;---------------------------------------------------------------------------------------------------------------------esp_5ms:
push d
lxi d,281h
esp:
dcx d
mov a,e
ora d
jnz esp
pop d
ret
end
;----------------------------------------------------------------------------------------------------------------------

Fig. 9.41. Mdulo LCD del programa 8085Simulator Ide.

Fig. 9.42. Puerto de conexin del mdulo LCD.

559

Dispositivos de E/S Programables

560

9.2.2 Seccin del temporizador-contador del 8155

Adems de 256 bytes de memoria RWM y de 3 puertos de E/S, el 8155 tiene


un temporizador contador programable que puede usarse en aplicaciones que requieran control de tiempo. Las aplicaciones de un temporizador son diversas. Entre las
funciones bsicas del dispositivo se tienen:
Generar retardos y medir el tiempo transcurrido entre dos eventos.
Realizar la cuenta de eventos.
Generar velocidades de baudios para el canal de comunicacin serie.

En la prctica, el uso de un temporizador slo lo limita la imaginacin del diseador. Este puede usarse para generar sonido, medir variables fsicas como temperatura y humedad, convertir de voltaje a frecuencia, controlar servomotores; y en general, est presente en toda aplicacin que involucre generacin y control de tiempo.
El uso de un circuito para generar, por ejemplo: tiempos de espera, libera al P de la
tarea de mantenerse en un lazo sin hacer nada por la duracin del retardo. La CPU
slo debe programar el modo de operacin, arrancar el temporizador y esperar que
ste le indique el final del retardo.
La seccin del timer del 8155 es un temporizador contador binario descendente de 14 bits, el cual registra los pulsos de entrada y al culminar la cuenta, entrega a
su salida una onda cuadrada o un pulso, de acuerdo con el modo de operacin previamente programado. La figura 9.43 muestra las lneas de entrada y salida del temporizador. Los terminales TIMER IN y TIMER OUT son externos. Al primero se
conectan los pulsos a contar y en el segundo se presenta la seal de salida.

AD0-AD7

Registro TH
Registro TL

TH

TL
TIMER-IN

TIMER OUT

Fig. 9.43. Entradas y salidas de la seccin del timer del 8155.

Las entradas AD0-AD7 corresponden a los terminales del 8155 y permiten el


acceso a los registros. TH y TL son seales internas al 8155 y se usan para seleccio-

Dispositivos de E/S Programables

561

nar los registros del contador. Debido a que la programacin del temporizador se realiza por programa, desde el punto de vista del hardware, este puede verse como un
componente con una entrada de reloj y una salida, como ilustra la figura 9.44.

TIMER-IN

TEMPORIZADOR

TIMER OUT

Fig. 9.44. Entradas y salidas externas de la seccin del timer del 8155.

Programacin del temporizador-contador

Antes de ser puesto en operacin, el dispositivo debe ser programado para indicarle el modo de operacin y la longitud de la cuenta. Esta configuracin se realiza
cargando palabras de control en los registros internos del contador, de acuerdo con el
formato mostrado en la figura 9.45. En el registro TL se cargan primero los ocho bits
menos significativos de la cuenta y en TH los seis bits restantes. Los dos bits altos de
TH, establecen el modo de operacin.

Fig. 9.45. Formato de los registros internos del timer.

Como se observa en la figura 9.32, los dos bits de orden alto (TM2-TM1) del
registro de comando se usan para funciones del contador. De modo que para arrancar
o parar el temporizador, basta con escribir la palabra de control adecuada en el registro de comandos. En la tabla 9.7 se especifican los cuatro comandos disponibles. Debido a que el programa puede iniciar o parar al timer en cualquier momento, debe

Dispositivos de E/S Programables

562

cuidarse que tales acciones no modifiquen la configuracin de los puertos de E/S realizada al inicio del programa.
Tabla. 9.7. Comandos del timer.
TM2 TM1
0
0
No afecta al temporizador.
0
1
Detiene de inmediato la cuenta.
1
0
Para el contador una vez alcanzado el final de la cuenta.
Carga el modo y longitud de la cuenta. Si el timer est
1
1
corriendo se espera el final de la cuenta antes de cargar el
nuevo modo y longitud.

La longitud de la cuenta puede ser un valor entre 2 y 3FFFH. La salida


TIMER OUT est normalmente en nivel alto y se puede seleccionar uno entre
cuatro modos de operacin, como se especifica en la tabla 9.8.
Tabla. 9.8. Modos de operacin del temporizador.
M2
M1
0
0
Onda cuadrada. Pone la salida en cero durante la segunda
mitad de la cuenta.
0
1
Onda cuadrada con auto recarga. El periodo de la onda
cuadrada es igual a la longitud de la cuenta, la cual es
recargada automticamente al final del conteo.
1
0
Pulso nico en nivel bajo cuando se alcanza el final de la
cuenta.
1
1
Pulso en nivel bajo con auto recarga al final de la cuenta.

Como se observa en la figura 9.46, cuando el modo 0 es seleccionado, se produce a la salida un ciclo de onda cuadrada. Por ejemplo, si la longitud de la cuenta es
4, durante los primeros 2 ciclos de reloj la salida permanecer en alto y durante los
siguientes 2 pulsos se pondr en bajo. Para una longitud de 5, el tiempo en uno lgico
ser de 3 periodos de reloj y el tiempo en cero de dos ciclos de reloj. Para modo 1,

Fig. 9.46. Formas de ondas de salida segn el modo seleccionado..

se recarga la longitud y se repite el ciclo continuamente hasta cuando se pare el contador. Para el modo 2, con una cuenta de 5, la salida permanecer en alto durante 4

Dispositivos de E/S Programables

563

periodos de reloj y en cero durante el quinto ciclo. En el modo 3 se recarga la longitud generndose un tren de pulsos, con las caractersticas descritas.
Ejemplo 9.10
Se tiene un 8155 decodificado en la direccin 40H y se usar el temporizador
para generar una seal de reloj de frecuencia seleccionada por la posicin de tres interruptores S0-2 conectados a las lneas PA0-2 del puerto A. Considere que la frecuencia de oscilacin del cristal externo del P es de 6.144 MHz. La tabla 9.9 indica como se selecciona la frecuencia de salida y la figura 9.47 muestra el circuito de generacin de seales.
Tabla. 9.9. Seleccin de la frecuencia de salida.
S2
S1
S0
Frecuencia (Hz)
0
0
0
300
0
0
1
600
0
1
0
1200
0
1
1
2400
1
0
0
4800
1
0
1
9600
1
1
0
9600
1
1
1
9600

Fig. 9.47. Generador de reloj de frecuencia variable.

Dispositivos de E/S Programables

564

Solucin:
El temporizador funciona en el modo de onda cuadrada con auto recarga y debe generarse una tabla de valores para la longitud de la cuenta, en funcin del estado
de cada interruptor. Para una frecuencia fx la longitud de la cuenta se calcula con:
f
lc = clk
fx

Para una frecuencia de 4800 Hz y un reloj externo de 6.144 Mz se tiene,


lc =

3.072 10 6
= 640
4800

Usando la ecuacin se obtiene la siguiente tabla.


Tabla. 9.9. Frecuencia de salida en funcin
de la longitud de la cuenta.
Frecuencia
Longitud decimal
(Hz)
de la cuenta
300
10240
600
5120
1200
2560
2400
1280
4800
640
9600
320

La subrutina CLK lee los interruptores y encuentra en la tabla la longitud correspondiente. A continuacin se cargan los registros TL y TH y se arranca el temporizador.

; Generador de reloj
;--------------------------------------------------------------------------------------------------------------------------; Definicin de etiquetas
;--------------------------------------------------------------------------------------------------------------------------modo_timer
equ 40h
; Onda cuadrada con autorecarga
inic_timer
equ 0C0h
; Arrancar timer
palb_ctrl
equ 2
tope_pila
equ 200h
;--------------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
;--------------------------------------------------------------------------------------------------------------------------defseg puertos,start=40h, class=iospace
; 8155 en direccin 40h
defseg progr, class=code, start=0
; Segmento de cdigo

Dispositivos de E/S Programables

565

;--------------------------------------------------------------------------------------------------------------------------; Puertos del 8155


;--------------------------------------------------------------------------------------------------------------------------seg puertos
pctrl_8155
ds 1
; Puerto de control del 8155
pa_8155
ds 3
; Puerto de interruptores
timer_bajo
ds 1
; Registro bajo del contador
timer_alto
ds 1
; Registro alto del contador
;--------------------------------------------------------------------------------------------------------------------------; Programa principal al inicio del segmento de cdigo
;--------------------------------------------------------------------------------------------------------------------------seg progr
mvi a,palb_ctrl
; Pa:Entrada
out pctrl_8155
; Programar 8155
lxi sp, tope_pila
; Inicio de apuntador de pila
call clk
;
;
;

.
.
.

;--------------------------------------------------------------------------------------------------------------------------; Rutina CLK


;--------------------------------------------------------------------------------------------------------------------------clk:
lxi h,tbl_long
; Apuntar tabla de longitudes de cuenta
in pa_8155
; Leer estado de interruptores
call ret_20ms
; Suprimir efecto de rebote
in pa_8155
; Releer interruptores
ani 7
; Enmascarar
ral
; Multiplicar por dos
add l
; Sumar desplazamiento
mov l,a
; Apuntar byte bajo de la longitud
mov e,m
; Cargar en registro E
inx h
; Apuntar byte alto de la longitud
mov d,m
; Cargar en registro D
mvi a,e
; Byte bajo de longitud al acumulador
out timer_bajo
; Byte bajo de longitud a TL
mvi a,d
; Byte alto de longitud al acumulador
ori modo_timer
; Especificar modo
out timer_alto
; Modo y byte alto de longitud a TH
mvi a,inic_timer or palb_ctrl
; Comando de inicio del timer
out pctrl_8155
ret
;--------------------------------------------------------------------------------------------------------------------------; Rutina de retardo
;--------------------------------------------------------------------------------------------------------------------------;ret20ms:
;
;
;

.
.
.

ret
;--------------------------------------------------------------------------------------------------------------------------; Tabla de valores de longitud de la cuenta
;--------------------------------------------------------------------------------------------------------------------------tbl_long:
dw 10240,5120,2560,1280,640,320,320,320
end
;---------------------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

566

El temporizador puede ser usado para interrumpir al P en intervalos especficos para realizar una funcin determinada. En estos casos, la salida del temporizador
se conecta a una entrada de interrupcin de la CPU. Usando la entrada RST7.5, cada
vez que la salida se coloque en alto, se realizar al microprocesador una solicitud de
interrupcin.
Ejemplo 9.11
Una aplicacin requiere incrementar en uno, cada 32 s, un contador de 16
bits. El inicio de la cuenta lo marca el flanco posterior de un pulso generado por el P
en el bit PB0 de un 8155. Esta seal afecta un circuito externo no mostrado. Transcurrido un tiempo tx, la red coloca la entrada PA0 en nivel lgico uno notificando el final de la cuenta. En este instante, el contenido del registro DE, usado como contador,
debe almacenarse a partir de la direccin de memoria MEM.
Solucin:
Para resolver el problema, se usa el temporizador del 8155 con su salida conectada a la entrada de interrupcin RST 7.5, como ilustra la figura 9.48. El timer es
configurado para entregar, cada 32 s, un pulso de salida con auto recarga. La rutina
de servicio de interrupcin deber incrementar en uno el registro par DE. Una vez
iniciada la cuenta, el programa se mantendr examinando la lnea PA0, en espera que
conmute a nivel alto para detener el timer y almacenar la cuenta final en memoria.

Fig. 9.48. Circuito para el ejemplo 9.11

Dispositivos de E/S Programables

567

El cdigo del programa se muestra a continuacin. El registro DE se usa como


contador y el resultado se almacena en la direccin de memoria 200H y siguiente. Al
final de la cuenta, el programa para el timer y entra en un estado de parada. La instruccin HLT al final, se usa para detener la simulacin del programa y examinar el
valor final de la cuenta en memoria. En la prctica, el valor registrado puede convertirse a BCD y presentarse en una pantalla y reiniciar el proceso con un nuevo ciclo de
medida.
; Ejemplo 9.11
;--------------------------------------------------------------------------------------------------------------------------; Definicin de etiquetas
;--------------------------------------------------------------------------------------------------------------------------modo_timer
equ 0c0h
; Un pulso al final de la cuenta
inic_timer
equ 0C0h
; Arrancar timer
parar_timer
equ 40h
; Parar timer
palb_ctrl
equ 2
; PA:entrada PB:salida
mem
equ 200h
long
equ 100
; Longitud de la cuenta
tope_pila
equ 300h
;--------------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
;--------------------------------------------------------------------------------------------------------------------------defseg int, start=3ch
; Vector de interrupcin
defseg puertos,start=50h, class=iospace
; 8155 en direccin 50h
defseg progr, class=code, start=100h
; Segmento de cdigo
;--------------------------------------------------------------------------------------------------------------------------; Puertos del 8155
;--------------------------------------------------------------------------------------------------------------------------seg puertos
pctrl_8155
ds 1
; Puerto de control del 8155
pa_8155
ds 1
; Puerto de entrada
pb_8155
ds 2
; Puerto de salida
timer_bajo
ds 1
; Registro bajo del contador
timer_alto ds 1
; Registro alto del contador
;--------------------------------------------------------------------------------------------------------------------------; Rutina de servicio de interrupcin
;--------------------------------------------------------------------------------------------------------------------------seg int
inx d
; Incrementar contador
ei
; Rehabilitar interrupciones
ret
; Retornar desde interrupcin
;--------------------------------------------------------------------------------------------------------------------------; Programa principal
;--------------------------------------------------------------------------------------------------------------------------seg progr
lxi sp,tope_pila
; Iniciar apuntador de pila
mvi a,palb_ctrl
; Cargar e A la palabra de control
out pctrl_8155
; Programar ; PA:entrada PB:salida
ori 1
out pb_8155
; Pulso de inicio a nivel alto
lxi d,0
; Contador a cero
mvi a,long
; Byte bajo de Longitud de cuenta al acumulador
out timer_bajo
; Cargar byte bajo de cuenta en TL

Dispositivos de E/S Programables

568

mvi a, modo_timer
; Cargar modo en el acumulador
out timer_alto
; Cargar modo y byte alto de cuenta en TH
xra a
; Cero al acumulador
out pb_8155
; Pulso de inicio a cero
mvi a,inic_timer or palb_ctrl
out pctrl_8155
; Arrancar timer
mvi a,0bh
; Mscara de interrupcin
sim
; Desenmascarar entrada RST 7.5
ei
; Habilitar interrupciones
esp:
in pa_8155
; Leer Puerto A
rar
; Bit 0 a la bandera de acarreo
jnc esp
; Si es cero, esperar
mvi a,parar_timer or palb_ctrl
out pctrl_8155
; Si es uno, parar timer
xchg
; Cuenta final al registro HL
shld mem
; Almacenar cuenta final en memoria
hlt
end
;---------------------------------------------------------------------------------------------------------------------------

Ejemplo 9.12
Se debe construir y programar un generador de forma de ondas usando el 8155
#2 del microcomputador MPR-85 PLUS. El instrumento debe tener dos entradas: la
primera es un pulsador para seleccin del tipo de seal de salida entre: seno, cuadrada, triangular o diente de sierra. Al aplicarse energa al circuito debe generarse una
onda seno. Las activaciones subsecuentes del pulsador seleccionarn una salida diferente en el orden especificado. La segunda entrada es un arreglo de siete interruptores
lgicos que permite variar la frecuencia de la seal de salida. La figura 9.49 muestra
el circuito del generador.
Solucin:
Para el diseo del instrumento se utiliza el circuito integrado de E/S PPI 8155
#2 del MPR-85 PLUS, el cual es decodificado en la direccin 50H. Como se observa
en la figura 9.49, el puerto A (51H) se configura como salida con sus terminales conectados a las entradas de convertidor anlogo digital DAC0808. Los interruptores
SW1-SW7, para variar la frecuencia de la salida, se acoplan a los siete bits bajos del
puerto de entrada 52H (Puerto B del 8155) y la salida de la red de supresin de rebotes del pulsador S1 de seleccin de forma de onda, es cableado a la lnea P52.7 del
mismo puerto.
Para generar una tensin analgica en VS basta con escribir el valor digital correspondiente en el puerto A del 8155. El circuito DAC0808 tiene una resolucin de 8
bits y es configurado para entregar una corriente de salida IOUT desde 0 hasta la corriente de final de escala IFS. Las entradas A1-8 toman valores entre 00 y FFH. La corriente I OUT es complementaria de IOUT de modo que:

Dispositivos de E/S Programables

Fig. 9.49. Circuito para el generador de forma de onda

569

Dispositivos de E/S Programables

I FS = I OUT + I OUT

570

, para toda entrada.

La corriente de fin de escala viene dada por la ecuacin:


I FS = I ref

I FS =

2 n 1
2n

Vref 2 n 1
n
R ref
2

, Vref = 5.0V R ref = 5.6K

La intensidad de salida para cualquier valor de entrada es:


I OUT =

Vref A base10

R ref
2n

El amplificador operacional a la salida del CAD entrega una tensin VS entre


0 y +IFS5.6K.
VS = I OUT 5.6K
VS =

Vref
5
A base10 = 8 A base10
n
2
2

Para una entrada digital 100101112 = 15110 la tensin de salida ser igual a:

VS =

5
151 = +2.95V
256

Debido a que se usa un paso para representar el voltaje cero, la tensin mxima de salida ser:
VS mx =

5
255 = +4.98V
256

De acuerdo con lo anterior, para generar un ciclo de una forma de onda triangular de 2.5 Vpico se debe escribir en el puerto de salida A una secuencia entre 00 y
7FH para la pendiente positiva y desde 7FH hasta cero para la pendiente negativa,
como puede observarse en la figura 9.50.

Dispositivos de E/S Programables

571

Fig. 9.50. Se genera una muestra cada tx.

El tiempo tx entre muestras lo fija el valor cargado en los registros del temporizador/contador, configurado para pulso nico con auto recarga. Los 7 bits de mayor
orden del registro TL corresponden al estado de los interruptores SW7-SW1 y el bit
menos significativo de TL se pone a cero. Los 6 bits altos del contador se cargan con
ceros. Para detectar cuando se debe escribir la siguiente muestra, se puede conectar la
salida del timer a la entrada de interrupcin RST 7.5, para que se realice una solicitud
de interrupcin cada vez que el contador alcance el final de la cuenta. En este caso, se
usa la instruccin RIM para examinar si existen interrupciones pendientes. Otro modo, el utilizado en este ejemplo, es examinar el estado del bit D6 del registro de estado
del 8155 y producir la siguiente muestra cada vez que D6 se coloque en uno.
Para seleccionar el tipo de onda, se usa un contador de mdulo 3 que registra
el orden en el cual es activado el pulsador. Al inicio el contador est en 0, indicando
salida seno. Las subsecuentes activaciones lo pone en 1 para onda cuadrada, en 2 para
triangular y en 3 para diente sierra. Al presionarse S1 por cuarta vez el contador vuelve a 0 reinicindose la secuencia con salida seno. Con el programa en ejecucin, se
lee el tipo de onda y su frecuencia y se genera un ciclo de la forma de onda deseada a
la frecuencia especificada. A continuacin se vuelve a leer el estado de los interruptores SW1-7 y S1 para generar el siguiente periodo de la misma seal o el primer ciclo de
nueva onda de salida.
Para generar la onda seno se utiliza una tabla de valores. La k-sima muestra
Nk se obtiene con la siguiente ecuacin, donde n es el nmero de muestras en un periodo:

Dispositivos de E/S Programables

572

Para que la frecuencia seleccionada sea la misma para todos los tipos de ondas, es necesario generar el mismo nmero de muestras por ciclo y escribir una muestra cada T/n, donde T es el periodo de la forma de onda. Se desea una amplitud de la
salida de 5.0 V (4.98 V) con 128 muestras por ciclo. Con la seal seno no hay problema en usar una tabla de 64 valores (medio ciclo) y con la onda cuadrada basta con
escribir 64 muestras en nivel bajo y otras 64 en alto. Pero en el caso de la forma de
onda triangular, para obtener la amplitud deseada, la seal debe variar entre 0 y FFH
cada medio ciclo, lo cual equivale a 512 muestras por ciclo.
Para ajustar el nmero de muestras a 128, se carga (para la pendiente positiva) en el DAC los valores 0,4,8,0CH,,FCH,0CH,8,4,0; lo cual representa 64
muestras en el semiciclo ascendente y 64 muestras en el descendente. Como resultado
la amplitud se reduce a 4.93 V. Para que toda salida tenga igual amplitud se ajusta la
tabla de valores de la onda seno y el valor de del nivel alto de la onda cuadrada. En el
caso de la seal diente de sierra se carga a la entrada del DAC la secuencia
0,2,4,5,8,0AH,,0FEH para 128 muestras por ciclo.
El cdigo del generador consta de un programa principal para detectar el tipo
y frecuencia de la onda y generar la seal correspondiente y una subrutina que escribe
el valor digital de la muestra en el puerto A, cada vez que el temporizador alcanza el
final de la cuenta.
$title(Generador de onda)
;--------------------------------------------------------------------------------------------------------------------------i_stack
equ 8FF0H
; Inicio de la pila
modo_timer
equ 0C0h
; Pulso nico con autorecarga
inic_timer
equ 0CDh
; Palabra de control para arrancar temporizador
;--------------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
defseg puertos,start=50h, class=iospace, absolute
defseg pila, start=i_stack
defseg progr, class=code, start=6002h
;--------------------------------------------------------------------------------------------------------------------------; Puertos de entrada del sistema
seg puertos
pctrl_8155:
ds 1
; Registro de control del 8155.
pa_8155:
ds 1
; El CDA se conecta al puerto de salida A.
pb_8155:
ds 2
; Puerto B entrada para seleccin de tipo y frecuencia de la onda.
timer_bajo:
ds 1
; Modo del temporizador y 6 bits altos de longitud de la cuenta
timer_alto:
ds 1
; Byte menos semicl_2ificativo de longitud de la cuenta.
;--------------------------------------------------------------------------------------------------------------------------; Los 16 bytes ltimos de RWM soportan el stack.
seg pila
ds 10H
;--------------------------------------------------------------------------------------------------------------------------t_stack:equ $-1
; Base de la pila
;---------------------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

573

;--------------------------------------------------------------------------------------------------------------------------;Programa principal
;--------------------------------------------------------------------------------------------------------------------------seg progr
lxi sp,i_stack
; Cargar apuntador de pila
mvi b,0
; Se inicia contador de tipo de onda
inicio:
in pb_8155
; Leer frecuencia. Despus del reset, PB <-- entrada
rlc
; Desplazar a la izquierda
out timer_bajo
; Byte menor de la cuenta
mvi a,0C0h
; Modo:un pulso con autorecarga y 6 bits altos del
out timer_alto
; contador a cero
mvi a,0cdh
; Configura puertos. PA --> salida PB <-- entrada
out pctrl_8155
; Arrancar timer
in pb_8155
; Leer pulsador de seleccin de onda
ani 80h
; Enmascarar D7
jz gener
; Generar ciclo de onda si pulsador est desactivado
inr b
; Pulsador activado
esp:
in pb_8155
; Releer pulsador para esperar apertura.
ani 80h
; Enmascarar D7
jnz esp
; Esperar que pulsador se desactive
gener:
mov a,b
; Estado del contador se carga en el acumulador
cpi 0
; Comparar con cero
jz seno
; Onda es seno
cpi 1
; Comparar con 1
jz cuad
; Onda es cuadrada
cpi 2
; Comparar con 2
jz trian
; Onda es triangular
cpi 3
; Comparar con 3
jz d_sierra
; Onda es diente de sierra
mvi b,0
; Onda es seno. Contador a cero
seno:
semicl_1:

semicl_2:

d_sierra:
dct:
dcs:

; onda es seno
lxi h,tabla
inx h
mov a,m
cpi 0
jz semicl_2
call dac
jmp semicl_1
dcx h
mov a,m
cpi 0
jz inicio
mov c,a
mvi a,0fch
sub c
call dac
jmp semicl_2

; Apuntar elemento 1 de la tabla.


; Saltar valor cero de la tabla.
; Probar si valor de la tabla es cero.
; Si es cero
; Se gener el primer semiciclo. Generar segundo medio ciclo.
; Si no es cero, continuar
; generando primer medio ciclo.
; Saltar cero al finalde la tabla.
; Cargar valor de la tabla en el acumulador.
; Probar si se alcanz el cero inicial de la tabla.
; Si es as es el fin de ciclo, examinar tipo y frecuencia de la onda.
; Si no, generar segundo medio ciclo
; usando los valores de la tabla,
; Escribir a DAC.
; Continuar generando segundo medio ciclo.

; onda es diente de sierra


mvi a,0
; Generar pendiente negativa desde FCH hasta 0
mvi c,0feh
; en pasos de 2.
jmp dcs
mov a,c
call dac
; Escribir en DAC
dcr c

Dispositivos de E/S Programables

dcr c
jnz dct
jmp inicio
trian:
proxs:

proxb:
tri_baj:

574

; Fin de ciclo. Saltar a examinar tipo y frecuencia de la onda.

; onda es triangular
mvi c,0
; Generar pendiente positiva desde 0 hasta FCH en pasos de 4.
mov a,c
call dac
; Escribir en DAC.
inr c
; Incrementar en 4 el registro C.
inr c
inr c
inr c
mov a,c
cpi 0fch
; Probar si se alcanz valor pico de la seal triangular.
jnz proxs
; Si no, seguir generando pendiente positiva.
mov a,c
; Si valor pico, generar pendiente negativa desde FCH hasta cero.
call dac
; Escribir en DAC.
dcr c
; Pasos de -4.
dcr c
dcr c
dcr c
jnz proxb
; Si valor distinto de cero continuar generando pendiente negativa.
jmp inicio
; Si es cero es fin de ciclo. Examinar tipo y frecuencia de la onda.

; onda es cuadrada
mvi c,2
; Son dos semiciclos.
mvi d,0
; Primer semiciclo consta de 64 muestras en nivel bajo.
semi:
mvi e,64
prox:
mov a,d
; El registro D tiene 0 en el semiciclo 1 y FCH en el semiciclo 2.
call dac
; Escribir a DCA.
dcr e
; Contador de muestras menos 1.
jnz prox
; Escribir hasta muestra 64.
mvi d, 0fch
; Cargar D con nivel alto.
dcr c
; Contador de semiciclos menos 1
jnz semi
; Generar semiciclo 2.
jmp inicio
; Fin de ciclos, saltar a examinar tipo y frecuencia de la onda.
;--------------------------------------------------------------------------------------------------------------------------; Rutina DAC
;--------------------------------------------------------------------------------------------------------------------------dac:
out pa_8155
dac1:
in pctrl_8155
ani 40h
jz dac1
ret
;--------------------------------------------------------------------------------------------------------------------------; Tabla de valores para primer semiciclo de la onda seno.
;--------------------------------------------------------------------------------------------------------------------------tabla:
db 0,126,132,138,144,150,156,162,168,174,179,185,190
db 196,201,205,210,215,219,223,227,230,234,237,239
db 242,244,246,248,249,250,251,251,252,251,251,250
db 249,248,246,244,242,239,237,234,230,227,223,219
db 215,210,205,201,196,190,185,179,174,168,162,156
db 150,144,138,132,126,0
end
;---------------------------------------------------------------------------------------------------------------------------

cuad:

Dispositivos de E/S Programables

Fig. 9.51. Formas de onda como se ven en un osciloscopio. 2 V/div, 5 ms/div.

575

Dispositivos de E/S Programables

Fig. 9.52. Forma de onda seno.

576

Dispositivos de E/S Programables

Fig. 9.53. Salida onda cuadrada.

577

Dispositivos de E/S Programables

Fig. 9.54. Seal triangular.

578

Dispositivos de E/S Programables

Fig. 9.55. Onda diente de sierra

579

Dispositivos de E/S Programables

580

9.3 CONTROLADOR DE TECLADO Y PANTALLA 8279


En el diseo aplicaciones de sistemas empotrados donde el P deba realizar
operaciones de lectura de teclado y presentacin de informacin en pantallas multiplexadas de indicadores de siete segmentos, conviene considerar el uso de un controlador de teclado/display, para reducir el tamao del cdigo y liberar al P de realizar
estas tareas, para que pueda dedicarse a otras funciones. El circuito 8279, es un controlador de teclado/pantalla diseado para sistemas MCS 85/86 y que en la prctica
puede interconectarse con facilidad a cualquier microprocesador. El dispositivo originalmente introducido por INTEL, es ofrecido por las empresas Alliance Core y Aldec,
entre otras, como un mdulo lgico especialmente diseado para FPGAs, facilitando
la actualizacin o diseo de la aplicacin, al permitir al diseador incorporar las funciones del 8279 y otras unidades lgicas en dispositivos programables modernos. Las
caractersticas resaltantes de controlador 8279 son:
Operaciones simultaneas sobre teclado y pantalla.
Modos de barrido de teclado y matriz de sensores.
Interconexin de un teclado de hasta 64 teclas (8x8).
Control de pantallas de hasta 16 dgitos.
Dos memorias pequeas contienen los caracteres a presentarse y las entradas de teclado:
1. La memoria RAM de display puede almacenar hasta 16 bytes. Contiene los cdigos 7segmentos de los caracteres a presentar.
2. Una memoria FIFO/RAM de teclado almacena las ltimas 8 teclas activadas,
Proteccin contra pulsacin simultaneas de teclas y supresin del rebote de contactos.
Modo de operacin y temporizacin seleccionadas por programa.
Salida de interrupcin al pulsarse una tecla.

Fig. 9.56. Smbolo lgico y distribucin de terminales del 8279.

Dispositivos de E/S Programables

581

El 8279 es bsicamente una tcnica hardware para conectar al P una matriz


de teclado y una pantalla multiplexada de indicadores incandescentes. Las funciones
realizadas por el chip, de exploracin de la matriz de teclas y actualizacin peridica
del display, aumentan el rendimiento de la CPU, al reducir el tamao y complejidad
del cdigo. El diagrama de bloques del controlador se muestra en la figura 9.57.

Fig. 9.57. Diagrama funcional del 8279.


DEFINICIN FUNCIONAL DE LOS TERMINALES DEL 8279

CS
WR / RD
CLK

BD
DB[7:0]
A0
RESET
A0
IRQ

SL[3:0]
RL[7:0]
SHIFT
CNT/STB

OUTA[3:0],
OUTB[3:0]

Un nivel bajo en este terminal permite la comunicacin entre el P y el 8279.


Estas entradas se activan a cero durante una operacin de escritura/lectura del P.
Entrada de reloj para sincronizacin interna.
Un nivel en esta salida apaga los indicadores durante la conmutacin entre dgitos o en la ejecucin de
un comando de apagado
Es el bus de datos bidireccional y tres estados por medio del cual se transfieren comandos y/o datos
entre el controlador y el P.
Direccin del buffer: Un nivel alto en esta entrada indica que la informacin de E/S son comandos o
condiciones de estado. Un uno lgico notifica que deben interpretarse como datos.
Un alto en esta entrada inicia el controlador en modos de operacin y de sincronizacin por defecto.
Direccin del buffer: Un nivel alto en esta entrada indica que la informacin de E/S son comandos o
condiciones de estado. Un uno lgico notifica que deben interpretarse como datos.
Salida de solicitud de interrupcin: En el modo de teclado sube a nivel alto cuando hay datos en la
RAM FIFO y retorna a bajo con cada lectura de la FIFO. Vuelve a uno si quedan datos sin leer en la
RAM. En el modo SENSOR va a alto si se detecta un cambio en un sensor.
Lneas de barrido: salidas usadas para explorar el teclado y para activar los indicadores de la pantalla.
Lneas de retorno: Entradas desde la matriz de teclado o de sensores. Son conectadas a SL[3:0] por la
presin de una tecla. Tambin provee un byte de entrada en el modo de entrada STROBE.
En el modo de teclado, el estado de esta entrada es almacenado junto con la posicin de la tecla presionada.
En el modo de teclado, el estado de esta entrada CONTROL es almacenado junto con la posicin de la
tecla presionada. Tambin sirve como entrada de habilitacin para cargar datos en la FIFO en el modo
de entrada STROBE.
El contenido de la RAM de display se presenta en estas salidas sincronizadas con las lneas de barrido.

Dispositivos de E/S Programables

582

9.3.1 Funcionamiento del 8279

El controlador de teclado/pantalla es un circuito complejo con mltiples modos de operacin y que puede ser interconectado a matrices de pulsadores, teclados
codificados o arreglo de sensores y a pantallas multiplexadas de hasta 16 dgitos. En
esta seccin, se discuten algunos aspectos del modo de funcionamiento y de la programacin del circuito. Para acceder una descripcin detalla del controlador se recomienda al lector examinar la hoja tcnica de datos del chip.
Como ilustran las figuras 9.56 y 9.57, el 8279 tiene terminales de E/S para interconexin con el P, teclado e indicadores luminosos. El controlador requiere una
seal de 100 KHz para su sincronizacin. La frecuencia del reloj externo aplicado al
terminal CLK del circuito integrado, es dividida internamente para obtener los 100
KHz necesarios. El valor del divisor del reloj es cargado por una palabra de control
durante la programacin inicial del chip.

Fig. 9.58. Diagrama simplificado del 8279.

Un nivel alto aplicado a le entrada RESET inicia al 8279 con la siguiente configuracin:
Presentacin de 16 caracteres de 8 bits. Entrada por la izquierda.
Exploracin codificada de teclado con proteccin contra pulsacin simultnea de 2 teclas (2key lockout).
El divisor de reloj se carga con 31.

El controlador puede operar con pantallas multiplexadas de 8 16 caracteres,


con salidas por dos puertos de 4 bits (OUTA[3:0], OUTB[3:0]) o un puerto de 8 bits
(A3=D7,B0=D0); y con la entrada de dgitos por la derecha o por la izquierda. El
8279 tiene un bloque RAM de 16 x 8 la cual contiene los cdigos de los caracteres
que se presentan en los indicadores de la pantalla y la cual puede ser escrita o leda
por el P en cualquier momento. Es posible programar el auto incremento del conta-

Dispositivos de E/S Programables

583

dor de direcciones con cada operacin de E/S. Cada dgito de la pantalla tiene asignada una posicin de la memoria de display.
Con el formato de entrada por la derecha, el nmero del indicador (0-F) se corresponde con la direccin de la RAM de display. La posicin 0 de la memoria almacena el cdigo del carcter presentado en el dgito ms a la izquierda (L0), la direccin 1 con el siguiente (L1) y as sucesivamente. Si se programa el auto incremento
del contador de direcciones, cada nueva entrada se cargar en posiciones consecutivas
de la RAM a partir de la celda inicial.
Una vez actualizada la posicin final (7 15), segn el modo de salida programado (8 16 dgitos) se sobrescribe la direccin 0. Sin auto incremento, es posible presentar un carcter en cualquier dgito usando un comando de escritura en la
RAM de display. En entrada por la izquierda, el primer caracter se presenta en el dgito ms a la derecha. Con auto incremento, la siguiente entrada se carga en la misma
posicin de la RAM de display donde est el dato anterior y ste se mueve a la siguiente localidad.
El 8279 puede operar con tres tipos de dispositivos de entrada: con una matriz
de pulsadores, con un teclado con entrada por seal estroboscpica o con una matriz
de sensores. Con una matriz de teclas, las salidas del contador de exploracin SL
[0:3], son usadas para realizar un barrido de las filas del teclado y detectar, por las
lneas de retorno, la columna a la cual pertenece la tecla presionada. Este contador
puede programarse en dos modalidades.
Con exploracin codificada, se presenta una cuenta binaria entre 0 y 15, de
modo que debe usarse un circuito decodificador 1 de 8 para generar las seales de
exploracin aplicadas a cada fila, y un decodificador 1 de16 para actualizar los displays. En esta forma el controlador 8279 puede manejar un teclado de hasta 8 filas (8
x 8) y presentar 16 caracteres. En este modo, el 8279 coloca un cero en una de las
filas conectadas a las lneas SL [0:3] y examina el estado de las teclas, leyendo las
entradas de retorno RL[0:7].
Las entradas RL[0:7] estn conectadas a 5 V por resistores internos, de modo
que si cualquiera de estos terminales est en cero, indicar la activacin de una tecla.
Entonces, el controlador espera un tiempo de 10 ms para suprimir el efecto de rebote
de contactos y lee de nuevo RL[0:7]. Si la misma tecla permanece pulsada, se almacena su posicin en la FIFO/RAM.
La memoria FIFO/RAM funciona como una estructura FIFO de 8 bits y profundidad de 8, cuando se opera en el modo teclado o entrada por seal STROBE. Los
datos son cargados dentro de la FIFO y posteriormente son ledos en el mismo orden
en el cual fueron almacenados. En el modo de exploracin de teclado, el byte cargado
en la FIFO indica la posicin del pulsador en el teclado y el estado de las entradas
SHIFT y CNTL a las cuales se supone conectadas las teclas SHIFT y CTRL. La figura
9.59 muestra el formato del dato en la FIFO.

Dispositivos de E/S Programables

D7

D6

CNTL
0

SHIFT
0

584

D5

D4

FILA
1

D3

D2

D1

D0

COLUMNA
0

Fig. 9.59. Formato del dato en la FIFO.

Cuando no se usan las entradas CNTL y SHIFT, estas se conectan a tierra, de


modo que si se presiona la tecla en la fila 3 y columna 4, el byte en la FIFO ser 1CH
Adems de realizar la supresin del rebote, el 8279 puede ser programado para proteccin contra activacin simultnea de teclas. Existen dos modalidades disponibles: 2-key lockout/N-key rollover. El primer modo bloquea el reconocimiento y la
carga en la FIFO, si dos teclas son presionadas simultneamente. Una tecla debe ser
liberada antes que la proxima tecla activada sea procesada. Slo se acepta como vlida la ltima tecla activada. El segundo modo acepta todas las teclas presionadas. Si
dos teclas son activadas casi al mismo tiempo, ambas son aceptadas como vlidas y
sus cdigos son almacenados en la FIFO, en el orden en el cual stas fueron pulsadas.
La segunda modalidad del contador con salidas SL [0:3], es el de exploracin
decodificada, cuando se decodifican los dos bits de orden bajo del contador para presentar una salida 1 de 4. Con esta forma de barrido, se activa, a la vez, a nivel alto
uno de los terminales SL [0:3]. Como estos pines se usan tanto para explorar el teclado como para refrescar la pantalla, el barrido decodificado limita a 4 el nmero de
filas del teclado y de indicadores de la pantalla.
Cuando se conecta al 8279 una matriz de sensores, durante la exploracin de
las filas no se realiza la proteccin contra rebotes. En este modo, la FIFO/RAM funciona como una memoria RAM de 8 bytes. Cada fila de la RAM es cargada con el estado de los sensores de la fila correspondiente en la matriz. A medida que el arreglo de
sensores es explorado, el complemento del estado de las lneas de retorno RL[0:7] es
cargado en la posicin de la RAM, cuya direccin es especificada por el contador de
exploracin. Esto significa, que la memoria contiene una imagen del estado de los sensores de cada fila. Si el dispositivo de entrada es un teclado con seal STROBE, el estado invertido de las entradas RL[0:7] (cdigo de la tecla) es almacenado en la
FIFO/RAM (operando como FIFO), durante el flanco de subida de la seal de habilitacin conectada al terminal CNTL / STB .
En los modos de teclado, la seal de salida IRQ se pone en nivel alto cuando
hay datos en la FIFO. IRQ es regresada a cero con cada lectura de la FIFO y retorna a
nivel alto si permanecen posiciones sin leer en la FIFO. En el modo de matriz de sensores IRQ es activada cuando se detecta un cambio en el sensor.
El bloque estado de la FIFO/RAM en la figura 9.57, mantiene al da las condiciones operativas de la FIFO. El P puede leer la palabra de estados de la FIFO con
A0 en nivel alto. Adems de indicaciones de error, este byte puede usarse en los mo-

Dispositivos de E/S Programables

585

dos de teclado para detectar la activacin de una tecla sin necesidad de recurrir al uso
de interrupciones. La funcin de cada bit de la palabra de estados se indica en la figura
9.60.
D7

D6

D5

D4

D3

D2

D1

D0

DU

S/E

RAM
display no
disponible.

FIFO
llena.

Bandera
cierre sensor/Bandera
error pulsaciones
mltiples.

Error
lectura.

Nmero de entradas en la FIFO.

Error
escritura.

Fig. 9.60. Palabra de estados de la FIFO/RAM.

Los bits D2:0 (NNN) indican el nmero de teclas vlidas activadas. El bit F (D3)
se activa cuando la FIFO est llena. D5:4 son indicaciones de error: O (overrun) notifica que se intent escribir en la FIFO cuando estaba llena, U (underrun) seala que se
quiso leer la FIFO estando vaca. En el modo especial de error. El bit S/E indica que
se presionaron varias teclas a la vez. D7 es una bandera que advierte que la RAM de
display no esta disponible porque la pantalla est apagada o en proceso de apagado.
9.3.2 Programacin del 8279

El 8279 debe ser programado antes de usarse por medio de comandos enviados
al circuito integrado con la CS en cero y A0 en nivel alto. Los primeros tres bits del
byte cargado en el registro de control del 8279 en el flaco de subida de WR seleccionan una de ocho comandos disponibles, los cuales se describen en la siguiente tabla.
Tabla.9.10.Palabras de control del 8279.
D7 D6 D5
Funcin
0

Propsito

Fija el modo de teclado. El nmero de caracteres de la pantalla y


0
Seleccionar modo
el tipo de exploracin.
1
Reloj
Programa el divisor de reloj interno.
Habilita la lectura de la FIFO/RAM. Indica la direccin que se
0
Lectura de FIFO
va a leer.
Lectura de RAM de Habilita la lectura de la RAM de display. Indica la direccin que
1
d display
se va a leer.
Escritura en RAM de Habilita la escritura de la RAM de display. Indica la direccin
0
display
q que se va a leer.
Deshabilita escritura
1
Inhibe la presentacin de caracteres y apaga la pantalla.
de display
0
Borrado
Limpia la RAM de display o la FIFO.
Fin de interrupcin.
1
Desactiva la salida IRQ. Activa el modo especial de error.
Modo especial de error.

Dispositivos de E/S Programables

586

1. Seleccin de modo teclado/pantalla


D7

D6

D5

D4

D3

D2

D1

D0

KKK
000
001
010
011
100
101
110
111
DD
00
01
10
11

MODOS
Teclado con exploracin codificada - 2 key lockout.
Teclado con exploracin decodificada - 2 key lockout.
Teclado con exploracin codificada - N key rollover.
Teclado con exploracin decodificada - N key rollover.
Matriz de sensores con exploracin codificada.
Matriz de sensores con exploracin decodificada.
Entrada por seal STROBE. Barrido codificado de pantalla.
Entrada por seal STROBE. Barrido decodificado de pantalla.

Pantalla de 8 caracteres de 8 bits. Entrada por la izquierda.


Pantalla de 16 caracteres de 8 bits. Entrada por la izquierda.
Pantalla de 8 caracteres de 8 bits. Entrada por la derecha.
Pantalla de 16 caracteres de 8 bits. Entrada por la derecha.

Fig.9.61.Modos de teclado y pantalla.

2. Programacin del reloj


D7

D6

D5

D4

D3

D2

D1

D0

Fig.9.62.Divisor del reloj.

Un divisor de frecuencia programable genera el reloj de sincronizacin interna


a partir de la seal aplicada a la entrada CLK. El valor del divisor es fijado por los
bits PPPPP de esta palabra de control. Por ejemplo para un reloj externo de 2.5 MHz,
debe cargarse 00111001 en el registro de control. Si el P funciona con un reloj interno de 3.125 MHz o 3.070 MHz como en nuestro caso, no es necesario usar este
comando porque despus de un reset el divisor es cargado por defecto con el valor
31.

3. Lectura de la memoria FIFO/RAM


D7

D6

D5

D4

D3

D2

D1

D0

AI

Auto incremento de
la direccin.
Direccin de la
FIFO/RAM.

Fig.9.63. Palabra de control para lectura de la memoria FIFO/RAM.

Dispositivos de E/S Programables

587

Una operacin de lectura realizada despus de este comando retorna en el


acumulador el contenido de direccin AAA de la FIFO/RAM. Si el bit AI est en uno,
subsiguientes lecturas entregan el contenido de las subsecuentes localizaciones.

4. Lectura de la memoria RAM de pantalla


D7

D6

D5

D4

D3

D2

D1

D0

AI

Auto incremento de
la direccin.
Direccin de la
RAM de pantalla.

Fig.9.64. Comando para lectura de la memoria RAM de display.

Si luego de enviar este comando al 8279 se realiza una operacin de lectura, el


dispositivo retorna en el acumulador el contenido de la posicin de memoria RAM de
pantalla con direccin AAAA. Si el bit AI es uno, la direccin se incrementa en uno
despus de cada lectura.

5. Escritura de la memoria RAM de pantalla


D7

D6

D5

D4

D3

D2

D1

D0

AI

Auto incremento de
la direccin.
Direccin de la
RAM de pantalla.

Fig.9.65. Formato de la palabra de control para escritura de la memoria RAM de display.

Despus de ejecutar este comando, el dato enviado al controlador es almacenado en la posicin con direccin AAAA de la RAM de pantalla. Si el bit AI es puesto a 1, se seleccionar la siguiente localizacin con cada escritura en la memoria.

6. Inhibicin de escritura y apagado de pantalla


D7

D6

D5

D4

D3

D2

D1

D0

IWA

IWB

BLA

BLB

Fig.9.66. Bloqueo y apagado de pantalla.

Dispositivos de E/S Programables

588

Los bits IWA e IWB se usan para enmascarar los puertos de 4 bits A o B, en
aplicaciones que usan puertos separados de pantalla con 4 bits. Cuando se activan
estos bits, los caracteres mostrados por el puerto correspondiente no varan an cuando se cambie el contenido de la RAM de display.
Los bits BL se usan para el apagado de cada puerto. El ltimo comando de borrado determina el cdigo de apagado. Despus de un reset, el cdigo es cero.

7. Borrado
D7

D6

D5

D4

D3

D2

D1

D0

CD

CD

CD

CF

CA

Fig.9.67 Comando para borrado de las memorias internas del 8279.

Si el bit D4 est en uno, este comando cargar en todas las posiciones de la


RAM de display el valor elegido por los dos bits CD de menor peso de acuerdo con: si
D3-2 es 0X2 se cargar en la RAM el valor 000000002, si D3-2 es 102 se almacena en la
RAM 001000002 y si D3-2 es 112 todas las posiciones de la RAM se llenarn con
111111112. Si el bit CF es puesto a uno, se limpia la memoria FIFO y se desactiva la
salida IRQ. En el modo de matriz de sensores adems el apuntador de direcciones
selecciona la fila cero de la RAM. El bit CA activa una combinacin de los efectos de
CD y CF. En la prctica borra todas las memorias internas del 8279.

8. Fin de interrupcin/Puesta en modo de error


D7

D6

D5

D4

D3

D2

D1

D0

Fig.9.68. Palabra de control para desactivar solicitud de interrupcin en modo sensor.

En el modo matriz de sensores, esta palabra de control lleva a cero la salida


IRQ de solicitud de interrupcin y habilita escrituras posteriores en la RAM (en este
modo IRQ se activa cuando se detecta un cambio en el sensor inhibiendo adems las
escrituras en la RAM hasta un reset). Para el modo N key rollover, si E =1 el 8279
funcionar en el modo especial de error.
Ejemplo 9.13
Una matriz de teclado de 20 pulsadores se conecta al P 8085 a travs de un
8279, como se muestra en la figura 9.69. El reloj del sistema es 2.0 MHz y la salida
IRQ del controlador de teclado se conecta ala lnea de interrupcin RST 6.5. El 8279
est decodificado en la direccin 20H. Escriba una subrutina de lectura de teclado que
retorne el cdigo de la tecla en el registro acumulador.

Dispositivos de E/S Programables

Fig.9.69. interconexin de un teclado de 20 teclas al 8279.

589

Dispositivos de E/S Programables

590

;---------------------------------------------------------------------------------------------------------------; Programa de lectura de teclado.


;---------------------------------------------------------------------------------------------------------------pdato_8279
equ 20h
; Puerto de datos del 8279.
pctrl_8279
equ 21h
; Puerto de comandos del 8279.
div_reloj
equ 00110100b
; Reloj de 2 Mhz. Divisor 20.
modo_tcld
equ 0
; Teclado con exploracin codificada
leer_fifo
equ 01010000b
; Se lee la FIFO.
borra_fifo
equ 11000010b
; Borrar FIFO.
;---------------------------------------------------------------------------------------------------------------jmp inicio
org 34h
in pdato_8279
; Leer dato desde teclado
ret
; y retornar
;---------------------------------------------------------------------------------------------------------------inicio:
lxi sp,t_pila
; Cargar el apuntador de pila
mvi a,div_reloj
; Divisor de reloj en 20.
out pctrl_8279
mvi a,modo_tcld
; Modo de teclado
out pctrl_8279
mvi a,borra_fifo
; Borrar la FIFO
out pctrl_8279
mvi a,leer_fifo
; Activar lectura de la FIFO.
out pctrl_8279
mvi a,0dh
; Desenmascarar interrupcin RST 6.5.
sim
call leer_tcld
; Leer teclado.
.
.
.
;---------------------------------------------------------------------------------------------------------------; Lee caracter desde teclado
;---------------------------------------------------------------------------------------------------------------leer_tcld:
ei
; Se habilitan las interrupciones
hlt
; Se espera por pulsacin de una tecla
ret
; Retorno con cdigo de tecla en el acumulador
;----------------------------------------------------------------------------------------------------------------

Muchas aplicaciones prcticas incorporan una pantalla de varios caracteres,


adems del teclado. El 8279 puede controlar en forma simultnea ambos tipos de perifricos. El ejemplo anterior, slo con teclado, se present para mostrar el uso de la
salida IRQ para la deteccin de la activacin de una tecla. A continuacin se expone
un ejemplo del uso del 8279 en el manejo de teclado y pantalla. Debido a que la aplicacin siguiente es el programa monitor de una tarjeta de evaluacin para aplicaciones basadas en el 8085, se dejan libres para el usuario las interrupciones (excepto
TRAP). La deteccin de la presin de una tecla se realiza leyendo la palabra de estados del 8279, cuyo formato se muestra en la figura 9.60. El programa mon85.asm es
un monitor para cargar en la EPROM del microcomputador Pro 85 y ejecuta todas
las funciones presentes en sistemas de desarrollo de bajo costo para carga, ejecucin
y depuracin del cdigo de aplicaciones con microprocesadores.

Dispositivos de E/S Programables

591

Ejemplo 9.14
Se debe escribir un programa monitor para el control de un microcomputador
Pro 85 basado en el P 8085. El C tiene un teclado de 20 teclas y una pantalla de 6
caracteres, bajo el control de un 8279.

Fig.9.70. Teclado y pantalla del Pro 85.

En este ejemplo no se presenta la arquitectura de la tarjeta del C, exceptuando la seccin de teclado/pantalla, cuyo diagrama elctrico se muestra en la figura
9.72. El resto del diseo se deja como ejercicio para los estudiantes del curso Sistemas de Procesadores. El Pro 85 es un C con CPU 8085 y tiene 8 Kbytes de
EPROM, 16 Kbytes de RWM, 12 puertos de E/S y 2 temporizadores. El mapa de memoria y de puertos se muestra en la figura 9.71 y en la tabla 9.11, respectivamente.
FFFFH

LIBRE
36K

7000H
6FFFH

SRWM
2 x 6264
16K

3000H
2FFFH

SRWM
1 x 8155
256 bytes

2800H
27FFH

SRWM
1 x 8155
256 bytes

2000H
1FFFH

EPROM
1 x 2764
8K

0000H

Fig.9.71.Mapa de memoria del Pro 85. Los 8155 slo ocupan 256 bytes de los bloques de 2 K.

Dispositivos de E/S Programables

Fig.9.72 Seccin de teclado/pantalla del Pro 85.

592

Dispositivos de E/S Programables

593

Tabla.9.11Direcciopnes de los puertos del Pro 85.


PUERTO

FUNCIN

00H

PUERTO DATOS

01H
20H
21H
22H
23H
24H
25H

PUERTO CONTROL

DISPOSITIVO

8279

CONTROL
PUERTO A
PUERTO B
PUERTO C

8155 N 1

LSB TIMER
MSB DEL TIMER

PUERTO

FUNCIN

28H

CONTROL

29H
2AH
2BH
2CH
2DH
30H
31H
32H
33H
50H
51H
52H
53H

PUERTO A

DISPOSITIVO

PUERTO B

8155 N 2

PUERTO C
LSB TIMER
MSB DEL TIMER
PUERTO A
PUERTO B

8255 N 1

PUERTO C
COMANDO
PUERTO A
PUERTO B

8255 N 2

PUERTO C
COMANDO

La entrada de interrupcin TRAP es usada por el monitor para realizar la funcin de ejecucin de programas por pasos, mientras que las instrucciones RST 1 y
RST 7 se reservan para terminar un programa devolviendo el control al monitor y
para la llamada de las rutinas de usuario, respectivamente. Todas las dems entradas e
instrucciones de interrupcin se dejan libres para su uso en el desarrollo de las aplicaciones.
El programa monitor ejecuta saltos a la memoria SRWM del 8155 #1 como
respuesta a una solicitud de interrupcin. Las direcciones de SWRM donde el usuario
puede colocar una instruccin JMP hacia a la RSI que corresponda, se especifican en
la siguiente tabla.
Tabla.9.12 Interrupciones del Pro 85.
INTERRUPCIN
DIRECCIN
RST 0
Reset por programa.
RST 1
Reservada
RST 2
2019H
RST 3
201CH
RST 4
201FH
RST 5
2022H

INTERRUPCIN
RST 5.5
RST 6.0
RST 6.5
RST 7.0
RST 7.5
TRAP

DIRECCIN
2025H
2028H
202BH
Reservada
202EH
Reservada

El monitor del microcomputador Pro 85 ofrece un grupo de subrutinas, las


cuales pueden ser invocadas por el diseador, para reducir el esfuerzo de desarrollo
del programa de la aplicacin. Estos programas de usuario son identificados con un
nmero n: 0,,4 y se llaman por medio del siguiente cdigo:
mvi e, n
rst 7

Dispositivos de E/S Programables

594

En la tabla 9.13 se describe la funcin de cada rutina de usuario y se indica el


valor se n por medio del cual pueden ejecutarse.
Tabla.9.13 Rutinas de monitor del Pro 85.
Rutina
n

Descripcin

LEER_TCLD

MSTR_DR

MSTR:_DT

Presenta el contenido del registro acumulador en el campo de datos de la pantalla.

Muestra en el campo de direcciones de la pantalla la


cadena de caracteres apuntada por el registro par HL.

Muestra en el campo de datos de la pantalla la cadena de


caracteres apuntada por el registro par HL.

CAMP_DIR
CAMP_DAT

Espera por la pulsacin de una tecla y retorna su cdigo


en el registro acumulador.
Presenta el contenido del registro par HL en el campo de
direcciones de la pantalla.

La pantalla del microcomputador Pro 85 consta de seis indicadores incandescentes, agrupados en dos campos, como indica la parte superior de la figura 9.73.
Para la realizacin de los programas que usen el teclado, el usuario debe conocer los
cdigos retornados por la activacin de cada tecla. Estos son mostrados en la misma
figura.

Fig.9.73 Campos de la pantalla. Leyenda y cdigos de retorno del teclado del Pro 85.

Dispositivos de E/S Programables

595

El mapa de caracteres de la tabla 9.14 muestra los cdigos de los caracteres


que pueden presentarse usando las rutinas CAMP_DIR y CAMP_DAT. En realidad
este nmero corresponde a la posicin del carcter en la tabla de cdigos de siete
segmentos. Es posible que el usuario desee presentar caracteres distintos a los mostrados. Esto puede hacerlo, realizando accesos al 8279.
Tabla.9.14 Mapa de caracteres de Pro 85
Caracter en Cdigo Caracter en
pantalla
pantalla
0
00H
g
1
01H
H
2
02H
L
3
03H
M
4
04H
n
5
05H
i
6
06H
J
7
07H
o
8
08H
P
9
09H
q
A
0AH
r
B
0BH
t
C
0CH
u
D
0DH

E
0EH
_
F
0FH
espacio

Cdigo

10H
11H
12H
13H
14H
15H
16H
17H
18H
19H
1AH
1BH
1CH
1DH
1EH
1FH

El modo en el cual se realizan las interconexiones entre el los indicadores y el


controlador 8279, determina el nmero que identifica a cada LED de la pantalla y el
formato de los datos presentados en los displays de siete segmentos. Esta informacin
se muestra en la figura 9.74.

Fig.9.74 Numeracin de los LEDs y correspondencia entre las salidas del 8279 y los segmentos del
display.

Dispositivos de E/S Programables

596

El Pro 85 genera algunos mensajes para comunicarse con el usuario. Estos


se presentan en el campo de direcciones, y son los siguientes:
Error.
Introducir direccin de memoria.
Espera tecla de registro.
Programa de usuario en ejecucin.
Respuesta a tecla <EXAM>. Examinar registro: <R> o memoria: <M>
Respuesta a tecla <EJEC>. Ejecucin normal: <N> o paso a paso: <PP>

Fig.9.75 Mensajes del Pro 85.

Las operaciones bsicas que el ususario puede realizar con el microcomputador Pro 85 se describen a continuacin:
Examinar y modificar el contenido de la memoria SWRM.
Examinar y modificar el contenido de los registros internos del Procesador.
Ejecutar un programa de usuario a partir de una direccin determinada hasta encontrar una
instruccin RST 1 o HLT.
Ejecutar un programa de usuario por pasos.

Para ejecutar cada una de estas funciones, el usuario usa el teclado para introducir comandos al C. Algunos ejemplos de comandos son los siguientes:
1. <EXAM><M> <2> <0><0> <0> <> <><> <> <>

Presenta en el campo de datos en forma sucesiva el contenido de la direccin de memoria


2000H, 2001H, 20021H, 2003H y devuelve el control al monitor mostrando el mensaje de
identificacin.
2. <EXAM> <M> <2> <0> <0> <0> <> <4> <5> <> <>

Presenta en el campo de datos el byte en la posicin 8000H de la SWRM, introduce el valor 45H mostrndolo en el campo de datos y lo carga en la direccin 8000H presentndose
el contenido de 8001H para finalmente devolver el control al monitor.
3. <EXAM> <R> <A> <> <><> <> <7> <F>< > <>

Muestra en secuencia el contenido del registro acumulador A, de B, de C, de D, y del registro E. Sustituye por 7FH el valor almacenado en el registro E y devuelve el control a
monitor.

Dispositivos de E/S Programables

597

4. <EJEC> <N> <>

Ejecuta un programa en el modo de corrida libre, cuya primera instruccin se encuentra en


la posicin de memoria cuya direccin muestra el campo de direcciones de la pantalla.
5. <EJEC> <N> <> <5> <0> <0> <0> <>

Ejecuta un programa en corrida libre cuya primera instruccin se encuentra en la direccin


de memoria 5000H.
6. <EJEC> <PP> <> <><> <> <> <>

Ejecuta, una por una, las cinco primeras instrucciones de un programa cuya primera instruccin se encuentra en la posicin de memoria indicada por el campo de direcciones de
la pantalla, y luego devuelve el control al monitor.
7. <EJEC> <PP> <*> <5><0> <0> <0> <> <><> <> <> <>

Ejecuta, una por una, las cinco primeras instrucciones de un programa, cuya primera instru cin se encuentra en la direccin de memoria 5000H. Al final se devuelve el control al
monitor.
<*> cualquier tecla excepto <>

El cdigo en el archivo mon85.asm constituye el programa de mayor tamao


presentado en este trabajo. Se supone que este monitor puede ser grabado en la
EPROM del Pro 85 para proveer en la prctica todas las funciones de microcomputador. Aunque el Pro 85 no ha sido construido, el lector puede tener la seguridad
que el programa que se presenta en las pginas siguientes funcionar en forma correcta al ser probado en el mundo real. Lo rotundo de la afirmacin, se sustenta en el
hecho que el monitor fue exhaustivamente evaluado en simulaciones realizadas usando el programa WSIM85. Aunque este simulador no es un software profesional de
costo elevado, sino una versin de evaluacin descargada de Internet, el autor ha realizado con ste simulaciones de al menos cien programas y slo ha encontrado un
error en la ejecucin de la instruccin DAD y sto slo bajo ciertas condiciones.
Asumiendo que el WSIM85 simula en forma correcta el repertorio de instrucciones del 8085, en realidad son el resto de los recursos que ofrece el simulador, lo
que lo convierten en una herramienta de gran poder para desarrollar aplicaciones basadas en el 8085. WSIM85 permite especificar un sistema C con hasta cuatro bancos
de memorias EPROM y SWRM, hasta cinco dispositivos PPI 8255, un circuito multifuncin 8155, un controlador de teclado/pantalla 8279 adems de timers 8253, controlador de comunicaciones 8251 y mdulo LCD.
Para configurar un sistema el usuario slo debe especificar las direcciones de
cada circuito de memoria y de puerto y las conexiones necesarias. Por ejemplo puede
acoplarse la salida del temporizador del 8155 o la IRQ del 8279 a una de las lneas de
interrupciones del P. Tambin puede especificarse un divisor del reloj de la CPU,
para fijar la frecuencia de la seal de entrada al timer.

Dispositivos de E/S Programables

598

Una vez configurado el simulador de acuerdo con el hardware del PRO 85,
el cdigo fue exhaustivamente evaluado en sesiones de simulacin hasta obtenerse la
versin final completamente operativa. El monitor fue depurado y se ejecutaron programas que usan como entrada el teclado del Pro 85 y que presentan resultados en
su pantalla. Por ejemplo se carg el cdigo del reloj digital en la memoria del Pro
85 y se ejecut, presentndose la hora en la ventana del 8279 del WSIM85.
En la prctica, la nica manera de cargar un programa en la memoria del Pro
85 es introduciendo en memoria el cdigo de operacin en hexadecimal de cada instruccin. Esto es una ardua tarea, aun para aplicaciones como el reloj digital. Usualmente los kits de evaluacin como el Pro 85 pueden aceptar por un puerto de comunicacin serie, la descarga de un archivo en formato HEX INTEL desde un PC. En el
caso presente, si el lector desea ejecutar un programa extenso usando el Pro 85,
coloque el cdigo del programa a ser cargado en la SWRM del PRO 85, al final del
listado del monitor, de modo que se cargue en memoria junto con ste. Una vez en
memoria, el programa puede ser ejecutado como se indic.
Una de las desventajas del simulador WSIM85 es que no tiene un teclado como el 8085 Virtual KIT, por ejemplo. En su lugar, para emular la activacin de una
tecla se edita el 8279 y entonces el programa solicita, por medio de la ventana de dialogo de la figura 9.76, la posicin en la matriz de teclado del pulsador activado.

Fig.9.76 Ventana de activacin de una tecla en WSIM85.

Con este mtodo se puede usar cualquier teclado con cualquier modo de interconexin al 8279. La ventana de configuraci del 8279 tambin permite especificar la
direccin del circuito, los cdigos siete segmentos de los caracteres a presentar en
pantalla y la conexin, si se requiere, de la salida IRQ.
Como se observa en la figura 9.72, el Pro 85 utiliza como dispositivo de entrada un teclado que viene ensamblado de fbrica como una matriz 4 x 5 de pulsadores, similar al teclado mostrado en la figura 9.10. Se deduce del diagrama elctrico de
la seccin de teclado/pantalla, que se usa exploracin codificada de las 4 filas de la
matriz y se interconectan las cinco lneas de columnas a las correspondientes entradas
de retorno RL[4:0]. Las lneas restantes, correspondientes a los tres bits de mayor
peso de RL, permanecen sin conexin y forzadas a nivel alto por los resistores en el
interior del 8279.

Dispositivos de E/S Programables

599

Fig.9.77 El Pro 85 tiene un 8279 en la direccin 00H y no usa la salida IRQ.

Fig.9.78 Posiciones de las teclas del Pro 85.

Este modo de interconexin del perifrico al 8279 determina que la posicin


de las teclas no se corresponde con su cdigo como en el circuito de la figura 9.69.
De modo que para asignar los cdigos a las teclas debe usarse una tabla de consulta.
Observe que las filas no tienen ocho pulsadores sino cinco, en consecuencia la tabla
debe considerar la posicin de las teclas que no existen en cada fila.
Como se observa en la figura 9.73, la pantalla del Pro 85 consta de seis indicadores de siete segmentos arreglados en dos campos: direcciones (L0-L3) y datos
(L4-L5). El modo de interconexin de las lneas de seleccin de dgito a los LEDs,
asigna el nmero de cada cual. Como el usuario de la tarjeta siempre estar muy cerca de sta, no se requiere que los diodos luminosos produzcan un gran nivel de iluminacin. Los valores de los resistores en los segmentos garantizan una visibilidad adecuada de los caracteres de la pantalla. El circuito 74LS244 se usa para suministrar la
corriente necesaria por segmento. La informacin suministrada sobre el hardware de
la tarjeta de evaluacin se considera sufiente para escribir el programa de control del
microcomputador.
El programa monitor est organizado en un solo mdulo y est compuesto por
subrutinas. Un diagrama simplificado del cdigo se presenta en las figura 9.79 y 9.80.

Dispositivos de E/S Programables

600

Fig.9.79 Diagrama de flujo del programa monitor.

Al inicio se carga el apuntador de pila y se programa el controlador 8279. Se


configura para teclado con exploracin codificada con proteccin para activacin de
dos teclas y pantalla de ocho caracteres con entrada por la izquierda. A continuacin
se borra la RAM de display y la FIFO.
El proceso de programacin del 8279 debera indicar que se va a leer la FIFO
para poder obtener la posicin de la tecla pulsada. Pero si esto se hace al inicio del
programa y posteriormente un cdigo de usuario activa la lectura de la RAM de display, cuando el control regrese a monitor (a la rutina Orden), las operaciones de lectura al 8279 retornarn el contenido de la RAM de pantalla y no el de la FIFO. Por
esta razn, la activacin de la lectura de la FIFO se realiza cada vez que se invoca la
rutina de lectura de teclado.

Dispositivos de E/S Programables

Fig.9.80 Diagrama de flujo del programa monitor.

601

Dispositivos de E/S Programables

602

Continuando con el proceso de inicio, se debe programar el 8155. El monitor


no usa los puertos del 8155, slo la seccin de RAM y el temporizador. Pero debido a
que cuando se arranca o para el timer, a la vez se modifica la configuracin de los
puertos, el monitor realiza una programacin de stos por defecto y almacena la palabra de control com_ini en la posicin de memoria ctrl_usu. Si un programa de usuario
usa los puertos del 8251 #1, deber actualizar esta posicin de memoria con el byte
que usa para configurar los puertos. De este modo, cuando el monitor arranca o detiene el timer del 8155 #1, se usar el contenido de ctrl_usu para mantener la configuracin de los puertos impuesta por el programa de usuario.Una vez finalizada la programacin inicial, se salva el contenido de los registros internos del procesador y se
transfiere el control a la rutina Orden en espera de un comando de teclado. La rutina
Salvar_reg debe determinar desde donde fue invocada. Se usa una bandera de retorno
en la posicin de memoria flag, la cual se inicia en cero y es puesta a 1 por la rutina
Paso antes de llamar a Salvar_reg, al retorno Paso vuelve a cero a flag.
La rutina Orden espera continuamente un comando vlido desde teclado. Si
este no se produce Orden permanece en espera. Las teclas vlidas son <EXAM> y
<EJEC>. Si una de estas teclas es activada, la rutina Orden procesa el comando discriminando entre examinar memoria o registros y ejecucin normal o por pasos. Si la
sintaxis del comando no es correcta se genera un mensaje de error. En caso contrario
se redirige el control del programa a una de cuatro rutinas: Exam_mem,, Exam_reg
Ejec o Paso.
$title(Programa monitor para Pro 85)
$subtitle(Monitor bsico)
$ALLPUBLIC
;*************************************************************************************
; Monitor para Pro 85.
; Un microcomputador que puede ser simulado con el programa WSIM85
;*************************************************************************************
; Funciones:
; Examina y modifica la memoria
; Examina y modifica los registros
; Ejecuta un programa desde una direccin determinada hasta encontrar una
; Instruccin HLT o RST 1
; Ejecuta un programa por pasos desde una direccin dada
;*************************************************************************************
; El C tiene un teclado de 20 teclas y
; una pantalla de seis indicadores de siete segmentos
; Ambos bajo control de un 8279
;*************************************************************************************
; Distribucin de teclas. Observe que la tecla < > se sustituye por < OK >.

;+---+---+---+---+----+
;| C | D | E | F |EJEC|
;+---+---+---+---+----+
;| 8 | 9 | A | B |EXAM|
;|pch|pcl|
|
|
|
;+---+---+---+---+----+
;| 4 | 5 | 6 | 7 | ! |
;| h | l |sph|spl|
|
;+---+---+---+---+----+
;| 0 | 1 | 2 | 3 | OK |
;| r | m | n |pp |
|
;+---+---+---+---+----+

Dispositivos de E/S Programables

603

; Cdigos retornados por cada tecla


;+---+---+---+---+---+
;|0CH|0DH|0EH|0FH|13H|
;+---+---+---+---+---+
;| 8 | 9 |0AH|0BH|12H|
;+---+---+---+---+---+
;| 4 | 5 | 6 | 7 |11H|
;+---+---+---+---+---+
;| 0 | 1 | 2 | 3 |10H|
;+---+---+---+---+---+
; Posicin o nmero de la tecla (Para simular teclado con WSIM85)
+---+---+---+---+---+
;|18H|19H|1AH|1BH|1CH|
;+---+---+---+---+---+
;|10H|11H|12H|13H|14H|
;+---+---+---+---+---+
;| 8 | 9 |0AH|0BH|0CH|
;+---+---+---+---+---+
;| 0 | 1 | 2 | 3 | 4 |
;+---+---+---+---+---+

;*************************************************************************************
; No se usa la salida INTR del 8279 para detectar pulsacin de una tecla. Se lee la ;
; palabra de estados.
;*************************************************************************************
tope_rwm
equ 20ffh
; RWM del 8155 #1 reservada para variables de monitor.
i_rwm
equ 2000h
; Inicio RWM 8155 #1
i_stack
equ tope_rwm-12 ; Inicio de la pila (6 niveles)
modo_tcld
equ 0
; Teclado codificado con proteccin para activacin de
; dos teclas. Ocho indicadores con entrada por la iz; quierda
inic_8279
equ 0d3h
; Borra RAM de display y FIFO.
leer_fifo
equ 50h
; Se leer la FIFO.
ram_dig0
equ 90h
; Indicadores 0-3: Campo de direcciones.
ram_dig6
equ 96h
; Indicadores 6-7: Campo de datos.
; En realidad debe ser 94H.
; Para separar los campos en la simulacin se usa 96H.
okey
equ 10h
; Tecla
flecha
equ 11h
; Tecla
exam
equ 12h
; Tecla EXAM
ejec
equ 13h
; Tecla EJEC
no_hex
equ 0
; Bandera nmero hex invlido
hex
equ 1
; Bandera nmero hex vlido
bandera_dir
equ 80h
; Indica impresin en campo direcciones
bandera_dat
equ 0
; Indica impresin en campo de datos
com_ini
equ 40h
; Palabra de control inicial de usuario.
modo_timer
equ 80h
; Un pulso al final de la cuenta
inic_timer
equ 0C0h
; Arrancar timer
parar_timer
equ 40h
; Detener timer
estd_alto:
equ 1
; Nmero de estados (186H) para cuenta del timer
estd_bajo
equ 86h
;*************************************************************************************
; Definicin de segmentos
;*************************************************************************************
defseg x8279,start=0, class=iospace
; 8279 en direccin 50h
defseg p8155,start=20h,class=iospace ; 8155 en direccin 20h
defseg stack, start=i_stack
; La pila reside en la RWM del
; 8155 #1
defseg datos, class=data,start=i_rwm ; RWM reservada por el monitor
defseg progr, class=code,absolute
; 8K de EPROM desde 0000H
;*************************************************************************************

Dispositivos de E/S Programables

604

;*************************************************************************************
; Registros del 8279
;*************************************************************************************
seg x8279
x8279_dato
ds 1
; Registro de datos del 8279
x8279_cntrl
ds 1
; Registro de control del 8279
;------------------------------------------------------------------------------------;*************************************************************************************
; Registros del 8155
;*************************************************************************************
seg p8155
; Puertos A, B y C libres
pctrl_8155
ds 4
timer_bajo
ds 1
; Usado por rutina Paso
timer_alto
ds 1
; Usado por rutina Paso
;*************************************************************************************
; Los 12 bytes ltimos de RWM de 8155 #1 soportan el stack.
;*************************************************************************************
seg stack
ds 12
;*************************************************************************************
; Segmento de datos en RWM de 8155 #1
;*************************************************************************************
seg datos
direcc
dato
val_hex

ds 2
ds 1
ds 1

; Direccin actual
; Dato actual
; Contiene bandera que indica si el numero desde
; teclado es un valor hex vlido.
posic
ds 1
; Indica posicin del registro seleccionado en la tabla
; de nombres de registro
mem_hex
ds 2
; Almacena los ltimos cuatro dgitos hex obtenidos
; desde teclado
ctrl_usu
ds 1
; Programacin inicial del 8155
flag
db 0
; Indica si la rutina salv_reg fue llamada desde Paso.
;------------------------------------------------------------------------------------;*************************************************************************************
; Area de memoria imagen de registros
;*************************************************************************************
regh:
ds 1
; Registro H
regL:
ds 1
sph:
ds 1
spl:
ds 1
pch:
ds 1
pcl:
ds 1
regA:
ds 1
regB:
ds 1
regC:
ds 1
regD:
ds 1
regE
ds 1
regF
ds 1
;*************************************************************************************
; Area para colocar saltos a rutinas de servicio de interrupcin
; La interrupcin RST1 es usada para terminar los programas de usuario.
; En la prctica regresa el control al monitor
; La interrupcin RST 7 est reservada para ejecucin de rutinas de usuario.
; La entrada de interrupcin TRAP est conectada a la salida de Timer del 8155 #1.
; El resto de RST n y de las interrupciones hardware estn libres.
;*************************************************************************************
rst2:
ds 3
rst3:
ds 3
rst4
ds 3
rst5
ds 3
rst5.5:
ds 3
rst6:
ds 3
rst6.5:
ds 3
rst7.5:
ds 3
;*************************************************************************************

Dispositivos de E/S Programables

605

;*************************************************************************************
; Cdigo en EPROM
;------------------------------------------------------------------------------------seg progr
reset:

jmp inicio

; Vector de reset

;**********************************
;
Vectores de interrupcin
;**********************************
; Vector de interrupcin RST 1
org 8
rst1:
jmp salv_reg ; La ejecucin de RST1 salva los regs. y espera comando
; Vector de interrupcin RST 2
org 10h
jmp rst2
; Vector de interrupcin RST 3
org 18h
jmp rst3
; Vector de interrupcin RST 4
org 20h
jmp rst4
; Vector de interrupcin TRAP
org 24h
jmp int_trap

; Salto a rutina Paso

; Vector de interrupcin RST 5


org 28h
jmp rst5
; Vector de interrupcin RST5.5
org 2ch
jmp rst5.5
; Vector de interrupcin RST 6
org 30h
jmp rst6
; Vector de interrupcin RST6.5
org 34h
jmp rst6.5
; Vector de interrupcin RST 7
org 38h
jmp funcion ; Salto a tabla de saltos de rutinas de monitor
; Vector de interrupcin RST7.5
org 3ch
jmp rst7.5
;*************************************************************************************
; Se programa el 8279
;*************************************************************************************
org 100h
inicio:

lxi sp,tope_rwm-1
; Se inicia el apuntador de pila
mvi a,modo_tcld
out x8279_cntrl
; Se programa modo de display y de teclado
mvi a,inic_8279
; Se inicia 8279
out x8279_cntrl
mvi a,com_ini
sta ctrl_usu
; Valor inicial de comando de usuario
out pctrl_8155
; Se programa el 8155
jmp salv_reg
; salvar registros
;*************************************************************************************

Dispositivos de E/S Programables

606

;*************************************************************************************
;Rutina de espera de comando
;*************************************************************************************
orden:
call logo
; Imprime mensaje [Pro 85]
de_err:
call leer_tcld
; Se espera comando
cpi exam
; Compara con <exam>
jz reg_mem
; Preguntar si reg o mem
cpi ejec
; No es <exam>, comparar con <ejec>
jnz orden
; Ni <exam> ni <ejec>, esperar comando
call apagar
; Es <ejec>, apagar pantalla
lxi h,normal_paso
; Apuntar a mensaje
call camp_dir
; Imprimir NPP
call leer_tcld
; Espera tecla: corrida libre o por paso
cpi 2
; Comparar tecla con 1
jz ejecut
; Es 2 (N), salto a corrida libre
cpi 3
; No es 2, comparar con 3 (pp)
jz paso
; Es 3 (PP), ejecutar por pasos
jmp orden
; Ni 2 (N) ni 3 (PP), esperar comando
reg_mem:
call apagar
; Apagar pantalla
lxi h,regmem
; Cargar direccin de mensaje
call camp_dir
; Imprimir quE
call leer_tcld
; Esperar tecla
cpi 1
; Comparar con 1 (M)
jz exam_mem
; Es 1 (M), a examinar memoria
cpi 0
; No es 1 (M), comparar con 0 (R)
jz exam_reg
; Es 0 (R), a examinar registros
jmp error
; Ni 0 (R) ni 1 (M), Mensaje de error
;*************************************************************************************
; Ejecuta programa
;*************************************************************************************
ejecut:
call apagar
; Borrar pantalla
lhld direcc
; cargar en HL direccin de usuario
call format_dig
; Separar dgitos de direcciones
call camp_dir
; Presentar direccin
call leer_tcld
; Espera tecla
cpi okey
; Comparar con <okey>
jz pc_actual
; Si <okey> ejecutar el programa
cpi flecha
; No <okey>, comparar con <flecha>
jnz error
; No <okey> ni <flecha>; emitir mensaje de error
call apagar
; Es <flecha>, borrar pantalla
lxi h,orgexam
; Apuntar a mensaje dir
call camp_dir
; Presentar dir
mvi c,bandera_dir
; Se insertar nueva direccin
call modif
; Introducir direccin
cpi okey
; ltima tecla fue <okey>?
jnz error
; No, emitir mensaje [Err]
pc_actual:
call apagar
; Si, apagar pantalla
lxi h,exe
; Presentar mensaje
call camp_dir
; [EJEC] en campo de direcciones
lhld direcc
; Guardar nueva direccin en
call interc_hl
; la memoria imagen
shld pch
; del contador de programa
jmp obtener_reg
; Recuperar registros antes de ejecutar
;*************************************************************************************
; Ejecuta programa por pasos
;*************************************************************************************
paso:
call apagar
; Apagar pantalla
lhld pch
; Contador de programa de usuario a HL
call interc_hl
shld direcc
; Hacer HL direccin actual
call format_dig
call camp_dir
; Presentar direccin actual en pantalla
call mostr_dat
; Mostrar contenido de direcc en campo de datos
call leer_tcld
; Esperar tecla
cpi okey
; Comparar con <okey>
jz orden
; Si <okey>, presentar logo y esperar comando
cpi flecha
; No <okey>, comparar con <flecha>
jz timer
; Es <flecha>, arrancar timer
call apagar
; No es <flecha>, apagar pantalla
lxi h,orgexam
; Presentar mensaje

Dispositivos de E/S Programables

timer:

int_trap:

vuelta:

607

call camp_dir
; [dir]
mvi c,bandera_dir
; Introducir nueva direccin
call modif.
call interc_hl
; Nueva direccin en HL
shld pch
; Guardar como contador de programa
cpi flecha
; ltima tecla fue <flecha>
jnz error
; No, presentar [Err]
call mostr_dat
; Si, mostrar dato
mvi a,modo_timer or estd_alto
; Modo y 6 bits altos del timer
out timer_alto
; Programar timer
mvi a,estd_bajo
; Byte bajo del timer
out timer_bajo
; Programar timer
lda ctrl_usu
; Al A palabra de control de usuario
ori inic_timer
; Incoporar comando de arranque del timer
out pctrl_8155
; Arrancar timer y mantener palabra de usuario
jmp obtener_reg
; Recuperar registros y ejecutar una instruccin
push psw
; PSW a la pila. Retorno desde interrupcin
lda ctrl_usu
; Al A palabra de control de usuario
ani 3fh
; Poner a cero A7 y A6
ori parar_timer
; Cargar comando de parada de timer
out pctrl_8155
; Parar timer
mvi a,1
; Uno al acumulador
sta flag
; Bandera Flag a 1
pop psw
; Recuperar PSW
jmp salv_reg
; Salvar registros
xra a
; Flag es 1, retorno aqui desde salv_reg
sta flag
; Flag a 0
jmp paso
; A ejectar siguiente instruccin

;*************************************************************************************
; Mensaje de identificacin Pro 85
;*************************************************************************************
logo:
lxi h,mpro
; Direccin de identificacin
call camp_dir
; Mostrar [Pro]
lxi h,_85
call camp_dat
; Mostrar
[85]
ret
;*************************************************************************************
; Actualiza campo de direcciones
;*************************************************************************************
mostr_dir:
lda dato
; Cargar en acumulador dato actual
lhld direcc
; Cargar en HL direccin actual
mov m,A
; Mover dato a memoria

cmp m
; Comparar memoria con dato escrito
jnz error
; Son diferentes, Err
inx h
; Apuntar posicin de memoria siguiente
shld direcc
; Hacer direccin actual
mstrdr:
call format_dig
call camp_dir
; Presentar en campo de direcciones
ret
; retornar
;*************************************************************************************
; Actualiza campo de datos
;*************************************************************************************
mostr_dat:
lhld direcc
; En HL direccin actual
mov a,m
; Recuperar dato
sta dato
; Actualizar dato
mstrdt:
mvi b,0
; Se usar campo de datos
mov h,a
; Dato en H
call format_dig
; Separa valor en dgitos
call camp_dat
; Presentar contenido de direccin actual
ret
; Retornar
;*************************************************************************************
; Guarda contenido de registros en memoria
;*************************************************************************************
salv_reg:
shld regh
; Cargar HL en memoria imagen
pop h
; Contador de programa a HL
shld pch
; Salvar PC
push d
; DE a la pila

Dispositivos de E/S Programables

push b
pop h
shld regb
pop h
shld regd
lxi h,0
dad sp
shld sph
push psw
pop h
mov a,h
sta rega
mov a,l
sta reg
call orden_regs
lda flag
cpi 1
jz vuelta
jmp orden

608

;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;
;

BC a la pila
BC de la pila a HL
BC a memoria imagen
DE de la pila a HL
DE a memoria imagen
HL en cero
A HL el contenido del SP
El SP desde HL a memoria imagen
PSW a la pila
Banderas a L
Carga acumulador con valor desde la pila
A a memoria de registro A
Banderas al acumulador
Banderas a memoria imagen
Ordenar memoria de registros
Al acumulador bit de estado FLAG
Probar si la rutina fue llamada desde Paso
Si, regresar a paso
No, esperar comando.

;*************************************************************************************
; Recuperar registros
;*************************************************************************************
obtener_reg:
lhld regd
; Recuperar registros D y E
mov d,l
mov e,h
lhld regb
; Obtener registros B y C
mov b,l
mov c,h
lhld rega
; Registro A a L
lda regf
; Banderas al acumulador
mov h,l
; Acumulador al registro H
mov l,a
; Banderas al registro L
push h
; PSW a la pila
pop psw
; Recuperar PSW
lhld sph
; Cargar imagen de apuntador de pila en HL
call interc_hl
sphl
; Cargar HL en apuntador de pila
lhld pch
; El Contador de programa en HL
call interc_hl
push h
; EL contador de programa ala pila
lhld regh
; Recuperar registros H y L
call interc_hl
ret
; Ejecutar Programa
;*************************************************************************************
;*************************************************************************************
; Examina la memoria y modifica la RAM
;*************************************************************************************
exam_mem:
call apagar
; Apagar indicadores
lxi h,orgexam
; Cargar en HL direccin del mensaje exam
call camp_dir
; Presentarlo: [][d][i][r] [][]
mvi c,bandera_dir
; Se usar el campo de direcciones
call modif
; Especificar direccin de memoria deseada.
mov d,a
; Salvar ltima tecla pulsada.
lda val_hex
; Cargar en A bandera de nmero hex
cpi no_hex
; Probar si direccin es un nmero hex vlido
jz error
; No hex, emitir mensaje Err y esperar comando
mov a,d
; Hex, recuperar ltima tecla pulsada
cpi flecha
; Flecha hacia abajo? o tecla OK?
jnz salir
; Si tecla OK retornar a esperar nuevo comando
call mostr_dat
; Si Flecha... presentar contenido de la posicin
; de Memoria seleccionada despus de [][d][i][r]
mvi c,bandera_dat
; Se usar el campo de datos
prox_pos:
call modif
; Exam/Modif contenido de la direccin actual
cpi flecha
; Ultima tecla: Flecha hacia abajo? o tecla OK?
jnz salir
; Si tecla OK retornar a esperar nuevo comando
call mostr_dir
; Si Flecha... presentar direccin y contenido de
call mostr_dat
; La posicin de memoria siguiente.
jmp prox_pos
; Continuar Exam/Modif memoria

Dispositivos de E/S Programables

609

salir:
jmp orden
; Salir a esoerar comando
;*************************************************************************************
; Examina y modifica los registros
;*************************************************************************************
exam_reg:
call apagar
; Apagar indicadores
lxi h,orgexar
; Cargar en HL direccin del mensaje reg
call camp_dir
; Presentar [rEg]
call leer_tcld
; Esperar registro
cpi 10h
; Es un dgito hex
jnc error
; No, [Err]
cpi 4
; Comparar con tecla 4
jc error
; Si es menor, no es un registro
sui 4
; Restar 4 para determinar posicin en tabla de
; registros
exm_regh:
sta posic
; Salvar posicin
lxi h,nombreg
; Cargar en HL inicio de tabla de nombre de reg
add a
; Multiplicar posicin por cuatro
add a
add l
; Sumar nuevo valor a direccin inicial de tabla
mov l,a
; Apuntar registro seleccionado
prox_reg:
push h
; Direccin en la tabla de nombre regs a la pila
call camp_dir
; Presentar nombre de reg en campo de direcciones
lxi h,regh
; Cargar en HL direccin de memoria imagen de H
lda posic
; Cargar en acumulador posicin de registro
; seleccionado/siguiente
add l
; Sumar posicin de registro actual a direccin
; imagen de registro H
mov l,a
; HL contiene direccin de memoria imagen del
; registro seleccionado
lda posic
; Al acumulador posicin del registro actual
inr a
; Siguiente registro
sta posic
; Se guarda posicin del siguiente registro
mov a,m
; Se recupera contenido del registro seleccionado
sta dato
; Esto es el dato actual
push h
; Se guarda direccin imagen del registro actual
call mstrdt
; Se muestra el contenido del registro actual en
; el campo de datos
mvi c,bandera_dat
; Se modificar el dato
call modif
; Modificar dato
cpi flecha
; ltima tecla fue <flecha>?
jnz orden
; No ,fue <ok>. Ir a esperar comando
pop h
; Fue <flecha>, Recuperar direccin imagen del
; registro actual
lda dato
; Cargar en el acumulador nuevo dato
mov m,a
; Actualizar direccin imagen de registro
pop h
; Recuperar direccin del registro en tabla de
; nombres
mov a,l
cpi ultreg
; Probar si es el ltimo registro
jnz no_ultimo
; No es el ltimo (F); seguir
xra a
; Es el ltimo, la siguiente posicin es la 0 (H)
jmp exm_regh
; Salto a examinar registro H
no_ultimo:
lxi d,4
; No es el ltimo
dad d
; HL apunta al siguiente registro
jmp prox_reg
; Examinar prximo registro.
;*************************************************************************************
; Convierte una cadena de dgitos de teclados en direcciones
; o datos y los presenta en el campo correspondiente.
;*************************************************************************************
modif:
lxi h,0
; Cargar cero en HL
shld mem_hex
; Guardar HL en posicin que contiene valor hex
xra a
; Limpiar acumulador
sta val_hex
; Bandera Val_hex a cero
prox_hex:
call leer_tcld
; Esperar tecla
cpi okey
; Comparar con <okey>
jnc no_numero
; Mayor o igual que 16, no es un dgito Hex
lxi h,val_hex
; Es un dgito hex. Apuntar direccin de bandera
; de nmero vlido
mvi m,hex
; Bandera de en Val_hex indica que se tecle un
; nmero vlido

Dispositivos de E/S Programables

lhld mem_hex
dad h
dad
dad
dad
ora

modf_dir:

h
h
h
l

mov l,a
shld mem_hex
mov a,c
rlc
jc modf_dir
mov h,l
mov a,h
sta dato
call format_dig
call camp_dat
jmp prox_hex
shld direcc
call format_dig
call camp_dir
jmp prox_hex

610

; Cargar en HL valor hex


; Eliminar digito de mayor orden y poner cero en
; dgito de orden menor.

;
;
;
;
;
;
;
;
;
;

Empacar en A, el nmero desde teclado y el


dgito 2 en registro L
Insertar dgito desde teclado en HL
Salvar nuevo valor Hex
Determinar si se trata de una direccin o dato
Obtener acarreo
Si uno, es una direccin
Si cero, es un dato que se mueve a H
Dato al acumulador
Convertir en dato actual

; Presentar dato
; Esperar prximo dgito de datos
; Guardar valor hex en direcc

; Presentar nueva direccin


; Salto a esperar introduccin de nuevo dgito de
; direccin
no_numero:
cpi exam
; Comparar comando con <exam>
jnc error
; Si es mayor, mensaje de error
lhld mem_hex
; Si menor, es <flecha>
ret
; retornar
;*************************************************************************************
; Presenta caracteres en campo de direcciones
;*************************************************************************************
camp_dir:
ori bandera_dir
; Se presentar una direccin
call visual
; presentar
ret
;*************************************************************************************
; Presenta caracteres en campo de datos
;*************************************************************************************
camp_dat:
xra a
; Se presentar un dato
call visual
; Presentar
ret
;*************************************************************************************
;*************************************************************************************
; Apaga los indicadores
;*************************************************************************************
apagar:
lxi h,apag
; Apuntar caracteres de espacio
call camp_dir
; Borrar campo de direcciones
lxi h,apag
; Apuntar espacio en blanco
call camp_dat
; Borrar campo de datos
ret
;*************************************************************************************
; Presenta mensaje de error
;*************************************************************************************
error:
call apagar
; Apagar pantalla
lxi h,err
; Apuntar mensaje de error
call camp_dir
; Presentar Err
jmp de_err
; Retorno a esperar comando
;*************************************************************************************
; Salida de caracter a display
;*************************************************************************************
visual:
jm vis_dir
; Detectar si se imprime en campo de
; direcciones o de datos
mvi b,2
; Campo de datos, dos dgitos
mvi a,ram_dig6
; Se presenta primero en L6
jmp prog_disp
; Salto a programar controlador de display
vis_dir:
mvi b,4
; Campo de direcciones, 4 dgitos
mvi a,ram_dig0
; Se presenta primero en L0
prog_disp:
out x8279_cntrl
; Se presenta dgito L0/L6 con autoincremento
prox_dig:
mov a,m
; Mover al acumulador L0/L6
xchg
; Preservar HL: Direccin de dgito a presentar

Dispositivos de E/S Programables

611

lxi h,cod_7Seg
; Apuntar tabla de conversin a 7-seg
add l
; Desplazarse en la tabla
mov l,a
mov a,m
; Obtener cdigo de 7-seg
cma
out x8279_dato
; Presentar en indicador
xchg
; Recuperar HL
inx h
; Apuntar siguiente dgito
dcr b
; Contador_ dgitos = Contador_dgitos-1
jnz prox_dig
; No cero, obtener prximo caracter
ret
; Si cero,retornar
;*************************************************************************************
;Lee caracter desde teclado
;*************************************************************************************
leer_tcld:
mvi a,leer_fifo
; Se leer la FIFO
out x8279_cntrl
; del teclado
in x8279_cntrl
; Se lee la palabra de estado.
ani 7
; Mscara para NNN:nmero de cracateres en FIFO
jz leer_tcld
; Si cero, esperar activacin de tecla
in x8279_dato
; No cero, leer posicin de tecla
lxi h,tecla
; Apuntar a posicin inicial de tabla de teclado
add l
; Desplazarse hasta la tecla presionada
mov l,a
mov a,m
; Obtener cdigo de la tecla
ret
; Retornar
;*************************************************************************************
; El nmero hexadecimal de 4 bits en HL es separado en
; dgitos individuales los cuales se cargan en memoria
; a partir de la direccin mem_dig. Este formato es el
; adecuado para presentacin en los indicadores de 7-SEG
;
; Contenido de HL es un valor de 4 dgitos hexadecimales
;
H
L
;
(D3D2)(D1D0)
;*************************************************************************************
format_dig:
mov a,h
; Cargar en acumulador D3D2
rar
; Rotar 4 bits a la derecha
rar
rar
rar
ani 0FH
; En A (0D3)
lxi d,mem_dig
; Apuntar direccin de 0D3
stax d
; Cargar 0D3 en memoria de pantalla
mov a,h
; Cargar en acumulador D3D2
ani 0FH
; Convertir en 0D2
inx d
; Apuntar direccin de 0D2
stax d
; Copiar 0D2 en memoria
mov a,l
; Mover al A D1D0
rar
; Rotar 4 bits a la derecha
rar
rar
rar
ani 0FH
; En A (0D1)
inx d
; Apuntar direccin de 0D1
stax d
; Cargar 0D1 en memoria de pantalla
mov a,l
; Mover al A D1D0
ani 0FH
; Convertir en 0D0
inx d
; Apuntar direccin de 0D0
stax d
; Copiar 0D0en memoria
lxi h,mem_dig
; HL apunta a posicin de D0
ret
; Retornar
;*************************************************************************************
; Intercambiar H y L
;*************************************************************************************
interc_hl:
push b
; Salvar BC
mov b,h
; Cargar H en B
mov h,l
; Copiar L en H
mov l,b
; Copiar H en L
pop b
; Recuperar BC

Dispositivos de E/S Programables

ret

612

; Retornar

;*************************************************************************************
; Ordenar registros
; Los registros en memoria estn:
; L H SPL SPH PCL PCH A C B E D F
; Deben ordenarse para efectos de presentacin como:
; H L SPH SPL PCH PCL A B C D E F
;*************************************************************************************
orden_regs:
mvi e,5
; Se intercambian 5 registros
lxi h,regh
; HL apunta a regH
lxi b,regl
; BC apunta a regL
prox:
mov d,m
; Intercambiar regH con regL
ldax b
; .
mov m,a
; .
mov a,d
; .
stax b
; .
dcr e
; Decrementar contador
rz
; Si cero,retornar
inr l
; Apuntar siguiente
inr l
; Registro SPH, PCH o D
inr c
; Apuntar siguiente registro
inr c
; SPL, PCL o E
mov a,e
; Mover contador al acumulador
cpi 2
; Probar si se apunta al regA
jnz prox
; No, intercambiar prximos registro
inr l
; Si omitir acumulador. Apuntar a B
inr c
; Apuntar a C
jmp prox
; Continuar con siguiente
;*************************************************************************************
; funcion = Tabla de saltos para rutinas de monitor
;*************************************************************************************
; Para ejecutar rutinas de monitor
; mvi e,n
cargar en e el nmero de la rutina y ejecutar
; rst 7
;
;
;
;
;
;
;

n =
(0) leer_tcld:
(1) mstrdr:
(2) mstrdt:
(3) camp_dir:

Espera la pulsacin de una tecla y retorna el valor en A.


Presenta el contenido del registro par HL en el campo de direcciones.
Presenta el contenido del A en el campo de datos.
Presenta una cadena de caracteres en el campo de direcciones
HL contiene la direccin del primer caracter.

; (4) camp_dat:
Presenta una cadena de caracteres en el campo de datos
;
HL contiene la direccin del primer caracter
;*************************************************************************************
funcion:
push h
mvi d,0;
; Byte alto del desplazamiento de la tabla a cero.
lxi h,tabla
; Cargar HL con la base de la tabla.
dad d
; Sumar el desplazamiento a la base de la tabla.
dad d
; Sumar de nuevo
mov e,m
; El byte bajo de la direccin de salto en E.
inx h
; HL apunta a direccin siguiente.
mov d,m
; El byte alto de la direccin de salto en D.
pop h
; Recuperar HL
push d
; Direccin de salto a la pila.
ret
; Saltar al proceso.
tabla:
dw leer_tcld,mstrdr,mstrdt,camp_dir,camp_dat

Dispositivos de E/S Programables

613

;*************************************************************************************
; Tabla de cdigos de siete segmentos
;*************************************************************************************
org 0500h
cod_7Seg:
cero
equ $-cod_7Seg
db 0f3h
db 60h
db 0b5h
db 0f4h
cuatro
equ $-cod_7Seg
db 66h
cinco
equ $-cod_7Seg
S
equ $-cod_7Seg
db 0d6h
db 0d7h
db 70h
ocho
equ $-cod_7Seg
db 0f7h
db 7eh
?A
equ $-cod_7Seg
db 77h
?B
equ $-cod_7Seg
db 0c7h
?C
equ $-cod_7Seg
db 93h
?d
equ $-cod_7Seg
db 0e5h
?E
equ $-cod_7Seg
db 97h
F
equ $-cod_7Seg
db 17h
g
equ $-cod_7Seg
db 0f6h
?H
equ $-cod_7Seg
db 67h
?L
equ $-cod_7Seg
db 85h
?M
equ $-cod_7Seg
db 0e6h
n
equ $-cod_7Seg
db 45h
i
equ $-cod_7Seg
db 20h
J
equ $-cod_7Seg
db 0e1h
o
equ $-cod_7Seg
db 0e4h
P
equ $-cod_7Seg
db 37h
q
equ $-cod_7Seg
db 76h
r
equ $-cod_7Seg
db 05h
t
equ $-cod_7Seg
db 44h
u
equ $-cod_7Seg
db 0Eh

equ $-cod_7Seg
db 0A3h
_
equ $-cod_7Seg
db 80H

Dispositivos de E/S Programables

614

espac

equ $-cod_7Seg
db 00h
;*************************************************************************************
; nombre de registros
;*************************************************************************************
nombreg:
db espac,espac,espac,?H
db espac,espac,espac,?L
db espac,S,P,?H
db espac,S,P,?L
db espac,P,?C,?H
db espac,P,?C,?L
db espac,espac,espac,?A
db espac,espac,espac,?B
db espac,espac,espac,?C
db espac,espac,espac,?D
db espac,espac,espac,?E
ultreg
equ low($)
db espac,espac,espac,F
;*************************************************************************************
; Cdigos de teclado
;*************************************************************************************
ORG 600H
tecla:
db 0
; Tecla <0>
db 1
; Tecla <1>
db 2
; Tecla <2>
db 3
; Tecla <3>
db 10H
; Tecla <>
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 4
; Tecla <4>
db 5
; Tecla <5>
db 6
; Tecla <6>
db 7
; Tecla <7>
db 11H
; Tecla <flecha hacia abajo>
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 8
; Tecla <8>
db 9
; Tecla <9>
db 0AH
; Tecla <A>
db 0BH
; Tecla <B>
db 12H
; Tecla <EXAM>
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 14H
; Tecla no existe
db 0CH
; Tecla <C>
db 0DH
; Tecla <D>
db 0EH
; Tecla <E>
db 0FH
; Tecla <F>
db 13H
; Tecla <EJEC>
;*************************************************************************************
; Area de mensajes
;*************************************************************************************
orgexam:
db ?d,i,r,espac
; [d][i][r][]
orgexar:
db r,?E,G,espac
; [r][E][G][]
regmem:
db espac,q,u,?E
; [][q][u][E]
err:
db espac,?E,r,r
; [][E][r][r]
exe:
db ?E,J,?E,?C
; [E][J][E][C]
apag:
db espac,espac,espac,espac
mpro:
db u,P,r,o
; [u][P][r][o]
_85:
db ocho,cinco
; [8][5]
normal_paso:
db n,,P,P
; [n][][P][P]
end
;************* Fin de monitor********************************************************

Dispositivos de E/S Programables

615

Los comentarios del programa permiten un fcil seguimiento de los algoritmos. En este trabajo no hay espacio para una exposicin completa del modo de funcionamiento de cada rutina. Slo se discuten las rutinas de lectura de teclado:
LEER_TLCD y de presentacin en pantalla: VISUAL. Mayores detalles sobre el programa se discutirn en las sesiones de clases del curso Sistemas de Procesadores.

Fig. 9.81 Diagrama de flujo de la rutina LEER_TCLD.

Este cdigo es invocado por varias rutinas del monitor. Su funcin es esperar
por la activacin de una tecla y cuando esto ocurra debe retornar en el registro acumulador el cdigo del pulsador activado. Como indica la figura 9.81, al inicio se indi-

Dispositivos de E/S Programables

616

ca al 8279 que se va a leer la FIFO y de inmediato se obtiene la palabra de estados


del 8279.
Como se aprecia la figura 9.60, si los tres bits de menor peso (NNN) de la palabra de estado estn en cero, indica que no se ha producido la activacin de una tecla.
La rutina LEER_TCLD examina el valor de NNN y procede a leer desde la FIFO la
posicin del pulsador cuando se ha producido la presin de una tecla. En caso contrario, la rutina permanece en espera que se presione un interruptor del teclado. El nmero de la tecla se usa como entrada a una tabla de consulta para obtener el cdigo
correspondiente.

Fig. 9.82 Diagrama de flujo de la rutina VISUAL.

La rutina VISUAL presenta en el campo de direcciones (S = 1) o en el campo


de datos (S =0) la cadena de caracteres cuyo primer elemento est en la direccin de
memoria apuntada por el registro par HL. Al inicio examina el estado de la bandera

Dispositivos de E/S Programables

617

de signo y si est activa se presentar en el campo de direcciones, cargndose el contador de caracteres con 4. En caso contrario, se usar el campo de datos y el contador
se inicia en 2. Luego de cargar el contador se indica al 8279 en cual LED se inicia la
presentacin (L0): direcciones, L4: datos). A continuacin se obtiene desde memoria
el carcter y se carga en el registro acumulador. Con el contenido del A se entra en
una tabla de consultas que contiene los cdigos siete segmentos de los caracteres y se
obtiene el que corresponde, el cual es cargado en la memoria de display y presentado
en el L0 o en L4. De seguido se incrementa el apuntador de memoria para seleccionar
la posicin del carcter siguiente y se disminuye en 1 el contador de caracteres, el
caracter se presenta en L1 o en L5 y sucesivamente el proceso se repite hasta cuando
el contador de caracteres llega a cero.
La rutina VISUAL no slo presenta mensajes en la pantalla del Pro 85 sino
que es el cdigo que se encarga de presentar las entradas de teclado en el campo de
direcciones o datos, segn convenga. El C mantiene en la posici de memoria direcc
y direcc+1 la direccin actual entrada desde teclado y en la posicin dato el contenido de esta localizacin o el contenido de un registro. El monitor mantiene continuamente actualizada la pantalla presentando en el campo correspondiente el contenido
de estas direcciones. Para esto previamente se formatea la posicin direcc y direcc +1
o la posicin dato de modo que cada dgito de 4 bits ocupe una localidad de memoria
a partir de mem_dig. La rutina VISUAL es entonces llamada para presentar el contenido de mem_dig y mem_dig +1 en el campo de datos o el contenido de mem_dig,
mem_dig +1, mem_dig +2 y mem_dig +3 en el campo de direcciones.
Como se explica antes, la simulacin en WSIM85 es tediosa por lo lento del
proceso de introducir comandos mientras que la gran ventaja es que se simulan perifricos reales. Para solventar tal situacin, se adapt el monitor presentado para ser
cargado en la memoria ROM del microcomputador virtual SAD 85. Aunque este microcomputador no usa circuitos reales, tiene un teclado para facilitar la introduccin
de comandos. En cierta forma es una mejora del monitor pues se puede usar la tecla
<Prev> para examinar direcciones en retroceso y adems se incorpor la posibilidad
de modificar y examinar los registros usando la tecla <Block>, funcin esta no realizada por el 8085 Virtual Kit en su versin original. Las siguientes pginas muestran el
resultado de sesiones de simulacin con ambas versiones del monitor.
Los nombres con los cuales el Pro 85 identifica lor registros internos del microprocesador 8085 se muestran a continuacin:
Tabla. 9.15 Nombre y orden con el cual se muestran los registros en pantalla.
Smbolo
H
L
SPH
SPL
PCH
PCL

Descripcin
Registro H
Registro L
Byte alto del apuntador de pila.
Byte bajo del apuntador de pila.
Byte alto del contador de programa.
Byte bajo del contador de programa.

Smbolo
A
B
C
D
E
F

Descripcin
Registro A.
Registro B.
Registro C.
Registro D.
RegistroE.
Registro de banderas.

Dispositivos de E/S Programables

Fig. 9.83 La pantalla del Pro 85 muestra el mensaje de identificacin al inicio de la simulacin..

618

Dispositivos de E/S Programables

Fig. 9.84 La pantalla del Pro 85 muestra el contenido del registro acumulador.

619

Dispositivos de E/S Programables

Fig. 9.85 Mensaje de identificacin del Pro 85 en la ventana del 8085 Virtual Kit..

620

Dispositivos de E/S Programables

Fig. 9.86 El Pro 85 muestra el contenido del registro acumulador en la ventana del 8085 Virtual Kit..

621

Dispositivos de E/S Programables

622

La versin del monitor para el 8085 Virtual Kit realiza la lectura del teclado
por medio de la interrupcin RST 5.5 y las llamadas a las subrutinas de monitor se
realizan en forma convencional, usando la instruccin CALL direccin.
Los dos ejemplos finales de este capitulo, ilustran el manejo del controlador
8279. Ambos ejemplos se escriben para ejecucin en el microcomputador MPR-85,
aunque con las limitaciones para simulacin de la interfaz analgica, el cdigo puede
ser ejecutado en el Pro 85. La primera aplicacin es un medidor de temperatura
ambiente y la segunda un medidor de capacidad. Ambos presentan su lectura en el
campo de direcciones de la pantalla del MPR-85.
Ejemplo 9.15
Disear y programar un medidor de temperatura ambiente. El instrumento debe presentar la temperatura en C en el campo de direcciones de la pantalla del MPR85 PLUS, como indica la figura 9.87. Como sensor se usa un transistor bipolar tipo
2N3904.

Fig. 9.87 Presentacin de la temperatura ambiente en el display del MPR-85 PLUS.

Las siguientes especificaciones se aplican al instrumento:


Rango de medida:

Para permitir el uso del medidor en cualquier lugar del planeta, el rango de medida ha sido extendido al mximo posible. Se selecciona para el termmetro un rango de -40 C T 60 C.
Resolucin:

El cambio mnimo detectable de temperatura debe ser de 0.5 C, valor apropiado para un medidor de temperatura ambiente.

Solucin:
El sensor usado en el instrumento es un transistor BJT conectado como diodo
como se observa en la figura 9.88. Un sensor tipo diodo, por el cual circula una corriente constante, presentar una variacin del voltaje terminal de aproximadamente 2.2 mV/C. Al contrario del comportamiento no lineal de los termistores y termocuplas, el coeficiente constante convierte al diodo en un excelente sensor para temperaturas bajas.

Dispositivos de E/S Programables

623

Fig.9.88. Sensor de temperatura tipo diodo.

Para el diseo del instrumento se requiere conocer para el transistor 2N3904:


el coeficiente de temperatura (CT) a corriente constante y el valor de VBE a una temperatura de referencia. La hoja tcnica del dispositivo incluye una curva que muestra
la variacin del CT con los cambios de la corriente terminal. Debido a que tal curva
no permite determinar con precisin el valor de CT a la corriente seleccionada de 100
A, se opto por obtener, mediante una simulacin PSPICE, las variaciones de la tensin VBE cuando la temperatura cambia entre -40 C y 60 C. El circuito usado se
muestra en la figura 9.89 y los resultados de la simulacin en la figura 9.90.

Fig.9.89. Ventana grfica del PSPICE mostrando el circuito simulado.

Dispositivos de E/S Programables

624

Fig.9.90. Variacin de VBE en funcin de la temperatura, a una corriente constante de 100 A.

La resistencia de 44K en el circuito de la figura 9.89, se calcula suponiendo


una tensin VBE constante de 600mV. En la prctica, la corriente que cruza el sensor
slo es aproximadamente constante y es posible demostrar que tal variacin tiene un
efecto despreciable en los resultados de la medida. Si se desea mejorar la precisin
debe usarse una fuente de corriente constante. De la figura 9.90 se encuentra el CT
del BJT, este es:
VBE = 1.9086 mV DC T

VBE(25C) = 0.609 V

Los valores de VBE para los lmites del rango de medida pueden obtenerse a
partir de esta ecuacin, o directamente de la curva:
VBE(-40C) = 0.733 V

VBE(60C) = 0.542 V

Estos resultados indican que una variacin en la temperatura de 100 C produce un cambio de 191 mV en los terminales del sensor. Debido a que el instrumento
debe usar un circuito conversor anlogo digital para adquirir la tensin a la salida del
sensor, el cambio en la cada de tensin a travs del BJT es demasiado pequeo
(1.91mV por C) comparado con la seal de entrada que debe aplicarse a la entrada
de un conversor A/D de 8 bits, cuya resolucin es de 19.531 mV. Esto es, para que el
valor de la salida digital del convertidor aumente/disminuya en uno, la entrada analgica debe variar 0.01953 V.

Dispositivos de E/S Programables

625

Para lograr una resolucin de 0.5 C en la medida, la lectura del Nadc debe
abarcar 200 pasos en el intervalo de variacin de 100 C de la temperatura ambiente.
El convertidor A/D tiene 28=256 pasos entre 0 y 5 V. Al asignar dos pasos por cada
grado de variacin de temperatura, se obtiene una resolucin de 0.5 C/paso. Esto
puede lograrse usando un circuito amplificador para acoplar la salida del sensor a la
entrada del CAD. Seleccionando una correspondencia de 27 entre el valor digital de
salida del conversor y la entrada VBE(-40C ) de 0.733 mV, se tiene que para los extremos del rango de medicin, la salida del circuito de acondicionamiento de entrada
debe ser:
D
Para VBE ( 40 C)

5
D
Vadc ( 40 C) = 27
= 0.527 V
256
D
Para VBE (60 C)

5
D
= 4.434 V
Vadc (60 C) = 227
256

Los niveles de las seales se indican en la figura 9.91.

Fig.9.91. Seales del sensor y del ADC.

Un circuito apropiado para procesar la tensin del sensor y obtener los niveles
de voltaje especificados, se muestra en la figura 9.92.

Dispositivos de E/S Programables

626

Fig. 9.92. Circuito de acoplamiento.

Para el amplificador de la figura 9.92, se tiene que:


La corriente Ie de entrada es igual a :

Ie =

VP Ve
R1

La corriente Is en R 2 es :

Is =

Vs VP
R2

Considerando que no fluye corriente por la entrada inversora, se tiene :


VP Ve Vs VP
=
R1
R2

R
Vs = 2 + 1 VP 2 Ve
R

R1
1
Vs = ( A v + 1) VP A v Ve

La ecuacin de la seal de salida del circuito acoplador tiene dos incgnitas:


la ganancia en lazo cerrado Av del amplificador operacional y la tensin de polariza-

627

Dispositivos de E/S Programables

cin VP de la entrada inversora. Para determinar sus valores, se considera el siguiente


sistema de ecuaciones:
4.434 = ( A v + 1) VP A v 0.542
0.527 = ( A v + 1) VP A v 0.733

Resolviendo, se obtiene:
A v = 20.46

VP = 0.723 V

En la figura 9.93 se muestra el circuito amplificador de entrada, donde se observa el uso de potencimetros para fijar los valores de la ganancia y de la tensin de
polarizacin.

Fig. 9.93. La salida del sensor se conecta a la entrada del circuito de acoplamiento.

El circuito de entrada del termmetro, mostrado en la figura 9.93, amplifica y


desplaza el nivel del voltaje de salida del sensor de modo que este abarque la mayor
parte del rango de operacin de entrada del convertidor anlogo digital. Una vez que
el conversor de datos convierte la entrada al dominio un valor digital, el cdigo de la
aplicacin debe calcular el valor correspondiente de la temperatura ambiente y presentarlo en representacin decimal en la pantalla del MPR-85. El uso del amplificador
operacional LMC660 permite que el circuito de entrada se alimente con +5 V. Otro

Dispositivos de E/S Programables

628

operacional, el LM234 por ejemplo, alimentado a esta tensin entrega un voltaje de


salida mximo de 3.5 V.
En la figura 9.94 se observa el diagrama funcional del instrumento. El programa usa como entrada la lectura del Nadc y calcula el valor de la temperatura en
grados centigrados.

Fig.9.94. Diagrama funcional del termmetro.

Existe una relacin lineal entre la temperatura y la tensin del sensorl, por lo
cual tambin hay una correspondencia lineal entre la lectura del sensor Nadc y la temperatura ambiente T, como lo ilustra la grfica de la figura 9.95.

Fig.9.95. Relacin entre la salida del conversor A/D y la temperatura ambiente.

Dispositivos de E/S Programables

629

Para efectos del clculo a realizar por el P, se debe tener en forma analtica
la dependencia mostrada en la grfica. La expresin de la temperatura como funcin
de Nadc es la siguiente:
T = 40 + 0.5 (N adc 27)
T = 0.5 N adc 53.5

Esta ecuacin debe ser resuelta por el P una vez realizada la conversin de la
muestra de entrada. Debido a que la ALU solo opera con aritmtica entera, se escala
la ecuacin como:
T = 5 N adc 535

Como resultado se obtendr el valor de T multiplicado por 10. El programa


colocar convenientemente el punto decimal de modo que se presente en pantalla el
valor correcto de la temperatura.
El diagrama final del circuito de procesamiento y adquisicin de la variable
temperatura se muestra en la figura 9.96. Se usa el convertidor analgico digital
ADC0804, a cuya entrada positiva se conecta la salida del amplificador. La entrada
negativa se lleva a tierra. Este circuito se comunica con el P por medio del 8155 #2
del MPR-85, el cual est decodificado en la direccin 50H.
Las salidas DB0-DB7 van al puerto A (51H). Por la lnea 0 del puerto B (52H)
se genera la seal de inicio de conversin y el terminal que notifica el fin de la conversin se conecta al la entrada 0 del puerto C (53H). Observe que el ADC0804 asi
como los buffers de salida del chip estn habilitados permanentemente al tener las
entradas CS y RD forzadas a nivel bajo.
La temperatura vara en forma lenta por lo cual el periodo de muestreo puede
ser de horas, minutos o segundos dependiendo de la aplicacin. En este caso se fija el
tiempo de muestreo en 1 segundo. Se usa el temporizador del 8155 #2, con su salida
conectada a la entrada RST 7.5, para establecer el tiempo entre muestras.El temporizador se programa para interrumpir al P cada 5 mS y se arranca al final de la conversin. La rutina de servicio incrementa un contador en cada interrupcin. Cuando la
cuenta alcance 200 habr pasado 1 segundo y entonces se toma la siguiente muestra.
Se cre un proyecto en MicroIde para el control de termmetro. Los 6 mdulos incluidos en el proyecto son:

Dispositivos de E/S Programables

Fig. 9.96. Medidor de temperatura.

630

Dispositivos de E/S Programables

631

Programa principal
Al inicio configura el 8155 con puertos A y C como entradas y el puerto B como salida y
llama a la rutina ESCRB_CAD para mostrar las unidades de medida en el campo de datos
del MPR-85.
Adquiere la muestra del voltaje del sensor y calcula el valor en binario de la temperatura
ambiente correspondiente a la muestra.
Llama a las rutinas BIN_BCD para convertir el resultado de la medida a decimal e invoca a
los subprogramas PTO_DEC y CEROS para colocar el punto decimal y el signo negativo
cuando sea necesario.
A continuacin habilita las interrupciones, arranca el timer y espera que transcurra un segundo para adquirir la muestra siguiente.
Rutina ESCRB_CAD
Muestra en pantalla la cadena de caracteres apuntada por el registro par HL. Si B = 01 usa el
campo de datos. Si B = 00 usa el campo de direcciones.
Rutina POR5
Multiplica por 5 el contenido del registro L y retorna el resultado en el registro par HL.
Rutina BIN_BCD
Es llamada por el programa principal para convertir a BCD valor de la tensin almacenado
en binario en la memoria del sistema.
Rutina PTO_DEC
Coloca el punto decimal al nmero mostrado por el LED L2.
Rutina CEROS
Elimina los ceros que anteceden al dgito con el punto decimal. Si la variable signo es cero
coloca el signo (-) en el LED L0; en caso contrario apaga el LED.

El listado de los mdulos que constituyen el proyecto en el programa MicroIde, se muestra a continuacin.
;----------------------------------------------------------------------------------------------------------------------$title(Medidor de temperatura)
;Modulo de programa principal
public temp,nbytes_dec,nbytes_bin,dir_dec,dir_bin,pdatos_8279,pctrl_8279
extern bin_bcd,por5,pto_dec,ceros,escrb_cad
;----------------------------------------------------------------------------------------------------------------------; Declaracin de constantes
T535

equ -535

632

Dispositivos de E/S Programables

i_stack
equ 8FF0H
; Inicio de la pila
i_rwm
equ 8000H
; Direccin de RWM para datos
modo_timer
equ 0fch
inic_timer
equ 0C2h
parar_timer
equ 42h
nbytes_dec
equ 2
nbytes_bin
equ 2
;----------------------------------------------------------------------------------------------------------------------Definicin de segmentos
defseg puertos,start=50h, class=iospace, absolute
defseg stack, start=i_stack
defseg datos, class=data, start=i_rwm
defseg int, start=4006h
defseg progr, class=code, start=6002h
;----------------------------------------------------------------------------------------------------------------------Puertos de entrada del sistema
seg puertos
pctrl_8155
ds 1
pa_8155
ds 1
pb_8155
ds 1
pc_8155
ds 1
timer_bajo
ds 1
timer_alto
ds 1
org 60h
pdatos_8279
ds 1
pctrl_8279
ds 1
;----------------------------------------------------------------------------------------------------------------------Los 16 bytes ltimos de RWM soportan el stack.
seg stack
ds 10H
;----------------------------------------------------------------------------------------------------------------------t_stack:equ $-1
; Base de la pila
;----------------------------------------------------------------------------------------------------------------------Segmento de datos en RWM
seg datos
dir_dec
ds 4
dir_bin
ds 2
signo
ds 1
;----------------------------------------------------------------------------------------------------------------------seg int
jmp rst7.5
;----------------------------------------------------------------------------------------------------------------------; Segmento de cdigo en EPROM
;----------------------------------------------------------------------------------------------------------------------seg progr
inicio:

lxi sp,t_stack
mvi a,parar_timer
out pctrl_8155
lxi h,grados
mvi b,1
call escrb_cad
mvi a,0

; Parar timer
; Presentar unidades
; Medida (grados centigrados)
; Seal de inicio de conversin a nivel bajo

633

Dispositivos de E/S Programables

leer:

seg1:
seg2:

out pb_8155
nop
ori 1
out pb_8155
in pc_8155
ani 1
jnz leer
in pa_8155
lxi d,T585
mvi h,0
mov l,a
call por5
dad d
mov a,h
ani 80h
jz seg1
xra a
sta signo
mov a,l
cma
mov l,a
mov a,h
cma
mov h,a
inx h
jmp seg2
ori 1
sta signo
shld dir_bin
call bin_bcd
mvi c,1
mvi a,0ah
lhld dir_dec
rst 7
call pto_dec
call ceros

; Ancho de pulso de iniciar conversin


; Volver a nivel alto el pulso de inicio
; Leer estado de INTR
; Si es uno, esperar
; Es cero, leer dato
; El registro DE se carga con -535
; Parte alta de HL a cero
; Mover dato a L
; Multiplicar dato por 5
; Sumar el valor -535
; Examinar el signo del resultado
; Si es positivo, variable signo se pone a 1
; Es negativo, variable signo se pone a 0
; Al valor
; negativo
; se le
; extrae
; el
; valor
; absoluto
; Seguir
; Signo positivo
; Convertir dato en binario a decimal
; Presentar
; en
; campo de direcciones
; de la pantalla del MPR-85
; Poner punto decimal
; Poner signo (-) si la valor es negativo. Eliminar ceros
; antes del pd.
; Programar timer

xra a
out timer_bajo
mvi a,modo_timer
out timer_alto
mvi a,inic_timer
; Arrancar timer
out pctrl_8155
mvi a,11
; Desenmascarar RST 7.5
sim
ei
; Habilitar interrupciones
mvi b,0
; Contador se inicia en cero.
es_int:
jmp es_int
; Esperar interrupcin
;----------------------------------------------------------------------------------------------------------------------vector de interrupcin rst7.5
;----------------------------------------------------------------------------------------------------------------------rst7.5:
inr b
; Incrementar contador
mov a,b
cpi 200
; Comparar con 200
jz inicio
; Si llego a 200, buscar prxima muestra

634

Dispositivos de E/S Programables

ei
ret

; Si aun no llega a 200, habilitar interrupciones


; Retornar.

;----------------------------------------------------------------------------------------------------------------------rea de mensajes
;----------------------------------------------------------------------------------------------------------------------grados:
db 63h,39h
end
;----------------------------------------------------------------------------------------------------------------------;----------------------------------------------------------------------------------------------------------------------; Mdulo PTO_DEC.
;----------------------------------------------------------------------------------------------------------------------; Coloca el punto decimal en dgito L2.
;----------------------------------------------------------------------------------------------------------------------public pto_dec
extern pdatos_8279,pctrl_8279
defseg progr
seg progr
pto_dec:
push psw
; Salvar registro A y banderas.
mvi a,01100010B
out pctrl_8279
; Se leer la direccin 2 (L2) de la RWM de display.
in pdatos_8279
; Leer RWM.
ani 0f7h
; Se active punto decimal.
out pdatos_8279
; Se muestra el punto decimal.
pop psw
; Recuperar desde de la pila
ret
; Retornar.
end
;---------------------------------------------------------------------------------------------------------------;---------------------------------------------------------------------------------------------------------------; Mdulo CEROS
;---------------------------------------------------------------------------------------------------------------; Coloca signo negativo y oculta ceros que precedan
; al dgito con punto decimal
;---------------------------------------------------------------------------------------------------------------public ceros
extern signo,pdatos_8279,pctrl_8279
defseg progr
seg progr
ceros:

pos:
cer:

mvi a,90h
out pctrl_8279
lda signo
cpi 1
jz pos
mvi a,0fbh
out pdatos_8279
jmp cer
mvi a,0ffh
out pdatos_8279
mvi a,61h
out pctrl_8279
in pdatos_8279

; Se escribir en direccin 0 (L0) de la RWM


; de display del 8279.
; Examinar variable signo.
; Si es 1, valor es positivo
; Valor es negativo.
: Mostrar signo negativo en L0.
; Positivo .Se apaga dgito L0.
; Se leer direccin 1 (L1) de la RWM
; L1 al acumulador

635

Dispositivos de E/S Programables

cpi 0ch
rnz
mvi a,0ffh
out pdatos_8279
ret
end

; Verificar siu L1 muestra cero.


; No es cero, retornar.
; Es cero. apagar L1.

Los otros tres mdulos: ESCRB_CAD, POR5 y BIN_BCD, fueron presentados en ejemplos anteriores de este trabajo.El circuito de la figura 9.96 fue construdo
y el programa de control fue descargado en la memoria del MPR-85 y ejecutado. Las
lecturas de temperatura fueron comparadas con las realizadas por un medidor comercial de igual resolucin y no se mostraron errores apreciables. Por esto, se concluye
que el instrumento diseado en este ejemplo funciona en forma adecuada.
Como dato curioso, las pruebas experimentales realizadas mostraron que el
coeficiente de temperatura del transistor 2N3904 se acerc ms al valor obtenido de
la simulacin que al coeficiente suministrado por la hoja tecnica del dispositivo. Esto
se comprob midiendo la tensin VBE para distintas temperaturas y comparando los
resultados de las medidas con los valores tericos calculados usando ambos coeficientes.
Ejemplo 9.16
Un medidor digital de capacidad es un instrumento de presencia obligada en el
banco de trabajo de un diseador de equipos electrnicos. Aunque los multmetros
digitales ususalmente miden valores de capacidad, slo lo hacen para valores pequeos, hasta 20 F. En este ejemplo se presenta el diseo de un instrumento que mide y
muestra valores de capacidad entre 1 nF y 1000 F usando el microcomputador
MPR-85.
El instrumento tiene dos escalas mostradas en la figura 9.97. Un interruptor
lgico se usa para seleccionar la escala. Debe disearse el circuito de medida y escribirse el programa de control del medidor de capacidad. Se usan los puertos y el timer
del 8155 #2 del del MPR-85, el cual est decodificado en la direccin 50H.
E1: 0.001 F 9.999 F

E2: 0.1 F 999.9 F

Fig.9.97. El instrumento tiene dos escalas de medida.

636

Dispositivos de E/S Programables

Solucin:
El mtodo mas sencillo para medir capacitancia es contabilizar el tiempo que
el componente Cx, de valor desconocido, tarda en cargarse hasta una tensin de referencia Vr. Debido a que el tiempo de carga es funcin de la capacidad, es posible determinar el valor del capacitor.
El circuito de medida se muestra en la figura 9.98. El transistor Q1 permite
descargar a Cx cuando el programa pone en uno la salida P51.0 conectada al resistor
R1. Para realizar una medida es necesario que el capacitor est inicialmente descargado. Cuando Q1 est cortado, Cx se carga hacia +5 V a travs R2. Cuando la tensin
VCx alcanza el valor del voltaje de referencia Vr, la salida del comparador LM311
sube a nivel alto indicando al P por medio de la lnea P52.0 el final del proceso de
medida. El interruptor S1 permite al ususario seleccionar la escala baja E1, cuando
P52.3 est en cero o la alta E2, cuando P52.3 est nivel alto.
El tiempo que tarda el capacitor en cargarse desde cero hasta Vr es dado por la
expresin:

1
t x = R 2 C x ln
V
1 r

Si con la escala E1 seleccionada y con Cx igual a 1 nF se ajusta R2 hasta cuando tx sea 32 S, entonces:
E
3
t x = 32 10 C x1
= 32S
min
E
3
t x = 32 10 C x 2 = 3.2mS
min

Con el instrumento en la escala E1, el P debe ser programado para que


cuando se inicie la carga del Cx incremente en uno un contador cada 32 S (cada 3.2
mS en la escala E2). Si estando seleccionada la escala E1, se conecta en los terminales
de medida un capacitor de 1.357 F, este tardar en cargarse a Vr un tiempo de
43.424 mS y el contador debe registrar una cuenta de 1357, precisamente el valor de
Cx. Como se observa en la figura 9.98, el timer registra los pulsos de la seal de reloj
del sistema cuyo periodo es de 0.32 S. Si en la escala E1, el temporizador se carga
con 100 generar una solicitud de interrupcin cada 32 S. Si la rutina de servicio
incrementa un contador de 16 bits en cada interrupcin, entonces el contador alcanzar el valor 1357 en el momento que la salida del comparador suba anivel alto. Observe que la calibracin realizada para la escala baja se mantiene para la otra escala.
Un valor de 10000 debe cargarse en el timer cuando se use la escala E2.

Dispositivos de E/S Programables

Fig.9.98. Circuito del medidor de capacidad.

637

Dispositivos de E/S Programables

638

Se cre un proyecto en MicroIde para el control del capacimetro. Los 6 mdulos incluidos en el proyecto son:
Programa principal
Al inicio configura el 8155 con puertos A como salida y el puerto B como entrada, muestra
el valor 0000 (colocando el punto de acuerdo con la escala) en el campo de direcciones de la
pantalla) y llama a la rutina ESCRB_CAD para mostrar las unidades de medida en el campo
de datos del MPR-85. Luego se descarga el capacitor y se espera la activacin de cualquier
tecla para iniciar el proceso de medida.
Con la presin de un pulsador del teclado, el cdigo programa y arranca el timer, inicia la
carga de Cx y habilita las interrupciones. E eAdquiere la muestra del voltaje del sensor y calcula el valor en binario de la temperatura anste punto, el P permanece examinando el estado de la salida del comparador mientras esta est en cero. Cuando la salida del comporador
sube a nivel alto, el P verifica si la medida est dentro del rango. Si este no es el caso se
genera un mensaje de error.
Para una medida vlida, se llama a las rutinas BIN_BCD para convertir el resultado a decimal y se ejecuta la rutina PTO_DEC para colocar el punto decimal de acuerdo con la escala
seleccionada y si el instrumento est en la escala E2 se invoca al subprograma CEROS para
eliminar los ceros antes del dgito L2. En este punto el programa espera la activacin de
cualquier tecla para reiniciar el proceso de medida.
Rutina ESCRB_CAD
Muestra en pantalla la cadena de caracteres apuntada por el registro par HL. Si B = 01 usa el
campo de datos. Si B = 00 usa el campo de direcciones.
Rutina BIN_BCD
Es llamada por el programa principal para convertir a BCD valor de la tensin almacenado
en binario en la memoria del sistema.
Rutina PTO_DEC
Coloca/quita el punto decimal en el dgito indicado por el registro B. Si el registro C contiene 8 pone el punto, si C es 0 lo quita.
Rutina CEROS
En la escala E2, oculta los ceros que anteceden al dgito L2.

Los listados de los mdulos del programa principal y de las rutinas PTO_DEC
y CEROS, se presentan a continuacin:

Dispositivos de E/S Programables

639

$title(Medidor de capacidad)
;Modulo de programa principal
public nbytes_dec,nbytes_bin,dir_dec,dir_bin,pdatos_8279,pctrl_8279
extern bin_bcd, escrb_cad,pto_dec,ceros
; -------------------------------------------------------------------------------------------------------------------------i_stack
equ 8FF0H
i_rwm
equ 8000H
modo_timer
equ 0C0h
inic_timer
equ 0CDh
parar_timer
equ 4Dh
nbytes_dec
equ 2
nbytes_bin
equ 2
dig0
equ 0
dig2
equ 2
; -------------------------------------------------------------------------------------------------------------------------; Definicin de segmentos
; -------------------------------------------------------------------------------------------------------------------------defseg puertos,start=50h, class=iospace, absolute
defseg stack, start=i_stack
defseg datos, class=data, start=i_rwm
defseg int, start=4006h
defseg progr, class=code, start=6002h
; -------------------------------------------------------------------------------------------------------------------------; Puertos de entrada del sistema
; -------------------------------------------------------------------------------------------------------------------------seg puertos
pctrl_8155
ds 1
pa_8155
ds 1
pb_8155
ds 1
pc_8155
ds 1
timer_bajo
ds 1
timer_alto
ds 1
org 60h
pdatos_8279
ds 1
pctrl_8279
ds 1
; -------------------------------------------------------------------------------------------------------------------------; Los 16 bytes ltimos de RWM soportan el stack.
; -------------------------------------------------------------------------------------------------------------------------seg stack
ds 10H
; -------------------------------------------------------------------------------------------------------------------------t_stack:equ $-1
; Base de la pila
; -------------------------------------------------------------------------------------------------------------------------; Segmento de datos en RWM
; -------------------------------------------------------------------------------------------------------------------------seg datos
dir_dec
ds 4
dir_bin
ds 2
temp
ds 1
; -------------------------------------------------------------------------------------------------------------------------; Vector de interrupcin RST 7.5
; -------------------------------------------------------------------------------------------------------------------------seg int
jmp rst7.5

Dispositivos de E/S Programables

640

; -------------------------------------------------------------------------------------------------------------------------; Segmento de cdigo en EPROM


; -------------------------------------------------------------------------------------------------------------------------seg progr
mvi a,0dh
; Programar 8155.
out pctrl_8155
inicio:
lxi d,0
; Mostrar
mov h,d
; 0000
mov l,e
; en
mvi c,1
; campo
mvi a,0ah
; direcciones
rst 7
; de pantalla.
lxi h,uf
; Presentar
mvi b,1
; unidades de medida
call escrb_cad
; en campo de datos.
ori 1
; Linea P51.0 a nivel alto.
out pa_8155
; descargar capacitor.
in pb_8155
; Detectar escala
ani 8
; examinando estado del terminal P52.3.
push psw
cnz ceros
; Si escala E2, eliminar ceros a la izquierda.
pop psw
mov c,a
; Poner punto decimal, segn escala.
mvi b,dig2
call pto_dec
; punto
mov a,c
; decimal
xri 8
; segn
mov c,a
; la
mvi b,dig0
; escala
call pto_dec
; seleccionada.
mvi a,0ch
; Esperar activacin
rst 7
; de tecla.
xra a
; Poner cero en lnea P51.0.
out pa_8155
; Iniciar carga del capacitor.
in pb_8155
; Detectar escala.
ani 8
sta temp
; Salvar escala.
jz e1
; Saltar si escala es E1.
mvi a,10h
; Programar
out timer_bajo
; timer
mvi a,0e7h
; para
out timer_alto
; escala E2.
jmp medir
; Arrancar timer en escala E2.
e1:
mvi a,64h
; Programar
out timer_bajo
; timer
mvi a,0c0h
; para
out timer_alto
; escala E1.
medir:
mvi a,inic_timer
; Arrancar
out pctrl_8155
; timer
mvi a,0bh
; Desenmascarar RST 7.5
sim
ei
; Habilitar interrupciones.
exam:
in pb_8155
; Probar estado de salida del comparador.
rar
jnc exam
; Si P52.0 est en nivel bajo, esperar.

Dispositivos de E/S Programables

641

mvi a,parar_timer
; Si P52.0 est en uno, parar timer.
out pctrl_8155
mov a,d
; Detectar fuera de rango.
cpi 27h
jc seg1
mov a,e
cpi 10h
jc seg1
; Si medida dentro del rango, continuar.
lxi h,error
; Medida est sobre el rango
mvi b,0
; Generar mensaje de error.
call escrb_cad
lxi h,borrar
; Borrar campo de datos durante error.
mvi b,1
call escrb_cad
; Esperar tecla.
mvi a,12
rst 7
jmp inicio
; A inicio desde error.
seg1:
xchg
shld dir_bin
call bin_bcd
; Convertir valor de la medida a BCD.
mvi c,1
; Presentar valor BCD en campo de direcciones.
mvi a,0ah
lhld dir_dec
rst 7
lda temp
; Recuperar escala.
mov c,a
; Poner punto decimal segn escala.
mvi b,dig2
call pto_dec
mov a,c
xri 8
mov c,a
mvi b,dig0
call pto_dec
lda temp
; Recuperar escala.
ani 8
jz tecla
; Si escala es E1, seguir.
call ceros
; Eliminar ceros si escala es E2.
tecla:
mvi a,0ch
; Esperar por activacin de tecla.
rst 7
jmp inicio
; Iniciar presentando 0000.
; -------------------------------------------------------------------------------------------------------------------------; Rutina de servicio de interrupcin RST 7.5
; -------------------------------------------------------------------------------------------------------------------------rst7.5:
inx d
; Incrementar contador.
ei
: Habilitar interrupciones.
ret
; -------------------------------------------------------------------------------------------------------------------------; rea de mensajes
; -------------------------------------------------------------------------------------------------------------------------uf:
db 3eh,71h
; Unidades de medida (F)
error:
db 0,79h,50h,50h
; Mensaje de error.
borrar:
db 0,0
end
; --------------------------------------------------------------------------------------------------------------------------

Dispositivos de E/S Programables

642

; -------------------------------------------------------------------------------------------------------------------------; Mdulo PTO_DEC.


; -------------------------------------------------------------------------------------------------------------------------; Coloca el punto decimal en dgito indicado por registro B
; Si C=8 pone el punto. Si C=0 no pone punto
; -------------------------------------------------------------------------------------------------------------------------public pto_dec
extern pdatos_8279,pctrl_8279
defseg progr
seg progr
pto_dec:
push b
; Salvar registros y banderas.
push psw
mov a,c
; Si C = 8, activa bit de punto.
cma
; Si C = 0, desactiva bit de punto.
mov c,a
; Guarda estado de bit de punto decimal.
mov a,b
; Carga en el acumulador nmero del dgito.
ori 60h
out pctrl_8279
; Programa lectura de dgito.
in pdatos_8279
; Lee cdigo del dgito.
ori 8
; Si tiene punto, lo quita.
ana c
; Pone punto cuando indique el contenido de C.
out pdatos_8279
; Presenta dgito con/sin punto decimal.
pop psw
; recupera registros y banderas.
pop b
ret
end
; -------------------------------------------------------------------------------------------------------------------------; Mdulo CEROS
; -------------------------------------------------------------------------------------------------------------------------; En la escala E2, oculta los ceros que precedan al dgito con punto decimal (L2)
; -------------------------------------------------------------------------------------------------------------------------public ceros
extern pdatos_8279,pctrl_8279
defseg progr
seg progr
ceros:
mvi b,-1
mvi c,2
; Se examinan dos digitos: L0 y L1.
rep:
inr b
; Seleccin de dgito
mov a,b
: Se programa lectura de cdigo de dgito en B.
ori 60h
out pctrl_8279
in pdatos_8279
; Se lee cdigo 7-segmentos.
cpi 0ch
; Se compara con cero.
rnz
; Si dgito L1 no es cero, retornar.
mvi a,0ffh
; Como es cero
out pdatos_8279
; se apaga LED.
dcr c
; Contador de digitos menos 1.
jnz rep
; Examinar L1.
ret
; Contador en cero, retornar.
end

Dispositivos de E/S Programables

643

Si el capacitor conectado a los terminales de prueba es mayor que 9.999 F,


estando la escala E1 seleccionada; o es mayor a 999.9 F en escala E2, la pantalla
mostrar en el campo de direcciones un mensaje de error y permanecer en espera de
la activacin de una tecla para continuar. El ususario debe conectar un capacitor de
menor valor o cambiar la escala, segn corresponda, y presionar una tecla para reiniciar la medida.
El medidor de capacidad fue ensamblado y probado. Las lecturas del instrumento fueron contrastadas con las medidas realizadas con un capacmetro digital comercial y los resultados fueron excelentes. El equipo mide capacidad con alta precisin.

Bibliografa

644

Bibliografa
Aho, A.
Sethi, R.
Ullman, J.

"Compiladores. Principios, tcnicas y Herramientas". AddisonWesley Iberoamricana. USA. 1990. ISBN 0-201-62903-8.

ngulo, J.

"Microprocesadores. Fundamentos, Diseo y Aplicaciones en la Industria y en los Microcomputadores". Paraninfo S.A. Madrid. 1981.
ISBN 84-283-1148-X.

ngulo, J.

"Microprocesadores Avanzados 386 y 486. Introduccin al Pentium y


Pentium Pro". Paraninfo S.A. Madrid. 1998. ISBN 84-283-2374-X.

Brey, B.

"Los Microprocesadores de INTEL. Arquitectura, Programacin e


Interface. Prentice Hall Hispanoamricana S.A. Naucalpan de Juarez.
Estado de Mexico. 1995. ISBN 968-880-481-9.

Brown, P.

"Writing Interactive Compilers and Interpreters". John Wiley & Sons.


USA. 1979. ISBN 0-471-27609-X.

Coffron, J.

"Microprocessor Programming, Troubleshooting, & Interfacing: The


Z80, 8080, & 8085". Prentice Hall. USA. 1997. ISBN 0135819768.

Dixon, A.
Antonakos, J.

"Digital Electronics with Microprocessor Applications". John Wiley.


USA. 1987.

Gaonkar, R.

Microprocessor Architecture, Programming, & Applications with


the 8085". Prentice Hall. USA. 2001. ISBN 0130195707.

Gil, A.

"Electrnica General. Dispositivos y Sistemas Digitales". McGrawHill. Interamericana de Espaa. Madrid. 1989. ISBN 84-7615-329-5.

Goody, R.

"The Microcomputer Laboratory Manual: Based on the 8085 Microprocessor". Science Research Associate. USA. 1987.

Graham, N.

"Microprocessors Programming". Tab Books. USA. 1980. ISBN 08306-7952-9.

Hennessy, J.
Patterson, D.

"Computer Architecture: A quantitative Approach". Morgan Kaufmann Publishers. USA. 2002. ISBN 1558605967.

Bibliografa

Hennessy, J.
Patterson, D.

Hordeski, M.
Intel.

645

"Organizacin y diseo de Computadores. La Interfaz Hardware y


Software". McGraw-Hill. Interamericana de Espaa. Madrid. 1994.
ISBN 84-481-1829-4.
"Microprocessor Cookbook. Tab Books. USA. 1979. ISBN 0-83069778-0.
The 8080/8085 Microprocessor Book ". John Wiley. USA. 1980.

Intel.

Peripheral Design Handbook ". Intel Corporation. Santa Clara C.A.


1980. AFN 0-1300A-1.

Intel.

MCS-85 Users Manual". Intel Corporation. Santa Clara C.A. 1978.

Intel.

8080/8085 Assembly Language Programming Manual". Intel Corporation. Santa Clara C.A. 1979.

Kleitz, W.

"Microprocessor and Microcontroller Fundamentals: The 8085 and


8051 Hardware and Software. Prentice Hall. USA. 1997. ISBN
0132628252.

Krutz, R.

"Interfacing Techniques in Digital Design with Emphasis on Microprocessors". John Wiley & Sons. USA. 1988. ISBN 0-471-08289-9.

Kuecken, J.

"Handbook of Microprocessors Applications. Tab Books. USA.


1980. ISBN 0-8306-9935-X.

Leventhal, L.
Walsh, C.

"Microcomputer Experimentation with INTEL SDK-85. Prentice


Hall Inc. New Jersey, USA. 1980. ISBN 0-13-580860-X.

Leventhal, L

"Introduction to Microprocessors. Prentice Hall. International Editions. Londres. 1978. ISBN 0-13-487876-O.

Loeliger, R.

"Threaded Interpretive Languages". BYTE Publications Inc. USA.


1981. ISBN 0-07-038360-X.

Peatman, J.

"The Design of Digital Systems". McGraw-Hill. USA.1972. ISBN 07049136-4.

Robin, M.
Maurin, T.

Stallings, W.

"Interconexin de Microprocesadores". Paraninfo S.A. Madrid. 1985.


ISBN 84-283-1224-9.
"Computer Organization and Architecture.Designing for Perfomance". Prentice Hall. USA. 2002. ISBN 0-13-049307-4.

Bibliografa

646

Tanenbaum, A. "Organizacin de Computadoras. Un Enfoque Estructurado". Prentice


Hall Hispanoamericana S.A. Naucalpan de Juarez. Estado de Mexico.
2000. ISBN 0-13095990-1.
Tokheim, R.

"Fundamentos de los Microprocesadores". McGraw-Hill. Interamericana de Espaa. Madrid. 1991. ISBN 84-7615-592-2.

Tracton, K.

"Display Electronics. Tab Books. USA. 1977. ISBN 0-8306-7861-1.

Uffenbeck, J.

"Microcomputers & Microprocessors: The 8080, 8085, & Z-80 Programming, Interfacing, & Troubleshooting". Prentice Hall. USA.
1999. ISBN 0132091984.

También podría gustarte