Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Microprocesadores Luis Urdaneta
Microprocesadores Luis Urdaneta
NCLEO DE ANZOTEGUI
ESCUELA DE INGENIERA Y CIENCIAS APLICADAS
DEPARTAMENTO DE ELECTRICIDAD
REALIZADO POR
LUIS DANIEL URDANETA GUEVARA
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
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
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
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.
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
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
xii
CAPTULO 7
xiii
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
31
33
34
34
35
35
36
39
xviii
xix
xx
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
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
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
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
Introduccin al Computador
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.
Introduccin al Computador
Introduccin al Computador
dosa que usaba una memoria comn para el almacenamiento de los datos y las instrucciones.
Direccin
Operando
1
Direccin
Operando
2
Direccin
Direccin
Resultado Instruccin
siguiente
Campo de Direccin
Introduccin al Computador
10
Introduccin al Computador
11
Instrucciones y datos
Direcciones
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.
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
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
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.
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
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
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
Introduccin al Computador
19
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
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
Introduccin al Computador
23
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.
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.
Introduccin al Computador
25
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
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
Introduccin al Computador
28
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
31
Adquirir
Procesar
Almacenar
Presentar
Resultados
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.
MEMORIA
SALIDAS
UNIDAD
LGICA Y
ARITMTICA
UNIDAD
DE
CONTROL
ENTRADAS
RELOJ
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 Memoria
La Unidad de Entrada/Salida. , y
El Generador de Reloj.
(CU)
34
Registros
Direcciones
ALU
Datos
Unidad
de control
Control
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)
35
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.
EJECU-
Ejecucin culminada
CIN
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-
37
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)
38
39
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
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.
Introduccin al Microprocesador
43
REGISTROS
ALU
UNIDAD DE
CONTROL
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
CPU
PUERTOS
EPROM
RWM
TIMERS
Introduccin al Microprocesador
45
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
R9-R16
270
R1-R8
5.1 K
S0-S7
D0-D7
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)
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)
Operacin de
entrada
Operacin de
salida
Introduccin al Microprocesador
49
D7
DISPOSITIVO
DE
ENTRADA
BUFFER
DE TRES
ESTADOS
REGISTRO
DE
8 BITS
D6
D0
SEL
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
Introduccin al Microprocesador
51
Instruccin
IN
Operando
Puerto 1
Cdigo de
operando
D7
D6
D5
D4
D3
D2
D1
D0
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)
Introduccin al Microprocesador
52
Perifrico 2
Perifrico 1
OUT
IN
(A)
Registro B
Registro A
(A)
(B)
Unidad
Lgica y
Aritmtica
(A+B)
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
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
D7
D6
REGISTRO
DE
8 BITS
D0
DISPOSITIVO
DE
SALIDA
CLK
SEL
Introduccin al Microprocesador
55
VCC
R9-R16
D7-D0
Puerto 02
CON2
D7
D6
D5
D4
D3
D2
D1
D0
CLK
OE
Q7
Q6
Q5
Q4
Q3
Q2
Q1
Q0
Introduccin al Microprocesador
56
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
; 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.
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)
Introduccin al Microprocesador
58
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)
Introduccin al Microprocesador
60
Lneas de
Direcciones
n
Lneas de E/S
de Datos
m
MEMORIA
Lneas de
Control
Introduccin al Microprocesador
61
( )
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
A0-An-1
Direccin vlida
CS
R/ W
D0-D7
Datos vlidos
donde:
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
63
Introduccin al Microprocesador
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.
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.
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
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
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.
69
Introduccin al Microprocesador
reset
TR
reset
T1
T2
instruccin
ADD
IN OUT
MOV
T3
SUB
T4
Introduccin al Microprocesador
70
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:
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
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
Introduccin al Microprocesador
73
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.
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.
(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
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
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
(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
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
79
Introduccin al Microprocesador
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
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
Registro A
Unidad
Lgica y
Aritmtica
Registro B
Registro de banderas
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.
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
(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
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.
84
Introduccin al Microprocesador
Conexin explicita
Unidireccional
Bidireccional
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
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
86
Introduccin al Microprocesador
BUS DE
CONTROL
BUS DE
DIRECCIONES
BUS DE
DATOS
P
Fig. 3.46 Configuracin de terminales y buses del microprocesador.
Introduccin al Microprocesador
87
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
89
Introduccin al Microprocesador
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.
90
Introduccin al Microprocesador
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.
91
Introduccin al Microprocesador
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
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.
Introduccin al Microprocesador
94
Introduccin al Microprocesador
95
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.
97
Introduccin al Microprocesador
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.
Introduccin al Microprocesador
98
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
100
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)
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
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.
104
INTA
INTR
RST 6.5
RST7.5
SID
SOD
Canal Serie
Control de Interrupciones
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
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
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
105
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
106
107
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.
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.
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-
110
Reg.Temp.
Banderas
ALU
AC
CY
111
112
+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
AD0-AD7
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.
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
INTA
TRAP
SID
SOD
113
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
114
Ce
Ci
f =
1
2 L (C e + C i )
10 K
Ci
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.
101
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
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:
102
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
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
103
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.
104
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
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
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.
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.
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).
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
:...
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 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
111
126
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.
128
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.
129
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
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
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
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
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.
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
133
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.
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
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
Puerto A: Entrada
Puerto B: Salida
D0-D7: CDA
Puerto C: Salida
S1 S0 S/H START
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.
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
8085A
SID
1 2.0 V
0 0.8 V
0 = +V
1 = -V
1 2.0 V
0 0.8 V
SOD
El Microcomputador Bsico
139
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
AD1 AD0
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
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
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.
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.
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)
8085A
ALE
LACTH
EPROM
RWM
Puerto
de
Entrada
Puerto
de
Salida
D0-AD7
RD
WR
MRD
MWR
Decodificador
IO/M
IORD
IOWR
El Microcomputador Bsico
146
74LS373
ALE
8085A
AD0-AD7
Q0 - Q7
A0-A7
D0-D7
OC
D0-D7
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
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
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
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
VIL
VIL
Z: Alta Impedancia
El Microcomputador Bsico
150
nivel alto en cualquiera de estas entradas colocan las salidas de los buffers en estado
de alta impedancia.
El Microcomputador Bsico
151
DIRECCIONES
Direccin valida
CS
tCE
OE
tOE
tOF
tACC
SALIDAS
Datos validos
Caractersticas AC
tACC
tCE
tOE
tDF
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
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
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
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
tAH
tCSW
Tiempo de preparacin de CS .
(Chip Select Setup Before End of Write)
Duracin mnima de la entrada de seleccin de chip.
tWP
tDS
tDH
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
Fig. 5.19 RWM 6116 decodificada para las direcciones comprendidas entre 0800H-0FFFH
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 Microcomputador Bsico
157
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,
El Microcomputador Bsico
159
El Microcomputador Bsico
160
PUERTOS
DE E/S
EPROM/RAM
POSICIONES
EPROM/RAM
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.
El Microcomputador Bsico
161
FFFFH
60K-62K
20K-22K
16K-18K
12K-14K
8K-10K
4K-6K
0-2K
0000H
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
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.
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.
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
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
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 Microcomputador Bsico
165
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
El Microcomputador Bsico
166
DIRECCIN
0000H-0FFFH
1000H-17FFH
00H
01H
02H
03H
2732
6116
8255
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
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
8155 N1
256 bytes de RWM
8155 N2
256 bytes de RWM
6264/2764
HASTA 8K DE RWM O
EPROM
6264/2764
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
1C
1G
1Y3
1Y 2
1Y1
74LS156
Vcc
2C
2G
A
1Y0
2 Y3
2Y 2
2Y1
GND
2Y0
El Microcomputador Bsico
169
El Microcomputador Bsico
170
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 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
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.
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.
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
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
.
.
.
7FFFH
.
.
.
0111 1111 1111 1111
8000H
.
87FFH
.
8FFFH
.
1000 0111 1111 1111
.
1000 1111 1111 1111
9000H
.
97FFH
.
9FFFH
.
1001 0111 1111 1111
.
1001 1111 1111 1111
A000H
.
A7FFH
.
AFFFH
.
1010 0111 1111 1111.
.
1010 1111 1111 1111
B000H
.
B7FFH
.
BFFFH
.
1011 0111 1111 1111
1011 1111 1111 1111
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
Fig. 5.39 Mapa de memoria para el sistema ejemplo de decodificador con PLD
El Microcomputador Bsico
180
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
El Microcomputador Bsico
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
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 );
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
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
Row
Terms
CS0'
CS1'
17
18
CS2'
25
26
27
28
CS3'
33
34
35
CS4'
41
SIGNAL ASSIGNMENT
Pin
1.
2.
3.
4.
5.
6.
7.
8.
9.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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%)
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
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
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
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
IO2
El Microcomputador Bsico
188
El Microcomputador Bsico
189
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.
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
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
tRD
El Microcomputador Bsico
191
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
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
de la lgica de generacin de OE y WR .
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
ns
ns
tAD memoria = [
tRD memoria = [
ns
ns
El Microcomputador Bsico
193
El Microcomputador Bsico
194
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.
El Microcomputador Bsico
197
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.
El Microcomputador Bsico
200
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:
El Microcomputador Bsico
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.
El Microcomputador Bsico
205
206
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
8085A
D0-D7
A0-A15
208
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
Instruccin de
dos bytes
209
(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
210
211
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
212
(A)
(byte 2)
0100 1011
(A)
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
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
213
(B-C)
12
FF
(B-C) + 1
13
00
(CY) = 1
(H) = 20
(L) = 50
[2050] = 23
(H) = 20
(L) = 50
[2050] = 23
(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
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.
Transferencia de datos.
Operaciones lgicas.
Bifurcaciones.
Instrucciones de manejo de pila (stack), E/S, y control de la mquina.
Operaciones Aritmticas.
215
(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)
(r)[(H) (L)]
216
MVI r ,dato
(r)(byte 2)
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)]
217
STAX rp
[(rp)](A)
SHLD direccin
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
218
(A)(dato)
(dato)(A)
219
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
ANI dato
CMP
ORA r
(A) (A) ( r)
CMP M
(A) - [(H)(L)]
ORA M
(A) ( A) [(H)(L)]
CPI dato
(A) - (dato)
ORI 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)
220
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
ANA M
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
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
221
ORA M
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
222
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
;Actualiza indicador
XRA r
223
(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
3000h
c,a
0ah
b,a
c
difer
224
lda
ori
sta
jmp
difer: mov
sta
fin: hlt
3200h
20h
3200h
fin
a,b
3000h
; Son iguales
; Bit 5 a uno
(A)( A )
(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
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)
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
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:
.
; Es menor a 50h
.
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
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
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
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
228
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
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
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.
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
230
cmp
jnc
jmp
b
adc1
ctrl
; Reiniciar proceso.
Fig. 6.14 Decodificador de puertos con PLD para la seccin de adquisicin de datos e indicacin de
alarma.
231
in STD_LOGIC;
out STD_LOGIC
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
CY
A7
A6
A5
A4
A3
A2
A1
A0
232
RLC
CY
A7
A6
A5
A3
A4
A2
A1
A0
RAR
CY
A7
A6
A5
A3
A4
A2
A1
A0
RAL
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
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.
lhld
mov
rlc
rlc
rlc
rlc
ani
mov
mov
ani
ora
sta
hlt
e400h
a,l
f0h
b,a
a,h
0fh
b
e500h
234
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
1, active
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
orden
40h
; Permiso negado
; Obtener patrn de encendido
l1357
a,0aah
20h
orden
a,55h
20h
orden
; P40.7 = 0 >>
; P40.7 = 1 >>
235
PUSH
POP
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
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
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]
POP rp
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
237
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
63
85
41
24
2FFCH
2FFDH
2FFEH
SP
2FFFH
3000
3000H
238
PUSH B
PILA
X
X
63
85
41
24
X
X
2FFDH
85
2FFEH
SP
63
2FFFH
2FFE
3000H
PUSH D
PILA
X
X
24
2FFCH
63
85
41
2FFDH
85
2FFEH
41
24
63
2FFFH
3000H
SP
2FFC
239
POP B
PILA
X
X
41
24
41
24
24
2FFCH
41
2FFDH
85
2FFEH
SP
63
2FFFH
2FFE
3000H
POP B
PILA
X
X
41
24
63
85
24
2FFCH
41
2FFDH
85
2FFEH
SP
63
2FFFH
3000
3000H
240
sp,3000h
2020h
psw
2021h
2020h
psw
2021h
241
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)
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:
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
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.
; 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
Cx direccin
Si se satisface la condicin, se realiza la llamada a subrutina. En caso contrario se ejecuta la siguiente instruccin.
243
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
Programa principal
1001H
----
1002H
----
1003H
----
1004H
CALL 2000H
1007H
----
Subrutina
1ra instruccin
----
--------RET
2000H
244
PC
SP
1004H
3000H
3000H
Pila
PC
SP
2000H
2FFEH
07
10
X
3000H
Pila
PC
SP
07
10
1007H
3000H
X
X
Pila
Fig. 6.27 Contenido de la pila durante el llamado a subrutina
3000H
245
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.
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
SP
2FFEH
03
2FFEH
10
2FFFH
3000H
SP
2FFEH
Pila
03
2FFEH
10
2FFFH
3000H
Pila
13
12
PC
1300H
SP
2FFCH
2FFCH
2FFDH
03
2FFEH
10
2FFFH
3000H
PC
1213H
SP
2FFEH
Pila
13
2FFCH
12
2FFDH
03
2FFEH
10
2FFFH
3000H
Pila
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
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:
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
;----------------------------------------------------------------------------------;
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
RST n
n: 0,1,2,7
249
loque en el bus una instruccin RST n con la direccin de la rutina de servicio de interrupcin.
(PCL) (L); (PCH) (H)
PCHL
Instrucciones aritmticas
INR r
ADC M
(A)(A)+ [(H)(L)]+(CY)
INR M
ACI dato
DCR r
DAA
DCR M
SUB r
(A)(A) - ( r)
INX rP
SUB M
DCX rP
SUI dato
ADD r
(A)(A) + ( r)
SBB r
ADD M
SBB M
ADI dato
SBI dato
ADC r
DAD rP
250
(a)
(b)
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
INR r
INR M
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
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
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
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.
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
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
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
255
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)
ADD M
ADI dato
ADC r
ADC M
ACI dato
El bit de acarreo y el dato se suman al acumulador.
256
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
257
;----------------------------------------------------------------------------------;
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.
258
POP
POP
MOV
ADD
MOV
INX
MOV
ADC
MOV
HLT
H
B
A,M
C
M,A
H
A,M
B
M,A
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
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
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
CY
260
= 0FH
0000
+ 0000
0001
1111 AAH
0110 06H
0101 1510
1
AC
La bandera de acarreo es uno, por lo cual se suma 6 al nibble ms significativo del registro
acumulador.
261
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
262
;----------------------------------------------------------------------------------;
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
263
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
El programa coloca en uno la bandera de cero cuando la ROM est en buen estado.
264
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)
1
CY
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
SUI dato
265
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
SBI dato
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
266
;----------------------------------------------------------------------------------;
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
7810
+ 8310
16110
sustraendo
complemento nueve
complemento diez
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
1101 6DH
0110 06H
0011 7310
1
AC
PASO 3
1101 FDH
0110 06H
0011 1310
1
AC
0000
+ 0110
0110
0011 FDH
0000 60H
0011 6310
1
AC
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
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
mult:
mvi
mov
mov
dad
dcr
jnz
hlt
l,0
h,l
d,h
d
c
mult
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
270
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
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.
272
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
273
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
274
La ltima instruccin aritmtica del 8085A, aun no comentada, realiza la suma de nmeros de 16 bits. Esta es DAD rp.
DAD rP
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
H
0
CY
Estado inicial
0
276
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=
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.
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
279
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
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.
280
281
1 N
+ x n
2 xn
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
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
283
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
159 3 10 4
10 2
= 275
284
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
Instrucciones adicionales
HLT
Parada
EI
Habilitar interrupcin
SIM
DI
Inhibir interrupcin
RIM
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
285
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.
MVI
DCR
JNZ
B,N
B
LAZO
4
7/10
(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
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-
286
TD 11 Treloj
14 Treloj
+1
(7.2)
TD Tpaso
Tfinal
+1
retad:
dcr b
jnz retad
ret
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
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
288
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
estados
10
4
7
4
7/10
10
10
7
4
10
289
dcx
mov
ora
jnz
ret
b
a,b
c
retad
estados
6
4
4
7/10
10
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
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
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
TD 11.2
= 65102.7
7.68
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
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
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
dcr d
jnz ret2_1
ret
Los semiciclos del tono generado tienen una duracin ligeramente distinta:
Semciclo1 = ((B 1) 22 + 61) * 0.32s
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.
294
295
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
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.
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.
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.
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
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
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
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
x n +1 =
1 N
+ xn
2 xn
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.
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.
304
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.
DESCRIPCIN
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 (:)
305
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.
306
307
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.
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.
309
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.
310
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
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
(a)
(b)
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
noesr:
led:
in 20h
cpi 52h
jnz noesr
stc
mvi a, 80h
jmp led
stc
cmc
mvi a, 08
out 20h
hlt
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.
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
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
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
315
d,0;
h, tabla
d
d
e,m
h
d,m
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.
317
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
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.
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
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
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
salir:
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
320
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.
321
322
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.
323
324
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...
326
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
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
Fig.7.17 Ejemplos de lneas fuente vlidas. La primera lnea solo tiene campo de comentario.
327
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.
23C5H
0DFH
0FFFCH
328
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
0DH
DATO
DCX
MOV
ORA
JNZ
B
A,B
C
LAZO2
329
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
JMP
$-5
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-
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.
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
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
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.
333
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}
ASCII (hex)
30
31
32
33
34
35
36
37
38
39
41
42
43
44
45
46
334
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.
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
LXI H,1000H
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
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
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
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
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
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
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
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
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.
340
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
341
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
END
0500H
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
LXI H, DIRDAT
342
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
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
343
LAZO:
EQU
EQU
EQU
EQU
-1
0
SI
2000H
LHLD MEM
LXI B,0
DCX H
IF PRUEBA
INX B
ENDIF
JNZ LAZO
END
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
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
La directiva DB (Definicin de byte) carga una serie de posiciones consecutivas de memoria con valores de ocho bits. Se escribe como:
etiqueta
DB
345
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
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
DW
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
Cdigo objeto
6420
DIR:
DW
POS1
TEMP:
DW
0DH
0D00
ABCD:
DW
AB,C
42414300
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
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
DS
20
347
MENOR:
LAZO2:
MAYOR:
ORG
EQU
0200H
010H
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
ORG 0300H
MIN:
MAX:
TABLA:
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
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
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.
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
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
351
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
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
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
353
SEG
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
.
.
.
354
SEG CODE
lxi sp,stack
xra a
.
.
.
etiqueta
Especifica que el operando etiqueta tiene un alcance externo. Puede especificarse varias etiquetas separadas por comas.
EXTERN
etiqueta
355
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
(A) 'M'
(L)residuo
356
salto:
equ 07ffh
lxi sp,stack
cpi 'M'
jnz salto
call mul
hlt
call div
hlt
(HL) (C)*(E)
mul
(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.
357
Ejemplo 7.9
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.
358
Fig. 7.28 Salidas de la simulacin con ORCAD/PSPICE para el circuito de la figura 7.26.
359
360
equ 8
defseg progr
seg progr
entsal:
prox:
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
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
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
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
363
=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
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
364
CLASS 'I'
START
0008
STOP
0009
STOP
007b
008b
0821
08ff
CLASS 'M'
START
0000
007c
0800
08f0
START
0000
0000
0000
START
0008
0009
START
000c
0032
0058
007c
0800
0810
0820
START
0008
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
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
366
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.
368
Fig7.32 Editor de memoria del SID85 mostrando como se almacena en la RAM el cdigo objeto del
ejemplo 7.6.
1
369
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.
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.
371
372
Micro 3
AVSIM85 (DOS)
Micro85
8085 Simulator
MPS85-KIT
SID85 (DOS)
Sim8085
Simulator
Vsim
Win85
8085-Simulator [SW]
WSIM85
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
373
PPI8255
Interrupciones
Los vectores de interrupcin han sido cambiados segn se indica:
TRAP
RST7.5
RST6.5
0024H FFB0H
003CHFFB3H
0034H FFB6H
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
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
376
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
378
379
380
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.
381
382
383
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.
384
385
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:
387
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-
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
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.56 Despus de simular en programa contienen el mnimo y el mximo de la tabla de valores
que se inicia en 0082H.
390
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
391
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.
392
Este algoritmo calcula el valor BCD de un nmero, como se hace con lpiz y
papel.
393
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
;------------------------------------------------------------------------------- -----------------------------------------
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.
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
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
397
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:
398
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.
399
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.
400
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.
401
4.
Completado el procedimiento, el proyecto est listo para compilacin y enlazado como ilustra la figura 7.69.
402
403
404
Fig.7.74. Marque simul.hex como archivo de salida. Se pone por defecto nombre_proyecto.hex
405
406
1.
407
408
En este caso la velocidad de transmisin del canal serie del MPR85 debe ajustarse a 9600 baudios.
2.
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.
409
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
}
ENDM
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
;-----------------------------------------------------------------------
Estas directivas no se discuten. El interesado puede recurrir al manual del isis-ii 8080/8085
411
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
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
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
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.
414
415
C = 5/9 x (F 32)
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
416
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
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
417
418
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
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
;----------------------------------------------------------------------------------------------------------------
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
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)
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 )
cos()
II
=180 -
III
= - 180
IV
=360 -
422
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
423
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.
424
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
y=
61 60
( x 60 D ) + sen (60 D )
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-
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.
426
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
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
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.
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)
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.
431
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.
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.
433
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.
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-.
436
Fig.8.8. Flujograma para identificar el interruptor activado y presentar su nmero, una vez liberado.
437
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
;------------------------------------------------------------------------------------------------------
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
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
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.
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.
tope_pila
extern ret_10ms,bin_7seg
equ 0300h
pa:
pb:
pctrl:
seg p8255
ds 1
ds 2
ds 1
440
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
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
443
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.
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.
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.
446
Habilitar interrupcin
SIM
DI
Inhibir interrupcin
RIM
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
448
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
D6
1
D5
N
D4
N
D3
N
D2
1
D1
1
D0
1
0000H
RST4
0020H
RST1
0008H
RST5
0028H
RST2
0010H
RST6
0030H
RST3
0018H
RST7
0038H
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.
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
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-
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.
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.
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.
454
455
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.
456
2.2k
S1
220
RST7.5
74LS14
10F
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
;---------------------------------------------------------------------------------------------------------------
Fig.8.24.La instruccin RIM permite atender a perifricos cuando el sistema de interrupciones est deshabilitado.
458
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.
ocup:
mvi a,0
sta cont
mvi b,00h
call upddt
jmp ocup
460
461
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.
2. Pulsando la tecla <RST7.5> del teclado del microcomputador se genera una interrupcin
que permite ajustar la hora como se indica.
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.
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
RDKBD
0634H
06BCH
06D3H
UPDAD
UPDDT
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.
464
465
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
;***************************************************************************
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
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
469
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
10
12
1/60
segundos
minutos
horas
471
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
472
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
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
;*************************************************************************
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.
476
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
INTA
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
477
INTA :
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.
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.
INTA
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
480
481
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
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:
483
PM:
AEOI:
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:
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.
484
485
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.
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:
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:
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:
SMM:
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-
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
488
489
Ejemplo:
OCW2 = 6xH = 0 1 1 0 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
.
.
.
490
491
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
492
493
494
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.
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.
496
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.
8255
498
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
PA0-PA7
PB0-PB7
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
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
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.
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
E/S normal.
E/S con protocolo de enlace.
Transferencia bidireccional.
500
Modo 0
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.
equ
0bh
mvi a,10010001b
out pctrl_8255
501
502
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
503
(a)
(b)
504
505
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
506
Fig. 9.9 Rutina tecla para detectar activacin, eliminar rebote e identificar pulsador.
507
508
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
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
510
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
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.
512
513
1
Tx N
f mux =
1000
= 250 Hz
0.5 8
I pico
N I
pico =
T
N
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
RP =
5V VCEsatQ1 VF VCEsatQ 2
I pico
515
516
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.
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.
VREF
2
A base10 =
5
A base10
256
519
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
521
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.
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.
prob:
ora c
out pb_8255
in pc_8255
ani 1
jz alto
523
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
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.
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.
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 .
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.
Nota:
La tarjeta de impresora debe tener resistores conectados a +5V en todas las entradas.
Fig. 9.20 Puerto de impresora
527
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.
;----------------------------------------------------------------------------------------------------------------
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
;----------------------------------------------------------------------------------------------------------------
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
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.
531
Strobe Input
IBF
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
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 .
533
Modo 1: 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
534
OBF
ACK
Acknowledge Input
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.
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
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 .
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
OBF
Output Buffer Full
537
ACK
Acknowledge Input
IBF
Input Buffer Full
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.
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.
539
540
1 temporizador/contador binario
programable de 14 bits.
by-
te bajo de direcciones.
Registro de comando/estado
Fig.9.31. Secciones del 8155/56
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 .
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
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.
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-
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
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.
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-
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.
Ejemplo 9.9
Se debe controlar la presentacin de informacin alfanumrica en una pantalla
de cristal lquido.
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.
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
547
VDD:
VSS:
VEE:
RS:
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:
548
R/ W
0
OPERACIN
549
550
I/D:
S:
D:
1 = Pantalla activada.
0=
apagada.
C:
B:
S/C:
R/L:
izquierda.
BF:
DL:
1 = Bus de 8 bits.
0 = Bus de 4 bits.
N:
F:
1 = Caracteres de 5 x 10 puntos.
0=
5 x 7 puntos.
551
552
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.
553
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.
$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
db 'T1=',0
db 0dfH,'C ',0
db 'T2=',0
db '(',7eh,')',0
end
;---------------------------------------------------------------------------------------------------------------------
555
556
557
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
;----------------------------------------------------------------------------------------------------------------------
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
;-------------------------------------------------------------------------------------------------------
558
559
560
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
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.
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.
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
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.
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,
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
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
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
3.072 10 6
= 640
4800
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
565
.
.
.
.
.
.
ret
;--------------------------------------------------------------------------------------------------------------------------; Tabla de valores de longitud de la cuenta
;--------------------------------------------------------------------------------------------------------------------------tbl_long:
dw 10240,5120,2560,1280,640,320,320,320
end
;---------------------------------------------------------------------------------------------------------------------------
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.
567
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:
569
I FS = I OUT + I OUT
570
I FS =
2 n 1
2n
Vref 2 n 1
n
R ref
2
Vref A base10
R ref
2n
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.
571
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:
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
;---------------------------------------------------------------------------------------------------------------------------
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
dcr c
jnz dct
jmp inicio
trian:
proxs:
proxb:
tri_baj:
574
; 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:
575
576
577
578
579
580
581
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]
582
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.
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.
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.
D7
D6
CNTL
0
SHIFT
0
584
D5
D4
FILA
1
D3
D2
D1
D0
COLUMNA
0
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.
Error
escritura.
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
586
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.
D6
D5
D4
D3
D2
D1
D0
D6
D5
D4
D3
D2
D1
D0
AI
Auto incremento de
la direccin.
Direccin de la
FIFO/RAM.
587
D6
D5
D4
D3
D2
D1
D0
AI
Auto incremento de
la direccin.
Direccin de la
RAM de pantalla.
D6
D5
D4
D3
D2
D1
D0
AI
Auto incremento de
la direccin.
Direccin de la
RAM de pantalla.
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.
D6
D5
D4
D3
D2
D1
D0
IWA
IWB
BLA
BLB
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
D6
D5
D4
D3
D2
D1
D0
589
590
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.
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.
592
593
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
594
Descripcin
LEER_TCLD
MSTR_DR
MSTR:_DT
CAMP_DIR
CAMP_DAT
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.
595
E
0EH
_
F
0FH
espacio
Cdigo
10H
11H
12H
13H
14H
15H
16H
17H
18H
19H
1AH
1BH
1CH
1DH
1EH
1FH
Fig.9.74 Numeracin de los LEDs y correspondencia entre las salidas del 8279 y los segmentos del
display.
596
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 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.
597
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 <>
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.
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.
599
600
601
602
;+---+---+---+---+----+
;| 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 |
|
;+---+---+---+---+----+
603
;*************************************************************************************
; 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
;*************************************************************************************
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
;*************************************************************************************
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
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
;*************************************************************************************
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
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
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
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
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
;
;
;
;
;
;
;
;
;
;
; Presentar dato
; Esperar prximo dgito de datos
; Guardar valor hex en direcc
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
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:
; (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
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
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********************************************************
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.
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-
616
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.
Fig. 9.83 La pantalla del Pro 85 muestra el mensaje de identificacin al inicio de la simulacin..
618
Fig. 9.84 La pantalla del Pro 85 muestra el contenido del registro acumulador.
619
Fig. 9.85 Mensaje de identificacin del Pro 85 en la ventana del 8085 Virtual Kit..
620
Fig. 9.86 El Pro 85 muestra el contenido del registro acumulador en la ventana del 8085 Virtual Kit..
621
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.
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.
623
624
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.
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
Un circuito apropiado para procesar la tensin del sensor y obtener los niveles
de voltaje especificados, se muestra en la figura 9.92.
626
Ie =
VP Ve
R1
La corriente Is en R 2 es :
Is =
Vs VP
R2
R
Vs = 2 + 1 VP 2 Ve
R
R1
1
Vs = ( A v + 1) VP A v Ve
627
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.
628
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.
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
630
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
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
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
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
ei
ret
;----------------------------------------------------------------------------------------------------------------------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
635
cpi 0ch
rnz
mvi a,0ffh
out pdatos_8279
ret
end
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
636
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
637
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:
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
640
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
; --------------------------------------------------------------------------------------------------------------------------
642
643
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.
Brey, B.
Brown, P.
Coffron, J.
Dixon, A.
Antonakos, J.
Gaonkar, R.
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.
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
Intel.
Intel.
Intel.
8080/8085 Assembly Language Programming Manual". Intel Corporation. Santa Clara C.A. 1979.
Kleitz, W.
Krutz, R.
"Interfacing Techniques in Digital Design with Emphasis on Microprocessors". John Wiley & Sons. USA. 1988. ISBN 0-471-08289-9.
Kuecken, J.
Leventhal, L.
Walsh, C.
Leventhal, L
"Introduction to Microprocessors. Prentice Hall. International Editions. Londres. 1978. ISBN 0-13-487876-O.
Loeliger, R.
Peatman, J.
Robin, M.
Maurin, T.
Stallings, W.
Bibliografa
646
"Fundamentos de los Microprocesadores". McGraw-Hill. Interamericana de Espaa. Madrid. 1991. ISBN 84-7615-592-2.
Tracton, K.
Uffenbeck, J.
"Microcomputers & Microprocessors: The 8080, 8085, & Z-80 Programming, Interfacing, & Troubleshooting". Prentice Hall. USA.
1999. ISBN 0132091984.