P. 1
Microprocesadores-Luis Urdaneta

Microprocesadores-Luis Urdaneta

|Views: 6.635|Likes:
Publicado porLuis D. Urdaneta G.
Análisis, Diseño y Simulación de Aplicaciones Basadas en Microprocesadores
Análisis, Diseño y Simulación de Aplicaciones Basadas en Microprocesadores

More info:

Published by: Luis D. Urdaneta G. on Jan 07, 2011
Copyright:Attribution Non-commercial

Availability:

Read on Scribd mobile: iPhone, iPad and Android.
download as PDF, TXT or read online from Scribd
See more
See less

10/05/2015

pdf

text

original

Sections

  • El conjunto extendido de instrucciones
  • La memoria del sistema
  • El generador de direcciones
  • El microprocesador como máquina de estados
  • La unidad de control
  • Comunicación con periféricos lentos
  • Conjunto extendido de instrucciones
  • Instrucciones no soportadas
  • Diagrama final del microprocesador sintetizado
  • Las señales de entrada y salida al microprocesador
  • 3.2.2 EL SISTEMA MICROCOMPUTADOR
  • Las direcciones de memoria
  • Las direcciones de los puertos
  • 3.3 ARQUITECTURA DE UN μP DE 8 BITS MÁS VERSÁTIL
  • 3.4 ARQUITECTURA DE UN µCOMPUTADOR ESTÁNDAR
  • 4.1 GENERALIDADES
  • 4.2 ESTRUCTURA FUNCIONAL DEL 8085A
  • 4.2.1 La unidad de control
  • 4.2.2 Los registros internos
  • 4.2.3 La unidad aritmética y lógica
  • 4.2.4 El bus interno de datos
  • RD
  • 4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A
  • 4.3.1 El ciclo de instrucción
  • 4.3.2 Secuencia de transición de estados
  • 4.3.3 El estado de espera
  • 4.3.4 El modo de operación paso a paso
  • 4.3.5 Ciclos de lectura y escritura en memoria y puertos de E/S
  • 4.4 LA SECUENCIA DE INICIO DEL 8085
  • 5.1 SISTEMA MCS-85 MÍNIMO
  • 5.2.1 La memoria de programa
  • 5.2.2 La memoria de datos
  • 5.2.3 Los puertos de entrada y salida
  • 5.3 DECODIFICACIÓN EXHAUSTIVA DE LAS DIRECCIONES
  • 5.4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA
  • 5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES
  • 5.6.1 Carga máxima del bus del 8085A
  • 5.6.2 Selección de la memoria del sistema
  • 5.7 MEMORIAS EEPROM Y FLASH
  • 5.8 BANCOS DE MEMORIA
  • 6.1 EL MODELO PARA PROGRAMACIÓN
  • 6.2 FORMATO DE LAS INSTRUCCIONES
  • 6.3 MODOS DE DIRECCIONAMIENTO
  • 6.3.1 Direccionamiento directo
  • 6.3.2 Direccionamiento Inmediato 6.3.2 Direccionamiento Inmediato
  • 6.3.3 Direccionamiento por registro
  • 6.3.4 Direccionamiento indirecto por registro
  • 6.4 EL CONJUNTO DE INSTRUCCIONES DEL 8085
  • 6.4.1 Grupo de instrucciones para transferencia de datos
  • 6.4.2 Grupo de instrucciones que ejecutan operaciones lógicas
  • 6.4.3 Instrucciones para manejo de la pila
  • 6.4.4 Grupo de instrucciones para bifurcaciones
  • 6.4.5 Grupo de instrucciones aritméticas
  • Tabla. 6.7 Grupo de instrucciones aritméticas
  • 6.5 ARITMÉTICA DE PUNTO FIJO O DE PUNTO FLOTANTE
  • 6.6 INSTRUCCIONES ADICIONALES
  • 6.7 RUTINAS DE RETARDO
  • 6.7.1 El lazo de retardo básico
  • 6.7.2 Retardos de mayor duración
  • 7.1 EL LENGUAJE DE PROGRAMACIÓN
  • 7.1.1 Traducción de programas
  • 7.1.2 Lenguaje ensamblador o de alto nivel
  • 7.1.3 El formato HEX-INTEL
  • 7.2 ESTRUCTURA DEL PROGRAMA
  • 7.2.1 Programación modular
  • 7.2.2 Diseño hacia abajo
  • 7.2.3 Código estructurado
  • Estructura secuencial
  • Estructura IF-THEN/ELSE
  • Estructura CASE
  • Estructura DO-WHILE
  • Estructura REPEAT-UNTIL
  • 7.3 EL LENGUAJE ENSAMBLADOR
  • 7.3.1 El proceso de ensamblaje
  • 7.3.2 Proceso de ensamblaje de un programa modular
  • 7.3.3 Lenguaje ensamblador para el 8085
  • Formato de línea
  • Conjunto de caracteres
  • Delimitadores
  • Especificación de operandos
  • Símbolos reservados
  • Definición de símbolos
  • Evaluación de expresiones
  • Traducción de un archivo fuente
  • Directivas generales del ensamblador
  • 7.4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS
  • 7.4.1 Programas para simulación del microprocesador 8085
  • 7.4.2 Sistema integrado para desarrollo de programas
  • 7.5 MACROS
  • 7.6 TABLAS DE CONSULTA (LOOKUP TABLES)
  • 8.1 ENTRADA Y SALIDA POR PROGRAMA
  • 8.2 ENTRADA Y SALIDA USANDO INTERRUPCIONES
  • 8.2.1 El sistema de interrupciones del 8085A
  • Interrupciones disparadas por la entrada INTR
  • Interrupciones disparadas por las entradas RST
  • 8.2.2 El controlador de interrupciones 8259A
  • Interconexión con el sistema 8085A
  • Programación del 8259A
  • 8.3 ACCESO DIRECTO A MEMORIA
  • 9.1 CIRCUITO PARA INTERCONEXIÓN DE PERIFÉRICOS 8255
  • 9.1.2 Modos de operación del 8255A
  • Modo 0
  • Modo 1
  • Modo 2
  • 9.1.3 Programación del 8255A
  • 9.1.4 Aplicaciones del 8255
  • Operación en el modo 0
  • Operación en el modo 1
  • Operación en el modo 2
  • 9.2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER
  • 9.2.1 Sección de entrada y salida del 8155
  • Registro de comando
  • Registro de estado
  • 9.2.2 Sección del temporizador-contador del 8155
  • 9.3 CONTROLADOR DE TECLADO Y PANTALLA 8279
  • 9.3.1 Funcionamiento del 8279
  • 9.3.2 Programación del 8279
  • Bibliografía

UNIVERSIDAD DE ORIENTE

NÚCLEO DE ANZOÁTEGUI
ESCUELA DE INGENIERÍA Y CIENCIAS APLICADAS
DEPARTAMENTO DE ELECTRICIDAD

Análisis, Diseño y Simulación de Sistemas Basados en Microprocesador

REALIZADO POR LUIS DANIEL URDANETA GUEVARA

TRABAJO PRESENTADO COMO REQUISITO PARCIAL PARA ASCENDER A LA CATEGORÍA DE PROFESOR AGREGADO Puerto la Cruz, noviembre del 2005

ii

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

Quienes supieron soportar con paciencia y consideración las numerosas y largas sesiones de trabajo necesarias para la culminación 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 Investigación de la Universidad de Oriente, y el segundo servir como texto guía en la asignatura Sistemas de Microprocesadores I (60-4953), la cual tiene carácter obligatorio para estudiantes cursantes de la carrera de Ingeniería Eléctrica en el Departamento de Electricidad de la Universidad de Oriente. El contenido de las asignaturas Introducción a los Circuitos Digitales y Laboratorio de Circuitos Digitales ponen en contacto al estudiante con circuitos integrados (CI) fabricados utilizando tecnologías de Integración a Escala Pequeña, o SSI (2 hasta 50 transistores en un CI) e Integración a Escala media, o MSI (50 hasta 500 funciones transistorizadas en un CI). Lo cual abarca el uso de puertas básicas y flip flops, así como contadores, comparadores y registros de desplazamiento, entre otras funciones lógicas. En estos cursos se enseñan los principios y técnicas de análisis y diseño de sistemas digitales que capacitan al estudiante para diseñar y construir circuitos electrónicos digitales combinatorios y/o secuenciales que realizan funciones de control e instrumentación en equipos y sistemas industriales, mediante el cableado de componentes electrónicos discretos y CIs de propósito específico fabricados con tecnología TTL y CMOS. A partir de estos módulos fundamentales se organizan sistemas digitales capaces de usar información proveniente del mundo real representada en forma de valores discretos para resolver problemas de ingeniería de mediana complejidad. El diseño de un sistema digital mediante el método de cableado de componentes electrónicos presenta como desventaja fundamental que cualquier variación en las especificaciones originales de diseño que representen una mejora en el funcionamiento del circuito requiere la introducción de nuevos componentes y la realización de nuevas interconexiones. El material vertido en este libro capacita al estudiante para diseñar y construir sistemas digitales más eficientes y versátiles y, en cierto modo, inteligentes, que pueden usarse en aplicaciones distintas sin necesidad de introducir modificaciones en la estructura física del circuito. Tales sistemas aceptan información proveniente de las entradas y la procesan según lo establece una secuencia de instrucciones o programa almacenado en memoria, de modo que una variación del programa determinará la función que realice el sistema digital. Esta evolución en el diseño lógico se debe a los avances en la tecnología de fabricación de CI como: Integración a Escala Grande, LSI (500 hasta 50000 transistores) e Integración a Escala Muy Grande, VLSI (más de 50000 funciones transistorizadas en un CI).

iv

JUSTIFICACIÓN
Aunado al espectacular desarrollo de la tecnología de fabricación de circuitos integrados, se ha establecido un incremento sostenido de las posibilidades de aplicación de los productos de la microelectrónica. Del desarrollo de sistemas dedicados a satisfacer necesidades especificas del sector militar e industrial, la microelectrónica ha emergido como una tecnología 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, economía, industria, política y administración, en el desarrollo del arte y medios de entretenimiento, en las técnicas de asistencia médica, en la enseñanza, y en la educación. La microelectrónica es, en esencia, la tecnología disponible más eficiente para procesar información, permitiendo el desarrollo y la producción de sistemas de tratamiento electrónico de datos que son capaces de: representarlos, procesarlos, almacenarlos y transmitirlos por medio de señales eléctricas. Como técnica de vanguardia para el tratamiento de la información, la microelectrónica 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 profusión en el tratamiento de datos, procesamiento de señal, supervisión y control de procesos, e instrumentación. La disponibilidad de una CPU integrada y con arquitectura poco compleja hizo posible la producción en serie de un nuevo y versátil sistema de cómputo de bajo costo denominado microcomputador (μC). Además, el µP es un componente de presencia casi obligatoria en el diseño de sistemas empotrados. Un sistema empotrado es una aplicación basada en µP diseñada con un propósito específico y cuyo hardware y programa de control no es modificado por el usuario. Desde hace algunos años, los sistemas empotrados han adquirido cada vez mayor importancia debido a su amplia utilización 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, teléfonos celulares y automóviles, entre muchos otros. Este desarrollo, ha sido sostenido por los continuos avances de la tecnología de semiconductores concretados con la producción de chips cada vez más pequeños y rápidos. El uso extendido del microprocesador en sistemas electrónicos inteligentes ha introducido cambios notables en las técnicas de diseño convencional debido a que es fundamental que el ingeniero en funciones posea los conocimientos que lo habilite para resolver problemas complejos usando esta tecnología. Debe ser capaz de diseñar

v

circuitos en bloques y conectarlos como una unidad funcional o sistema, teniendo la capacidad de establecer la arquitectura del microcomputador, interconectando correctamente la unidad de procesamiento central (CPU) con los dispositivos externos a éste, y generar el programa de aplicación que controla el equipo diseñado. El advenimiento de la era del μP ha forzado además cambios substanciales en el arquetipo educativo de la Ingeniería Eléctrica. La extraordinaria importancia que el μP ha alcanzado en el desarrollo de sistemas y equipos, establece la necesidad que el Ingeniero Electricista adquiera un conocimiento sólido sobre los conceptos teóricos relacionados con la arquitectura y programación de microprocesadores, de modo que lo habilite para poder analizar y desarrollar aplicaciones reales de sistemas electrónicos basados en microprocesadores.

ALCANCE
Como ingenieros, tenemos plena conciencia de las posibilidades universales de aplicación de los μPs. Como docentes, nos preocupa determinar como enseñar en forma clara, comprensible, sencilla y eficiente, la teoría y práctica de los sistemas basados en μPs. En general, las aplicaciones de los microprocesadores pueden agruparse en dos categorías 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, periféricos tales como teclado, monitor, y otros equipos externos, los cuales en su conjunto integran un microcomputador de propósito general. Estos sistemas son usualmente diseñados y ofrecidos al público 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 típicos de estos equipos comúnmente se limitan a desarrollar programas de aplicación en lenguajes de alto nivel, y rara vez realizan diseño de hardware. b.- La segunda corresponde a los sistemas empotrados donde uno o más μPs asociados con otros dispositivos LSI o VLSI, son usados para diseñar un sistema dedicado a realizar una tarea especifica, como: adquisición de datos, procesamiento de señal, control e instrumentación. Aunque los sistemas dentro de este grupo presentan todas las características 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 programación a resolver un problema concreto. En este tipo de equipos, el diseñador debe usar criterios de diseño de hardware y de programación de μPs. Específicamente, debe confrontarse con trasductores de señal, convertidores análogo - digital y digital - análogo, y otros dispositivos y modos de interconexión entre el μP y el mundo real; debiendo tener conocimiento de técnicas típicas para comunicación con periféricos como consultas sucesivas, manejo de interrupciones, y acceso directo a memoria. En esta categoría el uso de dispositivos de E/S programables y el uso del lenguaje ensamblador son algunas de las tareas a las cuales el diseñador debe prestar especial atención. Considerando la primera modalidad, el programa de estudios de la carrera de Ingeniería Eléctrica de la Universidad de Oriente incluye un número suficiente de asignaturas que permiten la formación del estudiante en el área de Programación de Computadores, siendo común el uso de lenguajes de alto nivel como Pascal, C, y ADA. Además, el estudiante de la mención de sistemas digitales es entrenado en el manejo instrumental de programas de aplicaciones específicas, tales como: paquetes de análisis matemático, simuladores de circuitos electrónicos y de sistemas de control, además 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 años y pretende servir como texto guía de la asignatura Sistema de Microprocesadores, curso que se propone la formación del estudiante para el diseño de sistemas de la segunda categoría, enseñando las técnicas conocidas para el diseño de la arquitectura y la programación 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 técnicas de interconexión en sistemas basados en microprocesadores y se verifica experimentalmente los conceptos y técnicas aprendidas en los cursos teóricos. La separación de las aplicaciones generales basadas en microprocesadores en dos modalidades, es en realidad una estrategia instruccional. Al final de su periodo de formación, nuestro egresado estará capacitado para realizar el diseño y construcción de sistemas inteligentes donde generalmente uno o más μ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 aplicación, sino que debe comprender la arquitectura del PC, las técnicas de programación y la manera de establecer la comunicación entre los equipos. Como se expuso, este libro se escribe para usarse como guía texto en un curso introductorio de microprocesadores dentro del plan de estudios de la mención de Sis-

vii

temas Digitales de la carrera de Ingeniería Eléctrica. Para la exposición de la teoría general de μPs y sus aplicaciones prácticas se usa el μP de 8 bits INTEL 8085A. La corporación INTEL no es la única casa fabricante de μPs, ni los que produce son necesariamente los mejores. En realidad, no existe un μP mejor que otro, el óptimo es aquel que reúna las características y especificaciones requeridas por un proyecto en particular. El uso de un μP real, en lugar de uno hipotético, permite cierta profundización en las características, ventajas y limitaciones de un dispositivo comercial, así como ilustrar su uso en aplicaciones del mundo real. Además, es seguro que con la comprensión de la teoría básica de funcionamiento de un μP, el modo de operación de cualquier otro µP se entenderá con esfuerzo mínimo.

¿POR QUÉ EL 8085?
Es de vital interés para el autor justificar la selección del μP 8085A como dispositivo comercial a utilizar, para presentar los principios fundamentales de los microprocesadores y la arquitectura y programación de aplicaciones prácticas basadas en μPs. Por qué se selecciona un microprocesador de 8 bits, diseñado treinta años atrás, en lugar de un microcontrolador moderno o un µP de 16 ó 32 bits con mayor potencia de cómputo. En principio, se considera necesario el uso de un µP y no un µCtrl para iniciar al estudiante en el conocimiento de las técnicas básicas de diseño de sistemas empotrados, porque en la práctica, un microcontrolador no es más que una aplicación basada en microprocesador. De modo, que en el fiel cumplimiento del proceso enseñanza aprendizaje, deben conocerse primero los conceptos y técnicas de diseños básicas antes de intentar comprender el modo de funcionamiento de aplicaciones especificas más complejas. En concreto, el proceso de fabricación de un µCtrl se inicia con el diseño de un computador basado en µP el cual posteriormente es integrado en el encapsulado del circuito. El diseñador del µCTRL debe usar las técnicas conocidas para diseñar el subsistema de memoria, la estructura de E/S y la lógica de selección y decodificación de direcciones. Además, debe realizar la interconexión a la CPU de circuitos periféricos como temporizadores y conversores de datos. El uso de un microprocesador en el proceso de enseñanza hace muy fácil para el educando comprender la arquitectura y el modo de funcionamiento, no solo de microcontroladores, sino de microprocesadores modernos de alto desempeño. Además, al final de un curso que use un microprocesador para introducir los conceptos del tópico de sistemas empotrados, el estudiante estará capacidad de desarrollar el código VHDL de una aplicación práctica, un microcontrolador por ejemplo, que después será descargado sobre una FPGA. También es cierto que en el desarrollo de sistemas empotrados dedicados a resolver problemas prácticos de ingeniería típicos del medio industrial, sea usual que la

viii

aplicación diseñada deba usar los recursos de un sistema de propósito general, para lo cual, se requiere interconectar al PC la tarjeta empotrada diseñada y escribir los programas de comunicación en ambos sistemas y cualquier otro código de procesamiento o presentación de información en el PC. En los casos que el prototipo use la capacidad de procesamiento del PC para realizar sus funciones, la aplicación debe ser diseñada como una extensión del sistema microcomputador. Por ejemplo para un sistema programables de adquisición y control de datos analógicos y digitales las entradas/salidas de los circuitos integrados de la aplicación deben ser interconectados por medios de puertos al µP del PC. Hasta los sistemas Pentium II, el usuario tenía acceso directo a los buses de datos, direcciones y control del µP por medio de ranuras ISA. De este modo, podía usar las técnicas convencionales para diseñar la aplicación. A partir de los sistemas basados en Pentium III, el acceso a los buses del µP se realiza a través del bus PCI, pero igual deben usarse la técnicas básicas para el diseño de subsistemas de memoria y estructuras de puertos de E/S. En cualquier caso, un conocimiento de cómo se organiza y diseña un sistema basado en microprocesador simplificará las tareas propias del desarrollo del proyecto Lo expuesto en párrafos 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 permitírsele aprender como se organizan e interconectan las unidades funcionales que integran un sistema microcomputador. De otra forma, sería como iniciar un curso de electrónica 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 básicos. Por otra parte, en asignaturas avanzadas como Organización y Programación de Computadores I y II, los estudiantes de la mención de Sistemas Digitales de la carrera de Ingeniería Eléctrica completan su formación con tópicos 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 jerárquica. De modo que es necesario que el estudiante tenga en su conducta de entrada, conocimientos básicos de sistemas basados en microprocesadores, para un mejor aprovechamiento de los temas tratados. Con lo expuesto en párrafos anterior se considera que se justifica la selección de un µP en lugar de un µCtrl para introducir al cursante de la carrera de Ingeniería Eléctrica en el campo de desarrollo de sistemas empotrados. El uso de un procesador de 8 bits se explica porque las exigencias de cómputo, velocidad y de recursos de memoria de los sistemas empotrados típicos pueden ser satisfechas por µPs de 8 bits. De hecho, la mayoría de las modelos de microcontroladores modernos destinados a aplicaciones industriales son de 8 bits.

ix

En segundo término, se bebe responder a la interrogante sobre la edad del µP seleccionado para impartir el curso. Para esto es útil realizar un recorrido breve sobre la evolución del diseño de µPs. El microprocesador 8085 fue introducido por INTEL en el año 1977 como un μP de 8 bits para propósito general, siendo una versión mejorada de su predecesor el 8080 al incluir en el encapsulado el generador de reloj 8224 y el controlador de sistema 8228, y funcionar con una fuente de poder de tensión única de 5 Voltios. Con solo 2 instrucciones más que las del 8080 y un ciclo de instrucción reducido desde 2 μs en el 8080 hasta 1.3 μs en el 8085A (0.8μs para el 8085A-2) fue considerado como un dispositivo levemente más evolucionado que su antecesor. No obstante, algunas características funcionales novedosas como disponer de cuatro entradas de interrupciones vectorizadas además de la entrada estándar INT del 8080, y puertos de E/S para comunicación en serie, junto con otras funciones de control convirtieron al 8085A en un μP usado ampliamente en la solución de problemas de control en ambiente industrial. Junto con μP INTEL se aparecieron dos circuitos LSI, el 8155 y el 8755A compatibles terminal a terminal con el μP. De modo que con solo 3 circuitos integrados se puede realizar un microcomputador con todas las funciones del CPU, 256 bytes de RWM, 2Kbyte de EPROM, 38 líneas de E/S distribuidas en 4 puertos de 8 bits y uno de 6 bits, todos programables como puertos de E/S, y un temporizador/contador programable de 14 bits. El uso extendido del 8085A implicaba que un número significativo de diseñadores de aplicaciones basadas en μPs lo estaban usando en sus proyectos, lo cual resultó en una gran cantidad de literatura técnica disponible. Se publicaron numerosos artículos en revistas especializadas, libros de texto, y notas de aplicaciones que junto con los sistemas de desarrollo ofrecido por INTEL y otras empresas facilitaban el diseño de aplicaciones académicas e industriales basadas en este μP. Se estima que Intel vendió sobre los 100 millones de este modelo de μP. El 8085A y los miembros de la familia de μPs INTEL de 16, 32 y 64 bits ha sido, cada cual en su época, los μPs de propósito general más utilizados en el planeta. A partir de la introducción de los µPs 8086/8088 y hasta la actualidad, los siguientes microprocesadores diseñados han sido dirigidos al uso en máquinas de propósito general y no se continúo liberando nuevas versiones de µPs dirigidos a control. Este espacio fue ocupado por los microcontroladores, cuyas primeras versiones empezaron a usarse en aplicaciones de control. La familia MCS-51 de INTEL se convirtió en un estándar industrial existiendo el día de hoy más de cuarenta empresas fabricantes de semiconductores en todo el mundo que producen dispositivos pertenecientes a esta familia. De modo, que se usa un microprocesador de vieja data, debido a que la gama de µPs de 8 bits modernos es muy limitada, al ser éstos sustituidos actualmente por microcontroladores. Algunas empresas ofrecen hoy día µPs de 8 bits con arquitectura CISC similares al 8085 y con rendimiento superior. Por ejemplo, el PopCorn viene en

x

forma de un núcleo lógico en código VHDL el cual puede ser sintetizado junto con sus circuitos asociados sobre una FPGA. Además, 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 radiación cósmica, las versiones actuales del 8085 son usadas en el diseño de instrumentos para la navegación espacial. También 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 año 1997 en la misión Pathfinder. El sistema de control del vehículo autónomo Sojourner gobernaba la operación de 80 periféricos tales como sensores de temperatura y velocidad, cámaras de TV, lasers, modem, motores y un espectrómetro de rayos x. Además ejecutó 12 experimentos científicos. El código para el procesamiento, gestión 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 típicas de un µP, como se ha demostrado hace algunos años en la misión a Marte y en otras aplicaciones en el sector espacial.

Para finalizar, conviene resaltar que experiencia de más de 12 años en la enseñanza 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 más avanzado o con μCtrls. De modo que por las razones expuestas, considero que brindar atención 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 líder indiscutible en la producción de μPs y sus productos mantienen la nomenclatura y terminología usada originalmente en sus primeros dispositivos, y algunas de las características 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.

ORGANIZACIÓN DEL CONTENIDO
Sigue una breve descripción de la forma como están organizados los trece capítulos que constituyen este libro:
CAPÍTULO 1

Inicia este trabajo realizando una presentación del computador y mostrando su evolución a través de los años, desde las primeras máquinas del siglo XVII. La historia del computador se divide por generaciones, resaltándose los avances más significativos de cada una.

xi

CAPÍTULO 2

En forma breve se presenta la estructura funcional del computador, describiéndose las unidades funcionales que lo constituyen. También se ofrece una clasificación de los computadores.
CAPÍTULO 3

Introduce los conceptos de arquitectura y organización. Usando un proceso de síntesis, se obtiene la estructura interna de un microprocesador típico y se describe de modo funcional las unidades principales que forman parte de un µP. Se introducen algunos conceptos básicos como estados, ciclo de instrucción y tiempos de espera y se exponen técnicas de diseños básicas de decodificadores de memoria y de puertos presentándose al final un diagrama eléctrico de un microcomputador típico basado en el µP hipotético sintetizado.
CAPÍTULO 4

Presenta la arquitectura y el modo de operación del µP 8085 de INTEL. Se discute la arquitectura interna del procesador y la función de sus terminales. Se expone en forma concisa las consideraciones de temporización y diagramas de tiempo del µP, el ciclo de instrucción y el diagrama completo de transición de estados.
CAPÍTULO 5

Enseña como diseñar un sistema microcomputador 8085 usando tanto circuitos integrados para bus multiplexado como chips de puertos y de memoria convencionales. Presenta las técnicas de diseño 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 características eléctricas de los terminales del µP.
CAPÍTULO 6

Expone el modelo de programación del 8085, los formatos de instrucción y los modos de direccionamiento del µP. Se presenta el repertorio de instrucciones del µP y se describe la función de cada instrucción usando ejemplos prácticos cuidadosamente seleccionados. Se explica como programar funciones de control de tiempo para generar tiempos de retardo y formas de onda.

xii

CAPÍTULO 7

Justifica el uso del lenguaje ensamblador para el desarrollo de programas. Se presentan técnicas de programación como diseño hacia abajo, código estructurado y programación modular. Se describen las estructuras lógicas de programación usando programas ejemplos. Se describe el proceso de ensamblaje y la relocalización de código. Específica la sintaxis del lenguaje ensamblador y las directivas de control. Se presentan las herramientas para desarrollo de programas como: entornos integrados para desarrollo y programas simuladores, mostrándose ejemplos ilustrativos. Se explica, usando ejemplos, como escribir código que use MACROS y tablas de consulta
CAPITULO 8

Discute las distintas técnicas de gestión de entrada y salida; entrada por programa, por interrupciones y acceso directo a memoria. Se describe el sistema de interrupciones del 8085. Se presentan los controladores de interrupción 8259 y de acceso directo a memoria 8237.
CAPITULO 9

Se presentan circuitos programables para interconexión de E/S como el 8255, el 8155 y el controlador de teclado/pantalla 8279. Se ofrecen aplicaciones prácticas realizadas con el 8055 mostrando los circuitos y programas. Algunas de éstas son: control de una matriz de teclado, manejo de una pantalla del indicadores multiplexados, voltímetro digital, comunicación con impresora CENTRONICS, control de módulo LCD, generador de baudios, generador de forma de onda, programa monitor para microcomputador, medidor de temperatura y medidor de capacidad. Los tópicos contenidos en este trabajo están estructurados para ser cubiertos en un semestre regular. Al estudiante culminar la lectura y estudio de este material, estará en capacidad de poner en práctica procedimientos de análisis, diseño y puesta en operación de sistemas basados en microprocesadores. Luis Daniel Urdaneta Guevara Puerto la Cruz, septiembre del 2005

xiii

Este libro está destinado
En particular a:
Los cursantes de la asignatura Sistemas de Microprocesadores I, dictada en el pregrado de Ingeniería Eléctrica de la Universidad de Oriente.

En general a:
Quienes teniendo un conocimiento limitado del universo de los microprocesadores, o careciendo totalmente de éste, desean aprender de modo rápido y eficiente los conceptos, técnicas, criterios de diseño y de selección de dispositivos relacionados.

.xiv Conducta de entrada Los que inician el estudio de la arquitectura y programación de microprocesadores y microcomputadores con la lectura de este texto requieren tener un sólido conocimiento de técnicas de análisis y diseño de circuitos digitales combinatorios y secuenciales. y de los principios que rigen el funcionamiento de los dispositivos semiconductores básicos y de su comportamiento cuando integran circuitos electrónicos excitados por señales digitales y analógicas. Para la realización de las sesiones de simulación se requiere estar familiarizado con el manejo de un microcomputador en entorno WINDOWS.

usando circuitos integrados comerciales. Pudiendo además escribir. y construir. diseñar. ensamblar y depurar el programa del sistema.xv Propósito Al culminar el estudio de este texto el estudiante estará capacitado para analizar. . aplicaciones basadas en microprocesadores.

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

. 4 La segunda generación: Los transistores.1..1 La unidad central de proceso 2...ii Prefacio………………………………………………………...... INTRODUCCIÓN AL MICROPROCESADOR....2. 13 La tercera generación: Los circuitos integrados……………………………….3 La memoria 2..... 2 1.. 1......1 Los precursores del computador moderno……………………………………….....iii Este libro está destinado…………………………………………………………………....... 15 La cuarta Generación: El microprocesador……………………………………..2 La unidad de control 2..xiv Propósito……………………………….xiii Conducta de entrada………………………………………....…………………………….... 58 El generador de direcciones……………………………………………………….2......... 51 El conjunto extendido de instrucciones……………………………………………. 18 La quinta Generación: Tecnología VLSI……………………………………… 24 Capítulo 2...... 2.... 65 ...... 54 Formatos para representación de información………………………………………55 La memoria del sistema……………………………………………………………......2 El computador digital……………………………………………………………...…………………………………………………xv Advertencia………………………………………………………………………………xvi Capítulo 1... 3....... 47 Periférico de salida…………………………………………………………………. ..xvii Contenido Dedicatoria………………………………………………………………………………. 46 Periférico de entrada……………………………………………………………….1..2 LAS INSTRUCCIONES DEL COMPUTADOR 2...1 GENERALIDADES………………………………………………………………….. INTRODUCCIÓN AL COMPUTADOR..1 GENERALIDADES………………………………………………………………… 41 3......2 ARQUITECTURA INTERNA DEL MICROPROCESADOR…………………….1.1.2..... ORGANIZACIÓN DEL COMPUTADOR.3 CLASIFICACIÓN DE LOS COMPUTADORES 31 33 34 34 35 35 36 39 Capítulo 3.. 1 1.....5 El generador de reloj 2..1.. 46 La unidad de cálculo……………………………………………………………….... 4 La primera generación: Las válvulas de vacío………………………………….1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR 2.....1 Proceso de síntesis de un microprocesador………………………………………… 45 El conjunto de instrucciones del microprocesador………………………………….. 45 3..4 La unidad de entrada/salida 2..2 EL COMPUTADOR Y SU HISTORIA……………………………………………… 2 1........

3.2 La memoria de datos………………………………………………………….2..1 El ciclo de instrucción………………………………………………………. 127 4.2 El sistema microcomputador………………………………………………………..105 4. 84 3.4 ARQUITECTURA DE UN µCOMPUTADOR ESTÁNDAR………………………. 115 4. EL MICROCOMPUTADOR BÁSICO.. 101 4.3.8 BANCOS DE MEMORIA………………………………………………………….xviii El microprocesador como máquina de estados…………………………………….2 Selección de la memoria del sistema………………………………………… 190 5.7 MEMORIAS EEPROM Y FLASH…………………………………………………193 5.. 197 .3 ARQUITECTURA DE UN µP DE 8 BITS MÁS VERSÁTIL…………………….1 GENERALIDADES………………………………………………………………. 134 5.5 Ciclos de lectura y escritura en memoria y puertos de E/S…………………..1 La unidad de control………………………………………………………….3 DECODIFICACIÓN EXHAUSTIVA DE LAS DIRECCIONES………………… 158 5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES………………… 179 5.2 INTERCONEXIÓN CON DISPOSITIVOS CONVENCIONALES……………… 143 5.2 ESTRUCTURA FUNCIONAL DEL 8085A…………………………………….4 El modo de operación paso a paso…………………………………………… 125 4.3 El estado de espera…………………………………………………………… 122 4. 75 Instrucciones no soportadas………………………………………………………. 5. 70 Comunicación con periféricos lentos………………………………………………. 98 Capítulo 4..4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA……………………. 73 Conjunto extendido de instrucciones……………………………………………….6. 86 Las direcciones de memoria………………………………………………………. 114 4. 118 4.2. 104 4. 129 Capítulo 5.1 La memoria de programa…………………………………………………….. 80 Diagrama final del microprocesador sintetizado…………………………………… 83 Las señales de entrada y salida al microprocesador………………………………...6.2.1 Carga máxima del bus del 8085A…………………………………………....4 LA SECUENCIA DE INICIO DEL 8085A………………………………………..2. 111 4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A…………………………... 68 La unidad de control……………………………………………………………….... ARQUITECTURA Y OPERACIÓN DEL µP 8085 4. 188 5...2 Los registros internos………………………………………………………… 108 4.3 Los puertos de entrada y salida……………………………………………….2.... 91 3.3 La unidad aritmética y lógica………………………………………………… 110 4... 147 5.2.2. 87 Las direcciones de los puertos……………………………………………………… 90 3.6 CONSIDERACIONES SOBRE INTERCONEXIÓN A LOS BUSES…………….3.2. 173 5.. 188 5.3. 154 5.2 Secuencia de transición de estados…………………………………………. 151 5.1 SISTEMA MCS-85 MÍNIMO……………………………………………………..4 El bus interno de datos………………………………………………………...3..

. 318 7. 210 6. 306 7.2 Grupo de instrucciones que ejecutan operaciones lógicas…………………… 218 6.. 215 6.3 EL LENGUAJE ENSAMBLADOR………………………………………………. 210 6. 234 6. 327 Delimitadores………………………………………………………………… 327 Especificación de operandos…………………………………………………. 308 Estructura secuencial………………………………………………………… 309 Estructura IF-THEN/ELSE………………………………………………….4 EL CONJUNTO DE INSTRUCCIONES DEL 8085……………………………… 214 6...3 El formato HEX-INTEL……………………………………………………....2 FORMATO DE LAS INSTRUCCIONES………………………………………… 208 6. 313 Estructura DO-WHILE………………………………………………………..1. 317 7.2 Diseño hacia abajo…………………………………………………………… 307 7. DESARROLLO Y SIMULACIÓN DE PROGRAMAS 7. 325 Formato de línea…………………………………………………………….1...3.1 EL MODELO PARA PROGRAMACIÓN………………………………………...5 Grupo de instrucciones aritméticas………………………………………….. 249 6.1 Traducción de programas…………………………………………………….213 6.3. 316 Estructura REPEAT-UNTIL………………………………………………. 285 6. 240 6..7..5 ARITMÉTICA DE PUNTO FIJO O DE PUNTO FLOTANTE………………….7.2 Proceso de ensamblaje de un programa modular……………………………. 319 7. 326 Conjunto de caracteres………………………………………………………. 320 7.3.1 El lazo de retardo básico……………………………………………………. INTRODUCCIÓN A LA PROGRAMACIÓN DEL 8085A 6.3 MODOS DE DIRECCIONAMIENTO…………………………………………….... 311 Estructura CASE…………………………………………………………….3 Instrucciones para manejo de la pila………………………………………….1 El proceso de ensamblaje……………………………………………………..2 ESTRUCTURA DEL PROGRAMA……………………………………………… 306 7.3 Lenguaje ensamblador para el 8085………………………………………….1 EL LENGUAJE DE PROGRAMACIÓN…………………………………………. 296 7. 329 Definición de símbolos………………………………………………………. 213 6.3 Código estructurado…………………………………………………………..4 Direccionamiento indirecto por registro…………………………………….327 Símbolos reservados…………………………………………………………..2 Lenguaje ensamblador o de alto nivel………………………………………..xix Capítulo 6..3.2.2 Retardos de mayor duración………………………………………………….6 INSTRUCCIONES ADICIONALES……………………………………………… 284 6. 329 Evaluación de expresiones…………………………………………………… 331 ..7 RUTINAS DE RETARDO………………………………………………………… 284 6.4..3.3.2 Direccionamiento Inmediato………………………………………………….4.1 Direccionamiento directo……………………………………………………. 303 7.1 Programación modular………………………………………………………. 276 6.2...1..289 Capítulo 7.2.. 298 7.4 Grupo de instrucciones para bifurcaciones………………………………….4. 207 6.3 Direccionamiento por registro……………………………………………….3.4. 211 6.1 Grupo de instrucciones para transferencia de datos…………………………..4.. 294 7.

2 El controlador de interrupciones 8259A………………………………………… 475 Interconexión con el sistema 8085A……………………………………………… 476 Programación del 8259A……………………………………………………….1.4. 500 Modo 1…………………………………………………………………...2..2. 492 Capítulo 9. 445 Interrupciones disparadas por la entrada INTR………………………………….. 529 Operación en el modo 2…………………………………………………. 500 Modo 2…………………………………………………………………...2. 396 7.1 El sistema de interrupciones del 8085A………………………………………….2..2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER………………………... 503 Operación en el modo 1…………………………………………………. 582 9.5 MACROS…………………………………………………………………………. 500 9.2 Modos de operación del 8255ª………………………………………….4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS…………………. 332 Directivas generales del ensamblador……………………………………….4 Aplicaciones del 8255Aª………………………………………………… 503 Operación en el modo 0…………………………………………………. 499 Modo 0…………………………………………………………………. 544 9. DISPOSITIVOS DE E/S PROGRAMABLES 9.1 CIRCUITO PARA INTERCONEXIÓN DE PERIFÉRICOS 8255………………..3..2 ENTRADA Y SALIDA USANDO INTERRUPCIONES………………………… 443 8...3 CONTROLADOR DE TECLADO Y PANTALLA 8279………………………….1. 539 9..6 TABLAS DE CONSULTA (lookup tables)………………………………… 415 Capítulo 8. 449 Interrupciones disparadas por las entradas RST………………………………….. 542 Registro de estado……………………………………………………………..1 Funcionamiento del 8279…………………………………………………….2 Sistema integrado para desarrollo de programas…………………………….. 644 . 500 9.3.. 479 8.3 Programación del 8255ª…………………………………………………. 580 9. 585 Bibliografía………………………………………………………………………….1. 365 7.1 Sección de entrada y salida del 8155………………………………………… 541 Registro de comando………………………………………………………….4.3 ACCESO DIRECTO A MEMORIA………………………………………………..xx Traducción de un archivo fuente……………………………………………..1 ENTRADA Y SALIDA POR PROGRAMA……………………………………… 429 8.2 Sección del temporizador-contador del 8155………………………………… 560 9. 340 7.2 Programación del 8279………………………………………………………. 536 9. 453 8. 497 9. TÉCNICAS DE GESTIÓN DE ENTRADA Y SALIDA 8. 409 7.1 Programas para simulación del microprocesador 8085……………………… 371 7..

• Su uso en el diseño de sistemas digitales disminuye en forma significativa el número de componentes necesarios. Antes la aparición del μP el uso de computadores estaba destinado para aplicaciones muy especializadas. que posee todas las características de programabilidad presentes en computadores grandes. El μP es un circuito integrado LSI con dimensiones reducidas pero de gran complejidad.1 GENERALIDADES La presentación 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). • Son de bajo costo. El μP puede presentarse como un recurso cuya versatilidad y potencia supera la de cualquier dispositivo que la técnica digital haya tenido disponibles hasta su aparición en el mercado de la electrónica. técnicas. El desarrollo acelerado de esta tecnología ha resultado en la aparición de nuevos componentes. Es el mayor y más seductor desafío al cual se han enfrentado los diseñadores lógicos en los últimos veinte años. .Introducción al Computador 1 Introducción al Computador 1. y aplicaciones que han permitido la solución de problemas prácticos de ingeniería de cierta complejidad. La certeza de esta aseveración descansa en tres factores fundamentales. mediante el uso de técnicas de computación. y la posibilidad de ser programados permiten su inclusión en una gran variedad de aplicaciones.

Aunque en esta sección se inicia con la descripción de algunas de las primeras calculadoras mecánicas antecesoras del computador de nuestros días. 1. Fig. Estas tres cualidades han resultado en un cambio sustancial en las técnicas de diseño lógico. La figura 1. es útil considerar dos aspectos técnicos fundamentales: el uso de sistemas mecánicos para realizar cálculos matemáticos y la aplicación de la electrónica para el diseño de computadores.2 EL COMPUTADOR Y SU HISTORIA Exponer con detalle el origen computador y el nacimiento y desarrollo de la informática implica narrar una larga historia que quizás se inicie hace cuatro mil años con el uso del ábaco por la civilización china y continúe hasta los computadores de nuestros días.2. de hecho en la actualidad todos los sistemas cuya complejidad esté por debajo del nivel de minicomputadores. 1.Introducción al Computador 2 • El tiempo de ingeniería empleado en el desarrollo de sistemas se acorta en forma drástica.1 es una ilustración de la contribución del eminente científico francés al progreso del conocimiento. . si se considera que el eminente matemático francés Blaise Pascal (1623-1662) diseño en el siglo XVII (1642) una máquina Calculadora Mecánica basada en rodamientos dentados y engranajes que permitía ejecutar operaciones de suma y resta. se diseñan en base a μPs. para los propósitos de este trabajo interesa más bien destacar ciertos acontecimientos históricos del siglo XX que son fundamentales para proporcionar una visión general de la evolución de la estructura y funcionamiento de los computadores digitales desde su aparición hace más de 50 años. Para simplificar la reseña de la evolución de las máquinas de computación.1 Los precursores del computador moderno La idea del autómata inteligente es antigua. 1.1 Los diez dientes de cada rueda de la máquina de Pascal representaban los dígitos del 0 al 9. Las operaciones se realizaban rotando las ruedas el número de dígitos necesarios.

2 Máquina diferencial de Babbage. 1. Este anuncio pretende poner en tu conocimiento. El primer equipo de computación automática fue inventado por el francés Joseph Marie Jacquard (1752-1834). simplificando la realización de diseños con tramas complejas. al diseñar un telar automático. substracción..Introducción al Computador 3 La reflexión con la cual Pascal acompaño la presentación de su calculadora ha perdurado a través del tiempo. que te proporciona alivio del trabajo que tantas veces fatigo tu espíritu. tanto en el campo científico como financiero. Está máquina tuvo un impacto significativo en la industria textil francesa debido a que miles de fábricas usaron el telar de Jacquard para automatizar el proceso de tejido. el famoso matemático germano Gottfried Wilhelm Leibniz (1646-1716) desarrolló en 1670 una versión de la calculadora más eficiente y precisa. multiplicación y división. amable lector. cuando has hecho cálculos con tu pluma.. En la figura 1. Fig. . Inspirado en el diseño de Pascal. numerosos registros históricos asignan tal mérito a la máquina diferencial inventada por los matemáticos ingleses Charles Babbage (1792-1871) y Augusta Ada Byron (1815-1852). Aunque puede considerarse a la máquina calculadora de Pascal como el precursor del computador moderno.. quien introdujo el concepto de programa almacenado para el control del cálculo. capaz de realizar las cuatro operaciones aritméticas: suma.2 se muestra una sección de la estructura de ésta calculadora mecánica programable. que yo presento a la opinión pública una pequeña máquina. El telar de Jacguard fue presentado en París en el año 1801 y utilizaba placas delgadas perforadas para seleccionar cada hilo de la tela de acuerdo con el patrón de tejido deseado. revelando que además de ser un gran científico tenía alma de visionario. en las postrimerías del siglo XIX fueron de uso común versiones perfeccionadas de éstas máquinas. A pesar que los diseños de Pascal y Leibniz no tuvieron mayor éxito comercial.

publicado en el año 1954. una unidad operativa para realizar los cálculos matemáticos y una impresora para la salida de los resultados. No obstante. De hecho en 1830 proyectó la máquina analítica. 1. la cual presentaba notables similitudes con la organización de un computador moderno: un grupo de tarjetas perforadas introducían datos al dispositivo. Las primeras aplicaciones prácticas del álgebra de Boole fueron en redes de conmutación telefónicas construidas con relés. comprobando su funcionamiento al realizar en forma correcta cálculos sencillos con una precisión de 31 dígitos. donde entrega los resultados de su investigación sobre una teoría de conmutación basada en las proposiciones de Boole. y en su tratado clásico Una Investigación de las Leyes del Pensamiento. En el año 1896.Introducción al Computador 4 En el año 1820 Babbage inició este proyecto pero no pudo culminar la construcción de su diseño por falta de financiamiento. La Primera Generación: Las Válvulas de Vacío La primera generación de computadores nace en el año de 1946 cuando se puso en operación la famosa computadora gigante norteamericana ENIAC (Electronic Numerical Integrator and Calculator). La teoría de la lógica simbólica o Álgebra de Boole fue el primer intento de fusionar la lógica con la matemática y estaba basado en los conceptos de la lógica de Aristóteles de verdadero (1) y falso (0). el norteamericano Herman Hollerith empleado de la Oficina del Censo de los Estados Unidos diseño un sistema basado en tarjetas perforadas para procesar los datos correspondientes al censo de habitantes del año 1890. una unidad de memoria para almacenamiento. Pasados ochenta años. dirigida a realizar cálculos complejos. en 1938.2 El computador digital Los fundamentos de los sistemas digitales modernos y la base de la sintaxis de los programas de computación actuales fueron propuestos por el matemático británico George Boole en El análisis Matemático de la Lógica (1847). Hollerith fundó una empresa que treinta años más tarde se convertiría en el famoso consorcio International Business Machines Corporation (IBM). jamás construida.2. publicó su trabajo Un Análisis Simbólico de Relés y Circuitos de Interrupción. Claude Elwood Shannon. En el año 1880. en el año 1991 unos científicos británicos ensamblaron la máquina basándose en las especificaciones dejadas Babbage. proyecto financiado por el gobierno de los . y posteriormente en el diseño de sistemas digitales usando válvulas de vacío como componentes básico. La información almacenada en las tarjetas era interpretada haciéndolas pasar a través de sensores eléctricos. En realidad los diseños de Babbage eran demasiado avanzados para el nivel de desarrollo de la tecnología del siglo XIX.

cuya característica fundamental es que usa unidades de memoria separadas para los datos y las instrucciones.3 La computadora gigante ENIAC ocupaba un área significativa de un edificio. además de múltiples controladores de periféricos. La arquitectura Harvard fue introducida en la década de los 30's por un científico de la Universidad de Harvard llamado Howard Aiken. Las figuras 1. requiriendo toneladas de equipos de aire acondicionado para evitar el sobrecalentamiento. productos y extracción de raíces cuadradas. y se alojaba en un gabinete de 30 metros de longitud.5 se presenta un diagrama de la arquitectura del ENIAC donde se observa el uso de buses distintos para la transferencia de datos e instrucciones. estando constituida por 18000 tubos de vacío. El programa en lenguaje de .1.3 y 1.4 muestran en forma dramática las diferencias existentes entre el ENIAC y un µcomputador monopastilla moderno.Introducción al Computador 5 Estados Unidos. pesaba 30000 kilogramos y consumía 150 KW.Mauchly. Este computador digital de 2 millones de dólares. La unidad de almacenamiento estaba constituida por tambores magnéticos pudiendo almacenar 20 números decimales de 10 dígitos. Fig. La operación y sincronización global del sistema la realizaba la unidad de control. un conjunto de veinte acumuladores para almacenar los operandos y dos unidades aritméticas para ejecutar divisiones. El ENIAC se diseño en base a una arquitectura conocida como tipo Harvard. Esta máquina es aceptada como el primer computador programable.1. Fig.4 El microcontrolador C167R aloja en un área de 100 mm2 todos los elementos de un computador. y desarrollada en la Escuela de Ingeniería Moore de la Universidad de Pennsylvania bajo la supervisión de John Presper Eckert y John. En la figura 1. 3 metros de altura y 1 metro de profundidad.

La primera aplicación para la cual se utilizó el ENIAC fue la construcción de tablas exactas para el cálculo de trayectoria de proyectiles de nuevas armas. 20 Acumulador Multiplicador .Introducción al Computador 6 máquina era realizado mediante cableado externo y los datos se introducían por medio de tarjetas perforadas como se muestra en la figura 1.. Divisor y 1 2 3 . Este computador ejecutaba una operación de suma en un tiempo de 200 μs y una multiplicación en la eternidad de 2. El pobre rendimiento de un computador basado en miles de válvulas de vacío y la complejidad para la realización y carga del programa en código de máquina limitaron significativamente el espectro de aplicaciones factibles de resolver con este computador. su valor se debe al hecho que marcó el inicio del desarrollo de una industria de importancia vital para el progreso del conocimiento científico de este siglo.5.5 Estructura del computador ENIAC Como sistema de computo el ENIAC solo es de interés histórico. 1.8 ms. Lectora de tarjetas Bus de Escritura Bus de Lectura Impresora de tarjetas Unidad de Control Bus de Instrucciones Unidad de Programación Fig..

Fig. y los puertos de entrada y salida. . la ENIAC era mil veces más rápida. estando compuesto por 1500 válvulas de vacío. El Colossus fue usado durante la segunda guerra mundial para descifrar las transmisiones de radio del ejército nazi. requiriendo diez segundos para realizar una división entera.6 ElColossus fue la primera computadora totalmente electrónica. la unidad aritmética.Introducción al Computador 7 Pese a que en el mes de diciembre de 1943 se puso en marcha el computador Colossus. Fue construido en la ciudad de Londres por un equipo de científicos británicos dirigido por Alan Mathison Turing (1912-1954). matemático británico conocido por su proposición de la máquina de Turing.7 El computador MARK I. En la arquitectura del Mark I se distinguen las unidades que constituyen los computadores modernos. la mayoría de los datos históricos señalan al ENIAC como el primer computador electrónico para aplicaciones de propósito general. Pese a su lentitud extrema. 1. El Mark I era un computador electromecánico que contenía 200000 componentes y 800 kilómetros de cable. tales como la memoria. la unidad de control. Fig. y el año siguiente el Harvard Mark I. El diseño del Colossus se inició en 1939. 1.

En el año 1973. La razón para el uso restringido de estos computadores gigantes es obvia. anterior al ENIAC. las fuerzas armadas eran el único sector de la sociedad norteamericana capaz de financiar los altos costos inherentes a la fabricación de una máquina de gran volumen y que requería una cantidad considerable de energía eléctrica para su funcionamiento. tales como el diseño de aviones de combate y misiles. el científico húngaro John Von Neumann (1903-1957) quien introdujo el concepto de máquina de programa almacenado que sentó las bases del computador. cuyo procesamiento necesita la ejecución de programas con algoritmos convencionales desarrollados usando un número reducido de instrucciones. La intención de construir un computador de propósito general capaz de realizar tareas tanto en el medio académico e industrial como en el comercial. fue impulsado fundamentalmente por la necesidad de resolver problemas de ingeniería de la industria de armamentos de los Estados Unidos. también basados en válvulas de vacío. dependiendo de la aplicación. En una artículo científico publicado en el año 1946 Von Neumann junto con Burks y Goldstine.Introducción al Computador 8 El computador ABC (Atanasoff-Berry Computer) fue otra máquina. fue obstaculizada en forma severa por problemas de complejidad variable derivados del uso de la arquitectura Harvard. una de las memorias del sistema será subutilizada. En una aplicación de corte administrativo o financiero es seguro que se requiere el almacenamiento de una cantidad considerable de datos. De hecho el ENIAC nace impulsado por las necesidades militares del Laboratorio de Investigación de Balística (BRL) de las fuerzas armadas norteamericanas. es claro que. y con base en este argumento. Si se usa arquitectura Harvard. No obstante. mientras que para realizar cálculos científicos de cierta envergadura usualmente se alimenta al sistema con unos pocos datos iniciales y se ejecutan programas basados en algoritmos complejos que exigen una gran cantidad de código ejecutable. sin variaciones sustanciales en la estructura física del sistema. Como un hecho curioso. la empresa propietaria de las especificaciones para la fabricación del ENIAC fue despojada del derecho exclusivo para fabricar o vender el computador. presentan el primer computador que funcionaba con el programa almacenado en memoria el EDVAC (Electronic Discrete Variable Computer). Atanasoff alegaba ser el autor de ciertos principios y técnicas que se utilizaron en el desarrollo del ENIAC sin contar con su autorización. El paso decisivo para el diseño y construcción del primer computador moderno fue dado por uno de los asesores del proyecto ENIAC. el cual estaba basado en una arquitectura nove- . debido a la variedad de tareas que potencialmente debía resolver el computador. en plena postguerra. construida en 1939 en la universidad del estado de Iowa por John Atanasoff (1903-1995) y su asistente Clifford Berry. El desarrollo de los computadores sucesores del ENIAC. a mediados de los años 40. establecer en la fase de diseño la capacidad de las memorias separadas era una tarea que se distinguía por su ambigüedad. Un uso eficiente de la memoria del sistema era deseable dado el alto costo de esta unidad de la máquina.

9 muestra el formato descrito. El formato de instrucciones propuesto por Von Neumann. cuya secuencia de operación podía ser programada de acuerdo con las necesidades de una aplicación específica. concepto novedoso que sustituía el cableado de componentes. bastará con espacio común de memoria para almacenar los datos de E/S y las instrucciones del programa. El razonamiento de Von Neumann fue que si toda información se carga en el sistema como números y en un formato que permita que el procesador sea capaz de distinguir cuando un arreglo determinado de bits corresponde a un dato o a una instrucción. La figura 1. los datos. 1. y el campo de dirección para especificar la localización en memoria del operando u operandos a usar por la instrucción. dividía la instrucción en dos campos: el campo de código de operación para identificar la instrucción a ejecutar. y resultados se almacenan en una memoria. El programa que debía ejecutarse. Código de Operación Campo de Código de Operación Dirección Operando 1 Dirección Operando 2 Dirección Dirección Resultado Instrucción siguiente Campo de Dirección Fig. El mérito de Von Neumann estuvo en la idea de la construcción de una máquina de propósito general. Fig.8 El computador EDVAC. y que permitía cambiar el comportamiento del equipo con la simple modificación del programa en memoria.Introducción al Computador 9 dosa que usaba una memoria común para el almacenamiento de los datos y las instrucciones. 1.9 Formato de la instrucción de cuatro direcciones .

Para la reducción de la longitud de la instrucción existen dos opciones: usar cinco posiciones de la memoria para almacenar cada instrucción o eliminar algunos o todos los campos de dirección. El código de operación para señalar el tipo de operación: suma. algunas consideraciones indican que el uso de tal formato resulta en sistemas de estructura compleja y dimensiones exageradas.9 se conoce como computador de 4 direcciones. los computadores actuales no usan instrucciones de 4 direcciones y los microcomputadores utilizan instrucciones de una dirección o sin dirección. lo que exigiría el uso de memorias con palabras de 72 bits e igual número de líneas para el bus de instrucciones. pero si suponemos que se hizo de esta manera no debe extraña que como resultado se obtuviesen máquinas de dimensiones colosales y funcionamiento ineficiente. resulta un total de 72 bits por instrucción. John Von Neumann participó a partir de 1946 en el proyecto de desarrollo del computador IAS construido en 1952 en el Instituto para Estudios Avanzados en Princenton.Introducción al Computador 10 Debido a que el computador es una máquina de naturaleza secuencial que acepta información de entrada.10 donde se aprecia el uso de una memoria común para las instrucciones y los datos. Después de proponer una arquitectura que se convirtió en un estándar para el diseño de los computadores construidos en los siguientes 55 años. Una máquina de cómputo cuya instrucción tenga el formato de la figura 1. En el primer caso es obvio que persiste un problema de práctico debido a que el registro de instrucciones del procesador debía ser capaz de almacenar 72 bits. La dirección donde está la instrucción próxima. 3. La dirección de memoria donde debe almacenarse el resultado. por ejemplo) debía contener la siguiente información: 1. entrega un resultado. si se asignan 8 bits para identificar al código de operación. realiza algún tipo de operación sobre estos datos. La dirección de los operandos que participan en el cálculo. En la actualidad estas dificultades han sido superadas. con una memoria de 65536 posiciones que necesita 16 bits para especificar cada dirección de memoria. resta. producto. A pesar que no existían obstáculos insalvables para la construcción de un computador de este tipo. Un diagrama funcional del IAS se muestra en la figura 1. 2. La principal desventaja está relacionada con el número de bits de cada instrucción. y luego se dirige a ejecutar la próxima instrucción. En la sección próxima se expone como fue posible construir máquina de una dirección o sin ésta. . El autor supone que los diseñadores de la época no consideraron la posibilidad de almacenar cada instrucción en una celda de memoria ni transferirlas en paralelo al interior del procesador. detección de paridad. 4. complemento etc. En un principio se pensó que la instrucción básica (una operación aritmética.

con la unidad de memoria constituida por 1000 posiciones de 40 bits donde se podían almacenar tanto datos como las 21 instrucciones disponibles para la máquina. la cual posteriormente se fundió con la Sperry Rand Corporation. A finales del los 50 salió al mercado el modelo UNIVAC II. también inició el desarrollo de la serie de computadores con código 1100. el UNIVAC I. Esta última empresa compartía con IBM el dominio de la industria de fabricación de computadores. el cual era una máquina más avanzada que su antecesor La EckertMauchly Computer Corporation. El IAS fue el modelo a seguir para el diseño se los siguientes computadores de propósito general. A diferencia del ENIAC. todos los computadores modernos mantienen la estructura de la máquina de Von Neumann. ahora la división UNIVAC de la Sperry. La figura 1. . el computador IAS era una máquina binaria y no decimal. En 1950 el computador abandonó los centros académicos y de investigación con la liberación de la primera máquina comercial. 1.11 es una fotografía del UNIVAC I en operación.Mauchly: Eckert-Mauchly Computer Corporation.10 Diagrama de bloques del computador IAS. El primer modelo de esta serie fue el UNIVAC 1103 destinado para aplicaciones científicas de gran complejidad que involucraban el procesamiento de grandes cantidades de datos a alta velocidad.Introducción al Computador 11 Instrucciones y datos Direcciones Fig. Excepto algunos casos. Los continuos avances logrados en la arquitectura y el incremento de la capacidad de memoria permitió la construcción de dispositivos cada vez más rápidos y eficientes. mientras que se desarrollaron los primeros lenguajes simbólicos que simplificaron en forma notable el proceso de desarrollos de programas. (Universal Automatic Computer) fabricada por una empresa fundada en el año 1947 por John Eckert y John.

A mediados de la década del 50. IBM liberó el modelo 650. el consorcio IBM puso en venta los modelos 604 y 701.11 El UNIVAC I. en los años 52 y 53 respectivamente.12 El UNIVAC II. No existía sistema operativo y la velocidad máxima de procesamiento que alcanzaron estas máquinas fue de 40 mil operaciones por segundo. el cual tuvo amplia aceptación en los medios científicos y académicos de todo el mundo. Los computadores de esta generación se programaban usando lenguaje de máquina. 1. de difícil mantenimiento y con un alto consumo de energía. lo que requería personal técnico altamente especializado. Fig. Primer computador capaz de procesar texto además de datos numéricos. 1. El precio de adquisición del modelo 701 alcanzaba el millón de dólares. Por su parte. Eran equipos de grandes dimensiones. poca capacidad de memoria.Introducción al Computador 12 Fig. .

precio más bajo. Tabla 1. y Walter Brattain (1902-1987). ofrecieron a partir de 1956 sistemas de computación de capacidad baja construidos con transistores. A pesar de su indiscutible reinado en la industria de computación. operaciones/seg 40000 200000 1000000 10000000 100000000 En la cuarta generación el uso circuitos integrados con integración LSI (Integración a Escala Grande: 50 hasta 50000 funciones transistorizadas en un CI). funcionaba a una velocidad de 200 mil operaciones por segundo. las empresas NCR (National Cash Registers) y Radio Corporation of America (RCA). Tecnología LSI. mientras que una máquina de la tercera generación construida con una combinación de la tecnología SSI y MSI. En 1960 se incorpora al mercado de equipos con semiconductores la empresa Digital Equipment Corporation (DEC) con el modelo PDP-1. mayor confiabilidad y menor consumo de energía. realizado por los científicos William Shockley (1910-1989). John Baardeen (1908-1991). y más eficiente que los tubos de vacío de uso común. de los laboratorios Bell de los Estados Unidos.Introducción al Computador 13 La segunda generación: Los Transistores El desarrollo del transistor entre los años 1948 y 1952. Diseño VLSI. en este orden.1 Características típicas de los computadores agrupados por generación. las cuales constituyen lo que se conoce como la segunda generación de computadores. la sustitución de las válvulas de vacío por transistores en la fabricación de sistemas procesadores puso a disposición de los usuarios máquinas de menor precio. permitió diseñar máquinas que superaban en un factor de 250 la velocidad de los computadores de la primera generación y en 50 veces la de sus antecesores inmediatos. no fue la IBM quien introdujo el primer sistema de computación de estado sólido. conmocionó a la industria de la electrónica al ofrecer un dispositivo amplificador y conmutador de estado sólido con menores dimensiones. Los radios portátiles y audífonos están entre los primeros en cuya fabricación se usaron transistores. A partir del año 1956. El µprocesador. La tabla 1. MSI. el cual se considera .1 señala que un computador típico de la segunda generación. fabricado con tecnología de transistores discretos. GENERACIÓN PERIODO TECNOLOGÍA VELOCIDAD I II III IV V 1946-1955 1956-1964 1965-1970 1971-1977 1978 → Válvulas de vacío Transistores discretos Circuitos integradosTecnologías SSI. era 5 veces más rápida.

Cada nuevo integrante de la serie 7000 tenía mayor capacidad y menor precio que su antecesor. segmentación e interrupciones. introducido en el año 1961. 1. el CDC 6600 usaba unidades segmentación y era una máquina de carga/almacenamiento que .13 El IBM 7093 fue el primer computador en usar segmentación. usaba la técnica de segmentación para mejorar su rendimiento Fig. En el año 1964. primer modelo de la famosa serie 7000. Considerado el primer supercomputador comercial. La respuesta del consorcio IBM no llegó hasta el año 1959 con el computador IBM 7090. Por ejemplo.18 µs. Está máquina usó el primer terminal de video y tenía capacidad gráfica. El modelo IBM 7090 tenía 32 Kbytes de memoria y un tiempo de instrucción igual a 2. mientras que el IBM 7094 II. tardaba 1. el computador ATLAS desarrollado en 1962 en la universidad de Manchester usaba memoria virtual. cuyo último miembro. Las máquinas de esta generación podían ejecutar los programas con mayor eficiencia que sus antecesoras. mientras trabajaba en Control Data Corporation (CDC) diseño los computadores CDC 6600 y CDC 7600. el ingeniero electrónico norteamericano Seymour Cray.5 µs en ejecutar una instrucción típica. con un acceso a igual espacio de memoria.Introducción al Computador 14 como el primer minicomputador en el mercado de máquinas de computación. el 7096 II se construyó en 1964. El IBM 7093.

el uso de la librería de subrutinas. para el IBM704. El mayor rendimiento y confiabilidad las máquinas de esta generación determinó una ampliación del espectro de aplicaciones de los computadores. se introdujo el modo de procesamiento por lotes. 1. En esta época también se inició el uso de cintas y discos magnéticos La complejidad y diversidad de las tareas a resolver por los computadores. controlando la carga del programa fuente y los datos iniciales. que mientras el computador imprimía los resultados de la ejecución de la tarea X. a la vez que almacenaba en la memoria los datos de entrada de la tarea Z. y el COBOL ( Common Business-Oriented Language) para procesamiento de datos en el área financiera. Su desempeño era superior al IBM 7094. Fig. encargándose el sistema operativo de asignar los recursos a cada tarea. por ejemplo. por un equipo de programadores dirigidos por John Backus. surgiendo los sistemas operativos los cuales añadían cierto grado de automatización al proceso de ejecución de los programas.Introducción al Computador 15 explotó el uso del paralelismo a nivel de unidades funcionales de la CPU. Este nuevo tipo de ejecución denominado multitarea permitía.14 Computadores CDC 6700 y CDC 6700. . apareciendo los primeros lenguajes de alto nivel para tareas específicas tales como: el FORTRAN (Formula Translator). exigió un mejor aprovechamiento y administración del uso de la memoria y de los tiempos de ejecución. la compilación. destinado para problemas de ingeniería y desarrollado entre 1954 y 1957. y la ubicación 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 máquina. realizara los cálculos de la tarea Y.

El mantenimiento del producto final era un proceso tedioso y difícil. Este dispositivo permitió la reducción del costo y de las dimensiones de las grandes maquinas merced a la utilización de componentes semiconductores integrados de más velocidad. mayor fiabilidad. El sistema 360 de IBM es el exponente más destacado de esta generación. nace la novedosa tecnología de la microelectrónica.Introducción al Computador 16 La tercera generación: Los circuitos integrados El ensamblaje de las tarjetas de circuitos digitales.15 El IBM 360. era en general una tarea compleja y de costo elevado. Está máquina puede considerarse como la mayor conquista de IBM al apuntalar a la empresa como líder definitivo de la comercialización de computadores con dominio de más del setenta por ciento del mercado. El uso del CI en la industria de computadores a partir de 1965 señala el inicio de la aparición en el mercado de la tercera generación de computadores. Primer computador con microprograma. 1. resistencias. y menor consumo de potencia. Este computador fue de uso difundido en las principales universidades y centros de investigación durante la década del 60. Con la fabricación del primer CI en el año 1959. El diseño de esta máquina fue un proceso tan cuidadoso y planificado que la arquitectura del sistema 360 aún la conservan los sistemas de cómputo de gran escala . y capacitores. módulos básicos que formaban las máquinas que usaban lógica de transistores. Fig. El 360 fue introducido por IBM en 1965 como un modelo que incorporaba la tecnología de circuitos integrados y que ofrecía una arquitectura más avanzada que los integrantes de la serie 7000. al estar las distintas unidades de los computadores compuestas de miles de transistores.

El modesto modelo 30 sólo podía obtener un byte en cada operación de acceso a una posición del espacio máximo de memoria de 64 Kbytes. mientras que el flamante modelo 75. en virtud de disponer de una arquitectura menos compleja que la de las máquinas grandes pero que ofrecía una gran capacidad de ejecución. número de buses y de puertos de E/S.25 21 6 1250 75 512 16.2 50 6 1250 Memoria Máxima (Kbytes) Velocidad de acceso a memoria (Mbytes/s. éste pudiese.0 0.2 se detallan las características principales de los diferentes modelos de la familia IBM/360. requerimientos de energía reducido. 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 exigían su ubicación en grandes locales refrigerados. era capaz de transferir ocho bytes en forma simultanea. velocidad de procesamiento.Introducción al Computador 17 fabricados actualmente por IBM.0 0. la incipiente tecnología de la microelectrónica impulsó el diseño de un nuevo tipo de sistema procesador con menor tamaño. tales máquinas se conocen como minicomputadores. 50.5 3 400 50 256 2. con una inversión razonable. MODELO CARATERÍSTICAS 30 64 0.8 0. con un área de memoria de 512 Kbyte. 65. El 360 fue diseñado de modo que un programa determinado pudiese ser ejecutado por cualquiera de los modelos. éste fue el modelo 360/85 de IBM. y 75. . identificados como los modelos: 30. sino que ofreció la posibilidad que al incrementarse los requerimientos de procesamiento del comprador.625 3. máx) Además del concepto de microprograma. adquirir un modelo más avanzado del sistema. En el año 1968 se diseño el primer computador comercial donde se puso en práctica el concepto de memoria cache. Tabla 1. y de fácil mantenimiento. A la par de aumentar la velocidad de ejecución y la confiabilidad de los computadores de gran escala de la época.0 0.5 1. (Kbytes/s. En la tabla 1. no obstante existían diferencias sustanciales en los recursos que ofrecía cada miembro de la familia.5 10 4 800 65 512 8.0 1 3 250 40 256 0. máx) Tiempo de ciclo del procesador (µs) Velocidad relativa Número de buses de datos Velocidad del bus de datos. De hecho el modelo 75 era cincuenta veces más rápido que el 30. con el IBM 360 surgieron otras innovaciones en el campo de diseño de computadores. 40. Por ejemplo el uso de circuitos controladores de interrupciones y de acceso directo a memoria. Características de los modelos del sistema IBM/360. básicamente en la capacidad de memoria. Tal estrategia permitió no solo adaptar la máquina a las necesidades del usuario.2. En 1965 IBM liberó cinco modelos de la familia del sistema/360.

IBM introdujo el primer sistema operativo OS/360 con multiprogramación. con su relativo bajo costo. En el año 1970. Fig. . Ken Thompson y Dennis Ritchie desarrollaron el sistema operativo UNIX en los laboratorios Bell. supervisión y control de sistemas industriales complejos. por ejemplo. En segundo término. Con relación a la programación. El PDP-8. lo cual representaba en cierta medida un desperdicio de recursos tecnológicos. Para inicios de los años 70 se distinguen dos clases principales de aplicaciones en las cuales se usaron los minicomputadores: en primer lugar la concepción del mini. ocupaba un área reducida y su costo de 16 mil dólares era una fracción del precio de adquisición de los cientos de miles de dólares correspondientes a un modelo del sistema 360.Introducción al Computador 18 Los primeros minis estuvieron dedicados al cálculo de la acción de control en sistemas de control de procesos y de máquinas en la industria. sino que más bien permitió que estas máquinas se manifestaran como lo que realmente eran: un computador de propósito general a pequeña escala. La patente subutilización de estas máquinas en ciertas tareas de automatización no determinó que dejaran de ser usados como controladores programables en la industria. actuando como el elemento clave en tareas de adquisición de datos. aplicaciones donde era usual que el potencial de computo y los recursos ofrecidos por los minis superaran las exigencias de velocidad de procesamiento y capacidad de almacenamiento necesarias para la automatización del proceso industrial. 1. era común encontrar minicomputadores fabricados con propósito específico.16 El PDP-8 podía colocarse sobre un escritorio. como una máquina pequeña dirigida a aplicaciones generales permitió que fuese utilizado por grupos pequeños de investigadores en universidades y centros de investigación para la solución de problemas concretos de ciencia e ingeniería. Los computadores de esta generación alcanzaron velocidades de hasta 1 x 106 instrucciones por segundo.

vaticinio hoy conocido como la famosa Ley de Moore. considerando que sólo el circuito integrado de 1 Mbits se negó a seguir la conducta de sus antecesores. como resultado del sostenido incremento de la densidad de integración de circuitos digitales. al debutar un año antes de lo previsto. un impresionante desarrollo en la tecnología de la microelectrónica condujo en la década del 60. A diferencia de las generaciones anteriores. Se observa que es patente la validez del pronóstico de Moore. Este vertiginoso compás disminuyó en la siguiente década.17 Incremento de la capacidad de dispositivos de memoria dinámica con el tiempo . Gordon Moore. La figura 1. 1. a duplicar cada año el número de interruptores contenido en un CI.17 muestra una gráfica del crecimiento de la capacidad en Kbits de los chips de memorias DRAM en función de la fecha de introducción de los dispositivos LSI durante un tiempo de 20 años.Introducción al Computador 19 La cuarta Generación: el microprocesador. a la aún significativa cadencia de cuadriplicarlos cada tres años. la fecha de transición hacia la cuarta generación no la distingue la introducción de un nuevo modelo de computador. 105 16M 4 10 Capacidad en Kbits 4M 1M 256K 103 102 16K 64K Ley de Moore 10 1976 1978 1980 1982 1984 1986 1988 DRAM 1990 1992 Año de inicio de ventas Fig. había predicho este comportamiento para la fabricación de chips de memoria. La primera aplicación de la tecnología LSI fue el desarrollo de chips de memoria para sustituir a las voluminosas y lentas unidades de almacenamiento basadas en núcleos magnéticos. o el uso de una tecnología novedosa en la fabricación de éstos. La aplicación de esta técnica de integración condujo a la fabricación de dispositivos que contenían en un encapsulado desde miles a decenas de miles de interruptores digitales. tradicionalmente usadas en computadores. A partir de la aparición del primer circuito integrado en 1959. uno de los fundadores del consorcio INTEL. Para muchos especialistas la transición hacia la cuarta generación de sistemas de computación ocurre en los inicios de la década de los años 70 cuando aparece la tecnología LSI.

la carrera a la conquista del espacio produjo un notable desarrollo de la industria de la microelectrónica. junto con los elevados costos que suponía mantener un programa continuo de envío de astronautas a la exploración del espacio. El desarrollo y producción del μP 4004 por la corporación INTEL fue el resultado de contratos establecidos entre la empresa norteamericana con la compañía japonesa Busicom. Todo comenzó 20 años antes. En al actualidad un procesador Pentium IV o un Power PC tienen cerca de 200 millones de transistores. mercado de aplicaciones militares y espaciales. aloja cerca de tres millones de transistores en su encapsulado. sino que en pocos años cambió para siempre y en sentido positivo el modo de vida de millones de personas en todo el mundo. por ejemplo. y al penetrar con los minicomputadores en el sector industrial que hasta esa fecha no disfrutaba de las ventajas inherentes al uso de procesadores. con menor duración del ciclo de instrucción. en los años 50. derivó en el curso de 1970 en una marcada disminución de los contratos de investigación establecidos entre la NASA y las empresas fabricantes de CIs.. dedicada a desarrollos de sistema electrónicos de cálculo. las compañías de componentes electrónicos dirigieron su atención hacía el desarrollo de máquinas de calcular electrónicas de bolsillo. El primer microprocesador Pentium. Aun cuando. impulsó a las empresas fabricantes de semiconductores a la mejora de los componentes electrónicos de uso común para la época. cuando la necesidad presente de disponer de equipos e instrumentos sofisticados y de alta precisión para actividades relacionadas con la navegación en el espacio. hasta entonces fabricante de dispositivos de memoria. con bajo consumo de energía y más eficientes. Aun cuando la introducción del CI marcó el inicio de una era fructífera para la industria de fabricación de sistemas de computación al permitir la disminución de los altos precios de adquisición de las grandes máquinas de computo. abriendo de esta manera un mercado potencial que significaba la introducción de cientos de miles de sus productos. y costo más bajo. En búsqueda de colocar sus productos en un mercado de más amplio espectro. como una compensación a la pérdida del reducido. fue el año de 1971 la fecha de ocurrencia de un suceso que no sólo constituyo una revolución en la industria de la computación. El perfeccionamiento en las técnicas de integración permitió la construcción de sistemas procesadores más pequeños. la industria del silicio se ha mantenido a este nivel.Introducción al Computador 20 En el curso de los siguientes veinte años. En el . se trata de la invención del microprocesador por ingenieros de una modesta empresa de nombre INTEL. Las investigaciones realizadas resultaron en el nacimiento la tecnología de la microelectrónica y el diseño y producción de circuitos integrados con integración a muy grande escala (VLSI) capaces de contener hoy en día millones de transistores en un área reducida de silicio. La carrera espacial exigía dispositivos de menor tamaño. pero lucrativo. la llegada del hombre a la luna en 1969 y los resultados poco alentadores en lo que se refiere al aprovechamiento científico y económico de los viajes espaciales. en principio.

A finales del año 1971. Este cliente japonés solicitó el diseño de dispositivos integrados para cinco nuevos modelos de calculadoras de escritorio. 1.18 El primer microprocesador: El 4004 de Intel.Introducción al Computador 21 año 1971 no existían los μPs y la empresa INTEL se dedicaba a la producción de circuitos integrados de memoria. En lugar de esto. el cual fue bautizado con el nombre código 8008. más bien debe considerarse que el advenimiento del dispositivo fue un afortunado producto de las circunstancias. tales como equipos periféricos y terminales de computadores. Fig. Fue usado como CPU de sistemas controladores simples y en juegos de video. En realidad el μP 4004 era de potencia limitada e inadecuado para el uso en el tratamiento de grandes cantidades de datos. . De hecho el equipo de ingeniería de INTEL no tenía idea del potencial encerrado en el diseño que realizaron. tarea que representaba para INTEL el desarrollo de doce CIs diferentes de propósitos específicos. 1. INTEL inicia la comercialización del primer µP de 8 bits. El dispositivo fue presentado en un encapsulado de 18 terminales en doble línea. 93 instrucciones distintas y un ciclo de instrucción de 20 µs. disponía de potencia y velocidad suficiente para ser usado en aplicaciones más avanzadas que el 4004. se realizó el diseño de un circuito programable para satisfacer las necesidades de la empresa Busicom Fig. La invención de una CPU mono pastilla no fue el resultado de un proceso de investigación planificado y desarrollado por INTEL. donde alojaron los 3500 transistores utilizados en el diseño. al sólo tener un conjunto de 45 instrucciones diferentes y un espacio máximo de memoria de 4 Kbytes. Con acceso hasta 16 Kbytes posiciones de memoria.19 El microprocesador 8008 de Intel.

espacio de memoria aumentado y un repertorio de instrucciones más potente y diverso. la atención del equipo de ingeniería de INTEL se enfocó en el perfeccionamiento este producto. Estos atributos aceleraron la expansión del microprocesador y sellaron en forma definitiva el inicio de la supremacía de la empresa como consorcio vanguardia en el desarrollo. Ante este aparente fracaso. Microprocesadores de 8 bits. y ser 10 veces más rápido que su antecesor. había nacido el microprocesador como un circuito LSI de uso estándar. Diseñado el dispositivo. Una relación de los primeros µPs modernos de 8 bits. . INTEL liberó el circuito al mercado.3. fabricación y comercialización de chips microprocesadores. fue rechazado por la empresa contratante aduciendo que si bien el CI cumplía con la mayoría de las especificaciones. tan grandes como imprevistos.3. pero con requisitos técnicos imposibles de satisfacer con el repertorio de instrucciones y la capacidad de memoria disponibles para el µP 8008. además de requerir cada vez menos componentes para diseñar y construir un sistema µC completo a partir del µP. Con la propiedad de un dispositivo en vías de convertirse en un estándar industrial. el 8080. con los nombres códigos y la casa fabricante. posición que mantiene actualmente.Introducción al Computador 22 El 8008 nace como resultado de un convenio con la compañía Display Terminal Corporation para el desarrollo de un CI controlador de tubos de rayos catódicos. obteniendo sorpresivamente volúmenes de venta del chip. presentando en el año 1974 el primogénito de la segunda generación de microprocesadores. carecía de la velocidad necesaria para realizar eficientemente la tarea de presentación serial de caracteres. El desempeño del nuevo producto superaba con creces el del 8008: además de disponer de un número mayor de instrucciones. FABRICANTE CÓDIGO Signetics Motorola Intel MOS technology Rockwell Fairchild National Semiconductor 2650 MC6800 8080 6502 PPS-8 F-8 IMP-8 La mayoría de las compañías importantes que producían CIs se apresuraron en desarrollar e introducir en el mercado un microprocesador propio. el 8080 era compatible por programa con el 8008. Tabla 1. se muestra en la tabla 1. un espacio de memoria de 64 Kbytes. A medida que se desarrollaban más y más aplicaciones del µP 8008 surgieron problemas de ingeniería de complejidad creciente susceptibles de ser resueltos con sistemas basados en microprocesador. Cada nuevo producto presentado por la empresa INTEL exhibía mayor velocidad. Fabricado con 6000 transistores y tecnología PMOS. algunos de los cuales aun hoy se encuentra en venta. podía acoplarse directamente con componentes de la familia lógica TTL.

tales como el generador de reloj y el controlador de sistema. Esto representó un avance significativo. y el Z80 de Zilog.20. todos procesadores de 8 bits. 1. A la tercera generación de microprocesadores pertenecen. como indica la figura 1. en sistemas basados en el 8080. al cual llamaron Apple I. Número de componentes para un sistema mínimo Año del diseño del microcomputador Fig. si se considera que diseñar un sistema mínimo con el µP 8008 requería sesenta componentes. Los microprocesadores de 8 bits empezaron a usarse en tareas de procesamiento de datos cuando los estudiantes de computación Stephen Wozniak y Steven Jobs recurrieron al microprocesador R6500 para desarrollar. incorporándose además un canal de comunicación serie controlado por programa. en año 1976. Disminución en el tiempo del número de circuitos integrados necesarios para construir un sistema µC básico. se incluyeron en el encapsulado del 8085. el µP MC6802 de Motorola. introduciendo en año de 1977. el microprocesador 8085 como una versión sutilmente mejorada del 8080.20.Introducción al Computador 23 Para el diseño de su siguiente µP INTEL utiliza 20 mil transistores y tecnología NMOS. . además de cinco niveles de interrupción por hardware. Esta máquina fue el modelo inicial de una fructífera empresa de fabricación de microcomputadores conocida actualmente como Apple Computer Inc. Con sólo dos nuevas instrucciones. como circuitos integrados externos al microprocesador. Las características del 8085 y circuitos asociados permitieron la construcción de un microcomputador con sólo tres circuitos integrados. el primer microcomputador de propósito general. y treinta con el 8080. Algunos elementos que aparecían.3 µs). igual capacidad de almacenamiento y una leve disminución de la duración del ciclo de instrucción (de 2 µs a 1. el mayor atractivo del 8085 se corresponde con la simplificación del número de componentes necesarios para el desarrollo de un sistema mínimo. además del 8085.

TRS-80 (Z80) y el Apple II (6502). En este trabajo se supone que la actual y quinta generación se inicia con el desarrollo de la tecnología VLSI. Tal situación junto con la aparición. Las limitaciones naturales de los μPs de 8 bits florecieron con el incremento de la complejidad de los programas de procesamiento de datos. entre otros. La identificación de la generación a la cual pertenece un sistema específico se hizo cada vez más difícil a partir del cuarto escalón de la clasificación. potencia de los programas de aplicación. A medida que los computadores evolucionaron hacia máquinas de menores dimensiones pero con alta potencia de procesamiento. Tales razones impulsaron el diseño de .21 El microcomputador APPLE II. Inicialmente la pertenencia a una generación la fijaba el tipo de tecnología empleada en el hardware de la máquina.Introducción al Computador 24 Las ofertas de máquinas domésticas y de oficina se intensificaron con la aparición de μCs de diferentes marcas y modelos tales como. haciendo que tal clasificación sea de poca o ninguna utilidad. o lenguajes posibles de ejecutar por el computador. . el MITS Altair 8800 (8080). además del hecho que operaciones aritméticas elementales como la multiplicación y división debían ser realizadas por programas de usuario. con independencia del sistema operativo. de nuevos modelos provenientes de una gran diversidad de fabricantes. estando la capacidad de memoria limitada a 64 Kbytes. Fig. ha atenuado las fronteras entre una generación y otra. cada vez con mayor frecuencia. PCS–80/30 (8085). cuyas funciones cada vez más sofisticadas exigían una capacidad de memoria superior a 64 Kbytes. tales como los administradores de base de datos y los procesadores de palabras. Las velocidades de ejecución de estos μCs no superaba los 3 MHz. el software devino en un factor de primera línea para medir el desempeño de un sistema. La quinta Generación: Tecnología VLSI. 1.Atari 400 (R6502B).

no existe en la actualidad desarrollo posible en la arquitectura o programación de PCs que no esté relacionada de . y con la posibilidad de manejar hasta 1 Mbyte de memoria.77 MHz. Este dispositivo es catalogado como un µP de 16 bits pero para reducir los costos de producción. El 8086 y el 8088 pueden considerase los primeros μPs modernos. sino que permitió que en solo 20 años se disponga de maquinas con frecuencias de operación de hasta 640 veces la del primer i86 y capaces de manejar hasta 64 Gbyte de memoria. siendo elegido por IBM como CPU del µC IBM PC original. los cuales fueron evolucionando hasta disponer de numerosos procesadores internos que ejecutan tareas independientes con un comportamiento global que permite la ejecución de instrucciones en forma paralela. se desató una vertiginosa carrera tecnológica que no solo derrumbó en forma impensable los precios de los µCs. merced a que contiene en su encapsulado dos µPs para fines específicos: la unidad de ejecución (UE) y la unidad de conexión al bus (UCB).25 veces más rápido que su antecesor el 8085. un μP de 16 bits de gran potencia construido con 29000 transistores y tecnología HMOS. Este modo de funcionamiento mejora en forma notable el proceso de búsqueda en memoria y ejecución de las instrucciones dado que permite que ambas tareas se realicen en forma simultanea. compatible con el 8086. hasta cuando IBM concedió a INTEL el contrato de desarrollo de la arquitectura del PC. fue lanzado en el año 1979. cada unidad dispone de su banco de registros. Para esta época el mercado de fabricación de µPs era compartido por INTEL con varias empresas de semiconductores entre las que destacaban Motorola con la serie 68000. El 8088. En virtud de un conjunto de instrucciones muy completo y versátil. ofrecía tanta capacidad de procesamiento como la de un minicomputador de la época. En realidad esto no era una gran limitación. debido a que los dispositivos LSI de memoria y puertos podían aceptar/ofrecer sólo un byte a la vez. Conviene resaltar que en los μPs de 8 bits mientras se ejecutaba una instrucción no se realizaban operación de búsqueda en memoria. Puede afirmarse con seguridad que la historia de la computación personal tiene como actor principal a INTEL. INTEL libera en abril de 1978 el 8086. El 8086 ejecuta una suma 3. producto del cual se vendieron un millón de unidades en los dos primeros años. el bus de datos es de 8 bits.Introducción al Computador 25 un microprocesador de mayor potencia de computo y capaz de soportar mayor capacidad de memoria. La UCB tiene como función buscar la instrucción en memoria realizando un procedimiento de ordenación y tratamiento de colas garantizando que la unidad de ejecución siempre tendrá disponible una instrucción para su ejecución sin necesidad de esperar que ésta se obtenga desde la memoria. su unidad aritmética y de control y operan en forma independiente. Cuando en el año 1980 IBM introdujo el Computador Personal (PC) basado en el procesador 8086 ejecutando a 4. y Zilog con el Z8000.

000 134. En la tabla 1.500.Introducción al Computador 26 alguna forma con los diseños de INTEL.108 0.000 0.000 1.500 6. apreciándose la validez de la ley de Moore. mientras que el 80286. como lo indica la introducción de nuevos procesadores a ritmo acelerado.000 275.500. Tabla 1.000 29.100. introducido en febrero de 1982.000 29.500.000 3.4 Características de los microprocesadores de Intel. fue el sucesor del 8086 y puede considerarse el siguiente escalón en el proceso de desarrollo de los µPs de 16 bits para propósito general. La frecuencia máxima de operación de la última versión del 80286 fue de 16 MHz.000 9.000.108 2 5-10 5-8 8-16 16-33 25-100 60-233 150-200 233-400 450-933 1400-x000 64 G La curva de la figura 1. El µP 80186 fue un dispositivo diseñado para aplicaciones de control y no se utilizó como CPU de µCs. El número de transistores indicado corresponde a la primera versión del modelo de microprocesador. Durante la década de los 80 el dominio del gigante del silicio en el diseño de μPs era indiscutible. Una unidad interna para administración de memoria lo capacita para gobernar un máximo de 16 Mbytes de memoria física y 1 Gbyte de memoria virtual.22 muestra el aumento del número de transistores con las etapas de desarrollo de los µPs de INTEL.000 42.000 5. . Cada producto estrenado revelaba un notable incremento del grado de integración del circuito integrado. Los 134 mil transistores albergados en el interior del encapsulado del 80286 conforman un dispositivo procesador más avanzado que el 8086. destinado a operar en ambientes multitareas y multiusuarios. empresa que representa un estándar en la industria de la computación.4 se presentan las características de los µPs INTEL. Código 4004 8008 8080 8086 8088 80286 80386 80486 Pentium Pentium Pro Pentium II Pentium III Pentium IV Fecha de Introducción abr/1971 abr/1972 abr/1974 jun/1978 jun/1978 feb/1982 oct/1985 abr/1989 mar/1993 mar/1995 may/1997 feb/1999 nov/2000 Frecuencia MHz Memoria 640 16 K 64 K 1M 1M 16 M 4G 4G 4G 64 G 64 G 64 G Transitores 2.200. INTEL Corporation marcó el paso del desarrollo del µP con la introducción de procesadores de 16 bits cada vez más avanzados como el 80186 y el 80286.000 7.300 3.

1. Pentium Pro Pentium II Transistores 80486 Pentium 80286 80386 8086 8088 8008 8080 8004 Ley de Moore µProcesadores . un coprocesador matemático. fue la razón por la cual IBM cesó en el año 1995 la fructífera relación comercial mantenida durante 15 años con INTEL. En el año 1995 existían 1 millón de máquinas fabricadas por Sun Microsystems. y 100 millones de PCs o compatibles.5 MIPS. incluyendo Internet. IBM. El 80486 nació en 1989 e incluía en el mismo encapsulado una CPU de 32 bits más avanzada que un 80386.22 Comparación entre el aumento del grado de integración de los µPs de INTEL y la Ley de Moore. y una memoria cache de 8 Kbytes.Año de inicio de ventas Fig. se fecha de entrega a los fabricantes de microcomputadores de una versión de 66 MHz. . y usados en estaciones de trabajo producidas por Hewllet Packard.Introducción al Computador 27 La empresa INTEL continuo su línea de diseño con la liberación de nuevos microprocesadores de 32 bits como el 80386 y el 80486 con velocidades máximas de 33 MHz y 120 MHz respectivamente y espacio de memoria de 4 Gbyte. mejora notable si se considera que el 8086 original solo ejecutaba 2. Una falla presentada en la ejecución de una versión del Pentium y difundida ampliamente por todos los medios. recursos que garantizaban la ejecución 54 millones de instrucciones por segundo (MIPS) para el modelo de 66 MHz. el Pentium o 80586. y Sun Microsystems. La fase de desarrollo del Pentium continuó hasta el 22 de marzo de 1993. desarrollados en conjunto por las empresas Motorola y Apple Computer. En junio de 1989 y durante los siguientes 9 meses. apelando a la nueva generación de procesadores Power PC. un equipo de ingenieros de INTEL bajo la coordinación de Vinoh Dham realiza el diseño de un nuevo CPU con nombre código P-5.

Texas Instruments. Cyrix Corporation. destacándose Advance Micro Devices (AMD). una máquina Pentium IV /3. En la actualidad. La disolución de la alianza INTEL-IBM no fue suficiente para despojar a INTEL de la supremacía tecnológica que ha mantenido durante 30 años en la industria de fabricación de microprocesadores de escritorio. En los primeros meses del siglo XXI era posible adquirir por la cantidad de medio millón de bolívares un microcomputador con 64 Mbytes de memoria. Hasta 1999 el Pentium III de 550 MHz era el µP más poderoso de Intel. en la actualidad la mayoría de los diseñadores de microcomputadores de escritorio tienen más de un proveedor de chips permitiendo que los usuarios dispongan de inmediato de cualquier adelanto tecnológico producto de la feroz competencia en el mundo del silicio. científico de IBM que laboraba en el Centro de Investigaciones de Georgetown. cuesta aproximadamente 2 millones de bolívares con impresora incluida. En la actualidad existen diversos fabricantes que ofrecen μPs competitivos con los fabricados por Intel. A pesar de los esfuerzos de los competidores por desplazar al gigante del silicio. lanzando posteriormente el AMD-K7 como opción ante el Pentium III. otras empresas fabricantes de circuitos integrados se incorporaron al desarrollo y producción de μPs. Desde la el indiscutible éxito comercial logrado con las primeras versiones del 8086 y 8088. tenía el AMD-K6 como su producto estrella. En realidad la falla encontrada en el Pentium solo diversificó la oferta de μPs. el cual es 20 % más rápido que el μP Pentium II/450 MHz fabricado en el año 1998. El consorcio japonés NEC (Nipppon Electric Company) realizó clones de ambos procesadores denominándolos V20 y V30 pero incrementando notablemente el rendimiento. Este término identifica a las máquinas diseñadas con una arquitectura desarrollada a finales de los 70 por John Cocke. INTEL no ha carecido de competidores en el lucrativo mercado de microprocesadores. las descripción de la arquitectura RISC y la discusión sobre sus ventajas o limitaciones con respecto a la CISC escapan al alcance de este trabajo. los avances en el Pentium continuaron en forma acelerada con la introducción en marzo y junio de 1995 de las versiones de 120 y 133 MHz.0 GHz con 512 MBytes de DDR y demás periféricos. NEC. Con la introducción del Power PC la computación de conjunto reducido de instrucciones entra en competencia en un mercado de alto volumen como el de computadores personales dominado por la computación de conjunto complejo de instrucciones (CISC: Complex Instruction Set Computing).Introducción al Computador 28 El Power PC es un microprocesador de arquitectura RISC (Reduced Instruction Set Computing). Aunque líder. construido alrededor de un procesador Pentium III funcionando a la vertiginosa velocidad de 750 MHz. Por su parte AMD. la empresa competidora. la cual en general resulta en una reducción de los precios. . NexGen y SGS Thompson.

los avances tecnológicos son de tal magnitud. Una fuente actualizada sobre procesadores modernos es la WEB. En al año 1980 la empresa American Microsystems Inc introdujo el primer procesador DSP AMI S2811. al poco tiempo hicieron su aparición el Intel 2920 y el NEC mPD7720. las cuales conviene hacer a alta velocidad. Los microprocesadores Intel ix86 usan tal arquitectura y de alguna manera comparten muchas características de los computadores fabricados en las últimas cuatro décadas. por la lentitud con la cual realizan operaciones de multiplicación. Sin embargo entre los especialistas existe una tendencia a usar máquinas 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. desafortunadamente requiere varios ciclos de reloj para su ejecución. Por ejemplo. Si se considera el tratamiento de una secuencia de imágenes de resolución media (512 pixels x 512 pixels) a una frecuencia de 30 cuadros/seg. En la búsqueda de una arquitectura para procesadores DSP los diseñadores recurrieron a la abandonada arquitectura Harvard que permitía la transferencia simultánea de instrucciones y datos al disponer de espacios de memoria separado para datos y programa. existe una máquina japonesa constituida . debido a que se realiza a través de microprogramación. De modo que los procesadores CISC no son adecuados para este tipo de cálculo. Otro punto digno de mencionar se relaciona con el dominio casi absoluto que la arquitectura Von Neumann ha mantenido en el diseño de máquina de cómputo. en colores (3 bites por pixel). En el año 1982 Texas Instruments liberó el TMS 32010. En aplicaciones de procesamiento digital de señales (DSP) se requiere la realización de cálculos repetidos que incluyen operaciones de suma y multiplicación. Por ejemplo existen desarrollos importantes en procesamiento paralelo. Un algoritmo simple puede requerir miles de operaciones por pixel.Introducción al Computador 29 Para finalizar esta historia conviene resaltar que son numerosos los adelantos tecnológicos en materia de computación no mencionados o discutidos en extensión en este texto. en contraste al multiprocesamiento típico de los μPs modernos donde existen unidades que actúan como procesadores independientes que permiten la ejecución de un programa mientras que se realizan operaciones de transferencia de entrada/salida en paralelo con el programa. se requieren una velocidad de 24 millones de bytes por segundo. El procesamiento de señales en tiempo real exige la realización de cierta cantidad de cálculo en un tiempo determinado. diversidad y velocidad que casi es necesario redefinir el concepto de computador. donde se ejecuta más de un programa en forma simultanea usando más de un microprocesador activo. Problemas como procesamiento de imágenes requieren de una intensidad de cómputo considerable. Aunque los procesadores CISC tienen una instrucción de multiplicación. de acuerdo con la velocidad que son transferidos los datos a procesar. todos con arquitectura Harvard. de modo que el uso de computación paralela es inevitable para resolver esta clase de problemas.

el computador. Los fabricantes de este cíclope se refieren a éste como. que ejecutan programas con el propósito de simular las condiciones reales del clima del planeta tierra. .Introducción al Computador 30 por 640 computadores interconectados.

codificada. decodificada. la solución de tales problemas exige la realización de las funciones mostradas en el diagrama de la figura 2. o combinada para generar nuevas representaciones de información.Organización del Computador 31 Organización del computador En forma similar a como la aparición en el año 1980 del primer reloj de cuarzo desplazó el mecanismo tradicional de medición de tiempo basado en componentes mecánicos. Datos Adquirir Procesar Almacenar Presentar Resultados Fig. En general. y presentada. almacenada en un subsistema de memoria donde puede ser recuperada y usada. El computador es usado en todos los campos donde se requiere resolver problemas relacionados con el procesamiento de información. asociada. 2.1. los resultados del procesamiento de los datos de entradas pueden mostrarse en forma apropia- . ordenada. procesada. el procesamiento de información por medios electrónicos dejó muy atrás las técnicas mecánicas usadas por el hombre para el manejo de información.1 Funciones de un sistema de procesamiento de información La información debe ser: adquirida y detectada como datos originados del mundo exterior al sistema en la forma de estados físicos convenientemente modificados. evaluada.

todas estas funciones son controladas por un programa almacenado en memoria. mientras que los periféricos de salida permiten presentar o transmitir los resultados del procesamiento. 2. El sistema es capaz de realizar una tarea determinada por medio de una secuencia de micro operaciones elementales determinada por la ejecución de un programa de micro instrucciones. Un computador es en esencia un sistema digital que resulta de la combinación de una unidad secuencial sincrónica de control programable. CPU CPU UNIDAD LÓGICA Y ARITMÉTICA SALIDAS MEMORIA UNIDAD DE CONTROL ENTRADAS RELOJ Fig. La unidad de control es programable y recibe un programa en forma de una sucesión de instrucciones almacenadas con antelación en la memoria del sistema. En un sistema de procesamiento de información son vitales los elementos periféricos encargados de vincular al sistema con su entorno. una unidad para la ejecución de operaciones lógicas y aritméticas y una sección de memoria. el cual de hecho se define como un procesador de datos que ejecuta operaciones aritméticas y/o lógicas sin que requiera comúnmente intervención humana durante la ejecución del programa. las .Organización del Computador 32 da para ser entendida por humanos o como comandos que permiten la realización de algún trabajo. 2.1 es el computador. el cual no hace referencia a la memoria principal. Los captadores de entrada o sensores y elementos asociados acondicionan la variable física al lenguaje entendido por el computador.2 Estructura simplificada de un computador.1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR Un sistema capaz de realizar las funciones básicas de procesamiento de datos representadas en la secuencia de bloque de la figura 2.

1. • • • La Memoria La Unidad de Entrada/Salida.2.Organización del Computador 33 cuales indican a la sección de control las micro operaciones que debe realizar para la ejecución de cada instrucción particular. cuyo diagrama en bloques se muestra en 2. sustracción. multiplicación y división. y El Generador de Reloj. . aunque evolucionando sustancialmente en los últimos 50 años. su función es controlar la interpretación y ejecución de las instrucciones y todas las acciones que realice el computador bajo la dirección del programa almacenado en memoria en forma de una secuencia de instrucciones. Toda CPU está compuesta de la Unidad Lógica y Aritmética y la Unidad de Control La ALU es la encargada del procesamiento de los datos de origen externo e interno. Es la sección del computador donde se realiza la mayor parte de cómputos con los datos bajo la conducción de la CU. Un computador típico incluye los elementos propuestos en la estructura básica de la máquina de Von Newmann. (CU) 2. e incluyen: suma.1. (ALU) • La Unidad Central de Proceso (CPU) La Unidad de Control. de las funciones lógicas: AND. XOR y desplazamientos y rotaciones. Las operaciones aritméticas y lógicas requeridas por la instrucción son ejecutadas por la ALU. NOT. En la literatura especializada se acostumbra agrupar la sección de cálculo y la unidad de control en un bloque único al cual se denomina unidad central de proceso o en forma simplificada CPU.1 La unidad central de proceso Es la esencia del sistema. Aunque John Von Newmann propuso este esquema a mediados de siglo ha perdurado. los componentes básicos de un computador son: La Unidad Lógica y Aritmética. como el modelo a seguir por muchos de las máquinas de cómputo modernas. además. estas operaciones generalmente son realizadas por medio de lógica programada. Los operandos necesarios así como el resultado son almacenados temporalmente en registros internos de la CPU capaces de conectarse a las entradas de la . OR. Como se observa en la figura 2. Modificar las especificaciones de funcionamiento del computador solo requiere almacenar en la memoria una nueva secuencia de instrucciones.

2. CPU A10-A0 Memoria D7-D0 R/W (a) (b) Fig. son también responsabilidad de la CU. La CU controla la búsqueda. Dentro de la CPU existen también un grupo de registros de propósito específico cuyas funciones se expondrán más adelante. 2. El control del flujo de datos por las líneas de interconexión del sistema.Organización del Computador 34 ALU. Registros Direcciones ALU Datos Unidad de control Control Fig.3 La memoria Contiene las instrucciones del programa que debe procesar la CPU. y la interpretación de las señales de control que llegan a la CPU. 2.2 La unidad de control Dirige la secuencia de operaciones del sistema. Además. Es responsabilidad de la CPU sincronizar la transferencia de datos desde y hacia la unidad de memoria del computador.1. De acuerdo con los resultados de la interpretación de la instrucción.1. 2. la CU envía señales de control internas que sincronizan la transferencia de datos entre registros.4 a) Conexión del circuito l μP b) Información almacenada . transferencia a la CPU. genera señales de control externas dirigidas a las restantes unidades del sistema.3 Diagrama general de la unidad central de proceso. y entre éstos y la ALU. decodificación y ejecución de las instrucciones del programa almacenado en la memoria del sistema. los datos necesarios para la ejecución del programa y los resultados de la ejecución también son almacenados en la memoria.

A través de las unidades de E/S se intercambia información con dispositivos periféricos conectados al computador. la comunicación entre la unidad central de proceso y las restantes unidades del computador se realiza por líneas de interconexión denominadas genéricamente buses. generando todas las señales necesarias para la transferencia interna y externa de información y para el funcionamiento de la ALU. siendo usado por la CU para sincronizar la secuencia de operaciones del computador. 2. 4. término que identifica a dispositivos de almacenamiento en los cuales el tiempo de acceso a una posición determinada es independiente de la localización del dato.5 El generador de reloj Constituye la base de tiempo maestra del sistema. Los resultados de la ejecución de un programa pueden ser dirigidos a una impresora por medio de una unidad de salida. los cuales se distinguen por el tipo de información que circula por éstos. Un bus es una representación de un grupo de líneas independientes que en un diagrama funcional de un computador tienen funciones comunes. datos. y coloca la línea de control R/W en el estado lógico apropiado para leer (alto) o escribir (bajo) el dato en la memoria.a se muestra un esquema simple de conexión de una memoria de 1024 posiciones al CPU.Organización del Computador 35 En la figura 2. 8.b es una representación de una memoria de 1024 (0000-1023) posiciones de 8 bits. cada una de las cuales tiene una dirección específica. Existen distintos tipos de memoria de acuerdo con el tipo de acceso y la tecnología usada en la fabricación. Por el primero circulan las direcciones de la fuente o destino de la información que se transfiere. ó 16 bits.1. El bus de control lo forman las señales necesa- .4 La unidad de entrada/salida Representan el canal de comunicación del computador con el mundo exterior. La naturaleza de la información es variada. El procesador entrega la dirección (A9-A0) de la celda de memoria fuente o destino de la información a transferir. en forma de un código interpretable por la CPU. 2.4. La memoria principal en computadores es del tipo de acceso aleatorio (RAM). Como se observa en la figura 2. Los datos y comandos provenientes de un teclado llegan a la CPU desde la unidad de entrada.1. El dato es transferido desde o hacia la CPU a través del bus bidireccional de datos.2. y control. la cual se transmite por el bus bidireccional de datos. Existen tres tipos de buses: direcciones. Una memoria puede concebirse como un arreglo de biestables organizados en celdas de 1. La figura 2. de modo que el tiempo que el procesador debe esperar para obtener información desde la memoria es el mismo para cada una de las 1024 posiciones.4.

5 Fases de ejecución de una instrucción.Organización del Computador 36 rias para el control de la máquina y del intercambio de información con los periféricos.5 durante la fase de ejecución la instrucción va al interior del procesador. Esta capacidad. ejecuta. Aunque el modo de operación de la máquina de Von Newmann es de naturaleza secuencial. junto con el concepto de programa almacenado constituyen los fundamentos de las sofisticadas máquinas diseñadas y construidas en la actualidad. forman parte del bus de control. La máquina puede alterar la secuencia de la ejecución. operaciones aritméticas y/o lógicas (ALU). Instrucción a la CPU BÚSQUEDA EJECU- Ejecución culminada CIÓN Fig. La ejecución de un programa implica la participación de todas las unidades del computador. por ejemplo la entrada de reset y las salidas de lectura y escritura. Si bien no existen en la ac- . Como se observa en la figura 2. La cadena de bits que constituye la instrucción porta información vital usada por la unidad de control para realizar con propiedad las tareas fijadas por el programa en ejecución. Los datos y resultados son transferidos a y desde la CPU por las unidades de E/S. El tiempo que el CPU dedica al procesamiento de una instrucción depende del tipo de instrucción. La CPU busca las instrucciones en la memoria. lo cual significa que el programa está almacenado en forma ordenada en posiciones consecutivas de memoria. buscando la siguiente instrucción en una posición de otra área de memoria. Al inicio de la fase de ejecución se procede a la decodificación de la instrucción donde se informa a la unidad de control la secuencia de microinstrucciones que debe realizar para la activación de las señales internas y externas que permiten la ejecución propiamente dicha. 2. si el programa lo requiere. En el capítulo 4 se analizarán detalladamente las fases de ejecución de las instrucciones de un microprocesador. 2. y así es ejecutado. La señal de tiempo que sincroniza todo el proceso la suministra el reloj del sistema. las decodifica y genera las señales de control del sistema (UC). culminada la fase de ejecución se inicia la búsqueda de la instrucción siguiente. Durante la fase de búsqueda el computador obtiene la instrucción almacenada en memoria y la traslada a la CPU para su posterior decodificación.2 LAS INSTRUCCIONES DEL COMPUTADOR La ejecución de toda instrucción se realiza en dos fases fundamentales: búsqueda y ejecución. En un computador de 4 direcciones se requieren 80 bits por instrucción: 16 para el código de operación y 64 para las direcciones.

D79 D0 Código de Operación D63 Dirección Operando 1 Código de Operación Dirección Operando 2 Dirección Operando 1 Código de Operación Dirección Resultado Dirección Operando 2 Dirección Operando 1 Código de Operación Dirección Instrucción Siguiente D0 (a) (b) Dirección Resultado D0 D47 Dirección Operando 2 D0 (c) D31 Dirección Operando D0 (d) D15 Código de Operación (e) Fig.6 Formato de instrucciones del computador. Entonces se supone que cada instrucción ocupa 5 posiciones de una memoria de celdas de 16 bits y se asume que la CPU es capaz de distinguir la dirección de inicio de cada instrucción. lo cual es equivalente a reducir la cantidad de información que contiene la instrucción de 4 direcciones.6. (e) Sin dirección Para obtener un computador de tres direcciones con el formato de instrucción de la figura 2.Organización del Computador 37 tualidad. (b) Tres direcciones. el gran número de bits/instrucción es inconveniente debido a que es necesaria una CPU con estructura interna muy compleja para el procesamiento adecuado de la instrucción. limitaciones de orden técnico para fabricar un computador de 4 direcciones. El efecto de la ejecución de tal instrucción es sustituir el contenido del contador de programa por el campo de dirección. es posible entonces suprimir la zona del campo de direcciones que indica la ubicación en la memoria de la próxima instrucción a ejecutar si se dota a la CPU de un registro interno que se incremente en uno cada vez que se ejecute una instrucción o parte de ésta. Si es necesario romper la secuencia normal del programa para ejecutar una instrucción en otra área de la memoria. ni existieron hace 40 años. (d) Una dirección. se considera que el programa a ejecutar el computador se almacena en memoria como una secuencia de instrucciones que ocupan posiciones adyacentes. De modo que la única posibilidad es eliminar algunas o todas las zonas del campo de dirección. tal registro se denomina contador de programa. (c) Dos direcciones. el computador dispone de una instrucción de salto o bifurcación en cuyo campo de dirección se especifica la dirección del salto. porque la memoria debería tener celdas de 80 bits. 2. Para simplificar la estructura del procesador conviene disminuir el número de bits por instrucción. (a) Cuatro direcciones. lo cual exigiría que el bus de datos. . No se considera la opción de mantener cada instrucción en una posición de memoria.b. y la ALU fuesen de tal longitud. los registros internos del procesador.

destruyendo el contenido original (el operando) de la posición de memoria en cuestión.d. el lenguaje de máquina de la CPU debe incluir instrucciones que permitan la transferencia previa de los operandos al interior de la CPU y el resultado a la memoria o a un puerto de entrada/salida. Eliminando la zona de dirección del resultado se tiene un computador de dos direcciones como se aprecia en la figura 2. Esta denominación se debe al hecho que el (A) no sólo mantiene inicialmente uno de los operandos sino que además almacena el resultado. Como indica la figura 2. Lo común es que se realice una transferencia indirecta a través de un registro interno de la CPU. una operación de lectura en memoria mueve el operando al registro y una subsiguiente escritura en memoria lo transporta a la nueva dirección. Una instrucción de transferencia de datos se encargará de trasladar un operando desde la memoria al registro interno o Acumulador (A). Esto no significa mayor problema debido a que en memoria existe una copia . Fig.5. 2. Queda claro que el computador de dos direcciones debe tener al menos dos registros internos.5. y el resultado de ésta.6 Reducción del número de bits por instrucción.Organización del Computador 38 Para suprimir otros campos de la instrucción. el contador de programa y un registro para almacenamiento temporal. Si es imprescindible salvar esta información el procesador debe disponer de algún medio de trasladar el operando a otra localización de memoria. debe incorporarse al procesador registros internos que contengan el o los operandos que se requieren para ejecutar la instrucción. Por supuesto. un computador es de una dirección si uno de los operandos se transfiere previamente a un registro interno de modo que la instrucción sólo contenga la dirección de memoria donde está el otro operando.c. Esto puede lograrse si el resultado se almacena en la dirección que ocupa uno de los operandos.

Tal clasificación es excesivamente amplia. Una máquina clasificada . corresponde al computador digital (a partir de aquí. El campo de aplicación del computador análogo es reducido. El resultado se deposita en memoria por medio de una instrucción de transferencia de datos desde el A hasta el dispositivo de almacenamiento. llamado computador). garantiza la construcción de máquinas con estructura más simple y eficiente que su contraparte analógica. La primera corresponde al Computador Analógico.Organización del Computador 39 del operando original en A. y Microcomputadores. los cuales son capaces de ejecutar un gran número de operaciones matemáticas. el increíble desarrollo de la tecnología de integración de circuitos digitales. La imprecisión en los resultados inherente a un sistema analógico. Además. y su validez está sujeta al desarrollo altamente dinámico de la industria del computador. La reducción a una zona del campo de dirección de la instrucción fue uno de los factores determinante para el desarrollo del microprocesador. como un dispositivo programable cuya estructura interna incorpora todos los elementos de la CPU de un computador en un circuito integrado. produjo el rápido decaimiento y obsolescencia de esta tecnología en la producción de computadores. en el primer piloto automático para aeronaves. fue utilizado en el pasado en actividades militares relacionadas con afinación de la puntería de cañones y aviones bombarderos. Minicomputadores o Estaciones de Trabajo.5.3 CLASIFICACIÓN DE LOS COMPUTADORES Definir grupos que abarquen los distintos computadores es una tarea difícil.e. el cual es un sistema electrónico que procesa señales de tensión y corriente que representan variables físicas. Las máquinas de cómputo se fabrican en diferentes tamaños y bajo dos categorías. 2. y el hecho que estas máquinas eran diseñadas para la ejecución de una tarea y ninguna otra. 32. de acuerdo con la naturaleza de la información que procesan. en función de sus dimensiones y velocidad de operación. debido a que este formato garantiza el diseño de la CPU más sencilla posible y por ende la de menor costo. Para culminar esta sección conviene destacar que las instrucciones que no hacen referencia a la memoria del computador se denominan instrucciones sin dirección como se específica en la figura 2. 64 ó más. y en simulación de sistemas de control industrial. La otra categoría. Esta máquina es construida en base a dispositivos amplificadores operacionales. el cual emplea señales constituidas por patrones de unos y ceros para el procesamiento de la información El uso de señales binarias garantiza resultados con alta precisión en sistemas capaces de operar con gran números de bits. Los expertos del área acostumbran a clasificar los computadores en tres grupos principales: Computadores grandes o Mainframes.

. Un Minicomputador tiene algunas características de los grandes computadores. es un computador de propósito general con mayor potencia de cómputo que un micro. con cientos o miles de usuarios conectados a través de terminales locales. Para obviar tal obstáculo se acepta que un Mainframe es un gran computador comparado con un mini o un micro. en escala reducida. sino que abarca un alto costo. Un Microcomputador es un computador de una dirección cuya CPU se conoce como Microprocesador. y son usados ampliamente en control de procesos industriales de cierta complejidad. Su uso se dirige a la solución de problemas científicos que impliquen gran número de cálculos matemáticos. su organización se ajusta al modelo de la figura 2.2. pudiese ser un juguete comparado con los microcomputadores de la actualidad. y generalmente son usadas por grandes corporaciones. pero mucho menos que la correspondiente a un supercomputador. Tal comparación no solo se refiere al espacio que ocupa el sistema.Organización del Computador 40 como minicomputador a principios de la década del 80. Los computadores personales se incluyen en esta categoría. o por el canal telefónico mediante el uso de modems. y solo pueden conectársele algunos dispositivos periféricos. ultra alta velocidad de ejecución de las instrucciones garantizada por una CPU formada por un número de procesadores operando en el modo de multiprocesamiento. Comparados con los mini tienen poca capacidad de cómputo. Estas máquinas pueden funcionar en tiempo compartido. impensable capacidad de manejo de memoria. Pueden operar en tiempo compartido con un pequeño número de terminales conectados. centros importantes de investigación y universidades.

• Modos de direccionamiento y • Técnicas de gestión de entrada y salida. tales circuitos se conocen como unidades funcionales. La Arquitectura.1 GENERALIDADES En léxico de computación el término Organización distingue los componentes del computador y el modo en el cual están interconectados con el propósito de ejecutar el código almacenado en memoria. la arquitectura interna de un microprocesador genérico justificando la presencia de cada registro o unidad integrados en el dispositivo. 3. El conocimiento de las particularidades arquitectónicas del computador es un recurso esencial para que el programador desarrolle el soporte lógico de las aplicaciones. según las especificaciones fijadas por la arquitectura de la máquina. se presenta desde una óptica funcional. Atributos típicos de la arquitectura son: • Conjunto de instrucciones. En este capítulo. por su parte.Introducción al Microprocesador 41 Introducción al Microprocesador En el capítulo que precede se describe en una forma sencilla la estructura y el principio de funcionamiento del computador. 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 lógicos que conforman al µP y que contribuyen a realizar una tarea específica. . • Longitud de palabra. engloba aquellas propiedades del sistema que son determinantes del modo en el cual se ejecutan las instrucciones del programa.

2 Los detalles de la tarjeta de video y el modo de interconexión con el µP son transparentes para el programador.1 Los atributos de la arquitectura son visibles para el programador. Este no requiere conocer el tipo de tecnología usada para fabricar la memoria principal o de video. En la figura 3. Aquellos aspectos del sistema ocultos para quien escribe el código.2 puede observarse el diagrama funcional de una tarjeta de video con información no perceptible por el programador.Introducción al Microprocesador 42 • Conjunto de instrucciones • Longitud de palabra • Modos de direccionamiento • Técnicas de gestión de E/S Fig. Fig. Esto signifi- . constituyen la organización. tampoco el tipo de señales involucradas en el control de los distintos componentes del sistema. o los pormenores de los circuitos de interconexión entre la CPU y los equipos periféricos. 3. Ocurre a menudo que las máquinas ofrecidas por un fabricante determinado tengan la misma arquitectura pero estén organizadas en forma diferente. 3.

El término software se refiere a los algoritmos. Es conocido que la CPU de un microcomputador es un circuito integrado VLSI conocido como microprocesador.3. circuitos o bancos de memorias. y la tarjeta de circuito impreso que permite la interconexión eléctrica. los distintos componentes electrónicos.Introducción al Microprocesador 43 ca que una serie de computadores ejecutan el mismo repertorio de instrucciones pero difieren en la cantidad y la calidad de los recursos disponibles por el usuario. controlando y ejecutando un conjunto específico de instrucciones almacenadas . El μP es diseñado para operar como un procesador secuencial. al disponer de bloques en forma de μPs. Unidad Lógica y Aritmética y Unidad de Control. como ilustra el diagrama de la figura 3. dispositivos controladores. Para que un chip sea considerado un μP contener al menos las siguientes unidades: Registros internos. el software puede ser modificado de acuerdo con las necesidades de la aplicación. REGISTROS ALU UNIDAD DE CONTROL Fig. un diseñador lógico cumple funciones parecidas a un arquitecto. solo expansiones. instrucciones. la memoria y las unidades de E/S.3 Componentes básicos de un microprocesador Un sistema microcomputador completo está constituido por la CPU. y líneas de interconexión los cuales deben organizarse en un sistema capaz de realizar las funciones características de un microcomputador. Es el soporte físico. y lo forman los circuitos integrados. constituye el hardware del sistema. Los elementos que se combinan para constituir un μC pueden agruparse en dos categorías: Hardware y Software. el cual es equivalente a la unidad central de procesamiento de un computador de una dirección. La parte de la máquina que no acepta modificaciones. En este sentido. Como soporte lógico. Un diseñador de computadores tiene la responsabilidad de integrar los componentes físicos y lógicos que permiten a la máquina operar adecuadamente. 3. y programas que dirigen el funcionamiento de la máquina.

la unidad lógica y aritmética. .4. Los μCtrls de 8 bits son a menudo usado como controladores de teclado de microcomputadores (un 8049 controlaba el teclado del PC compatible IBM). Cada vez que el μP busca una instrucción en memoria. se trata de un microcomputador monopastilla o simplemente Microcontrolador (μctrl). Para realizar esta tarea. Estos dispositivos se diseñan para uso en aplicaciones específicas de control a diferencia del μP. algún tipo de memoria y unidades de E/S como ilustra la figura 3. y muchas otras aplicaciones con complejidad media. el PC se incrementa en uno para apuntar a la siguiente instrucción. en equipos de audio y procesamiento de imágenes y en el control de manipuladores industriales. Los dispositivos de 16 y 32 bits se encuentran en reguladores de sistemas de frenado antibloqueo de automóviles.Introducción al Microprocesador 44 en la memoria del μC. receptores de TV y otros electrodomésticos. y un grupo de registros para el almacenamiento temporal de la información. Si en el encapsulado del circuito integrado se encuentran además de las unidades que conforman un μP. CPU PUERTOS EPROM RWM TIMERS Fig. Un registro denominado contador de programa (PC) es el encargado del barrido del programa. hornos de microondas.4 Microcomputador en una pastilla. en sistemas de robots. un μP típico contiene: la unidad de control. La evolución de los μCtrls ha sido de tal magnitud y su uso tan extendido que es posible encontrar dispositivos avanzados de 16/32 bits con estructura de multiprocesador resolviendo tareas de control complejas en sistemas distribuidos de control industriales. controladores de tráfico urbano. en el control de motores de inyección directa. destinado aplicaciones de propósito general. en surtidores de gasolina. en control de ascensores. 3. en controladores inteligentes de discos.

3. 3. media y alta complejidad. consiste en especificar una tarea de cálculo simple y desarrollar un diagrama en bloques de una máquina capaz de ejecutarla.2. sino que a su vez permite introducir los diferentes elementos que conforman la arquitectura de un μC básico. Uno de los fabricantes más populares es la empresa MICROCHIP. consiste en utilizar un diagrama funcional de la máquina especificando la tarea que desempeña cada elemento. considerando que lo esencial es exponer en forma muy general la función que cumple cada unidad del µP. Por ejemplo. desarrollado paso a paso. Los modelos de la serie PIC18xxx son los de más alto desempeño. la cual ofrece una gran diversidad de modelos adaptables para aplicaciones de baja. Siemens ofrece los modelos C167 y C167CR. De esta forma es posible establecer las unidades funcionales que se requieren para la ejecución de una instrucción típica. Tabla 3. Un modo más eficaz y que permite al estudiante comprender en forma rápida como se organizan los componentes de un μC y que además justifica plenamente la presencia de cada unidad funcional en el interior del μP. El desarrollo de la máquina teórica propuesta no solo conduce a establecer los elementos internos constituyentes de la CPU. y National Semiconductor las series COPx00 y NS8050.Introducción al Microprocesador 45 Es común que toda empresa fabricante de μPs produzca también μCtrls.1. Instrucción ADD SUB IN OUT Código de operación 00 01 10 11 Función Suma Substracción Entrada de dato Salida de dato . Motorola fabrica las series M680x y M68H11/12.2 ARQUITECTURA INTERNA DEL MICROPROCESADOR El camino habitual para introducir la arquitectura de μC en un curso básico de microprocesadores. más que detenerse en los detalles de diseño de cada circuito. Conjunto de Instrucciones y código de operación asociado.1.1 Proceso de síntesis de un microprocesador Se propone la síntesis de una unidad central de procesamiento de ocho bits. capaz de ejecutar programas usando el grupo de instrucciones que se especifican en la tabla 3. en forma similar a como se presentó en el capítulo 2 la teoría básica del computador. Para iniciar el estudio del µP se usa un proceso de síntesis. de una máquina hipotética que ejecuta un conjunto mínimo de instrucciones.

ADD ejecuta la operación de adición de dos números binarios. el cual tiene una longitud de 8 bits.5.1 KΩ R9-R16 270 Ω D0-D7 S0-S7 ? 3. Este arreglo de bits permite a la CPU distinguir la instrucción y realizar la acción ordenada por ésta.5.5. ejecute la operación aritmética y presente el resultado en los indicadores luminosos. tal como ilustra la figura 3. La unidad de cálculo Para ejecutar las instrucciones ADD y SUB se requiere una Unidad Aritmética Lógica o ALU. VCC R1-R8 5. El par de instrucciones restantes IN y OUT permiten la comunicación de la CPU con el mundo exterior para adquirir datos y entregar resultados. abreviatura o siglas que en lenguaje inglés expresen la función que realiza la instrucción. Para simplificar la tarea del programador. Los sumandos son obtenidos de un arreglo de ocho interruptores lógicos S0S7 conectados a la CPU y el resultado de la suma debe desplegarse usando ocho diodos luminosos D0-D7. El conjunto de instrucciones del microprocesador El número binario denominado código de operación (OC) en las instrucciones de la tabla 3. de modo que pueda ejecutar un programa que lea dos números desde los interruptores. El problema consiste en establecer los componentes de la caja negra de la figura 3. la cual como se sabe es la parte de la CPU encargada de realizar operaciones de este tipo. respectivamente. Por ejemplo SBB r (Subtract Register with Borrow) produce que el contenido del registro r y la bandera de acarreo sean restados del contenido del acumulador. En el μP hipotético.1 corresponden a los dos bits de mayor peso del código de instrucción. mientras que SUB realiza la substracción. Diagrama general del sistema propuesto. .Introducción al Microprocesador 46 En principio se requiere escribir un programa para sumar dos números enteros N1 y N2. es usual que cada instrucción se identifique con una palabra.

Introducción al Microprocesador 47 Registro A (A) Registro B (B) Unidad Lógica y Aritmética (A+B) Fig. Ambos registros deben conectarse a las entradas a la ALU. sino que un .6 representa los 8 bits del bus interno del µP. o: (A) ← (Periférico) Esta transferencia implica que la CPU debe tener un camino externo de datos o bus de datos externo (D0-D7) para conectar el periférico al µP. La instrucción IN permite transferir datos desde el periférico de entrada hasta el registro A conectado a la entrada izquierda de la ALU. El acumulador es un registro esencial que actúa como fuente o destino de la información. Muchos μPs presentan una arquitectura donde el resultado de toda operación ejecutada por la ALU se almacene en el acumulador. es el camino interno de datos del µP. el Acumulador y el registro B de propósito general. Cada línea de interconexión de la figura 3. El medio de comunicación entre los registros y la ALU. ambos de ocho bits. los operandos deben ser obtenidos desde el exterior del μP y cargados en los registros de entrada a la ALU. Durante una operación de entrada. Periférico de entrada Si se escribe un programa para realizar una operación con dos números binarios de ocho bits. en la práctica la conexión entre dispositivos externos al sistema y la CPU se realiza mediante un registro externo. se requieren dos registros para almacenarlos: el acumulador (A) y un registro de propósito general B.6 La Unidad Lógica Aritmética.6. 3. El término entrada/salida (E/S) cubre toda transferencia o intercambio de datos entre el µP y un dispositivo externo. Debido a que ambas instrucciones involucran dos números binarios. los datos no son transferidos directamente desde el periférico al acumulador. La ejecución de IN resulta en que el byte suministrado por el periférico de entrada es copiado en el registro A. como puede observarse en la figura 3. En la figura 3.7 se muestra el periférico1 de entrada conectado directamente al registro acumulador.

8 Operaciones de E/S. pero sólo uno de éstos puede comunicarse a la vez con el µP.Introducción al Microprocesador 48 circuito digital. A un μC se le conectan distintos dispositivos de entradas de acuerdo con la aplicación a la cual está destinado. . Operación de entrada Operación de salida Fig. 3.7 Un periférico de entrada permite introducir datos al μC. En este caso. denominado en forma genérica puerto de entrada. De modo que es necesario asignar una dirección a cada periférico para seleccionarlo en el momento apropiado y así dejar abierta la posibilidad de expansión de la máquina. al puerto donde se conectan los interruptores se le asigna la dirección 1. Periférico 1 S0-S7 Registro A (A) Registro B (B) Unidad Lógica y Aritmética (A+B) Fig. 3. sirve como medio de interconexión entre el equipo externo y el bus de datos del µP. La realización de una operación de salida la permite un puerto de salida.

un puerto de entrada puede realizarse usando un buffer tri-estado y si se requiere capacidad de almacenamiento de la información que llega al puerto. debido a que la carga tiene efecto acumulativo. el µP activa el paso de información a través de los buffers aplicando un pulso de habilitación SEL de nivel bajo el cual proviene del decodificador de puertos. En su forma más sencilla. Dos puertos de entrada no pueden conectarse simultáneamente al bus sin que ocurra un deterioro de la información transferida. se usa un registro latch. La estructura de puerto de entrada básico se presenta en la figura 3. 3. Los interruptores se conectan al bus de datos del µP por medio de ocho buffers de tres estados. BUS DE DATOS D7 DISPOSITIVO DE ENTRADA REGISTRO DE 8 BITS BUFFER DE TRES ESTADOS D6 D0 SEL Fig. ocurre cuando se está realizando una operación de lectura en el puerto como respuesta a la ejecución de una instrucción IN. . • En principio todo dispositivo de entrada que se conecte al bus de datos debe tener salidas de tres estados para evitar la carga de las líneas de datos por parte de otros periféricos que no estén seleccionados. • Para puertos de salida tal consideración reviste importancia cuando varios equipos externos que funcionan conjuntamente con el μP están conectados al bus.10.9. es responsabilidad del dispositivo de entrada cargar el dato correspondiente en el latch e indicar a la CPU que hay un byte listo para transferencia. A continuación. Un circuito práctico para introducir los datos a la CPU hipotético se presenta en la figura 3. El acoplador tri-estado de salida impide/permite el flujo de información desde el puerto hacia el bus de datos del microprocesador. Cuando se usa un registro de almacenamiento.Introducción al Microprocesador 49 La estructura de bus único del μP impone ciertas reglas para el acoplamiento de circuitos o equipos periféricos a los terminales de datos del procesador.9 Puerto de entrada para un sistema basado en microprocesador. La activación de la línea de selección de puertos. El puerto de entrada necesario para conectar los interruptores S0-S7 no requiere un registro latch porque el estado lógico 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.

.Introducción al Microprocesador 50 VCC R1-R8 Puerto 01 CON1 S0 .10 Puerto de entrada al μP. 3.S7 Fig.

3. esto es: (A) ← (Puerto 1) Periférico de salida El dispositivo externo de salida lo conforma un arreglo de ocho diodos luminosos que indican en formato binario el resultado de la operación ejecutada por la ALU. Al ser el μC de ocho bits (un byte). Extendiendo el código de instrucción Asignar la dirección 1 al dispositivo de entrada obliga a incorporar un operando a la instrucción IN para especificar el dispositivo origen de los datos. Esto significa que el arreglo de 8 bits que define la instrucción contiene ahora el código de operación y un operando que especifica la dirección del periférico. el formato binario de la palabra de la instrucción contiene igual número de bits. igual al resultado de la suma. En este caso los bits D7 y D6 especifican el OC.11. Los bits D5-D2 se definen posteriormente. es transferir al acumulador la palabra binaria presente en los interruptores del periférico 1 de entrada. como se indica en la figura 3. . al cual se le asigna la dirección 2. (Puerto 2) ← (A) De modo que la instrucción de salida OUT también requiere un operando para especificar la dirección del puerto al cual se conecta el periférico de salida. Como consecuencia. En la figura 3.13 se usan los dos bits de menor peso del código de la instrucción. habilita la lectura y carga en el acumulador del estado lógico de S7-S0.Introducción al Microprocesador 51 De este modo. La acción resultado de la ejecución de la instrucción IN 01. a un periférico con dirección 2. Como se observa el la figura 3. Para conectar los indicadores luminosos al bus de datos del microprocesador es necesario un puerto de salida. activa en nivel bajo. Un operando es necesario para la instrucción IN puerto. mientras que D1 y D0. El bus de datos del µP se conecta al conector CON1.12 se ilustra la disposición de los LEDs en el conjunto del sistema microcomputador. corresponden al código de operando. Código de operación Código de operando D5 X D4 X D3 X D2 X D1 D0 Instrucción IN Operando Puerto 1 D7 D6 1 0 0 1 Fig. la instrucción OUT 02 transferirá el contenido del registro A. esto es. la entrada de selección PE01 .11.

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 lógico de los bits de entrada es retenido por los interruptores. Código de operación Código de operando D5 X D4 X D3 X D2 X D1 D0 Instrucción OUT Operando Puerto 2 D7 D6 1 1 1 0 Fig. Las características operacionales del periférico conectado al sistema determina cuan complejo es el circuito de interconexión.Introducción al Microprocesador 52 Periférico 1 IN OUT Periférico 2 (A) Registro A (A) Registro B (B) Unidad Lógica y Aritmética (A+B) Fig. El diagrama eléctrico del puerto de salida para la máquina bajo síntesis es el de la figura 3. de modo que es necesario que información sea capturada por el circuito de interconexión para que esté disponibles después que culmina la operación de escritura en puerto.14. un puerto de salida básico consiste de un simple registro de almacenamiento paralelo que realiza la conexión entre el bus de datos del microprocesador y el dispositivo de salida. donde se observa que. 3.13 Un operando es necesario para la instrucción OUT puerto. durante la operación de escritura a puerto. pudiendo requerirse desde simples registros y/o buffers de tres estados hasta circuitos LSI programables de propósito general. la activación de una señal de selección de puerto de salida 2 PS02 permite la carga del . como ilustra la figura 3. Un periférico de salida permite visualizar el resultado de la operación. En la práctica. 3.12. Para seleccionar la lógica que realiza el puerto de salida es necesario considerar que los datos enviados por el μP a un puerto determinado durante la ejecución de una instrucción OUT puerto permanecen en el bus de datos un espacio muy corto de tiempo.15.

es el B. (B) ← (A) Es claro que la ausencia de operandos en la nueva instrucción de transferencia denominada MOV. es necesario considerar que la suma que debe realizar la máquina requiere dos números N1 y N2 . esto es. Proveer un mecanismo para mover el contenido de A al registro B. se requieren ahora tres bits como mínimo para especificar el código de operación. se debe a que el único registro interno del µP que puede actuar como destino. implica introducir una nueva instrucción: MOV (mover). . Un problema emergente se debe a que la instrucción IN puerto transfiere el contenido del periférico 1 (N1) al registro A y no existe en el lenguaje de la máquina una instrucción que permita trasladar N1 al registro B para proceder a leer el segundo sumando N2. La tabla 3. los cuales deben cargarse en los registros A y B conectados a las entradas de la ALU. se asume que su ejecución implica la transferencia del contenido de A hasta B. El conjunto extendido de instrucciones Establecida la forma en la cual el µP obtiene los operandos desde los interruptores lógicos y como presenta el resultado. Por ejemplo: MOV r copia el contenido del A al registro r. Al incorporarse MOV al conjunto de instrucciones del μP. 3. debe añadirse el operando respectivo al código de la instrucción. para que ésta pueda ejecutar la operación aritmética. Aunque MOV carece de operandos. BUS DE DATOS D7 D6 REGISTRO DE 8 BITS DISPOSITIVO DE SALIDA D0 CLK SEL Fig.Introducción al Microprocesador 54 contenido del bus de datos en el registro de salida y la presentación del resultado de la suma. En caso de la existencia de más registros.14 Puerto de entrada para un sistema basado en microprocesador.2 presenta el conjunto expandido de instrucciones y los nuevos códigos de operación.

15 Puerto de salida del μP .Introducción 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 Fig. 3.

(B) ←(A) El dato en B es reemplazado por el de A. Conjunto de instrucciones incluyendo MOV. Un formato de palabra doble (cuatro bytes) lo usan los microprocesadores fabricados por INTEL: 386 y 486. La longitud o número de bits que componen una palabra varía de un sistema a otro. . casos donde el ancho del bus de datos es de ocho bits. out 2 . y dos bytes una palabra.16a. mientras que N2 se mantiene en el acumulador. mientras que una secuencia de 8 bits constituye un byte. (A) ←(A + B) . . El contenido de A es sustituido por el estado de los interruptores. caracteres y cualquier otro tipo de información en un arreglo de bits denominado Palabra. Se presenta el resultado de la suma. (A) ←( Estados de S7-S0) add . El primer operando N1 es obtenido desde los interruptores y transferido al registro B. Un bit (0 ó 1) se define como la cantidad mínima de información posible de expresar. Formatos para representación de información Antes de continuar con la síntesis de la máquina conviene realizar una pregunta: ¿Cuál formato se usa para almacenar y procesar los datos dentro de un μC? Lo común es agrupar los números. Código de operación Instrucción Operando ADD SUB IN Puerto 1 OUT Puerto 2 MOV D7 D6 D5 D4 X X X X X D3 X X X X X D2 X X X X X D1 X X D0 X X 0 0 1 1 0 0 1 0 1 1 1 1 1 1 0 0 1 X 1 0 X Con el conjunto de instrucciones disponible es posible escribir un programa que realice la suma de dos números. Se ejecuta la suma y el resultado se coloca en A. mientras que los µPs Pentium usan palabras cuádruples (ocho bytes). mov . como se especifica el patrón mostrado en la figura 3. En la máquina bajo desarrollo y en el microprocesador INTEL 8085A. in 1 . La instrucción ADD ejecuta la operación (A) (A) + (B) o (N1 + N2 ) (N2 ) + (N1) . La secuencia de instrucciones siguiente realiza esta tarea. (A) ←( Estados de S7-S0).Introducción al Microprocesador 56 Tabla 3. Programa 1 in 1 . El resultado de la suma se envía al puerto de salida por medio de la instrucción out 2. se considera una palabra formada por un byte como se observa en la figura 3.(LEDs) ←(A) .2.16b.

Formato de palabra: (a) μPs INTEL: 8086. El código ASCII estándar. Que un byte contenga ocho bits no es. El microcomputador debe comunicarse con distintos periféricos como teclados y monitores.Introducción al Microprocesador 57 Fig. Tabla 3. El alfabeto. símbolos y algunos comandos forman un conjunto de aproximadamente 130 elementos. los cuales entregan y reciben información alfanumérica.3. los números. . los cuales pueden representarse el código de 7 bits (27=128) ASCII estándar (Standard Code for Information Interchange). 3. < = > ? @ 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 → 7510 → 2310 010010112 000101112 (End of Transmission Block) . una elección realizada al azar.16. D6-D4 000 0 0 1 2 3 4 5 6 7 8 9 A B C D 001 1 010 2 011 3 100 4 101 5 110 6 111 7 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 K ETB D3-D0 E F 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 ! " # $ % & ' ( ) * + . (b) μP de ocho bits 8085A. en modo alguno. 80186 y 80286. / (4B16) (1716) 0 1 2 3 4 5 6 7 8 9 : .

16b es apreciable que una secuencia de ocho bits o byte está formado por dos nibbles. permitiendo la representación de 65536 símbolos diferentes en diversos idiomas.1. La memoria del sistema Aunque fue posible escribir un programa para la máquina hipotética. En tareas de impresión en papel. Para realizar la suma de los dos números N1 y N2. Los 128 símbolos ASCII originales (0 –127) representan letras. el estado del bit D7 indica cuando se imprime en modo texto (D7 = 0) o modo gráfico (D7 =1). y caracteres de control. es evidente que el ancho de 8 bits para el byte es una excelente elección. desarrolló su propio estándar de codificación denominado EBCDIC. lo cual requiere cuatro bits (un nibble). Tanto las instrucciones del programa como los datos deben estar almacenados en algún tipo de memoria. El código EBCDIC es utilizado principalmente en los computadores desarrollados por IBM. Un esquema de codificación más moderno lo constituye el UNICODE. el cual utiliza 16 bits por carácter. en la mayoría de los μPs existe una instrucción que realiza el ajuste decimal del acumulador después de la ejecución de una suma. El código ASCII ha sido extensamente usado para representar información desde los inicios de la computación. E. Al utilizar 8 bits para la codificación es posible representar 256 caracteres en lugar de los 128 caracteres del ASCII estándar. es común emplear el código BCD (números del 0 al 9). Para la presentación visual de información resultado de cómputos realizados por el procesador. por ejemplo. Los valores desde 128 hasta 255 (80H-FFH) constituyen lo que se conoce como código ASCII extendido que incluye signos internacionales. signos de puntuación. Si se usa el bit D7 restante para la prueba de error de paridad. caracteres gráficos y símbolos especiales que permiten cierta capacidad gráfica cuando se usa el modo texto. estos no . aun es necesario definir todos los componentes de la CPU y del microcomputador que permitan la ejecución del código. B.Introducción al Microprocesador 58 El código estándar americano para intercambio de información es el más usado en μC para representar caracteres alfabéticos y numéricos. En la actualidad existen nuevos códigos que superan las deficiencias características del ASCII. para almacenar datos. dígitos. H y L. El sistema solo dispone de dos registros internos. acrónimo de Extended Binary Coded Decimal Interchange Code (Código Ampliado de Caracteres Decimales Codificados en Binario para el Intercambio de la Información). C. la CPU debe ejecutar el programa representado por la secuencia de instrucciones del programa. D. de donde puedan ser obtenidos en el momento preciso para que el μP realice su función. En la figura 3. A y B. entonces ¿Desde donde el μP obtiene las instrucciones? Una consideración de vital importancia en sistemas basados en μPs es el subsistema de memoria. Aun cuando los μPs comerciales típicos contienen un banco de registros internos el 8085A por ejemplo posee los registros de ocho bits: A. La empresa IBM.

Por ahora el lector no debe preocuparse del modo en que el programa es cargado en la memoria y de cómo es transferido a la CPU. Cada registro individual de la memoria se conoce como posición o celda memoria. se supone que se usa un circuito integrado de memoria que permite el almacenamiento del programa y su posterior recuperación. Cuando se realiza esta acción. Este nuevo componente de la máquina puede observarse en el diagrama funcional de la figura 3. mientras que la obtención de la información contenida en una determinada celda implica una operación de lectura de la memoria. Por lo tanto es necesario conectar un circuito externo al μP que actúe como la memoria del sistema. generalmente con entradas y salidas comunes. En un circuito integrado diseñado para almacenar información. La . Periférico 1 IN OUT Periférico 2 (A) Registro A (A) Registro B (B) Unidad Lógica y Aritmética Memoria (A+B) Fig. siendo cada registro de uno. son circuitos integrados LSI diseñados para almacenar una gran cantidad de información en un número específico de registros. más bien están diseñados para el almacenamiento temporal de información. cuatro u ocho bits. La memoria contiene el programa. se habla de una operación de escritura. el modo de almacenamiento y la tecnología empleada en su fabricación.16. Para el sistema en síntesis. de modo que para lograr acceso a una determinada posición se requiere especificar la dirección correspondiente. Cada celda tiene asignada una dirección específica. además el número de registros internos es muy reducido como para contener un programa.16. Las memorias que se usan en la actualidad para el propósito especificado. Existen diversos tipos de memorias caracterizadas por: la forma de acceso de los datos.Introducción al Microprocesador 59 pueden usarse para almacenar las instrucciones. es posible cargar las instrucciones del programa o los datos necesarios para la ejecución del programa. 3.

18 se observan los componentes internos del circuito integrado.17. . 3. 3.Introducción al Microprocesador 60 figura 3. Símbolo de un circuito de memoria. Líneas de Direcciones n Líneas de E/S de Datos m MEMORIA Líneas de Control 2 Fig. Fig. 18 Arquitectura interna de una memoria.17 muestra el símbolo lógico de un dispositivo de memoria de lectura/escritura y en la figura 3.

de 1. como se dijo. la dirección 0 corresponde a la primera posición y la dirección 2n-1 identifica a la posición final. Líneas de direcciones (A0-An-1) especifican la celda de memoria a la cual se desea acceso. El número de posiciones disponibles en el circuito es P = 2n. y • Algunas líneas de control. Un nivel lógico alto en esta entrada. El decodificador de direcciones en la figura 3. pudiendo ser. Si se usan chips con 4 líneas de E/S de datos. un circuito de 8 Kbytes debe tener: n = log 2 (2 ) + 10 = 13 Líneas de direcciones. En el caso de la máquina hipotética conviene una memoria con 8 líneas de datos por ser el μP de tal ancho de palabra. 3 y un chip de 256 bytes (¼ Kbytes) requiere: n = log 2 ⎜ ⎛ 1 ⎞ −2 + 10 = log 2 2 + 10 = 8 Líneas de direcciones. y CS (Chip Select) que permite la selección del circuito. Por ejemplo. Las líneas de control son dos para la memoria de la figura 3.Introducción al Microprocesador 61 Las líneas de acceso típicas de un circuito de almacenamiento de lectura / escritura. considere la realización de una operación de lectura. son: • n líneas de direcciones. cuyo nivel lógico especifica si se realiza una operación de lectura/escritura (1: Lectura. El valor de m es variable en dispositivos comerciales.18: R/ W (Read/Write). 4 u 8 bits. Para describir el modo de funcionamiento del circuito de almacenamiento. Los pasos a seguir para esta tarea son: . • m líneas de E/S de datos.18 procesa la información contenida en las líneas de direcciones para conectar la celda seleccionada a las líneas de entrada y salida de datos El módulo de control gobierna los buffers bidireccionales de E/S fijando el sentido del flujo de información durante una operación de acceso a la memoria. Para tener acceso a P = N x 1 Kbytes posiciones se requieren: n = log 2 (N) + 10 Líneas de direcciones. 2⎟ ⎝2 ⎠ ( ) Las líneas de E/S de datos (D0-D7) proveen el medio para la transferencia de información hacia y desde la memoria. 0: Escritura). coloca en estado de alta impedancia las líneas de E/S de datos. se requieren dos chips para el almacenamiento de las instrucciones.

A0-An-1 Dirección válida CS R/ W D0-D7 Datos válidos Fig. 3. . 3.19. cuyo símbolo se muestra en la figura 3. Una de las características que distinguen a un circuito de almacenamiento es la capacidad de la memoria: Esta es: N = 2n x m. A0 – A7 IO0 . Seleccionar la memoria colocando un nivel lógico bajo en la entrada CS . m = Ancho de la palabra o números de líneas de datos. Para la máquina hipotética se elige un circuito con capacidad de 512 x 8. 4.20. Ciclo de lectura del circuito de memoria. especifica un chip de 256 posiciones organizadas en palabras de 8 bits. 2. donde: N = Capacidad total en bits. 2n = Número de posiciones. Así.IO7 CE OE WE MODO Líneas de direcciones E/S de datos Seleccionar Chip Habilitar Salida Habilitar Escritura WE CE VIH VIL VIH VIL VIL OE VIL E/S O7 -O0 I7 -I0 Z Lectura Escritura Inhibir x VIH x Fig. 3. Presentar un nivel lógico TTLalto en la línea R / W . Transcurrido el tiempo de acceso. la expresión 256 x 8 = 28 x 8 = 2048 bits. Circuito de memoria de lectura/escritura de la máquina hipotética.Introducción al Microprocesador 62 1.20. Aplicar la dirección a las entradas A0 – An-1 . la memoria coloca el byte en las salidas de datos D0 -D7.

Por ahora se omite el esquema de interconexión entre el µP y la memoria y se continúa con la síntesis del procesador. Dirección 0 1 2 3 4 5 Binario 10100001 01000000 10100001 00100000 11100010 xxxxxxxxx Nemónico in 01 mov in 01 add out 02 511 xxxxxxxxx Fig. es necesario dotar a la CPU de un nuevo registro interno de 8 bits o Registro de Instrucciones (IR) . OE y WE . mientras que para leer los datos almacenados se pone a cero la señal de habilitación de salidas OE .21 una imagen de la forma en que la secuencia de instrucciones en formato binario ocupa la memoria. La conexión del circuito de memoria al µP exige que la unidad de proceso tenga al menos tanta líneas de direcciones como el circuito de memoria. la fase de búsqueda del código de operación en memoria y la de ejecución de la instrucción. El programa de suma del ejemplo 3.Introducción al Microprocesador 63 El circuito integrado seleccionado para el sistema bajo síntesis tiene: 9 líneas de direcciones A8 . la señal de habilitación de escritura WE debe ponerse en nivel lógico cero. ocho líneas de datos y terminales para generación de comandos de control de lectura y escritura.21.20 se presenta información sobre los modos de funcionamiento del circuito de memoria.2. 8 líneas bidireccionales de datos Io7 -Io0 para la lectura y escritura de la información almacenada y 3 líneas de control: CS . mostrándose en la figura 3. La CPU debe entonces interpretar el código de la instrucción para determinar la función a realizar. En la fase de búsqueda. Ejecución de las instrucciones El procesamiento de cada instrucción se realiza durante un ciclo de instrucción. Esto implica que para almacenar el código a descifrar. 3. Los bits del código de instrucción aun no definidos se suponen cero lógico. Para una operación de entrada de datos. A la izquierda de la figura 3. sin importar por los momentos como lo hace. En ambos casos la entrada de selección de chip CS debe estar en estado bajo. El programa 1 se carga en la memoria de la máquina. el μP obtiene la instrucción desde la memoria.A0 para proveer acceso a las 512 celdas de almacenamiento.1 se carga en la memoria del sistema. el cual consta de dos tiempos básicos como se mencionó en la sección 2.

como se observa en la figura 3. En general puede decirse que la secuencia búsqueda-decodificación-ejecución. Este es un programa de microinstrucciones que no hacen referencia a la memoria principal. . el ID recibe la información almacenada en el IR y coloca en nivel alto la salida que corresponde a la instrucción obtenida desde la memoria.23. Se observa que si la instrucción depositada en el registro de instrucciones es IN 01. Para ilustrar el modo de operación de la lógica de decodificación durante una transferencia entre registros. la salida del decodificador etiquetada in se activa. Aunque existe una estrecha vinculación entre el conocimiento que tenga el programador sobre el modo en que se ejecutan algunas instrucciones y la calidad. La salida del registro de instrucciones es la entrada del decodificador de instrucciones. consiste de una secuencia de microperaciones controlados por un Microprograma. ocasionando que el estado de los interruptores lógicos en el periférico 01 se transfiera al acumulador. y tiempo de desarrollo de un programa determinado. aun no mencionadas. Este circuito usa la información almacenada en el IR y especifica cual microprograma debe ser ejecutado para completar el procesamiento de la instrucción.22.Introducción al Microprocesador 64 add sub in out mov Decodificador de Instrucción Registro de Instrucción Instrucción Fig. y es diseñado en base a subcomandos los cuales son trasladados a comandos de máquina por hardware. se considera ahora el circuito de la figura 3. no se considera imprescindible realizar en este trabajo un análisis detallado del microprograma de control del μC y la forma como las microinstrucciones generan las distintas señales internas y externas que controlan la transferencia entre registros. la rotación del acumulador.22. y la comunicación con la memoria y los dispositivos de E/S. El μprograma para cada instrucción reside en la sección de decodificación. La función lógica de interpretación o decodificación de la instrucción contenida en el IR la realiza un Decodificador de Instrucciones (ID) conectado a la salida del IR. De mayor provecho en esta sección introductoria es presentar en forma conceptual y muy simple el modo de funcionamiento del decodificador de instrucciones.22. eficiencia. 3. Como muestra la figura 3. de hecho el tratamiento de este tópico lo contemplan programas de estudio de asignaturas que el lector cursará en el futuro. el funcionamiento de la ALU. la salida del decodificador con etiqueta out pasa a nivel lógico alto y los diodos luminosos conectados al periférico 02 indicarán el estado lógico de los bits del registro acumulador. siendo ejecutado por las unidades de temporización y control del μP. En caso de ser OUT 02 la instrucción obtenida de la memoria.

El registro acumulador.24 se introduce un registro interno de propósito específico denominado Registro de Dirección de Memoria (MAR). El generador de direcciones La forma en que opera la unidad de memoria de programa de la máquina implica que el μP debe generar direcciones para poder obtener cada una de las instrucciones del programa almacenado. Las salidas del decodificador de instrucciones permiten la ejecución de la instrucción. 3. por ejemplo. Para que la CPU pueda obtener. Esta información debe mantenerse estable en las líneas de direcciones de la memoria hasta que culmine la operación de acceso. el cual retiene la dirección de la instrucción cuya búsqueda progresa.Introducción al Microprocesador 65 Interruptores Lógicos in Acumulador out Indicadores lógicos Fig. La dirección debe permanecer en el bus de direcciones al menos el tiempo de acceso del CI de memoria. En la práctica. En general para que el μP pueda establecer comunicación con cualquier dispositivo externo a la CPU que tenga dirección asignada. complemento y otras funciones lógicas. el cual es en realidad el origen del bus de direcciones .23. para permitir que éste coloque en el bus de datos la información que contiene la celda seleccionada. la instrucción almacenada en la memoria debe suministrar al dispositivo de almacenamiento la dirección de la celda que contiene la instrucción.23. Como ilustra la figura 3. además de interactuar con la ALU. puede considerarse que la función básica de transferencia paralela entre registros es ilustrada apropiadamente con el sencillo ejemplo de la figura 3. No obstante. es en realidad un registro de desplazamiento con cierta cantidad de lógica asociada y entradas de reloj para permitir la realización varias operaciones. durante la fase de búsqueda. tales como desplazamientos de su contenido hacia la derecha o izquierda. sea memoria o periférico de E/S. se requiere el uso del MAR. la lógica de control y demás componentes de un μP real es un arreglo intrincado de puertas lógicas y biestables que requiere la intervención de numerosas señales de control para ejecutar las diferentes instrucciones.

existe otro detalle de interés. de modo que en todo momento contenga la dirección de la siguiente instrucción a ejecu- . sino que debe estar en capacidad de realizar una exploración secuencial de la memoria para poder obtener todo el programa. El contador de programa permite el barrido de las direcciones que ocupa el programa.24. 3.Introducción al Microprocesador 66 Registro de Dirección de Memoria Líneas de direcciones add sub in out mov Decodificador Registro de de Instrucción Instrucción Instrucción Líneas de datos Memoria Fig. Para generar las direcciones consecutivas que permitan la ejecución del programa. Se sabe que la ejecución del programa de suma de dos números binarios requiere que la CPU tenga acceso a un rango de direcciones comprendido entre las posiciones 0 y 4 de la memoria. Esto significa que el μP no solo debe generar una dirección. Resuelto el problema de generar dirección de la posición de memoria que ocupa cada instrucción. Pulsos Contador de Programa Reset Registro de Dirección de Memoria Líneas de direcciones add sub in out mov Decodificador de Instrucció Registro de Instrucción Instrucción Líneas de datoss Memoria Fig.25. se usa un contador que se incremente en 1 cada vez que se ejecuta una instrucción. El registro de direcciones de memoria contiene la dirección de búsqueda de la instrucción. 3.

también cuando se aplica potencia a un μC inicialmente desactivado. En realidad basta con un bit extra. sino que dispone de una entrada adicional de inicialización o RESET. En μC reales la línea de RESET tiene otras funciones. Cuando esta señal es activada.Introducción al Microprocesador 67 tar. Fig. 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. es patente la necesidad de un byte adicional para especificar todas las direcciones. Ahora es necesario establecer la longitud de los nuevos registros internos del µP. Al PC no solo se aplican pulsos de reloj. lo cual es la capacidad de direccionamientos de los μP de 8 bits. pero como la máquina opera con formato de 8 bits se usa un múltiplo de un este valor. El MAR mantiene la dirección aplicada a la memoria hasta el final de la fase de ejecución. Como se observa en la figura 3. 3. por ejemplo: un programa en progreso que funcione mal puede ser abortado por medio de esta señal.26. Dado que con 8 líneas de direcciones solo es posible el acceso a todas las celdas de una memoria con capacidad de 28 = 256 posiciones.26. el contenido del PC va a cero. El contador de programa usa secuenciamiento implícito para actualizar su contenido Los registros A y B de nuestra máquina son de 8 bits al igual que el registro de instrucciones. Cuando se inicia la fase de búsqueda de una instrucción. incluyendo al 8085A. un circuito de autoreset permite la estabilización del μP hasta . Este nuevo componente interno de la CPU es el Contador de Programa (PC). el µP carga en el MAR el contenido del PC e incrementa a éste para apuntar a la siguiente posición de memoria. Al usarse dos bytes para especificar una dirección.25. La lógica de incremento del contador de programa es mostrada en la figura 3. Para establecer el número de bits del registro de memoria MAR y del contador de programa PC. El hecho que el MAR tenga capacidad para almacenar dos bytes le permite al μP tener acceso a 216 = 65536 posiciones de memoria. debe aplicarse una dirección de 9 bits a las líneas de entrada de direcciones del dispositivo de almacenamiento. se deduce que el contador de programa y el registro de direcciones de memoria deben ser ambos de 16 bits. ejecutando el programa desde la dirección de inicio. considere que para tener acceso a las 512 (29) posiciones de la memoria SRWM seleccionada para el sistema.

El microprocesador como máquina de estados El procesamiento de una instrucción implica la ejecución de una secuencia de operaciones. Fig. En general la extensión del ciclo de instrucción varía de una instrucción a otra. Cada ciclo del reloj del sistema es un estado Ti. cada una de las cuales inician una o más microoperaciones a la vez. al permitir representar con un diagrama de transición de estados las distintas operaciones que la máquina realiza durante la ejecución de una instrucción. estando la ejecución de cada paso del microcódigo vinculada con un estado interno o ciclo de reloj. Para definir el diagrama de estado considere que al μP se le aplica un pulso de reset que pone en cero el contador de programa. decodificarla. El ciclo de instrucción se inicia en el instante que la CPU sale del estado TR de RESET. la ejecución de ADD exige más ciclos de reloj que los necesarios para MOV. 3. Para que el μP realice una suma gasta cuatro estados internos para buscar la instrucción en memoria. típicamente un 75 % del valor nominal de la fuente de energía del CI. mientras que para completar MOV usa tres estados. Una ventaja de considerar al μP como una máquina secuencial cuyas funciones están asociadas con el paso por cierto número de estados internos es que simplifica notablemente la comprensión del modo de funcionamiento del procesador. Por ejemplo.Introducción al Microprocesador 68 tanto la línea de alimentación alcance un valor de tensión adecuado para la correcta operación del sistema. o expresado de otra manera.28 se representan como un diagrama de transición de estados. Toda secuencia de microinstrucciones es sincronizada por el reloj maestro del μP.27 Cada ciclo del reloj se denomina estado. es claro que el tiempo que el CPU emplea en la ejecución de la instrucción ADD es mayor que el que invierte en procesar la instrucción MOV. porque después de la decodificación es suficiente con realizar una transferencia desde el registro A hasta el B. y para completar cada ciclo de instrucción se requieren varios estados. A continuación se describe los eventos que ocurren a partir del estado interno inicial T1 y en la figura 3. y transferir el resultado al registro acumulador. sincronizadas por el reloj del μP. usar la ALU. . debido a que ADD requiere un mayor número de operaciones internas para ser completada. de acuerdo con la cantidad de microinstrucciones necesarias para completar el procesamiento de una instrucción en particular.

Dependiendo si la instrucción es de transferencia de datos o aritmética se usan uno ó dos estados adicionales (T3 y T4) para completar la ejecución. se ejecuta la transferencia respectiva a. (bus de direcciones) ← (PC) T2: La instrucción en la celda de memoria seleccionada por el MAR se transfiere al registro de instrucciones y se decodifica. Para facilitar la comprensión del mecanismo que la CPU utiliza para el procesamiento del conjunto de instrucciones es usual utilizar el término ciclo de máquina como . La fase de búsqueda de la instrucción corresponde a los estados T1 y T2. reset TR reset T1 T2 instrucción ADD SUB IN OUT MOV T3 T4 Fig.Introducción al Microprocesador 69 T1: El contenido del PC que corresponde a la dirección de memoria donde está almacenado el código de operación se presenta en el bus de direcciones y se almacena temporalmente en el MAR. o entre registros. en tanto que la decodificación se realiza al inicio de la fase de ejecución. durante el estado T4 se ejecuta la operación de la ALU. T4: En el caso de una instrucción aritmética ADD o SUB. (IR) ← (OC) T3: Si el código de operación de la instrucción corresponde a IN. y se pasa a T3 para transferir el resultado al registro acumulador. Conviene aclarar que en la mayoría de los μPs la fase de búsqueda finaliza en el instante que el OC es almacenado en el IR. OUT o MOV.28 Diagrama de transición de estados del μP. 3. mientras que la decodificación del OC se realiza al final de T2.

29 Contador de estados y decodificador de estados En el diagrama de la figura 3. pudiendo decirse que el ciclo de una instrucción lo constituyen un número determinado de estos ciclos. el cual identifica la instrucción cuya ejecución está en proceso. y la información proveniente del contador de estados (sincronizado por el reloj del μP) para genera múltiples señales de control aplicadas a todos los componentes internos de la CPU que intervienen en la ejecución de la instrucción. Fig. Por ejemplo. estando M1 formado por dos estados (T1 y T2). • Un Decodificador de Estados.Introducción al Microprocesador 70 medida de la duración de una determinada secuencia de estados durante los cuales el μP completa una acción determinada. estas son: • Un Contador de Estados de 2 bits (4 estados). . En el caso que nos ocupa. Observe que las señales S0 y S1 están disponibles como terminales de salida del μP.. búsqueda de OC. y quedando claro que para toda instrucción M1 corresponde al ciclo de máquina de búsqueda.. lectura a puerto. La unidad de control Para el control de una máquina secuencial de estados es imperativa la introducción de dos nuevas redes lógica en el μP. 3.29 se aprecian los componentes incorporados a la CPU. . pudiendo ser usadas desde el exterior para registrar el progreso de la ejecución de una determinada instrucción. Esta unidad de control y temporización acepta: la salida activa del ID. el ciclo de instrucción de MOV consta de dos ciclos de máquinas M1 y M2 con diferentes duraciones.

ambas activas en nivel bajo. La operación eficiente de un sistema basado en μP depende en forma crítica de la capacidad de la CPU para controlar los circuitos asociados al μC. Además.30. Una red lógica de decodificación y control de la transición de estados sincronizada por un reloj de frecuencia del orden de MHz garantiza un μP con gran velocidad de operación.Introducción al Microprocesador 71 Periférico 1 IN OUT Periférico 2 Registro A (A) Registro B (B) Unidad Lógica y Aritmética (A+B) Señales Internas de Control Decodificador de Estados Registro y Decodificador de Instrucción Instrucción Memoria Reloj S1 S0 Contador de Estados Registro de Dirección de Memoria S1 S0 Pulsos Contador de Programa Reset Fig. para indicar a la memoria o puerto de E/S que el procesador esta en una operación de lectura o escritura de dato. determina que el espacio de direcciones disponible es común para la memoria y para los puertos de E/S . El uso de RD y WR para anunciar al sistema la realización de un ciclo de lectura o escritura. Son necesarias dos señales de control RD (lectura) y WR (escritura). 3. la unidad de control es la responsable de entregar a dispositivos externos a la CPU las señales de control necesarias para sincronizar la operación de los restantes elementos del sistema.

el programa tardará en ejecutarse un tiempo igual a 16 estados x 0. 3. sumar dos números binarios de ocho bits gasta un tiempo de 8 μs. INSTRUCCIÓN IN 01 MOV IN 01 ADD OUT 02 ESTADOS 3 3 3 4 3 16 N° total de estados Si la frecuencia de reloj de la máquina hipotética es.Introducción al Microprocesador 72 Por ejemplo. Las instrucciones aritméticas requieren 2 μs para su ejecución. para trasladar un dato hacia un dispositivo externo el μP emite la dirección a la cual desea tener acceso. puede determinarse el tiempo que utiliza el μP para ejecutar la instrucción.4 la secuencia del código indicando el número de estados requerido para completar cada instrucción. con mayor velocidad se realiza la ejecución debido a que la duración de cada estado será menor. En la medida que la fclk sea más alta. Esta situación representa un problema crítico para la operación del sistema debido a dos dispositivos no pueden ser seleccionados para el uso simultaneo del bus de datos. En consecuencia. Para calcular el tiempo que el μP consume en la ejecución del programa 1 se repite en la tabla 3. en el caso de las instrucciones de transferencia de datos. De este modo que si en . cada ciclo de reloj es de 500 ns. se hace necesario aumentar el número de líneas del bus de control con una señal que separe el área de dirección de memoria del espacio de dirección de E/S. Si una instrucción especifica requiere 10 ciclos de reloj o estados internos para completar su ejecución y la fclk es conocida. En otras palabras. digamos fclk = 2 Mhz. Velocidad de procesamiento La rapidez de procesamiento de las instrucciones esta vinculada con la frecuencia del reloj maestro del μP. Debido a que el μP reconoce sólo un área de direcciones. Esta nueva línea de control se identifica como IO/M y su estado lógico distingue cuando la operación de lectura o escritura es memoria o puerto. De acuerdo con la tabla 3. digamos 0020H.5 μS/estado = 8 μs. la velocidad máxima con la cual el μP puede ejecutar una instrucción es de 1. Tabla.4 El programa 1 tiene 16 estados.29 se observa que las tres nuevas salidas del μP se originan en la sección del control.4. En la figura 3.5 μs. no es capaz de distinguir si el destino de la información es posición 20H de memoria o el puerto 20H de salida. Como la duración de un estado es 500 nS. coloca la información en el bus de datos y pone la señal WR en estado bajo.

debe recurrirse a una CPU más rápida o bien incrementar la frecuencia del reloj maestro sobre los 2 MHhz. el μP entrará en un estado de espera TWAIT en el cual permanece hasta que la entrada de control retorne a nivel alto. horas o años. La solución es dotar al microprocesador de una línea de entrada identificada como READY.Introducción al Microprocesador 73 una aplicación determinada es necesario calcular una suma en un tiempo inferior a 8 μS. debido a que la fclk impone el límite superior de la velocidad de procesamiento. entre otras aplicaciones. cuyo estado puede ser fijado desde el exterior de la unidad central de proceso. el μP prueba el estado de esta entrada. . el μP inicia la ejecución del programa procesando secuencialmente cada instrucción en memoria a partir de la dirección 0. Las rutinas de tiempo permiten. garantizando un reloj maestro con frecuencia exacta y muy estable. A menos que sea forzado a permanecer en estado de RESET por acción externa.31. segundos. siendo evidente que 8 μs es un tiempo insuficiente en extremo para introducir en forma manual los datos desde los interruptores lógicos. al permitir al usuario programar lazos de retardo del orden de μs. La rutina de suma requiere recibir desde el exterior los números binarios a sumar. de modo que es necesario establecer algún medio para que el periférico lento pueda controlar el estado de ready. Así. la activación externa de READY impide que el μP ejecute la instrucción en ejecución porque el estado TWAIT se introduce al final del ciclo de búsqueda y antes que se inicie la fase de ejecución. La solución se inicia con la introducción del concepto de Estado de Espera o TWAIT. Comunicación con periféricos lentos. Disponiendo de la información de la duración de cada ciclo de instrucción es posible usar el μP para realizar control de tiempo. el cual no es más que un alargamiento del ciclo del reloj en espera de la respuesta de dispositivos de memoria o periféricos lentos. En el estado T2. El límite inferior para el ancho de un pulso o el periodo de una señal periódica está limitado por el la fclk. si está en nivel lógico uno pasa a T3 y se completa la ejecución de la instrucción en el modo acostumbrado. El estado de espera puede trasladarse al diagrama de estados del μP. que la transición hacia TWAIT depende de la prueba de la condición ready. Si por el contrario READY está en cero lógico. Esta situación introduce un problema severo de sincronización entre la velocidad de operación del μP y los eventos externos a la CPU. la generación de pulsos o señales periódicas con alta precisión gracias al hecho que el generador de reloj usa un cristal externo como componente base del oscilador. Observe en el nuevo diagrama de transición de estados. como ilustra la figura 3. En aplicaciones de tiempo real generalmente se usa para control de tiempo un circuito LSI externo de propósito específico conocido como temporizador de intervalos programable.

la línea READY se usa para permitir la interconexión al µP de memorias o circuitos de E/S con tiempos de acceso de mayor duración que el permitido por el µP para entregar el dato. En aplicaciones del mundo real. 16 y 32 bits) se denomina READY o RDY. en otros como el Z80 se denota WAIT. el procesador examinará la entrada READY e introducirá estados de espera parando el proceso de ejecución. Para permitir la introducción de los operandos de la suma se controla la entrada READY con un interruptor S8 ubicado en el periférico 1.32. el componente ex- . en los fabricados por INTEL (8.Introducción al Microprocesador 74 Fig. El diagrama de transición incluye un estado T5 = TWAIT para permitir la sincronización del μP con dispositivos de E/S lentos. En todo microprocesador existe esta señal de control. Suponiendo que S1S0 es ‘01’ cuando el µP esté en el estado T2.31. como muestra el circuito de la figura 3. llevado la entrada READY a nivel bajo. el flanco posterior del reloj cargará uno en la salida Q del biestable U1.3. Activando READY. Si la instrucción en ejecución es IN u OUT. El usuario procederá a introducir el operando de la suma y a continuación activará el pulsador S8 para regresar READY a nivel alto y completar la ejecución de la instrucción.

requiere asignar algún código a los registros para identificarlos. La nueva MOV requiere dos operandos para indicar el sentido de la transferencia. Los códigos asignados a los registros son: . 3. un número de entero de periodos de reloj hasta cuando el dato esté disponible. incorporar nuevas instrucciones. tanto A como B pueden ser origen o destino de los datos. tales son el registro fuente (S) y el registro destino (D). se modifica la instrucción MOV de modo que además de transferir el contenido del registro A hasta registro B. La instrucción MOV original no necesitaba operandos debido a que la acción a ejecutar estaba implícita. indicando cual entrega y cual recibe datos. sin realizar operación alguna. Conjunto extendido de instrucciones La desventaja principal de la máquina propuesta está relacionada con el hecho que ésta posee un número limitado de instrucciones. Para superar está situación existen dos posibilidades: una. El hecho que deba hacerse ahora referencia a los registros internos de la CPU.A (A) ← (B) (B) ← (A) Ahora. Los nemónicos de la nueva MOV son: MOV A.B MOV B.32. extender el alcance de las existentes. Circuito para control de la entrada READY. Fig.Introducción al Microprocesador 75 terno obliga a que la CPU dejar pasar. pueda cumplir la acción inversa. Si por ejemplo. se obtiene una instrucción MOV más poderosa. esto es mover el contenido de A hasta B. la otra.

A Código de operación Operando destino Operando fuente MOV A. suponga que se desea realizar un programa que ejecute la suma de dos números binarios . Tabla.5. conviene introducir nuevas instrucciones para mostrar ciertos aspectos característicos de sistemas del mundo real. 3.Introducción al Microprocesador 76 Tabla. Códigos de instrucción para MOV r1. se muestra en la tabla 3. Si un procesador no dispone de instrucciones de multiplicación. Para esto.6. al ser un recurso didáctico. 3.B Código de operación Operando destino Operando fuente Fig.r2 (B)←(A) 010 ? DD SS 010?010 0 010 01 00 010?0001 010 00 01 (A)←(B) El nuevo grupo de instrucciones con MOV completamente especificada. Conjunto de instrucciones con MOV mejorada. Código de 2 bits para identificar a los registros.33.6.B 0 1 0 0 0 0 0 D0 0 0 1 0 0 1 La escritura de programas eficientes está relacionada con los recursos que ofrece la CPU. presenta serias deficiencia en lo relacionado con la cantidad de instrucciones disponibles. Aún cuando el objetivo de esta sección no es obtener un µP real. REGISTRO CÓDIGO A 00 B 01 En la figura 3.33 se identifican las zonas del código de instrucción para los nuevos tipos de instrucciones para transferencia de datos entre registros. cuando se requiera realizar esta operación debe escribirse una rutina de producto en base a instrucciones de sumas y desplazamientos. y por supuesto con la diversidad de instrucciones del μP. 3. cuyo símbolo genérico es MOV r1.r2. Código de la instrucción Instrucción Operando D7 D 6 D5 D4 D3 D2 D1 ADD 0 0 1 0 0 0 0 SUB 0 1 1 0 0 0 0 IN Puerto 1 1 0 1 0 0 0 0 OUT Puerto 2 1 1 1 0 0 0 1 MOV B. La máquina que se sintetiza. por ejemplo la cantidad de registros internos accesibles por el programador.A 0 1 0 0 0 1 0 MOV A. MOV B.

37. De esta forma.) . por lo cual al decodificar el código de la instrucción MVI entregado por el IR. Dirección Contenido de la memoria Binario Nemónico Comentario 0 1 2 3 4 5 6 7 8 9 10100001 01000100 10100001 00100000 01000100 11000000 01001011 00100000 11100010 xxxxxxxx in 01 mov b. entiende que el contenido de la próxima posición corresponde a un dato. De modo que es una instrucción de dos bytes. los suma y luego adiciona una constante al resultado. no a una instrucción.21.a mvi 2BH add out2 .Introducción al Microprocesador 77 obtenidos del teclado primitivo conectado al periférico 1 y luego al resultado obtenido se le debe agregar una constante. Tal instrucción está presente en el conjunto de instrucciones de cualquier procesador y se denomina mover inmediatamente un dato. (B)←(A) . (A)←(int. El operando dato de MVI dato se carga en la siguiente posición de memoria La nueva instrucción de carga inmediato se usa en el siguiente programa para realizar la suma N1 + N2 + 43.a in 01 add mov b. esta constante puede ser sumada al resultado de la operación precedente N1+N2. MVI dato Código de operación Operando destino Dato (A)←(dato) 110???00 110 00 PC+1 Fig. digamos 2BH. El decodificador de direcciones se diseña para el reconocimiento de instrucciones multibyte. (LEDs)←(A) Fig. mientras que en el caso de la rutina anterior se aprecia con claridad que MVI A. y que debe ser cargado en .36. o MVI dato. (A)←(A+B) . (A)←(43) . 3. el primero contiene el código de la instrucción compuesto del OC (110) y del código del registro destino (00). (A)←(A+B) . 43 usa las posiciones 5 y 6 de la memoria del sistema. Cada una de las instrucciones del programa 1 ocupa una posición de memoria como ilustra la figura 3. se introduce una nueva instrucción que cargue un dato de 8 bits en el registro acumulador. 3. Este programa introduce dos números a la CPU desde los interruptores. y el segundo byte corresponde al dato de 8 bits a ser almacenado en el acumulador.) . (A)←(int. Como este valor constante debe sumarse los datos de entradas. (B)←(A) .

Un lector inquieto habrá entendido que JMP 0000 ha creado un lazo infinito.a mvi a. El resultado de la ejecución es un salto incondicional a la posición de memoria especificada por el operando dirección. se introduce la instrucción JMP dirección. se le desconecte la alimentación.43 add out 02 jmp 0000 Fig. como una posibilidad. inexistente o simplemente basura. El código de la instrucción lo especifica el primero de ellos. de modo que cuando sea ejecutada produzca que el control del programa sea bifurcado a otra instrucción. Una solución parcial a esta dificultad es introducir una instrucción de salto que permita alterar la ejecución secuencial del programa.38. Cuando el PC se incremente hasta está dirección el μP intentará procesar esta información con resultados imprevisibles. como la de la mayoría de las personas y máquinas. según las necesidades específicas del algoritmo programado. Desafortunadamente la inteligencia del decodificador de instrucciones. los dos restantes señalan la dirección. esto significa que la máquina ejecuta el programa continuamente esperando por la introducción de operandos desde el teclado. la dirección de salto. el cual señala la localidad de memoria que contiene la próxima instrucción que debe ser ejecutada. lo cual implica que JMP dirección es una instrucción de tres bytes. tiene un límite. La instrucción de transferencia JMP permite al programa operar en un lazo. JMP dirección PC ← (dirección) DIRECCIÓN 0 1 2 3 4 5. está formado por dos bytes.10. Se trata de cambiar el contenido del PC. sumando e indicando el resultado hasta que.11 NEMÓNICO in 01 mov b. el lazo se mantiene. El operando que acompaña a JMP.a in 01 add mov b. una instrucción no programada. en la cual el operando corresponde a una dirección. Es pertinente aclarar el panorama oscurecido por la introducción de la instrucción de salto en el programa de la figura 3. ¿Qué sucede cuando la CPU obtiene el byte almacenado en la posición 9 de la memoria? Es evidente que no existe forma alguna de distinguir en una memoria si el patrón de unos y ceros es un dato o una instrucción. 3.38. Este modo de operación es resultado del hecho que la unidad . El problema es que no existe una instrucción que permita señalar cuando finaliza el programa.6 7 8 9. Aun aplicando al μP un pulso de RESET.Introducción al Microprocesador 78 el registro acumulador. En la posición 9 puede existir cualquier cosa. Así.

sería posible para la ejecución de un programa en cualquier punto. donde se muestren los 3 modos de operación de la sección de control del μP. El modo HALT se comprende mejor haciendo referencia al diagrama de transición de la figura 3. (PC) ←(0000) Fig. (A)←(Int. la cual carece de operandos. reset HALT reset HLT Búsqueda Ejecución Fig. DIRECCIÓN CONTENIDO DE LA MEMORIA COMENTARIOS 0 1 2 3 4 5 6 7 8 9 A B Binario 10100001 01000100 10100001 00100000 01000100 11000000 00101011 00100000 11100010 10000000 00000000 00000000 Nemónico in 01 mov b.39.40. 3.a mvi 43 add out 02 jmp 0000 . La CPU entrará en el modo de HALT (parada). (B)←(A) .39.) . (A)←(A+B) . Modos de operación del microprocesador Con energía aplicada y liberado del estado de reset. (LEDs)←(A) . La instrucción JMP tiene como operando la dirección de la próxima instrucción a ejecutar. . 3. Sustituyendo la instrucción de salto a al dirección cero en el programa de la figura 3. (A)←(Int. se asegura que el μP cesará de funcionar cuando ejecute la instrucción HLT almacenada en la dirección 9. (A)←(A+B) . (B)←(A) .) . el μP entrará es un estado de parada del cual solo saldrá al activarse la línea de RESET. la CPU busca y ejecuta la secuencia de instrucciones en memoria.Introducción al Microprocesador 79 de control de la máquina solo dispone de dos modos de operación: búsqueda y ejecución.a in 01 add mov b.40. en caso que la instrucción obtenida corresponda a HLT. Si se permite al μP tener un modo adicional de funcionamiento en el cual se detenga toda operación. (A)←(43) . como respuesta a la ejecución de una instrucción nueva con nemónico HLT.

(A)←(43) . Tabla.A 44 0 0 1 0 MOV A. 3. El conjunto de instrucciones del μP con los nuevos miembros MVI dato.41. (A)←(A+B) .Introducción al Microprocesador 80 0 1 2 3 4 5 6 7 8 9 A1 44 A1 20 44 B0 2B 20 E2 00 in 1 mov b. Parar Fig. Conjunto de instrucciones del µP hipotético. Instrucción 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. (B)←(A) . 3.) . JMP dirección y HLT es el de la tabla 3.7 muestra el repertorio de instrucciones definitivo del µP.7. .B 41 0 0 1 0 MVI dato C0 0 1 1 0 JMP dirección 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 síntesis de la máquina hipotética y se supone que la tabla 3. En modo alguno estamos en presencia de una CPU completamente funcional.a mvi a.7. (B)←(A) . (A)←(Int. Los códigos de instrucción son más fácil de manejar si se expresan en hexadecimal.a in 1 add mov b. (A)←(Int.) .7 presenta las instrucciones que permiten realizar la tarea especificada al inicio de esta sección. 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 condición previa. En otras palabras la CPU solo cambia el contenido del PC en función del resultado de una prueba que evalúa el cumplimiento de cierta condición. Antes de proceder a presentar el diagrama final de la máquina se describen un tipo de instrucción que no pertenece al juego de instrucciones del µP sintetizado pero que son de interés práctico. Esto sólo significa que el diagrama de la figura 3. (A)←(A+B) .30 ilustra como se organizan los componentes de un µP típico y que la tabla 3. (LEDs)←(A) . Si tal condición no es satisfecha el programa ejecuta la próxima instrucción en memoria.43 add out 2 hlt . Para completar la síntesis de la máquina de 8 bits se debe realizar la interconexión del µP a la memoria y a los puertos de E/S.

y los bits de banderas típicos. de modo que dependen del contenido del acumulador después de la ejecución ADD o SUB. Por ejemplo. La figura 3. La ejecución de la instrucción de suma ADD produce como resultado (A) = 110000002.Introducción al Microprocesador 81 Las banderas a probar son bits de un registro especial de la CPU denominado registro de condición de estados o registro de banderas. si se desea realizar la operación aritmética 19110 + 110 = 192 10.42. por ahora se limita el análisis a la función de la bandera de acarreo CY.42 muestra la conexión del registro de condiciones a la ALU. Los bits de este registro son activados por la ALU de acuerdo con el resultado producido por una determinada operación lógica o aritmética. P=0 La suma de los bits en 1 en A es impar. El lector puede verificar que no ocurre desborde del bit 7 del acumulador.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 número de bits en 1 en A es par. los valores binarios en los registros conectados a las entradas a la ALU deben ser: (A) = 101111112 y (B) = 000000012. Tabla 3. 3. Los estados que se asignan a las banderas están relacionados. siendo la bandera CY =0. . Los cinco bits definidos para el registro banderas son los mismos que se encuentran en el microprocesador 8085A. Registro A Registro B Unidad Lógica y Aritmética Registro de banderas Fig. en este caso. El registro de estados permite la ejecución de instrucciones condicionales. Debido a que cuando se describa la arquitectura del μP8085A se insistirá sobre este tema. con el resultado de una operación aritmética o lógica. el cual forma parte de la arquitectura interna del μP y es accesible por el programador. como se dijo.

la ALU lo indica con CY =1. Posteriormente se detallan aplicaciones de las instrucciones lógicas.a in 01 add jc 0000 mov b.Introducción al Microprocesador 82 Si la operación a realizar ahora es 19110 + 6610 = 25710. el mayor número decimal que puede expresarse es (28 . los registros de operandos a las entradas de la ALU contendrán: (A) = 101111112 y (B) = 010000102. si cy =0 . Si (A) = 11010011 y (B) = 01100010. (a) ← (43) . El problema estriba en que ADD ejecuta la suma de dos números y almacena el resultado en los 8 bits del A. . a pesar que la solución correcta al problema contiene 9 bits.43. 1 + 1 0 1 0 1 0 0 1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 A B 0 0 Recuerde que con un patrón de ocho unos y ceros. Programa que usa instrucciones de salto condicional El programa de la figura 3.43. muestra en forma sencilla el uso de JC. (a) ← (b) + (43) . Si CY = 1. si cy = 0 se presenta resultado final. el contenido del acumulador es (A) = 000000012. DIRECCIÓN (hex) 0000 0002 0003 0004 0005 0008 0009 000B 000C 000F 0010 in 01 mov b. bit a bit. (b) ←(a). operando 2 al acumulador . (b) ←(a) .a mvi a. resultado obviamente incorrecto. Al ocurrir un desborde del bit 7 del A. si cy = 1 se inicia el programa .1) = 25510. el programa volverá al inicio. operando 1 al acumulador . JC dirección JNC dirección Salto a dirección si CY =1 Salto a dirección si CY =0 Además de realizar operaciones aritméticas la ALU debe estar en capacidad de ejecutar operaciones lógicas. se incluya en la adi- .43 add jc 0000 out 02 hlt . Una instrucción lógica típica es ANA. mientras que el resultado correcto de la suma es 25710: 1000000012 = 1x28 + 0x27 + 0x26 + 0x25 + 0x24+ 0x23 + 0x22 + 0x21 + 1x20 = 25710. al ejecutar ANA. si cy = 1 se inicia el programa . (a) ← (a) + (b) . 3. Luego de ejecutar la instrucción ADD. Las instrucciones típicas de salto condicional y cuya ejecución depende de la bandera de acarreo son. El resultado de la suma solo se presenta si no ocurre acarreo. Una suma de números binarios de 16 bits puede realizarse usando a CY para que el acarreo resultante de la suma de dos bytes. la ALU transfiere al acumulador (A) = 01000010. la cual realiza la función lógica AND. entre el registro B y el registro A. a pedir el operando 1. resultado parcial en b . parar Fig.

circulan por un bus de datos externo común. El μP mediante señales de control de lectura y escritura en memoria y puertos determina el destino final de la información.44. donde se incluyen los buses de direcciones. Diagrama simplificado de un sistema μC = μP + Memoria + E/S . JC y JNC no se asignaron. Diagrama final del microprocesador sintetizado. Las instrucciones y datos provenientes de la memoria y la información que se obtiene o se entrega a los periféricos de E/S. de datos y el bus interno de la CPU. de modo que no es posible considerar que los 3 bits más significativos del código de instrucción representan el código de operación. Los bits del OC deben extenderse a cuatro (D7-4). Fig.Introducción al Microprocesador 83 ción de los dos bytes siguientes.44. El diagrama funcional terminado de la máquina de 8 bits sintetizada se presenta en la figura 3. 3. observe que tres instrucciones adicionales incrementa a 11 el numero de instrucciones que puede ejecutar la CPU. Los códigos de las instrucciones ANA.

45. Conexión explicita Unidireccional Bidireccional Fig. El ancho del bus de datos lo define generalmente (el 8088 es una excepción) el formato de las instrucciones y datos que usa la máquina. Es el canal que permite el flujo de información desde el μP hacia la memoria y los puertos de E/S. y el tipo de función que cumplen las señales que portan (datos. En la figura 3. Los μPs no usan el mismo principio de los computadores grandes para la comunicación con el exterior. .45 se presentan los símbolos más usados para representar un bus en diagramas eléctricos. mientras que la máquina en conjunto constituye un verdadero μC al disponer de CPU. y Control. Para contribuir a la reducción del espacio ocupado por el sistema. memoria y puertos de E/S. direcciones o control). los buses son de tres tipos: Datos. Los componentes del microcomputador se comunican por medio de grupos de líneas de interconexión o bus. En un sistema con estructura de bus único sólo un dispositivo a la vez podrá transferir información hacia o desde el CPU. Direcciones. 3. Un intento de comunicación simultánea creará conflictos y el inevitable deterioro de la información. Símbolos de líneas de interconexión El Bus de Datos (D0-D7) es bidireccional pero no puede transmitir en ambos sentidos simultáneamente. Es común distinguir la arquitectura de la máquina señalando el ancho de este bus. Las señales de entrada y salida al microprocesador. De acuerdo con la función que cumplen y con el tipo de información que conducen. se utilizan canales de comunicación comunes para todas las unidades. el sentido de conducción (unidireccionales o bidireccionales).Introducción al Microprocesador 84 La arquitectura interna de la CPU de la figura 3.44 está compuesta por unidades funcionales similares a las de una unidad central de procesamiento típica. de modo que un μC de 8 bits contiene un μP con bus de datos con igual número de bits. y se caracterizan por: el ancho del bus o número de líneas que lo forman. y desde estos hacia el μP.

IO/M . Controla el sentido de la transferencia por el bus de datos. y READY) lo conforman líneas de entrada o salida a la CPU y lo constituyen las señales que sincronizan las operaciones del μP.44. y el de la figura 3. solo conduce información proveniente del μP. indica que la memoria o dispositivo de E/S está listo para recibir o transferir datos. Si tiene nivel lógico alto durante la ejecución de las instrucciones IN puerto y OUT puerto. RESET. A0-A15 Bus de datos de la CPU D0-D7 Indica que el μP desea leer la localización de memoria o dispositivo de E/S RD seleccionado. y 6800) que dominaron el mercado se fabricaban en un encapsulado de 40 terminales en dos líneas de 20 pines cada una. se deja volar la imaginación y se procede a integrar el μP en un encapsulado del tipo DIP 40.44. Generalmente está constituido de 10 ó más líneas. . Indica que la información presente en el bus de datos ha de ser escrita en la posición de memoria o dispositivo de E/S seleccionado. La definición de la función que realiza cada uno de los terminales del μP se especifica en la Tabla 3.Introducción al Microprocesador 85 El Bus de Direcciones (A0-A15) es unidireccional. WR . debido a que el bus de direcciones es de 16 bits. +5V VCC Tierra VSS Entrada de reloj al microprocesador CLK Entrada que pone en cero el contador de programa. dependiendo del procesador. Además avisa que el bus de datos está disponible para realizar la transferencia. Si presenta nivel bajo. Tabla. RESET Bus de direcciones del microprocesador. El bus de Control ( RD .9. El μP tendrá acceso a un máximo de 216 (65536) posiciones de memoria. WR IO/M Señala una salida válida de datos en el bus de datos. indicando si la transmisión es hacia o desde la memoria o puerto de E/S. hacia donde debe transferirse o desde donde se obtienen los datos que circulan por el bus de datos. Distingue si la operación de lectura o escritura se realiza sobre la memoria o puerto de E/S.9 Funciones de las señales del μP de la figura 3. READY Los primeros microprocesadores de 8 bits (8080. Con la intención de realizar comparaciones entre el número y funciones de las líneas de entrada y salida de un μP comercial del tipo de los mencionados. Z80. el procesador esperará un número entero de ciclos de reloj para que READY vaya a nivel alto y completar el ciclo de lectura o escritura de E/S. Como se mencionó el ancho del bus de direcciones define la capacidad de memoria de la máquina. 3. la cual indica la dirección de memoria o puerto de E/S.

Se ha establecido que un μP de uso práctico debe contar con al menos 10 señales de control para cumplir con todas las funciones relacionadas con para la operación de un microcomputador. RD . y MREQ para las funciones que el μP de la figura 3. y el reloj del sistema están presentes en todos los μPs mencionados y ocupan 27 terminales del encapsulado. mientras que las restantes ( IO/M .46. Esto significa que alguna señales de importancia están ausentes en el μP desarrollado. tópicos a discutir más adelante. WR . 2 de las cuales (RESET y READY ) se usan para el control de la CPU.46 realiza con solo 3: IO/ M . exceptuando el control de interrupciones y DMA. En general los μPs disponen de señales que cumplen funciones similares en formas diferentes.S0 y S1) está destinadas al control del sistema. Se puede concluir que el μP desarrollado en forma descriptiva dispone de la mayoría de las entradas y salidas que se encuentran en un μP comercial. Las 16 líneas de direcciones.Introducción al Microprocesador 86 Las 34 señales del μP se distribuyen en el encapsulado en forma arbitraria como se muestra a la izquierda de la figura 3. 3. Para control de acceso directo a memoria y aceptación de interrupciones un μP típico destina por lo menos 4 entradas. El bus de control está constituido por 7 señales.2. El Z80 por ejemplo usa 4 señales: RD . y WR . WR .2 EL SISTEMA MICROCOMPUTADOR Considerando el modo de operación de un microcomputador práctico. los 6 terminales restantes del CI se consideran no conectados. las 8 de datos. RD . son múltiples las omisiones o simplificaciones que se han realizado a lo largo de esta sección in- . BUS DE CONTROL BUS DE DIRECCIONES μP BUS DE DATOS μP Fig. A la derecha se ofrece un diagrama de la CPU donde se agrupan las líneas en los tres buses típicos de un μP. IOREQ . 3. las 2 de alimentación. debido a que en beneficio de la sencillez se han omitido ciertas entradas y salidas.46 Configuración de terminales y buses del microprocesador.

20 se acopla directamente al μP. Esto. pero antes conviene considerar que a pesar que el procesador ve un espacio único para toda la memoria del sistema. Tal circuito digital sec- .Introducción al Microprocesador 87 tentando exponer de modo sencillo el funcionamiento de las unidades internas del μP y los dispositivos asociados. La solución práctica para que la CPU distinga y tenga acceso a solamente la dirección seleccionada consiste en usar un decodificador de direcciones de memoria. lo usual es que aun en aplicaciones simples sea necesario el uso de más de un chip para organizar el subsistema de memoria. puede ser necesario un arreglo de paralelo o serie de dos o más dispositivos. de modo que el uso de una memoria con 9 entradas de direcciones acoplada directamente al sistema representa el desperdicio del 99. o en cualquier otra. En μCs reales los procedimientos descritos para el acceso a la memoria y a los puertos del µP no son tan simples como los expuestos. También es común que los puertos de E/S del sistema sean tratados como posiciones de memoria con la finalidad de aprovechar la potencialidad del relativo gran número de instrucciones del μP que hacen referencia ala memoria. tendrá resultados imprevisibles debido existen dos celdas con la misma dirección. se encuentra que las líneas A0-A12 del bus de direcciones del μP estarán conectadas a las entradas correspondientes de ambos chips. este espacio contiene el programa almacenado y es conocido como la memoria de solo lectura (ROM). para organizar la zona de memoria de lectura/escritura (RWM) usada para almacenamiento temporal de datos y resultados. Las direcciones de memoria Sí el dispositivo de memoria SRWM de ½ Kbytes de la figura 3. conectando las líneas de direcciones de la memoria a los terminales de dirección correspondientes del μP. no sería posible la expansión futura de la memoria del sistema. Si no se provee al sistema de algún medio para acoplar eléctricamente al bus de datos solo un dispositivo a la vez. un intento de leer un dato en la localización 01FFH. Un CI de memoria de 8 Kbytes tienen 8192 celdas con direcciones físicas comunes desde 0000H hasta 1FFFH. Un microcomputador requiere un área de memoria capaz de retener los datos aun luego de retirarle la energía. debido a que los circuitos disponibles no son de la capacidad que exige las especificaciones del sistema en desarrollo. Con relación a la operación conjunta del μP y la memoria del sistema no se presentaron detalles sobre como el procesador selecciona la posición a la cual desea tener acceso. En contraposición. A primera vista pudiese parecer que la solución estaría en usar circuitos integrados con mayor capacidad de almacenamiento. o bien porque la longitud de la palabra del CI es menor a 8 bits. En una aplicación que requiera esta capacidad para la ROM y para la RAM. Un μP de 8 bits con 16 líneas de direcciones puede tener acceso hasta un máximo de 65536 celdas. Es común que el espacio de ROM se genere usando un solo circuito integrado.68 % de la capacidad de memoria del procesador.

sin importar como éste es cargado en la memoria. . sólo disponemos de una memoria de 512 bytes con una pila interna para retener los datos del programa. A continuación se diseña el de decodificador de memoria del sistema. Una representación gráfica de las zonas asignadas a cada dispositivo o grupo de éstos se conoce como el mapa de memoria del sistema.10.47 el correspondiente a un sistema que tiene 8 K de ROM y 4 K de RWM. . FFFF 0101111111111111 . 0101111111111111 16 K libre 6000 .47 Localización del área de memoria ROM y RWM en el espacio de direcciones del μP En la máquina hipotética no tenemos memoria ROM. 6FFF 111111111110000 . 3. 1010111110110111 8 K ROM 2000 . . . 5FFF 0010000000000000 . . . Como solo existe un dispositivo de memoria de 512 bytes el diseño de un decodificador es directo. El objetivo es generar una señal de selección del chip de memoria llamada MEM y activa en nivel bajo. 1FFF 0010000000000000 . . En el rango de direcciones del dispositivo (0000H-01FFH) las líneas A9 hasta A15 están siempre en estado bajo. y además durante la realización de una operación sobre la memoria la señal de control IO/ M será cero lógico. . . . 0101111111111111 4 K RWM 7000 . DIRECCIÓN DATOS 0000 . . . cuando en el bus de direcciones esté un valor dentro del rango de direcciones de la memoria y cuando se realice una operación de búsqueda. . mostrándose en a figura 3. .Introducción al Microprocesador 88 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 diseño del sistema. . . 111111111111111 36 K libre Fig. como se puede observar en la zona más oscura de la tabla de la tabla 3.

Introducción al Microprocesador 89 Esta combinación solo se presenta cuando el μP desea acceso a la RWM. 3. lo cual ocurre cuando el μP realiza una operación de lectura/escritura sobre un puerto de E/S. la cual se aplica a la entrada de habilitación CS del circuito integrado.48 decodificador de direcciones de la memoria RWM de 512 Bytes .10 Estados de las líneas de direcciones del μP en el espacio de 64 K. el estado lógico de MEM será uno. deshabilitando la memoria. La señal MEM responde a la la ecuación lógica.48. MEM = A 15 + A 14 + A 13 + A 12 + A 11 + A 10 + A 9 + IO/ M Tabla. El circuito del decodificador de direcciones de memoria se muestra en la figura 3. por lo cual puede usarse para generar la señal de selección de memoria MEM . Fig. 3. Dirección 0000H 0001H A15 A14 A13 A12 A11 A10 0 0 0 0 0 0 0 0 0 0 0 0 A9 0 0 A8 0 0 A7 0 0 A6 0 0 A5 0 0 A4 0 0 A3 0 0 A2 0 0 A1 0 0 A0 0 1 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 inspección que si cualquiera de las líneas de direcciones que intervienen en la ecuación está en nivel alto. la dirección en el bus no corresponde a una posición de la memoria del sistema permaneciendo MEM en estado alto. Así mismo cuando IO/ M esté en uno lógico.

Tabla. En la tabla 3. De la tabla 3.Introducción al Microprocesador 90 Las direcciones de los puertos El circuito decodificador de puertos debe generar dos señales: la primera PEO1 para habilitar los buffers que conectan los interruptores de entrada al bus de datos del µP como ilustra la figura 3.10. En ambos casos el número del puerto aparece en los bits A1 y A0 del bus de direcciones. el cual contiene dos decodificadores binarios 2 a 4.11 Estados de las señales de control del μP durante una operación de E/S. Operación A1 A0 IO/ M RD WR Entrada Salida 1 1 0 1 1 0 0 1 1 0 Como en el sistema solo existen dos periféricos se pueden generar dos señales de selección de puertos: PEO1 para el puerto de entrada 01 y PS02 para el puerto de salida 02.11 se deduce por simple inspección el circuito digital para obtener ambas señales.15 el resultado de la suma. Como indica la tabla 3. Para extender a 8 puertos la capacidad de la estructura de E/S del μC se usa un CI 74LS139.49 Circuito de selección de los puertos de E/S El procedimiento usado para identificar los puertos se conoce como método de selección lineal y limita a cuatro (2 de entrada y 2 de salida) el número de puertos posibles de habilitar. El circuito decodificador de direcciones de puertos tiene como tarea la identificación y seleccionar el circuito de puerto con el cual el μP intenta establecer comunicación cuando ejecuta las instrucciones IN puerto 1 y OUT puerto 2. si la instrucción en ejecución es IN puerto 1 se activa RD . mientras que si es OUT puerto 2 WR va a cero. 3. la segunda PS02 para cargar en el registro paralelo de la figura 3. . Fig.2 los dos bits menos significativos del código de instrucción representan la dirección del puerto.11 se resumen los estados de las señales que intervienen en un ciclo de transferencia de datos al puerto de entrada 01 y al puerto de salida 02. 3. Durante una transferencia de datos hacia o desde un puerto la señal de control IO/ M permanece en estado lógico alto.

No obstante es conveniente aclarar que al ser usado como recurso didáctico para introducir al estudiante en forma amigable y rápida en el mundo de los microprocesadores fue necesario simplificar el análisis e incluso omitir ciertos aspectos operativos fundamentales para el funcionamiento de dispositivos reales.50 muestra el diagrama eléctrico del decodificador de 4 puertos de salida y 4 de entrada.51 ilustra el diagrama del circuito final del μC.Introducción al Microprocesador 91 Tabla. 3. 3. Finalmente. Los puertos de E/S del sistema final son decodificados usando el método de selección lineal Fig. fue introducir en forma resumida la mayor cantidad de tópicos relacionados .50 Decodificador de 4 puertos de entrada y 4 de salida 3.12 Tabla de estados del G B A Y3 Y2 Y1 1 x x 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 1 0 74LS139 Y0 1 0 1 1 1 La tabla 3. que se supone cumplido.12 indica que con la entrada G está en estado bajo la salida yk estará en nivel bajo si el número entero representado por la entrada B A es igual a k. Observe que las señales intermedias a las salidas de las puertas NAND ( IOR y IOW ) pueden usarse para la habilitación de puertos en una aplicación que incluya un periférico de entrada y uno de salida.3 ARQUITECTURA DE UN μP DE 8 BITS MÁS VERSÁTIL El microprocesador hipotético puede considerarse una aproximación aceptable de un μP debido a que contiene las unidades funcionales características de un μP típico de 8 bits. El autor considera que esta altura del texto el lector conoce los principios básicos sobre la arquitectura y funcionamiento del microprocesador y la forma de combinarlos con otros dispositivos LSI para ensamblar un microcomputador primitivo. la figura 3. La figura 3. El propósito de este capítulo.

51 Microcomputador de 8 bits con 512 bytes de memoria RWM y 1 puerto de entrada y 1 de salida. 3. .Introducción al Microprocesador 92 Fig.

Un número reducido de registros internos de uso general representa un serio obstáculo 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. WR . En estas páginas iniciales se exponen principios elementales como el funcionamiento de la ALU y la forma en que establece comunicación con los registros internos. IO/M . Fig. y RD . sin requerirse hacer referencia a la memoria externa. 3. En segundo termino. solo se especificaron algunas señales para control de la máquina como RESET y READY . El microprocesador hipotético presenta ciertas limitaciones ausentes en μP comerciales. hasta conceptos algo más elaborados como la introducción de estados de espera.Introducción al Microprocesador 93 con el área sin tener que esperar el avance por capítulos para la introducción de nuevos conceptos. Un μP real contiene uno o más acumuladores y un banco de registros para propósito general usados para almacenamiento temporal de datos y como operandos en la ejecución de instrucciones que usen la ALU. A partir de aquí se reforzaran en forma sistemática y detallada los conceptos aprendidos y se capacita al estudiante para el análisis y diseño de μCs ensamblados usando circuitos integrados y dispositivos electrónicos comerciales. S0 y S1 para control de los dispositivos del sistema. Los microprocesadores modernos con arquitectura RISC tienen al menos 32 registros internos.52 Arquitectura de un microprocesador típico de 8 bits . En primer lugar tiene solo dos registros internos: el acumulador usado para contener un operando y el resultado en cualquier operación realizada por la ALU y el registro B donde se almacena el segundo operando.

El grupo de registros lo completa el Contador de Programa (PC). El registro de 16 bits Apuntador de Pila (SP). al ser los principios de funcionamiento iguales para todo μP (de 8 bits). cuya función es sincronizar y controlar todas las operaciones que se realizan dentro de la CPU. mantiene la dirección tope de un área especial de memoria administrada por programa. apuntando a la siguiente posición de memoria. la cual suma el contenido de los registros A y E. La ALU también controla el Registro de Condiciones o Banderas (flags). S. La Unidad Lógico Aritmética se observa a la derecha del esquema. Cada vez que se busca el contenido de una posición de memoria. llamada el Stack (pila). D. La unidad de control usa el reloj del sistema para sincronizar la búsqueda y ejecución de las instrucciones. Analizar un microprocesador genérico es difícil. C. generando señales de control que gobiernan toda acción realizada por el μP.D7). y G. el cual permite el enlace automático de las instrucciones del programa. y deposita el resultado de la operación en el acumulador. En párrafos anteriores se establece que procesador está compuesto de tres bloques fundamentales: un banco de registros.Introducción al Microprocesador 94 En la figura 3. para entender con facilidad el funcionamiento de cualquier microprocesador. El Registro/Buffer de Datos está conectado al Bus Interno de Datos del μP. Esto permite la existencia de la instrucción ADD E.52 se presenta un diagrama funcional de un microprocesador de 8 bits con arquitectura similar a un μP comercial típico. el cual contiene las banderas Z. AC. La sección de control tiene como entradas: . denominados: B. la cual se describe posteriormente. el contenido del PC y del MAR se incrementa en 1. y un circuito lógico para Incremento/Decremento de Direcciones.52 tiene un acumulador y un banco de registros de 8 bits para propósito general. por ejemplo. La sección de temporización y control lógico es una unidad realizada por hardware.A15). La conexión de un registro determinado a la entrada de la ALU lo realiza un multiplexor omitido en el diagrama. Observe que exceptuando el banco de registros y los registros buffers usados para conectar las líneas de datos y direcciones al exterior del μP. y CY. y sus salidas son el Bus Externo de Datos (D0 . y la unidad de control. todos los demás elementos están contenidos en la CPU de la figura 3. E. P. De modo que el lector puede considerarlo como una simple extensión de la CPU sintetizada en el capítulo anterior.52. el Registro de Direcciones de Memoria (MAR). basta con familiarizarse con el modo de operación de uno. El μP de la figura 3. la ALU. el cual es el origen del Bus de Direcciones (A0 . Aunque cada fabricante produce μPs con arquitectura ligeramente distintas. ambos de 16 bit. F. Las entradas a la ALU son el registro A y uno de los registros de uso general. El MAR se conecta al exterior por medio de un registro buffer de 16 bits.

En general. la cual es usada por la unidad de control para generar las señales externas para manejo de memoria y dispositivos de E/S. Si el bus de . el otro o bus de resultados conecta la salida de la ALU con los registros internos donde se deposita el resultado de la operación lógica o aritmética. estando toda operación sincronizada por el reloj maestro del sistema. no introduce contradicción alguna con los resultados del proceso de síntesis de la máquina hipotética. tales como RESET. 3. Una arquitectura de este tipo mejora el desempeño del μP porque aumenta la velocidad de ejecución debido a que los operandos y el resultado de la operación se transfieren por vías diferentes. desde el punto de vista funcional. READY . y lo que es más importante desde el punto de vista didáctico.44). • Líneas externas de control para alterar o interrumpir la secuencia del programa. El bus interno de datos Un elemento de vital importancia para distinguir la arquitectura de un μP es el número de buses internos usados para la transferencia de datos entre los registros y la ALU. la estructura interna de un μP. no obstante puede considerarse que el diagrama de la figura 3.53 corresponde a una sección del μP PACE fabricado por National Semiconductor. Uno denominado bus de operandos conectado a las dos entradas de la ALU. es algo complejo separar los distintos elementos de la CPU en los tres bloques básicos debido a la estrecha relación que existe entre ellos. Fig. Este μP usa una estructura de bus doble.52 reproduce en forma adecuada. y • Las salidas de la sección formada por el Decodificador de Instrucciones y el Codificador de Ciclos de Máquina (llamado decodificador de estados en la figura 3. y otras aun no mencionadas.53 Arquitectura de bus doble El diagrama de la figura 3. que portan información sobre la instrucción bajo procesamiento. y señales internas para el control de la ALU y la transferencia entre registros de la CPU.Introducción al Microprocesador 95 • El reloj del sistema.

La baja velocidad de ejecución se debe a que para ejecutar la suma la ALU debe realizar tres transferencias en secuencia por el único bus disponible. Se supone que las empresas fabricantes de μPs evaluaron el compromiso entre la velocidad y el ahorro de superficie de integración y optaron por esta última. lo cual representa un verdadero ahorro de superficie de integración. el cual debe estar habilitado. 3. presenta problemas de sincronización que afectan la operación de la ALU. Primero. Para ilustrar esta situación considere que la ALU es un circuito combinatorio de modo que responde de inmediato a cualquier cambio en sus entradas.52 usa un bus único conectado a las dos entradas de la ALU. Este modo de operación se destaca por su lentitud.54. dos desde los registros que contienen los operandos hasta cada entrada de la ALU. Cuando el resultado de la operación aritmética se transfiere por medio del bus de datos hacia el A. El esquema de tal sistema puede verse en la figura 3. mientras que el principal beneficio que ofrece el uso de un bus simple es la poca complejidad de la arquitectura del μP y la reducida área que ocupa las ramificaciones del bus interno en la oblea de silicio. La unidad de control selecciona el registro B y lo conecta por medio del bus interno a la entrada derecha de la ALU. porque la mayoría de los μPs usan un solo bus interno. Suponga que se carga un valor en el acumulador. Aunque esta arquitectura es sencilla y ocupa poco espacio en el área de silicio del CI. Al ejecutar la sustracción el resultado A-B debe cargarse en el acumulador.53 se separa en dos buses de modo que a cada entrada de la ALU se conecte un bus de datos independiente.Introducción al Microprocesador 96 operandos en la figura 3. se obtiene un μP con arquitectura de bus triple. sino que a través del bus . el cual está conectado a la entrada izquierda de la ALU. y se ejecuta la instrucción SUB b.54 Arquitectura de bus triple. se originan dos problemas serios de sincronización en el interior del μP. Fig. el resultado no solo se almacena en el A. Al existir una sola vía para la transferencia de datos entre los registros y la ALU. EL μP de la figura 3. y una para trasladar el resultado al acumulador. tanto los operandos como el resultado circulan por el bus interno aunque en tiempos diferentes.

(B). el hecho que la instrucción de resta use al acumulador para almacenar el resultado. Ambos registros TEMP y ATEMP son de uso exclusivo del sistema y son transparentes para el programador. A Entradas falsas ALU Fig. El . con un valor precargado en el acumulador se ejecuta la instrucción SUB B: la existencia de los registros adicionales permite que el μP realice dos transferencias de datos simultáneas. La solución de ambos problemas se muestra en la figura 3. Las entradas a la ALU son falsas.55 Ilustración del problema de sincronización. Ahora. el otro es un acumulador temporal para aislar la entrada izquierda de la ALU del acumulador. la entrada izquierda de la ALU tendrá un operando no deseado. por lo cual contribuirá a la obtención de un nuevo y falso resultado.Introducción al Microprocesador 97 interno alcanza la entrada derecha de la ALU y pasado el retardo de propagación de los circuitos que forman la ALU la salida de ésta entrega un resultado distinto a la a la resta (A) . observe que aun cuando el A aísla una entrada a la ALU del bus de datos. Fig.56 La CPU ejecuta dos transferencias simultáneas por distintas rutas. En segundo lugar. 3.56 y consiste en usar dos registros para almacenamiento temporal: uno denominado TEMP separa la entrada derecha de la ALU del bus interno de datos. 3. implica que en el instante que la suma se deposite en el A. para hacer más crítico el problema. una implica mover el contenido del registro B por el bus de interno de datos hacia el registro temporal de la entrada derecha de la ALU.

En sistemas pequeños . En un μC de propósito general el programa es cargado en esta unidad por medio del teclado. y de control de las unidades de E/S del sistema. y control. transferir el dato en A al acumulador temporal. En la figura 3. Para completar la ejecución de SUB B. las EPROM pueden ser programadas. Fig. La única diferencia entre este esquema y el logrado a partir de la síntesis del μC. y todo circuito LSI necesario para una aplicación determinada se conecta a estos tres buses.58 se presenta el diagrama funcional simplificado de un computador basado en un μP. ni el usuario ni las instrucciones del computador pueden cambiar su contenido. o RWM (Read Write Memory). Este circuito es volátil. usando equipos de muy bajo costo. y de hecho a la entrada izquierda de la ALU.57. y no es volátil. En μCs para procesamiento general contiene rutinas para el arranque de la máquina. estas memorias se programan durante el proceso de producción. la salida de la ALU se lleva al acumulador.3. dado que usan diferentes caminos. Observe que en este flujo paralelo de datos no existe conflicto. La ROM (Read Only Memory) es la memoria de sólo lectura del sistema. 3. El μP dispone de los buses de direcciones. En computadores personales compatibles con el modelo IBM.Introducción al Microprocesador 98 otro. implica la pérdida de la información almacenada en el circuito de memoria. recordando que desde el punto de vista didáctico el objetivo es resolver problemas típicos del ambiente industrial usando la potencia del μP. o unidades de discos. borradas y reprogramadas. almacena el BIOS (Basic Input Output System)de la máquina. más que diseñar equipos de procesamiento de datos. A diferencia de las ROM. es que la memoria del sistema aparece separada en dos bloques: uno corresponde a la Memoria de Lectura/Escritura del sistema. como se aprecia en la figura 3. de la fuente de alimentación.4 ARQUITECTURA DE UN µCOMPUTADOR ESTÁNDAR Con los diferentes conceptos introducidos es posible establecer el diagrama funcional de un μC estándar. También contiene la información sobre los datos y los resultados de la ejecución del programa. tales como rutinas de prueba de memoria. una variante de la ROM denominada. lo cual significa que retirarle la energía a la máquina.57. cuyo contenido puede ser alterado por el usuario de la máquina. datos.

Esto implica que el programador no puede hacer uso de la técnica de subrutinas en el desarrollo del programa ni usar interrupciones. se puede encargar un grupo de ROMs a compañías especializadas. de modo que el estudiante se traslade al mundo real de los microprocesadores. el programa de control escrito por el diseñador se almacena en una EPROM (Erasable Programmable ROM) Si se requiere fabricar un gran números unidades. se considera conveniente presentar la arquitectura de un μP real. los requerimientos de memoria en la solución de problemas de poca envergadura. el 8085A. y los circuitos de memoria no son costosos. . La presencia de la RWM en este tipo de μC no es obligada. puede estar ausente. las cuales las programan en durante el proceso de producción. Conocido el funcionamiento de una CPU genérica y. es baja.Introducción al Microprocesador 99 de propósito específico. Posteriormente se analizaran con más detalle los diferentes tipos de memoria y su modo conexión al sistema. por lo menos conceptualmente. y el modo en que los buses del μP interconectan las diferentes unidades. el de la memoria del sistema. si la aplicación no requiere el almacenamiento temporal de datos. En cualquier caso. caso en el que se diseña un μC para realizar una tarea específica.

58. 3.Introducción al Microprocesador 100 Fig. . Arquitectura de un sistema estándar basado en microprocesador.

8085AH-1 y 8085AH-2. La figura 4.1 (a) Foto microscópica del μP8085A. alimentados con una fuente de poder de +5 V. 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. estando disponibles en versiones más rápidas con códigos 8085A-2.3 μs. 8085AH.Arquitectura y Operación del Microprocesador 8085A 101 Arq ui t e c t ura y O p e ra c i ó n d e l μ P 4. (a) Fig. mostrado en la figura 4.1b.1a es una imagen del área de integración de los 20000 transistores MOS de canal N que componen el circuito del μP.1 GENERALIDADES El 8085A de INTEL es un microprocesador de 8 bits para uso general construido usando tecnología NMOS. el cual era el estándar industrial para la fabricación de circuitos integrados VLSI. (b) Encapsulado DIP-40 (b) . El CI se presenta en un encapsulado tipo DIP-40. 4. El 8085A tiene un ciclo de instrucción de 1. Con este dispositivo puede realizarse un sistema microcomputador mínimo usando solo 3 circuitos integrados. durante la década de los 70.

el 8085 no presenta buses de datos y direcciones separados. El diagrama de la derecha en la figura 4. En esa época. Las funciones de estos ocho pines se presentan multiplexadas en el tiempo. 8 son bidireccionales.Arquitectura y Operación del Microprocesador 8085A 102 El μP puede ejecutar un conjunto de 74 instrucciones sincronizado por un reloj derivado de un oscilador interno. se hacían de 64 pines. Esta señal base es dividida por 2 en el interior del dispositivo para producir el reloj interno que controla todas las operaciones del 8085A. y 2 están destinadas a la alimentación del circuito. pero su prueba representaba un proceso engorroso para el fabricante. En los inicios de los setenta. 4. La fuente de poder de +5 V. durante el proceso de producción los chips eran probados usando equipos especiales y costosos para garantizar el correcto funcionamiento del producto final.5 RST 5. como en la actualidad. como ilustra la figura 4.2. 12 son entradas.5 RST 6.5 INTR INTA AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 Vss Vcc HOLD HLDA CLK OUT RESET IN READY IO/M S1 RD WR ALE S0 A15 A14 A13 A12 A11 A10 A9 A8 8085A Fig. Disposición de los terminales del microprocesador 8085A De los 40 terminales.2. En este μP. tales instrumentos sólo podían verificar el funcionamiento de circuitos integrados en receptáculos de hasta 42 terminales. Una versión avanzada. El cristal de cuarzo se aplica a la entradas X1-X2.2. encargándose la señal ALE (Address Latch Enable) de indicar a dispositivos externos cuando la información presente corresponde a datos o direcciones.25 MHz. el cual usa un cristal externo de resonancia paralela y frecuencia máxima de 6. X1 X2 RESET OUT SOD SID TRAP RST 7. La razón de la aparente complicación que representa el multiplexado de señales está relacionada con el estado de la tecnología de fabricación de circuitos LSI en la década de los 70. Esto no significa que treinta años atrás no se fabricaran CI de más de 40 pines. . mientras que el byte de orden alto de la dirección se presenta en las líneas A8-A15. se aplica los terminales VCC (+) y VSS (-). 18 salidas. el 8085A-2 puede operar a 5 MHz con un cristal de 10 Mhz.2 indica el sentido del flujo de información en los terminales del 8085. Como ilustra la figura 4. los 8 bits menos significativos de la dirección aparecen en los mismos terminales (AD0-AD7) que el bus de datos.

El μP 8085 fue diseñado para disminuir el número de componentes necesarios para la construcción de un sistema microcomputador típico. y Toshiba. Por supuesto un lector perspicaz pudiese alegar: Al estar multiplexado los datos con las direcciones. también de 16 bits. es fabricado actualmente por varias empresas. usan 68 terminales. Como segundas fuentes de del 8085 se encuentran: Siemens. El uso de cápsulas de 40 pines con estructura de buses multiplexados se mantuvo en los μPs de 16 bits 8086 (AD8-AD15) y 8088 (AD0-AD7). ocupa una pastilla de 273 terminales. si. estos son: el 8155/56 y el 8355/8755. AMD. a la vez que se conectaban directamente a los buses multiplexados del µP. Una docena de líneas de control no permitía la integración de todas las funciones establecidas para el dispositivo. El 80186 y el 80188. uno LSI y otro MSI. externo al μP. Si se considera que el 8085A requería 2 líneas para el cristal externo. para disponer de una CPU autónoma. el generador de reloj (8224). con arquitectura interna de 64 bits y diseño superescalar. para separar estas funciones. Pero. los cuales estaban multiplexados en este procesador. OKI. se mantuvo la compatibilidad de programación con el 8080 y de hardware con los componentes periféricos más utilizados en el desarrollo de aplicaciones de µPs. Los nuevos componentes combinaban funciones de memoria. . 2 para la fuente de poder. Antes de la aparición en el mercado de este µP. Hitachi. de modo que basta con conectar un cristal a las entradas X1-X2. las innovaciones con las cuales INTEL acompañó el desarrollo de su nuevo producto exigía un número mayor de entradas y salidas para cumplir con las especificaciones del diseño. NEC. para la CPU? La respuesta es. necesitándose por lo menos dos circuitos. y 8 para el bus datos. y el controlador del sistema (8228). este último se encargaba de separar el bus de control y el de datos. En el 8085A se integran las funciones de los circuitos 8224 y 8228. los μPs de 32 bits 386DX y 486DX disponen de 132 y 168 pines respectivamente. ¿No se requiere incluir un latch. mientras que el Pentium básico.. por ejemplo) requería el uso de al menos tres chips LSI: el μP propiamente dicho (8080). puertos de E/S y temporizadores. razón por la cual INTEL recurre al multiplexado de las líneas de datos y direcciones del µP. la construcción de una CPU completa (8080. radica en los dispositivos LSI introducidos como periféricos para garantizar la integración del sistema.. una de las bondades del 8085. INTEL disminuyó desde quince (con el 8080) a tres (con el 8085) la cantidad de componentes necesarios para un µC mínimo. Como resultado de esta estrategia. A la par. es cierto.Arquitectura y Operación del Microprocesador 8085A 103 Aunque los µPs fabricados hasta ese momento residían en paquetes tipo DIP40. Aunque este procesador es un producto INTEL originalmente introducido en el año 1977. 16 para el bus de direcciones. solo restan 12 terminales para el bus de control.

2 ESTRUCTURA FUNCIONAL DEL 8085A Para entender como funciona un µP es necesario conocer los tipos de registros internos del dispositivo y el modo en el cual se realiza la transferencia de datos entre éstos. y constituyen el modelo de programación por excelencia.4. tal como es suministrado por INTEL en la hoja técnica del dispositivo.5 SID SOD RST 6. además de un grupo de funciones adicionales.A15 Bus De Direcciones READY RD WR ALE S0 S1 IO/ M Bus de Control HLDA RESET OUT HOLD RESET IN Bus de Direcciones/Datos Fig. El conocimiento de la función de cada uno y una técnica apropiada de utilización permiten la programación del µP. se reproduce en la figura 4.3.5 TRAP RST7. GND +5V Buffer Dir X1 X2 Gen. Reloj CLK OUT Buffer Dir/Dat AD0 . tales como: la generación del reloj. Diagrama funcional del 8085ª En el 8085 están integradas todas las funciones de una unidad de procesamiento central capaz de ejecutar el conjunto de instrucciones del µP.AD7 Lógica de Control y Tiempo CONTROL ESTADO DMA RESET A0 . Temp.Arquitectura y Operación del Microprocesador 8085A 104 4.5 Control de Interrupciones Canal Serie Bus Interno de Datos (8) Acumulador Reg. El conjunto de los registros y el repertorio de instrucciones son atributos de la arquitectura de la máquina. Flags Registro de Instrucciones (8) Decodificador de Instrucciones y Codificador de Ciclo de Máquina ALU B D H ± (8) (8) (8) C E L (8) (8) (8) Apuntador de Pila Contador de Programa (16) Registro de Dir. INTA INTR RST 5.3 un diagrama de bloques del µP. Con el propósito de introducir la arquitectura del 8085 y la manera en la cual se organizan las unidades funcionales en un microprocesador real. Éstas pueden estar . El circuito integrado µP 8085 contiene un número considerable de componentes digitales interconectados para formar unidades funcionales. la selección y asignación de la prioridad de las interrupciones y el control del canal de comunicación serie.

La lógica de control utiliza esta base de tiempo maestra o reloj del sistema para generar comandos de sincronismo para toda operación interna y externa realizada por el dispositivo. la cual conforman la Unidad de Control del microprocesador.3. a la misma frecuencia del reloj interno. tales son: • El conjunto del Registro de Instrucciones. 4. el Contador de Programa (PC). . ocurren como respuestas a señales de control generadas por esta sección del microprocesador. éstas permiten a circuitos periféricos modificar el modo normal de funcionamiento del µP. Las entradas externas a la lógica de control son tres: RESET IN . • La Unidad Aritmética y Lógica (ALU).2. el Acumulador (A). el Decodificador de Instruccio- nes y la lógica de Control y Tiempo. y señales externas generadas por dispositivos externos a la CPU. las salidas de la sección de decodificación de instrucciones y codificación de ciclo de máquina.3 solo se muestran las los bloques que ejecutan las funciones básicas del dispositivo. • El Control del Canal de Comunicación Serie. las entradas de la lógica de control y tiempo son los terminales del cristal de cuarzo. En esta sección también se libera una salida CLK OUT.. • El control de selección y asignación de prioridad de las interrupciones.H.C.E. • El Banco de Registros de propósito general (B.Arquitectura y Operación del Microprocesador 8085A 105 constituidas por algunos elementos digitales o por arreglos complejos de puertas lógicas. de 16 bits. el Registro Temporal y las Banderas de Estado. Como se observa en la figura 4. READY y HOLD. y el registro de direcciones de memoria (MAR). la cual puede ser usada como reloj de componentes externos.1 La unidad de control Toda operación realizada por el 8085 durante la ejecución del programa de instrucciones almacenado en memoria.L) de 8 bits.D. En el diagrama de la figura 4. El Apuntador de Pila (SP). el cual usa un cristal conectado a las entradas X1-X2 para fijar la frecuencia de oscilación. • Los buffers de datos y datos/direcciones. registros y biestables. El µP incorpora un generador interno de reloj.

la lógica de control inicializa el µP cargando cero en el contador de programa. y que procede a llevar a tercer estado el bus de direcciones. de manera que solicita al µP que proceda a entrar en un estado de espera hasta cuando pueda transmitir o recibir la información. El µprograma está almacenado en una memoria de solo lectura y no es accesible al usuario La figura 4. lo cual significa que en su interior reside un µprograma encargado de trasladar la instrucción depositada en el IR a una secuencia de microinstrucciones necesarias para realizar las funciones ordenadas por el programa. significa que un dispositivo externo notifica que no está listo para transferir datos. La lógica de control genera una salida HLDA para informar al dispositivo externo que acepta la solicitud de HOLD. de modo que toda transferencia de información desde un periférico a memoria debe usar al 8085 como receptor intermedio. La entrada al estado de reset es anunciada al exterior por la activación de la salida RESET OUT.Arquitectura y Operación del Microprocesador 8085A 106 En el caso de RESET IN . Una vez culminada la transferencia. El decodificador de instrucciones transfiere a la lógica de control y tiempo el resultado de la interpretación de la instrucción. si por un tiempo de al menos tres ciclos de reloj se aplica un nivel lógico bajo a este terminal. el cual identifica la instrucción en ejecución y selecciona el µprograma correspondiente. en el registro de instrucciones y en varios bits internos de control. Este modo de operación es demasiado lento para transmitir cantidades masivas de datos desde un disco o tarjeta de video. Si esta señal es activada a cero durante una operación de acceso a memoria o puerto de E/S. . El 8085 es un dispositivo microprogramado. Este modo de operación es usado por circuitos controladores LSI para realizar transferencias de datos a memoria sin intervención del µP.4 muestra al registro de instrucciones conectado al decodificador de instrucciones. La entrada restante de control (HOLD) es utilizada por componentes externos para indicar al 8085 que requieren hacer uso exclusivo de los buses del sistema para realizar una operación de acceso directo a la memoria. La función HOLD es necesaria porque ninguna instrucción del µP permite el intercambio directo de datos entre dispositivos externos. La activación de HOLD (nivel lógico alto) implica una solicitud al CPU para que libere las líneas de datos y direcciones una vez que culmine el ciclo de máquina en desarrollo. el bus de datos/direcciones y algunas salidas de control. El terminal de entrada READY tiene como función permitir el intercambio de información entre dispositivos periféricos lentos y el microprocesador. El 8085 saldrá del estado de espera cuando READY retorne al nivel lógico alto. el periférico desactivada la señal HOLD y el 8085 recupera el control de los buses.

o entre éstos y la ALU. la lógica de control emitirá señales internas destinadas a sincronizar la transferencia de datos entre registros. Durante el arranque del sistema. Las salidas externas del bloque de control son S1. puertos de E/S y otros periféricos del sistema. . La sincronización de la transferencia de datos por las líneas de interconexión y la interpretación del estado de las entradas a la CPU. anunciando que se dispone a realizar una operación de búsqueda del código de operación de la instrucción almacenada en la posición 0000H. IO/M. Sección de decodificación y control del μP Sincronizada por el reloj interno. RD. considere una operación de búsqueda en memoria.4. S0. la lógica de control genera las señales de estado IO/M=0. CLK OUT. RW.Arquitectura y Operación del Microprocesador 8085A 107 Bus Interno de Datos Registro de Instrucciones Decodificador de Instrucciones y Codificador de Ciclo de Máquina Buffer de Dir/Datos Bus Dir/Datos Lógica de Control y Tiempo Señales Internas de Control E/S externas Fig. S0=1. una red de RESET automático pone a cero el contador de programa. la lógica de control y tiempo tiene la responsabilidad de ejecutar la secuencia de microinstrucciones que controla la búsqueda. Según la naturaleza de la instrucción. Cuando el µP sale del estado de RESET.4. ALE. Además. S1=1. son también responsabilidad de a lógica de control. se encarga de generar señales externas dirigidas al control de la memoria. RESET OUT y HLDA. decodificación y ejecución de las líneas de código almacenadas en la memoria. Para entender las funciones de las seis primeras de éstas.

2 Los registros internos La figura 4. Una vez que la dirección se estabiliza en el bus. Simultáneamente la UC emite una señal de control ALE para indicar a lógica externa que el contenido del bus multiplexado corresponde a direcciones. son de propósito general y están disponibles para almacenamiento de datos durante la ejecución del programa. Si la operación fuese de escritura en memoria se hubiese generado un comando de escritura WR. DE. debido a que es usado por casi todas las instrucciones aritméticas y lógicas. El uso adecuado de los registros internos resulta en la escritura de programas eficientes y de rápida ejecución. mientras que el byte de orden alto del PC (A8-A15) se carga en el buffer de direcciones. y HL. El 8085 posee instrucciones que hacen referencia a registros pares.E.H. En este momento se inicia la ejecución propiamente dicha. también de 8 bits.D. Una instrucción corta es procesada con rapidez debido a que el µP debe realizar un acceso único a memoria en busca de la instrucción. a los cuales se tiene acceso por medio del bus interno de datos. . Por ejemplo: LXI D.L). De acuerdo con el tipo de instrucción. la UC ordenará uno o dos accesos adicionales a la memoria hasta tanto toda la información relacionada con la instrucción sea transferida al interior del µP. Al existir 7 registros de 8 bits accesibles por el programador. 4. de modo que las instrucciones de transferencia entre registros y las aritméticas (exceptuando las de suma y resta inmediata) son de un byte.C. El acumulador (A) es un registro especial de 8 bits asociado a la ALU. Si la instrucción en progreso contiene más de un byte. y toda operación adicional es realizada dentro de la propia CPU. los registros de propósito general pueden ser usados como tres registros pares de 16 bits: BC. son necesarios sólo tres bits para identificarlos. uso de la ALU. A continuación se incrementa en uno el PC para apuntar a la posición de la memoria donde se almacena el siguiente byte de la instrucción o la próxima instrucción a ejecutar. Los seis registros restantes (B. Siete de estos registros son direccionables y están a la disposición de programador.2. cargará el dato de 16 bits especificado por el operando de la instrucción en el registro par DE. Para permitir la realización de algunas operaciones con operandos de 16 bits. o acceso a memoria o puertos de E/S. al igual que en la máquina hipotética. la UC generará todas las señales internas y externas necesarias para la transferencia entre registros.3 indica que el 8085 tiene un grupo de registros de 8 y 16 bits. y de allí al registro de instrucciones para su posterior decodificación. la lógica de control envía a la memoria un comando RD de lectura indicando que el código de operación debe ser trasladado desde la memoria hasta el buffer de datos a través del bus externo de datos.Arquitectura y Operación del Microprocesador 8085A 108 El siguiente paso es transferir desde el contador de programa al buffer de datos/direcciones los 8 bits de menor peso de las direcciones (A0-A7). dato.

Instrucciones subsiguientes que hacen referencia a memoria utilizan esta información. La utilidad de la zona de la pila es obvia si se considera que debido al número reducido de registros del microprocesador la capacidad de almacenamiento interno de la CPU puede agotarse rápidamente. Registros que pueden alterar el contenido de registro de direcciones de memoria. Durante la ejecución de un programa determinado los registros ocupados pueden ser liberados y los datos antiguos preservados usando la pila como área de almacenamiento. los registros de propósito general. el PC es incrementando automáticamente en 1 para apuntar a la siguiente posición de memoria. Al final de la ejecución de una instrucción. o al concluir una búsqueda en memoria. o decre- . Estas son: el PC. 4. y en la cual se pueden almacenar datos en forma temporal. transfiere al acumulador el contenido de la posición de memoria cuya dirección especifica el contenido del registro par DE. pueden almacenar la dirección de una posición de memoria a la cual se puede transferir.Arquitectura y Operación del Microprocesador 8085A 109 Una particularidad del arreglo de registros programables es que cuando se tratan como registros pares.5 indica que existen cuatro fuentes posibles para cargar una dirección específica en el registro de direcciones de memoria (MAR). El contenido del SP. el apuntador de pila SP y dos registros W y Z de 8 bits no accesibles por el programador. ésta debe ser cargada en el registro par por el programa. La dirección de la base de la pila se fija en el inicio del programa. Cuando se ejecuta una instrucción que haga referencia a la pila. por ejemplo: LDAX D. representa la dirección del tope de un bloque de memoria con estructura LIFO manejado por programa.5. Bus interno de Datos W B D H Z C E L MAR PC SP Buffer Direcciones Buffer datos/ Direcciones A8-A15 AD0-AD7 Fig. o la dirección de búsqueda del 2do o 3er byte de una instrucción multibyte en proceso. el cual es un registro de 16 bits que mantiene la dirección de la próxima instrucción a ejecutar. el cual es de 16 bits. La figura 4. el SP es incrementado. recuperándolos oportunamente. EL generador por excelencia de direcciones del μP es el contador de programa. Cuando el arreglo de registros de propósito general actúa como fuente de una dirección. o desde la cual se pueden obtener datos. otro registro de 16 bits.

OR Exclusivo. 4.2. La ALU puede realizar las siguientes operaciones aritméticas y lógicas: Suma y resta binaria. el manejo de subrutinas como técnica de programación. y rotación del acumulador hacia la derecha o izquierda. durante la ejecución de una instrucción de tres bytes.Arquitectura y Operación del Microprocesador 8085A 110 mentado. Si la función se realiza sobre dos operandos (puede ser sobre un operando).5 se observan dos registros de 8 bits.7 Registro de condiciones de estado del 8085A . se incrementa el PC y se busca el segundo byte de la instrucción y se deposita en Z. 4. el cual se almacena en W. se vuelve a incrementar el PC en la búsqueda del tercer byte.6 presenta a la unidad aritmética lógica del 8085 y sus registros de soporte. lo traslada al IR. AND. de 5 bits. uno estará almacenado en el acumulador y el otro en un registro de propósito general. La figura 4. Durante la ejecución de la instrucción. Concluida la fase de búsqueda. y NOT. para apuntar a la próxima posición de memoria.Temp. el contenido de WZ se transfiere al registro de direcciones de memoria. W y Z. como se explicará más adelante. y lo interpreta.6. La unidad aritmética lógica. OR. el registro par WZ contiene la dirección de salto. 4. En la figura 4. destruyendo el contenido anterior del registro. S Z AC P CY Fig.3 La unidad aritmética y lógica La ALU ejecuta operaciones aritméticas o lógicas con números binarios de 8 bits. de uso exclusivo por la unidad de control del μP para el almacenamiento intermedio de datos o direcciones durante la ejecución de una instrucción. Como ejemplo. Se observa en la figura 4.6 el Registro de Estados o Banderas. El resultado de cualquier operación siempre se deposita en el acumulador. Las condiciones pueden ser probadas por programa. A Reg. por la unidad de control. donde la ALU deposita información vinculada con el resultado de una operación aritmética o lógica. el μP busca en memoria el primer byte correspondiente al código de operación de la instrucción. y el contenido del PC es sustituido por WZ+1. El SP también permite. tal como JMP dirección. Banderas ALU Fig.

es par. Al final del ciclo de reloj. Es puesta por instrucciones que usan el bit 7 del acumulador como bit de signo. La dirección permanece estable sobre el bus por un tiempo equivalente a un ciclo de reloj.Arquitectura y Operación del Microprocesador 8085A 111 • La bandera de Acarreo (CY) es activada (1 lógico) cuando el resultado de una operación aritmética produce un desborde del bit 7 del acumulador. lo cual significa que toda transferencia de información en el interior del dispositivo se realiza a través del bus interno de datos de 8 bits. el µP transfiere el byte alto del registro de direcciones de memoria al buffer de direcciones y el orden bajo del mismo registro se carga en el buffer de datos/direcciones. Para cargar el bus externo con una dirección. Estos se denominan: buffer de direcciones y buffer de datos/direcciones. entonces Z = 0. Es útil cuando se realizan operaciones BCD. Dependiendo del tipo de operación a realizar con el dispositivo externo. el µP debe usar el bus de direcciones para distinguir el dispositivo con el cual desea comunicarse. en otras palabras CY =1 cuando el resultado no puede ser expresado por 8 bits. es 1. • El bit de Signo (S) se activa si el bit más significativo del resultado almacenado en A. CY = 0. Debido a que el bus interno es de 8 bits. Si es impar. o abandonarán el tercer estado para que la CPU transmita el dato hacia el exterior durante una operación de escritura. cuyas salidas son de tres estados. si el resultado de operaciones lógicas o aritméticas es cero. las salidas del buffer permanecerán flotantes para que el dato en el bus externo sea transferido al interior del µP durante una operación de lectura. • El bit de Paridad (P) va a 1 si número de bits en 1 del registro acumulador. como se expuso en párrafos anteriores. la unidad de control lleva a tercer estado las salidas del buffer de datos/direcciones. • La bandera de Cero (Z) es 1.2. el µP debe realizar dos transferencias internas para emitir los 16 bits de la dirección. P = 0. Si el resultado es distinto de cero. Durante una operación de acceso a memoria o puerto de E/S.4 El bus interno de datos El 8085A es un µP con estructura de bus único. Las líneas internas de interconexión están separadas de los buses externos por medio de dos buffers de almacenamiento de 8 bits. 4. . • La condición de Acarreo Auxiliar (AC) indica con un nivel alto el desborde desde el bit 3 del acumulador. En estos casos se permiten números entre -128 a + 127. permitiendo que alguna lógica externa retenga el estado de las ocho líneas de menor peso de la dirección. el cual debe estar habilitado en modo de salida. Si no ocurre desborde.

Nunca está en tercer estado. Fig. Permanecen en tercer estado durante el proceso de RESET o en los modos HOLD y HALT. pueden ser alterados por RESET. Entrada que inicializa el contador de programa y los flip flops de habilitación de interrupción y HLDA. Muchas de estas señales son conocidas. Los 8 bits más significativos de las direcciones de memoria o de dispositivos de E/S.8. en la figura 4. Es una salida que indica si el contenido del bus AD0-AD7 corresponde a direcciones o datos. puede utilizarse para Bus de direcciones.8 se muestran el control de interrupciones y el canal de comunicación series. Se activa durante el primer ciclo de reloj de un ciclo de máquina y permite usar un registro de 8 bits externo al procesador para memorizar la parte baja del bus de direcciones. otras adquirirán sentido a medida que el estudiante progrese en la lectura de este trabajo. Los buses de datos y direcciones y las líneas de control permanecen en tercer estado durante el proceso de RESET.Arquitectura y Operación del Microprocesador 8085A 112 Finalmente. A8-A15 AD0-AD7 ALE . incluyendo el de banderas. Funciones auxiliares integradas en el 8085 En la próximas dos páginas se presenta una relación completa de la definición funcional de los terminales del microprocesador 8085A. Los contenidos de los registros internos del procesador. ambos conectados al bus interno de datos del 8085. 4. El bus de datos se presenta durante el 2do y 3er ciclo de reloj. La frecuencia de CLK es la mitad de la de la señal en X1 X2. Los 8 bits menos significativos de las direcciones de memoria o dispositivos de E/S aparecen en el bus durante el primer estado un ciclo de máquina. restablecer los demás componentes del sistema. Estos tópicos serán discutidos con detalle en capítulos próximos. DEFINICIÓN FUNCIONAL DE LOS TERMINALES DEL 8085 VCC VSS X1 -X2 CLK OUT RESET IN +5V Tierra Terminales de entrada para un cristal de cuarzo o una red LC o RC para activar el reloj interno del microprocesador Salida de la señal de reloj del μP para usar como reloj del sistema. Bus de datos/direcciones multiplexado. RESET OUT Salida que indica que el procesador está siendo inicializado.

Un nivel bajo en RD indica que el μP desea leer la memoria o dispositivo de E/S seleccionado. el estado del bit 7 del acumulador es cargado en esta salida. Reconocimiento de interrupción.1. Salida de datos en serie. HLDA vuelve a nivel bajo una vez que la solicitud de HOLD es removida. Si tiene nivel lógico alto durante un ciclo de lectura o escritura. indica que la memoria o dispositivo de E/S está listo para recibir o transferir datos. WR . Reconocimiento de HOLD. Permanece en tercer estado durante el proceso de RESET o en los modos HOLD y HALT. esta salida se usa. Si presenta nivel bajo. poniendo en estado de alta impedancia las siguientes líneas: A8-A15. Salida que indica que el μP ha recibido una petición de HOLD y que los buses entrarán en tercer estado.S1-IO/M RD WR READY HOLD Son salidas que indican si el ciclo de máquina 1 en progreso corresponde a: Búsqueda del código de operación. Es la interrupción de más alta prioridad.Arquitectura y Operación del Microprocesador 8085A 113 S0. RD . Permanece en tercer estado durante el proceso de RESET o en los modos HOLD y HALT. el CPU abandona el uso de estos buses una vez finalizado el ciclo de máquina en progreso. e IO / M . lectura en memoria o en puerto de E/S. Un nivel lógico 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 información. en lugar de RD. Se utiliza cuando el sistema se comunica con periféricos lentos cuyos tiempos de acceso sean superiores al periodo del dispositivo microprocesador. Señal de escritura. .1. AD0-AD7. Los datos en la entrada SID son cargados en el bit 7 del acumulador se ejecuta una instrucción RIM. Tipos de ciclos de máquina y señales de estado IO/M 0 0 1 1 0 1 Z Z Z 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 Búsqueda de OP Reconocimiento de interrupción HALT HOLD RESET 1 Ver tabla 4. Usando la instrucción SIM. HLDA INTA TRAP SID SOD Tabla. Después que una solicitud de interrupción ha sido aceptada. reconocimiento de interrupción o estado HALT. y que el bus de datos está listo para la transferencia de información. para activar el circuito que genera la interrupción. 4. Entrada de datos en serie. Entrada que indica que otro procesador o controlador solicita el uso de los buses de direcciones y datos. el procesador esperará un número entero de ciclos de reloj para que READY vaya a nivel alto y completar el ciclo de lectura o escritura. Señal de lectura. Entrada de interrupción no enmascarable. escritura en memoria o en puerto de E/S.

El oscilador LC funciona en forma adecuada para frecuencias hasta 5 MHz. Tal discusión reveló aspectos de interés sobre el modo como la CPU ejecuta las instrucciones y el tiempo invertido en ejecutar cada una.125 MHZ. la tolerancia de la frecuencia será de 10 %. RS ≤ 75 Ω L Ce Ci Red LC de resonancia paralela f = 1 2π L (C e + C i ) Con Ce ≥ 2Ci para un Δfmin ≈ 10 % 20 pf 10 KΩ Ci Red RC de resonancia paralela f = 3 Mhz Fig. el fabricante no recomienda otro valor de frecuencia. el autor estima que una guía sobre el funcionamiento de un µP no puede soslayar este tópico. por ser fundamental para comprender la dinámica del proceso de búsqueda y ejecución de una instrucción. En este último caso. Para usar la opción de reloj interno. Con el uso de un cristal de cuarzo se obtiene precisión y una gran estabilidad del valor de la frecuencia del reloj.1 se trató al µP imaginario como una máquina de estado. 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 cualquier caso el valor de la frecuencia de oscilación interna debe estar comprendido entre 1 MHz y 3. 4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A En la sección 3. la cual puede considerarse apropiada para algunas aplicaciones. o un circuito sintonizado LC.Arquitectura y Operación del Microprocesador 8085A 114 4. Toda operación realizada por el 8085A durante el procesamiento de una determinada instrucción esta sincronizada por el reloj maestro del sistema. Si se elige está opción.9 ilustra el modo de conexión para cada una de las posibilidades de uso del generador interno. La figura 4. No obstante. a menos que se use la versión 8085A-2. . una red RC. CS ≤ 7 pf. Circuitos para fijar la frecuencia del reloj. debe aplicarse a las entrada X1-X2 un cristal de cuarzo. Características del cristal f = 2fclk CL ≤ 30 pf.9. el cual puede ser generado en el interior del dispositivo o suministrado por una fuente externa. la cual soporta hasta 5 MHz. En el manual del usuario del 8085A se encuentra abundante información sobre aspectos relativos a la sincronización de las señales del 8085 y sobre el número de ciclos de reloj necesarios para procesar cada instrucción.

En la figura 4.10. a menos que el μP sea forzado a entrar.1 El ciclo de instrucción Al igual que el µP del capítulo anterior. Escritura en puerto de E/S Reconocimiento de interrupción. Cada paso de esta secuencia comprende un estado (Ti). 4.3. necesitándose de 3 a 6 estados para completar un ciclo de máquina.Arquitectura y Operación del Microprocesador 8085A 101 4. los cuales se realizan internamente por medio de una secuencia de microinstrucciones almacenadas en ROM.10 se muestra un ciclo de instrucción de cuatro ciclos de máquina. Para completar la ejecución de una instrucción. Cada uno de estos accesos a dispositivos externos a la CPU constituyen un ciclo de máquina (Mi). éste inicia la ejecución de las instrucciones en la posición 0000H de la memoria. tales como las interrupciones o la petición de operación en modo HOLD. cuando se aplica potencia al procesador. Los ciclos de máquina de posible aparición durante la ejecución de una instrucción son: • • • • • • Búsqueda del código de operación Lectura de memoria Escritura de memoria. procesando todo el programa hasta su finalización. el 8085A debe realizar de 1 a 5 operaciones de lectura/escritura a memoria o puerto de E/S. esto se logra porque el sistema está provisto de una red para autoreset de la CPU. en un estado de parada (HALT). El tiempo necesario para que el µP busque y ejecute una instrucción representa un ciclo de instrucción. Este modo de operación se mantiene. M1 Estado CLK M2 M3 M4 T1 T2 T3 T4 T1 T2 T3 T1 T2 T3 T1 T2 T3 Ciclo de Máquina Ciclo de Instrucción Fig. El microprocesador buscará la primera instrucción en memoria y la ejecutará. . Existen otros métodos para modificar el proceso de ejecución normal de un programa. Estados y ciclos de máquina del microprocesador. por una instrucción HLT. Lectura de puerto de E/S. Un estado corresponde a un ciclo del reloj del sistema.

En este último caso. Este tiempo es usado para operaciones internas con los registros y la ALU.2. ésta exige tres lecturas de la memoria o ciclos de máquina para obtener el código de operación. mientras que DAD rp. se procesa durante tres ciclos de máquina. requieren un ciclo de máquina único para obtener el OC de memoria y completar su ejecución. 4.20FFH. Considerando las instrucciones multybyte. Algunas instrucciones de un byte. SEÑALES DE ESTADO SEÑALES DE CONTROL IO/M S1 S0 CICLO DE MÁQUINA RD WR INTA 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 Búsqueda del código de operación Escritura en memoria Lectura en memoria Escritura a puerto de E/S Lectura de puerto de E/S Reconocimiento de interrupción Bus inactivo DAD RST/TRAP HALT 0 1 0 1 0 1 1 1 Z 1 0 1 0 1 1 1 1 Z 1 1 1 1 1 0 1 1 1 Durante el ciclo de máquina de bus inactivo no se realizan operaciones con memoria o puerto de E/S. la cual produce que el contenido del registro par HL se incremente en 1. los ciclos M2 y M3. En la figura 4. LXI H. ninguna instrucción del 8085A requiere más de cinco ciclos de máquina. ambos del tipo de bus inactivo. para informar a dispositivos periféricos el tipo de ciclo de máquina que se inicia. Tabla. En cada ciclo se invierten tres estados.Arquitectura y Operación del Microprocesador 8085A 102 • Modo de bus inactivo. La fase de búsqueda del código que identifica a toda instrucción se realiza durante el primer ciclo de máquina M1. como INX rp. también de un byte.11 se observa el estado de los registros del µP antes de ejecutar la instrucción. Para ilustrar la secuencia de operaciones necesarias para la ejecución de una instrucción. En el transcurso del primer estado cualquier ciclo de máquina. Ciclos de máquina del 8085A. el cual utiliza cuatro o seis ciclos de reloj. por ejemplo JMP dirección. . S0. el microprocesador asigna los estados de las señales IO/M. son utilizados por el µP para realizar operaciones internas necesarias para completar la ejecución de la instrucción.2 muestra el estado de las señales de estado y control para cada tipo de ciclo de máquina. El número de ciclos de máquina necesarios para completar la ejecución normal de una instrucción depende del total de operaciones de lectura o escritura que se realice a la memoria o dispositivo de E/S y de la complejidad de la instrucción. la dirección de salto y culminar la ejecución. excepto el ciclo de búsqueda del código de operación. considere INX H. usada para cargar en HL. La tabla 4. el dato de 16 bits 20FFH. En cualquier caso. El contenido de IR (21H) corresponde al código de operación de la última instrucción ejecutada. S1.

que una vez procesada la instrucción aritmética. Fig.23H. 4. .12. el cual simula en ambiente WINDOWS la operación de un microcomputador basado en el µP8085.Arquitectura y Operación del Microprocesador 8085A 103 Fig. en la figura 4.12 Estado interno del CPU después de la ejecución de INX H. el registro par contiene el valor 2100H y el registro IR mantiene el código de operación. Las figuras mostradas son una copia de la salida del programa MICRO 85. pero nuestro interés actual se centra en los detalles de la secuencia de operaciones internas que conducen a la ejecución de una instrucción. Esta es una herramienta de gran valor didáctico y práctico. Registros del CPU antes de ejecutar la instrucción INX H Observe.11. de la instrucción INX rp. 4.

4.3. RESET RESET TR RESET T1 HALT HALT T2 READY READY READY HOLD· INTVAL TW HOLD BITHLDA = 1 THALT INTVAL BITHALT= 0 HOLD = 1 SI BITHLDA = 1 no M1 CC=6 SI BITINTA = 1 BITINTE = 0 T3 T4 CC=4 HOLD = 1 no BITHLDA = 1 T6 BITHLDA = 1 SI T5 no no ÚLTIMO CICLO SI HOLD THOLD HOLD BITHLDA = 0 no INT. el cual tiene una duración de cuatro o seis estados.2 Secuencia de transición de estados El diagrama de la figura 4.13 muestra la sucesión de eventos por los cuales transita el 8085A durante el desarrollo de un ciclo de máquina. Debe recordarse que durante un ciclo de máquina el µP pasa por tres estados. . se analiza el diagrama de la figura 4. a menos que se trate del ciclo de búsqueda.Arquitectura y Operación del Microprocesador 8085A 104 4.13 Diagrama de transición de estados del µP 8085A Para distinguir los modos de operación del µP. VÁLIDA SI BITINTA = 1 BITINTE = 0 HALT = 1 SI no Fig.13 considerando sólo aquellos sucesos que modifican la transición normal de la ejecución entre los estados T1 y T6.

señalando que finalizó la operación de DMA. Después de T6. En este análisis se considera que M1 es el único ciclo de máquina y consta de seis estados. se examina el bit de estado HLDA. Si se activa una interrupción válida. Si existen interrupciones diferidas. cuando el µP sale del estado T6 y no existen solicitudes de interrupción. el µP verifica si hay interrupciones pendientes. Si HOLD es cero el ciclo de máquina se completa con los estados T5 y T6. se inicia un ciclo de máquina de reconocimiento de interrupción. indica que última instrucción ejecutada fue HLT. RD y WR se mantienen flotantes. Si no las hay. En el siguiente pulso de reloj. En T2 se inspecciona el estado de la entrada READY. el 8085A podrá salir del estado THALT e iniciar la ejecución de una nueva instrucción.13. o de T4 si M1 es de 4 estados. Esto también ocurre si el ciclo en desarrollo no es de búsqueda del código de operación. En el estado T4 el µP captura el estado de la línea HOLD y pone a 1 un bit interno (BITHLDA). la prueba de la línea HOLD se realiza. el µP transitará hacia T3 y luego a T4. el 8085A entrará en un estado de espera TW. el diagrama de la figura 4. En ausencia de solicitud de interrupción. si la entrada HOLD está en 1. Si este es el caso. Solo por la ocurrencia de un evento externo. atenderá la petición externa y retornará a THALT cuando HOLD vuelva cero. mientras el reloj CLK =1 durante los estados T2 o TW.13 indica que el µP entrará en un estado de parada (HALT). El µP se trasladará al estado THOLD. El 8085A puede abandonar temporalmente THALT cuando la línea HOLD sea puesta en alto por un dispositivo externo en solicitud de acceso directo a memoria (DMA). Durante el modo de operación HALT. que si el ciclo M1 consta de 4 estados. o del siguiente ciclo. se carga uno en el bit de reconocimiento de interrupción BITINTA. inicia en el estado T1 el ciclo de máquina M1 de búsqueda del código de operación. si está en 1 el 8085 entra en un estado THOLD en el próximo pulso de reloj. en cuyo caso finaliza en T3. después del arranque del sistema.Arquitectura y Operación del Microprocesador 8085A 105 Cuando el µP sale del estado de reset. A8-A15. si el resultado de la prueba del BITHLDA indica un nivel bajo y el ciclo en progreso es el último o único ciclo de máquina de la instrucción. sólo un comando de RESET permitirá que el µP abandone . instante en el cual procederá hasta los estados T3 y T4. En T1 prueba un bit interno que. Si por el contrario READY está en nivel bajo. el 8085 se traslada estado T1 del ciclo de búsqueda del código de operación de la siguiente instrucción. Observe en el diagrama de la figura 4. y se desactivan las interrupciones poniendo a cero el BITINTE de habilitación de interrupciones. porque el ciclo en desarrollo es M1. IO / M. en caso que la instrucción tenga más de uno. Si está en nivel lógico alto. Una vez ejecutada la instrucción. cuando está en uno. el µP deshabilitará el sistema de interrupciones cargando cero en el BITINTE y transitará hacia el estado T1del ciclo M1 de la próxima instrucción. procederá al estado T1 del ciclo M1 de la próxima instrucción. donde se mantendrá hasta cuando READY vuelva a nivel alto. el 8085 permanece inactivo y los terminales AD0-AD7.

14. cuyo ciclo de instrucción está constituido por un ciclo de máquina de seis estados. cuando la orden de RESET sea levantada. Tal situación la describe el diagrama de transición de la figura 4. se ejecuta inmediatamente después que el µP sale del estado de RESET y que todo ciclo de máquina Mi se inicia en el estado T1. Con el análisis previo. de un byte. basado en el diagrama de estados de la figura 4. . si se trata de una instrucción con un ciclo de máquina. Debe quedar claro que si la última instrucción ejecutada no fue HLT y si además ningún periférico: solicita estados de espera. THOLD. se pretende mostrar los modos de operación del microprocesador 8085A.13. éste se trasladará en forma libre desde el estado T1 hasta completar la ejecución de la instrucción en el estado T4 o T6. En este caso el sistema será reiniciado en TR y procederá a ejecutar la instrucción en la dirección 0000H de la memoria. tanto externas como internas. a continuación se detallan todas las operaciones. el primer ciclo M1 constará de cuatro o seis estados y los subsiguientes de sólo tres. TW. Se supone que la instrucción INX H. ni solicitudes de interrupción. 4. realizadas por el 8085A durante cada estado.Arquitectura y Operación del Microprocesador 8085A 106 THALT. más que detallar los sucesos que ocurren durante cada estado por el cual pasa la CPU. RESET RESET TR RESET T1 T2 T3 T4 T6 T5 Fig.14 Diagrama de transición de estados del µP 8085A sin considerar los estados THALT. entrada en el modo de operación HOLD o interrumpe al µP. Retomando el caso de la instrucción INX H. Si la búsqueda o la ejecución de la instrucción requieren más de una acceso a la memoria.

La entrada HOLD es examinada y si está en nivel alto se carga uno en el BITHLDA. si está en uno el µP se traslada al estado THOLD en el próximo pulso de reloj. T4 Externas: Ninguna Internas: El código de operación es interpretado. IO / M =0. el 8085A genera la señal ALE. Se detecta el estado del BITHLDA.15. Simultáneamente. S0=1 y S1=1. Si el ciclo de búsqueda de la instrucción en ejecución tuviese cuatro estados. transfiere el contenido del contador de programa al buffer de datos/direcciones y al buffer de direcciones. la entrada HOLD es muestreada. activa en alto. La información de las operaciones externas realizadas en cada estado del ciclo de máquina M1 durante el procesamiento de la instrucción INX H. si es bajo se introduce un estado de espera.Arquitectura y Operación del Microprocesador 8085A 107 T1 Externas: Al inicio de T1. . Internas: El código de operación es pasado al decodificador de instrucciones. T2 Externas: El µP activa la señal RD de lectura y coloca en tercer estado las salidas del buffer de datos/direcciones para permitir que el dispositivo de memoria transfiera el código de operación de la instrucción INX H. Para indicar a la memoria la dirección de la posición donde se encuentra la instrucción. al salir de T4. Internas El contador de programa es incrementado. iniciaría un nuevo ciclo de máquina en T1. para informar a dispositivos externos que el contenido del bus AD0-AD7 corresponde a los 8 bits de orden bajo de la dirección. T5-6 Externas: Ninguna Internas: El registro HL es incrementado. RD pasa a nivel alto. se activa a uno la salida HLDA y el µP entra en un estado THOLD. Durante T4 de instrucciones de 6T. se muestra como un diagrama de tiempo en la figura 4. el µP identifica el ciclo de máquina en progreso emitiendo las señales. si es uno los buses pasan a tercer estado. y si está en uno el BITHLDA es cargado con uno. T3 Externas: El código de operación de la instrucción es cargado en el registro de instrucciones del µP. Internas: Examina el flip flop de estado HALT. Durante T4 de instrucciones de 4T. se examina el BITHLDA. En este punto el µP sabe que en el próximo pulso debe transitar hacia el estado T5 por tratarse de la instrucción INX H. El estado de las entrada READY es capturado en el flanco de subida de T2.

También una versión CMOS de OKI semiconductor liberada en 1998 y con código MSM80C85AHRS.3. en cuya ejecución se invierte un tiempo de 5.28 µs. 4. En la mayoría de las instrucciones del 8085. el 8085A invierte un tiempo de 6 estados x 320 ns/estados = 1. El 8085A requiere seis estados para completar la ejecución de la instrucción INX rp. . INX.16. Si un periférico de E/S o un circuito de memoria son lentos comparados con los tiempos estipulados para que el 8085A realice una operación de lectura o escritura.3 µs.25 ns o 320 ns. operando a 5 MHz. CALL condicional. Si la frecuencia de la fundamental del cristal de cuarzo externo es 6. el ciclo de búsqueda tiene cuatro estados.Arquitectura y Operación del Microprocesador 8085A 108 M1 SEÑAL T1 T2 T3 T4 T5 T6 M1 T1 CLK S1. de modo que como indica el diagrama de figura 4. Esto significa que para realizar la operación de incrementar cualquiera de los registros pares.14. opera a esta velocidad.8 µs. el dispositivo externo puede optar por solicitar al µP que pase a un estado de espera por un número entero de periodos de reloj.15 Ciclo de instrucción (Ciclo de máquina de búsqueda ) para la instrucción INX H (OC=23H).S0 IO / M IO / M = 0. 4x320 ns = 1. DCX. al final del estado T4 la transición ocurre hacia el estado T1 del ciclo de máquina siguiente. La hoja técnica del µP señala un ciclo de instrucción de 1.25 MHz. En realidad esta información se refiere tiempo que corresponde a la ejecución de las instrucciones de cuatro estados.3 El estado de espera. y RET condicional. SPHL. Existen instrucciones de 18 estados. Una versión más rápida. PCHL. Las instrucciones en las cuales se invierte 6 estados durante el ciclo de búsqueda son: CALL. el 8085A-2 tiene un ciclo de instrucción de 0. La función de cada una se describirá oportunamente. 4. PUSH. cada estado interno tendrá una duración de 2000/6.92 µs. como indica la figura 4. S 1 = 1. S 0 = 1 PCH PCL A8-A15 AD0-AD7 ALE Indeterminado 23H RD Fig.76 µs.

...... T6 T5 En el caso de la instrucción INX H. y control mantienen los niveles existentes durante T2. . datos. En su lugar. al estar la entrada READY activada en nivel bajo. T4: . Internas Se muestrea la entrada READY en el flanco de subida del estado TW. la transición ocurre hacia un estado de espera. 4. . si se mantiene en nivel bajo se introduce otro estado de espera. TW Externas: Las líneas de direcciones. El diagrama de tiempos de la ejecución de la instrucción INX H con estado de espera es el de la figura 4. T5-6 :.. excepto que a la salida del estado T2 el µP no pasa a T3. la entrada al estado TW no modifica ninguna de las operaciones externas o internas realizadas durante el desarrollo del ciclo de máquina..16 Diagrama de transición de estados del µP 8085A considerando el estado TW.. T3: . Las actividades realizadas por el µP durante el estado TW son las siguientes: T1.17. . T2.Arquitectura y Operación del Microprocesador 8085A 109 RESET RESET TR RESET T1 READY READY T2 TW READY T3 T4 Fig..

18 Ciclo lectura en memoria. El fabricante especifica un valor de tAD = 575 ns para un cristal de 6. Si la memoria tiene un tiempo de acceso mayor que tAD. Fig. deberá solicitar al µP que . S 0 = 1 PCH PCL A8-A15 AD0-AD7 ALE Indeterminado 23H RD READY Fig. después que el 8085A presenta una dirección válida en las líneas de direcciones.S0 IO / M IO / M = 0.Arquitectura y Operación del Microprocesador 8085A 110 SEÑAL T1 T2 M1 T3 M1 T4 T5 T6 T1 CLK S1. 4. 4.25 MHz. El estado de espera puede ser solicitado por dispositivos de memoria con tiempo de acceso tacc mayor que el tiempo especificado para que el 8085A lea un dato válido.17 Ciclo de instrucción (Ciclo de máquina de búsqueda) para INX H (OC=23H) con estado de espera. En la figura 4. especificándose el tiempo tAD (A0-15 valid to valid data in). El tiempo tAD es el lapso del cual dispone un dispositivo externo para cargar un dato válido en el bus de datos. después que la dirección está estabilizada en las líneas de direcciones. S 1 = 1.18 se muestra un ciclo de lectura de memoria.

3. 4. no es posible ejecutar el programa suministrándole pulsos de reloj a una cadencia lo suficientemente lenta como desearía un diseñador en la fase de depuración de un programa. S0 . procesa la primera instrucción del programa hasta el estado T2 del ciclo de máquina M1 de búsqueda del código de operación. Durante el flanco de subida del ciclo T2. Una vez que el 8085A sale del estado de RESET. de modo que la salida de la puerta 74LS11 pasará a nivel alto. El µP cesará toda actividad por la duración de N pulsos de reloj. el tiempo tAD tendrá un incremento efectivo de 320 ns. es posible utilizarlo para detener el programa cada vez que se ejecute una instrucción o un ciclo de máquina. donde N es el número de estados de espera.4 El modo de operación paso a paso Debido a que el microprocesador 8085A debe operar con un reloj interno con una frecuencia de al menos 500 KHz.T-225 ns. IO / M estará en nivel lógico cero. Aunque el concepto de estado de espera fue originalmente introducido para sincronizar la transferencia de datos entre el µP y memorias o periféricos de velocidad baja. No obstante.19 permite llevar a la práctica el modo de operación de ejecución de instrucciones por pasos. Durante T1 el µP identifica el ciclo en progreso emitiendo las señales de estado IO / M. Por cada estado de espera. hasta cuando se reciba un comando PS (CLKU2B) de paso simple.5+N).20.18 para procesar la instrucción siguiente. Considere el inicio de la ejecución de un programa después de haber reiniciado el µP. debiéndose pulsar el interruptor paso de la figura 4. también generada durante el estado T1. El objetivo es detener la ejecución de un programa cada vez que se ejecuta una instrucción. mientras que S0 y S1 estarán en alto. Estos modos de operación son de gran utilidad en la fase de desarrollo de un programa. este será ejecutado instrucción por instrucción. y S1 . El funcionamiento del circuito de paso simple se entiende mejor si se examina el diagrama de tiempos de la figura 4. se carga uno en U2A y la entrada READY del 8085 conmutará a nivel lógico bajo.Arquitectura y Operación del Microprocesador 8085A 111 agregue uno o más estados de espera al ciclo de máquina en progreso. si utilizando lógica externa se introducen n estados de espera durante el ciclo de búsqueda del código de operación de cada instrucción del programa. Por tratarse del ciclo de búsqueda. En el flanco descendente de la señal ALE. El valor de tAD para cualquier frecuencia del cristal dentro del rango válido está dado por la expresión (2. el µP examina la línea READY y en siguiente pulso de reloj entrará en un estado de espera TW. a la frecuencia especificada. El circuito mostrado en la figura 4. .

4. .Arquitectura y Operación del Microprocesador 8085A 126 Fig.19. Circuito para paso simple.

La ejecución de STA dirección causa que los ocho bits almacenados en el acumulador sean copiados en la posición de memoria especificada por el operando dirección. Para procesar esta instrucción. Para instrucciones de más de un byte.3. Durante el ciclo de máquina M1. 4.Arquitectura y Operación del Microprocesador 8085A 127 Fig.5 Ciclos de lectura y escritura en memoria y puertos de E/S. Considere la figura 4. repitiéndose el proceso descrito hasta la ejecución de la última instrucción del programa en proceso. el 8085A debe realizar al menos un ciclo de máquina adicional al de búsqueda para obtener todos los bytes de la instrucción y completar la ejecución.20 Ejecución de una instrucción de un ciclo de máquina y cuatro estados usando el modo de paso simple. El µP realizará la transición hacia los estados T3 y T4 de M1 y hacia los estados T1 y T2 de la siguiente instrucción.21. 4. . el microprocesador interpreta el código de operación de la instrucción y detecta que debe realizar otro acceso a la memoria en búsqueda de la dirección a la cual debe transferirse el contenido del registro acumulador. el 8085A deben obtener tres bytes desde la memoria del sistema: el código de operación y los dos bytes que identifican la dirección a la cual se debe realizar la transferencia. donde se presentan los estados y ciclos de máquina necesarios para ejecutar la instrucción STA dirección. el biestable U2B forzará un cero en U2A. ocasionando que la entrada READY regrese a uno. En la transición positiva de PS.

la información en el registro A es transferida al dispositivo de salida con la dirección especificada por puerto. El µP invierte cuatro ciclos de máquinas y un total de trece estados en procesar STA dirección. 4. ambos del tipo de lectura en memoria. En el repertorio de instrucciones del 8085A existen sólo dos instrucciones para comunicación con puertos: IN puerto y OUT puerto. La ejecución de la instrucción de dos bytes OUT puerto.21 Ciclos de instrucción de STA dirección.22 Ciclo de instrucción para OUT 01H (OC=32H). En la . son necesarios para obtener el operando dirección de STA. Fig. Los ciclos de máquina M2 y M3. carga el contenido del acumulador en el bus de datos. Como resultado. Los ciclos de máquina de lectura o escritura pueden ser de acceso a memoria o a un puerto de E/S. mientras que en las dieciséis líneas de direcciones se duplica el número de ocho bits del operando puerto. 4.Arquitectura y Operación del Microprocesador 8085A 128 Fig. mientras que durante M4 se escribe a memoria el byte en el acumulador.

que el soporte físico de la máquina garantice que el µP entre en un estado inicial definido. Al inicio del estado T2 de M3.Arquitectura y Operación del Microprocesador 8085A 129 figura 4. una vez que la tensión de alimentación alcance su valor mínimo de operación y que la señal de reloj se haya estabilizado. El µP activa la línea de lectura RD y el código de operación de OUT puerto (32H) es transferido desde la memoria hasta interior del µP. como puede apreciarse en la figura 4. la dirección PC+1 es presentada en el bus de direcciones. A la salida de T4 . o para restituir las condiciones iniciales.22. La entrada RESET IN del 8085A se usa con el propósito de llevar a la CPU al estado inicial deseado. Durante T3 se completa la transferencia hacia el periférico identificado por los 8 bits altos o bajos del bus de direcciones. después del proceso de arranque. Para que en el ciclo M3 de escritura a puerto se realice la transferencia del byte en el A hacia el exterior del µP. S1 . Cada ciclo de máquina es identificado por las señales de estado IO / M.4 LA SECUENCIA DE INICIO DEL 8085 Cuando se suministra potencia a una aplicación basada en el 8085A. Para convertir el número del puerto en una dirección de 16 bits se repite la dirección (0101H) y se carga en el bus. como se observa en la figura 4. seguido de un ciclo de lectura en memoria para obtener la dirección del puerto. el 8085A ha interpretado el OC y está enterado que debe regresar a la memoria y extraer el número del puerto. Durante el ciclo de búsqueda M1. se activa de nuevo RD y entonces la memoria coloca en el bus de datos el número del puerto (01H). el primero de búsqueda de OC. Finalizado el ciclo de máquina M2. es necesario cargar la dirección de 8 bits del puerto en las líneas de direcciones. la dirección en el PC es cargada en las líneas de direcciones y el PC es incrementado para apuntar al siguiente byte de la instrucción. toda la información relativa a la instrucción en proceso está en poder del 8085A y solo resta mover el contenido de A hacia el puerto 01H para completar la ejecución. y finalmente un ciclo de escritura a memoria para realizar la transferencia hacia el dispositivo externo. En el estado T1 de M2. y mantenerlo por un tiempo mayor o igual a la duración de tres ciclos del reloj interno. El ciclo de instrucción de OUT puerto lo constituyen tres ciclos de máquina distintos. donde es decodificado. y S 0 . es de importancia vital para el funcionamiento adecuado del sistema. si el µP está bloqueado o funcionando en situación de falla. y carga en el bus externo de datos el contenido de A. el µP activa la señal de escritura WR .22 se muestra el diagrama de tiempos de los ciclo de máquina de búsqueda y ejecución de la instrucción OUT 01H. la cual se almacena en el µP. Estas salidas son generadas al inicio de cada ciclo y mantienen sus niveles durante el transcurso del ciclo de máquina. En ambos casos es necesario aplicar un nivel bajo al terminal. 4. .22.

son cargados con cero. Durante este tiempo se ejecuta la secuencia de inicio. READY. HLDA. M1 T1 CLK SEÑAL M1 T2 TR TR TR TR T1 RESET IN RESET OUT Fig. Cuando un nivel bajo es detectado. El nivel de la entrada RESET IN es examinado durante cada pulso del reloj. el µP. pero no puede asegurarse que mantengan su contenido después de una operación de RESET.23. y SOD. RESET OUT es sincrónica con el reloj CLK y permanece activa durante un número entero de ciclos de reloj.23 Secuencia de RESET. el contador de programa contiene la dirección 0000H. Esta salida puede usarse para el inicio de circuitos externos del sistema.23 muestra el diagrama de tiempos de la secuencia de inicio. Cuando el µP sale del estado TR. tal como indica la figura 4. La figura 4. Un comando de RESET finaliza la ejecución del programa y lleva a tercer estado los buses de direcciones y datos y las líneas de control. la salida RESET OUT vuelve a cero y el 8085A entra en el estado T1 del ciclo de máquina M1 de la primera instrucción del programa. 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.Arquitectura y Operación del Microprocesador 8085A 130 Como resultado de la aplicación de una señal válida a RESET IN . Todos los bits de control y de estado asociados a las líneas HOLD. y los bits de ciclos de máquina y estados de máquina. de modo que después de una operación de RESET la primera instrucción . Cuando se detecta el regreso a nivel alto de la línea RESET IN . 4. Las banderas de condición de estados y los registros internos del µP no son manipulados durante la secuencia de inicio. para notificar al exterior que el µP esta siendo iniciado. Mientras RESET IN permanezca en cero transcurren nuevos TR y se continúa examinando el nivel de RESET IN . entra en TR y activa a uno la salida RESET OUT .

24. A continuación C1 se carga a través del resistor R1 con constante de tiempo τ = R1C1. Por esta razón conviene que la memoria EPROM de sistemas basados en el 8085A ocupe la zona inicial del espacio de direcciones del µP. el capacitor C1 aplicará un nivel bajo en la entrada RESET IN . la naturaleza aleatoria de los estados iniciales alcanzados por registros y flip flops internos afectaría en forma severa el funcionamiento del sistema. La ejecución de la secuencia de inicio permite cargar los componentes internos de la CPU con valores lógicos procedentes para la búsqueda y ejecución de la primera instrucción del programa. Al activarse la fuente de +5V. tanto en modo automático como manual. una operación de RESET es el único medio para sacar al µP del estado THALT. por ejemplo MSM80C85A. es una de las opciones para salir del modo de bajo consumo.125 MHz +5V R1 5. 6.Arquitectura y Operación del Microprocesador 8085A 131 será buscada en esta dirección. se presenta en la figura 4. Por ejemplo. existe una forma de operación conocida como modo de consumo bajo (power down mode). Reiniciar el µP. es común insertar una instrucción HLT en un programa para suspender temporalmente la ejecución en espera de una solicitud de interrupción por parte de un periférico.1 KΩ 8085A 1N914 RESET C1 10μf Fig. rutinas de detección de fallas y comandos para programar los periféricos y controladores asociados al sistema. pero se suspenden las actividades internas a tal punto que el consumo de potencia global se reduce en forma apreciable.24 Circuito de RESET. 4. Es usual que esta área de la memoria contenga la identificación del sistema. Es obvio que si el dispositivo no es iniciado durante TR. Un circuito típico para generar la señal de RESET. Existen otras situaciones en las cuales es necesario forzar el 8085A al estado inicial. iniciándose el estado TR. El µP se mantendrá en TR hasta cuando . Si no ocurre la interrupción. En las versiones CMOS del 8085A. durante el cual el µP mantiene la información en memoria.

En condiciones normales de operación. donde t95 es el tiempo transcurrido desde la activación de la fuente de poder hasta cuando VCC = 4.75 V. Fig. conviene que durante el arranque se retarde la subida a nivel alto de la entrada RESET IN . No obstante deben tenerse presente dos condiciones de operación que obligan a prolongar el tiempo de RESET. se lleva a nivel bajo a RESET IN por algunos milisegundos. En segundo lugar. especificado en la hoja técnica del dispositivo como voltaje mínimo de operación.Arquitectura y Operación del Microprocesador 8085A 132 el voltaje en C1 alcance el valor mínimo reconocido como uno lógico por el circuito disparador de Schmitt de la entrada RESET IN . debe considerarse que el voltaje de alimentación requiere algunos milisegundos para alcanzar un nivel del 95% de VCC. La duración de TR es fijada por el valor deτ. o 4. Este es VIHR = 2. por razones concernientes a la tecnología de fabricación del dispositivo. al final de este periodo se repite el proceso de carga de C1.25 ilustra la situación descrita. Una vez estabilizado VCC en 4. Si se acciona el pulsador de la figura 2. En consecuencia. el funcionamiento correcto del µP hasta 10 ms después que la tensión de alimentación VCC se eleve a 4. el capacitor C1 mantiene en nivel alto la entrada de RESET.24.4 V. En el inicio de tR el µP funciona en condiciones normales y la línea RESET IN está en cero. por un tiempo mayor a t95 + 10 ms. Primero.25 Salida de la fuente de poder y señal RESET IN durante el arranque del µP.75 V. 4. La figura 4. se deja transcurrir un tiempo 10 ms + tR. La rutina de inicio se ejecuta y .75 V .75 V. El diodo D1 permite la descarga rápida del C1 al desconectarse al energía. 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. INTEL especifica que no garantiza.

culmina la discusión del tópico de análisis de tiempos iniciada en este capítulo. .Arquitectura y Operación del Microprocesador 8085A 133 el µP entrará al último estado TR. Con la descripción del circuito que hace posible el transito del 8085A hacia el estado TR. Los diagramas de tiempos correspondientes a los ciclos de máquina de reconocimiento de interrupción y operación en el estado HOLD y HALT. En realidad no representa un problema crítico la selección de la constante de tiempoτ.4 V) durante 33 largos ms.24. desde el momento de accionarse el interruptor de la fuente de poder. durante el cual se detectara un nivel alto en RESET IN . se analizan en capítulos posteriores. El valor de 51 ms seleccionado para τ en el circuito de la figura 4. mantiene a RESET IN en cero (por debajo de 2. y el 8085A transitará al ciclo de búsqueda de la primera instrucción del programa.

1 . es necesario organizar un sistema microcomputador alrededor del µP.El Microcomputador Básico 134 El Microcomputador Básico Para el diseño de un sistema empotrado basado un microprocesador y destinado resolver un problema específico de control. así como las eventuales condiciones de alarma sean presentados en la pantalla de un terminal o sean transmitidos por el canal de comunicación serie hacia un microcomputador de mayor capacidad.1 SISTEMA MCS-85 MÍNIMO Para establecer los componentes mínimos necesarios para construir un sistema de control típico basado en µP. considere el problema simple de supervisar los niveles de temperatura en ocho puntos de un proceso usando termopares como sensores. ni temporizadores internos. En un sistema de cómputo basado en el 8085. La selección del tipo de componente a utilizar está determinada por la capacidad de la memoria y el número de puertos de E/S requeridos por la aplicación. o interconectando el microprocesador a circuitos de memoria y puertos de E/S estándares. Los recursos ofrecidos por el 8085A. Un diagrama de bloques de sistema se muestra en la figura 5. puertos de E/S. no tiene memoria. El 8085A puede usarse para construir un microcomputador usando los circuitos de soporte del dispositivo. distinguen al dispositivo como una CPU apropiada para uso en aplicaciones de control susceptibles de realizar con máquinas de 8 bits. Debido a que el 8085A es un microprocesador. tales como el sistema de interrupciones y el canal de comunicación serie. 5. todas estas funciones deben ser realizadas por circuitos externos conectados a los buses del microprocesador. El sistema debe permitir que los valores de temperatura adquiridos. además de la versatilidad de los circuitos de soporte.

Cada sensor del sistema de adquisición de datos de la figura 5.El Microcomputador Básico 135 Vi MUX S2 S1 S0 A S/H S/H CAD D0-D7 start eoc sensores interrupción salida analógica CDA D0-D7 8085A µC salida serie entrada serie PC Fig. El valor digital presente a la entrada del convertidor digital analógico (CDA) es convertido en una tensión análoga y entregado al proceso.1 proporciona como señal de salida una tensión analógica. por medio de puertos de E/S de dirección determinada. El multiplexor analógico (MUX) selecciona una de las señales para ser enviada al convertidor analógico digital (CAD). El circuito S/H muestrea la tensión de entrada y la mantiene constante durante el tiempo que dure la conversión. debe usarse un circuito demultiplexor análogo.1 Sistema de adquisición de datos. medición y control de temperatura es una aplicación susceptible de ser realizada con un µP de ocho bits. Como puede observarse en el diagrama de bloques del sistema. después de ser procesada por el amplificador de instrumentación (A) y el circuito de muestreo y mantenimiento (S/H). cuya magnitud es una función no lineal del valor de la temperatura en el punto de prueba. y el fin de la conversión lo señala el CAD por medio de la salida EOC. Por medio de las entradas de selección 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 análogo. Los circuitos de CAD y CDA son conectados al 8085A. el diseñador 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. La adquisición. El proceso de conversión se inicia cuando es activada la línea START del CAD. De igual forma debe garantizarse que toda la restricción de tiempo inherente a la adquisición de los datos y control de la planta puede ser superada por el µP. En otros casos. 5. el valor digital equivalente al voltaje análogo desconocido es cargado en . En caso que sea necesario disponer de otras salidas análogas.

hacia un terminal o computador central. uno de entrada (Puerto A) y dos de salida (Puertos B y C). para seleccionar cual de las ocho señales va a ser convertida. el número del canal. Las funciones de memoria y puertos necesarios para el sistema de supervisión pueden ser suplidas por los circuitos de soporte del 8085A: el 8155/56 integra en el encapsulado 256 bytes de memoria RWM.2 Funciones de las líneas de los puertos de E/S. el µP cargará en memoria el byte resultado de la conversión y procederá a procesar la siguiente entrada. Para conectar la sección de adquisición de datos al µP. Una vez adquiridas las ocho señales de entradas son convertidas en unidades de temperatura y enviadas al canal serie. .2 se observa que las líneas PC4.PC2 se usan para la selección del canal.El Microcomputador Básico 136 el µP. 2 puertos programables de 8 bits. El 8085A presenta en las entradas S0-S2 del multiplexor. El 8355/8755 provee 2 Kbytes de memoria ROM/EPROM y dos puertos 8 bits. Este lo convertirá a unidades de temperatura y posteriormente lo transmitirá. reiniciándose el proceso. mientras que PC1 controla el S/H y PC0 suministra la señal de inicio de conversión. La salida del CAD se acopla al puerto A. uno de 6 bits y un contador/temporizador programable de 14 bits. Transcurrido un tiempo igual al retardo de los circuitos MUX. por el canal de comunicación serie. Una vez culminada la conversión. Como respuesta. 5. el CAD usará la salida EOC para interrumpir al procesador. El CDA. el µP detendrá el proceso de muestreo poniendo al S/H en el modo de mantenimiento y activará la señal START dando lugar al inicio de la conversión. son necesarios tres puertos. Simultáneamente ordena al circuito S/H que inicie el muestreo de la señal. D0-D7: CAD PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0 PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0 Puerto A: Entrada Puerto B: Salida D0-D7: CDA PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 S2 S1 S0 S/H START Puerto C: Salida Fig. recibe un valor digital desde el µP y lo envía al proceso en forma de una tensión análoga. conectado a un puerto de salida. El la figura 5. y S/H. A. el puerto B entrega un valor digital a las entradas de CDA y cinco líneas del puerto C son utilizadas por el µP para el control del proceso de adquisición.

El programador debe tener la previsión que la primera la instrucción de la rutina que carga en memoria y procesa el dato adquirido. RST 6. Lo usual es que la dirección del vector de interrupción contenga una instrucción de salto incondicional al inicio de la rutina de servicio.3 Dispositivos compatibles directamente con el 8085A. RST 7. Fig.3 presenta el símbolo lógico de ambos circuitos. Pueden usarse cualquiera de las líneas RST 5. 5. el CAD activará la salida EOC de fin de conversión.5 o TRAP.5.5. simplifica el diseño del sistema. 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. En el 8085A se integra un circuito transmisor/receptor . resida en la dirección del salto.El Microcomputador Básico 137 En ambos dispositivos está integrado el registro de 8 bits necesario para separar los datos y direcciones del bus multiplexado. La figura 5. el contenido del contador de programa es almacenado en la pila y el control del programa es transferido a una posición determinada de la memoria. No se requieren componentes LSI adicionales para construir la tarjeta necesaria para la aplicación. La adquisición y procesamiento local usando grupos de microcomputadores de 8 bits interconectados a un computador central es una estructura muy usada en control de procesos. Esta señal conecta a una de las entradas de interrupción del 8085A. Cuando un periférico aplica un nivel alto a cualquiera de estas entradas una vez que el µP acepta la solicitud. El uso del sistema de interrupciones del µP para detectar el final del proceso de conversión de una muestra de la tensión de entrada. Para establecer la comunicación se utilizan la entrada SID y salida SOD del canal serie del µP. Una vez que la tensión de entrada desconocida es convertida a digital.

también permite el uso de una fuente única al elevar el voltaje de la fuente desde +5 V hasta ±12V. El transmisor (LM1488) requiere alimentación de ±12V. el cual ser programado apropiadamente para establecer el enlace. Computador 8085A SID 1 ≥ 2. . debe utilizarse el dispositivo MAX-232.8 V 0 = +V 1 = -V 1 ≥ 2. se diseña un sistema mínimo para el control de la adquisición y presentación de datos. Si el microcomputador o terminal está separado del sistema de adquisición por una distancia superior a 2 metros. la cual consiste en elevar los niveles lógicos desde 0 y 5 V a valores superiores. El acoplamiento de la entrada y salida serie al canal RS232C se realiza por medio de circuitos integrados de propósito específico. los niveles lógicos de 0 y +5V sufrirán un deterioro severo debido a la atenuación introducida por el cable. A esta distancia. este circuito además de realizar el cambio de tensión de las señales de transmisión y recepción. Una de las soluciones a este problema es utilizar la interfase RS232C. 5. la transferencia no puede ser realizada conectando directamente el transmisor al receptor.3 Interconexión RS232C Los circuitos integrados LM1488 y LM1489 pueden usarse como dispositivos de interconexión entre el µP y el canal RS232C.8 V SOD Fig. Usando los circuitos de soporte del 8085A. el LM1489. el ancho de banda del canal y la velocidad de transmisión. Si no se dispone de fuentes de doble polaridad.0 V 0 ≤ 0.0 V 0 ≤ 0. uno positivo para representar el cero lógico y otro negativo para el uno lógico. Para la recepción de datos se usa el LM1489 y para la transmisión.El Microcomputador Básico 138 asincrónico primitivo.

la entrada de control del circuito de muestreo y mantenimiento y la señal de inicio de conversión.2. mientras que las líneas de salida del CAD se conectan al puerto A del componente U3. La programación se realiza cargando un patrón de bits específico en el registro interno de comandos. mostrado en la figura 5.5 y la conexión de los circuitos de interconexión RS232C es directa.4 Sistema microcomputador mínimo con circuitos de la familia MCS-85 El diagrama eléctrico final de la tarjeta es el de la figura 5. La salida de fin de conversión se aplica a la línea de interrupción RST 6.1. Por ahora observe que el µP configurado ofrece recursos suficientes para satisfacer las exigencias del sistema de adquisición.4. Las funciones asignadas a los puertos determinan que el puerto A del 8156 debe ser programado como entrada y los puertos B y C como salidas. . El programa de la aplicación reside en los 2 Kbytes de memoria EPROM de U2. Al puerto B del mismo componente se acopla el CDA y por las líneas PC0-PC4 del puerto C de U3 se generan las señales de selección del canal del multiplexor analógico. 5. se realizará en un capítulo posterior.El Microcomputador Básico 139 Fig. solo se requiere que la fuente de poder del sistema tenga tensiones de salida de ± 12 V. del 8156. La selección de los componentes y el cableado de la sección análoga del sistema de adquisición de la figura 5. Los puertos de U2 y el temporizador/contador de U3 no se usan en esta aplicación.

60K-62K. El mecanismo usado para decodificar la memoria debe asegurar que no exista la posibilidad que dos posiciones de memoria sean seleccionadas simultáneamente.. lo cual representa 16 bloques de 2Kbytes. según establece la interconexión de los componentes en el diagrama eléctrico de la figura 5. debe habilitarse el 8355. después de aplicarse potencia a la tarjeta. 12-14K. se conecta la línea de dirección A11 a la entrada habilitación CE1 mientras que la otra entrada de selección. El nivel lógico de la salida IO / M determina si el acceso se realiza a una dirección de memoria o a un puerto de E/S.4.El Microcomputador Básico 140 Las entradas de interrupción no usadas son llevadas a nivel bajo al igual que le entrada HOLD.4. el µP identifica la posición de memoria o el puerto en acceso colocando su dirección sobre el bus de direcciones y activa la salida WR o RD . Como se explicó con anterioridad. se tienen dos áreas de memoria física: 2048 bytes correspondientes a la EPROM del circuito 8755 y 256 bytes de la sección de memoria RWM del 8156. durante una operación de escritura o lectura en memoria o puerto de E/S. Según el tipo de operación en progreso. Debido a que el tiempo de acceso de la RAM del 8156 y de la EPROM del 8755 es de 400ns. escribirá un dato sobre el bus AD0-AD7 o leerá el contenido del mismo. Cuando varios circuitos de memoria son conectados al sistema. cuando una dirección de los dos primeros Kbytes (0000H-07FFH) del espacio de direcciones se presente el bus. no se requieren estados de espera por lo cual se mantiene la entrada READY en nivel alto. La selección de los circuitos de memoria y puertos de E/S se realiza usando el método de selección lineal. Debido a que el programa reside en la EPROM. para un total de 32 K. El fabricante del 8085A recomienda llevar las salidas WR y RD a +5V usando resistores. el 8755 será seleccionado cada vez que la línea A11 esté en nivel bajo.. para evitar que cuando estén en tercer estado se produzcan selecciones falsas de dispositivos. Debido a que el circuito 8755 es habilitado cuando CE1 = 0 y CE 2 = 1 .. 8-10K. El proceso de adquisición se inicia una vez que el µC sale del estado de RESET. como señala la tabla 5. 16-18K. Para situar los 2 Kbytes de la EPROM en el espacio de memoria de 64K del 8085A. . Con el esquema seleccionado se satisface tal condición. El µP completará la lectura o escritura con independencia que el origen o destino de la información sea el deseado por el programador. En el caso del sistema de supervisión y presentación de temperaturas. CE 2 es forzada a uno lógico. Esto no lo muestra el diagrama de la figura 5. cada dispositivo debe ser habilitado para una zona particular del espacio de memoria. Aunque el modo de operación y de programación del 8155/56 y del 8355/8755 se discute en el capitulo 9. en esta sección conviene establecer como está distribuido el espacio de memoria del 8085A.1 de decodificación de direcciones. pero en realidad el 8355 será seleccionado cada vez que el bus contenga una dirección comprendida en los rangos 0-2K.. 4-6K.

1 1 0 0 . x x x x . 1 1 0 0 . x x 0 0 . Considerando de nuevo como cero la condición indiferente.1 Espacio de memoria ocupado por las memorias EPROM y RWM A15 A14 A13 A12 A11 A10 A9 A8 x EPROM (2K) x . El circuito 8755 tiene cuatro registros internos: el puerto A. Tabla. lo cual ocurre para los restantes 32K del espacio total de memoria. 1 1 0 0 . El 8155 es seleccionado cuando la línea A11 está en nivel alto. uno para cada puerto. 0 1 0 1 . x x A7 A6 A5 A4 0 0 . x x x x .El Microcomputador Básico 141 Tabla. 1 1 0 0 . Al igual que ocurre con la sección de la memoria EPROM. la zona de memoria donde está situada la RWM está comprendida desde 0800H hasta 08FFH. 1 1 0 0 . x x x x . x x x x . x x x x . Como el µC está dedicado a una aplicación específica. 1 1 0 0 . x x 0 0 . La dirección particular de los puertos la especifica las líneas del bus multiplexado AD0-AD1. los puertos de E/S del 8755 solo podrán se seleccionados cuando la línea de direcciones A11 esté en nivel bajo. x x 0 0 . 0 0 1 1 . 1 1 A3 A2 A1 A0 0 0 . Observe que esto lo determina la condición indiferente de las líneas A12-A15. es suficiente con garantizar que no existirá conflicto entre las posiciones de memoria de los dos circuitos existentes. 1 1 0 0 . En la tabla 5. 1 1 0 0 . 1 1 x x . 1 1 0 1 . 1 1 x x . 1 1 0 0 . 5. 5. 0 1 Para cualquier dirección en esta zona.2 Direcciones de puertos de E/S para el 8755 Dirección 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 dirección de dato del puerto A Registro de dirección de dato del puerto B . 1 1 0 0 . la línea A11 está en cero. 1 1 0 0 . el puerto B y dos registros de programación. 1 1 0 0 .2 se presenta la asignación de direcciones para los registros de E/S del 8755. 1 1 x x . x x x x . Si asignamos un nivel bajo a estas líneas y se tiene la precaución que ningún otro dispositivo ocupe las direcciones señaladas se puede programar el µC suponiendo que el rango 0000H07FFH lo ocupa la EPROM. 1 1 0 0 . x x x x RWM (256 bytes) .

Cuando se ejecuta una de estas instrucciones. se obtienen para los puertos las direcciones especificadas por la tabla 5. 5.6. Tabla. sus direcciones también se indican. Aunque los puertos de E/S del 8755 no se usan en el sistema de adquisición. tal como indica la figura 5.3. El estado lógico bajo del bit 3 del número del puerto. Debido a que la línea de dirección A11 debe estar en cero.6.4. el operando puerto de IN y OUT debe ser especificado como indica la figura 5. El uso de IO / M también determina que la lectura o escritura en un registro de E/S solo pueda realizarse mediante la ejecución de una instrucción IN puerto o OUT puerto. las condiciones especificadas como indiferente en los patrones de bits de las figuras 5. 5. x x x x 0 x AD1 AD0 Fig. .El Microcomputador Básico 142 El estado lógico de la señal IO / M distingue cuando se solicita acceso a una posición de memoria o a un puerto. x x x x 1 AD2 AD1 AD0 Fig.6 Patrón de bits del número de puerto para el 8156 La tabla de asignación de direcciones para la sección de E/S del 8155 se ofrece en la tabla 5.5 Patrón de bits del número de puerto para el 8755 El circuito 8155 tiene seis registros internos. Cuatro de éstos corresponden a la sección de E/S del dispositivo: el registro de comando para programar los puertos. los puertos de E/S: A. B y C. garantiza que A11 estará en cero. Para el acceso a uno de estos registros la salida A11 deberá estar en uno lógico y la dirección particular de los puertos la determina las líneas AD0-AD2.3 Direcciones de puertos de E/S para el 8156 Considerando una vez más como cero. y dos registros para programar el temporizador.5. el número del puerto es duplicado sobre las 16 líneas de direcciones. 5. los cuales son tratados como puertos de E/S.5 y 5.

En la medida que se incrementen las exigencias de memoria o de puertos de entrada y salida.2 INTERCONEXIÓN DEL 8085A CON DISPOSITIVOS CONVENCIONALES. Cuando se considere necesario. puede ser preferible apelar al uso de dispositivos estándares.8. Si una aplicación exige mayores recursos que los ofrecidos por el sistema mínimo. como sugiere la figura 5. El dispositivo 8155 cumple funciones iguales que el 8156. es una tarea sencilla. exceptuando el hecho que el circuito es seleccionado aplicando un nivel bajo en la entrada de habilitación CE . El uso de los circuitos de soporte del 8085A se recomienda para sistemas que requieran poca memoria. pueden usarse circuitos 8755 y 8156 adicionales y utilizar las líneas de direcciones A12 hasta A15 para seleccionarlos. Este obstáculo puede ser superado usando circuitos decodificadores.7.4 Direcciones de los puertos de E/S Puerto A 00H 8755 Puerto B 01H DDR A 02H DDR B 03H RC/S 08H 8156 Puerto A 09H Puerto B 0AH Puerto C 0BH T/C bajo 0CH T/C alto 0DH Se ha mostrado que el diseño un µC usando el 8085A y sus circuitos de soporte. 5. 5. quedando como responsabilidad del programador reconocer las áreas válidas de memoria. debido a secciona por la mitad el espacio disponible de memoria por cada línea de dirección usada como señal de habilitación. las áreas de memoria asignadas a cada uno de los chips no corresponden a bloques contiguos. deberán conectarse componentes adicionales al microprocesador. Otra posibilidad de expandir el sistema MCS-85 mínimo se muestra en la figura 5. En realidad el trabajo se limita a conectar terminal a terminal los 3 dispositivos.El Microcomputador Básico 143 Tabla. Para aplicaciones que exijan capacidad de memoria mediana o grande. Otra desventaja de la selección lineal es que limita el número de circuitos posibles de conectar al µP. En tal situación deberá usarse un registro externo de 8 bits para demultiplexar el bus de direcciones /datos. Cuando se usa el método de selección lineal para habilitar varios dispositivos. es posible acoplar circuitos convencionales de memoria o puertos al 8085A siempre que se separen las ocho líneas me- . Los circuitos de soporte del 8085 simplifican en forma notable el diseño de un sistema µC debido a que están diseñados específicamente para conectarse al bus multiplexado del µP.

7 Sistema expandido con selección usando decodificadores 3 a 8 . 5. Fig.El Microcomputador Básico 144 nos significativas de las direcciones del bus AD0-AD7. Una vez que se dispone de las 16 líneas de direcciones. cualquiera de las técnicas de selección expuestas en la sección anterior pueden ser utilizadas para la habilitación de componentes estándar.

Estas funciones las cumple en conjunto las señales IO / M . A0-A15 A8-A15 A0-A7 8085A ALE LACTH EPROM RWM Puerto de Entrada Puerto de Salida D0-AD7 RD WR MRD Decodificador MWR IORD IOWR IO/M Fig. 5. El 8085A no tiene señales de control individuales para indicar a circuitos de memoria o puertos que se dispone a iniciar una operación de lectura o escritura.El Microcomputador Básico 145 Puerto A Puerto B (8) (8) Puerto A Puerto B (8) (8) Puerto A Puerto B (8) (8) Puerto A Puerto B Puerto C (8) (8) (6) Puerto A Puerto B Puerto C (8) (8) (6) Fig. 5.8 Sistema MCS-5 expandido.9 Sistema 8085 usando componentes externos convencionales . WR y RD .

De modo que se puede por medio del lacth capturar los ocho bits menos significativos de la dirección generada por el µP para que estén disponibles durante la duración de todo el ciclo de máquina.9 se observa el modo de conexión del 8085A a dispositivos externos estándar. En la figura 5.10 se muestran las conexiones necesarias para realizar la demultiplexión del bus.11.Q7 A0-A7 OC D0-D7 Fig. cuando la línea G está en nivel lógico alto. 5. .El Microcomputador Básico 146 Para el control del acceso a memoria y puertos convencionales. 74LS373 ALE G 8085A AD0-AD7 D0-D7 Q0 . destacándose el registro latch y una lógica para generar las salidas de lectura/escritura. La demultiplexión del bus AD0-AD7 se realiza usando la salida ALE como señal de reloj de un registro convencional de 8 bits. Es conocido por el lector que la salida ALE es activada a nivel alto al inicio del estado T1 de todo ciclo de máquina. Las salidas Q0-Q7 del 74LS373 siguen el valor de las entradas correspondientes AD0-AD7.10 Demultiplexión del bus de direcciones/datos del 8085A. estas salidas pueden combinarse para obtener señales de lectura y escritura correspondientes. 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 retención de los ocho bits de menor peso de la dirección. Para generar las salidas de control para la lectura y escritura en dispositivos convencionales de memoria y de puertos de E/S. como medio de notificar a dispositivos externos que el bus AD0-AD7 contiene información correspondiente a direcciones. se utiliza la lógica discreta de la figura 5. En el diagrama de bloques de la figura 5.

27512 y 271024 con capacidades desde 2Kbytes hasta 128 Kbytes y con velocidades desde 450 ns a 45 ns. Las memorias EPROM son un tipo de ROM que pueden ser programadas y borradas por el usuario. y sea capaz de realizar las tareas de control del sistema de supervisión de temperatura de la figura 5. se deben seleccionar los dispositivos de memoria y de E/S a utilizar. disponibles para satisfacer exigencias de cualquiera aplicación. . 27256. el cual es una EPROM con una capacidad de 2 Kbytes y un tiempo de acceso igual a 450 ns. Debido a que el objetivo es diseñar un sistema mínimo basado en el microprocesador 8085A pero que use componentes externos estándar. que pueda ser eventualmente borrada.12. 27128. 2732. En el mercado electrónico existe una extensa variedad de memorias EPROM.1. La capacidad de almacenamiento del dispositivo debe ser de 2048 bytes y con tiempo de acceso inferior a 575 ns. A continuación se procede a seleccionar la memoria de programa y de datos y el circuito integrado de puertos de E/S.1 La memoria de programa Para almacenar el programa de control del sistema de supervisión de temperatura. listo para ser interconectado a circuitos de memoria o de puertos de E/S convencionales se presenta en la figura 5. se requiere un circuito de memoria programable. Para sustituir la sección de memoria EPROM del dispositivo 8755 se elige el circuito integrado con código 2716. Las EPROM más usadas en aplicaciones con µPs son la 2716. El dispositivo se presenta en un encapsulado de 24 pines y en la figura 5.El Microcomputador Básico 147 Fig. 2764.11 Decodificador de señales de lectura y escritura en memoria y E/S El diagrama eléctrico del µP 8085A. 5. para la versión más lenta.13 se presenta la distribución de terminales del circuito.2. 5.

12 Unidad de proceso central de un microcomputador clásico . 5.El Microcomputador Básico 148 Fig.

Tabla. 5. Como ilustra la figura 5. para obtener en las salidas D0-D7 el contenido de una posición de la 2716. Un . 5.0 Vmín Z: Alta Impedancia La EPROM tiene dos entradas de alimentación: VCC y Vpp.El Microcomputador Básico 149 A7 A6 A5 A4 A3 A2 A1 A0 O0 O1 O2 GND VCC A8 A9 VPP OE 2716 2K x 8 A10 CS/ PGM O7 O6 O5 O4 O3 A0 – A10 O0 . el terminal Vpp debe estar a +25 V.13 Distribución de terminales de la EPROM 2716.5. y 8 salidas de datos D0-D7. El modo de operación lo establece las 2 entradas de control ( CS y OE ). Durante el proceso de programación de la memoria. MODO Deshabilitar Lectura Espera Programar Verificar Programa Inhibir Programa OE VIH VIL x CS / PGM VPP +5 +5 +5 +25 VCC +5 +5 +5 +5 +5 +5 SALIDAS Z DATOSsalida x VIL VIH VIH VIL Z DATOSentrada DATOSsalida VIH VIL VIH VIL VIL +25 +25 Z VIL : TTLbajo 0. de acuerdo con lo indicado en la tabla 5. los terminales de habilitación de salida OE y de selección de chip CS deben estar en estado cero. ambos terminales se conectan a +5 V. El circuito integrado código 2716 tiene 11 líneas de direcciones (A0-A10) para brindar acceso a las 2048 posiciones de la memoria.O7 Direcciones Salida de Datos Habilitar Salida OE CS / PGM Selección de chip/ Programar Fig.14.8 Vmáx VIH : TTLalto 2. En funcionamiento normal.5 Modos de operación de la EPROM 2716.

el dato almacenado en la posición escogida se presenta en las líneas O0-O7.15.El Microcomputador Básico 150 nivel alto en cualquiera de estas entradas colocan las salidas de los buffers en estado de alta impedancia. La entrada CS se usa para seleccionar la memoria y OE para habilitar la presentación de los datos en los terminales de salida. . CS . Además del uso típico de seleccionar el circuito entre un grupo de dispositivos de memoria con salidas conectadas a un bus común. y con independencia del nivel de la entrada de habilitación de salida OE . se remueve la alimentación de los componentes internos de la memoria. a continuación se selecciona la memoria y se habilitan los buffers de salida llevando a cero las entradas CS y OE . 5. Este modo de operación se conoce como de consumo bajo o espera. Cuando CS es llevada al nivel lógico uno. Transcurrido el tiempo de acceso. Fig. cumple una función doble de control. los buffers de salida y el multiplexor de columna. y está caracterizado por un gasto total de potencia que corresponde a una fracción (25%) de la necesaria para la operación normal del chip. la línea CS permite controlar la potencia consumida por la 2716. El proceso de lectura de la EPROM se inicia con la aplicación de una dirección válida a las líneas A0-A10. respectivamente. La entrada de selección de chip.14 Estructura interna de la EPROM. Un ciclo de lectura de la 2716 se muestra en la figura 5. quedando sin energía el decodificador de fila.

Output enable high to output float 100 ns máximo Tiempo desde la supresión de la entrada OE hasta cuando las salidas van a estado de alta impedancia.16. en lugar de los 256 bytes del 8156.2. MRD . 5. se usa selección lineal para situar la 2716 en la misma área de memoria que la ocupada por la sección de EPROM del 8755 del µC de la figura 5. La línea de dirección A11 se conecta a CS y la salida de lectura en memoria.15 Ciclo de lectura de la EPROM 2716 Características AC tACC Tiempo de acceso (Access Time) 450 ns máximo Espacio de tiempo transcurrido entre la aplicación de una dirección estable y la aparición de los datos en la salida de la memoria. se aplica a la entrada de habilitación de salidas OE . 5. .2 La memoria de datos Para suplir la zona de memoria volátil se usa una RWM estática 6116 de 2 Kbytes. tCE tOE tDF Como se observa en la figura 5.El Microcomputador Básico 151 DIRECCIONES Dirección valida CS tCE OE tOE tACC SALIDAS tOF Datos validos Fig.4. Tiempo de habilitación de salida (Output Delay from CS ) 450 ns máximo Retardo entre la aplicación de la señal de selección de chip CS y la salida de datos válidos Output enable to output float 120 ns máximo Tiempo que transcurre desde la activación de la entrada OE hasta que existe un dato de salida válido.

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 . 5.D7 CS OE WE Direcciones E/S de Datos Seleccionar Chip Habilitar Salida Habilitar Escritura Fig.El Microcomputador Básico 152 Fig.6 Modos de operación de la RWM 6116. 5. Tabla. 5.16 EPROM 2716 decodificada para el rango 0000H-07FFH A7 A6 A5 A4 A3 A2 A1 A0 D0 D1 D2 6116 2K x 8 GND VCC A8 A9 WE OE A10 CS D7 D6 D5 D4 D3 A0 -A10 D0 .17 Distribución de terminales de la RWM 6116.

5.18 el diagrama de tiempos de un ciclo de escritura. se muestra en la figura 5. debe permanecer estable cuando menos un tiempo tDS antes. El tiempo de acceso de la versión más lenta del dispositivo es de 250 ns. Al colocarse el dato en los terminales de entrada. para permitir que la memoria decodifique la nueva dirección. La duración del ciclo de escritura es tWC . Si esta restricción es violada. que las entradas de selección de chip CS y habilitación de escritura WE sean removidas. Para explicar como se almacenan los datos en la memoria. y un intervalo tDH después. El ciclo de lectura de una celda de memoria de la RWM es similar al descrito para la EPROM. mientras que la entrada WE es la señal de escritura de datos. el dato en D0-D7 se almacena en una posición con dirección imposible de predecir.18 Ciclo de escritura de la RWM 6116 Cuando las entradas de selección y escritura van a nivel alto.D7 tDH Fig. La duración del pulso bajo de la entrada de selección de chip CS debe ser al menos tCSW para asegurar la selección de la celda mientras que el ancho del pulso de escritura WE debe ser mayor o igual a tWP para garantizar que la información se coloca en la dirección seleccionada . Las líneas de control CS y OE funcionan en forma idéntica que en la EPROM 2716. antes de la activación de las señales de control CS y WE .El Microcomputador Básico 153 La memoria estática 6116 dispone de 11 líneas de direcciones A0-A10 y 8 terminales para E/S de datos. tWC DIRECCIÓN tCSW CS tAS WE tWP tAH tDS D0 . la cual debe permanecer estable en A0-A10 durante un tiempo tAS. D0-D7. la dirección debe mantenerse válida durante un tiempo tAH. Una operación de escritura se inicia con la aplicación en las líneas A0-A10 de dirección de la posición donde se almacenará el dato.

tDH Las especificaciones técnicas de las memorias SRWM distinguen entre dos modos de ciclo de escritura: 1.19. Las señales de lectura y escritura MRD y MRW se conectan respectivamente a las entradas o OE y WE de la 6116. El diagrama de tiempos mostrado en la figura 5. Tiempo de preparación de CS . es suficiente con aplicar la a la entrada CS . se activa de último y se remueve primero. Ancho del pulso de escritura Ancho mínimo del pulso WE . Tiempo de retención del dato (Data Hold Time After End of Write) Lapso que debe mantenerse válido el dato a la entrada de la memoria después de la remoción de las entradas de selección y escritura.2. el complemento de la línea de direcciones A11. Tiempo de retención de direcciones (Address Hold Time After Write) Lapso durante el cual la dirección debe permanecer válida después de desactivar a WE y CS . se usa un circuito programable para interconexión de periféricos del tipo PPI 8255 (PPI: Programmable Peripheral Interface). WE o CS . Escritura bajo control de WE " " " " CS .18 corresponde a la memoria de lectura/escritura estática 6116 operando en modo 1. tAH tCSW tWP (Write Pulse Width) tDS Tiempo de preparación del dato (Data Setup Time Before End of Write) Espacio de tiempo que deben permanecer estables los datos en la entrada de la memoria antes de la desactivación de las entradas de selección y escritura. A pesar que fue introducido en la década de los setenta . (Chip Select Setup Before End of Write) Duración mínima de la entrada de selección de chip. Para que la memoria RWM sea decodificada en las mismas direcciones que la sección de RAM del 8156 de la figura 5. El 8255 es un circuito LSI de uso difundido y de bajo costo. 2. La diferencia la establece cual de las dos señales.41. Para cumplir las funciones de E/S de la CPU de la figura 4. 5. como especifica la figura 5.4.3 Los puertos de entrada y salida Para conectar al 8085A la etapa de adquisición de datos de temperatura se utilizaron la sección de E/S del 8156.El Microcomputador Básico 154 Características AC tAS Tiempo de preparación de direcciones (Address Setup Time Before Write) Intervalo durante el cual todas las líneas de direcciones deben mantenerse estables antes que las entradas WE y CS ( ambas en cero lógico) sean aplicadas a la memoria.

La configuración de los terminales y el símbolo eléctrico del circuito programable para interconexión de periféricos 8255. los cuales los cuales pueden ser programados como entradas o salidas en 2 grupos (A y B) de 12 líneas y puede usarse en tres modos principales de operación.El Microcomputador Básico 155 como un componente de E/S para sistemas basados en el μP 8080 de INTEL. 5. aun es posible encontrarlo (no necesariamente como un 8255 discreto) en μCs basados en procesadores modernos. Fig. cumpliendo funciones de puerto para la conexión de teclado e impresora.20. son los mostrados en la figura 5. se realizará en el capítulo 9. interesa más bien entender como se interconecta el PPI al 8085A y la forma en la cual es seleccionado por el µP. 5. Por ahora.20 Distribución de terminales del PPI 8255 . 8255 Fig.19 RWM 6116 decodificada para las direcciones comprendidas entre 0800H-0FFFH Una descripción con detalle del dispositivo y la presentación de aplicaciones típicas. El 8255 tiene 24 líneas de E/S distribuidas en 3 puertos de 8 bits.

Además de los puertos el 8255 contiene un registro de comandos para la programación del dispositivo. 5. 5. Las ocho líneas bidireccionales de datos (D0-D7) del 8255 se acoplan al bus de direcciones/datos AD0-AD7 y permanecerán en estado de alta impedancia cuando CS no esté activa.El Microcomputador Básico 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). respectivamente. a las salidas de control de lectura y escritura en puerto de E/S: IORD e IOWR de la CPU de la figura 5. La tabla 5. o en caso que RD y WR estén ambas en uno.8 Tabla de estados del PPI 8255 . según lo indicado por la tabla siguiente.8 muestra el modo básico de operación del 8255. La selección del registro de comando o de un puerto de E/S particular se realiza por medio de las entradas de dirección A0 y A1. la entrada de habilitación CS debe ponerse a nivel bajo. el grupo B está compuesto por las ocho líneas del puerto B: PB0-PB7 y los cuatro bits menos significativos del puerto C (PC0-PC3). Tabla. Estas líneas de entrada deben conectarse.7 Direcciones de los registros internos del PPI 8255 Dirección del Puerto de E/S Registro seleccionado A7 A6 A5 A4 A3 A2 A1 A0 x x x x x x 0 0 Puerto A de E/S x x x x x x 0 1 Puerto B de E/S x x x x x x 1 0 Puerto C de E/S x x x x x x 1 1 Registro de comando El tipo de operación a realizar es determinado por la activación de una de las entradas de control: RD o WR . Para que el 8085A pueda tener acceso a uno de los registros para programar el dispositivo o usar uno de los puertos. independientemente del estado de CS .16. Tabla.

y fuerza al 8255 a iniciarse con todos los puertos programados como entrada. Esto es posible porque el espacio de direcciones de memoria está separado del correspondiente a los puertos de E/S.22 El PPI 8255 es seleccionado por medio de la línea de dirección 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 señal ( A11 ). mientras que un acceso a un puerto de E/S es notificado por medio de les señales IORD o IOWR .21 Conexión del PPI 8255 al µP 8085A Cuando se aplica tensión para arrancar al sistema. No obstante. se usa el complemento de la línea de direcciones A11. el 8085A indica que la dirección en el bus se refiere a una posición de memoria activando una de las señales: MRD o MRW . se selecciona el chip 6116 y se activa en nivel bajo la señal MRD ( MRW ) para leer (escri- . 5. Durante una operación de lectura (escritura) de la memoria RWM. las líneas de datos de ambos dispositivos nunca se conectan simultáneamente al bus de direcciones/datos AD0-AD7 del 8085A.21. La selección lineal del 8255 usando la línea A11. Si tal configuración no es la deseada para la aplicación. Durante una operación de lectura o escritura.El Microcomputador Básico 157 La interconexión del 8255 al µP se realiza como indica la figura 5. 5. Fig. el PPI debe ser reprogramado escribiendo un cierto patrón de bits en el registro de comando. Observe que para seleccionar el circuito. la señal de salida de 8085A: RESET OUT se activa en alto. A15 A7 x A14 A13 A12 A11 A10 A6 x A5 x A4 x A3 A9 A1 A1 A8 A0 A0 A2 x 1 Puerto A Puerto B Puerto C Comando 08H 09H 0AH 0BH Fig.22. establece las direcciones de los puertos como especifica la figura 5.

1. usando dispositivos convencionales. se activa la línea IORD ( IOWR ) para leer (escribir) el registro de E/S del 8255 identificado por el estado de las líneas de direcciones A0-A1.8 de funcionamiento del 8255. el número de dispositivos posibles de seleccionar está limitado por el número de líneas de dirección no usadas para acceder a posiciones de memoria. mantienen flotantes las líneas de datos (D0-D7) del circuito. ambas en uno. Esto puede ser verificado consultando la tabla 5.4 para el acceso a los 2 Kbytes de EPROM del 8755 son necesarios once líneas de direcciones. once (211=2048K) están destinadas para el acceso a las áreas de EPROM y RAM. es muy utilizada en sistemas pequeños por que no requiere de circuitos decodificadores y disminuye el número total de componentes y el costo de construcción del sistema. .24. Esto significa que de los dieciséis bits del bus de direcciones. cada línea de bus de direcciones del µP se utiliza para habilitar un componente particular del sistema. Es común que la mayoría de las aplicaciones requieran una zona de EPROM de mayor capacidad que la de RWM. mientras que para los 256 bytes de la RWM del 8156 bastan con sólo ocho líneas. las cinco líneas de direcciones A11-A15 pueden usarse para seleccionar los componentes. Con el 8255 habilitado. La línea A11 selecciona la EPROM y la RAM quedando los cuatro bits restantes para habilitar otras memorias o dispositivos de E/S. Aun cuando está operación pone un nivel cero en la entrada CS del 8255. Si se desea mantener la memoria RWM en el modo de bajo consumo ( CS =1) cuando se habilite el 8255.23 se presenta el diagrama final de la sección de memoria y puertos de E/S. puede usarse una de las líneas de direcciones A12A15 (en lugar de A11) para seleccionar el PPI. En la figura 5. En el caso del µC de la figura 5.3 DECODIFICACIÓN EXHAUSTIVA DE LAS DIRECCIONES En la técnica de selección lineal. para el sistema de adquisición y supervisión de datos de la figura 5. el bus de datos (D0-D7) del PPI permanece en tercer estado debido a que las entradas de control IORD e IOWR están ambas en nivel alto.El Microcomputador Básico 158 bir) la posición especificada por las líneas de direcciones A0-A10. A pesar del número reducido de dispositivos posibles de habilitar mediante está técnica. Como indica la figura 5. Este método usado hasta ahora para decodificar las direcciones de los circuitos de memoria y puertos tiene varias desventajas. En este caso la memoria 6116 permanece inactiva porque las señales MRD y MRW . Una situación similar ocurre cuando se ejecuta una instrucción IN puerto (OUT puerto). 5. En primer término.

23 Sección de memoria y E/S del µC de la figura 5.12. .El Microcomputador Básico 159 Fig. 5.

Otra desventaja asociada a esta técnica es que secciona por la mitad el espacio total de 64K de memoria disponible. y corresponden a las direcciones para las cuales la línea A11 está en cero.8..1 que aun cuando la EPROM está asignada a los primeros 2Kbytes (000H-07FFH). En estos casos. El uso de la línea A11 para seleccionar la EPROM del 8755 en el µC de la figura 5. 4-6K. I=2 (n − j − k − l) donde: n: número de líneas del bus de direcciones. siempre y cuando el sistema no utilice todo el espacio de memoria del µP.El Microcomputador Básico 160 A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 PUERTOS DE E/S EPROM/RAM POSICIONES EPROM/RAM Fig. es responsabilidad del programador reconocer las áreas válidas de memoria. Las zonas imagen del bloque de 2K de la EPROM del 8755 se muestran en el mapa de memoria de la figura 5. y l: número de líneas comunes a la decodificación externa e interna. dos por ejemplo. 5. 1214K.24 Esquema de selección lineal. La del primero estará asignada desde 0 a 2K y la del segundo desde 6K hasta 8K. . .4. I=2(16-11-1-0) = 16. como se deduce examinando el sistema de la figura 5. divide el espacio de memoria en dos bloques de 32K cada uno. Tal esquema es permitido como medio de simplificar el decodificador. Al no utilizar todas las líneas de direcciones para decodificar la dirección de la posición de memoria a la cual se desea acceso.60K-62K. Estos bloques adicionales se conocen como zonas imagen y su número puede ser calculado por la ecuación.16-18K. por cada bit individual de dirección usado como señal de selección de chip. las zonas ocupadas por la sección de memoria de cada circuito no son contiguas. la sección de memoria del 8755 será seleccionada cada vez que el bus contenga una dirección comprendida en los rangos 0-2K. j: número de entradas de direcciones de la memoria. 8-10K.. En el caso en discusión. Recuerde que se indicó en la sección 5. la selección lineal resulta en una decodificación parcial del espacio de direcciones.25. Otra limitación de la selección lineal es que si se utiliza para habilitar varios 8755. Una decodificación incompleta significa que una misma posición de memoria puede ser seleccionada con direcciones diferentes.. k: número de líneas de direcciones usadas en la decodificación externa.

una y solo una posición corresponderá al contenido del bus en un momento determinado.El Microcomputador Básico 161 FFFFH 60K-62K 20K-22K 16K-18K 12K-14K 8K-10K 4K-6K 0-2K 0000H Fig. Tabla.25 Ubicación del bloque de 2Kbytes en el espacio de 64 K de memoria. 5. 5. El estado de las líneas del bus en el rango especificado es el mostrado en la tabla 5. En el µC de la figura 3. una memoria EPROM 2764 de 8Kbytes para el rango de direcciones 0000H—1FFFH. usando lógica SSI.9 Direcciones del bloque de 8K de una memoria 2764 A15 A14 A13 A12 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 A11 A10 A9 A8 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A 7 A6 A5 A 4 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 A 3 A 2 A1 A0 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0 1 . Una decodificación completa de las direcciones es posible por el uso de circuitos decodificadores.1 Suponga que desea decodificar.9. A cada dispositivo componente del sistema se le asigna con exclusividad una zona del espacio total de direcciones de memoria.51 se usaron puertas OR discretas para decodificar en forma exhaustiva los 512 bytes de la memoria de lectura/escritura del microcomputador. Como resultado. Ejemplo 5.

5. el circuito decodificador se simplifica como indica el diagrama eléctrico de la figura 5. usando MRD . en lugar de RD . para habilitar las salidas de la EPROM.27. es utilizar la señal de control de lectura en memoria MRD .26. Fig. De modo que utilizando estas condiciones y aplicando RD a la entrada de habilitación de salidas OE de la 2732. las líneas A13-A15 están en nivel bajo y durante una lectura en memoria la salida de control IO / M también estará en cero. 5.26 Decodificador de direcciones de la EPROM 2764 Otra posibilidad para la decodificación de la 2764.El Microcomputador Básico 162 Para todas las direcciones en el área de la EPROM. Haciendo esto. se puede seleccionar la memoria.27 Decodificador de direcciones de la EPROM 2764. Fig. como sugiere el circuito de la figura 5.

cada una de las cuales contiene 4096 posiciones.2 Considere que para un sistema que requiere 32K de memoria EPROM se utiliza un arreglo de ocho memorias EPROM 2732. Los más usados en aplicaciones con µP son: 8205 74LS139 74LS138 74LS154 74LS155 74LS156 1 de 8 2a4 3a8 4a1 2a4 2a4 Ejemplo 5.28. Más conveniente es usar circuitos MSI como decodificadores de direcciones.El Microcomputador Básico 163 El decodificador de la figura 5. tres entradas de selección de salidas (A. muestran en la figura 5. Para seleccionar los dispositivos de memoria se usará un decodificador 3 a 8 del tipo 74LS138. . la entrada de selección CE vaya a nivel lógico cero. El circuito decodificador tiene ocho salidas ( Y0 − Y7 ). 5. G1 0 x x 1 1 1 1 1 1 1 1 G2A x 1 x 0 0 0 0 0 0 0 0 G2B x x 1 0 0 0 0 0 0 0 0 C x x x 0 0 0 0 1 1 1 1 B x x x 0 0 1 1 0 0 1 1 A x x x 0 1 0 1 0 1 0 1 Y7 1 1 1 1 1 1 1 1 1 1 0 Y6 1 1 1 1 1 1 1 1 1 0 1 Y5 1 1 1 1 1 1 1 1 0 1 1 Y4 1 1 1 1 1 1 1 0 1 1 1 Y3 1 1 1 1 1 1 0 1 1 1 1 Y2 1 1 1 1 1 0 1 1 1 1 1 Y1 1 1 1 1 0 1 1 1 1 1 1 Y0 1 1 1 0 1 1 1 1 1 1 1 A B C G2A Vcc Y0 G2B G1 Y7 74LS138 Y1 Y2 Y3 Y4 Y5 Y6 GND Fig. aumentando el costo del sistema.28 Tabla de la verdad del decodificador 74LS138 Con un 74LS138 único es posible seleccionar hasta ocho dispositivos diferentes de memoria o de puertos de entrada y salida. La tabla de estados y la distribución de los terminales del circuito. G 2A y G 2B ) Para que una salida Yi esté en cero lógico. Tal arreglo no es práctico porque obliga a que cada componente tenga su propio decodificador con puertas discretas. la entrada G1 debe estar en nivel alto y las entradas G 2A y G 2B deben estar en nivel bajo. El uso de lógica integrada en escala pequeña para realizar el decodificador de direcciones no es una buena elección. activas en nivel bajo.27 deja abierta la posibilidad que en una operación de acceso a puerto. porque MRD estará en uno y las salidas de datos de la EPROM permanecerán flotantes. Esto no representa un problema.B y C) y tres entradas de habilitación del circuito (G1.

es el presentado en la figura 5. EPROM 0 1 2 3 4 5 6 7 DIRECCIÓN 0000H-0FFFH 1000H-1FFFH 2000H-2FFFH 3000H-3FFFH 4000H-4FFFH 5000H-5FFFH 6000H-6FFFH 7000H-7FFFH El estado de cada línea de direcciones para los 32Kbytes de memoria suplidos por el arreglo de EPROM se presenta en la tabla 5. mientras que los bits A12-A14 muestran una progresión binaria desde una EPROM a la siguiente. pero tiene 12 líneas de direcciones (A0-A11) para permitir el acceso a las 4096 posiciones del dispositivo. Tabla. 0 1 EPROM 1 1 1 0 0 1 0 1 1 0 1 EPROM 2 0 0 0 .9 Cada 2732 ocupa un bloque de 4K. 1 1 0 0 0 1 0 1 0 1 0 . 0 1 0 1 EPROM 7 0 0 El circuito decodificador de direcciones para las ocho 2732. 0 1 A 3 A 2 A1 A0 0 1 0 1 0 1 0 . 0 1 0 1 0 1 0 1 0 . 1 1 0 0 1 1 0 0 1 . 0 1 0 1 0 1 0 1 0 . Para cada bloque se muestra la dirección inicial y final. 1 1 0 0 0 0 1 1 1 . A15 A14 A13 A12 A11 A10 A9 A8 EPROM 0 A 7 A6 A5 A 4 0 1 0 1 0 1 0 . Las direcciones ocupadas por cada chip 2732 son las indicadas por la tabla siguiente: Tabla. 0 1 0 1 0 1 0 1 0 .El Microcomputador Básico 164 Por medio de las líneas A. el decodificador será habilitado cada vez que el bus de direcciones identifique una posición de memoria . 0 1 0 1 0 1 0 1 0 . Forzando la entrada G1 a nivel alto y conectado la línea de dirección A15 a G 2A y la señal IO / M a G 2B . 0 0 .10 Bloques de memoria de 4K asignados a cada una de las 2732. la línea de direcciones A15 permanece en nivel bajo.40. 0 1 0 0 0 0 0 0 0 0 0 0 0 . . 5. 0 1 0 1 0 1 0 1 0 . Observe que para todo el espacio de 32K. 5.10. La EPROM 2732 funciona igual que la memoria 2716. 0 1 0 1 0 1 0 1 0 . 0 1 0 1 0 1 0 1 0 .B y C se especifica cual de las ocho salidas se activará.

El Microcomputador Básico

165

comprendida entre 0000H y 7FFFH. El bloque particular seleccionado lo establecen las líneas A12-A14, las cuales se aplican a las entradas A, B y C del 74LS138.

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

El uso de la salida IO / M del µP para seleccionar el 74LS138 de la figura 5.40, garantiza que durante una operación de E/S todas las EPROM funcionarán en el modo de bajo consumo, debido a que el circuito decodificador estará deshabilitado ( IO / M =1) con todas sus salidas en nivel alto. Conviene resaltar que la señal RD pudo usarse, en lugar de MRD , para habilitar las salidas de la memoria EPROM seleccionada. Ejemplo 5.3 Suponga que se tiene un sistema con 4 Kbytes de EPROM (2732), 2Kbytes de RWM (6116) y un PPI 8255. Para seleccionar los componentes se debe usar un decodificador doble 2 a 4 con código 74LS139. Este circuito fue usado en el capitulo 3 como decodificador de puertos. En la figura 5.30 se repite la tabla de funcionamiento del chip.
Ga Aa Ba
Y0a Y1a Y2a Y3a
GND

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

74LS139

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

Fig. 5.30 Tabla de la verdad del decodificador 74LS139

Las direcciones se asignan a cada componente de acuerdo con lo indicado por la figura 5.11.

El Microcomputador Básico

166

Tabla. 5.11 Direcciones para las secciones de memoria y E/S
DISPOSITIVO EPROM RAM PUERTO A PUERTO B PUERTO C REG. COMANDO

2732 6116 8255

DIRECCIÓN 0000H-0FFFH 1000H-17FFH 00H 01H 02H 03H

La tabla de estado de las líneas de direcciones del sistema es la que sigue y el circuito decodificador se muestra en la figura 5.31. Observe que se hace una decodificación parcial de la dirección de los puertos del 8255.
Tabla. 5.12 Tabla de direcciones para las secciones de memoria y E/S A15 A14 A13 A12 A11 A10 A9 A8 A 3 A 2 A1 A0 A 7 A6 A5 A 4

0
EPROM

0 . 0 0 0 0 0.

0 . 0 0 0 0 0 . .

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 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 . 1

0 . 1

. 0 0

0 1 1 1 1 .

1

0 0 0 1

0 0 1 0 1 . 1 0 1 .

RWM

0 0 0.

1 0 1 . 1 .

Como señala la tabla 5.12, aunque la memoria 6116 tiene sólo 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 válidas 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 prácticas 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. Además, se proveen señales de selección para expansiones futuras de memoria y puertos de E/S. El circuito para decodificación de las direcciones del microcomputador fue diseñado usando dos decodificadores 2 a 4 del tipo 74LS156. En la tabla 5.13 se presenta la asignación de direcciones para memoria y puertos, la cual fue reproducida del manual de operación del MPR-85.

El Microcomputador Básico

167

Fig. 5.31 Circuito decodificador de direcciones y de puertos.

El Microcomputador Básico

168

El MPR-85 utiliza las señales 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 señales 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 DIRECCIÓN DIRECCIÓN PUERTOS

CS
CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7

27128 (16K EPROM)
MONITOR DEL SISTEMA

8255 N°2 0000H-3FFFH 4000H-4FFFH 5000H-5FFFH 6000H-7FFFH 8000H-9FFFH A000H-AFFFH B000H-B7FFH B800H-BFFFH 00H-3FH 40H-4FH 50H-5FH 60H-7FH 80H-9FH A0H-AFH B0H-BFH B8H-BFH
EXPANSIÓN DE PUERTOS

8155 N°1
256 bytes de RWM

8155 N°1 8155 N°2 8729
CONTROLADOR DE TECLADO/DISPLAY

8155 N°2
256 bytes de RWM

6264/2764
HASTA 8K DE RWM O EPROM

6264/2764
HASTA 8K DE RWM O EPROM

8255 N°1
EXPANSIÓN EXPANSIÓN EXPANSIÓN

4K PARA EXPANSION 2K PARA EXPANSION 2K PARA EXPANSION

El encapsulado del 74LS156 contiene dos decodificadores individuales, los cuales operan como indica la tabla de la figura 5.32. El diagrama eléctrico de la sección de decodificación del MPR-85 es el presentado en la figura 5.33.
1G

1 X 0 0 0 0
2C

1C x 0 1 1 1 1
2G

1 X 0 0 0 0

x 1 0 0 0 0

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
Y 2b

1 1 1 0 1 1
Y1b

1 1 0 1 1 1
Y 0b

1C
1G

B

1 1 1 1 0 1

1 1 1 0 1 1

1 1 0 1 1 1

1Y3 1Y 2 1Y1

74LS156

Vcc 2C 2G A
2 Y3 2Y 2 2Y1

1Y0
GND

2Y0

Fig. 5.32 Tabla de la verdad del decodificador 74LS15

El Microcomputador Básico

169

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

El Microcomputador Básico

170

El decodificador marcado U1 en la figura 5.33, genera las señales de selección de la EPROM 27128, de los 8155 N°1 y N°2 y de la memoria RWM 2764. Las conexiones seleccionadas para el 74LS156 dividen en bloques de 4K, los primeros 32K del espacio total de memoria. Esto puede verificarse en la tabla 5.14.
Tabla. 5.14 Direcciones para las secciones de memoria y E/S seleccionadas por U1.

A15 A14 A13 A12 0 0 0
EPROM 4 X 4K

A11 A10 A9 A8 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 1 0 1 0 1 0 1

A7 A 6 A 5 A 4 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 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 1 0 1 0 1 0 1 0 1 0 1 0 1

A 3 A2 A1 A 0 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 0 1 0 1 0 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1

0 0 0 0 1 1 1 1 0 0 0 0 1 1 1 1

0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1

1 1 0 0 1 0 1 1 0 1

0 0 0 0 0

0 0 1 0 1 0 1 0 1 0 1 1 0 1 0 1 0 1 0 1

1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

RWM

0 0 0 0 0 0 0 0

256 bytes
RWM

256 bytes

RWM

2 X 4K

En los primeros 16K del espacio de memoria del µP, las líneas de dirección 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) varían 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 dirección 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 función AND cableada, cuya salida corresponde a CS0 . El decodificador 1 de U1 tiene las entradas de habilitación: 1G y 1C , conectadas a las salidas de direcciones A15 y A14. Estas líneas estarán, respectivamente, en cero y uno para cualquier dirección dentro del área ocupada por el quinto bloque de 4K (4000H-4FFFH). Como A13 y A12 están ambas en cero en este mismo rango, la salida 1Y0 del decodificador se activará a nivel bajo. Esta señal se destina para seleccionar los 256 bytes de la memoria RWM 2764 y las sección de E/S del 8155 N°1.

El Microcomputador Básico

171

Observe que A13 y A12 varían desde el quinto bloque de 4 K al siguiente, activando progresivamente las salidas 1Y1 , 1Y2 y 1Y3 . La primera sitúa el 8155 N°2 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 señales de selección CS0 − CS3 operan sobre los primeros 32Kbytes del espacio de memoria. Por medio de U2, se generan los comandos CS4 − CS7 , los cuales sitúan 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

1 1 1
RWM 4 X 2K

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 1 1 1 1

0 0 0 0 1 1 1 1 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 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 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 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 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 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 1 0 1 0

0 1 0 1 0 1 0

0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

1 1 1 1 1 1

1 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1

EXPANSIÓN

1 1 1 1 1 1 1

4Kbytes

EXPANSIÓN

2Kbytes
EXPANSIÓN

2Kbytes

El espacio de direcciones de la tabla anterior se presenta dividido en bloques de 2K. Una dirección entre los primeros 8K genera el comando de selección CS4 , mediante el cableado de las cuatro salidas del decodificador 2 de U2. Observe que en estos cuatro bloques de 2K, las líneas A12 y A11 (aplicadas a las entradas B y A) muestran una progresión binaria de un bloque de 2K al próximo y que A13 (conectada a la entrada de habilitación 2C ) permanece en nivel bajo. Finalmente, la combinación lógica de las líneas de direcciones A15 y A14, realizada por las puertas U3A y U3B, fuerzan a cero la otra entrada de habilitación 2G . Para entender como se genera las señales CS5 − CS7 , basta con inspeccionar la tabla de direcciones de la figura 5.49. Los 4K entre A000H y AFFFH son seleccio-

El Microcomputador Básico

172

nados por CS5 , la cual es generada por la AND implícita con entradas1Y0 y 1Y1 . Los siguientes dos bloques de 2K se reservan para expansión y son seleccionados por CS6 y CS7 . Los diseñadores del MPR-85 utilizaron 48Kbytes del total de 64Kbytes posibles de manejar por el 8085A. Como indica la tabla 5.13, la salida de selección CS0 también habilita un 8255 N° 2, al cual se le ha previsto en el circuito impreso una base para expansión. Los puertos de este dispositivo están situados entre 00H y 3FH. De este rango de 64 bytes, se asigna al puerto de comando la dirección 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 inválidas. 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 FUNCIÓN PUERTO A PUERTO B PUERTO C COMANDO DISPOSITIVO PUERTO FUNCIÓN CONTROL PUERTO A PUERTO B PUERTO C LSB TIMER MSB DEL TIMER DISPOSITIVO

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

8255 N° 2

no válidas
CONTROL PUERTO A PUERTO B PUERTO C LSB TIMER MSB DEL TIMER

8155 N° 1

no válidas

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

8155 N° 2

no válidas
PUERTO DATOS PUERTO CONTROL

8279

no válidas
PUERTO A PUERTO B PUERTO C COMANDO

8255 N° 2

no válidas ---------------

EXPANSIÓN

Ejemplo 5.5 Para finalizar esta sección, se presenta un ejemplo final de decodificación 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 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

8255 #2

74LS374

El Microcomputador Básico

173

Fig. 5.34 Decodificación completa de 7 puertos usando un 74LS138.

El decodificador de la figura 5.34 realiza una decodificación exhaustiva de los puertos de los 8255 y del registro paralelo.

5.4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA
El método usado hasta ahora para seleccionar los puertos de E/S, se basa en el hecho que el espacio de direcciones de memoria está separado del espacio de puertos de E/S. Durante una operación de lectura o escritura, el µP usa la señal IO / M para notificar a los dispositivos externos cuando la dirección presente en el bus corresponde a una posición de memoria o a un puerto de E/S. Lo registros de puertos son diseñados para responder a las señales de control IORD o IOWR y para ser seleccionados por una señal CS de habilitación. Este procedimiento de manejo de puertos se conoce como el método de e/s estándar o de E/S aislada y sólo permite acceso a puertos por medio de las instrucciones

El Microcomputador Básico

174

IN puerto y OUT puerto. Usando está técnica, pueden controlarse hasta 512 registros externos (256 de entrada y 256 de salida). Recuerde que en estas instrucciones la dirección del puerto la especifica el segundo byte de la instrucción, y el número máximo que puede representarse con ocho bits es 255. Otra limitación de esté método es que sólo consiente transferencias entre el puerto seleccionado y el registro acumulador. Una estrategia de acceso a puertos que permite superar la limitación del número de puertos impuesta por el método estándar, es el método de E/S mapeada como memoria. Esta técnica 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 razón 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 porción de ésta es cedida para los puertos. Si el sistema tiene menos de 32Kbytes de memoria, la línea A15 no es utilizada para identificar posiciones de memoria, de modo que destinando este bit de dirección para distinguir entre un acceso a memoria (A15 = 0) y una operación 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 número de puertos del µC, sino que permite el uso para control de puertos de toda instrucción que haga referencia a memoria. Esto simplifica la programación de las rutinas de manejo de periféricos. Por ejemplo, ejecutando a instrucción MOV r, M se transfiere el contenido de un puerto de entrada a cualquiera de los registros internos del µP; XRA M realiza la función OR exclusivo entre dato en el puerto de entrada y el acumulador; LHLD dirección transfiere los datos en dos puertos hacia los registros H y L; SHLD dirección 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 sólo algunos pocos ejemplos de instrucciones que usan la memoria. La figura 5.35 ilustra como puede tratarse la sección de puertos de un 8755 y de un 8255, como si fuesen localidades de memoria. Para el 8755, la línea A15 determina cuando el acceso se realiza a la sección de 2K de la memoria EPROM o los registros del circuito. Para acceder a un puerto basta con sumar 8000H a la dirección. 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 instrucción transfiere el contenido del A en la posición de memoria especificada por el operando de la instrucción. Pero como A15 está en nivel alto, el destino será el puerto B (de dirección xxxxxx01) del 8755. Para el 8255 el procedimiento es el mismo. En ambos casos, los periféricos responderán a las señales 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 Básico

175

8755 0 x

DIRECCIÓN DE MEMORIA

x

x

0

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

DIRECCIÓN DE PUERTO

1

x

x

x

0

x

x

x

x

x

x

x

x

x

A1

A0

8255 1 0

DIRECCIÓN DE PUERTO

0

0

x

x

x

x

x

x

x

x

x

x

A1

A0

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

En el siguiente ejemplo se presenta un decodificador de direcciones de un µC usando el método de E/S mapeada en memoria.

El Microcomputador Básico

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 líneas A13, A12 y A11. Para habilitar el circuito 74LS138 se usan los las líneas de direcciones A14 y A15, las cuales permanecen en cero en el rango especificado.

Fig. 5.36 El decodificador de direcciones permite al acceso a 16Kbytes de memoria. Tabla. 5.18 Tabla de direcciones de cada bloque de 2K.
CS
CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7
DIRECCIÓN DISPOSITIVO EPROM RWM TECLADO DISPLAY ENTRADA SALIDA OTRO OTRO

0000H-07FFH 0800H-0FFFH 1000H-17FFH 1800H-1FFFH 2000H-27FFH 2800H-2FFFH 3000H-37FFH 3800H-3FFFH

La selección del chip es completada por la salida de la puerta NAND, la cual va a uno durante una operación de lectura o escritura. Cada salida del decodificador es una señal de selección CS de dispositivos de memoria o de E/S. Las direcciones correspondientes a cada salida del decodificador son las mostradas en la tabla 5.18. Para finalizar esta sección, se presenta en la figura 5.38 el subsistema de memoria y puertos de un sistema 8085. Para el diseño del decodificador de puertos se usa la técnica de mapeo a memoria. La 27256 es una EPROM de 32 Kbytes y es seleccionada por medio de la línea A15, lo cual sitúa el circuito en los primeros 32 Kbytes del espacio de direcciones del µP. Para activar las salidas O0-O7 de la memoria, se conecta la señal de control de lectura RD a la entrada OE de habilitación de salidas del dispositivo. Para seleccionar el grupo de tres memorias RWM 6116 y el 8255, se usa un decodificador 74LS138. La conexión de la línea A15 a la entrada de selección G1del decodificador, garantiza que este permanecerá deshabilitado, con todas sus salidas en nivel alto, durante operaciones de lectura a la EPROM. Cualquier dirección en el bus a partir de la posición 8000H, pondrá el bit A15 en uno habilitando el

El Microcomputador Básico

177

74LS138. Las líneas 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 activación 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
CS0 CS1 CS2 CS3 CS4 CS5 CS6 CS7
DIRECCIÓN DISPOSITIVO

8000H-87FFH 9000H-97FFH A000H-A7FFH B000H-B7FFH C000H-C7FFH D000H-D7FFH E000H-E7FFH F000H-F7FFH

27256 6116 6116 8255
SIN USO SIN USO SIN USO SIN USO PUERTO A PUERTO A PUERTO A COMANDO

B000H B001H B002H B003H

DIRECCIÓN

DATOS

0000H . . . 7FFFH 8000H . 87FFH . 8FFFH 9000H . 97FFH . 9FFFH A000H . A7FFH . AFFFH B000H . B7FFH . BFFFH

0000 0000 0000 0000 . . . 0111 1111 1111 1111 1000 0000 0000 0000 . 1000 0111 1111 1111 . 1000 1111 1111 1111 1001 0000 0000 0000 . 1001 0111 1111 1111 . 1001 1111 1111 1111 1010 0000 0000 0000 . 1010 0111 1111 1111. . 1010 1111 1111 1111 1011 0000 0000 0000 . 1011 0111 1111 1111 1011 1111 1111 1111

32 K EPROM

2 K RWM

2K

RWM

2K

RWM

8255

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

38 Decodificador de direcciones para 32K de EPROM.El Microcomputador Básico 178 Fig. 5. 6K de RWM y un PPI 8255 .

se observa que el circuito de memoria conectado al sistema y que tiene menor capacidad es el módulo de 4K (212). 8 Kbytes de EEPROM (1 x 8K) y 52 Kbytes de RWM (1 x 32K.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES Además de usando puertas discretas y circuitos integrados MSI. Estos componentes ahorran espacio en la tarjeta del circuito impreso. Esto significa que se usan los bits de dirección A12-A15 para seleccionar el circuito integrado al cual corresponde la dirección a la cual se desea acceso. considere el siguiente ejemplo.El Microcomputador Básico 179 5. El espacio de memoria de la aplicación es distribuido como indica el mapa de la figura 5. Ejemplo 5. En principio.20 muestra el rango de direcciones en el cual se habilita cada salida del decodificador. de modo que para el diseño del decodificador se divide el espació de 64Kbytes de memoria en bloques de 4Kbytes. 5. Para ilustrar las ventajas del uso de PLD.39 Mapa de memoria para el sistema ejemplo de decodificador con PLD .39. La tabla 5. su estructura es apropiada para el uso como decodificador y mantienen la confidencialidad de la lógica programada. el decodificador de direcciones puede realizarse usando algún tipo de dispositivo lógico programable (PLD). FFFFH SRWM F000H EFFFH SRWM B000H AFFFH SRWM 3000H 2FFFH EEPROM 1000H 0FFFH EPROM 0000H Fig.7 Bebe diseñarse un decodificador de direcciones para un subsistema de memoria compuesto por 4 Kbytes de EPROM (1 x 4K). 1 x 16K y 1x 4K).

Un circuito programable comercial de amplio uso en aplicaciones combinatorias es el de código PAL16L8. se muestra en la figura 5. Fig.40 muestra el diagrama de distribución de terminales y en la figura 5. A15 0 0 0 0 0 0 0 0 1 1 1 A14 0 0 0 0 1 1 1 1 0 0 0 A13 0 0 1 1 0 0 1 1 0 0 1 A12 0 1 0 1 0 1 0 1 0 1 0 CS0 0 1 1 1 1 1 1 1 1 1 1 CS1 1 0 0 1 1 1 1 1 1 1 1 CS2 1 1 1 0 0 0 0 0 0 0 0 CS3 1 1 1 1 1 1 1 1 1 1 1 CS4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 1 1 1 1 1 0 Las ecuaciones lógicas de las señales de selección de chip obtenidas a partir de la información suministrada por la tabla de estados. 5.40 Distribución de terminales para el circuito PAL16L8. Como alternativa para el diseño del decodificador especificado. La figura 5. 5. las ecuaciones del decodificador pueden programarse en un dispositivo PAL. son: CS 0 = A15 + A14 + A13 + A12 CS1 = A15 + A14 + A13 ⋅ A12 + A13 ⋅ A12 CS 2 = A15 ⋅ A14 + A15 ⋅ A13 ⋅ A12 + A15 ⋅ A14 ⋅ A12 + A15 ⋅ A14 ⋅ A13 CS 3 = A15 + A14 ⋅ A12 + A14 ⋅ A13 + A14 ⋅ A13 ⋅ A12 CS 4 = A15 + A14 + A13 + A12 El decodificador de direcciones realizado con circuitos 74LS138. .20 Tabla de estados del decodificador de direcciones con PLD.42 se presenta la estructura interna del chip.41.El Microcomputador Básico 180 Tabla.

El Microcomputador Básico 181 Fig. 5.41 Decodificador de direcciones usando decodificadores convencionales. .

El Microcomputador Básico 182 I1 0 1 2 3 0 1 2 3 4 5 6 7 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 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 39 IO5 I6 40 41 42 43 44 45 46 47 IO6 I7 48 49 50 51 52 53 54 55 IO7 I8 56 57 58 59 60 61 62 63 O8 I9 I10 Fig.42 Diagrama lógico de la PAL16L8 La estructura interna de la PAL16L8 determina que el circuito integrado solo puede ejecutar funciones lógicas cuyas ecuaciones tengan siete o menos términos de . 5.

architecture rtl of decdir is begin CS0 <= A15 or A14 or A13 or A12. out std_logic ). y otros. VERILOG. => => => => => => => => => CS CS CS CS CS CS CS CS CS <= <= <= <= <= <= <= <= <= "11110". CS4: end decdir. library IEEE. ONCUPL. "11101". CS3 <=(not A15)or((not A14)and(not A12))or((not A14)and(not A13))or(A14 and A13 and A12). 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. begin : in : out STD_LOGIC_VECTOR (15 downto 12). CS3. ORCAD/PLD. "10111". library ieee. Para propósitos de desarrollo del programa a grabar en la PAL puede usarse cualquiera de los lenguajes compiladores existentes para descripción de hardware. use IEEE. Si se usa la segunda opción no es necesario usar las técnicas convencionales de diseño digital.A14. "11011". VHDL.STD_LOGIC_1164. "10111". Seis de los terminales de salida son bidireccionales de modo que pueden ser usados como entradas.A15: CS0. CS2<= (A15 and A14)or (A15 and A13 and A12)or((not A15)and (not A14) and(not A13))or ((not A15)and (not A14) and (not A12)). CS2. A continuación 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. in std_logic. la estructura lógica del decodificador y el otro programa define el comportamiento funcional del circuito. STD_LOGIC_VECTOR (4 downto 0) ).. CS1 <= A15 or A14 or(A13 and A12)or((not A13)and(not A12)). entity decdir is port ( A12. usando ecuaciones..El Microcomputador Básico 183 productos. end rtl. use ieee. CS4 <= not(A15)or(not A14)or(not A13)or not(A12). debido a que no se requiere especificar las ecuaciones. entity DECODIR is port ( A CS end DECODIR. "10111".std_logic_1164. A13. CS1. tales como: ABEL. "11101". "01111". El primer código describe. "10111". . end BEHAVIOR.all. end process.all.

18. NOTE (PLD0201) No warnings.11 11/5/98 (Source file C:\Program Files\OrCAD\CAPTURE\EJEMPLOS\DECODER\Timed \DECODER. 5. 15. 19. 7. 14. . 2. RESOLVED EXPRESSIONS (Reduction 2) Signal name CS0' CS1' Row 9 17 18 25 26 27 28 33 34 35 41 Terms A12' A13' A14' A15' A12' A13 A14' A15' A12 A13' A14' A15' A12' A14' A15 A12 A13 A15' A13' A14' A15 A14 A15' A12 A13 A14' A15 A12' A14 A15 A13' A14 A15 A12 A13 A14 A15 CS2' CS3' CS4' SIGNAL ASSIGNMENT Pin Signal name Column 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 1. 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 - 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) 7. 9. Checking for error conditions NOTE (PLD0200) No fatal errors found in input file.El Microcomputador Básico 184 La herramienta usada para generar el archivo de programación de la PAL es ORCAD EXPRESS 9.1. 3. 12. 8.jed) Copyright (C) 1988-1998 OrCAD All Rights Reserved. La información siguiente es generada por el software ************************************************************************ OrCAD Simple PLD Fitter tools ************************************************************************ OrCAD PLD FITTER x1. 11. 16. 4. 13. 6. 17.

El Microcomputador Básico 185 FUSE MAP FOR PAL16L8 0 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 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 2 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 4 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 6 xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx 8 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 10 12 14 16 18 20 22 24 26 28 30 xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx xx xx --xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx xx --xx xx xx xx xx xx ---xx xx xx xx xx -----xx xx xx ----xx xx 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: x fuse intact .

43 se muestra el circuito decodificador usando la PAL16L8 y en la figura 5. por lo cual deben usarse las señales MRD y MWR para leer o escribir en el dispositivo de memoria seleccionado. Fig.43 no discrimina entre accesos a memoria o a puertos de E/S. .43 Decodificador de direcciones con PAL.fuse open 475 fuses open of 2048 total. 5. OrCAD PLD EXPRESS Type: PAL16L8 * QP20* QF2048* QV1024* F0* L0256 11 11 11 11 11 11 L0288 10 10 10 11 10 11 L0512 11 11 11 11 11 11 L0544 10 01 10 11 10 11 L0576 01 10 10 11 10 11 L0768 11 11 11 11 11 11 L0800 01 01 11 11 10 11 L0832 10 11 10 11 01 11 L0864 11 10 10 11 01 11 L0896 11 11 01 11 10 11 L1024 11 11 11 11 11 11 L1056 01 01 10 11 01 11 L1088 10 11 01 11 01 11 L1120 11 10 01 11 01 11 L1280 11 11 11 11 11 11 L1312 01 01 01 11 01 11 C3E74* 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 11 * * * * * * * * * * * * * * * * NOTE (PLD0202) 1/23/4 10:46 am (Friday) NOTE (PLD0204) Elapsed time 4 seconds En la figura 5.El Microcomputador Básico 186 . El decodificador de direcciones cuyo diagrama eléctrico se muestra en la figura 5.44 se muestra el arreglo interno de fusibles para la salida CS0 del decodificador de direcciones.

5.44. Patrón de fusibles para la salida CS0 del decodificador de direcciones.El Microcomputador Básico 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 X X X X IO2 I3 Fig. .

El Microcomputador Básico 188 5. 5. El 74LS245 es capaz de suministrar una corriente de 15 mA (IOH) mientras que la corriente IOL es de 24 mA. Lo usual es conectar amplificadores de corriente a las líneas de direcciones y de datos. La dirección del flujo de datos es fijada por la entrada de control de dirección DIR. Como ejemplo de algunas posibilidades. los cuales deben ser tomados en cuenta para el cálculo del tiempo de acceso de los chips de memoria a conectar al sistema. . mientras que un terminal de salida en cero puede admitir una corriente máxima IOL de 2 mA. el terminal mantendrá su nivel lógico. Una línea de salida del 8085A. las siguientes cargas pueden conectarse directamente a un pin de salida del 8085: • 1 TTL + 1 LSTTL • 5 LSTTL • 10 ALSTTL. es capaz de entregar una corriente máxima IOH de 400 µA. WR e IO / M . En segundo lugar. Si estos valores máximos son respetados. debe dedicarse especial atención a la capacidad de corriente de los terminales del µP.6. Como ilustra la figura 5. aunque en ciertos casos puede ser necesario para alguna líneas de control. Estas características eléctricas DC fijan cuantas entradas puede guiar cada terminal de salida del µP. el circuito es habilitado conectando la entrada G a cero.6 CONSIDERACIONES ADICIONALES SOBRE INTERCONEXIÓN A LOS BUSES DEL 8085A Todo circuito conectado a un terminal de salida del 8085A produce efectos que pueden afectar eventualmente el funcionamiento normal del sistema microcomputador. sin deterioro del nivel lógico de la línea. la lógica usada para decodificación introduce retardos en la propagación de las señales. Para reforzar la capacidad de corriente del bus de direcciones/datos AD0-AD7. En esta sección se discuten brevemente ambos aspectos. puede usarse un circuito 74LS245. En primer término. la carga total conectada a un pin de salida puede sobrecargar al terminal con consecuencias severas para el nivel lógico presente en la línea. Si en una aplicación determinada se exceden estos límites. será necesario el uso de circuitos buffers para realizar la conexión de la señal sobrecargada. cuando está en nivel alto. el cual está especialmente diseñado para acoplamiento a buses bidireccionales de 8 bits. a la cual se conecta la señal RD . tales como RD .1 Carga máxima del bus del 8085A Si el sistema está acoplado a muchos circuitos de memoria o si el µC va a ser interconectado con distintos tipos de interfaces.45.

45 Conexión de guiadores de bus al 8085A Para incrementar la carga permisible por las líneas de la parte más significativa del bus de direcciones (A8-A15) se recurre a un 74LS244. son idénticas a las del 74LS245. al aplicarse un nivel bajo a las entradas de selección 1G y 2G . La capacidad de corriente en nivel bajo de las salidas del chip. . 5. el cual permanece permanentemente habilitado.El Microcomputador Básico 189 Fig.

5. teniendo costo de adquisición menor. Estos tiempos se muestran en la figura 5. usado para separar el byte bajo de direcciones del bus multiplexado AD0-AD7.46 DIRECCIONES CS tCE OE tAC tOE D0-D7 C DATO Fig. puede entregar una corriente de 400 µA y drenar 8 ma. tCE y tOE deben comparase con los lapsos permitidos por el µP para que el dispositivo externo coloque el dato en el bus. tOE retardo entre la habilitación de lectura y la salida del dato. En principio. . Estos lapsos se definieron para la EPROM 2716.6. CLK A8-A15 tAD AD0-AD7 ALE Dato RD tRD Fig.46 Ciclo de lectura característico de una memoria ROM o RWM. 5. Para la selección de la memoria los tiempos tACC. Esto hace innecesario el uso de buffers adicionales para las líneas de direcciones A0-A7. ilustrado en la figura 5. cumpla con las restricciones de tiempo impuestas por el 8085A sin que sea necesaria la introducción de estados de espera.2 Selección de la memoria del sistema Es importante escoger el dispositivo de memoria que.47 Ciclo de lectura del 8085A. como: tACC retardo entre aplicación de una dirección estable y la salida del dato. considere un ciclo de lectura típico para una memoria ROM o WRM. 5.El Microcomputador Básico 190 El 74LS373.47. tCE retardo entre la selección del chip y la salida del datos. Los tiempos indicados son máximos y pueden considerarse como medidas de la velocidad de la memoria.

Se considera que las señales de control están acopladas por medio de buffers. En la figura 5. medido a partir de la presentación de una dirección válida en las líneas de direcciones. tRD: lapso permitido desde la activación de la señal RD . 5. DAD 8085A SRWM D0-D7 A0-A7 AD0-AD7 373 ALE A8-A15 DB DCS CS OE WR A8-A15 IO / M DB WR RD DL Fig.El Microcomputador Básico 191 Los tiempos a considerar son: tAD: tiempo del cual dispone un dispone un dispositivo externo para cargar un dato válido en el bus de datos.48 Sistema µC con acopladores de bus. Para establecer la correspondencia entre los tiempos disponibles por la memoria para la transferencia del dato y los retardos debidos a los componentes internos de la memoria. Los tiempos de propagación a considerar son los siguientes: .48 se muestra un diagrama de conexión entre un 8085A y un dispositivo de memoria. hasta la colocación de un dato válido en el bus. deben tomarse en consideración los tiempos de propagación de la lógica de decodificación y de los acopladores de bus.

tAD memoria = [ ⎜ ⎛5 ⎞ + N ⎟ T − 225 +15] – [DB + DCS + DAD] ⎝2 ⎠ ns tRD memoria = [ ⎜ ⎛3 ⎞ + N ⎟ T − 180 + 15] – [DB + DL + DAD] 2 ⎝ ⎠ ns Sin estados de espera y fclk = 3. El uso de buffers para acoplamiento al bus. tAD memoria = [tAD 8085 + tCAPB] – [DB + DCS + DAD] tRD memoria = [tRD 8085 + tCAPB] – [DB + DL + DAD] Los valores especificados para tAD y tRD en la hoja de datos del fabricante del 8085. es un factor de corrección para los datos y se denomina ganancia de transición por acoplamiento.125 Mhz tAD memoria = 590 – [DB + DCS + DAD] tRD memoria = 315 – [DB + DL + DAD] ns ns Los retardos no especificados se obtienen de la hoja de especificaciones de los circuitos. Calculados los tiempos de acceso de la memoria. En caso contrario existen dos opciones: si la diferencia es pequeña. o se sustituyen las memorias por otras de mayor velocidad.El Microcomputador Básico 192 DB: DAD DCS DL retardo de los buffers de las líneas direcciones y control. “ del decodificador de direcciones. Para calcular el tiempo de acceso disponible por la memoria. reduce notablemente esta carga capacitiva y mejora los tiempos de transición de las señales. “ “ de la lógica de generación de OE y WR . se puede rediseñar la lógica para evitar que se superen los retardos máximos. consideran una capacidad de carga CL máxima. El termino tCAPB. los tiempos de interés son tAD y tRD. de los acopladores del bus de datos. con un valor típico de 15 ns. . se usa la expresión: t disponible por la memoria = t 8085 − ∑ D i Como la señal de selección de circuito CS es generada directamente por lógica combinatoria cuyas entradas son las líneas de direcciones. se comparan con los correspondientes al µP para establecer que existe compatibilidad.

Un dispositivo EEPROM típico puede borrarse en 10 ms y el ciclo de escritura tiene una duración de 10 ms. La desventaja principal de estas memorias es que cuando era necesario actualizar el programa o los datos. El tiempo de acceso del dispositivo esta comprendido entre 150 ns y 250 ns dependiendo de la versión y es tan sencilla de utilizar como una memoria RWM. exponerla a la luz ultravioleta para borrarla por completo. En estas dos últimas categorías. Aunque en las primeras EEPROM solo se podía . Durante tal evento el procesador mueve el código y/o datos contenidos en una memoria volátil a la flash. Las flash también se usan en sistemas que requieren preservar información en caso de interrupción del suministro de potencia de la red. al contrario de las EPROMs que debe ser regrabadas totalmente aunque sólo deba modificarse un byte. unidades de reconocimiento de voz independiente del hablante y funciones activadas por voz.7 MEMORIAS EEPROM Y FLASH Hasta hace pocos años. el dispositivo de memoria más usado para contener el código de una aplicación de sistemas empotrados fue la EPROM. En una EPROM estos lapsos son de 30 minutos y de 50 ms respectivamente. utilizar un quemador de EPROMs para regrabarla y finalmente reinsertarla en la tarjeta de la aplicación. Aunque las memoria tipo flash son de relativamente reciente aparición. estos dispositivos pueden considerarse como una mejora del diseño de las PROM eléctricamente borrables o EEPROM (Electical Eraseable Programmable Read Only Memory) inventadas al inicio de década de los ochenta.El Microcomputador Básico 193 5. mantiene su contenido en ausencia de energía y además permite actualizar el código y los datos con el dispositivo conectado al sistema (ISP:In System Programming). Existe un amplio rango de aplicaciones de sistemas empotrados donde las memorias flash son usadas para almacenamiento información. Una memoria EEPROM con características muy mejoradas con respecto a las primeras. Una vez reintegrada la energía el sistema continúa en el estado presente antes de la interrupción. En sistemas que requerían la actualización periódica de datos se usaba un dispositivo SRAM con una pila auxiliar para retener la información en ausencia de la alimentación principal. control de motores de automóviles. se debía retirar el circuito de memoria del circuito impreso. Estos patrones de voz pueden ordenar el encendido o apagado de equipos o el marcado de un número telefónico. Un nuevo tipo de memoria conocida como flash. existe un modo de programación del equipo en el cual el usuario programa comandos de voz que deben ser almacenados en una memoria no volátil para ser recuperados posteriormente y comparados con la entrada de voz en cualquier momento. Estas aplicaciones incluyen teléfonos celulares. Otra ventaja resaltante es que es posible rescribir el contenido de una o algunas posiciones. es el circuito integrado de código X28C64 con capacidad de 8 K x 8 e introducida por la empresa Xicor en el año 1991.

Debido a que en los sistemas empotrados no existen medios de almacenamiento masivo como discos. lo cual significa que si el diseño se hizo para 20 años pueden hacerse 13. La memoria tiene una entrada de reloj que permite sincronizar el envío de comandos y . Observe la similitud con una RWM.7 reescrituras por día. Por años han sido utilizadas como memoria de canales en sintonizadores de televisión. Por el límite de ciclos de escritura y por su lento tiempo de acceso. la X28C64 acepta la escritura de páginas de 64 bytes.49 se muestra el diagrama funcional de la memoria. las EEPROM son adecuadas para aquellas aplicaciones que requieren la retención de información. Para acceso a este tipo de memoria se establece un lazo serie de comunicación con el dispositivo simulando un UART. las memorias EEPROM han tenido un espectro limitado de aplicaciones. 5. como sustituto de arreglos de interruptores de configuración y para almacenamiento de constantes de calibración Existen EEPROMs de acceso serie como el chip ST93C56 con capacidad de 256 x 8 bits y un millón de ciclos de escritura la cual se presenta en un encapsulado de 8 terminales la cual puede usarse para almacenar por largo tiempo pequeñas cantidades de datos.49 Diagrama funcional de la X28C64 Una EEPROM tiene garantizado un número limitado de ciclos de escritura y un tiempo máximo de retención de los datos almacenados. Fig. Una X28C64 retiene los datos por 100 años y soporta 100 mil ciclos de grabado. En la figura 5. Por ejemplo el circuito ST93C56 puede usarse en un registrador de llamas telefónicas para almacenar y retener el número y el tiempo de duración de las llamadas realizadas en un periodo determinado.El Microcomputador Básico 194 escribir un byte a la vez.

El Microcomputador Básico 195 datos al chip. o cualquier otro que soporte el sistema. El código ISP debe ejecutarse desde una memoria independiente. Si las rutinas de arranque del CPU y los algoritmos de programación (código cargador de ISP) comparten la misma memoria EEPROM/Flash. Para interconectar una EEPROM a un sistema no se requieren técnicas distintas a las explicadas antes. En un sistema basado en este procesador el código reside en una EEPROM/Flash y durante el arranque es cargado en una memoria SRAM. En la práctica es virtualmente imposible realizar ISP de una memoria bajo el control del procesador en un sistema empotrado que contenga sólo una memoria EEPROM/Flash. El chip se conecta como una memoria RWM convencional. El problema es si existe la posibilidad de borrar o escribir sobre el mismo circuito integrado que contiene el código que se está ejecutando. Por ejemplo la 24LC512 almacena hasta 64Kbytes. Generalmente tienen capacidades de kilobits en contraposición a los megabits de las memorias flash y son escritas byte por byte o por páginas pequeñas. La sustitución de la memoria volátil SRAM de datos del sistema por una EEPROM no es una buena idea. De modo que son diseñadas para capacidad máxima. Al contrario es una excelente idea lo que hicieron los diseñadores del microprocesador PopCorn. pero si se usa ISP deben tomarse algunas previsiones y el procedimiento de sustitución no es tan directo. esta no estará disponible durante ISP. si es necesario. Las memorias flash fueron creadas originalmente como reemplazo de medios de almacenamiento masivo como discos flexibles y duros. aplicándole el pulso de escritura WR o MWR . Normalmente. Las EEPROM se inventaron para mantener información de configuración o para permitir reprogramar dispositivos integrados programables. En un sistema empotrado capaz de realizar ISP se entiende que un computador anfitrión puede descargar código en la memoria no volátil usando un canal de comunicación. Como resultado. soportan pocos ciclos de escrituras debido a que fueron diseñadas para ser actualizadas ocasionalmente en lugar de estar sometidas a continuas actualizaciones. usualmente un UART. cada una de estas es diseñada con propósito diferente. consumo de potencia mínimo y un gran número de ciclos de escritura. En la actualidad. se obtienen chips con características semejantes a las EEPROM. Una EEPROM/Flash puede sustituir a una EPROM para el almacenamiento del código de la aplicación. La información cargada en una flash se escribe usualmente por bloques en lugar de por bytes. 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. atenuando de esta . de modo que se puede incrementar la frecuencia del reloj del sistema sobre el valor requerido para ejecutar el código desde la memoria no volátil. están disponibles EEPROMs para conexión I2C con mayores capacidades. Aunque las tecnologías de fabricación de memorias EEPROM y flash son convergentes. Algunos diseños de memorias no volátiles modernas utilizan la más nueva tecnología de fabricación de flashs para proporcionar a una vida más larga y mayores capacidades y densidad.

. Por ejemplo las flash serie son desde el punto de vista del sistema leídas y programadas byte por byte como una EEPROM convencional. 5. Fig. En la figura 5. el procesador debe usar el algoritmo de programación proporcionado por el fabricante para el dispositivo. No obstante. 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 programación.. Por ejemplo. Aunque la lectura de una memoria eléctricamente borrable se realiza como si se tratase de una EPROM o SRWM convencional. las cámaras digitales requieren muchos megabytes para almacenar las imágenes y un sistema de reconocimiento de voz puede necesitar ½ megabyte para retener los patrones de reconocimiento de voz. Tales sistemas no pueden ser realizados con microcontroladores con memoria flash interna debiendo usarse dispositivos de memoria externos para satisfacer las especificaciones. el diseñador puede usar la versión con flash para el prototipo y la que contiene ROM para la producción final de la aplicación.El Microcomputador Básico 196 forma las distinciones entre las dos categorías. Un problema intrínseco es que el tiempo de acceso de la flash puede afectar la velocidad del sistema integral. cuando deben realizarse operaciones como borrado. Por otra parte. escritura de datos o protección de segmentos de memoria contra reescrituras no autorizadas.50 Algoritmos de programación Es usual que versiones de microcontroladores de los principales fabricantes se presenten con alguna cantidad de memoria flash interna para permitir el desarrollo de prototipos. tamaño que puede considerarse adecuado para la mayoría de las aplicaciones. existen proyectos donde: o se usa compiladores C para desarrollo del programa o por su naturaleza deban acceder a cantidades de memoria muy superiores a la señalada. la capacidad de la flash integrada con el CPU es usualmente de hasta 32 Kbytes. Si la empresa produce versiones del controlador con flash y con ROM.50 se muestran dos modelos de programación de una memoria flash.

los diseños modernos con µPs de complejidad media pueden requerir desde 64 K hasta 256 Kbytes de espacio de memoria. herramienta básica de trabajo para los programadores de sistemas empotrados hasta hace pocos años. La figura 5. Por muchos años las aplicaciones de sistemas empotrados de media y baja complejidad exigieron capacidades de memoria que estaban muy por debajo de este tope. Si se elige la opción señalada posiblemente el programador se en- .51 muestra el símbolo lógico del chip. Fig. Observe que la interconexión a un sistema 8085A es directa. De hecho.51 Memoria flash Am0F040 de 4 Mbits. no siempre la solución ante esta disyuntiva es tan sencilla. Considere por ejemplo que se debe actualizar un sistema basado en un µP antiguo de 8 bits. la frontera de los 64Kbytes parecía demasiado lejana para ser rebasada por las aplicaciones con µPs. Pareciera que la solución ante esta situación es apelar a los modernos µCtrls o a un µP de 16 bits como el 8088 o el 80188. la existencia de compiladores C para la mayoría de los µPs y µCtrls en el mercado. 5. en los microprocesadores típicos de 8 bits el ancho de 16 bits del bus de direcciones impone un límite de 64K bytes al número de posiciones que el procesador puede usar para almacenar código y datos.8 BANCOS DE MEMORIA Aunque algunos microcontroladores modernos pueden tener acceso a un espacio de memoria externo de por ejemplo 2 Mbytes (PIC18C252). 5. ha hecho posible el desarrollo de aplicaciones de tal complejidad que hubiese sido una fantasía pensarlas en programarla en lenguaje ensamblador. Por ejemplo pueden usarse 32 Kbytes conectando sólo las líneas de direcciones A0-A14 y dejando las restantes desconectadas. En ese tiempo. con accesos a memoria de hasta 1 Mbyte.El Microcomputador Básico 197 Una memoria flash de 512 K x 8 bits es la Am29F040 el cual es un dispositivo con acceso por sectores de 64 Kbytes y con tiempo de acceso máximo de 55 ns. Sin embargo. En la actualidad. en el mundo real.

la segunda quizás algo extrema. El costo del desarrollo del nuevo software puede ser tan alto que una decisión sabia puede ser mantener el mismo CPU.El Microcomputador Básico 198 frentara al hecho de rescribir decenas de miles de líneas de código. en las cuales el tamaño del programa de una aplicación basada en un µP de 8 bits. Ante este modo de operación. El programa se organizó como un lazo único de control con soporte de interrupciones para eventos ante los cuales el explorador debía reaccionar rápidamente. Especificaciones adicionales indican que el µP debe ser de bajo consumo e inmune a la radiación cósmica. excede la . existen aplicaciones cuyos requerimientos de diseño pueden ser de tal magnitud que rebasen las capacidades de los microcontroladores disponible. Esta arquitectura del sistema de control responde al hecho que el vehículo no tenía suficiente energía para hacer dos cosas a la vez. Este µP aparece frecuentemente en diseños de instrumentos y controles en el área de navegación espacial. cámaras de TV. motores y un espectrómetro de rayos X. 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. pero este problema tuvo que resolverlo en Laboratorio de Propulsión de Jets (JPL) de la NASA durante la preparación de parte de la misión a Marte lanzada el 4 de julio de 1997 y conocida como Pathfinder. Estos usualmente tienen 6 puertos de E/S (48 líneas 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. lasers. modem. Por otro lado. además el sistema debe ejecutar 12 experimentos cuyos resultados será vitales para el avance de una determinada tecnología de punta. a menos que éste se configure para operar como microprocesador con memoria externa y circuitos programables para interconexión de E/S. considere el desarrollo de un sistema que ejecuta operaciones de E/S sobre 80 dispositivos tales como sensores. El párrafo anterior describe a un sistema empotrado de gran complejidad con tales especificaciones que no pueden ser satisfechas por ningún microcontrolador estándar. la NASA no vislumbro ventaja alguna en el uso de un sistema de control multitarea de tiempo real que más bien podría deteriorar el funcionamiento del sistema. En todo caso tenemos dos situaciones. Suponga además que el código de la aplicación para el control de E/S y los experimentos ocupa 16 Kbytes de PROM. Por ejemplo. Por ejemplo no podía moverse activando los motores de las ruedas y a la vez comunicarse usando el modem de radiofrecuencia. Acepto que este es un ejemplo extremo. específicamente durante el diseño del sistema de control del vehículo autónomo explorador Sojouner Los diseñadores del JPL seleccionaron el µP de 8 bits 80C85 (versión moderna del 8085) como CPU del sistema microcomputador de control del Sojouner. aunque puede ocurrir que la actualización del código produzca un programa de un tamaño tal que rebase la capacidad de direccionamiento del µP. 160 Kbytes de EEPROM y 576 Kbytes de RWM. Muchas opiniones señalan que esto se debe a la inmunidad del 80C85 ante los rayos cósmicos y a su bajo consumo de potencia.

el estado de los bits A17 y A16 establecerá a cual banco corresponde la dirección. 5. cuando se haga referencia a una dirección de memoria lógica. Tabla. si se suman bits extras de direcciones es posible aumentar la capacidad de acceso a memoria. En otras palabras. se incrementa el espacio de memoria a 256 Kbytes (218). Como indica la tabla 5. Una dirección física viene dada por la expresión: 0 Dir Física = (N banco × Tamaño del banco) + Desplazame int o Para B10 : 7FFFH Dir Física = (2 × 10000H) + 7FFFH Dir Física = (2 × 10000H) + 7FFFH Dir Física = 27FFFH . Donde Bxx indica el banco al cual pertenece la posición seleccionada y 7FFFH será la dirección de desplazamiento en el banco. Direcciones físicas y lógicas y mapa de memoria para un sistema con 256 Kbytes de EPROM. el hardware externo de mapeo debe redirigir la llamada o salto una dirección física específica. Por ejemplo. Una dirección de 17 bits de la memoria sistema. Estas nuevas líneas se conectan a los bits de direcciones de orden alto de los circuitos de memoria del sistema. Al aumentar en dos las líneas de direcciones se tiene 256 Kbytes de memoria física (real) y sólo 64 Kbytes de memoria lógica cuyas direcciones son generadas por el procesador.21. Cuando el programa hace referencia a una posición de la memoria. Debido a que el límite de 64 Kbytes lo impone el hecho que el µP sólo tiene 16 líneas de direcciones.52 Direcciones físicas y lógicas y mapa de memoria para un sistema con 250 Kbytes de memoria de programa. usando lógica externa para generar los bits A16 y A17. DIRECCIÓN Banco A17 A16 FÍSICA LÓGICA 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. el espacio de memoria puede verse como 4 bancos de 64Kbytes cada uno con iguales direcciones lógicas pero direcciones reales distintas. puede especificarse como B00:7FFFH o B10:7FFFH.El Microcomputador Básico 199 capacidad del espacio de memoria accesible por el procesador. 5.21.

usar esta línea de dirección (A15) para seleccionar la EPROM y su complemento A 15 .El Microcomputador Básico 200 No existe limitación alguna para diseñar un subsistema de memoria como el descrito. Considere ahora el mapa de memoria de la figura 5. 5. es un área común (sin bancos) que es visible desde cualquiera de los bancos. No obstante. se debe generar un bit de dirección adicional A’16 (217=128K) el cual debe conectarse al terminal A16 de la EPROM.53 Mapa de memorias con cuatro bancos de EPROM. y una memoria volátil de 32 Kbytes tipo MBM6256AFP. De modo que para diseñar un sistema con bancos de memoria conmutados debe realizarse un análisis detenido de las necesidades de memoria de código y de datos y decidir o cuál de estás es la que requiere el uso de bancos.53 se deduce que la línea de dirección A15 estará en nivel alto para cualquier posición dentro del rango de la SRWM y en estado cero para cualquier dirección lógica de la EPROM. la cual además soporta la pila del sistema permitiendo la codificación de subrutinas y la gestión de interrupciones. Puede usarse dos bits de un puerto de salida para las líneas extras de direcciones y código adicional para conmutar los bancos. Para tener acceso a 128 Kbytes desde el espacio lógico de 32 Kbytes asignado a código. Pero como usamos la línea A15 del microprocesador para seleccionar los circuitos de memoria. para habilitar la memoria la SRWM. Para el diseño del subsistema de bancos de memoria. Los bits A0-A14 del µP se conectan las entradas de direcciones de la EPROM y de la SRWM. La memoria de código consiste de un dispositivo EPROM MBM27C1000 de 128 Kbytes.52 no tiene memoria de lectura/escritura y los programas típicos adquieren variables externas o generan valores locales que deben almacenarse en una memoria de datos. observe que del mapa de memoria de la figura 5. En principio el sistema con el mapa de la figura 5. el cual debe ser accedido como cuatro bancos de 32 Kbytes cada uno.53. en este caso. Es posible entonces. existen algunas consideraciones de orden práctico que deben hacerse al momento de definir el mapa de memoria de una aplicación real. Fig. el cual pertenece a un sistema con una memoria SRWM de 32 Kbytes y un área de código de 32Kbytes que será mapeada a 4 páginas en un dispositivo de 128 Kbytes. La memoria de datos. también debemos .

Es necesario. cuyas salidas son puestas a cero por la señal RESET-OUT.El Microcomputador Básico 201 generar una nueva línea A’15 para la EPROM. Esto significa que el diseño debe hacerse para que exista una región de memoria de programa y otra de memoria de datos que sean visibles desde cualquier banco. Las secciones de código mencionadas a continuación deben siempre residir en el área común: • Vectores de reset y de interrupción: debido a que el reset e interrupción del µP son eventos asincrónicos y pueden ocurrir cuando esté seleccionado cualquiera de los bancos de código. 5.A’15 y del terminal A15 del µP. Por ejemplo. los vectores de reset y de interrupciones deben residir en el área común. que exista alguna cantidad de memoria de programa común donde debe cargarse por ejemplo las rutinas que controlan la conmutación de los bancos. de modo que si la conectamos directamente al la memoria de código sólo se tendrá acceso al banco 0. además. Cualquier dirección por debajo de este rango. Cuando se diseña un subsistema de memoria usando la técnica de conmutación de bancos. . la sección 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. Estas zonas se denominan áreas comunes de código o de datos. de las líneas de dirección de la EPROM A’16 . Tabla. La memoria RAM es seleccionada con direcciones lógicas entre 8000H y FFFFH. Banco 0 1 2 3 XA16 0 0 1 1 XA15 0 1 0 1 A’16 0 0 1 1 A’15 0 1 0 1 A15 0 0 0 0 DIRECCIÓN FÍSICA LÓGICA 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 eléctrico de la figura 5. El puerto de salida se realiza con un latch 74LS175. para cualquier posición de la memoria de programa. Algunos prefieren llamarlas área de código del sistema o área de datos del sistema. La tabla siguiente muestra el estado de los bits de selección de banco XA16 . deben realizarse previsiones para que ciertas áreas de memoria de código y de datos no desaparezcan cuando se selecciona un banco.22 Tabla de estados de la memoria EPROM. dependiendo del valor de XA15-16. que se aplica a la entrada A15 de la MBM27C1000. durante el arranque del sistema.54.XA15. habilita el circuito mapeador externo y selecciona una posición de memoria en una de las páginas de 32Kbytes. La razón de esto es que cada vez que se tiene acceso a la EPROM. A15 estará en cero.

El Microcomputador Básico 202 Fig. 5.54 Subsistema de memoria con bancos conmutados .

por lo cual éstos deben ser manejados por el programa.El Microcomputador Básico 203 • Constantes y tablas: si un banco contiene valores constantes y tablas definidas por el código. Algunos paquetes de desarrollo no incluyen acceso a bancos de datos. cuales módulos del programa deben residir en el área del sistema. • Rutinas de conmutación de bancos: esta sección del programa así como la tabla de saltos debe localizarse en el área común por ser necesarias para todos los bancos. Este archivo debe ser configurado para que se corresponda con la técnica de conmutación usada por el hardware. especificando el número de bancos y como son seleccionados. es que no proporciona una sección para el área común de código en el espacio de la EPROM. El programa enlazador entonces copia el código y los datos almacenados en esta zona en cada banco. Los programas enlazadores asociados generan automáticamente el código y la información de mapeo necesaria para ejecutar programas con bancos. RET y sus formas condicionales están sujetas a remapeo cuando se ejecutan. El enlazador crea una tabla de saltos para todas las funciones almacenadas en el área de bancos y que son llamadas desde el área común o de otros bancos. Por ejemplo debe especificarse el número del puerto de la lógica de conmutación y el estado de los bits de selección para cada banco.54. Para esto considere que el tamaño de esta zona es 16 Kbytes (0000H-03FFFH) como ilustra el mapa de memoria de la figura 5.55. debe rediseñarse el manejador de memoria para asignar por hardware el área común. Algunos ensambladores y compiladores C incorporan soporte para conmutación de bancos. JMP. de modo que el contenido de todos los bancos de EPROM es el mismo en el rango de direcciones del área común. Para evitar la duplicación del código común. La solución es que debe indicarse en tiempo de compilación. El espacio de EPROM en el rango 40000H-7FFFH será redirigido a uno . Una omisión en el modo de operación del circuito de manejo de memoria de la figura 5. En caso contrario estas constantes y tablas deben almacenarse en el área común. El enlazador además tiene directivas de control para especificar la localización y tamaño de los bancos y para asignar determinados módulos del programa al área de un banco o al área común. Normalmente el vendedor del software entrega un pequeño módulo de código el cual realiza la conmutación a y desde bancos. • Funciones de bibliotecas: las rutinas de bibliotecas usadas por el compilador en tiempo de ejecución deben cargarse en el área común. La aplicación que usa la técnica de conmutación de bancos debe incluir el módulo fuente que contiene el código que es invocado para la conmutación de los bancos. Normalmente las instrucciones CALL. debe garantizares que esa página sea seleccionada en el momento que esta información sea invocada por el programa.

A15’ y A16’ que se conectan a las tres líneas orden alto de las entradas de direcciones del dispositivo. Aunque algunos compiladores no soportan bancos para el área de datos no existe razón alguna para que la técnica de conmutación de bancos sea aplicada a la memoria SRWM del microcomputador. usando para seleccionarlos tres bits XA14-16 de un puerto de salida. Como muestra la figura 5. Fig.56 Las líneas de direcciones A0-A13 se conectan a las entradas correspondientes de la EPROM. El proceso de diseño de un mapeador para la RAM se realiza exactamente igual a como se hizo para la memoria de código.55 Mapa de memorias con área común de código y siete bancos de EPROM. dependiendo del estado de los bits A14’. . 5. Cuando A15 es igual a cero se selecciona la EPROM y se puede tener acceso a uno de ocho bancos de 16 Kbytes.El Microcomputador Básico 204 de ocho bancos de 16 Kbytes.

.56 Subsistema de memoria con área común de código. 5.El Microcomputador Básico 205 Fig.

Usar la ALU para ejecutar operaciones matemáticas y lógicas. Mover datos desde una posición de memoria a otra. y se describe como usarlo para realizar procesamiento de información. el µP puede realizar tres tareas básicas: 1. Tomar decisiones. y basarse en los resultados para transferir el control del programa hacia un nuevo conjunto de instrucciones. • El repertorio de instrucciones del µP y • Los modos de direccionamiento. 2. En este capítulo. Para escribir programas eficientes en ensamblador. El µP ejecuta una secuencia de instrucciones de máquina que define las operaciones a realizar. 3. Basándose en las instrucciones. y en ocasiones conveniente. el uso de lenguajes de alto nivel para la escritura de los programas de aplicación. . Aunque es posible. se presenta el conjunto de instrucciones del microprocesador 8085A. el usuario debe conocer a la perfección: • Las funciones de los registros y la forma en que están organizados en el interior del µP. para introducir al lector en la programación del 8085A se usará el lenguaje ensamblador.Introducción a la Programación del 8085A 206 Programación del 8085 En el capítulo anterior se establecieron las bases mínimas para el diseño de un sistema microcomputador mínimo.

las cuales están interconectadas a los buses del microprocesador. tales como el acumulador (A). es suficiente considerar inicialmente un modelo que represente los recursos a la disposición del programador. 8085A D0-D7 A0-A15 Fig. para programar el sistema. El modelo para programación está constituido por varios registros de 8 bits. Los elementos del modelo se presentan tal como se perciben desde la óptica de un programador. o de cualquier otro μP. Los registros buffers de datos y de direcciones no forman parte del modelo. el registro de banderas o de estado.1 Modelo del microcomputador para programación. y el banco de re- .1 EL MODELO PARA PROGRAMACIÓN Aunque un microcomputador construido alrededor del μP8085. En la figura 6.Introducción a la Programación del 8085A 207 6. Los registros internos a los cuales se permite acceso al usuario constituyen el modelo básico de programación del microprocesador.1 se presenta un diagrama de la estructura interna del µP y de los componentes externos asociados que integran al µC. 6. comprende un número de unidades funcionales distintas y de complejidad variable.

C. la conexión real entre el μP. dos o tres posiciones en el interior del dispositivo de memoria. 6. para especificar la dirección del salto.D. Esta almacena la información en palabras con formato de ocho bits. el microprocesador debe obtener el código ejecutable y trasladarlo en secuencia al registro de instrucciones del microprocesador.Introducción a la Programación del 8085A 208 gistros de propósito general (B. la instrucción aritmética ADD r. y es una instrucción de tres bytes porque requiere dos palabras adicionales al código de operación. y dos registros de 16 bits: el contador de programa y el apuntador de pila. Por ejemplo. cargando el resultado de la operación en el mismo registro acumulador. realiza la suma del contenido del registro r y el dato depositado en el acumulador. . y el otro para representar el dato a ser almacenado en el registro. la memoria. La instrucción MVI r. 6. El microcomputador tiene una memoria para instrucciones y datos con una capacidad de 64Kbytes y 512 puertos de E/S.E. En la figura 6. Para efectos de programación. El primero para el código de operación. mueve el valor especificado por el operando dato al registro r. dato. Instrucción de un byte Instrucción de tres bytes Código de operación Dato o byte de una dirección de memoria Byte de una dirección de memoria Instrucción de dos bytes Fig. Una instrucción JMP dirección produce un salto incondicional a la dirección especificada. Se requiere un byte para definir completamente la instrucción. necesitándose dos bytes para especificar la instrucción. Las instrucciones y los datos del programa son obtenidos desde la memoria del sistema.L).H.2 se muestra el formato general para las instrucciones del 8085. cada instrucción puede ocupar uno. De acuerdo con su tipo.2 FORMATO DE LAS INSTRUCCIONES Para ejecutar un programa. y los puertos de E/S del sistema pueden considerarse transparentes para el programador.2 Formato de instrucciones del μP 8085.

(a) Registro DDD o SSS 111 000 001 010 011 100 101 Registro par BC DE HL SP rp Condición (XX) NZ no cero Z cero NC sin acarreo C con acarreo PO Paridad impar PE paridad par P positivo M negativo (Z=0) (Z=1) (CY=0) (Z=1) (P=0) (P=1) (S=0) (S=1) (d) CCC A B C D E H L 00 01 10 11 (c) 000 001 010 011 100 101 110 111 (b) . mientras que H representa al registro par H-L. SÍMBOLO SIGNIFICADO dirección Expresión binaria de 16 bits. D-E. L es destino (D) o fuente (S) de información. (Vea tabla 3) XX Código de las banderas en instrucciones de salto condicional. El registro B representa el par B-C.r1. Rl El byte menos significativo de un registro par. B. M Referencia a memoria PSW Palabra de estado del programa. L DDD. C.1. Rh El byte alto de mayor peso de un registro par.1.r2 Uno de los registros: A. 6. (Vea tabla 2) Rp Cada pareja de registros B-C. E. B. E. Dato Expresión binaria de 8 bits. la simbología usada por la empresa INTEL para las instrucciones. D. PCH y PCL Bytes de mayor y menor peso del contador de programa. Nomenclatura de las instrucciones del 8085. (vea tabla 4) NNN Número binario entre 000 y 111. dato 16 Expresión binaria de 16 bits.Introducción a la Programación del 8085A 209 NOMENCLATURA PARA EL CONJUNTO DE INSTRUCCIONES: Para facilitar la comprensión de las instrucciones del 8085 se presenta. en la tabla 6. D al par D-E. H. D. C. N Número decimal entre 0 y 7. SSS Representación de 3 bits del código de operación donde algunos de los registros: A. Puerto Dirección de 8 bits de un dispositivo de E/S r. Consiste del contenido del acumulador más las banderas de condición. H-L. H. Tabla.

Por ejemplo. Este valor puede estar en la memoria del sistema. ← (A). mientras que el tercer byte corresponde a los 8 bits de mayor peso de la dirección donde está el dato. 6. El modo en el cual la instrucción obtiene el segundo elemento de la operación. En general. • Direccionamiento inmediato.3. Un modo de direccionamiento particular establece el procedimiento utilizado por el microprocesador para obtener un dato necesario para la ejecución de la instrucción.3a muestra como se almacena la instrucción en memoria.1 Direccionamiento directo La instrucción indica en forma explicita la dirección de la posición de memoria donde está el dato. Suponga que una instrucción STA 2045H está almacenada en la dirección 2000H de la memoria del sistema. esto es [(byte 3) (byte2)]. y la figura 6.3b presenta el contenido del dispositivo de memoria después de ejecutarse la instrucción. Este modo corresponde a instrucciones de tres bytes. Las instrucciones del 8085A tienen cuatro modos de obtener los datos: • Direccionamiento directo. en un registro o puede ser especificado por un operando de la propia instrucción. .Introducción a la Programación del 8085A 210 6. la potencia de cómputo de un determinado µP está determinada por el número de modos de direccionamientos disponibles. La figura 6. establece una diferencia entre estas dos instrucciones. con uno de los operandos almacenado en el acumulador. • Direccionamiento indirecto por registro. Para la escritura de programas eficientes es necesario entender con claridad los distintos modos de direccionamiento que puede utilizarse con cada instrucción del µP. mientras que en el segundo caso se encuentra en la posición de memoria especificada por el contenido del registro par HL. donde el segundo indica los 8 bits de menor peso de la dirección. ADD r y ADD M son ambas instrucciones que ejecutan una suma. En un caso.3 MODOS DE DIRECCIONAMIENTO Especifican la manera en que las instrucciones del microprocesador 8085A obtienen los datos a los cuales hacen referencia. • Direccionamiento por registro. el valor es obtenido desde un registro r. Esta instrucción realiza la operación de mover el contenido del acumulador a la dirección de memoria especificada por los bytes 2 y 3 de la instrucción.

.3. Este tipo de referencia a datos corresponde a instrucciones de dos y tres bytes. las otras son afectadas según el resultado. ejecuta una operación AND entre el contenido del byte dos de la instrucción y el dato en el acumulador. (a) antes de la ejecución.6.3 Direccionamiento directo de una posición de memoria. El resultado de la operación lógica se deposita en el acumulador. Por ejemplo. (b) Después de la ejecución 6.2 Direccionamiento Inmediato La instrucción contiene en forma explícita el dato a utilizarse en la ejecución de la instrucción. la instrucción ANI dato.Introducción a la Programación del 8085A 211 A F3 PC 20 00 2000H 2000H 2001H 2001H 2002H 2002H 2003H 2003H MEMORIA 32 32 45 45 20 20 STA STA 45 45 20 20 2045H 2045H 2046H xx F3 (a) MEMORIA 2000H 2001H 03 2002H 2003H 32 45 20 STA 45 20 A F3 PC 20 2045H 2046H F3 (b) Fig. La bandera de acarreo y la de acarreo auxiliar son puestas a cero.

el contador de programa. el contador de programa. y el registro de condiciones. antes de ejecutar la instrucción.5 Direccionamiento inmediato de un dato. Contenido del acumulador. (P) = 1. (AC) = 0. (Z) = 0. El resultado de ejecutar ANI 011010112.6.4 Direccionamiento inmediato de un dato. Contenido del acumulador. (CY) = 0 A DF X X PC 20 X F X X 2000H 2000H 2001H 2001H 00 F3 2002H 2002H 2003H MEMORIA E6 32 6B 45 x 20 ANI STA 6B 45 F3 2046H Fig. luego de ejecutar la instrucción.Introducción a la Programación del 8085A 212 Suponga que el acumulador contiene el dato binario 110111112. A CF PC 20 0 0 0 F 1 0 2000H 2001H 2001H 02 F3 2002H 2002H 2003H MEMORIA E6 32 6B 45 x 20 ANI STA 6B 45 F3 2046H Fig. . es: 1101 1111 0110 1011 0100 1011 (A) (byte 2) (A) (S) = 0 .6. la memoria y el registro de condiciones. la memoria.

o rp de 16 bits.Introducción a la Programación del 8085A 213 6. el cual contendrá el resultado de la operación.7. cuya ejecución incrementa en 1 el contenido del registro par rp.3 Direccionamiento por registro La instrucción especifica el registro r de 8 bits. Se trata de una instrucción de un byte.3. B (B-C) 12 C FF (B-C) + 1 13 00 Fig.6 Direccionamiento por registro. 6. antes y después de ejecutar la instrucción. La instrucción INX rp. esto significa (rh) (rl) ← ((rh) (rl) +1).4 Direccionamiento indirecto por registro La dirección de memoria donde está el dato es especificada por el contenido de un registro par. donde se halla el dato.8 y 6.3. el contenido de BC cambiará como muestra la figura 6. Si antes de ejecutar la instrucción: (A) = 1F (CY) = 1 (H) = 20 (L) = 50 [2050] = 23 Después de ejecutar la instrucción: (A) = 43 (H) = 20 (L) = 50 [2050] = 23 y el estado de las banderas será: (S) = 0 (Z) = 0 (AC) = 1 (P) = 0 (CY) = 0 En las figuras 6. 6. . Esto es: (A) ← (A) + [(H)(L)] + (CY). La instrucción ADC M suma el contenido de la posición de memoria indiada por el registro par H-L más el bit de acarreo contenido del acumulador. Si el registro B contiene el dato 12H y el registro (C ) = 4FH. al ejecutarse la instrucción INX B.9 se presentan los contenidos de los registros y memoria. es un ejemplo de este tipo de referencia a dato.

Bifurcaciones. 6. el registro par H-L. estás pueden distinguirse en los siguientes grupos: • • • • • Transferencia de datos. Contenido del acumulador. y control de la máquina. la memoria y el registro de condiciones. Operaciones Aritméticas.9 Direccionamiento indirecto por registro de un dato. el contador de programa. Contenido del acumulador. .6.7 Direccionamiento indirecto por registro de un dato. el registro par H-L. E/S. MEMORIA A 1F H 20 F3 PC 0 0 1 L 50 F3 2002H F 0 0 2000H 2000H 2001H 8E 32 x 45 ADC 20 23 F3 F3 20 F3 01 2050H 2046H 2045H Fig.4 EL CONJUNTO DE INSTRUCCIONES DEL 8085 El μp8085A puede ejecutar 246 operaciones distintas agrupadas en 74 instrucciones generales. antes de ejecutar la instrucción. el contador de programa.6. Instrucciones de manejo de pila (stack).Introducción a la Programación del 8085A 214 MEMORIA A 1F H 20 F3 PC 20 F3 X X X L F X 1 2000H 2000H 2001H 8E 32 ADC x 45 F3 50 F3 00 2002H 20 23 F3 2050H 2046H 2045H Fig. la memoria y el registro de condiciones. luego de ejecutar la instrucción. Operaciones lógicas.

Tabla.2 Instrucciones para carga y movimiento de datos. esta se especifica de la siguiente forma. El registro HL debe cargarse con la dirección de memoria cuyo contenido se quiere transferir. hacia un registro. Transfieren información entre los registros internos del microprocesador.r2 MOV r. dependiendo del origen y destino de los datos: MOV r1.dato LXI rp. desde un registro hacia la memoria del sistema.M (r)←[(H) (L)] Mueve el contenido de la posición de memoria apuntada por el registro par HL al registro r. Estas instrucciones deben especificar la fuente donde se localizan los datos. Cuando se ejecuta una transferencia (mover).4. puede especificarse cualquier registro interno de 8 bits. Existen varios métodos para cargar la dirección. 6. En la tabla 6. el contenido del registro fuente permanece inalterable.2 se presentan las instrucciones del 8085A destinadas a transferir datos.Introducción a la Programación del 8085A 215 6.dato MVI M.1 Grupo de instrucciones para transferencia de datos Permiten el movimiento de datos entre los distintos componentes del sistema μcomputador. o hacia los puertos de entrada y salida. Las instrucciones de este grupo no afectan las banderas. y el destino donde debe copiarse la información.r2 (r1)←(r2) Transfiere el contenido del un registro fuente r2 a al registro destino r1 . Instrucciones para transferencia de datos MOV r1.r MVI r.M MOV M. pero una forma común es usar la instrucción: . MOV r.dato 16 LDA dirección (r1) ← (r2) (r) ←[(H)(L)] [(H)(L)] ← (r) (r) ← (dato) [(H)(L)] ← (dato) (BC) ←dato 16 (A) ←[(dirección)] STA dirección LHLD dirección SHLD dirección LDAX rp STAX rp XCHG IN puerto OUT puerto [(dirección)]←(A) (L) ←[(dirección)] (H) ←[(dirección+1)] [(dirección)] ← (L) [(dirección+1)] ← (H) (A) ← [(rp)] [(rp)] ← (A) (H) ↔ (D) (L) ↔ (E) (A) ← (puerto) (puerto) ← (A) Los datos son transferidos entre registros o entre un registro y la memoria por la instrucción MOV. o bien desde la RWM o dispositivos de E/S.

MVI r .Introducción a la Programación del 8085A 216 LXI rp. o el modo de direccionamiento. (H) ←[(byte 3) (byte 2) +1] El contenido de la dirección de memoria especificada por el byte 2 y 3 de la instrucción es cargado en el registro L. carga el registro H con el byte 10H y L con FFH. Otra forma de cargar un registro o una posición de memoria es con la instrucción MVI. Las instrucciones LXI y MVI pueden usarse para cargar cualquier registro o posición de memoria cambiando el operando destino. dirección carga el apuntador de stack con la dirección del tope de la pila. por ejemplo: LXI H. LHLD dirección (L) ←[(byte 3) (byte 2)]. LDAX rp (A) ←[(rp)] La información en la posición de memoria especificada por el contenido del registro par rp es transferida al acumulador. LDA dirección (A) ←[(byte 3) (byte 2)] El dato en la posición de memoria especificado por el byte 2 y 3 de la instrucción es movido al acumulador. y el contenido de la próxima posición de memoria es transferido al registro H. Algunas instrucciones para transferencia de datos con memoria no hacen referencia al registro par HL. 10FFH. dirección deposita en el registro par BC los bytes 2 y 3 de la instrucción. Por ejemplo LXI B. mover inmediatamente. . La instrucción LXI SP. dirección (rl)←(byte 2).dato (r)←(byte 2) Carga el registro r de 8 bits con el dato especificado por el byte 2 de la instrucción MVI M. carga el registro par rp con los bytes 2 y 3 de la instrucción.dato [(H)(L)]←(byte 2) Permite copiar el dato especificado por el byte 2 de la instrucción en la posición de memoria con dirección indicada por el contenido del registro HL. (rh)←(byte 3) Esta instrucción de 3 bytes.

(L) ↔ (E) Intercambia los datos contenidos en los registros pares HL y DE: La elección de las instrucciones que permiten la transferencia de información entre el microprocesador y los dispositivos de entrada y salida. (E/S aislada) • E/S direccionada como memoria. depende del tipo de estructura que utilice el sistema para la decodificación de los puertos de E/S. Usando estas instrucciones.1 El código siguiente mueve el contenido de la dirección de memoria 451FH al registro acumulador. Son posibles dos esquemas: • E/S estándar. (Mapeo de memoria) . Ejemplo 6. [(byte 3) (byte 2) +1]←(H) Mueve el contenido del registro L a la posición de memoria señalada por los bytes 2 y 3 de la instrucción. El contenido del registro H es transferido a la siguiente posición de memoria. lda 1F 45 3 bytes lxi h 1F 45 mov a. esto puede realizarse con tres bytes en lugar de los cuatro bytes necesarios para cargar el registro par HL con una dirección y mover datos desde o hacia la memoria.Introducción a la Programación del 8085A 217 STAX rp [(rp)]←(A) El byte almacenado en el registro acumulador es transferido a la posición de memoria cuya dirección está especificada por el contenido del registro par rp.m 4 bytes XCHG (H) ↔ (D). STA dirección [(byte 3) (byte 2)] ←(A) El contenido del acumulador es almacenado en la dirección de memoria especificada por los bytes 2 y 3 de la instrucción. SHLD dirección [(byte 3) (byte 2)]←(L). Las instrucciones LDA y STA proveen un medio para transferir inmediatamente datos entre el acumulador y la memoria.

se pueden usar las instrucciones que hacen referencia a memoria para transferir datos a. Para el esquema E/S estándar se usan las instrucciones de dos bytes IN puerto y OUT puerto. es depositado en el acumulador.4. La única diferencia es que el microprocesador opera con datos de 8 bits. En este caso. En lo que se refiere al programador. La línea IO / M es puesta en alto para indicar que la transferencia es a un registro de E/S. El primer byte de la instrucción contiene el código de operación y el segundo la dirección del puerto que se desea seleccionar: IN puerto (A)←(dato) El byte colocado en el bus de datos por el puerto especificado por el segundo byte de la instrucción. 256 de entrada. Las instruccio- . las señales de control de lectura y escritura en puerto realizarán la distinción.2 Grupo de instrucciones que ejecutan operaciones lógicas El microprocesador 8085A posee un grupo de instrucciones que usan la unidad lógica y aritmética para hacer posible la realización de operaciones lógicas. y 256 de salida. Además. RD . el 8085A coloca la dirección del puerto sobre las ocho líneas de dirección de menor peso A0-A7. basta con distinguir las instrucciones que se pueden utilizar en cada caso. solo es posible el acceso a 512 puertos. en el caso de la ejecución de una instrucción OUT se activará la señal WR . el procesador no puede distinguir entre un puerto tratado como memoria y una dirección de la memoria del sistema. de escritura en memoria o puerto de E/S. OUT puerto (dato)←(A) El contenido del registro A es colocado en el bus de datos para ser transmitido al puerto especificado por el segundo byte de la instrucción Es obvio que como la dirección del puerto se especifica con un byte. 6. Cuando los puertos de entrada y salida son seleccionados como si se tratara de posiciones de memoria. se activa para permitir la lectura del puerto. Cuando se ejecuta una instrucción IN la señal de control de lectura. de forma equivalente a como las puertas básicas digitales las ejecutan por hardware. duplicando esta información en las ocho líneas de mayor peso del bus de direcciones A8-A15. o desde dispositivos de E/S. Un puerto de entrada puede tener la misma dirección que uno de salida.Introducción a la Programación del 8085A 218 Posteriormente se analizaran en detalle los modos de selección más comunes para dispositivos de E/S.

ANA M y ANI dato realizan la función AND entre el acumulador y el operando de referencia.3 Instrucciones del grupo lógico.( r) (A) . ANA r (A)←(A) ∧ ( r) . 6. Instrucciones lógicas ANA r ANA M ANI dato ORA r ORA M ORI dato XRA r XRA M XRI dato CMA (A)←(A) ∧ ( r) (A) ←(A) ∧ [(H)(L)] (A) ← (A) ∧ (dato) (A) ← (A) ∨ ( r) (A) ←( A) ∨ [(H)(L)] (A) ← (A) ∨ (dato) (A)←(A) ∀ (r) (A)←(A) ∀ [(H)(L)] (A)←(A) ∀(dato) (A)←(A) CMC STC CMP CMP M CPI dato RRC RLC RAR RAL r (CY )← (CY) (CY) ← 1 (A) .Introducción a la Programación del 8085A 219 nes de este grupo facilitan la manipulación y control de bits individuales de un registro o posición de memoria. OR Exclusivo. en otro registro del microprocesador o en la memoria. En todas las instrucciones lógicas. uno de los operandos está en el acumulador. OR. (A0)←(A7) (CY) ← (A7) (An)←(An+1). Afectan todas las banderas de condiciones: CY es puesta a cero y AC a 1. como en ANA r. (CY)←(A7) (A0) ← (CY) Cuando en una instrucción de este grupo intervienen dos operandos. que ejecuta una operación AND entre un registro y el acumulador. Cuando intervienen dos operandos. el otro puede estar: implícito en la instrucción. Los valores de P. Las instrucciones de este grupo afectan todas las banderazas operaciones lógicas posibles son: AND. (CY)←(A0) (A7) ← (CY) (An+1)←(An). y Desplazamientos. Tabla.(dato) (An)←(An+1).[(H)(L)] (A) . exceptuando aquellas que se refieren a la bandera de acarreo (CY). Instrucciones que ejecutan la función AND ANA r. la operación se realiza simultáneamente entre los bits correspondientes de cada byte. (A7)←(A0) (CY) ← (A0) (An+1)←(An). Complemento. En el caso de la instrucción CMA de complemento. S y Z son asignados de acuerdo con el resultado de la operación. Comparación. la operación de complementar se efectúa sobre los ocho bits del acumulador.

con (A) = B6H y (C)=63H 10110110 (A) B6H ∧ 01100011 (C) 63H 00100010 (A) 22H ANA M (A) ←(A) ∧ [(H)(L)] Ejecuta la operación AND entre el acumulador y el contenido de la posición de memoria apuntada por el registro par HL. ANI dato (A) ←(A) ∧ (dato) Realiza una función AND entre el segundo byte de la instrucción y el contenido del acumulador. mientras que los restantes permanecen inalterables. Si es necesario borrar los bit 7 y 0 del A. la memoria del sistema. el resultado se deposita en el acumulador. basta con usar un byte de máscara (7EH) y ejecutar la instrucción ANI 7EH. Al igual que en el caso anterior el segundo operando puede ser un registro de 8 bits. Ejemplo: ANA C. el resultado se carga en el acumulador. el resultado se deposita en el acumulador. ORA r (A)←(A) ∨ ( r) Realiza la función OR bit a bit entre el acumulador y el registro especificado.Introducción a la Programación del 8085A 220 Realiza la función AND bit a bit entre el acumulador y el registro especificado. ORA M y ORI dato. o un dato contenido en el segundo byte de la instrucción OR inmediato (ORI). Por ejemplo. La utilidad de las instrucciones que ejecutan operaciones lógicas puede no ser obvia. disponibles en el grupo de instrucciones lógicas del microprocesador 8085A. El resultado se almacena en el acumulador. Estas instrucciones afectan todas las banderas: CY y AC son puestas a cero. la función AND permite poner en cero algunos bits específicos de una palabra. 10101001 (A) A9H ∧ 01111110 (C) 7EH ← máscara 00101000 (A) 28H xxxxxxxx (A) xxH ∧ 01111110 (C) 7EH ← máscara 0xxxxxx0 Instrucciones que ejecutan la función OR Las instrucciones ORA r. ejecutan la función OR entre el acumulador y el operando especificado. Ejemplo: ORA B. con (A) = B6H y (B)=63H .

Para convertir un carácter ASCII (37H) a su equivalente decimal (07H). ejecutando ORI 30H. basta con poner a cero los bits A4-6 del valor ASCII. debe ser convertido a ASCII y escrito en el puerto de salida 90H. el resultado se carga en el acumulador. El programa debe leer el puerto de entrada. la ejecución de la instrucción ORI 70H fuerza a uno el bit A6 del registro acumulador. Como ejemplo. convertir el carácter ASCII a BCD y almacenarlo en la posición de memoria 0200H. el resultado se almacena en el acumulador. Esto se logra con la instrucción AND 0FH. Para revertir el proceso. Considere que el contenido del registro acumulador es A9H y se requiere detectar el estado del bit A3. Convertir en ascii . Ejemplo 6. Una aplicación inmediata de la función OR es poner a uno un bit de una palabra de control. Obtener carácter ASCII .d 30h 90h . in ani sta mov ori out hlt 80h 0fh 0200h a. se retornan a uno el mismo grupo de bits. Almacenar en memoria . Convertir a BCD . Cargar en a el número decimal . El programa que se ofrece a continuación muestra el uso de las instrucciones lógicas AND y OR para la conversión de números codificados en ASCII al sistema BCD y viceversa. Escribir a puerto En aplicaciones de control es a menudo necesario probar el estado lógico de uno o más bits de un registro o de una posición de memoria determinada. ORI dato (A) ←(A) ∨ (dato) Produce la ejecución de una función OR entre el segundo byte de la instrucción y el contenido del acumulador. 10100001 (A) A9H ∧ 00001000 (C) 08H ← máscara 10101001 (A) A9H ∧ 00001000 (C) 08H ← máscara . El dígito decimal en D.Introducción a la Programación del 8085A 221 10110110 (A) B6H ∨ 01100011 (B) 63H 11110111 (A) F7H ORA M (A) ←(A) ∨ [(H)(L)] Ejecuta la operación OR entre el registro A y el contenido de la posición de memoria apuntada por el registro par HL. manteniendo el estado lógico de los demás bits.2 El puerto de entrada 80H contiene el código ASCII de un digito decimal y en el registro D está almacenado el equivalente binario de un número decimal.

con (A) = B6H y (B)=63H . se obtiene como resultado un cero. Esto indica que si el dato en el acumulador coincide con el operando de la instrucción OR exclusivo.3 El programa detecta el estado del bit 4 de la posición de memoria con dirección 300H. se cargarán ceros en todos los bits de la posición 0500H. Si está en uno.Actualiza indicador Instrucciones que ejecutan la función OR EXCLUSIVO El μP 8085A permite realizar las funciones: XRA r. para ocultar todos los bits del A excepto el correspondiente a la prueba. todos a uno . La ejecución de cualquiera de estas instrucciones ponen a cero las banderas de acarreo y de acarreo auxiliar. mientras que entre bits distintos se produce uno. se coloca la máscara. Al ejecutar la instrucción OR exclusivo entre bits de igual valor lógico. Palabra de prueba al a . Ejemplo 6.0300h a. Si cero. el resto de los bits de condiciones son afectados según el resultado de la operación lógica. El resultado de la prueba se indica mediante la bandera de cero (Z). 08H en este caso. Si por el contrario el bit 4 es cero. Prueba de a4 .3 ilustra un método para realizar prueba de bits. Si uno. el resultado se deposita en el acumulador. el registro acumulador es cargado con cero y la bandera de cero (Z) es activada a uno. la cual se activará sólo en el caso que A3 sea igual a cero.Introducción a la Programación del 8085A 222 00000000 (A) 00H (Z) = 1 00001000 (A) 08H (Z) = 0 La forma más directa y sencilla de realizar esta tarea es usar un byte de mascara específico. XRA r (A)←(A) ∀ (r) La función OR exclusivo se ejecuta entre el acumulador y el registro r. lxi mov ani jz ani jmp ori sta hlt h. XRA M y XRI dato. El ejemplo 6. Apunta la dirección del bit a probar .m 10h uno 00h mem ffh 0500h . Ejecutando la instrucción ANI 08H. todos a cero uno: mem: . Ejemplo: XRA B. se pondrán a uno todos los bits de la misma celda de la memoria.

a 0ah b. Esta operación puede ser realizada por la instrucción de dos bytes MVI A. el resultado se carga en el A.a c difer . Si los bytes comparados difieren. 1011 1110 (A) BEH ∀ 1111 0000 (B) F0H 0100 1110 (A) 4EH El ejemplo 6. Para el programador. se hace uno el bit 5 de la posición de memoria 3200H.. es una práctica habitual tener que cargar el registro acumulador con cero. lda mov in mov xra jnz 3000h c.0. la operación OR exclusivo puede usarse para complementar bits. En forma similar a como se usó la función AND para poner bits a cero y la OR para hacerlos uno. Si son iguales. la cual además torna a cero las banderas de acarreo (CY) y acarreo auxiliar (AC).4 El programa lee una palabra de control del puerto 0BH y lo compara con una copia del dato almacenada en la dirección 3000H de la memoria.Son diferentes . se actualiza la copia de la palabra de control. Copia de palabra de control en c . (A)←(A) ∀ (dato) XRI dato Ejecuta una función OR exclusivo entre el segundo byte de la instrucción y el contenido del acumulador. Comparar con copia . Ejemplo 6.4 muestra el uso de la función OR exclusivo para prueba de byte. Por ejemplo XRI F0H produce la inversión lógica de los cuatro bits de mayor orden del registro acumulador.Introducción a la Programación del 8085A 223 10110110 (A) B6H ∀ 01100011 (B) 63H 11010101 (A) D5H XRI M (A)←(A) ∀ [(H)(L)] Realiza la operación OR exclusivo entre el contenido de A y el byte en la posición de memoria apuntada por el registro par HL. el resultado se almacena en el acumulador. Una forma más eficiente para iniciar en cero el A es utilizar la instrucción de un bytes XRA A. Leer palabra de control .

Son iguales . Actualizar copia en memoria Observe que la actualización de la palabra de control ocurre únicamente si hubo cambios en ésta. puede ser realizada usando las instrucciones de comparación. (CY)←( CY ) Instrucciones de comparación La instrucción OR exclusivo (XRA) se usó en el ejemplo 6. o con un dato inmediato. CMP r. Si se requiere comparar bytes e indicar si uno es mayor o menor que el otro. descritas a continuación. CMC Solo afecta la bandera de acarreo. y complementar la bandera de acarreo. La comparación de dos valores binarios en términos de sus magnitudes relativas. CMA (A)←( A ) El contenido de acumulador es complementado.Introducción a la Programación del 8085A 224 lda ori sta jmp difer: mov sta fin: hlt 3200h 20h 3200h fin a. CMA. El registro de banderas no es modificado. La comparación consiste en substraer el byte . CMC. no puede usarse XRA. Existe otra instrucción que actúa directamente sobre el bit de acarreo: STC (CY)←1 La bandera de acarreo es puesta a uno.4 para comprobar si dos datos son iguales. Bit 5 a uno . comparan el contenido del acumulador con: el de cualquier registro interno del μP (incluyendo al propio A). las otras permanecen mantienen su valor. CMP M y CPI dato.b 3000h . Instrucciones que realizan complemento Son dos instrucciones de un byte: complementar el acumulador. con el de una posición de memoria.

b 3000h difer: fin: . por la instrucción CMP C.[(H)(L)] (A) . CMP M Si (A) = [(H)(L)] .5 La instrucción de comparación CMP r es utilizada para resolver el problema planteado en el ejemplo anterior. el dato en el acumulador antes de la ejecución de la instrucción.a c difer 3200h 20h 3200h fin a. CMP r Si (A) = (r). lda mov in mov cmp jnz lda ori sta jmp mov sta hlt 3000h c. Z = 1 Si (A) < (r) . Todas las banderas son afectadas. CY= 1. Los valores de las banderas de estado son asignados de acuerdo con el resultado de la comparación realizada.a 0ah b. Es suficiente con sustituir la línea de código XRA C del ejemplo 6. la bandera de cero Z es puesta a 1 Si (A) < (r) el bit de acarreo CY se hace 1. CPI dato Si (A) = (dato). En todas las instrucciones de comparación. CY es 1. permanece invariable. Z=1 Si (A) < (r).4.( r) Ejemplo 6. Los bits Z y CY son afectadas de acuerdo con el resultado de la comparación. (A) .(dato) (A) .Introducción a la Programación del 8085A 225 operando del contenido del acumulador.

Si es < . .7 Si el dato captado por el microprocesador desde el puerto de entrada con dirección 00H. . Almacenar dígito en registro c. . . Ejemplo 6.7. Las instrucciones de comparación pueden usarse para determinar si un número está dentro de un intervalo determinado.a salir m. En caso contrario. Si es <. . Comparar con ascii ‘0’.2000h 00h c. . Leer dígito de puerto de entrada. .6 Para la comparación de la magnitud de dos números se puede usar el siguiente código. Mayor que 50h . . men50: . no es un digito decimal. . se presenta un ejemplo del uso del microprocesador 8085A en la solución de un problema simple de control industrial. cpi 50h jz no50 . . el valor obtenido desde el puerto debe copiarse en el registro E. . El programa del ejemplo 6. . Comparar con ascii ‘9’+1.Introducción a la Programación del 8085A 226 Ejemplo 6. Saltar si distinto a 50h . éste debe almacenarse en la posición de memoria 2000H. Es igual a 50h . no50: jc men50 . corresponde al carácter ASCII de un dígito decimal. . Número decimal a memoria inval: vali : salir: Para concluir la exposición sobre las instrucciones de comparación.a 30h inval 40h vali e. Es menor a 50h . lxi in mov cpi jm cpi jm mov jmp mov hlt h. verifica si un dato obtenido desde un puerto de entrada.a . . Carácter no decimal al registro e. el digito esta entre ‘0’ y ’9’. es un dígito decimal. . . Saltar si menor de 50h .

Si la magnitud de la variable supera un valor de referencia.permiten la conversión de entradas diferenciales. debe generarse una alarma visual. El ADC0804 convierte el voltaje de entrada a un valor digital de 8 bits.11 se observa el símbolo del circuito y las funciones de los terminales. Con entrada .6 mV. Señal DB0-DB7 VI+.11 El convertidor A/D de 8 bits ADC0804. La resolución del CAD es de 19. 6. Las salidas DB0-DB7 son tri. VI- Función Salidas digitales Entradas analógicas CS RD WR INTR AGND VREF CLK Selección De circuito Habilitación de salida Iniciar conversión Fin de conversión Tierra analógica Tensión de referencia Entrada de reloj externo Fig.Introducción a la Programación del 8085A 227 Ejemplo 6. el cual se presenta en un encapsulado de veinte terminales con todas las funciones necesarias para facilitar la conexión al bus de un microprocesador. Fin de conversión A Sensor Amplificador CAD µC 8085 Selección Inicio de conversión Lectura del dato Fig. El conversor de datos usado es el ADCC0804. 6.12 se ofrece un diagrama de bloques del proceso. En la figura 6. Las entradas analógicas VI+ y VI.10 Supervisión de un proceso industrial.8 Un 8085A debe supervisar en forma continua el valor de una variable analógica de un proceso industrial.estados. En la figura 6.

Introducción a la Programación del 8085A

228

no diferencial, el voltaje a convertir se aplica a VI+ y VI- se conecta a la tierra analógica AGND. Con el terminal VREF a circuito abierto, el rango de la señal 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 alimentación 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 señales que intervienen en el proceso de adquisición de datos.
Inicio de conversión Fin de conversión Lectura de datos

CS
WR
INTR RD DB0-7

tc
Fig. 6.12 Diagrama de tiempos del ADC0804.

Dato

Para habilitar al ADC0804, la entrada CS debe estar en cero. Con el dispositivo seleccionado, la aplicación de un pulso de nivel bajo en la entrada WR pone al CAD en operación y la señal INTR cambia a nivel alto. El proceso de conversión propiamente dicho se inicia una vez que las señales CS y WR han regresado al nivel alto. Al finalizar el proceso, INTR vuelve a cero, señalando que puede proceder a leerse el dato habilitando las líneas de salida DB0-DB7 con la aplicación de un comando de lectura en la línea RD . La sección de adquisición de datos y generación 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 líneas de inicio de conversión y de habilitación 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 decodificación parcial situando al ADC0804 en el puerto 04H, y a la señal de fin de conversión ( INTR ) en 00H. El indicador luminoso se conecta a la salida Q de un circuito 74LS74 y se

Introducción a la Programación del 8085A

229

controla aplicando las entradas de selección de puerto ( CS2 y CS3 ) a las líneas asincrónicas de puesta a uno ( PR ) y puesta a cero ( CL ). Una operación de escritura al puerto con dirección 08H apagará al diodo indicador durante la operación normal, mientras que la selección del puerto 0CH, lo iluminará cuando el sistema funcione bajo falla. El contenido del bus de datos durante el acceso a estos dos puertos es irrelevante.

Fig. 6.13 Sección de adquisición de datos e indicación de alarma.

El programa de control se muestra a continuación.
ctrl.: lda mov out out in ani jnz in cmp jc out out in ani jnz in e200h b,a 8 4 0 80h esp 4 b adc 0ch 4 0 80h esp1 4 ; Obtener valor de referencia ; almacenarlo en B. ; Se asegura que el LED esté apagado ; Inicio de la conversión ; Se lee la línea INTR. ; Prueba de INTR ; Esperar hasta cuando sea cero. ; Leer resultado de la conversión. ; Comparar con la referencia. ; Si es menor, adquirir nuevo valor ; Es mayor, activar led ; Adquirir variable y esperar ; que disminuya por debajo del ; valor de referencia.

adc: esp:

adc1 esp1:

Introducción a la Programación del 8085A

230

cmp jnc jmp

b adc1 ctrl

; Reiniciar proceso.

Al inicio de la ejecución, se desactiva el diodo luminoso. A continuación una operación de escritura en el puerto 4 da inicio al proceso de conversión. Para verificar el fin de la conversión, se examina continuamente el contenido del puerto 0 hasta cuando el bit D7 sea cero. En este momento se lee el dato de salida del CAD. Este valor se compara con la referencia. Si es menor, se continúa adquiriendo valores de la variable. Cuando la magnitud de la señal de entrada supera el valor de referencia se activa la alarma. Con el diodo iluminado, se adquieren nuevos valores hasta cuando la magnitud de la tensión de entrada cae bajo el nivel de referencia. Se apaga el diodo y de inicia de nuevo el proceso de supervisión. El programa del ejemplo 6.8 se mantiene en un lazo sin fin supervisando continuamente la variable del proceso. La redundancia de código mostrada por el programa se corregirá cuando se trate el tópico de subrutinas. También puede ordenarse el apagado del diodo, aun cuando esté desactivado, al inicio del lazo de adquisición y de este modo no será necesario lazos separados de adquisición para condiciones normal y bajo falla. Observe que las puertas OR en la figura 6.13 pueden suprimirse si en el sistema no existe un puerto 0 de salida ni puertos 8 y 0CH de entrada. Esto debido a que el 74LS139 selecciona el puerto sin discriminar si es de entrada o salida.

Fig. 6.14 Decodificador de puertos con PLD para la sección de adquisición de datos e indicación de alarma.

Introducción a la Programación del 8085A

231

Como alternativa, en figura 6.14 se muestra el circuito de la figura 6.13 con un decodificador de puertos que realiza una decodificación completa de las direcciones de los puertos y además usa un solo chip. El código a programar en el circuito PAL es el siguiente:
library IEEE; use IEEE.STD_LOGIC_1164.all; entity DECDIR is port ( IOM,RD,A7,A6,A5,A4,A3,A2,A1,A0: CS0, CS1, CS2, CS3: ); end DECDIR;

in STD_LOGIC; out STD_LOGIC

architecture RTL of DECDIR is begin CS0 <= NOT(IOM)OR RD OR A0 OR A1 OR A2 OR A3 OR A4 OR A5 OR A6 OR A7; CS1 <= NOT(IOM) OR A0 OR A1 OR NOT (A2) OR A3 OR A4 OR A5 OR A6 OR A7; CS2<= NOT(IOM)OR NOT(RD) OR A0 OR A1 OR A2 OR NOT(A3) OR A4 OR A5 OR A6 OR A7; CS3<= NOT(IOM)OR NOT(RD) OR A0 OR A1 OR NOT(A2) OR NOT(A3) OR A4 OR A5 OR A6 OR A7; end RTL;

Instrucciones de rotación 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 ejecución solo afecta la bandera de acarreo. (An)←(An+1); (A7)←(A0); (CY) ← (A0)

RRC

La instrucción RRC, desplaza el contenido del A un bit hacia la derecha. El bit menos significativo del A (A0) se transfiere al de mayor peso (A7) y al bit de acarreo, como ilustra la figura 6.15.

CY

A7

A6

A5

A4

A3

A2

A1

A0

Fig 6.15 Rotación del acumulador un bit hacia la derecha

Introducción a la Programación del 8085A

232

RLC

(An+1)←(An); (A0)←(A7); (CY) ← (A7)

Realiza una rotación hacia la izquierda del contenido del acumulador. A7 se transfiere hacia A0 y hacia la bandera de acarreo.

CY

A7

A6

A5

A4

A3

A2

A1

A0

Fig. 6.16 Rotación del acumulador un bit hacia la izquierda

RAR

(An)←(An+1); (CY)←(A0); (A7) ← (CY)

El contenido del acumulador se desplaza un bit hacia la derecha a través del bit de acarreo. El bit A0 pasa a CY, y el bit de acarreo a A7.

CY

A7

A6

A5

A4

A3

A2

A1

A0

Fig. 6.17 Rotación de un bit hacia la derecha a través de la bandera de acarreo.

RAL

(An+1)←(An); (CY)←(A7); (A0) ← (CY)

El byte en el acumulador es desplazado un lugar hacia la izquierda a través del bit de acarreo. El bit A7 ocupa el lugar del CY, y el contenido de la bandera de acarreo se transfiere al bit A0.
A2

CY

A7

A6

A5

A4

A3

A1

A0

Fig. 6.18 Rotación del acumulador un bit hacia la izquierda a través de CY.

Introducción a la Programación del 8085A

233

Ejemplo 6.9 Se requiere empaquetar los nibbles menos significativos de las posiciones de memoria E400H y E4001H en la dirección E500H, como indica la figura 6.19.

Fig. 6.19 Después de ejecutar el programa, el dato en la posición E500H es 92H

lhld mov rlc rlc rlc rlc ani mov mov ani ora sta hlt

e400h a,l

; Se cargan en h y l los datos en memoria ; Se mueve al acumulador el valor en e400h. ; Intercambio de nibbles del acumulador.

f0h b,a a,h 0fh b e500h

; Se pone a cero el nibble de orden menor y ; Se mueve al registro b ; Cargar el a con el dato en e401h ; Se hace cero el nibble de mayor orden. ; Se empaquetan valores ; Resultado a posición e500h.

En este capítulo se ha intentado presentar programas útiles para el desarrollo de aplicaciones prácticas de sistemas empotrados. Sin embargo, esta tarea es obstaculizada por el hecho que aún no se ha presentado el repertorio completo de instrucciones del 8085A. La potencialidad real de algunas instrucciones se revelará a medida que se avance en la exposición. Por ejemplo, las instrucciones de rotación combinadas en un programa con instrucciones aritméticas, permiten realizar operaciones matemáticas diversas, algunas de éstas son: multiplicación, división, cálculo de logaritmos y de funciones trigonométricas. En el siguiente ejercicio se muestra otra aplicación sencilla de las instrucciones de rotación.

Introducción a la Programación del 8085A

234

Ejemplo 6.10 A los terminales del puerto de salida 20H están 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 línea 7 del puerto 40H está en: 0, active 1, active
LED0, LED2, LED4 y LED6 LED1, LED3, LED5 y LED7

c. Si el bit 0 del puerto de entrada 40H esta en cero no debe haber cambios en el estado de los LEDs.

orden:

l1357:

ori out in rrc jnc in rlc jc mvi out jmp mvi out jmp hlt

0ffh 20h 40h orden 40h l1357 a,0aah 20h orden a,55h 20h orden

; Apagar los ocho LEDS ; Obtener permiso para cambios ; Permiso negado ; Obtener patrón de encendido

; P40.7 = 0 >>

LED0, LED2, LED4 y LED6

; P40.7 = 1 >>

LED1, LED3, LED5 y LED7

6.4.3 Instrucciones para manejo de la pila La pila o stack es una zona de almacenamiento cuya presencia es imprescindible en todo computador debido a que es utilizada para asignar niveles de subrutinas y de interrupciones. En algunos microprocesadores, la pila se encuentra en el interior del CPU y en otros, forma parte de la memoria del sistema. Esta área de memoria es una estructura LIFO (Last Input First Output), la cual acumula eventos en forma cronológica. Esto significa que la primera información en entrar al stack ocupara la base, mientras que la más reciente estará en la cima de la pila. En la figura 6.20 se observa un grupo de cilindros apilados. A cada pieza se le asigna un número, según el orden de entrada a la pila. La operación de retirar un elemento del snack, se denomina POP, mientras que la tarea de añadir un cilindro se identifica como PUSH. En el caso de una memoria, un comando POP leerá la pila y un comando PUSH escribirá a la pila.

Introducción a la Programación del 8085A

235

Como indica la figura 6.20, el primer elemento en dejar la pila es el número 6, el cual fue el último cilindro colocado. La zona del stack puede corresponder a un área de memoria física o puede ser establecida por programa. Una pila de hardware ocupa un número determinado de registros de la CPU, lo cual garantiza una velocidad alta de operación pero una capacidad de almacenamiento limitada.
6 5
POP 6 PUSH

6 5 4 3 2 1 4 3 2 1

5 4 3 2 1

Fig. 6.20 Representación conceptual de una memoria con estructura LIFO

La pila programada usa la memoria RWM del µC y está limitada sólo por la capacidad de memoria del sistema. El contenido del registro apuntador de pila indica siempre la dirección 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 información almacenada es realizada en forma automática por el SP. En términos de direcciones de memoria, la pila progresa hacia abajo y el tope de la pila corresponde a la dirección del último elemento en entrar, señalada por el SP. El 8085A usa una pila por programa y la manipulación de la pila se realiza por medio de dos instrucciones especiales. La instrucción PUSH deposita el contenido de un registro par en la parte superior de la pila, mientras que POP lee los dos últimos bytes almacenados en el stack y los transfiere a un registro par. La tabla 6.4 detalla las instrucciones de este grupo. PUSH rp [(SP) - 1] ← (rh); [(SP) - 2] ← (rl); (SP)← (SP) -2

Los datos en el registro par rp son transferidos a la pila, como se indica. El SP es disminuido en dos. PUSH PSW [(SP) - 1] ← (A); [(SP) - 2] ← (PSW); (SP)← (SP) - 2

El contenido del A es movido a la posición de memoria inmediatamente inferior a la apuntada por el SP. Las banderas de estados son empaquetadas como una

Introducción a la Programación del 8085A

236

palabra de estados denominada PSW (Program Status Word), la cual es copiada a la posición cuya dirección es menor en dos unidades que el contenido del SP.
Tabla. 6.4 Instrucciones de salto y de manejo de subrutinas

Instrucciones para manejo de la pila
(CY) ← [(SP)]0 (P) ← [(SP)]2 (AC) ← [(SP)]4 (Z) ← [(SP)]6 (S) ← [(SP)]7 (A) ← [(SP+1)] (SP) ← (SP) + 2

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 (rh) ← [(SP)] (rh) ← [(SP+1)] (SP)← (SP) +2

XTHL

(L) ← [(SP)] (H) ← [(SP)+1]

POP rp

SPHL

(SP) ← (H) (L)

POP rp

(rh) ← [(SP)]; (rh) ← [(SP+1)]; (SP)← (SP) +2 Los datos en el registro par se transfieren a la pila, como indica la secuencia.

POP PSW

(banderas) ← [(SP)]; (A) ← [(SP+1)]; (SP) ← (SP) + 2

Se restituyen las banderas desde la dirección de memoria apuntada por el SP. El registro A es cargado con el dato en la posición de memoria con dirección mayor en uno a la indicada por el SP. El SP es incrementado en dos. XTHL (L) ↔ [(SP)]; (H) ↔ [(SP)+1]

El byte depositado en el registro L es intercambiado con el contenido de la posición cuya dirección señala el SP. El dato en el registro H se intercambia con el byte almacenado en la posición de memoria con dirección es mayor en uno que la indicada por el SP. SPHL (SP) ← (H) (L) El contenido del registro par HL es copiado en el apuntador de pila.

Introducción a la Programación del 8085A

237

El manejo de la pila es sencillo. El programador solo debe asegurarse que extrae la información desde el STACK en el orden correcto. También 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 instrucción del programa. En el ejemplo 6.11 se muestra lo que no debe hacerse al extraer datos desde la pila. Ejemplo 6.11

lxi push push pop pop hlt

sp,3000h b d b d

; Asignar el tope de la pila ; Cargar bc en el stack ; Transferir de a la pila ; Recuperar bc del stack. ; Restaurar de desde la pila

En el programa del ejemplo 6.1 no se consideró que el contenido del registro par BC se trasladó a la pila antes que el del registro DE. El intento de recuperar primero a BC y luego a DE producirá un error de lógica durante la ejecución del programa. A continuación se describe la situación. • LXI SP,3000H
PILA
X X

B

C

63
D

85
E

X X X X X
X

2FFCH 2FFDH 2FFEH 2FFFH 3000H

41
SP

24 3000

Fig. 6.21 Se carga el apuntador de pila con la dirección 3000H

Introducción a la Programación del 8085A

238

• PUSH B
PILA
X X

B

C

63
D

85
E

X X 85 63 X
X

2FFDH 2FFEH 2FFFH 3000H

41
SP

24 2FFE

Fig. 6.22 El contenido del registro par BC se almacena en la pila

• PUSH D
PILA
X X

B

C

24 41 85 63 X
X

2FFCH 2FFDH 2FFEH 2FFFH 3000H

63
D

85
E

41
SP

24 2FFC

Fig. 6.23 El dato de 16 bits en DE se mueve al stack

Introducción a la Programación del 8085A

239

• POP B
PILA
X X

B

C

41
D

24
E

24 41 85 63 X
X

2FFCH 2FFDH 2FFEH 2FFFH 3000H

41
SP

24 2FFE

Fig. 6.24El contenido de la pila se transfiere al registro par BC

• POP B
PILA
X X

B

C

41
D

24
E

24 41 85 63 X
X

2FFCH 2FFDH 2FFEH 2FFFH 3000H

63
SP

85 3000

Fig. 6.25 El contenido de la pila se mueve al registro DE

Observe que como resultado de la ejecución del programa, se intercambiaron los contenidos de los registros pares. Para mantener intacta la información en los registros BC y DE, primero se debió rescatar DE, el último que se almacenó. Si se hubiese deseado intercambiar el contenido de los registros pares, el procedimiento empleado en el ejemplo 6.9 puede ser utilizado.

Introducción a la Programación del 8085A

240

La pilas un área ideal para almacenamiento temporal y fácil recuperación de variables de un programa. En el siguiente ejemplo se usa el stack para intercambiar datos de dos posiciones de la memoria RWM. Ejemplo 6.12 Utilizando la pila como medio de almacenamiento temporal, intercambie los contenidos de las direcciones de memoria 2020H y 2021H
lxi lda push lda sta pop sta hlt sp,3000h 2020h psw 2021h 2020h psw 2021h ; Cargar en el a el dato en 2000h ; Mover el byte en a hacia la pila ; Cargar en a el dato en 3000h ; Mover el a a la posición 2000h ; Recuperar dato de la pila ; Copiarlo en 3000h

6.4.4 Grupo de instrucciones para bifurcaciones A menos que una instrucción de este grupo sea ejecutada, el flujo normal de un programa consistirá en la ejecución de las instrucciones almacenadas en secuencia en la memoria. La tabla 6.5 presenta las instrucciones de este tipo. El 8085A tiene instrucciones que permiten cambiar el contenido del contador de programa, de modo que la próxima instrucción sea buscada en una dirección de memoria especificada, en lugar de en la posición siguiente. La bifurcación del programa puede ser originada por un salto (JUMP) o una llamada a subrutina (CALL). La alteración de la secuencia de ejecución puede ser incondicional, cuando al ejecutarse la instrucción se modifica inmediatamente el contenido del contador de programa; o condicional, la cual requiere la satisfacción de una condición de bandera antes de producirse la ruptura de la secuencia.

Instrucciones que producen salto Las instrucciones de este grupo son bien conocidas por lector, debido a que fueron introducidas el capitulo 3 como soporte lógico del µP hipotético. Por tal razón, han sido usadas en los programas de ejemplos anteriores. Para mantener la secuencia de presentación del repertorio de instrucciones del 8085A, se trataran en forma breve en esta sección. Las instrucciones de salto ocupan tres bytes de la memoria del sistema. El primero corresponde al código de operación y los dos siguientes especifican la dirección de memoria hacia la cual se ejecutará el salto.

Jx dirección IF x (PC) ←(byte3) (byte2) Se produce un salto a la dirección especificada por los bytes 3 y 3 de la instrucción.6 Instrucciones de salto condicionales Instrucción Salto si la bandera de: JZ JNZ JC JNC JPE JPO JM JP Condición cero es 1 cero es 0 acarreo es 1 acarreo es 0 paridad es 1 paridad es 0 signo es 1 signo es 0 . Los saltos condicionales son: Tabla.5 Instrucciones de salto y de manejo de subrutinas Instrucciones para bifurcaciones (PCL) ← [(SP)] (PCH) ← [(SP) + 1] (SP)←(SP) + 2 Si x es verdad (PCL) ← [(SP)] (PCH) ← [(SP) + 1] (SP)←(SP) + 2 [(SP)-1]← (PCH) [(SP)-2]← (PCL) (SP) ← (SP) -2 (PC) ← 8*n (PCL)← (L) (PCH)← (H) JMP dirección (PC)←(byte3) (byte2) RET Jx dirección Si x es verdad (PC)←(byte3) (byte2) [(SP)-1]← (PCH) [(SP)-2]← (PCL) (SP)←(SP) -2 (PC)←(byte3) (byte2) Si x es verdad [(SP)-1]← (PCH) [(SP)-2]← (PCL) (SP)←(SP) . 6.Introducción a la Programación del 8085A 241 Tabla. los cuales prueban el estado de una bandera y el salto se produce únicamente si la bandera es uno o si es cero. 6.2 (PC)←(byte3) (byte2) Rx CALL dirección RST n Cx dirección PCHL JMP dirección (PC)←(byte3) (byte2) Realiza un salto incondicional a la dirección especificada por los bytes 2 y 3 de la instrucción. si se satisface la condición especificada. Hay varios tipos de saltos condicionales.

o una operación de división. La llamada a la subrutina es realizada usando una instrucción CALL dirección o Cx dirección. se ejecuta un salto hacia la posición de memoria cuya dirección es indicada por el operando de la instrucción. . (SP)←(SP) -2 (PC)←(byte3) (byte2) CALL dirección La dirección de la instrucción siguiente a CALL es transferida a la pila y el SP es disminuido en dos. En una aplicación donde se realice control de tiempo es usual tener que generar retardos de diferente duración en varios puntos de un programa y es posible que un programa deba ejecutar en forma repetida operaciones de división. Cx dirección IF x (pila)← (PC). Una forma de cumplir con estas tareas consiste repetir las líneas de código tantas veces como sea necesario. (SP)←(SP) -2 (PC)←(byte3) (byte2) Si se satisface la condición.Introducción a la Programación del 8085A 242 El estado de las banderas se modifica por la ejecución de una instrucción aritmética o lógica. no es posible programar las líneas: TIME n DIV B . Instrucciones para manejo de subrutinas El microprocesador 8085A no tiene instrucciones directas para realizar algunas operaciones de uso común en ciertas aplicaciones. se realiza la llamada a subrutina. La repetición de líneas de código. Retardo de n milisegundos . debido a que existe redundancia en el código objeto resultante. Una subrutina es identificada por la dirección (etiqueta) de memoria donde se encuentra la primera instrucción. [(SP)-2]← (PCL). [(SP)-1]← (PCH). el programador debe especificar una secuencia de instrucciones que realice la tarea. El programador debe asegurarse que la instrucción de la cual depende el salto afecte la bandera. Una solución más eficiente y que permite un ahorro de memoria. es codificar la rutina de retardo o de división como una subrutina. A continuación. y que no sea modifica por instrucciones subsecuentes. Este término identifica a una secuencia de instrucciones que realiza una tarea específica. En caso contrario se ejecuta la siguiente instrucción. (A) ← (B) ÷ (A) Cuando se requiere realizar un retardo por programa. conlleva un desperdicio de la memoria del sistema. Por ejemplo.

27 se observa el estado cronológico de la pila durante el proceso. (SP)←(SP) + 2 Si la condición x es cierta. El apuntador de pila es incrementado en dos. Una de las funciones de la pila de memoria es almacenar la dirección de la próxima instrucción a ejecutarse. y en la figura 6. Rx IF x (PC) ← (pila) ← [(SP) + 1]. 6. SP)←(SP) + 2 Los contenidos de las direcciones de memoria apuntada por el SP y la inmediatamente superior son cargadas en el contador de programa. También se indica el contenido del contador de programa y del apuntador de stack.26 Secuencia de llamada a subrutina y retorno al programa principal . De otra manera se ejecuta la instrucción siguiente. se realiza el retorno. Este procedimiento es automático. como indica la secuencia. después que se produce una llamada a subrutina. (PCH) ← [(SP) + 1]. En la figura 6. La instrucción CALL introduce la dirección de retorno en el stack.26 se muestra como se altera el flujo de un programa durante la ejecución de una subrutina. mientras que RET la extrae de la pila. o una de sus variantes.Introducción a la Programación del 8085A 243 RET (PCL) ← [(SP)]. Programa principal 1001H 1002H 1003H 1004H 1007H ---- ------CALL 2000H Subrutina 1ra instrucción 2000H --------RET ------- Fig. de modo que la última línea de código de toda subrutina debe ser una instrucción de retorno RET.

27 Contenido de la pila durante el llamado a subrutina .Introducción a la Programación del 8085A 244 • Antes de ejecutar CALL 2000H X PC 1004H SP 3000H X X X 3000H Pila • Después de ejecutar CALL 2000H PC 2000H SP 2FFEH 07 10 X X 3000H Pila • Después de ejecutar RET PC 1007H SP 3000H 07 10 X X 3000H Pila Fig. 6.

28 Desde el programa principal se llama a la subrutina 1. En ese momento. La dirección de retorno de cada subprograma se almacena ordenadamente en la pila. una instrucción RET produce el retorno del control a la instrucción siguiente a la llamada CALL en el programa principal. el control del programa pasa a la dirección 2000H donde se encuentra la primera instrucción del subprograma. ésta llama a la subrutina 2. 6. La figura 6. 6. previamente llamada desde el programa principal. • Antes de ejecutar CALL 1200H X PC 1000H SP 3000H X X X 3000H Pila Fig.28 ilustra el proceso usando dos subrutinas. y así sucesivamente. Al finalizar éste. puede presentarse el caso donde una subrutina.Introducción a la Programación del 8085A 245 El programa principal se ejecuta en secuencia hasta cuando ocurre la llamada a subrutina CALL 2000H. Cuado se ejecuta un programa.29 Estado de la pila antes de la llamada a la subrutina 1 . ésta de una tercera. Programa principal ---- Subrutina 1 1ra instrucción 1200H ------1000H 1003H CALL 1200H ----CALL 1300H --RET 1210H 1213H Subrutina 2 1ra instrucción 1300H ------- --------RET Fig. requiera el servicio de una segunda subrutina. Esta situación conoce como anidamiento de subrutinas.

Introducción a la Programación del 8085A 246 • Después de ejecutar CALL 1200H PC 1200H 03 2FFEH 2FFFH 3000H SP 2FFEH 10 X X • Inmediatamente antes de ejecutar CALL 1300H PC 2010H Pila 03 2FFEH 2FFFH 3000H SP 2FFEH 10 X X • Inmediatamente después de ejecutar CALL 1300H Pila 13 2FFCH 2FFDH 2FFEH 2FFFH 3000H 12 03 PC 1300H SP 2FFCH 10 X X • Inmediatamente después del primer RET Pila 13 2FFCH 2FFDH 2FFEH 2FFFH 3000H 12 03 PC 1213H SP 2FFEH 10 X X Pila • Inmediatamente después del segundo RET 07 2FFCH 2FFDH 2FFEH 2FFFH 3000H 10 X PC 1007H SP 3000H X X X Fig. 6.30 Estado de la pila durante un anidamiento de subrutinas. Pila .

Generalmente estos datos se transfieren desde el programa principal. Los datos también pueden obtenerse desde posiciones de memoria previamente reservadas por el programa. La transferencia puede realizarse por medio de: • • • • Registros del microprocesador. se requiere que el programador le suministre los datos o parámetros necesarios. Posiciones reservadas de memoria. Si el número de parámetros que deben ser transferidos es pequeño. y una vez ejecutada la subrutina entregará resultados hacia el programa principal. Cuando es necesario suministrar a una subrutina una gran cantidad de parámetros. Más bien. estos pueden residir en la memoria en forma de tabla de datos. por ejemplo dos operandos para una rutina de multiplicación. se usan con este propósito. La pila. y luego se realiza la llamada a subrutina. El producto puede volver al programa principal usando uno de los mismos registros. las instrucciones para la conversión de datos. Tabla de datos. Estos se cargan con el multiplicando y el multiplicador. en forma similar a cuando se usan los registros internos del µP. El programa principal realiza dos llamadas a esta subrutina.13 El programa que se presenta a continuación realiza la misma función que el mostrado en el ejemplo 6. el uso de la pila tiene la ventaja que la subrutina es independiente de posiciones específicas de memoria. El hecho que el stack contenga la dirección de retorno al programa principal. este método no es apropiado. Desde el programa principal se transferirá únicamente la dirección 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. han sido codificadas como una subrutina denominada ADC.8. para la lectura de las salidas del convertidor analógico-digital y para la comparación del dato obtenido con la referencia. Las instrucciones de carga de datos PUSH y recuperación de información POP. una en operación normal y la otra cuando ocurre una falla. . Si los operandos superan el número de registros disponibles. no representa problema alguno. pueden utilizarse los registros internos. En este caso.Introducción a la Programación del 8085A 247 Para que una subrutina realice la tarea para la cual fue escrita. Ejemplo 6. Los resultados de la ejecución de la subrutina son depositados también en celdas de memoria previamente definidas.

Inicio de la conversión esp: in 00h .1.---------------------------------------------------------------------------------. Al superarse el umbral. pero solo ocupa un byte de memoria. Programa principal . Comparar con la referencia. se activa el indicador luminoso y se inicia un nuevo proceso de adquisición y comparación de datos. Esta instrucción está destinada a ser usada durante el proceso de interrupción del µP. Subrutina de adquisición de datos . cmp b . (pila) ← (PC). . Obtener valor de referencia mov a. La próxima instrucción del programa es buscada en la posición de memoria cuya dirección es el resultado de multiplicar por ocho el operando de la instrucción. Se lee la línea intr. En el capítulo 8 se describirá como usar esta instrucción durante una operación de interrupción. Cuando un dispositivo externo interrumpe al procesador activando la línea INTR. Reiniciar proceso. Se inicia el apuntador de pila ctrl: lda e200h . en condiciones normales de operación. en lugar de tres bytes.Introducción a la Programación del 8085A 248 .---------------------------------------------------------------------------------adc: out 04h . se lee la variable supervisada hasta que aumente sobre el punto de equilibrio. ani 80h .----------------------------------------------------------------------------------.tope . Generar condición de alarma may: call adc . ésta es en realidad una instrucción de interrupción. Adquirir hasta que la variable supere jc men .7 El contenido del contador de programa es cargado en la pila. La siguiente instrucción de este grupo es RST n. El registro SP es decrementado en dos. El valor de referencia out och .b out 08h . (PC) ← 8*n RST n n: 0. se inicia el proceso con la salida de alarma desactivada. Al regresar la variable a un valor permitido. Esperar hasta cuando sea cero. de falla jmp ctrl . hasta cuando finalice la situación de alarma. Es equivalente a una llamada CALL dirección. Prueba de INTR jnz esp . Adquirir hasta que cese la situación jnc may .2….-----------------------------------------------------------------------------------lxi sp. el procesador detiene la ejecución del programa y espera que el periférico co- . ret Al inicio de la ejecución del programa. Apagar LED men: call adc . (SP)← (SP) –2. Leer resultado de la conversión. in 04h .

PCHL (PCL)← (L). donde también se deposita el resultado.(CY) (H) (L) ← (H) (L)+ (rh) (rl) . (PCH)← (H) Produce un salto a la posición de memoria cuya dirección es especificada por el contenido del registro par HL 6. 6.(CY) (A) ← (A) . y las de suma y resta están disponibles en el repertorio de instrucciones del µP.Introducción a la Programación del 8085A 249 loque en el bus una instrucción RST n con la dirección de la rutina de servicio de interrupción.[(H)(L)] (A) ← (A) . Las instrucciones de este grupo ejecutan operaciones con registros. Para realizar cualquier otra operación matemática. La mayoría de las instrucciones aritméticas afectan las banderas.[(H)(L)] .(1) (A)←(A) + ( r) (A) ←(A) + [(H)(L)] (A) ← (A) + (dato) (A)←(A)+ (r) + (CY) ADC M ACI dato DAA SUB r SUB M SUI dato SBB r SBB M SBI dato DAD rP (A)←(A)+ [(H)(L)]+(CY) (A) ← (A) + (dato) +(CY) Ajuste Decimal del A (A)←(A) . debe escribirse una rutina usando las instrucciones de suma y resta y la capacidad de rotación del registro acumulador.( r) (A) ←(A) .(1) [(H)(L)] ← [(H)(L)] . sustracción. estando siempre uno de los operandos en el acumulador.(r) .4.5 Grupo de instrucciones aritméticas La mayoría de las tareas de cómputo realizadas por el 8085A exigen la ejecución de operaciones aritméticas como suma. Tabla.(dato) .7 Grupo de instrucciones aritméticas Instrucciones aritméticas INR r INR M DCR r DCR M INX rP DCX rP ADD r ADD M ADI dato ADC r (r) ← (r) + (1) [(H)(L)] ← [(H)(L)] + (1) (r) ← (r) . y posiciones de memoria y datos inmediatos de ocho bits. Además para la realización de lazos de programación son necesarias instrucciones de incremento y decremento del contenido de un registro usado como contador. multiplicación y división.(dato) (A) ← (A) . Estas últimas instrucciones.(CY) (A)←(A).(1) (rP) ← (rh) (rl) + (1) (rP) ← (rh) (rl) .

Introducción a la Programación del 8085A 250 Instrucciones de incremento y decremento Las instrucciones que producen el incremento y el decremento en la unidad de un registro o posición de memoria son de uso obligado para el establecimiento de lazos de programación. hasta cuando una condición terminal es alcanzada. (a) (b) Fig. El modo de conteo puede ser . Esta última denominación es debida a que. a) REPEAT-UNTIL b) DO-WHILE La figura 6. de acuerdo con el estado del contador. Una instrucción de salto condicional se encarga de decidir. Éstos permiten ejecutar N veces una secuencia de código especifica. En su forma básica. la realización de una nueva iteración o la salida del bucle.31 muestra los diagramas de flujo de dos formas de realizar un bucle. Como contador puede usarse cualquiera de los registros internos o una posición de memoria. la secuencia de código se ejecuta y luego se examina la condición. 6.31 Modos de establecer lazos de programación. un lazo repite una serie de instrucciones. En cada paso se disminuye o incrementa el contador hasta cuando llegue a cero o a un valor determinado. La estructura lógica de la izquierda se conoce como REPEAT-UNTIL o iteración al menos un paso. tantas veces como indique un contador cargado antes de iniciar la iteración.

pueden se utilizadas en rutinas aritméticas de precisión múltiple. se utilizan las instrucciones DCR e INR. (r)←(r) . Número de valores a sumar . Dirección inicial bloque a .(1) [(H)(L)] ← [(H)(L)] .(1) Ejemplo 6. Decremento del contador . Una instrucción condicional JNZ garantiza la realización de un nuevo pasa hasta cuando el registro llegue a cero.14 es una muestra de un lazo de programación realizado con estructura lógica al menos un paso. Dirección siguiente de ambos . “ “ “ b . hasta cuando el registro contador llega a cero. Repetir hasta contador igual 0 smem: Al inicio del programa se introducen las direcciones de inicio de ambos bloques de memoria. El diagrama de la estructura REPEAT-UNTIL de la figura 6. El ejemplo 6. Resultado al bloque A . Dato del bloque b al a . bloques . Sumar con dato del bloque a . Al conservar el estado de CY.dirb e.14 La tarea consiste en sumar el contenido de los valores almacenados en dos bloques A y B de la memoria del sistema. usa el modo de conteo hacia abajo. Para disminuir e incrementar un registro de 8 bits o un dato en memoria. momento cuando finaliza el lazo. 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. y el número de elementos de cada bloque.Introducción a la Programación del 8085A 251 ascendente o descendente. El usuario suministra la dirección inicial de cada bloque y el número de valores a sumar. es incrementado en uno. INR r INR M (r)←(r) + (1) [(H)(L)] ← [(H)(L)] + (1) El dato especificado por el operando.35. . El lazo SMEM. se inicia sumando las posiciones correspondientes de ambas áreas.dira b. El programa retorna la suma. lxi lxi mvi ldax add mov inr inr dcr jnz hlt h.a l c e smem .num b m m. en el bloque A.

Número de valores a sumar . salir . pueden usarse registros pares para el control de los pasos. no se ejecutará paso alguno. debe usarse otro método.num+1 e salir b m m. Repetir smem: salir: En este caso la consulta se realiza al inicio del lazo. observe que si carga el valor 1 en el contador. (rp)←(rp) . no afectan las banderas de µP. El uso de registros de 8 bits como contadores. Sumar con dato del bloque a . Bloques . El primer decremento del contador.15 Ejemplo 6. limita el número posible de iteraciones a 256. Estas instrucciones. La solución se muestra en el ejemplo 6. Considere ahora que el programa anterior deba sumar el contenido de un número de posiciones de memoria superior a 256. Resultado al bloque a . Dirección inicial bloque a .(1) (rp)←(rp) + (1) .Introducción a la Programación del 8085A 252 El modo alterno para control de iteración es DO-WHILE o estructura quizás ningún paso. como indica el ejemplo 6.16. Estas son: INX y DCX.31 se observa que la decisión de control del lazo es realizada al inicio del lazo. El 8085A tiene instrucciones para el incremento y decremento de registros pares. INX rp Suma uno al registro par especificado DCX r Substrae la unidad del registro par especificado. debe cargarse el contador con el valor N+1. por lo cual existe la posibilidad que nunca se ejecute la secuencia de código. lo hace cero y la instrucción de salto condicional forzará la salida de la rutina. En casos que sea necesario un número mayor de pasos en un bucle.dirb e. lxi lxi mvi dcr jz ldax add mov inr inr jmp hlt h. Decremento del contador .a l c smem .dira b. De modo que para probar cuando el registro contador llega a cero. por desgracia. por ejemplo 512. Dirección siguiente de ambos . Dato del bloque b al A . Si se usa DO-WHILE para realizar N iteraciones.15 Use una estructura DO-WHILE para resolver el problema planteado en el ejemplo anterior. “ “ “ b . Si contador cero. En la figura 6.

tope . debe sustituirse con FFH.a inx h inx b dcx d .-----------------------------------------------------------------------------------Lxi sp. Para esto se ejecuta una función OR entre ambos bytes del contador. El resultado será cero sólo cuando el contenido de los registros D y E sean ambos cero. Byte bajo del contador al a ora d . No es imprescindible conocer con anterioridad el número de pasos que debe transitar un bucle de programación. Se sumarán 512 valores call smem hlt . el programa debe leer cada posición.---------------------------------------------------------------------------------smem: ldax b add m mov m. Subrutina SMEM . En caso que el dato sea menor que 16.17 Dada la dirección de inicio de una zona de la memoria. La salida o mantenimiento del lazo puede depender de la ocurrencia de un evento y no del estado de un contador.200h .16 Use una estructura REPEAT-UNTIL para sumar los contenidos de las posiciones correspondientes de dos bloques de memoria de 512 bytes. 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. Si el valor en una celda es mayor o igual a 16. Si z=1. La subrutina SMEM realiza la suma y en cada paso comprueba si el contador llegó a cero. debe escribirse el número 20H en la posición de memoria bajo prueba. La dirección inicial de cada área de la memoria es: E200H y E800H . Programa principal .Introducción a la Programación del 8085A 253 Ejemplo 6.e . El registro par DE se usa como contador de las 512 posiciones a sumar.e200h lxi b.---------------------------------------------------------------------------------. Decremento del contador mov a.----------------------------------------------------------------------------------. Se realiza un OR con el byte bajo jnz smem . . El proceso debe culminar cuando el dato leído sea igual a 41H. Ejemplo 6. Se inicia el apuntador de pila lxi h.e800h lxi d.

b inx h mov a.dinicio lxi d.l cmp e jnz llenar mov a.----------------------------------------------------------------------------------.h cmp d jnz llenar ret El programa lee la posición de inicio: DINICIO. y el de posiciones consecutivas.e200 a. Los datos de entrada son la dirección inicial y final de la zona de memoria y el dato a escribir.---------------------------------------------------------------------------------llenar: mov m. Comparar con 16 . se leerán 2048 celdas y se realizarán las sustituciones correspondientes. Si es hallado en la primera celda examinada: E200H. con el valor DATO. .dfinal inx d mvi b.---------------------------------------------------------------------------------. Si menor. El proceso culmina cuando se ha escrito la posición de memoria con dirección DFINAL. escribir 20h .tope . Si 41H está almacenado en la posición con dirección E9FFH. .ffh seguir m. Subrutina LLENAR . Si igual.18 Se requiere llenar un área de memoria con un valor determinado. Ejemplo 6. Programa principal .dato call llenar hlt .20h h prox . Apuntar posición siguiente .Introducción a la Programación del 8085A 254 prox: menor: seguir: salir: lxi mov cpi jz cpi jc mvi jmp mvi inx jmp hlt h. el programa finalizará sin recorrer algún paso.m 41h salir 10h menor m. Leer valor siguiente El número de pasos que cumple el lazo depende de en cual posición se encuentre el patrón 41H. Si mayor o igual. Dirección de inicio en hl . escribir ffh . Mover valor al a . salir . y sustituye su contenido. Comparar con 41h . Se inicia el apuntador de pila lxi h.-----------------------------------------------------------------------------------lxi sp.

(A) ←(A) + (dato) ADI dato Realiza la suma entre el segundo byte de la instrucción y el dato en el A. con (A) = 34H y (C)=76H 00110100 (A) 34H + 01110110 (C) 76H 10101010 (A) AAH ADD M (A) ←(A) + [(H)(L)] Ejecuta la suma entre el acumulador y el contenido de la posición de memoria apuntada por el registro par HL. el resultado se carga en el acumulador. . el acumulador y el bit de acarreo. El resultado se deposita en el acumulador. (A) ←(A) + (dato) + (CY) ACI dato El bit de acarreo y el dato se suman al acumulador. el contenido del registro especificado y la bandera de acarreo. Ejemplo: ADD C.Introducción a la Programación del 8085A 255 Instrucciones de suma ADD r. (A) ←(A) + [(H)(L)] + (CY) ADC M Suma el dato en la posición de memoria. ADD M y ADI dato suman el contenido del A y el operando de referencia. y ACI dato suman el operando y el bit de acarreo al byte en el acumulador. ADC M. Las otras tres instrucciones de suma: ADC r. el resultado se deposita en el acumulador. (A) ← (A) + ( r) + (CY) ADC r Suma el dato en el acumulador. Afectan todas las banderas. ADD r (A)←(A) + ( r) Suma el acumulador y el registro especificado.

19 Dos valores obtenidos desde los puertos de entrada 00H y 04H. Cargar en hl los datos de la suma mov a. Ejemplo 6.19.---------------------------------------------------------------------------------suma: lhld mem . Subrutina SUMA .---------------------------------------------------------------------------------. Las reglas para la suma binaria son como se indica a continuación. 0+0=0 0+1=1 1+0=1 1 + 1 = 0. Programa principal . .20.Introducción a la Programación del 8085A 256 Suma de números binarios La instrucción de suma ADD realiza la operación de adición de dos números de 8 bits. a partir de la dirección MEM. ejecuta la suma de dos números almacenados en posiciones consecutivas de memoria Ejemplo 6. Resultado a memoria ret Observe que los sumandos son pasados a la subrutina desde la memoria y el resultado también es devuelto en la memoria.-----------------------------------------------------------------------------------lxi sp. Para sumar ahora los contenidos de dos posiciones de memoria no consecutivas. Mover dato en h al acumulador add l . pero activa a CY si ocurre desborde desde el bit 7 del acumulador. con acarreo igual a 1 El programa mostrado en el ejemplo 6. sin considerar el estado del bit de acarreo. la cual realiza la suma de los valores en memoria y devuelve el resultado en la posición con dirección MEM+2. El programa debe sumar los números y depositar el resultado en la dirección de memoria RESULT.20 Dos valores están almacenados en las posiciones de memoria no consecutivas MEM1 y MEM2. Sumar con el otro dato en l sta mem+2 . El programa principal llama a una subrutina SUMA. analice el ejemplo 6.----------------------------------------------------------------------------------.tope . . Se inicia el apuntador de pila in 00h sta mem in 04h sta mem+1 call suma hlt .h . son almacenados en posiciones consecutivas de memoria.

6. Subrutina SUMA . resul .tope . Ejemplo 6. Programa principal . BA 0200H 0201H 4E 0200H 0201H 76 A8 00 02 1FFCH 1FFDH 1FFEH 1FFFH 2000H 00 02 1FFCH 1FFDH 1FFEH 1FFFH 2000H pila 94 31 X Antes pila 94 31 X Después Fig.32. Cargar en a sumando 1 add m . La pila de memoria también puede ser utilizada para transferir datos a una subrutina.mem1 . El ejemplo 6.Introducción a la Programación del 8085A 257 . Sumar con el otro operando stax d .---------------------------------------------------------------------------------suma: ldax b .21 ilustra el uso de esta zona de la memoria para el paso de los operandos de una subrutina de suma.-----------------------------------------------------------------------------------lxi sp. call suma hlt . Resultado a memoria ret En este caso las direcciones donde se encuentran los sumandos y donde debe depositarse el resultado. mem2 . En HL dirección del sumando 1 lxi b.----------------------------------------------------------------------------------.21 Escribir un programa que sume la penúltima entrada al stack con la palabra en memoria cuya dirección está en el tope de la pila. Considere que el contenido de la memoria antes de ejecutar el programa es el mostrado en la figura 6. Esta dirección debe contener el resultado de la operación con el byte menos significativo del resultado en la dirección más baja. .32 Contenido de la memoria y de la zona de pila antes y después de ejecutar el programa.---------------------------------------------------------------------------------. Se inicia el apuntador de pila lxi h. En BC dirección del sumando 2 lxi d. En DE dirección del resultado. son pasadas a la subrutina en los registros pares del microprocesador.

los valores pueden ser almacenados en posiciones consecutivas de memoria para estar disponibles para procesamiento posterior.M C M. puede ser conveniente realizarlas directamente como operaciones en BCD.M B M. Se obtiene dirección de sumando 2 . Si se usa un puerto para cada dígito. Sumando 1 a registro BC . Suma de números decimales Los periféricos de entrada al microcomputador no siempre entregan los datos numéricos al computador en código binario o ASCII.Introducción a la Programación del 8085A 258 La operación a realizar es: 00110001 + 01110110 10101000 1 CY 10010100 (3194H) Segunda entrada de la pila 10111010 (76BAH) Contenido de la dirección 201H-200H 01001110 (A84EH) POP POP MOV ADD MOV INX MOV ADC MOV HLT H B A. sin necesidad de utilizar las rutinas de conversión de datos de BCD a binario y de binario a BCD. Un interruptor rotativo (Thumbwheel switch) de 1 polo y 10 posiciones. Aunque el 8085A no tiene instrucciones para ejecutar suma de números decimales. Para realizar este tipo de operación pueden sumarse los valores BCD usando . procesarlos y volverlos a convertir a BCD antes de transferir los resultados. 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. Si el procesamiento numérico de los datos consiste en operaciones aritméticas simples. Dirección de Byte alto de sumando 2 . garantiza que el valor del acarreo desde el bit 7 del acumulador después de la suma de los bytes menos significativos de los sumandos de 16 bits. produce una salida de 4 bits con la información codificada en decimal.A . Se suma al byte alto de sumando 1 y al CY Observe que el uso del la instrucción ADC. por ejemplo.A H A. El procedimiento usual es convertir los datos de entrada a binario natural. Byte alto de sumando 2 al A . Resultado parcial a memoria . En el caso de sistemas que presenten información de salida en indicadores de siete segmentos. Byte bajo de sumando 2 al A . Se suma a byte bajo de sumando 1 . La lectura del puerto transferirá al acumulador el número BCD. los resultados del tratamiento de los datos de entrada deben ser escritos al puerto codificados en BCD.

de modo que el resultado es 11010. se usa la instrucción DAA. Debido a que B es mayor que 9. AC. DAA Ensambla el byte en el acumulador como dos dígitos de cuatro bits codificados en decimal. 1010 + 0000 1011 1 AC PASO 1010 AAH 0110 06H 0000 B0H 2 Si el nibble de orden alto del acumulador es mayor que 9 o la bandera de acarreo es uno. porque ADD considera los valores de entrada y la salida como binarios. si se considera el estado del bit CY. DAA. La suma en decimal de 3410 y 7610 debe ser 11010. Afecta todas las banderas y requiere el uso del bit de acarreo auxiliar. 1011 0000 B0H 0110 0000 60H 0001 0000 1010 + 1 CY La bandera de acarreo está activada a 1 y el dato en el acumulador es 1010. y realizar a continuación un ajuste decimal del resultado en el acumulador.Introducción a la Programación del 8085A 259 la instrucción para suma binaria ADD. con (A) = 3410 y (C)=7610 0011 0100 (A) 34H + 0111 0110 (C) 76H 1010 1010 (A) AAH El resultado de la operación es incorrecto. se suma 6 al acumulador. Si ahora se ejecuta la instrucción de ajuste decimal. Para entender como funciona la instrucción considere la siguiente operación de dos números BCD: ADD C. Como A es mayor que 9. se suma 6 al nibble más significativo del acumulador. con (A) = AAH PASO 1 Si el nibble de orden bajo del acumulador es mayor que 9 o la bandera AC es uno. Para esta última operación. .

es innecesario el paso 2. En realidad conviene realizar un par de observaciones sobre el modo en que el µP realiza las operaciones internas durante la ejecución de DAA. por lo cual se suma 6 al nibble más significativo del registro acumulador. se suma 6 al acumulador. 0000 0000 00H 0000 0110 06H 0000 0110 06H + La bandera de acarreo CY permanece activada. con (A) = 00H (CY) = 1 (AC)=1 PASO 1 Como bandera AC es uno. y el resultado en decimal corresponde al contenido del A. PASO 2 La bandera de acarreo es uno. DAA. con (A) PASO = 0FH 1 1111 AAH 0110 06H 0101 1510 1 AC 0000 + 0000 0001 Como el nibble de orden alto del acumulador es menor que 9 y AC es cero. Para esto suponga que se tiene el valor 00H en el acumulador y uno en el bit de acarreo.Introducción a la Programación del 8085A 260 Considere ahora la suma de los dígitos 710 y 810. con (A) = 0810 y (C)=0710 0000 1000 + 0000 0111 0000 1111 (A) 0FH El resultado de sumar 810 y 710 es 1510. ADD C. DAA. + . Sí ahora se realiza el ajuste decimal del A. 0000 0110 06H 0110 0000 60H 0110 0110 6610 La bandera de acarreo CY se mantiene en uno. como resultado de la suma binaria 87H+79H=100H.

Pero si está en uno como resultado de la suma binaria. de modo que el resultado es 16610. Tenga en cuenta en cuenta que 1710 + 0910 = 2610.22 Deben sumarse dos números decimales de 4 dígitos. resultado de la suma de dos números decimales. Las sumas internas del paso 1 y 2 de DAA. y este se propaga hasta salir del bit A7. el contenido del acumulador se mantiene en 20H. 6.20H. pero no la inicia en cero después de una suma sin acarreo. suponga que se carga en el registro acumulador el valor 20H usando la instrucción MVI A. Durante el paso 2 ocurre algo similar. ocurre un desborde desde el bit A3. ejecutaron la instrucción DAA en forma correcta. el dato en el A después de ejecutar DAA será 2610. puede llevar a uno a CY. La preservación de la bandera CY de la suma binaria. se obtiene como resultado A=20H y la bandera AC se pone a uno. y en la siguiente. los registros A y B contienen los valores decimales: A=1710 y B=0910. pueden afectar la bandera de acarreo. Los 3 bytes del resultado. . y se suman usando ADD B. ninguno de los simuladores del 8085A utilizados por el autor para probar los ejemplos. Los operandos están almacenados en la memoria como indica la figura 6. se cargarán en las 2 posiciones de memoria ocupada por el operando 1. Si por el contrario. si se considera el estado del bit CY. Si a continuación se ejecuta DAA. Se probaron al menos una decena de simuladores. Ejemplo 6.33. Solo ensambla como dos dígitos BCD el byte almacenado en el A. La suma de 06H a los cuatro bits de orden alto del A. la adición interna no la pondrá en cero. Esta es la única instrucción que requiere examinar la bandera de acarreo auxiliar para realizar su función.Introducción a la Programación del 8085A 261 La bandera de acarreo está en 1 y el dato en el acumulador es 6610. efectivamente la bandera CY se activará. Si ahora se realiza un ajuste decimal del A. Por ejemplo. DAA debe ser usada sólo con instrucciones que afecten este bit de estado.33 Contenido de la memoria antes y después de ejecutar el la suma 3748+9567. Es necesario que el lector entienda que la instrucción DAA no convierte el dato en el registro acumulador a números decimales. Como dato curioso. permite realizar operaciones de suma decimal mayores de dos dígitos. Si durante el paso 1. E040H E041H 48 15 E040H E041H E042H 37 33 01 67 95 Antes E050H E051H 67 Después E050H Fig.

Cargar contador de dígitos lxi h. HL apunta a sumando 1 lxi d.a .1 jmp sum . Ajuste decimal mov m. Dos dígitos de sum. probar CY inx h . Continuar operación acarr: rnc . Mover los dos dígitos del resultado a la memoria. 6.e050h . Siguientes dígitos de sum. cargar la siguiente mvi m.----------------------------------------------------------------------------------.34 Resultado de la suma de dos números de 6 dígitos . Resultado parcial a memoria dcr b .Introducción a la Programación del 8085A 262 El procedimiento para realizar la operación y el programa de suma decimal.---------------------------------------------------------------------------------sumdec: ana a . DE apunta a sumando 2 call sumdec . inx h .2 .---------------------------------------------------------------------------------.2 inx d . Bit de acarreo a cero sum: ldax d .-----------------------------------------------------------------------------------lxi sp. mover 1 a la memoria.1 al a adc m . Si CY=1. Sumar a dos dígitos del sum2 daa . Programa principal . Al terminar. Posición de la memoria ret Fig. Subrutina SUMDEC .01 . Contador menos 1 jz acarr . Si existe acarreo desde el bit 2*N. Siguientes dígitos de sum. Realizar la suma hlt . Sumar los dígitos restantes y la bandera de acarreo. se presentan a continuación: Cargar cero en el bit de acarreo. Se inicia el apuntador de pila mvi b.tope . Sumar los dos dígitos menos significativos de los operandos: Realizar el ajuste decimal del resultado. .e040h . Retornar si cy es cero.

. Agregar a suma acumulada . lxi lxi mvi mov add mov inx mov cmp jnz mov cmp jnz mov xra hlt d.23 Escriba un programa de que permita probar el estado de una memoria ROM. usando el método de verificación por suma total.567. Dato en memoria al acumulador . La figura 6. con N igual al valor inicial del contador. Registro par HL . Dirección de la .a h a. debe cargarse 03H en el registro B. La operación de suma no debe considerar el acarreo.34 muestra el contenido de la memoria después de la ejecución de la suma 954. Corresponde a la . Cargar dirección final en HL . Apuntar dirección siguiente .Introducción a la Programación del 8085A 263 La subrutina SUMDEC puede sumar valores decimales de 2N dígitos. Obtener dirección final de la ROM .m b b. Útima posición de la memoria . a pesar que existe una pequeña probabilidad que una combinación de errores en los datos programados hagan que el resultado coincida con la suma total. Suma se inicia en cero . La rutina obtiene la suma total y la compara con el byte almacenado en la posición final de la memoria.d h cont a. Ejemplo 6. Una aplicación de las instrucciones aritméticas en la comprobación del funcionamiento del sistema microcomputador. Mover al a. Es usual que al arrancar un sistema. El código del programa a partir de E000H y el resultado de la operación en E040H-E043H. leer posición siguiente . se grabe en la posición final un valor correspondiente al resultado de sumar los datos de todas las posiciones de la memoria. Una divergencia en los valores comparados. La prueba requiere que en el momento de la programación del chip. Si los datos coinciden. El resultado de la operación se presenta como un valor de 2N+1 dígitos. excepto la que contiene la suma total. La confiabilidad de la prueba es alta. es muy probable que el dispositivo esté en buen estado. indica con certeza que la memoria está dañada. En algunos casos se usa como se usa el complemento a dos de la suma total.0 a. Por ejemplo para 6 cifras.b m . Comprobar si el contenido del .567 + 954. Guardar resultado .e l cont a. Si no esa sí. Poner Z=1 si la ROM está buena cont: El programa coloca en uno la bandera de cero cuando la ROM esté en buen estado. la suma total calculada .dfin h. ejecute unas rutinas de diagnóstico que incluye la prueba de la EPROM.dini b. consiste en la prueba de la memoria EPROM o ROM usando el método de verificación por suma total (checksum).

SBB M. del dato en el acumulador. SBB opera como se indica a continuación: . SUB r (A)←(A) . pero activa el bit de acarreo.(r) Resta el dato en el registro especificado del contenido del acumulador. del contenido del acumulador. (A) ←(A) . Las otras dos instrucciones de resta son: SBB r. Ejemplo: SBB C. en el cual se deposita el resultado. como se muestra a continuación. (A) ←(A) . La operación se realiza sumando al A el complemento a dos del sustraendo.Introducción a la Programación del 8085A 264 Instrucciones de sustracción El 8085A tiene seis instrucciones dedicadas a realizar la operación de resta de números binarios. Afectan todas las banderas. SUB M y SUI dato sustraen el contenido del acumulador y el operando especificado. SBB r (A) ←(A) -(r) . Al incorporar a la operación el bit CY. y SBI dato sustraen el operando y la bandera de acarreo del byte en el A.[(H)(L)] SUB M Ejecuta la sustracción del contenido de la posición de memoria apuntada por el registro par HL.(CY) Sustrae el byte almacenado en el registro especificado y el bit de acarreo. puede ser usado para sustracciones multibyte. La instrucción complementa a CY para usarse como bandera de préstamo. SUB r. con (A) = B4H y (C)=76H 10001001 -76H complemento a 1 del sustraendo + 00000001 10001010 8AH complemento a 2 del sustraendo 10110100 (A) B4H + 10001010 (C) 8AH 00111110 (A) 3EH 1 CY La suma con complemento a dos no afecta el contenido del registro.(dato) SUI dato Resta inmediata del dato especificado del byte en el acumulador.

(CY)=1 00001000 (C) 08H + 00000001 (CY)01H 00001001 (C) 09H 00010000 (A) 10H + 11110111 (CY)F7H complemento a 2 (C+CY) 00000111 (C) 07H SBB agrega la bandera CY al sustraendo. Las reglas de la operación aritmética de substracción son. Para operandos de 8 bits se usa la instrucción SUB o SUI.Introducción a la Programación del 8085A 265 SSB C.(CY) El dato especificado y la bandera de acarreo. obtiene el complemento a 2 del resultado y lo suma al valor en el acumulador.(CY) Resta el byte en la posición de memoria indicada por el registro par HL y el bit de acarreo. (C)=08H. Resta de números binarios La programación de operaciones de sustracción de números binarios. El minuendo y el sustraendo están almacenados en memoria como indica la figura 6.(r) . del valor en el acumulador. SBB M (A) ←(A) . con préstamo igual a 1 1–0 =1 1–1 =0 Ejemplo 6. mientras que para restas de números de varios bytes se recurre a SBB o SBI.24 Escribir una subrutina que realice la resta de dos valores de 32 bits. 0–0=0 0 – 1 = 1. . 2B 4A sustraendo 23 23 1000H 1001H 1002H 1003H 2000H 2001H 2002H 2003H C7 FC 22 23 1000H 1001H 1002H 1003H F2 46 minuendo 46 46 F2 46 46 46 2000H 2001H 2002H 2003H Fig.35 Ubicación en la memoria del minuendo y el sustraendo. SBI dato (A) ←(A) . con (A) = 10H. se realiza en forma similar a como se procede para la suma. son sustraídos del contenido del acumulador.35.(dato) . 6.

1710 61 7810 + 8310 16110 El resultado de la operación a la derecha es 6110 si se descarta el desborde ocurrido en el dígito de las decenas. Resultado parcial a memoria dcr b . 7810 .a . Para obtener este complemento debe formarse el complemento nuevo restando cada dígito del número nueve y sumársele al resultado la unidad. Contador menos 1 rz . Restar sustraendo mov m. 99 .04 .Introducción a la Programación del 8085A 266 . debiéndose sumar el complemento a diez al próximo dígito.tope . Byte siguiente del minuendo jmp resta . Minuendo al A sbb m . Cargar contador de bytes lxi h. En este caso el bit de acarreo en uno indica la ausencia de préstamo desde el sustraendo.---------------------------------------------------------------------------------. Se inicia el apuntador de pila ora a . Esto se debe a que el valor 8310 es el complemento a diez del sustraendo 1710.17 82 + 1 83 sustraendo complemento nueve complemento diez En operaciones con varios dígitos debe considerarse la bandera de préstamo. Continuar operación Un contador cargado por el programa principal. Considere la operación simple de restar el número 1710 de 7810. Resta de números decimales La instrucción de ajuste decimal DAA no funciona sobre el resultado de la resta de dos números decimales. permite variar el número de bytes de los operandos de la sustracción.----------------------------------------------------------------------------------.-----------------------------------------------------------------------------------lxi sp. Realizar operación hlt . Byte siguiente del sustraendo inx d .1000h . Bit de acarreo a cero mvi b. HL apunta a sustraendo lxi d. Si el bit de aca- . Programa principal .---------------------------------------------------------------------------------resta: ldax d . Retornar si z=1 inx h . Subrutina RESTA . DE apunta a minuendo call resta .2000h . de modo que para realizar operaciones de sustracción decimal debe representarse el minuendo como un valor decimal negativo y sumarse al minuendo.

Ejemplo: 982510 . indicando la ocurrencia de préstamo.345210 637310 PASO 1 Obtener el complemento a diez del número 5210 y sumárselo a 2510 01001000 (48H) Complemento diez de 52 + 00100101 (25H) 0←01101101 (6DH) El bit de préstamo es cero PASO 2 Realizar el ajuste decimal del resultado parcial 0110 + 0000 0111 1 AC PASO 3 1101 6DH 0110 06H 0011 7310 Obtener el complemento a nueve del número 3410 y sumárselo a 9810 01100101 (34H) + 10011000 (98H) 0←11111101 (FDH) PASO 4 Realizar el ajuste decimal del resultado 1111 + 0000 0000 1 AC 1101 FDH 0110 06H 0011 1310 0000 + 0110 0110 1 AC 0011 FDH 0000 60H 0011 6310 . debe usarse el complemento a nueve en la siguiente operación.Introducción a la Programación del 8085A 267 rreo tiene un valor cero.

Contador de par de dígitos decimales call rdec hlt . no prestamo. pero si la velocidad de cómputo no es un factor crítico puede ser utilizado. Próximo byte (2 díg. Próximo byte (2 díg. Dirección del minuendo a de mvi b. Se suma el acarreo al a sub m .) del minuendo jmp rep Multiplicación de números binarios El producto de dos números binario sin signo puede obtenerse por medio de dos técnicas: sumas repetidas y sumas y desplazamientos. Subrutina RDEC . HL apunta al sustraendo mov m. Dirección del sustraendo a hl lxi d.---------------------------------------------------------------------------------.tope .n . rep: mvi a.sustr . Disminuir B rz .26 Debe usarse el método de suma repetidas para multiplicar dos números binarios enteros de 8 bits. . Retornar si B es cero inx h . . Suma del complemento al minuendo daa .) del sustraendo inx d .99h . El primer método consiste en sumar el multiplicando tantas veces como indique el multiplicador. Se fija la base de la pila lxi h. Complemento 10 del sustraendo xchg . Ajuste decimal del resultado xchg .minu . Ejemplo 6.a . HL apunta al minuendo add m .. En está última posición se carga el resultado de la operación.Introducción a la Programación del 8085A 268 Ejemplo 6. Programa principal . El operando multiplicador se carga en el registro C y el multiplicando en el registro E. 9910 al acumulador aci 0 . Se inicia el apuntador de pila lxi sp.---------------------------------------------------------------------------------rdec: stc .----------------------------------------------------------------------------------. Resultado a memoria dcr b . El minuendo está almacenado el la dirección de memoria MINU y el sustraendo en SUBST.. Tal procedimiento tiene la desventaja de ser muy lento.25 El programa siguiente usa la subrutina RDEC para restar dos valores decimales de 2*N bits.dpila . Acarreo en uno.-----------------------------------------------------------------------------------lxi sp.

En general. Cuando se programa el algoritmo de multiplicación es más conveniente sumar cada producto parcial al ser formado. La rutina de multiplicación por sumas repetidas fue utilizada para computar el producto 45H*64H = 1AF4H. Las reglas de la multiplicación binaria son como se indica a continuación. Ejemplo: 11001101 (CDH) Multiplicando 11000111 (C7H) Multiplicador 11001101 11001101 11001101 00000000 00000000 00000000 11001101 11001101 1001111101011011 (9F5BH) Resultado de 16 bits La multiplicación de números de 1 byte produce un resultado de 2 bytes. Decremento del multiplicador . Si cero salir. Cada producto intermedio estará desplazado un lugar a la derecha con respecto al inmediatamente inferior. Resultado bajo a cero .0 h. el producto correspondiente es igual al multiplicando.125 MHz. . el número de bits del resultado es igual a la suma del número de bits de los operandos. esto representa un tiempo de 0. El tiempo de cómputo del programa varía con el valor del multiplicador. En caso que el bit sea cero.l d. La técnica de sumas y desplazamiento para multiplicar es mucho más rápida y se realiza en forma similar a como se obtiene un producto usando lápiz y papel. 0*0=0 0*1=0 1*0 =0 1*1 =1 El producto final de la operación es la suma de una serie de productos parciales.Introducción a la Programación del 8085A 269 mult: mvi mov mov dad dcr jnz hlt l. A una frecuencia de 3.7 mS. en vez de totalizarlos todos al final como se realiza en forma manual. Multiplicando alto en cero . Existe un resultado parcial por cada bit del multiplicador. De modo que al multiplicar un valor de 8 bits por uno de 16 bits se obtendrá un producto de 24 bits. Si un dígito del multiplicador es igual a uno. Suma multiplicando a resultado . Resultado alto a cero . el producto parcial será cero.h d c mult . requiriéndose 2417 estados para completar la operación.

originalmente en L. Si el bit 7 de H es uno. se desplaza un lugar a la izquierda produciendo el mismo efecto que si cada producto intermedio hubiese sido desplazado un lugar a la derecha con respecto al de abajo. Se carga cero en byte bajo del resultado. sumar multiplicando a resultado . evitando la suma de los productos intermedios en cero. Multiplicador. salir mul: nsu: Para probar cada bit del multiplicador. mov mvi mov mvi dad jnc dad dcr jnz hlt h.l b. . en contraposición a como se realiza con lápiz y papel. El producto resultante se carga en el registro par HL.0 d. Ejemplo 6. Multiplicador al registro h .c l. Contador de bits . Si es 1. El µP 8085A invirtió 317 estados en calcular el producto 45H*64H = 1AF4H.no sumar multiplicando a resultado .27 Escribir un programa para multiplicar dos valores binarios enteros de 8 bits. Cada ejecución de esta instrucción tiene doble efecto. Byte alto del multiplicando a cero . tal dependencia no es significativa.28 presenta la lista de instrucciones de un programa que ejecuta una multiplicación binaria con resultado de 24 bits. Bit msb del multiplicador al carry. si b cero. Antes de sumar un producto parcial. procesar próximo bit del . lo cual equivale a 0. . . éste se carga en el registro H y se utiliza la instrucción DAD H para rotar el registro HL. detectándose un bit uno del multiplicador. Para culminar el tema de multiplicación binaria de enteros sin signo. Si es 0. Se supone que el registro C contiene el operando multiplicador y el E el multiplicando. el ejemplo 6. Aunque el tiempo necesario para completar una operación de multiplicación varía con el valor del multiplicador. debido a que solo se requiere realizar una suma (7 estados) por cada bit del multiplicador en uno.1 mS.8 h nsu d b mul . a medida que los bits del operando multiplicador (en H) van siendo procesados.Introducción a la Programación del 8085A 270 Para simplificar el programa se forman los productos parciales desde abajo hacia arriba. lo cual es equivalente a procesar los bits del multiplicador de izquierda a derecha. Si b es no cero. el cual progresivamente ocupa los 16 bits de HL. ocurrirá un desborde y la bandera de acarreo se pone en uno. . El segundo efecto de la instrucción es que produce el desplazamiento hacia la izquierda del producto parcial. La prueba posterior del bit de acarreo indica si debe sumarse el producto parcial. Disminuir contador de bits.

sumar multiplicando . Si B es no cero. sumar CY al a . mul168: mov mvi lxi dad ral jnc dad aci dcr jnz mov ret a. próximo bit . Ejemplo: 1001 Cociente Divisor 10010 10100101 Dividendo 10010 000101 00000 001010 00000 010101 10010 00011 Residuo El resultado de la operación es 1001B (09H) y el residuo 11B (03H). Por ejemplo. considere la división A5H ÷ 12H. Cargar bit del multiplicador en CY . El byte más significativo del producto se carga en C y los otros dos bytes en HL.Introducción a la Programación del 8085A 271 Ejemplo 6. Si hay desborde. Multiplicador al registro a .8 h. Desplazar resultado a la izquierda . Disminuir b . el producto parcial se desplaza desde el registro HL hacia el acumulador a través del bit de acarreo. División de números binarios La operación de división se ejecuta usando las reglas de multiplicación y sustracción. la cual suma el bit de acarreo al contenido del acumulador.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). .0 h nsu d 0 b mul c. no sumar . mul: nsu: El algoritmo de la multiplicación de 16 x 8 bits es similar al utilizado para programar el producto de dos números de 8 bits. Si bandera de acarreo es 0.c b. Si B es 0. Bytes 2 y 3 del resultado a cero . Contador de bits del multiplicador . Se supone que los operandos se cargan en los registros correspondientes antes de ejecutar el programa. Rotando el A hacia la bandera de acarreo se prueban los bits del multiplicador. para formar el resultado de 24 bits.a . En este caso. Para considerar el desborde del bit más significativo del registro par HL se usa la instrucción ACI 0. Si cy es 1. tal como se realiza en aritmética convencional. salir.

a a.a div2 e b psw a div1 . div1616: div1: 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. En cada paso del proceso se toman bits adicionales del dividendo y se colocan en el residuo parcial.h b h. Se salva el contador de bits . se sustrae del residuo parcial y uno es colocado en el cociente. El registro BC almacena el divisor y el residuo se carga en el registro HL. se expone a continuación. Queda . El resultado constituye el primer residuo parcial. En HL . Después de cada paso el residuo parcial es desplazado un bit hacia la izquierda. continuar . Restaurar residuo parcial . HL en cero al inicio . hacia la izquierda . Dividendo parcial .l c l.Introducción a la Programación del 8085A 272 La división es un poco más compleja de realizar que la multiplicación. Se resta el . Del divisor . pero se basa en los mismos principios usados en la aritmética clásica.0 h cy0 h l cont h e psw a.10h h. Recuperar contador . En caso contrario. desplaza . CY msb del dividendo cy0: cont: div2: . 3. Se seleccionan los bits del dividendo. Siguiente bit del dividendo. Cuando los dígitos extraídos del dividendo forman un número que supera al divisor. El divisor es comparado con nuevo residuo parcial. 1. Contador de bits a 16 . se pone cero en el cociente permaneciendo invariable el residuo parcial. El proceso finaliza cuando se halla seleccionado el bits menos significativo del dividendo Ejemplo 6. Uno al cociente . El registro par DE contiene el dividendo y el cociente. iniciando por el más significativo. Si el divisor es menor o igual. un bit . 2. Bit del dividendo se carga en . 4. El resultado . HL desde CY y HL se .29 Escribir una rutina para dividir dos valores binarios de 16 bits y producir un cociente y un residuo de 16 bits. Si es negativo cero al cociente . Mientras el grupo de bits elegidos representen un valor menor que el divisor se colocan ceros en el cociente. se coloca uno en el cociente y el divisor es restado del dividendo parcial. Si resultado es positivo. El procedimiento para realizar la operación de división binaria. .

ejecutar la operación en este al sistema de representación numérica y convertir el resultado a BCD. Se inicia a suma en cero . . mientras que para la división.0 b.c 99h c. En muchos casos puede ser más conveniente utilizar un método alternativo. Si cero. se suma 99H al valor del registro y se ajusta el resultado a decimal con DAA. Este. Se realiza la suma .a rep .tope h. se coloca uno en el registro cociente y el divisor se substrae del dividendo parcial cada vez que un nuevo bit del dividendo es seleccionado. Si se desea incrementar el contador BCD. el proceso continúa como se indicó.3 h. salir rep: La rutina SUMDEC es llamada tantas veces como indique el multiplicador. Se inicia el apuntador de pila . A partir de ésta última posición se obtiene el producto de 6 cifras BCD. Decremento . debe sumarse 01H al A antes de realizar el ajuste decimal. Tal valor viene expresado en BCD. puede consistir en convertir los operandos decimales a binario.m m.30 Este ejemplo ilustra el método de sumas para realizar el producto de un valor BDC de 4 dígitos almacenado a partir de la posición de memoria MPNDO por un número de dos dígitos decimales en la dirección MPDOR. contador . BCD . y después del ajuste decimal el A tendrá 14H y la bandera de acarreo se activará a 1. Multiplicación y división de números decimales Los algoritmos para multiplicar y dividir valores decimales son lentos y ocupan mucha espacio de memoria. Al obtenerse el primer uno válido en el cociente.mpdor c. Producto de 6 dígitos bcd . Dirección del multiplicador . Dirección del multiplicador . Al inicio del proceso. al sumarle 99H se obtiene AEH. sumándole el dividendo al divisor. del .mpdor d. lxi lxi mov mvi mvi lxi lxi call mov adi daa mov jnz hlt sp. Multiplicador al registro c . Ejemplo 6. La multiplicación decimal puede hacerse por el método de sumas repetidas.Introducción a la Programación del 8085A 273 La programación del código de división se realizo en forma algo diferente al algoritmo descrito. Si el resultado es negativo. Para utilizar una variable BCD como contador. Dirección del multiplicando . puede acudirse al procedimiento de restas repetidas. Suponga que el A contiene 15H.mpndo sumdec a. se remueve el uno del cociente (se cambia por cero) y se restaura el dividendo parcial.

Introducción a la Programación del 8085A 274 La última instrucción aritmética del 8085A. NROT posiciones hacia la izquierda.tope . puede ser usada para el desplazamiento hacia la izquierda de datos de 16 bits. Las instrucciones de rotación del 8085A sólo actúan sobre valores de 8 bits almacenados en el acumulador. Programa principal . resultado parcial dcr b jnz lazo . HL y el SP. resultado parcial mov a. En la figura 6. Subrutina ROTAR . próximo desplazamiento ret La subrutina ROTAR desplaza el dato en el registro par HL. al contenido del registro par HL. . Bandera de acarreo acero call rotar . Valor a desplazar mvi b. debe escribirse una rutina con tal propósito. Esta es DAD rp. .nrot .31 Escribir un programa para rotar a la izquierda números de 16 bits. Byte bajo al acumulador ral . realiza la suma de números de 16 bits.a . Cuando se requiere desplazar datos de 2 bytes. Considere que el dato de dos bytes es 34A7H y que debe desplazarse dos bits hacia la izquierda. después de cumplirse cada rotación. El resultado de la operación aritmética se carga en HL.36 se muestra el contenido del registro HL. Esta instrucción solo afecta la bandera de acarreo. aun no comentada.Rotar hlt . DAD rP (H) (L) ← (H) (L)+ (rh) (rl) Suma el dato de 16 bits almacenado en el registro par especificado. Ejemplo 6.---------------------------------------------------------------------------------rotar: mov a. Se inicia el apuntador de pila lxi h. Los registros operandos permitidos son: BC.-----------------------------------------------------------------------------------lxi sp.dato16 .----------------------------------------------------------------------------------.---------------------------------------------------------------------------------. Rotar a la izquierda mov l.a . La instrucción DAD.h . además de permitir la suma de números de doble precisión. DE. 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. Rotar a la izquierda mov h. Byte alto al acumulador ral .l . Número de desplazamientos ora a .

Esto previene que un 1 se introduzca en el bit 0 de L cuando el registro se rota hacia la izquierda. ha multiplicado el número por cuatro. un bit hacia la izquierda. Por supuesto. en cuyo caso el resultado de la multiplicación no puede representarse con un byte. antes de rotar el contenido del registro H debe cargarse cero en la bandera de acarreo. El lector puede verificar con facilidad que el desplazamiento de 34A7H. . una secuencia de cuatro instrucciones DAD H. debe considerarse si la operación desplaza un uno desde el bit 7 del dato. Las operaciones de multiplicación y división por números potencias de dos. De modo que. mientras hacia la derecha. El resultado de rotar el número 34A7H (1347910) es D29CH (5391610). Aunque en este caso no es necesario. el desplazamiento de un valor entero hacia la izquierda multiplica el número por 2. 6. realizan la misma tarea que la subrutina rotar.36 Desplazamiento de un número de 16 bits dos lugares hacia la izquierda. El uso de la instrucción DAD simplifica de modo considerable la tarea de rotar hacia la izquierda valores de 16 bits. si se considera que la operación 2*X es equivalente a X+X. En general. con NROT = 4. dos lugares hacia la izquierda. La instrucción DAD H efectivamente desplaza el contenido del registro par a HL. son factibles de realizarse con desplazamientos hacia la derecha o hacia la izquierda.Introducción a la Programación del 8085A 275 H 0 0 1 1 0 1 0 0 CY 0 1 0 1 0 L 0 1 1 1 Estado inicial 0 0 1 1 0 1 0 0 1 0 1 0 0 1 1 1 0 Después de la primera rotación de L 0 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 Después de la primera rotación de H 0 1 1 0 1 0 0 1 0 1 0 0 1 1 1 0 0 Después de la segunda rotación de L 1 1 0 1 0 0 1 0 0 1 0 0 1 1 1 0 0 Después de la segunda rotación de H Fig. lo divide por 2.

exponenciales y logarítmicas.5 ARITMÉTICA DE PUNTO FIJO O DE PUNTO FLOTANTE Los números binarios pueden ser representados en el computador como un valor entero o de punto flotante. debe recurrirse a la aritmética de precisión múltiple donde son necesarios 2 o más bytes para almacenar los operandos y resultados. La representación en punto flotante puede usarse si los requisitos de memoria y velocidad de la aplicación no se ve comprometida por el código adicional necesario. El uso de hardware de punto flotante aumenta la velocidad pero incrementa los costos. • Requiere un código más complejo. Para proveer representación en punto flotante en sistemas empotrados lo usual es usar una librería matemática que se incorpora al código del proyecto. los procesadores modernos incorporan en su interior un coprocesador matemático que funciona en paralelo con el µP y puede realizar además de las operaciones fundamentales. En la sección anterior se mostraron diversos ejemplos de operaciones matemáticas con entradas y salidas de números con varios dígitos. produce como resultado un número entero. Los µPs y Ctrls usan por defecto aritmética entera para procesar los operandos. • Hardware adicional puede procesar estas partes. son las siguientes: Punto fijo • Los números son representados y manipulados como valores enteros. • El rango de valores posibles de representar es menor. cálculos con funciones trigonométricas. También puede ser necesario que el µP realice alguna tarea que involucre la represen- . Las características básicas de los sistemas de representación numérica de punto fijo y de punto flotante. si el programa que se ejecuta usa el coprocesador. En algunas aplicaciones es común que el µP deba trabajar con números muy grandes que no pueden ser representados con un byte. Punto flotante • Los números son representados por la combinación de una parte fraccional o mantisa y una parte exponencial. • Tiene mayor costo y es más lento. En sistemas basados en microprocesadores lo usual es utilizar aritmética entera para realizar las operaciones matemáticas y usar formatos especiales para representar fracciones. En estos casos. En cambio. todas las operaciones matemáticas realizadas con el lenguaje de máquina del 8085. Como debe haber observado el lector. el desempeño del sistema aumenta sustancialmente. Cada modo de representación tiene alguna ventaja que en general depende del tipo de aplicación.Introducción a la Programación del 8085A 276 6. En este caso.

debe ser truncado o redondeado para ser cargado en dos bytes: sen(60°) = 8660 También es posible que el rango de las variables procesadas durante una tarea sea tan grande. que la representación binaria de los números enteros y fraccionales como valores multibytes. si se desea un ahorro de la memoria del sistema puede apelarse a la representación de punto flotante. teniéndose en cuenta que para obtener el resultado correcto debe dividirse este valor por 10000.Introducción a la Programación del 8085A 277 tación de valores fraccionales. la cual depende de un parámetro w. pudiendo el lector consultar la literatura recomendada. En estos casos. para que los coeficientes del polinomio puedan representarse con números enteros. puede almacenarse como sen(30°) = 5000.43 × w − 62 La ecuación es escalada multiplicándola por 100. (el resultado real es 162. . no tendría un equivalente binario exacto con este método. Para esto se debe resolver la ecuación: z = 0. el número decimal sen(60°) = 0. el sen(30°) = ½ . exija una cantidad de memoria apreciable. Por el contrario. no se discute este tópico. El equivalente binario de la fracción puede ser representado por un número entero que ocupe uno o más bytes. En este trabajo. separando las partes enteras y decimal por un punto decimal imaginario.62) aún cuando solo se usaron números enteros. No siempre la precisión requerida del procesamiento. Como el número 1. conocido. Considere ahora que el µP debe medir y presentar el valor de una variable z.73. En ocasiones. Suponga ahora que debe multiplicarse por 1. se multiplica por 100 y se ejecuta la operación entera: N= (173 ⋅ DATO) (173 ⋅ 94) 16262 = = = 162 100 100 100 Expresado en números hexadecimales como.73 el valor DATO (9410) usando números de punto fijo. La precisión puede ser mejorada si se redondea el resultado. justifica el uso de números de precisión múltiple. almacenado en memoria. Por ejemplo. El valor decimal original. la fracción puede ser representada en forma exacta en el sistema binario. N= (ADH ⋅ 5EH) 3F86H = = A2H = 16210 64H 64H Observe que el valor DATO (9410) es multiplicado efectivamente por el número 1.866025403. La exactitud de la representación es variable.73 no puede ser representado.

Fracciones Para fracciones sin signo. Los números en punto fijo pueden ser escalados por tipos de datos cuyo escalamiento es definido por la posición por defecto del punto decimal o se puede usar un tipo de datos en punto fijo con un escalamiento lineal arbitrario. lo multiplica por 43 y luego le suma el complemento a dos de 6200. considere que se debe representar el número fraccional 0. Es el programa quien determina la posición del punto binario. El resultado z obtenido es entonces convertido a BCD. Como ejemplo. Números de punto fijo generalizados No existe un punto binario por defecto. En aplicaciones de procesamiento digital de señales es usual el uso de hardware de punto fijo. los números deben ser escalados para evitar condiciones de desborde errores altos de cuantización.95 y -0. contado a partir del dígito del extremo derecho. Aunque este valor esta centuplicado no es necesario usar una rutina de división para dividirlo por 100. La ALU ejecuta operaciones como suma y resta sin detectar el factor de escala. por lo limitado de la memoria disponible y las restricciones de velocidad. En general. Como los coeficientes de los filtros digitales son pequeños. Un tratamiento con detalle del tópico de representación de datos en punto fijo y de las técnicas de escalamiento escapa al alcance de este trabajo. 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. basta con activar el punto decimal en el tercer dígito BCD.Introducción a la Programación del 8085A 278 z = 43 × w − 6200 Se usó el valor de 100 para escalar la ecuación porque conviene por la naturaleza de la aplicación. cuando se usa aritmética de punto fijo. Las operaciones de punto fijo con o sin signo son ejecutadas como si el punto binario estuviese a la derecha del bit menos significativo. Una notación . El lector interesado debe consultar literatura relacionada.75 usando una palabra de 16 bits. el punto binario por defecto está ubicado a la izquierda del bit más significativo mientras para números con signo está a la derecha del bit más significativo. Se trata de un instrumento que adquiere desde un conversor A/D el valor de la muestra w. El punto binario es el medio por el cual los números de punto fijo son escados. los valores de punto fijo deben ser escalados.

15 se usa para representarse los coeficientes de la ecuación del filtro. A continuación. los valores entregados por el conversor A/D deben ser trasladados a este formato. Debido a que los cálculos se realizan usando aritmética de complemento dos. Observe que el valor del número puede ser encontrado con: N = − b n −1 × 20 + b n − 2 × 2 −1 + b1 × 2 − (n − 2) b 0 × 2− (n −1) Una aplicación típica donde puede usarse el formato Q.9510 bn-1 bn-2 b0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 0 1 -0. Esto puede hacerse en forma sencilla si el circuito de entrada es diseñado para leer los valores en formato binario desplazado.99 con la ventaja que al ser todos los números ≤. el valor resultante del procesamiento de la muestra de entrada aplicado a las entradas de un conversor D/A. En esta representación al voltaje de entrada más negativo se le asigna el número 0. La notación Q. cero voltios lo representa el número 128 y 255 es asignado al voltaje más positivo.15.15 Para encontrar la representación se multiplica el coeficiente por 215.n.1 no puede ocurrir desborde durante las operaciones de multiplicación.Introducción a la Programación del 8085A 279 utilizada en sistemas empotrados y apropiadas para este caso es el conocido formato Qm.15 permite representar valores entre -1 y 0. Por ejemplo un número de 16 bits con signo y con 15 bits a la derecha del punto binario se expresa como Q0.7510 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 Fig. El formato Q. • m es el número de bits usado ara representar la porción entera en complemento dos del número.15 o simplemente Q. Este adquiere una muestra de una señal bipolar de entrada y la usa para resolver una ecuación diferencia que describe el algoritmo de filtrado. donde: • Q indica que el número está en formato Q.37 Notación en formato Q. 6. . • n indica número de bits usado ara representar la porción fraccional en complemento dos del número o el número de bits a la derecha del punto binario.15 es en un filtro digital. Los valores indicados se representan como: 0.

5 V. Ahora se realiza la multiplicación con signo la cual da como resultado el número de 32 bits 6000H ∗ 7F00H = 2FA00000H. lo cual implica un bit extra de signo que debe ser suprimido. En la práctica. requiere arduos esfuerzos. se adquiere desde el convertidor A/D una muestra de valor FFH.75 (6000H). El byte de entrada es multiplicado por 256 para obtener un número de 16 bits el cual es multiplicado por el coeficiente que corresponda obteniéndose un número de 32 bits.Introducción a la Programación del 8085A 280 Debido a que los microcontroladores tienen un convertidor A/D de entrada unipolar.5 V de amplitud. errores por redondeo-truncado y cuantización de los coeficientes del filtro.75 es una salida de + 1. La ecuación del filtro puede resolverse mediante sumas y productos. Este valor es aplicado al convertidor digital analógico produciendo un voltaje de + 4. Además. esto es los coeficientes se multiplican con signo por valores de entrada y los productos parciales son sumados con signo.15 se almacenan en la memoria del sistema y las muestras de la señal de entrada se leen del CAD de 8 bits. Para efectos de los cálculos. debe prestarse especial atención a los efectos de usar palabras de longitud limitada para representar los números. Truncando este valor a una longitud de 8 bits se tiene 5FH el cual es retornado a binario desplazado como DFH. el número resultante es convertido a binario desplazado complementando el bit de mayor peso y es enviado al conversor D/A. Si se le inserta a la señal un nivel DC de +2. se obtiene la onda deseada con variación entre 0 y + 5 V. Los resultados parciales son sumados y el resultado final es truncado o redondeado a un valor de 8 bits que va al conversor D/A y al circuito de acondicionamiento de salida. Por ejemplo. suponga que la entrada del filtro es una forma de onda seno de 2. . Esto puede resultar en desplazamiento de los polos y ceros de la función de transferencia del filtro. Considere que en un instante determinado. Suponga que para simplificar el ejemplo. la onda de entrada debe ser multiplicada por el coeficiente +0. Observe que el resultado de multiplicar la entrada por 0. Estos efectos se relacionan con: cuantización de la señal en la conversión A/D.5 voltios con variación entre 0 y +5 voltios. Al restituir el nivel DC de la señal se obtiene una tensión de + 1. la cual se pasa a complemento dos como 7FH y a un valor de 16 bits como 7F00H.855 V. la señal de entrada al filtro debe ser ajustada usando amplificadores operacionales con la onda centrada en + 2.875 V por lo tanto se ejecutó con éxito la operación deseada. El valor de la muestra de entrada en binario desplazado es convertido a complemento dos simplemente mediante la inversión lógica del bit más significativo de la palabra. los coeficientes en formato Q. programar este procedimiento para microcontroladores o microprocesadores.355 V. lo cual puede causar variaciones en la ganancia. en las frecuencias de corte del filtro o en la estabilidad del sistema. Eliminando el bit de signo adicional se obtiene 5F400000H. Una vez completados los cálculos de procesamiento de la señal.

la expresión para obtener la aproximación siguiente xn+1. algoritmos de aproximación o tablas de consulta. si xn es una aproximación a la raíz de N. El paquete MATLAB y su herramienta para aritmética de punto fijo.l c. . x(n) BC . el seno o cualquier otra función de una variable. n HL .a a. Usando lenguaje de máquina puede calcularse el logaritmo. x n +1 = ⎞ 1⎛ N ⎜ ⎜ x + xn ⎟ ⎟ 2⎝ n ⎠ El diagrama de flujo del algoritmo se presenta en la figura 6. . pueden utilizarse formulas especificas. El resultado se carga en el registro DE. Una forma realizar esta operación es usando el método de aproximaciones sucesivas de Newton-Raphson.... En realidad.37 y el programa en el ejemplo 6. la raíz cuadrada. raiz: lhld inx mov rrc mov mov rar mov lhld xchg call mov dmem h a. puede ser programada si se dispone del algoritmo adecuado. es una buena elección para el propósito señalado. Según el caso. resta.h b. x=N . . Cálculo de la raíz entera de un número binario Las operaciones matemáticas posibles de ejecutarse usando aritmética de punto fijo no se limitan a suma. . viene dada por.b . cualquier función matemática por compleja que sea. El número cuya raíz se pretende calcular es de 16 bits y se obtiene a desde la posición de memoria DMEM y DMEM+1..32. . para verificar el modelo del filtro con aritmética de punto fijo y palabras de la longitud seleccionada. Ejemplo 6. Esta última técnica disminuye en forma notable el tiempo de CPU necesario para el cálculo de la función. HL↔DE . x(n+1)=n/x(n) DE=DE/BC .. x =N+1 . multiplicación y división. Considere ahora que debe calcularse la raíz cuadrada de un número entero N usando aritmética de punto fijo. x(n)=x/2.a dmem div1616 h.32 El siguiente programa realiza el cálculo de la raíz de un valor entero. Las limitaciones para el cómputo de cualquiera de estas funciones las impone el tiempo de CPU exigido por la aplicación. Dado el valor entero y positivo N. x(n+1)=x(n+1)+ x(n) rep: .Introducción a la Programación del 8085A 281 Lo recomendado es simular el algoritmo usando un programa de simulación adecuado.

. raíz en DE y . .Introducción a la Programación del 8085A 282 mov dad inx mov rar mov mov rar mov mov cmp jnz mov cmp rz cont: mov mov jmp l.. x(n)=x(n+1) . retornar .c e . x(n)=x(n+1) . 6.a a. BC DE .c d h a.37 Algoritmo para extracción de la raíz cuadrada de un número entero... . . Iguales. x(n+1)=x(n+1)/2 . . Diferentes.... Siguiente aproximación b. . . . d.l e. .e rep Fig. .h :. . Redondear .a a..d c.b d cont a.. Comparar x(n) con x(n+1) .

Esto puede corregirse detectando cuando xn-xn+ 1=1. y = 159 ⋅ x = 159 ⋅ 2 = 318 . el algoritmo de aproximación no funciona en forma apropiada.73 = 275.4968 885099 128. en lugar del valor real: y = 159 ⋅ x = 159 ⋅1.4 El error en el resultado es inaceptable.47 9. Si se suprime la instrucción INX H en el lazo de aproximación y se ejecuta el programa con N=3. En la tabla se observa que la precisión del resultado aumenta para los valores: x = 300 y x =30000. Note que el error en el cálculo de la raíz de 3 es significativo.15 4.8844 39. Una forma más conveniente consiste en sumar 1 al valor que se divide por 2 en la formula de aproximación.04 7. selecciona N+1 como aproximación inicial a la raíz y corrige el problema.64 7. En el caso de N=300 se requieren 13 aproximaciones para alcanzar el resultado. Observe que el tCPU es mayor para N=300 que para N=30000. 6. lo cual redondea el cociente evitando la oscilación.3205 25.2381 1. entrando en un lazo sin fin para aproximaciones sucesivas que difieren por uno. debido a que se obtiene cero como resultado. la aproximación a la raíz cuadrada es mejor. Este tiempo depende en realidad del comportamiento de la formula de aproximación. y usando xn+1 como el valor final de la raíz. La precisión del cálculo depende del valor del número N.07 El tiempo de CPU invertido en calcular la raíz es variable.2051 254.7320 11.8 Resultados de rutina RAIZ. xn y xn+1 alternaran continuamente entre 1 y 2. pudiendo observarse que para valores grandes de N.57 6. gracias a la burda aproximación de 2.Introducción a la Programación del 8085A 283 Para algunos valores.66 4.37 3.0000 173.8 presenta algunos resultados de la ejecución del programa. solo se realizan 11 estimaciones antes obtenerse la raíz cuadrada. La tabla 6. Tabla. para x =3.1803 17. Si antes de extraer la raíz se multiplica el valor de x por 10000. se ejecuta el producto y el resultado se divide por 100. se obtendría. mientras que para N=30000. Aunque la tabla sugiere que se incrementa con el valor de N.79 5. Otro falla ocurre cuando N=1. N Raíz Raíz tcpu programa calculador (ms) 3 125 300 670 1560 7834 16384 30000 64637 2 11 17 26 40 89 128 173 254 1. se tiene: y= 159 ⋅ 3 ⋅10 4 10 2 = 275 . al valor de la raíz cuadrada de 3. La instrucción INX H al inicio del programa. Si debe calcularse el valor de y.

HL=159*raiz(3000) . Por ejemplo.Introducción a la Programación del 8085A 284 El programa del ejemplo 6.DE hl . no afecta las banderas y requiere 4 estados. Ejemplo 6.10010 c . 6.9fh mul24 c. .6 INSTRUCCIONES ADICIONALES Se han presentado 68 del conjunto general de 74 instrucciones del 8085A.33 realiza esta operación. RIM. También.33 lxi mvi call shld call mvi call mvi xchg call hlt d. la función HLT es conocida por el lector. EI y DI se discutirán cuando se trate el tópico de interrupciones.1000010 a DE .9 Instrucciones no comentadas Instrucciones adicionales HLT SIM RIM Parada Poner máscara de interrupción Leer máscara de interrupción EI DI NOP Habilitar interrupción Inhibir interrupción Ninguna operación Durante la ejecución de la instrucción NOP no se realizan operaciones externas o internas.DE=159*raiz(3000)/100 6. habiéndose utilizado la mayoría de estas en los ejemplos de programación.HL=3*10000 .2710h c.15910 c . la supresión del rebote por contacto de un interruptor en un puerto de entrada puede ser lograda con un lazo de retardo.3 mul168 dmem raiz c.7 RUTINAS DE RETARDO La realización de retardos por programa es una tarea obligada en muchas aplicaciones con microprocesador.3 al registro C .64h div1616 . De las instrucciones restantes.30000 a memoria . Tabla. Usualmente se utiliza para consumir tiempo en lazos de retardo 6.DE=raiz(30000) . puede ser necesaria la generación de un pulso de ancho determinado o de una forma de onda periódica para un dispositivo de externo conectado a un puerto de salida. Las instrucciones SIM.

Esta información es suministrada en el manual del usuario por el fabricante del dispositivo procesador.125 MHz. 6.52 µs = 1141. De modo que el tiempo necesario para ejecutar el lazo y salir puede calcularse conociendo el número de estados que emplea el ciclo de instrucción de DCR y JNZ. TD max = ( 255 − 1) ⋅ 4. Los lazos que usan un registro contador para control de la repetición.1) Para una frecuencia de operación interna de 3. sólo 7 + 4 = 11 estados.Introducción a la Programación del 8085A 285 Además. 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.7.32 µs.52 µs El mayor número que puede representarse con un byte es 25510. TD = [( N − 1) ⋅14 + 11]⋅ Treloj (7.1 se tiene. TD = [( N − 1) ⋅14 + 11]⋅ 1 3. con la siguiente secuencia de instrucciones . cuando N = 1. un estado tiene una duración igual a Treloj = 0.44 µS Esta cantidad es el valor máximo del retardo que puede generarse con la rutina.48 µs + 3.N B LAZO 4 7/10 La instrucción DCR requiere 4 estados y JNZ 10 estados cuando se produce el salto y 7.52 µs. estas rutinas son apropiadas para establecer tiempos de espera para la entrada o salida de información durante la ejecución de un programa. De modo que el retardo total es. ESTADOS LAZO: MVI DCR JNZ B. en caso contrario.48 µs + 3. El lazo será ejecutado N veces.1 El lazo de retardo básico Considere que se usa el registro B como contador y se ejecuta un lazo N veces. Si se requiere establecer un retardo de una duración determinada. El hecho que el tiempo de ejecución de cada instrucción sea conocido deja abierta la posibilidad de utilizar el μP para realizar funciones de control de tiempo o temporización.1 también indica que el tiempo de espera mínimo obtenible es de 3. son adecuados para esta tarea. La ecuación 7.125 MHz TD = ( N − 1) ⋅ 4. Sustituyendo este valor en la ecuación 7. los primeros N-1 pasos tendrán una duración de 4 +10 = 14 estados cada uno y el lazo final. Observe además que el retardo máximo puede ser incrementa- .

cargando el registro contador desde el programa principal. resultando. N= TD − Tpaso Tfinal +1 En la práctica el programa de retardo se realiza como una subrutina. Establecido como calcular el tiempo de retardo de un lazo de programación conociendo el valor del módulo del contador.n call retad . conviene formular el proceso inverso. El bit 4 del puerto 01 se usará como salida del pulso. debido a que el primer decremento lo llevará hasta 255. como se indica a continuación. N= TD − 11 ⋅ Treloj 14 ⋅ Treloj +1 (7. . basta despejar N de la ecuación 7. para obtenerlo? Por supuesto la respuesta es directa. mvi b. . hlt retad: dcr b jnz retad ret En tal caso. .Introducción a la Programación del 8085A 286 do si se carga el registro B con cero. la ecuación de retardo varía al incluirse los 38 estados consumidos por las instrucciones CALL (18) y RET (10).34 Considere que se desea generar por programa un pulso de nivel alto con una duración de tp = 70 μS. ¿Cuál valor debe asignarse a la variable N.1. Para un tiempo de retardo especificado. TD = [( N − 1) ⋅ 14 + 39 ] ⋅ Treloj Ejemplo 6. si se toma en cuenta que el término 14⋅Treloj es la duración de un paso a través del lazo y 14⋅Treloj corresponde a la duración del paso final. .2 puede ser generalizada. La nueva formula de retardo es.2) La formula 7.

Se mantiene el pulso en alto por tp y las dos últimas instrucciones proveen el flanco de bajada de la onda. Si (b) ≠ 0. 4 7/10 4 10 Al inicio del programa se carga cero en el acumulador y se asegura que la línea 4 del puerto 1 esté en nivel bajo.24 μS y de 70. Pulso a nivel alto. Esto implica una duración del paso final hasta que se escribe en el puerto. para obtener el ancho de pulso deseado. . El ancho de pulso será: t P = [(14 − 1) ⋅14 + 37]⋅ 0. Las siguientes dos instrucciones conmutan el bit 4 de P0. Pulso cae a cero.n a. El acumulador a cero . Se sabe que cada paso por el lazo dura 14 estados. Seleccionando N =14. Existen situaciones donde la duración del pulso a generar es un parámetro crítico.84.10h 01 b lazo a 01 .32 μs = 70. Usando la ecuación se calcula el valor a cargar en el registro B. Cuando el registro B llega a cero.10h 01 b lazo lazo: a 01 4 7/10 4 4 4 4 10 La duración del paso final es 4 + 7 + 3⋅4NOP + 4XRA + 10OUT = 37 estados. y agregando tres NOP al programa del ejemplo. . pero que consuman tiempo. como resultado se obtiene N = 14.1 a nivel alto. se obtiene la rutina. Si (b) = 0 haga (a) = 0 . repita el lazo. .0eh a. antes de entrar al lazo. Bit a4= 1 . Cargar contador de lazo . Para esto se selecciona para el entero inmediatamente inferior y se alarga la duración del retardo usando instrucciones que no realicen función. seleccionando N = 14 se obtiene un tiempo de retardo igual a 66.08 μs . esto significa que debe obtenerse un ancho de pulso lo más cercano posible a los 70 μS. Bit 4 del puerto p01 a cero. Debido a que N debe ser un número entero. Decremente contador .72 µs con N= 15. JNZ no produce salto y dura solo 7 estados. El ajuste del tiempo puede hacerse usando instrucciones NOP fuera del lazo. estados xra out mvi mvi out dcr jnz nop nop nop xra out a 01 b.Introducción a la Programación del 8085A 287 Estados lazo: xra out mvi mvi out dcr jnz xra out a 01 b. de: 4 + 7 + 4XRA + 10OUT = 25 estados.

Ejemplo 6. Epere .Introducción a la Programación del 8085A 288 Dependerá de la habilidad y paciencia del programador lograr el ajuste necesario.32 µs = 1000 µs 2 f = 500 Hz . Epere .dbh b lazo d. Complementar el (a) . el programa del ejemplo 6.32 puede ser modificado para generar un pulso de 50 µs. (a) (puerto 20h) . Decremente contador . Un circuito de interconexión externo fijará la magnitud y polaridad de los niveles de tensión de la forma de onda. Estados lazo: xra out mvi mvi out dcr jnz dad dad lda xra out a 01 b. en todas las líneas de salida del puerto 20H.0 tpul .0 d. Es obvio que podría usarse cualquier instrucción distinta a NOP para alargar el retardo. T = [10 + 4 + 7 + ( 219 − 1) ⋅14 + 4 + 7 + 10 + 10 + 7 + 4 + 10]⋅ 0. argar contador de lazo .10h 01 b lazo h h dmem a 01 4 7/10 10 10 13 4 10 La generación por programa de una señal cuadrada a una frecuencia especificada requiere alternar de alto a bajo por tiempos iguales.0 e. Por ejemplo. tpul: out cma mvi dcr jnz lxi lxi mvi nop jmp 20h b. Cargando N = 8 en el registro B y usando dos instrucciones DAD H y una LDA DMEM para el ajuste del tiempo. Epere .35 Escribir un programa para generar un tren de pulsos de ciclo de trabajo 50 % y frecuencia 500 Hz. Si (b) ≠ 0. repita el lazo . el estado de una línea de un puerto de salida.8 a. Epere . Cambiar nivel del pulso estados 10 4 7 4 7/10 10 10 7 4 10 lazo: Un semiciclo de la señal cuadrada tiene una duración de.

ejecutar una función OR exclusivo con el registro C como operando.14 ms. 6.33 debe extenderse hasta 500 ms.32 ms Ejemplo 6. Debe considerarse que la instrucción DCX rp no afecta las banderas. TD = [ (N − 1) ⋅ 24 + 49] ⋅ 0. DCX rp. y la instrucción de decremento de registro par DCX rp será posible repetir el bucle 65536 veces. el registro par BC debe cargarse con el valor de N usando la instrucción LXI rp. es de aproximadamente 1.b c retad estados 6 4 4 7/10 10 Antes de ejecutar la subrutina de retardo.31 representa un lazo sin fin durante el cual se genera continuamente la onda cuadrada. la rutina del ejemplo 6. . El lazo de espera usando un contador de 16 bits se muestra a continuación.32 µs El cual tendrá un valor máximo a la frecuencia especificada. por lo cual debe usarse un método diferente al usual.125 MHz. Si se utiliza una pareja de registros de ocho bits como un registro único de 16 bits.36 Usando una rutina de retardo. La instrucción DCX B decrementa en 1 el registro de 16 bits BC. solo cuando se cumpla que (B) = (C) = 00H.Introducción a la Programación del 8085A 289 La frecuencia de la onda es igual a 500 Hz como especifica el problema. para detectar cuando el registro par llegue a cero. es cargar el acumulador con el contenido de B. para una frecuencia de reloj interna de 3. retad: dcx mov ora jnz ret b a. Una solución para determinar cuando el contador alcanza cero.32 µs = 503. de TDmax = [ (65536 − 1) ⋅ 24 + 49] ⋅ 0. Por supuesto. La ecuación de retardo con el contador de 16 bits está expresada por. e indicarlo con Z=1. debe generarse un pulso de ancho 500 ms en la línea 7 del puerto de salida B0H. La bandera de cero será activada.2 Retardos de mayor duración Si el ancho tp del pulso generado en el ejemplo 6. Desafortunadamente.7. es imposible lograrlo con el uso del registro B como contador de lazo. El lapso de retardo máximo posible con un registro de ocho bits. lo cual corresponde al byte de orden alto del registro contador. si se asigna el valor cero a N.dato16. no afecta la bandera de cero Z.

lo cual corresponde en forma exacta a 500 ms.10h out b0h dcx b mov a.68 Seleccionando N = 6510210 (FE4EH) y ajustando el tiempo con instrucciones no funcionales. TD = ( N − 1) ⋅ 7.2 µs + 41 ⋅ 0.Introducción a la Programación del 8085A 290 estados lxi b. .0 lxi d. .7 7. pulso a nivel alto.0 nop xra a out 01 . requiere retardos mayores para establecer los lapsos de encendido de la luces del semáforo. un controlador de tráfico urbano basado en µP.b . Contador externo en 32 . Un tiempo de 0. . or entre b y c.fe50h b a. esperar . esperar : esperar . estados ext: int: mvi lxi dcx mov d. como.0 mvi d. Por ejemplo. esperar .2 = 65102.5 s . (a) = 0 . se obtiene un ancho de pulso de. Contador interno para 0. esperar . salto si contador es cero . bit a7 = 1 .68 µs + 11. De modo que se escribe la expresión del retardo.5 s pudiese ser demasiado corto para las necesidades de algunas aplicaciones.32 µs = 500 ms El pulso permanece en nivel alto por 1562500 estados. Para lograr tiempos de espera largos puede usarse un bucle externo para repetir n veces el retraso logrado con la pareja de registros.68 µs + 11. byte alto del contador al a. decremento registro par bc .n mvi a. 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.20h b. 7 6 4 . .0 lxi d.32 µs TD = ( N − 1) ⋅ 7. cargar contador de lazo . lazo: 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 duración deseada para la señal. N= TD − 11. TD = [( N − 1) ⋅ 24 + 35]⋅ 0.2 µs El valor correspondiente de N es igual a. pulso a nivel bajo.b ora c jnz lazo lxi d.

d e conT cont: El retardo máximo obtenible con este programa es de 9 horas a la frecuencia de 3.37 Escribir una rutina de retardo para alcanzar tiempos de espera del orden de horas. Si se usa una versión del 8085 de 5 MHz. puede usarse además para generar formas de ondas más complejas. La técnica de control de tiempo por programa.Introducción a la Programación del 8085A 291 ora jnz dcr jnz c int d ext .2 µs.n1 b. con este programa pueden obtenerse tiempos de hasta aproximadamente 2 minutos. Examine el ejemplo siguiente donde se usa un programa para generar el sonido del timbre de un teléfono. .5 segundos y se repite 32 veces. . En lugar de usar el registro D. En este caso se prefiere usar un procedimiento algo diferente. Para un lapso de 9 horas. basta con repetir 65535 veces el lazo interno de 0.b c cont d a. se usa DE. los tiempos de espera se reducen al disminuir la duración de un estado a 0. pero que igual utiliza dos contadores de 16 bits. Esta forma de onda se obtiene liberando durante 1 segundo 8 tonos de 320 Hz. Fin de lazo interno . . Ejemplo 6.38 Se desea generar una señal que simule el tono de timbre telefónico. Al usar un contador de 8 bits para control de la repetición del lazo interno. Fin de lazo externo 4 7/10 6 7/10 La rutina provee un retardo de 16 segundos. Esto puede ser realizado como ejercicio.125 MHz.. Todos los ejemplos de código de retardos han supuesto esta frecuencia de operación. seguidos por 12 tonos de 480 Hz y al final 2 segundos de silencio. Durante 50000541 estados. El retardo interno es 0. lxi lxi dcx mov ora jnz dcx mov ora jnz d. La rutina del ejemplo 6.5 segundos del programa anterior.n2 b a.37 permite retardos mayores. Ejemplo 6. Para lo cual es necesario sustituir el contador que controla el lazo externo por un contador con registro par. audio e incluso música.

Para lograr el lapso de segundo se repiten 20 veces la combinación de 50 ms. Mover B frecuencia deseada t2: dcr b . Programa principal .-------------------------------------------------------------------------------------------------------------------------. de 320 Hz y de 480 Hz seguir: mvi l.-------------------------------------------------------------------------------------------------------------------------.c ora b jnz ret2_2 . Generar hasta contador de ciclos=0 nop nop jnz t2 dcr c jnz t1 dcr h jnz tt nop ret .-----------------------------------------------------lazo: mvi e.Introducción a la Programación del 8085A 292 Para resolver el problema se escribe una rutina denominada tono que genera el número de tonos indicado por el registro L.2 . Lazo interno se repite 5 veces ret2_1: lxi b. Se repiten veinte veces los tonos . Repetir por siempre . No cero.------------------------------------------------------------------.------------------------------------------------------------------.5 .12 . Al final se pone la salida del puerto a cero y se esperan 2 segundos antes de reiniciar la transmisión de una nueva combinación de tonos.-------------------------------------------------------------------------------------------------------------------------.20 .8 . Son 8 tonos de 320 Hz mvi d. Subrutina TONO . .------------------------------------------------------------------.0dcH . D = 0DCH para 320 Hz call tono . Lista las 20 veces.-----------------------------------------------------tono: mov h. Complementar acumulador mov b.d . Retornar . Esperar 2 segundos de silencio jmp lazo . Son dos semiciclos por tono t1: out 0 .-----------------------------------------------------ret2s: mvi d. Contenido del acumulador a puerto 0 cma . Contador=Contador-1 jnz seguir . Generar 8 tonos de 320 Hz mvi l. Son 12 tonos de 480Hz mvi d. de modo que se requieren 50 ms para una combinación (8 tonos320Hz+12 tonos480Hz) de los ciclos de distinta frecuencia.0cb72h ret2_2: dcx b mov a. A a cero out 0 . Generar 12 tonos de 480Hz dcr e . seguir generando xra a . con la frecuencia especificada por el registro D.l . D = 92h para 480Hz call tono . 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. Puerto de salida a cero call ret2s .92h . Mover a H el número de ciclos tt: mvi c. Subrutina RET2S .

32 µs × 6249977 = 1. 6. Fig.03 Hz Semciclo 2 = ((B − 1) × 22 + 69) * 0.32µs La figura 6. El retardo de la rutina ret_2s viene dado por Re tardo ret _ 2s = 0.38 El transistor 2N2905 provee la corriente necesaria para activar la corneta de 8 Ω/0.38 muestra la conexión del parlante a la línea 0 del puerto de salida 0.32µs B = 220 = 0DCH →= f = 319.32 µs × 18 + 7 + 10 + (D − 1) × (B − 1) × 24 + 21 + 4 + 10 + 1 + (B − 1) × 24 + 21 + 11 + 10 { [ ] } Re tardo ret _ 2s = 0.125W.98 Hz B = 146 = 92H →= f = 480.Introducción a la Programación del 8085A 293 dcr d jnz ret2_1 ret Los semiciclos del tono generado tienen una duración ligeramente distinta: Semciclo1 = ((B − 1) × 22 + 61) * 0.99999264 seg .

De hecho. usar: lenguaje de máquina o lenguaje de alto nivel. El reto principal a enfrentar por el programador es la selección del lenguaje de programación del microprocesador. Para desarrollar una aplicación basada en µP se requiere que el equipo de diseño incluya personal con conocimientos de electrónica digital y de programación. 7. el programador de microprocesadores debe conocer la arquitectura de la máquina en la cual se ejecutará la rutina. C o Pascal deben ser traducidos a código de máquina antes de ser ejecutados. como C. y fundamentalmente de la experiencia de quien programa. En este tipo de sistemas es usual que el desarrollo del código ejecutable represente una inversión de tiempo y dinero superior al costo del diseño del soporte físico del sistema. de lo que cada una de éstas hace. debiendo entender como las instrucciones afectan al hardware. los escritos en ensamblador. A diferencia de la elaboración de programas en lenguajes de alto nivel. el costo del desarrollo del soporte lógico de la aplicación y la eficiencia del funcionamiento del producto final están determinados por el lenguaje utilizado para programar el microprocesador. . Los códigos en lenguaje de máquina son los que puede ejecutar directamente el microprocesador. ADA o Pascal.Desarrollo y Simulación de Programas 294 Desarrollo y Simulación de Programas La habilidad para escribir programas para microprocesadores proviene de la comprensión que se tenga del conjunto de instrucciones del μP.1 EL LENGUAJE DE PROGRAMACIÓN Para desarrollar un programa ejecutable por un microprocesador existen dos opciones.

entenderlos y modificarlos. la cual ha sido cargada en memoria a partir de la dirección 200H.34 del capítulo 6.1 es una representación en binario de la rutina del ejemplo 6. y es el código que la máquina entiende y ejecuta. debido a que cada instrucción en este lenguaje es una indicación directa al hardware para que ejecute una operación. a un manejo óptimo la memoria del sistema. además de producir programas con alta velocidad de ejecución. Inspeccionando esta secuencia de bytes es difícil determinar que genera un tren de pulsos en las líneas del puerto de salida 20H. Un programa en lenguaje de máquina es una secuencia de instrucciones y datos en binario. Programar en código de máquina conduce a un control total sobre los recursos que ofrece el sistema μC. Tabla. la naturaleza binaria de los programas escritos en código de máquina implica gran dificultad para escribirlos.1 Código para generación de pulsos Dirección Binario Hex 0200H 0201H 0202H 0203H 0204H 0205H 0206H 0207H 0208H 0209H 020AH 020BH 020CH 020DH 020EH 020FH 0210H 0211H 0212H 0213H 0214H 11010011 00100000 00101111 00000110 01000100 00000101 11000010 00000101 00000010 00010001 00000000 00000000 00010001 00000000 00000000 00011110 00000000 00000000 11000011 00000000 00000010 D3H 01H 2FH 06H DBH 05H C2H 05H 02H 11H 00H 00H 11H 00H 00H 1EH 00H 00H C3H 00H 02H Ensamblador OUT 20 CMA MVI B DB DCR B JNZ 05 02 LXI D 00 00 LXI D 00 00 MVI E 00 NOP JMP 00 02 La segunda columna de la lista de la tabla 7. mientras que lenguaje ensamblador identifica a la representación simbólica del código binario de las instrucciones del procesador. Programar en código ejecutable exige un conocimiento completo del conjunto de instrucciones del μP y de la arquitectura de la máquina. . dirección o dato usando el sistema binario.Desarrollo y Simulación de Programas 295 El término lenguaje de máquina usualmente se asigna a la secuencia binaria de instrucciones que ejecuta la CPU. La forma más primitiva de programación en lenguaje de máquina implica la escritura de cada código de operación. De hecho. 7.

1. constituido por los nemónicos de los códigos de operación de cada instrucción.1. es posible usar el lenguaje simbólico o lenguaje ensamblador. 7.1.1 Traducción de programas Como recursos útiles para la escritura del software del sistema. estos son: • Interpretadores. Son programas fáciles de escribir pero son de lenta ejecución debido a . Para aprovechar las ventajas de programar el µP usando su conjunto de instrucciones. existen programas traductores que permiten realizar la conversión desde un archivo fuente en lenguaje simbólico o de alto nivel. En realidad el código de máquina permite expresar algoritmos de forma que puedan ser decodificados o interpretados por la unidad de control del µP. Para cada posible operación existirá una subrutina para realizarla. es posible deducir la función del programa con la información que se obtiene de la inspección de la columna cuatro de la tabla 7. Un traductor es un programa que convierte secuencias de instrucciones de una forma a otra. Algunos μC de uso didáctico aceptan la entrada de instrucciones directamente en hexadecimal. El lenguaje de máquina no fue diseñado pensando en la comunicación con humanos. tal como ilustra la columna tres de la tabla 7. Los traductores abarcan interpretadores. Los interpretadores ejecutan directamente la operación resultante del proceso de análisis del programa fuente. Los traductores pueden distinguirse en dos grupos principales de acuerdo a la operación que ejecutan al analizar el programa fuente. debido a las considerables dificultades que supone escribir los códigos de operación y los datos usando los sistemas de representación binario o hexadecimal. almacenarlas en memoria y ejecutarlas. encargándose el programa monitor de realizar la conversión a binario de las instrucciones. la complejidad para entenderlo persiste. Aunque esto resulta en una versión simplificada del programa en binario. La programación directa en código de máquina no debiera considerarse como opción para el desarrollo del programa de aplicaciones basadas en µP. ensambladores y compiladores y permiten al programador expresar un algoritmo (instrucciones y datos) en un lenguaje adecuado para la comprensión por parte de seres humanos. consiste en usar el sistema de numeración hexadecimal para la codificación de las instrucciones. al código objeto ejecutable por la CPU. • Generadores. y esto no es una falla del diseñador del μP. por teclado o terminal.Desarrollo y Simulación de Programas 296 Una forma simple de facilitar el arduo camino que significa desarrollar programas en lenguaje de máquina. Observe que con cierta destreza.

En realidad ambos métodos de traducción son ampliamente usados.1 Métodos de traducción de programas en un computador Aunque los interpretadores no se recomiendan como una opción viable para el desarrollo de programas para µPs. esto no significa que la técnica de interpretación no sea utilizada.Desarrollo y Simulación de Programas 297 que toda instrucción del archivo fuente es analizada cada vez que ejecuta el programa. mientras que los orientados al usuario (C. Esta opción puede ser útil para propósitos didácticos o puede ser usada durante el desarrollo del programa. Pascal. En general. El código resultado de la interpretación del programa fuente es de gran tamaño. Para µPs de 8 bits existen interpretadores como el FORTH. BASIC y algún interpretador C. Este tipo de traductor no se considera en este trabajo. En contraposición. un interpretador por hardware se encarga de . ADA) se les denomina compiladores. Como puede observarse en la figura 7. los generadores crean un código objeto posible de ejecutarse en un tiempo posterior a al conversión del programa fuente. como los ensambladores. Fig. debido a que debe mantenerse en memoria no sólo la rutina a procesar sino también el programa kernel encargado de interpretar y ejecutar el programa de usuario. 7.1. lo cual significa que la traducción es simultánea a la ejecución. el término generador se aplica a programas orientados a la máquina.

El traductor denominado ensamblador se encarga de la conversión a lenguaje de máquina del programa fuente escrito con los nemónicos que identifican a cada instrucción de la máquina. Un interpretador microprogramado se encarga de realizar la traducción desde el lenguaje de la máquina a las operaciones internas que conducen a la ejecución de cada instrucción. y es más polémico aun entre los diseñadores de sistemas empotrados. ¿Cuál lenguaje debe usarse en un curso de introducción a la programación de µPs? El lenguaje de alto nivel más utilizado en la actualidad para programar µCtrls. es de suponer que esta proporción se mantiene para otros dispositivos usados en sistemas empotrados. más bien consiste en elegir el lenguaje más apropiado para escribir los programas incluidos en una guía introductoria de sistemas microprocesadores. es el C. la elección del lenguaje de soporte se reduce a dos posibilidades: lenguaje ensamblador o de alto nivel. Los programas del sistema operativo son traducidos a lenguaje de máquina por un interpretador. automatiza la programación en código de máquina. Existen compiladores C para todos los microcontroladores existentes en el mercado y para microprocesadores de 8 bits como el Z80 y el 8085. El grupo restante. usa otros compiladores.2 Lenguaje ensamblador o de alto nivel Descartada la opción de programar el µP usando directamente el código numérico de máquina. La compilación de un programa fuente escrito en un lenguaje de alto nivel. Dada el extenso uso de la familia MCS-51 en aplicaciones industriales. El objetivo de la traducción es entregar como salida un programa en el lenguaje de la máquina Los programas escritos en lenguaje ensamblador son traducidos por el programa ensamblador a código de máquina. El interés es establecer. Constituye un recurso que en la práctica. no se pretende intervenir en tal controversia.8052. mientras que un 35 % programa en C. y se supone la existencia de algún compilador para el microprocesador usado en la aplicación. los ensambladores . produce como salida otro programa en lenguaje ensamblador. Una encuesta realizada el año pasado entre los usuarios del sitio WEB http://www. o directamente en código de máquina.Desarrollo y Simulación de Programas 298 trasladar las instrucciones en lenguaje de máquina a las acciones internas que resultan en la ejecución del programa. 7. En su forma más simple. En el primer. reveló que el 52 % de los programadores de la familia de µCtrls 8051 utilizan el lenguaje ensamblador. También un interpretador traslada las instrucciones del sistema de operativo a código de máquina.com.1.1 muestra el uso de los métodos de compilación e interpretación en un computador. Nuestro objetivo no es seleccionar el mejor lenguaje para desarrollar soluciones basadas en µP. En esta sección. entre otros. caso debe usarse un ensamblador para la traducción final. Esta disyuntiva es un tema tradicional de discusión entre los programadores de computadores. Este escenario se basa en que todo µP tiene al menos una versión de ensamblador. La figura 7.

Esta tendencia ha proseguido hasta la fecha. Estas posibilidades simplifican mucho el desarrollo de un programa. La separación entre el ensamblador y el lenguaje nativo del µP es sutil. Con ensamblador. No obstante. mientras que el código resultante es difícil de entender. la única diferencia con el lenguaje de máquina es que los códigos de operación. La programación en lenguaje de alto nivel reduce significativamente el tiempo de desarrollo y produce programas más fáciles de entender y de mantener que sus equivalentes en ensamblador. operandos y direcciones pueden representarse simbólicamente. En general. COBOL o ALGOL. esto se debe a que las instrucciones hacen referencia explícita a la arquitectura de computador.Desarrollo y Simulación de Programas 299 traducen cada instrucción del archivo fuente en una instrucción en código objeto. en modo alguno el ensamblador constituye la panacea para el desarrollo del soporte lógico del sistema. fueron INTEL y MOTOROLA con los compiladores PLM80 para la familia 8080 y MPL para el µP 6800. Ensambladores más elaborados. y los datos pueden ser expresados en formatos diferentes al sistema binario. Un programa escrito un µP en . Por tal razón. El programador mantiene un control total sobre la máquina. Desde los inicios del desarrollo de los µPs han existidos compiladores de lenguajes de alto nivel. Además de admitir la utilización de nemónicos para identificar las instrucciones. con una correspondencia 1:1. Las primeras empresas en introducir lenguajes de alto nivel dedicados al desarrollo del software de aplicaciones específicas. como FORTRAN. el código resultante de la compilación es de mayor tamaño y de ejecución más lenta que el generado por el ensamblador. realizan la traslación del programa fuente de forma que éste puede ser enlazado con otros programas. siendo inapropiados para desarrollar programas para proyectos de control. de mantener y es no portátil por naturaleza. el propósito de tales compiladores era permitir el uso del µP como CPU de un microcomputador de propósito general destinado al procesamiento de datos. pueden realizarse programas de miles de líneas de código con un eficiente uso de la memoria y un aprovechamiento máximo de la potencia del microprocesador. antes de la ejecución. se pueden usar etiquetas para las direcciones. Las compañías fabricantes de dispositivos y otras empresas de diseño de software ofrecen compiladores destinados a ser usados como recurso de primera línea en la fase de diseño de aplicaciones. No obstante. es usual calificar el ensamblador como un lenguaje de bajo nivel. mientras preserva las ventajas inherentes al uso de código de máquina. El uso de compiladores ofrece cierto grado de portabilidad. ejecutables en sistemas basados en los µPs más populares. Es una tradición suponer que un programa escrito en ensamblador por un programador experimentado. produce un código de menor tamaño y de más rápida ejecución que su equivalente realizado con un interpretador o con lenguaje de alto nivel. La escritura de un software extenso y complejo puede representar una tarea de larga duración y alto costo.

independientemente del lenguaje de programación utilizado. no existiría ninguna duda sobre cual lenguaje emplear para el desarrollo de sistemas empotrados. Antes de alegar alguna razón.. Estos traductores novedosos. que lo afirmado en el párrafo anterior sobre el rendimiento del ensamblador relativo a los compiladores. es preciso destacar como un hecho que un buen programador en ensamblador es capaz de afinar un programa. los programas en alto nivel son sencillos de comprender y simples de mantener. Una consideración de interés en esta discusión es la productividad del programador. Lo cierto es. la eficiencia de un programador en un lenguaje compilado supera en n veces la de aquel que usa ensamblador. de forma tal que se obtenga el código más rápido . Los diseñadores de los nuevos lenguajes de alto nivel para sistemas empotrados. En los compiladores actuales se incorpora a la estructura del traductor una sección que optimiza el código intermedio reorganizando las estructuras de lazo y optimizando la evaluación de expresiones. han introducido técnicas de optimización en la compilación. el cual debe ser traducido a código de máquina. En esta breve discusión se han establecido de modo muy general que las ventajas del ensamblador sobre los compiladores son dos: produce un código que requiere menos memoria para almacenarse y el programa es de ejecución rápida. Además. permiten que el usuario seleccione si debe intentarse que el código a generar sea optimizado para reducir el tamaño o para aumentar la velocidad de ejecución. o una sección de éste. la pregunta es: se justifica programar en ensamblador. ha sido devastadoramente cierto hasta hace algunos años. Esto significa que actualmente es posible obtener. Debido a que una línea de un archivo fuente de alto nivel corresponde a n (3 a 10) instrucciones en ensamblador. incluso por personal distintos a los autores del programa. usando lenguajes de alto nivel. Si estas dos cualidades del ensamblador fuesen irrefutables. principalmente memoria y es usual que el sistema este sometido a restricciones de tiempo críticas. La respuesta es: si. En nuestros días. Esto debido a que en este tipo de aplicaciones se dispone de recursos limitados. La nueva generación de compiladores ha reducido en forma notoria la distancia existente entre el código producto del ensamblaje y el obtenido por compilación. La etapa final de la compilación es el generador de código que produce el programa objeto en lenguaje de máquina. las cuales toman en consideración la limitación de recursos inherentes a tales aplicaciones.Desarrollo y Simulación de Programas 300 lenguaje C. Está demostrado que un programador produce un determinado número de líneas de código en el tiempo. La salida de un compilador puede ser un archivo en lenguaje ensamblador. a expensas de la simplicidad del traductor y de la velocidad de compilación. el panorama se ha visto modificado con la aparición de compiladores más sofisticados. puede ser usado para otro dispositivo si se compila con el traductor correspondiente. o puede entregar en forma directa el código ejecutable.. sin duda alguna. programas de tamaño relativamente pequeños. Entonces.

para una aplicación específica. La eficiencia de la utilización de la técnica mixta está basada en el principio de localidad de las referencias. casi todo el programa se escribe en lenguaje de alto nivel y las rutinas de tiempo crítico se programan en ensamblador. existe la posibilidad que la velocidad de ejecución del código de la aplicación constituya un factor crítico para el desempeño del sistema. En realidad existe una tercera posibilidad que representa una solución más conveniente para programar el sistema. En otros proyectos. responsable del 10% del tCPU. A pesar de la habilidad del compilador para optimizar el código para tamaño y velocidad. siendo más sencillo la realización de retardos precisos o la generación de eventos de duración específica. En algunos casos. Si el 90% del tCPU se invierte en ejecutar el 10% del programa. Esto introduce cierta vaguedad en la posible respuesta del programa a eventos externos en tiempos especificados como críticos.Desarrollo y Simulación de Programas 301 posible. en lapsos largos puede cambiar la secuencia de código que se repite. se escribe en lenguaje de alto nivel. Con este método. Si este recurso está muy limitado. Esto es cierto para espacios cortos de tiempo. . esta parte del código se programa en ensamblador. un buen programa en ensamblador puede reducir la capacidad necesaria para almacenar los programas y los datos. Otro factor que justifica programar en ensamblador se relaciona con el aprovechamiento de la capacidad de la memoria EPROM (EEPROM) de la aplicación. estos traductores no siempre son capaces de determinar cuando una sección del código puede ser sustituida por una simple instrucción. Este establece que durante la ejecución de un programa el procesador hace referencias frecuentes a un conjunto de instrucciones almacenadas en un área pequeña de la memoria. a diferencia del compilador. puede que esto implique un trabajo excesivo y que no se justifique el esfuerzo y tiempo dedicado en perfeccionar el código. La programación en lenguaje de alto nivel hace difícil el seguimiento de la duración de la ejecución de procedimientos e instrucciones. Es obvio. Es común que en estas aplicaciones. en utilizar una técnica mixta que explote la potencia de ambos lenguajes. Algunas acciones de control en tiempo real sean realizadas por el programa. el µP invertirá la mayor parte del tiempo de ejecución en procesar una pequeña sección del código. que programando en ensamblador tiene un absoluto conocimiento y control sobre el tiempo de ejecución de las instrucciones y lazos. como recompensa a una buena dosis de coraje y a un gran esfuerzo. Esta consiste. utilizar lenguaje ensamblador. el tiempo de ejecución de las tareas no sea un factor determinante y en caso contrario. En síntesis. principalmente durante el desarrollo de sistemas empotrados. Pareciera que la opción apropiada es recurrir a la programación en lenguaje de alto nivel cuando. entiende el algoritmo en desarrollo y conoce la estructura y la más recóndita instrucción del programa. Un programador en código de máquina. pero la validez del principio se mantiene. en tal forma que es capaz de lograr que secciones de código sean más eficientes. El 90% restante del programa.

Usando el ensamblador. además de hacer más fácil la tarea de programar en lenguajes de mayor nivel y de capacitarlo para la escritura de rutinas para la librería del compilador. La forma en que el programador en ensamblador debe manipular los registros del µP. y se reprograma en ensamblador. el uso del lenguaje ensamblador es una necesidad ineludible. Como resultado se obtiene un programa con velocidad de ejecución comparable al escrito en ensamblador y con costo de desarrollo mucho menor. Parece evidente que pese a las desventajas inherentes a la programación en lenguaje ensamblador. El tipo de problemas a resolver usando el µP. Para cerrar esta discusión se mencionan tres: • Una mejora en la velocidad de ejecución en el código crítico de una aplicación puede ser la única opción para la viabilidad del proyecto. por medio de la expresión: y = 159 ⋅ x = y = 159 ⋅ 3 = 159 ⋅ 30000 100 El algoritmo usado para hallar la raíz cuadrada de N es: ⎞ 1⎛ N + xn ⎟ ⎜ 2 ⎝ xn ⎠ x n +1 = . Para finalizar la discusión sobre el nivel del lenguaje a utilizar para programar el µP. el programa integro se escribe en lenguaje de alto nivel.33. usualmente tienen restricciones de tiempo y el código a desarrollar no es necesariamente muy extenso. la salida del compilador puede ser un programa en ensamblador. el estudiante se mantendrá en contacto continuo con la arquitectura de la CPU y se enfrentará a la programación directa de circuitos programables de interconexión de E/S. De modo que el programador debe estar en capacidad de escribir esta sección del programa en ensamblador. una guía para el aprendizaje de los fundamentos de sistemas de microprocesadores. la memoria del sistema y los dispositivos de E/S permitirán al estudiante adquirir una base sólida en programación de µPs. • Finalmente. Las razones son varias y algunas han sido mencionadas. es necesario que el estudiante conozca el lenguaje. lo cual significa que para que comprender el funcionamiento de los compiladores debe estudiarse el ensamblador. Este ejercicio presenta un código escrito en ensamblador para calcular el valor de y. Al ser el material que se presenta. • La segunda razón se apoya en que las rutinas de librería de los lenguajes de alto nivel deben escribirse en ensamblador. El programa se ejecuta y se detectan las secciones de código a las cuales se dedica el mayor tCPU. considere el ejemplo 6.Desarrollo y Simulación de Programas 302 Lo usual es que durante el desarrollo del software.

Un ejemplo se muestra a continuación. DIV1616 y RAÍZ escritas en ensamblador comprenden aproximadamente 79 líneas de código. :10000000213F00460548237E23BEDA120056772B97 :10001000722305C207000D41C21C0076214000C3B7 :020020000700D7 :0A003F0009082345677D889099F5B4 :00000001FF Fig.y. Ejemplo 6. } y=(159*x)/100. N=x. main () { x=3*10000. permite que el proceso de programación se realice en un PC y que el código sea cargado en la tarjeta prototipo y ejecutado desde la memoria RAM.xn. xn=(N/x+x+1)>>1.x.33 escrito en lenguaje C int N. Este estándar.3 El formato HEX-INTEL Las opciones de compilación. while (x != xn) { x=xn. 7. 7. } Como se observa se requieren sólo diez líneas de código. es un archivo ASCII el cual contiene un registro por línea. xn=(x+1)>>1.Desarrollo y Simulación de Programas 303 El programa principal MAIN y las subrutinas MUL168. Uno de los más usados es el formato HEX INTEL.2 Archivo HEX INTEL . También el archivo en formato HEX INTEL puede ser convertido a binario y cargado en un simulador del µP o en un grabador de EPROM. pero el archivo generado por el compilador C ocupa 471 posiciones de memoria. El archivo ejecutable ocupa 118 bytes de memoria. ensamblaje y enlazado de las herramientas para desarrollo de programas para microprocesadores. permiten seleccionar el formato del archivo que contiene el código que va a ser grabado en EPROM. Esto significa que el uso de MICRO-C genera un código objeto con cuatro veces el tamaño que el resultante de usar el ensamblador. Una versión de este programa fue realizada usando el compilador MICRO-C para el 8085 y se muestra a continuación.1. Un programa en formato HEX.

Se obtiene calculando el complemento dos de la suma sin acarreo de todos los bytes anteriores de la línea exceptuando el marcador de registro (:) Dos últimos . 0021H. No incluye los nueve primeros ni los dos últimos caracteres de la línea. Para calcular el byte de verificación se realiza la suma hexadecimal: 02 + 00 + 20 + 00 + 07 + 00 = 29H El complemento dos de 29H es D7H 29H + D7H = 0 Tabla. se obtiene: :020020000700D7 : Marcador de registro. 0700 Datos. Esta es la información a cargar en la EPROM o en la memoria del simulador o emulador. Los siguientes dos caracteres (02H) indican que la línea contiene 2 bytes de datos.Desarrollo y Simulación de Programas 304 Cada uno de los registros del archivo de la figura 7. Se expresa con cuatro dígitos hex (0000H-FFFFH) Tipo de registro: Estos dos caracteres identifican el tipo de registro para la línea.2 Formato HEX INTEL. D7 Byte para verificación por suma total. 00 Tipo de registro: datos. 7. La línea se inicia con el carácter dos puntos. Longitud de registro: El número de bytes de datos expresado con dos dígitos hexadecimales. señalando que corresponde a un registro en el formato HEX INTEL. Los más comunes son: 00 01 02 Registro de datos Registro de fin de archivo Registro de direcciones de segmento extendido 2-3 4-7 8-9 10 Datos: A partir del décimo carácter se encuentran los bytes de datos útiles. Se representa como dos dígitos hex. CARÁCTER DESCRIPCIÓN 1 Marcador de registro: El primer carácter de una línea siempre es ‘:’ para identificar el inicio de un registro. Dos bytes de datos. Los últimos dos caracteres D7H son el checksum de la línea. El próximo par de caracteres: 00H. El primer byte de dato es 07H y el último es 00H.2. informa que la línea es un registro de datos. 02 Longitud del registro. 0020 Dirección de carga 0020H. los cuales deben ser cargados a partir de la dirección 0020H. Dirección: Este campo indica la dirección de memoria donde se cargaran los datos. Aislando los campos de la línea tres del archivo ejemplo. Checksum: Este campo es la verificación por suma total para la línea.2 tiene el formato indicado en la tabla 7.

y además se ejecute a mayor velocidad.33. A pesar que el traductor C se ofrece como un compilador moderno. el código generado por el ensamblador y el compilador C de un microcontrolador MCS-51. Aunque los compiladores modernos y las nuevas arquitecturas de los microcontroladores intentan día a día que el archivo de salida ocupe menos espacio en memoria.4 Salida del compilador MICRO-C 8085 para la versión en C del ejemplo 6.Desarrollo y Simulación de Programas 305 En la figura 7.32 y la figura 7. Es notable que el tamaño del código generado por el compilador C sea mucho mayor que el correspondiente en ensamblador. 7. se mantuvo la diferencia de tamaño entre los archivos generados por ambas herramientas. Compiladores C para el 8085. puede considerarse que los ensambladores se mantienen como líderes en la competencia de generar código pequeño y de velocidad alta. usando una rutina de prueba. utilizan técnicas de optimización que disminuyen el tamaño del código de salida. En realidad el compilador MICRO-C tiene algunas deficiencias. :0E0000001110270E03CD1700CD4F000E9FCD1F :09000E0017000E64EBCD2B007607 :0E0017007906080E00616C298FD22500198928 :0600250005C21E004FC9D8 :0E002B003E10210000EB29EBD23B00292CC334 :0E0039003C00291CF57D996F7C9867D2490028 :080047001D09F13DC23000C9A2 :0E004F002230087C0F477D1F4F2A3008EBCD72 :0E005D002B00606919237C1F577D1F5F78BA46 :0B006B00C2710079BBC8424BC35800B3 :00000001FF Fig.3 se muestra el archivo HEX generado por el ensamblador para el programa del ejemplo 6. :20400000310060AF32E341CD6A41CF396EC9E56069C139716069C9397E23666FC9E5606982 :20402000C1397123706069C9EB5E23562BEBC9EB7323722BEBC97E23666FC97D02037C023E :20404000C97D079F67C9EB4E23462378B1CA5E407E23BBC258407EBA23C24740C5C97E2365 :20406000666FE92B7C2F677D2F6FC97CB5210000C023C979956F789C67C9D5EB2100007B46 :204080000FD2854009A77A1F577B1F5FB2CA9A4079174F781747B1C27F40D1C9CDA24060FB :2040A00069C9D5EB2100003E1132D741A779174F7817473AD7413DCAD84032D7417D176F3A :2040C0007C1767BADAAC407DC2CF40BBDAAC40936F7C9A6737C3AD40D1C979A56F78A46787 :2040E000C979B56F78B467C979AD6F78AC67C97CB5CAFF40A7781F47791F4F2DC2F44060EC :2041000069C97CB5CA1241A779174F7817472DC207416069C9CD5F41C82BC9CD5F41C02B79 :20412000C9E56069C1CD4F41D82BC9CD4F41D8C82BC9CD4F41D02BC9E56069C1CD5F41D858 :204140002BC9CD5F41D8C82BC9CD5F41D02BC978ACF25F41210100A0FA5D41B5C937C97833 :20416000BCC2664179BD210100C921307522DD412ADD4122DB412ADD41444D210100094425 :204180004D210100CDEF4022DF412ADF4122DD417CB5CAC0412ADF4122DD412ADB41444D8B :2041A0002ADD41CD9C40444D2ADD4109444D21010009444D210100CDEF4022DF41C38A41F1 :1741C0002ADD41444D219F00CD7A40444D216400CD9C4022E141C9FC :00000001FF Fig.33. El autor comparó. con costo elevado.3 Salida del ensamblador para el programa del ejemplo 6.4 presenta la salida de compilador C para el mismo programa. 7. .

La comunicación entre módulos debe ser mínima. Este debe. Tales formas lógicas pueden constituir lazos de código o estructuras condicionales 7. 1. 3. Para escribir el programa se usan sólo ciertas estructuras lógicas de programación. Código estructurado. Programación modular. Realizar una función única. Contener todas las instrucciones necesarias para llevarla a cabo. el programador debe prestar especial atención al uso de técnicas que faciliten el desarrollo de diagramas de flujo y de programas. Al inicio se define la función global del programa (módulo principal) como un conjunto de subfunciones generales (módulos específicos). Los módulos se programan usando procedimientos. Diseño hacia abajo.Desarrollo y Simulación de Programas 306 7. Cada uno de los módulos en los cuales se divide el programa debe tener una entrada y una salida.2 ESTRUCTURA DEL PROGRAMA Para realizar el proceso de representar un algoritmo como un programa capaz de realizarlo. Entre estas técnicas se consideran. 1.2. 3. 2. codificado y probado en forma independiente. Esta técnica simplifica en forma notable el proceso de diseño y el mantenimiento ulterior de los programas. éste puede contener más de un procedimiento. 2. No existen reglas totales para la programación modular con relación al número de líneas que debe tener un módulo para formar parte de un programa eficiente.1 Programación modular Consiste en seccionar el programa en rutinas. Cada módulo puede ser escrito. Tener una entrada y una salida . la cual debe ser independiente de las que realizan los otros bloques del programa. las cuales pueden ser escritas y probadas por separado para posteriormente ser integradas en un programa capaz de resolver el problema propuesto originalmente. y debe realizar una función única. Sólo deben cumplirse con tres reglas básicas al escribir cada módulo. El desarrollo de un programa extenso y complejo se facilita si el código es separado en bloques funcionales que contengan un número relativamente pequeño de instrucciones. A continuación el diseño continúa en descenso hasta cuando cada subfunción es definida y los módulos son programados. Dependiendo de la complejidad de la tarea que realice un módulo específico. El programa está compuesto por procedimientos o módulos cada uno de los cuales realiza una función específica.

la programación de rutinas funcionales permite establecer una biblioteca de procedimientos factibles de ser usados en programas futuros.2 Diseño hacia abajo Este método de diseño descendente permite organizar el programa como un conjunto de bloques de código relacionados en forma jerárquica. En el nivel superior se encuentra el programa principal. pero no siempre es de este modo. éstos son enlazados y relocalizados para formar un bloque único de código. es necesario escribir rutinas para depuración de los módulos. mas simples de escribir y de depurar que un programa extenso. En ambos casos.2. que ésta técnica ha sido adoptada como un recurso de presencia obligada durante el proceso de diseño y escritura del software de soporte de aplicaciones basadas en microcontroladores y microprocesadores. éstas son fáciles de encontrar y corregir. En la práctica cualquiera sección de código que realice una función específica. Otra ventaja de la programación modular es patente cuando un programa desarrollado y en operación debe ser modificado. pueden señalarse algunos puntos débiles del uso de módulos. 7. el cual puede ser cargado en memoria y ejecutado. Un módulo particular está constituido usualmente por un procedimiento. Las unidades de código pueden ser escritas por más de un programador y en forma independiente. Una vez verificados los módulos en forma independiente. ubicados en el nivel 1.5 corresponde a un módulo del programa. 20 y 30. Esto puede responder a que un procedimiento particular debe ser reformado o que nuevos módulos deben ser incluidos. La cesión del control del programa a los módulos consume tiempo de CPU y memoria. Además.Desarrollo y Simulación de Programas 307 La técnica de programación modular disminuye el tiempo de desarrollo de un programa. Debido a que las fallas de posible aparición durante el proceso de depuración de un programa son especificas de cada módulo. No obstante. Los procedimientos individuales deben ser relocalizables y debe disponerse de un programa enlazador (linker). La subtarea ejecutada . puede ser un módulo. los cuales son verificados antes de la prueba del programa final. Cada rectángulo del diagrama de tres niveles de la figura 7. pero que en modo alguno pueden considerarse desventajas significativas. al separar la función global del código en tareas pequeñas realizadas por subprogramas cortos. La programación modular requiere de sostén extra de programas para desarrollo. Los beneficios obtenibles por el diseñador con la utilización de la técnica de programación modular son de tal proporción. los cambios necesarios pueden realizarse sin afectar al resto de los archivos del programa. el cual para realizar la tarea llama a 10. Finalmente.

La ventaja más resaltante del método de diseño en descenso es que no requiere codificar y probar todos los módulos y posteriormente realizar la prueba del programa. 7. como resultado de la suma de pequeñas subtareas propuestas en forma general. 2. 1. el código auxiliar correspondiente es sustituido por el código operativo. Existen algunos defectos que pueden afectar negativamente los resultados obtenibles al aplicar esta técnica. el cual incluirá las llamadas necesarias a los módulos restantes del programa. Fig. Es obvio que la escritura de los programas auxiliares puede ser una labor compleja y en casos extremos. debido . imposible de realizar. cada módulo es codificado y depurado. 7. Durante la segunda fase. 12 y 13. el proceso continúa con la progresiva sustitución de cada proposición con secuencias específicas de código. cada rutina puede substituirse por un código auxiliar que entregue la misma respuesta que debería entregar el subprograma codificado y verificado.2.3 Código estructurado El uso de programación estructurada como método de desarrollo de programas es una vía para eludir el uso indiscriminado de instrucciones tipo GO TO.5 Organización jerárquica de los módulos Una vez establecida la tarea que debe realizar el programa. El módulo principal debe se cuidadosamente definido. Una vez verificado un módulo. mientras que 20 usa a 21 y 22. 3. El módulo 30 no llama a ningún procedimiento. Cualquier error en el diseño o escritura de esta sección causará resultados fatales en la eficiencia u operatividad del programa desarrollado. Codificados todos los módulos. escrito y depurado. Esta técnica convierte el proceso de desarrollo de un programa en una serie de etapas donde se mezclan la escritura y depuración de secciones de código. se prueba el programa final.Desarrollo y Simulación de Programas 308 por el módulo 10 requiere que éste llame a 11. La primera fase del diseño consiste en escribir y depurar el módulo principal. Para la prueba.

tendrá una entrada y una salida y las instrucciones se ejecutarán tal como están almacenadas consecutivamente en memoria. WHILE-DO. La programación estructurada requiere un lenguaje en el cual las estructuras de control puedan ser codificadas. Una tarea o proceso puede consistir de: una operación de lectura de un puerto de entrada para adquirir datos provenientes de un convertidor análogo digital. IF-THEN/ELSE. A pesar que es imposible alcanzar el nivel de estructuración posible en lenguajes de alto nivel. . ampliamente usadas en lenguajes de programación de alto nivel. 3. La aplicación práctica de teoremas de estructura ha verificado que un programa con cualquier grado de complejidad puede ser desarrollado sin el uso de instrucciones GO TO concibiéndolo en términos de tres estructuras lógicas de control básicas: secuencial. Considerando las variantes de las estructuras condicionales y lazo.Desarrollo y Simulación de Programas 309 a que este comando de bifurcación resulta en el desarrollo de programas confusos y difíciles de analizar. También representa un proceso: un programa completo o una sección de este que resuelva un problema matemático o ejecute algún tipo de procesamiento de datos. debido a que la construcción de lazos y proposiciones CASE en este lenguaje. En cualquier caso. ejecutándose cada instrucción hasta la finalización del programa.6 se muestra la secuencia de ejecución de tres procesos. Estas son: 1. existe cierta dificultad para programar en forma estructurada usando lenguaje ensamblador. Toda sección de código que realice una tarea representada por la realización de una acción especifica y distinguible. 4. se tienen cinco tipos comunes de formas lógicas simples. En la figura 7. REPEAT-UNTIL. el procesamiento se inicia en la entrada de la rutina. Para escribir un programa eficiente no se requieren estructuras complejas de control. 5. 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. es factible el uso de código estructurado en programas en ensamblador. la carga inmediata de un valor en el acumulador o de una secuencia de código que programe convenientemente los dispositivos de E/S conectados al sistema. CASE. condicional y lazos. implica el uso de instrucciones de salto. SECUENCIAL 2. En la práctica.

7.Desarrollo y Simulación de Programas 310 Fig. el programa completo descrito por la figura 7. de acuerdo con el resultado de la prueba.6 Estructura secuencial. fáciles de entender y de modificar. El resultado es el desarrollo de programas más eficientes. en el otro. se combinan para formar algoritmos lógicos más complejos. una proposición fija las condiciones que se requieren para el control de la dirección de ejecución del programa. En las otras estructuras de programación. Cuando se ejecuta la proposición. los cuales también disponen de solo una entrada y una salida. al sentar las base de la técnica de programación estructurada. Una tarea particular puede ser realizada por una instrucción simple o puede ser necesaria una secuencia larga o compleja de instrucciones para programarse la tarea. En ambos modos la culminación de la ejecución del código implica la salida de la rutina. el resultado de la prueba conduce a la ejecución de un proceso determinado. con una entrada y una salida. se prueba una condición y se transfiere el control hacia una de dos vías. Dependiendo de la estructura básica. Si cada proceso corresponde a una instrucción. La utilización de éstas estructuras lógicas simplifica el desarrollo de programas. en la cual un conjunto de módulos. constará de tres instrucciones.5. Los procesos individuales pueden tener un nivel de complejidad interna variable. o la salida del módulo. la transferencia puede producir dos acciones: en un caso. . se selecciona uno de dos más procesos posibles.

7. b) IF-THEN/ELSE (b) Ejemplo 7. IF condición 1 THEN proceso 1 ELSE proceso 2 En la figura 7.Desarrollo y Simulación de Programas 311 Estructura IF-THEN/ELSE Un elemento de decisión es usado para aprobar la ejecución de un proceso o para seleccionar entre la ejecución de uno de dos procesos. La forma general de la proposición es.7 se muestra el algoritmo de esta estructura de código y en el ejemplo 7. En el primer caso la estructura se reduce a IF-THEN.7 Estructuras de control: a) IF THEN. escriba un programa para activar la bandera de acarreo e iluminar un LED conectado al bit 7 del puerto de salida 20H. .1 Usando la estructura lógica IF-THEN/ELSE. En caso contrario el indicador de acarreo debe ser 0 y se activará un LED conectado al bit 3 del mismo puerto de salida. (a) Fig.1 se presenta el listado de n programa que usa la estructura lógica IFTHEN/ELSE. si el dato en el puerto de entrada 20H corresponde al caracter ASCII ‘R’.

8 Diagrama de flujo del programa del ejemplo 7.Desarrollo y Simulación de Programas 312 En la figura 7. noesr: led: Fig. . Observe que al realizarse la tarea correspondiente se produce la salida del programa. .8 se muestra el diagrama de flujo del código y a continuación el listado del programa. Salto a escribir en puerto 20h.1 Una vez realizada la lectura del puerto 20H se compara el valor en el registro acumulador con el código 52H. el cual es probado con una instrucción JZ de salto condicional. 80h jmp led stc cmc mvi a. Salto si el caracter no es ‘r’. 08 out 20h hlt . Se escribe en puerto de salida 20h. Se complementa cy . Cy=1. . Lee el puerto 20h. Bit 7 del a a 1. . entre dos posibilidades. . . 7. in 20h cpi 52h jnz noesr stc mvi a. Bit 3 del a a 1. Cy=1. . El elemento de decisión es el estado del bit de cero Z. .Compara el contenido de a con ‘r’. . para determinar la secuencia de instrucciones a ejecutarse.

La estructura CASE es la segunda vía disponible para selección múltiple. La proposición CASE permite que el valor de una variable entera entre 0 y n. Si ninguna condición es verdadera se ejecuta el último proceso. determine cual de varios procesos debe ser ejecutado. . El valor índice puede ser .Desarrollo y Simulación de Programas 313 Estructura CASE Es usual que un programa deba seleccionar la realización de una tarea dentro de un grupo de opciones. de la forma. 7. Una vez realizada la tarea seleccionada se sale del programa. . Este tipo de selección puede complicar innecesariamente un programa. IF condición 1 THEN proceso 1 IF condición 2 THEN proceso 2 IF condición 1 THEN proceso 3 . Para codificar una estructura de selección múltiple existen dos caminos: el primero es utilizar varias proposiciones IF-THEN y una IFTHEN/ELSE. ELSE proceso n Fig.9 Selección múltiple Se ejecutará el proceso correspondiente a la condición que sea verdadera.

2. . 1. Suponga ahora que desee escribir una rutina con estructura CASE para ejecutar uno de cuatro procesos diferentes. . Los .Desarrollo y Simulación de Programas 314 resultado de la evaluación de una expresión o puede ser suministrado por un periférico. ó 3. este dígito puede ser: 0.10 Estructura CASE Para el caso igual a i se ejecuta el proceso i. la cual contiene las direcciones de inicio de los cuatro procesos. según indique un número binario almacenado en el registro E. auque puede programarse algún código de protección contra tal eventualidad. proceso n Fig. Para codificar la proposición CASE se usará una tabla de saltos almacenada en memoria. 7. y así sucesivamente. al culminar la ejecución de la tarea seleccionada. La forma de la proposición CASE es. Si el valor índice es mayor que n. Los dos primeros bytes de la lista contienen la dirección de inicio de la rutina correspondiente al proceso 0. el control abandona la rutina. el comportamiento de la proposición CASE es impredecible. CASE variable proceso 0 proceso 1 .

Conocido el proceso a ejecutar se debe encontrar la dirección del proceso en la tabla. . . Para el acceso a la tabla se programa un modo de direccionamiento conocido como base más desplazamiento. . Conviene utilizar direccionamiento indirecto por registro para acceder a la tabla. Byte alto del desplazamiento de la tabla a cero. haciéndose efectiva la ejecución del proceso. como indica la tabla 7. El byte alto de la dirección de salto en d. El byte bajo de la dirección de salto en e.m h d. Con este registro apuntando la posición deseada se transfiere desde la memoria hasta el registro DE la dirección de la posición de que contiene la rutina. su dirección en la tabla estará a partir de la posición de memoria base + 2*i. . . Para crear la dirección se carga la base del arreglo en HL y se le suma dos veces el valor del número del proceso. tabla d d e. Intercambiar los contenidos de hl y de.3 Ubicación de las direcciones de salto Dirección en la tabla Byte alto Byte bajo Proceso 0 base+1 base 1 base +3 base+2 2 base +5 base+4 3 base +7 base+6 Observe que si nos ubicamos en el inicio de la tabla. .Desarrollo y Simulación de Programas 315 elementos de la tabla ocupan 8 bytes de memoria. Esto significa que si el número es 3.m . para apuntar la dirección de inicio del proceso. mvi lxi dad dad mov inx mov xchg pchl d. obteniéndose la dirección en HL.0. . Sumar de nuevo . HL apunta a dirección siguiente. Cargar hl con la base de la tabla. Tabla 7. h. mientras que el desplazamiento señala la ubicación relativa en el arreglo de un elemento de 16 bits. basta con ir a la dirección base+6 para encontrar el byte de orden bajo de la dirección de salto. La posición del elemento seleccionado en la tabla está almacenada en el registro par HL. donde la base representa la dirección de inicio del arreglo de datos. Si llamamos i el número del proceso a ejecutar. Sumar el desplazamiento a la base de la tabla. Esta información se transfiere a HL y finalmente al contador de programa. . bastará desplazarse dos veces el valor del número binario de entrada. El número de la tarea a ejecutar se encuentra el registro E de 8 bits.3.2 Escribir un programa con estructura CASE utilizando una tabla de saltos. Saltar al proceso. Ejemplo 7.

Ejemplo 7. la tarea se realizará repetidamente. se repiten aquí. En este caso el lazo debe repetirse 16 veces para lograr la transferencia del bloque de datos de 16 bytes. Estructura DO-WHILE Las instrucciones de salto permiten el establecimiento de lazos de programación.11 Estructura DO-WHILE. Pero. En tanto esta condición sea cierta. y el resultado de la prueba indicará si se debe ejecutar el lazo o salir de este. cada rutina de proceso debe asegurar que una vez ejecutado. Cuando se utiliza un contador podría concebirse como ejecute el proceso mientras el contador sea distinto de cero. En esta estructura la condición al inicio del lazo es repetidamente evaluada. en los cuales un grupo de instrucciones se ejecutan repetidamente mientras una instrucción de salto condicional se encarga de controlar la repetición y salida del lazo. debido a que el contador se decrementa antes de la ejecución del primer lazo. Aunque las dos últimas estructuras de control se discuten en el capitulo 6. el control de programa vaya a la misma dirección de la memoria. la condición será falsa y se saldrá del programa.Desarrollo y Simulación de Programas 316 Para garantizar que la estructura CASE tenga una entrada y una salida. Fig. .3 Este programa transfiere un bloque de 16 datos desde una zona de memoria con dirección de inicio en DORG. Cuando el contador llegue a cero. el contador debe cargarse con un valor N. siendo (N-1) el número de veces que debe repetirse el lazo. para mantener la continuidad. 7. hasta otra área con dirección de inicio DDES.

12 Estructura REPEAT-UNTIL En el caso que se use un registro como contador para el control del lazo. . Fig.17 b salir a. en REPEAT-UNTIL se ejecuta por lo menos una vez. salir de la rutina. Si el último dato fue transferido.m d l e lazo . la proposición puede concebirse como: repita el proceso hasta cuando el contador alcance cero. Inicializar el contador de número de datos a mover.Desarrollo y Simulación de Programas 317 lazo: lxi lxi mvi dcr jz mov stax inr inr jmp h.ddes b. Incrementar apuntador de bloque destino salir: Estructura REPEAT-UNTIL En este tipo de proposición.dorg d. Leer un dato desde el bloque origen. el control entra al lazo y el proceso es ejecutado incondicionalmente. . 7. Cargar en de la dirección de inicio del bloque desti no . Cargar en hl la dirección de inicio del bloque origen. . Incrementar apuntador de bloque origen. . se ejecuta la tarea. Mientras la condición sea falsa. Disminuir contador. . Transferir el dato al bloque destino. Cuando sea verdadera . . posteriormente se prueba la condición 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.

salir: Es obvio que el número de veces que el lazo se repite es desconocido. .4 lazo: lxi h. facilitando la escritura o lectura de un programa.m stax d inx h inx d dcr b jnz lazo .5 Considere que un grupo de datos numéricos almacenados en una tabla en memoria deben ser transferidos al puerto de salida 1. Si el último dato fue transferido. . Cargar en hl la dirección de inicio del bloque origen. Cargar en hl dirección de inicio de la tabla. . Comparar el dato en a con el caracter ‘p’. . . Aunque la sintaxis y potencia del traductor . No siempre estas dos últimas estructuras de programación requieren un contador para el control de repetición del lazo.4 muestra el código del ejemplo 7. es posible mantener activo el lazo hasta la ocurrencia de un evento externo. dado que es fijado por la localización del caracter ‘P’ en memoria. Repetir lazo. Inicializar el contador de número de datos a mover. Incremente hl.tabla a. . .Cargar en de la dirección de inicio del bloque desti no .3 EL LENGUAJE ENSAMBLADOR El ensamblador permite representar en forma simbólica el lenguaje de máquina del procesador.3 usando la estructura REPEAT-UNTIL. Ejemplo 7. Cada µP viene con su propio ensamblador. . Transferir el dato al bloque destino. . Incrementar apuntador de bloque destino . Si no es ‘p’. escribir en puerto de salida.m 80h salir 01 h lazo . como la introducción de un caracter por un puerto. lazo: lxi mov cpi jz out inx jmp h. salir de la rutina.ddes mvi b. El final del arreglo de datos es indicado con el código del caracter ASCII ‘P’ (parar). aunque es usual que segundas fuentes provean otras versiones del lenguaje para un mismo µP. . Incrementar apuntador de bloque origen . El ejemplo 7. Si es ‘p’. Ejemplo 7.16 mov a. Mover al acumulador el contenido de m. Una rutina que realiza esta tarea se escribe a continuación. o la lectura de un dato de control almacenado en memoria. Leer un dato desde el bloque origen . salir. 7. Decrementar contador.dorg lxi d.Desarrollo y Simulación de Programas 318 se sale del programa.

y mensajes de posibles errores cometidos en la escritura del texto fuente. el traductor procesa el programa fuente y lo traduce a código objeto.1 El proceso de ensamblaje En su forma más simple un ensamblador lee un archivo fuente escrito siguiendo la sintaxis del traductor.scr. son archivos típicos de entrada para ensambladores del µP 8085A. Opcionalmente. Tales características resultan en el incremento de la productividad del programador al evitarse los errores inherentes a la representación de instrucciones. FFH. algunos . 377Q.asm. • Usar una secuencia de caracteres alfanuméricos (TPULSO. Lo usual es que el archivo objeto tenga un formato adecuado para ser cargado en un grabador de EPROM o EEPROM. cada microprocesador deberá disponer de su propio ensamblador. datos y direcciones convenientemente convertidas a binario. En cualquier de estos casos el código objeto generado por el ensamblador puede ser probado y depurado. Por ejemplo todo buen ensamblador permite.Desarrollo y Simulación de Programas 319 puede variar de una versión a otra. en la memoria de un equipo emulador del µP o para ser entrada de un programa simulador del µP.a85 y nombre. hexadecimal. Cuando el ensamblador traduce el programa fuente también incorpora en el archivo binario generado información adicional además de la versión en lenguaje de máquina del código. LAZO. El archivo objeto contiene el código ejecutable con todos las referencias simbólicas de códigos de operación. direcciones y datos en binario. Por ejemplo: nombre. indicando las direcciones de memoria utilizadas para almacenamiento del programa. • El uso de seudo-instrucciones o directivas para controlar el proceso de ensamblaje. • Definir constantes en bases distintas: 255. 7. Una de las desventajas del lenguaje ensamblador es que al estar íntimamente relacionado con la estructura de la máquina. nombre. y simplifica el proceso de modificación y documentación de los programas. 11111111B.3. • La asignación de direcciones de memoria usando expresiones aritméticas. Esta información permite control de la carga en memoria del código ejecutable. LAZO1) para el manejo simbólico de direcciones. El nombre del archivo es elegido por el usuario y su extensión es fijada por el diseñador del traductor. El ensamblador genera además un archivo texto o programa lista que contiene una combinación del programa fuente y el código de máquina generado. existen ciertas características comunes.13. Como muestra la figura 7. octal y binario respectivamente. • Reservar áreas de la memoria para el almacenamiento del programa y los resultados. representan el mismo número en decimal.

manteniendo un registro en una tabla de símbolos. el archivo objeto contiene todas las direcciones de carga del código especificadas pudiendo ser cargado directamente en memoria. En el momento de la traducción el ensamblador conoce las direcciones de memoria donde se cargarán todas las etiquetas del programa. el cual se inicia por defecto en la dirección 0000H. el cual ofrece una herramienta de diagnóstico para el desarrollo de programas.lst o nombre. El contenido del LC puede ser modificado por el comando ORG dirección. Este tipo de archivo se conoce como archivo objeto absoluto. o con una etiqueta como DIRM. y la referencia cruzada como nombre. El proceso descrito supone la existencia de un solo archivo fuente. su clase. 7. El ensamblador se encarga de determinar el valor absoluto de la dirección y lo asigna a la etiqueta. El archivo lista se identifica como nombre. La función del ensamblador que permite superar estas limitaciones se denomina relocalización y capacita al programador par codificar un programa o partes de éste sin desvelarse por la . Este modo de programación es ineficiente porque especificar la dirección de carga del código en memoria impide la ejecución del programa en otra área de memoria y el desarrollo de programas en forma modular. al contener información sobre los símbolos usados.crf.prn. Fig.3.7.Desarrollo y Simulación de Programas 320 ensambladores entregan otro archivo texto denominado referencia cruzada. Al final del proceso de traducción. dirección y líneas del programa donde aparecen.2 Proceso de ensamblaje de un programa modular El ensamblador genera un código objeto absoluto cuando en el programa fuente todas las direcciones se declaran en forma absoluta. Una dirección puede expresarse como un número: 0100H. Esto requiere que el programador conozca y defina las direcciones de carga en memoria de las instrucciones de datos del programa.13 Salidas del proceso de ensamblaje Al inicio del ensamblaje. el programa ensamblador activa un contador de localizaciones (LC). Este contador se incrementa a medida que se procesa cada instrucción del programa fuente para indicar al ensamblador la posición de memoria donde se ensamblará la siguiente instrucción.

Los segmentos absolutos normalmente se usan (aún en módulos que contengan segmentos relocalizables) para puertos mapeados en memoria o para cargar código en direcciones fijas usadas por el procesador. Un programa relocalizable puede ejecutarse en la dirección cero en un caso. con direcciones lógicas determinadas. los cuales son escritos y ensamblados independientemente. el programa puede requerir el uso de algún código contenido en una biblioteca de programas. Un módulo de entrada tiene un nombre asignado por el usuario y puede contener uno o más segmentos o segmentos parciales.Desarrollo y Simulación de Programas 321 ubicación en memoria del código objeto final. Un programa ejecutable consistirá de un módulo único que es una combinación de los segmentos absolutos y relocalizables de los módulos de entrada. y puede ser absoluto o relocalizable. Un segmento es una sección de código o de datos en memoria generada a partir de código o datos del archivo fuente. Un segmento absoluto identifica una sección de código con su dirección de carga completamente especificada. Además. Es claro que el programa final a ejecutar en el hardware debe hacer referencia a estas direcciones. la aplicación de la técnica de programación modular en el desarrollo de programas con ensamblador es posible gracias a la relocalización de código. el cual debe ser incorporado durante el proceso de traducción al archivo binario ejecutable final. el cual es un software cuya dirección de carga puede cambiar. . El código puede ser movido en el espacio de direcciones del µP y ejecutado en más de una dirección. pudiendo el programador estar en capacidad de diseñar. Esta función hace posible el ensamblaje y depuración de los módulos independientes. El programa constará de varios archivos o módulos. y en 2000H en otro. La relocalización permite la prueba del programa en cualquier dirección y posteriormente la reubicación del código a las direcciones correspondientes al hardware desarrollado. Para ilustrar una de las ventajas de la relocalización de código considere que subsistema de memoria de una aplicación con µP está compuesto por una combinación de memoria EPROM y RWM. codificar. estos se usan para definir código cuya dirección nunca cambiará. es común que en la fase de desarrollo y depuración del software se usen recursos como equipos emuladores o simuladores con un espacio de direcciones de memoria distinto al de la tarjeta de la aplicación. los cuales serán posteriormente enlazados para formar un programa único ejecutable. Además. por ejemplo rutinas de inicio o vectores de interrupción. El uso de la relocalización genera un código reubicable. No obstante. y probar en paralelo módulos distintos del programa y limitar las modificaciones necesarias a un modulo especifico en lugar de hacerlo al programa completo. Los ensambladores son diseñados para permitir el uso de programación modular. las tareas a realizar son definidas y divididas en rutinas. En la etapa inicial de desarrollo del programa.

Estos son combinados por el por el programa enlazador. al cual llamaremos código objeto.Desarrollo y Simulación de Programas 322 Los segmentos relativos contienen código cuya dirección de carga en memoria aun no está definida. 3.14 un diagrama de bloques ilustra el proceso de generación de un programa objeto absoluto a partir de varios módulos de entrada. ORG dirección puede modificar el LC) y toda instrucción o dato subsiguiente es asignado a este bloque de memoria. Los segmentos se definen al inicio del programa. En el segundo paso. Una etiqueta en la primer byte de la sección de código relocalizable se le asigna la dirección cero. En la figura 7. Para segmentos relocalizables la dirección inicial de carga puesta por el ensamblador siempre es cero y el LC se incrementa a medida que se agregan líneas de código. El proceso de traducción de los archivos de entrada que componen cada programa fuente se describe a continuación: 1. El LC apunta al espacio de direcciones dentro del segmento y su contenido representa una dirección lógica para segmentos absolutos o un desplazamiento para segmentos relocalizables. su LC es puesto a cero (en segmentos absolutos. Los segmentos absolutos no tienen atributos y no pueden combinarse con otros segmentos. La activación de un nuevo segmento inicia un nuevo LC y desactiva el segmento en curso. denominado código relocalizable. Un programa denominado enlazador/relocalizador se encargará de procesar los distintos módulos objetos para formar un programa único ejecutable. Un segmento relocalizable tiene nombre. tipo y otros atributos. Más bien es un código muy cercano al lenguaje de máquina. . Cuando un segmento definido es activado. Cuando los segmentos relativos son vinculados por el enlazador se le asigna su dirección real de carga y todas las etiquetas relativas son resueltas. el ensamblador genera un código el cual no está totalmente en código de máquina. El símbolo ($) hace referencia al valor del LC en el segmento activo. De modo que cualquier línea dentro del segmento estará en una dirección que representa un desplazamiento con relación a la localización final de carga del segmento. Las direcciones lógicas identifican posiciones reales de memoria usadas por el microprocesador cuando requiere acceso a instrucciones o datos del programa en el espacio de memoria del microcomputador. Los segmentos que tengan el mismo nombre pero procedan de diferentes módulos son considerados parte del mismo segmento y son denominados segmentos parciales. Durante el primer paso el ensamblador examina cada programa fuente y agrupa las referencias simbólicas en una tabla. El ensamblador AVMAC85 asigna un contador de posiciones para cada segmento. 2.

pero si el módulo contiene solo segmentos absolutos.Desarrollo y Simulación de Programas 323 Fig. el archivo objeto producto del ensamblaje será código absoluto.14 Secuencia de traducción de un programa modular Después que el diseño del programa es completado. además incorpora comandos de control adicionales que dirigen el proceso de carga. se escriben los distintos módulos fuente y se traducen uno a uno a código objeto usando el ensamblador. en caso contrario el código objeto resultante para ese módulo particular será absoluto. Al final del ensamblaje de todos los módulos del programa. El archivo mapa es un fichero ASCII donde se registra información sobre el proceso de enlace de los archivos objeto con códigos relocalizables y absolutos. Por ejemplo se indican los segmentos del programa especificando el tipo las direcciones de inicio y final. el ensamblador puede producir un programa objeto en código relocalizable. . Este puede ser cargado en memoria sin pasar por el programa enlazador/relocalizador. La función del enlazador/relocalizador es asignar direcciones de memoria absolutas a todos los segmentos relocalizables. Además el enlazador resuelve todas las referencias entre módulos. Para un módulo particular. Este genera un archivo objeto de tipo relocalizable. si al menos uno de los segmentos del respectivo módulo fuente es de este tipo. El programa objeto contiene las instrucciones del código en lenguaje de máquina y los datos a ser cargados en memoria y ejecutados.7. el traductor entregará los resultados del ensamblaje en un archivo texto o listado del programa por cada módulo de entrada. Opcionalmente. además de las direcciones de carga en memoria de cada módulo del programa. combinando segmentos del mismo nombre y tipo. el programa enlazador procesa el archivo en módulo objeto. Las salidas del linker son: Un programa objeto en código absoluto listo para ejecutar y un programa lista que muestra los resultados del proceso de enlazado y reubicación.

15 Proceso de desarrollo de un programa . 7.Desarrollo y Simulación de Programas 324 Fig.

Desarrollo y Simulación de Programas 325 La figura 7. En este caso. usando una de estas directivas puede especificarse el nombre de un archivo en ensambla- . También se usan para definir y activar segmentos o para definir si un símbolo tiene un alcance local o global. ensamblaje. algunos enlazadores entregan directamente un archivo ejecutable en formato hex. permiten reservar direcciones o cargar datos en memoria. El ensamblador reconoce tres tipos de líneas fuentes: • Instrucciones en nemónicos que serán traducidas a código de máquina. Por ejemplo. En realidad. El uso de otra versión del lenguaje usualmente implica modificaciones menores en el programa fuente. Por ejemplo en un grupo de ROMs programadas por máscara en la fábrica. Existen muchos ensambladores para el µP 8085A. hasta la grabación en memoria sean realizado usando equipos microcomputadores de propósito específico.15 muestra.3 Lenguaje ensamblador para el 8085 Para un proceso de ensamblaje exitoso es necesario que el archivo texto que contiene el código fuente cumpla estrictamente con ciertas reglas de codificación. En esta sección se presenta el ensamblador original (ASM80) diseñado por la empresa INTEL para el 8085A. No obstante existen algunas características comunes a todos los ensambladores que permiten la descripción de los aspectos resaltantes del lenguaje usando una versión específica. Algunos μC de bajo costo como el MPR-85 requieren que el código objeto absoluto esté en formato hexadecimal para proceder a su ejecución. los cuales pueden presentar diferencias en la sintaxis del lenguaje. Lo común y deseable es que el desarrollo del programa. Es común que cada fabricante de µPs ofrezca un SD adecuado para el diseño de aplicaciones generales que usen el dispositivo que producen.. • Directivas generales de ensamblador para especificar la estructura del programa y definir los tipos y alcance de los símbolos usados. que el código absoluto de salida puede ser programado en una memoria no volátil y ejecutado por el μP. desde el diseño.3. Un programa fuente escrito en lenguaje ensamblador consiste de una secuencia de líneas que suministran al ensamblador la información necesaria para ejecutar el proceso de traducción. señalan el final del programa. se requiere el uso de un programa para convertir desde código objeto a formato hexadecimal. los cuales incluyen todas las herramientas necesaria para el diseño y desarrollo de programas . propias de cada ensamblador.15 es una herramienta especializada para la depuración de programas para sistemas basados en microprocesadores.. EPROM o EEPROM programada por el usuario. Este tipo de línea genera código ejecutable. El emulador en la figura 7. el cual es descrito con detalle en el 8080/8085 Assembly Language Programming Manual. especifican el valor de inicio del contador de localizaciones. Por ejemplo. denominados Sistemas de Desarrollo (SD). o en una PROM. • Directivas de control de ensamblador para fijar el modo de ensamblaje. prueba y depuración. 7.

La primera línea solo tiene campo de comentario.7. CAMPO 1 CAMPO 2 CAMPO 3 CAMPO 4 Etiqueta Código de operación Operando(s) . separados al menos por un espacio en blanco. • El campo de operando especifica explícitamente o identificando el lugar de origen de los datos o dato que usará la instrucción definida en el campo de código de operación. • El campo de código de operación Puede contener el nemónico de una instrucción del μP que debe ser ensamblada o una directiva de ensamblador para ser ejecutada. Es opcional y en una línea fuente puede existir solo este campo. Etiqueta Código de operación Operando(s) .) marca el inicio del comentario.32********************* LAZO: DCX MOV ORA B A. como en MOV A.Byte alto del contador al A. • El campo de comentarios expone la función la operación que ejecuta la instrucción. Comentarios .B C . ********************Esto es una sección del ejemplo 6. Comentarios Fig.17 Ejemplos de líneas fuente válidas. OR entre B y C.16 Formato de línea del ensamblador • El campo de etiqueta identifica en forma simbólica la posición de memoria donde se localiza la instrucción que es ensamblada y debe finalizar con dos puntos (:). o una dirección.Desarrollo y Simulación de Programas 326 dor que debe ser incluido como parte del programa que está siendo traducido. Es opcional.B. STC por ejemplo. y puede consistir de uno a seis caracteres alfanuméricos. el ancho o longitud de la página y el título del programa. También puede establecerse los archivos de salida a generarse. . pero el primer caracter debe ser alfabético o uno de los caracteres especiales ‘?’ o ‘@’. El ensamblador indicará error si una etiqueta es definida más de una vez en el programa. Fig. Este campo estará vacío para instrucciones que no requieran operandos. El operando puede ser un registro. una referencia a memoria. . 7. un dato.Decremento registro par BC . Un caracter (. Formato de línea El formato de una línea del programa fuente consta de cuatro campos. o puede contener dos operandos cuando deba especificarse el destino de los datos.

mientras que el segundo señala el origen del dato. Los operandos pueden especificarse de distintas formas: Hexadecimal Una cantidad hexadecimal iniciada con un dígito del 0 al 9. Desde la A hasta la Z.* / . . y que finalice con la letra H. b) Los dígitos del 0 al 9 c) Los caracteres especiales + ..Desarrollo y Simulación de Programas 327 Conjunto de caracteres Los siguientes caracteres son reconocidos por el ensamblador: a) Las letras del alfabeto Inglés. Los tipos de operandos posibles son: • • • • Registro. Delimitadores Son caracteres especiales usados para indicar la finalización de una línea o para separación entre campos.. Especificación de operandos Cuando existen dos operandos.4 Delimitadores legales en el asm80/85 CARACTER USO b Uno o más espacios en blanco Separador de campo. ‘abef’). ( ) ‘ & . EJEMPLO 00H 23C5H 0DFH 0FFFCH . o que forme parte de un comentario. Tabla.7. () Dos paréntesis Delimita una expresión. d) Cualquier caracter del código ASCII que forma parte de una constante encerrada entre apóstrofes (‘R’ . Dato inmediato. . Punto y coma Inicio de comentario : Dos puntos Último caracter de la etiqueta ‘’ Dos apóstrofes Delimita cadena de caracteres. Registro par. Dirección de 16 bits. Coma Separador de operandos. el primero identifica el destino del resultado.

A partir de la declaración de la etiqueta. puede ser usada como operando.ASCII del caracter G. EJEMPLO LAZO2: DCX MOV ORA JNZ B A. EJEMPLO 11010100B Constante ASCII Un caracter encerrado entre apóstrofes define una constante ASCII. Valores asignados a etiquetas Las directivas SET y EQU permiten asignar valores a etiquetas. EJEMPLO 45Q 1234Q 230Q 7600Q Binario Cualquier cantidad en binaria seguida por la letra B. . el valor de la dirección del primer byte de la instrucción. Salto a instrucción en lazo2 si Z=0.correspondiente al código en .B C LAZO2 .‘G’ . EJEMPLO MVI A.Desarrollo y Simulación de Programas 328 Octal Un número octal seguido por la letra Q u O. Si DATO tiene asignado el valor 0DH. Carga el A con el valor 47H. de modo que las siguientes instrucciones son equivalentes: EJEMPLO SUI SUI 0DH DATO Etiquetas de instrucciones o datos El ensamblador asigna a las etiquetas usadas para identificar líneas de programa. cualquier instrucción del código fuente puede utilizar esta etiqueta como operando. .

atrás del primer byte de esta . se puede hacer referencia a este símbolo desde cualquier parte del programa. el LC es incrementado en un valor igual al número de bytes de cada instrucción. la cual permite inicializar el LC en una dirección diferente a cero. ORG. EJEMPLO SUI MVI 2*DATO A. Existe una directiva de ensamblador. Debido a que estas direcciones en última instancia especifican posiciones de la memoria principal. Símbolos reservados Los símbolos utilizables en el lenguaje ensamblador tienen el formato especificado para las etiquetas. Un sím- . el contador es denominado contador de posiciones (Location counter (LC)). Definición de símbolos Un símbolo global es aquel que mantiene su significado a lo largo del programa. El caracter especial $ hace referencia al contenido actual del contador de posiciones.DATO + 5 Referencia al contador de posiciones El ensamblador usa un contador para mantener un seguimiento de las direcciones de las instrucciones en lenguaje de máquina. Luego que cada línea fuente ha sido examinada en el primer paso. Por ejemplo. Los operandos de la tabla 7.5 tampoco pueden usarse como símbolos de usuario. instrucción.Desarrollo y Simulación de Programas 329 Expresiones Cualquier de los operandos anteriores pueden se usados conjuntamente con operadores. Si una dirección especifica de una instrucción se le asigna el símbolo SALTO1. Antes del ensamblaje el LC es puesto a cero. Salto a la dirección 5 bytes . EJEMPLO SALTO: JMP $-5 . Existen ciertos símbolos que no pueden ser definidos como símbolos de usuario debido a que tienen un significado específico para el ensamblador. y puede formar parte de un operando. para formar expresiones utilizables como operandos en una instrucción. los nemónicos de las instrucciones y las directivas son símbolos reservados por el ensamblador.

Si un nombre dentro de un macro es definido como global. Un símbolo relocalizable externo es usado en un módulo. Cada vez que el macro sea llamado desde el programa principal pueden ser reemplazados un grupo de parámetros por otros. Los programas relocalizables son ensamblados con referencia a la posición de memoria 0.5 Símbolos de operandos reservados por el ensamblador. al realizar la segunda llamada al macro se recibirá un mensaje de error indicando la duplicación de un símbolo global. Un símbolo absoluto mantiene constante su dirección durante el proceso de reubicación. 7. Tabla. Estos dos últimos tipos de símbolos son de utilidad cuando se usa un enlazador/relocalizador para enlazar módulos de programas relocalizables y producir un sólo programa. Para estos casos el ensamblador ofrece la posibilidad de definir una rutina denominada MACRO que puede ser tratada como una entidad. pero definido en otro. su nombre deriva del hecho que son locales al macro. Un símbolo local tiene significado solamente dentro de un macro o en una llamada a macro. . La posibilidad de usar macros evita la codificación repetida un grupo de instrucciones (con parámetros distintos) a lo largo del programa. en caso contrario se habla de símbolo redefinible. Si el valor de un símbolo es constante durante el proceso de ensamblaje se dice que es un símbolo permanente. Un símbolo relocalizable público es definido en un módulo pero puede se usado por otro módulo. es común que exista una secuencia de instrucciones que es ejecutada a menudo cambiando únicamente ciertos parámetros. siendo posteriormente relocalizados a otra área de memoria. El ensamblador tiene directivas que permiten definir el tipo de símbolo. de lo contrario habrá una indicación de error. SÍMBOLO 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.Desarrollo y Simulación de Programas 330 bolo global solo puede definirse una vez en el programa. Referencia a memoria usando la dirección almacenada en HL M Cuando se desarrolla un programa. mientras que un símbolo relocalizable la cambia. PSW Corresponde al contenido del acumulador y del registro banderas.

AND. 3. por ejemplo. División sin residuo. El número 10H.Desarrollo y Simulación de Programas 331 Evaluación de expresiones Una expresión puede ser absoluta o relocalizable. Estos operadores se usan extensamente en conjunto con la . 4. (13/2 = 6). Operadores aritméticos: Los operadores aritméticos son los siguientes: + * / MOD Suma. Si el desplazamiento ocurre hacia la izquierda el efecto será la multiplicación del número por 2. 5. éste queda dividido por 2. Módulo. x posiciones de bit. Multiplicación. EJEMPLO Si (VALOR) = 10010110 = (150)10 La ejecución de la instrucción afectará al operador VALOR: VALOR SHR 2 (VALOR) = 00100101 = (37)10. x posiciones de bit. Operadores lógicos: Los operadores lógicos reconocidos por el ensamblador son: NOT (complemento). Resta. El ensamblador trata a las expresiones como valores de 16 bits. 2. Los operadores válidos en el ensamblador permiten la ejecución de operaciones: 1. y contiene símbolos. se representa internamente como 0010H. Observe que al desplazar un número binario a al derecha. Aritméticas De desplazamiento Lógicas De comparación De aislamiento de byte. números y operadores. y SHL x Desplace operando y a la izquierda. OR y XOR. El resultado es el residuo de una división (13 MOD 2=1). Operadores de desplazamiento : Los operadores de desplazamiento son dos: y SHR x Desplace operando y a la derecha.

NOT DIR +1 producirá (H)(L) = (11111000) (00101011) Operadores de comparación: La operación de comparación produce un resultado booleano Si la evaluación de la expresión es cierta. cuando es falso será todos bits en cero. la instrucción: LXI H. Los operandos para comparación son: EQ EN LT LE GT GE NUL Igual Desigual Menor que Menor o igual Mayor que Menor o igual Usado para pruebas de omisión de parámetros en macros. Operadores de aislamiento de byte: Cuando se requiere obtener un número de 8 bits desde una expresión. los de comparación se usan en directivas IF. o si se desea obtener un byte de una dirección. Obtiene el byte menos significativo de un valor de16 bits Aquí finaliza una breve introducción a la sintaxis del lenguaje ensamblador. Actúan solamente sobre el bit 0 del resultado de la operación. Al igual que los operadores lógicos. EJEMPLO Si el símbolo DIR está definido como 07D3. Traducción de un archivo fuente Antes de presentar las directivas de ensamblador más usadas conviene realizar la traducción de un programa ejemplo para mostrar como el programa traductor reali- . El lector habrá notado que todos los programas fuente que se han presentado en este trabajo están escritos en ensamblador. se usan los operadores: HIGH LOW Obtiene el byte más significativo de un valor de 16 bits. el valor del resultado es todos los bits en 1.Desarrollo y Simulación de Programas 332 directiva de ensamblaje condicional IF.

el valor debe escribirse en el puerto de salida 01H. Si la prueba falla.3.E. El caracter es un dígito hexadecimal.F’} debe almacenarse en un bloque de memoria con inicio en 1000H. Tabla. el cual está almacenado en el acumulador.5.D. 7.B. el bit 0 del puerto 02 se pone en nivel alto. CARACTER 0 1 2 3 4 5 6 7 8 9 A B C D E F ASCII (hex) 30 31 32 33 34 35 36 37 38 39 41 42 43 44 45 46 El algoritmo para identificar un número hexadecimal es simple.6 en el cual se aplican algunos de los conceptos expuestos en esta sección.6 El objetivo del programa es leer 16 caracteres ASCII del puerto de entrada 0 y determinar si corresponden a dígitos válidos del sistema de numeración hexadecimal. se muestra a continuación.6.4. Si el digito en el puerto pertenece al conjunto: {0. El listado del programa que resuelve el problema planteado.6 muestra los códigos ASCII para los números hexadecimales. La tabla 7.1. Cada vez que un dato se presente en el puerto 0.7.8. Basta con examinar el valor del caracter obtenido del puerto de entrada. Ejemplo 7. Con este objetivo inspeccione el programa del ejemplo 7.9. .Desarrollo y Simulación de Programas 333 za el procesamiento del archivo fuente.A. Si se cumple que: 30H ≤ (A) ≤ 39H ó 41H ≤ (A) ≤ 46H.6 Código ASCII de dígitos hex.2.C.

Comparar con ASCII ‘0’. saltar a esperar que pase a 0. . . . . . . . Si es menor. . Mover a memoria el digito hex en el reg. Cargar contador de digitos . . .17 B SALIR 02H 01H BIT01 00H '0' INVAL '9'+1 VALI 'A' INVAL 'F '+1 INVAL M. Dirección 0000H 0003H 0005H 0006H 0009H . Si es menor no es un digito hexadecimal.Desarrollo y Simulación de Programas 334 Etiqueta LAZO: BIT01: VALI: INVAL: BIT10: SALIR: Código de operación 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. Mnemónico LXI H. no es un digito hexadecimal. . .1000H B. Salir si se evaluó último digito. . Para esto se asigna una dirección de memoria al código de operación de la primera instrucción.7. Cada etiqueta que se encuentre debe registrarse en una tabla de símbolos.6 usando un solo paso. . . . . . . .Debe estar entre ‘A’-’F’. Código Objeto 210010 0611 05 CA???? DB02 . Dirección de almacenamiento de digitos hex. El procedimiento lógico pareciera ser realizar un barrido del programa en un paso y traducirlo de acuerdo con la sintaxis del lenguaje ensamblador. y se incrementa de acuerdo al número de bytes que tenga cada instrucción. la cual es el origen del programa. Si es uno. Leer la palabra de control en el puerto 02. . Línea 1 2 3 4 5 . . Comparar con ASCII ‘A’. Leer la palabra de control en el puerto 02. . .1000H MVI B.17 LAZO: DCR B JZ SALIR IN 02H . el digito esta entre ‘0’-’9’. . . Decrementar contador de digitos. inválido. asignándole el valor del primer byte de la instrucción que esté en la línea donde se halla la etiqueta. . comparar con ASCII ‘F’+1. . Escribir en puerto de salida valor no hex. TABLA DE SÍMBOLOS LAZO SALIR 0005 ???? Fig. Si es cero. Si es mayor. Se elije la dirección 0000H como dirección de inicio del programa anterior. Comparar con ASCII ‘9’+1. Probar si el bit 0 está en nivel bajo.18 Ensamblaje parcial del programa del ejemplo 7. Probar si el bit 0 está en nivel alto. es realizándolo manualmente. saltar a esperar que pase a 1. Leer digiro de puerto de entrada. Apuntar a próxima dirección de memoria. Si es menor . . . El camino más adecuado para comprender como se lleva a cabo un proceso de ensamble de un programa. . Saltar a leer nuevo valor.A H BIT10 01H 02H 01H BIT10 LAZO Comentarios . Salir al leer los 16 valores del puerto. Longitud Bytes 3 2 1 3 2 . . . . (C).

no es posible ensamblar la línea 4 por completo. cualquier referencia a SALTO. En consecuencia. 12. Las direcciones siempre se almacenan ubicando el byte de menor orden en una posición de memoria y el byte de mayor orden en la siguiente.18. Línea 3: LAZO: DCR B ((LC)+2) Código de operación = 05 1 byte (LC) = 0005H En esta línea se encuentra una etiqueta. y debe asignársele un valor igual a la dirección del primer byte de la instrucción. La instrucción requiere 2 bytes para su almacenamiento. Las etiquetas INVAL y VALI son indefinidas.1000H Inicio del programa.Desarrollo y Simulación de Programas 335 Como se observa en la figura 7. La mayoría de los ensambladores son de dos pasos pero no es el descrito. y 14. El código de operación de la instrucción (06H) se almacena en la posición 0003H y el dato a mover al registro B (11H=1710) ocupará la posición siguiente. no existe problema alguno para ensamblar las primeras 3 líneas del programa.17H El contador de posiciones se ha incrementado en 3 bytes. El código objeto generado corresponde al código de operación de la instrucción (21H) y a la dirección a almacenarse en el registro par HL (1000). el camino que se usa para . Es obvio que con este procedimiento. Línea 4: JZ SALIR Código de operación = CA???? 3 bytes (LC) = 0006H En esta línea existe una instrucción de salto condicional (Salto si Z=1) a una referencia denominada SALIR. 10. al llegar al final del programa. Al final de este segundo paso el programa quedará completamente ensamblado. Este valor queda registrado en la tabla de símbolos. al no estar incluido en la tabla de símbolos debido a que aparece posteriormente al final del programa. Una situación similar ocurrirá cuando se pretendan ensamblar las líneas 8. Línea 1: LXI H. dirección 0000H. La instrucción en la línea 1 ocupará 3 bytes de la memoria a partir de la posición 1000H. quedaran algunas líneas ensambladas en forma incompleta por lo cual se requerirá realizar un segundo paso por el programa para completar el proceso. Esto es: LAZO = 0005H Cuando se avance en el análisis de las líneas del programa. Al tratar de ensamblar la línea 4. Línea 2: MVI B. corresponde a la dirección de memoria 0005H. nos encontramos que no conocemos el valor del símbolo SALIR.

Un procedimiento más eficiente es el siguiente: • Paso I: Se localizan las direcciones de memoria que corresponden al código de operación de cada instrucción y se ubican en la columna de direcciones.19 Resultado del proceso de ensamblaje a mano.Desarrollo y Simulación de Programas 336 realizar el análisis de las líneas del programa. Esta información se coloca en la columna de código objeto. • Paso II: En el segundo paso se examina cada instrucción nuevamente. Línea 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 LAZO 0005 Dirección 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: BIT01 BIT10 0009 002D VALI SALIR Nemónico LXI H. se examina la tabla de símbolos creada en el primer paso para asignar el código hexadecimal correspondiente al operando simbólico.7.19 y 7. y el mnemónico se sustituye por el código de máquina equivalente. . Paso I. creándose una tabla que contiene todas las etiquetas que denoten posiciones de memoria. Si una instrucción es de dos bytes o más.1000H MVI B.20 se muestran los resultados de realizar cada paso con el programa ejemplo. En las figuras 7.A INX H JMP BIT10 OUT 01H IN 02 ANI 01 JNZ BIT10 JMP LAZO HLT 0026 0037 Código 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 TABLA DE SIMBOLOS: INVAL 002B Fig.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. esta vez se traduce cada código de operación al valor hexadecimal que representa la operación en lenguaje de máquina. y el operando está definido en forma simbólica.

Paso II.1000H MVI B.A INX H JMP BIT10 OUT 01H IN 02 ANI 01 JNZ BIT10 JMP LAZO HLT Código 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 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 TABLA DE SIMBOLOS: LAZO 0005 BIT01 BIT10 0009 002D VALI SALIR 0026 0037 INVAL 002B Fig.20 Resultado del proceso de ensamblaje a mano. .7.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.Desarrollo y Simulación de Programas 337 Línea 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 Dirección 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: Nemónico LXI H.

6.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. 7.SRC ISIS-II 8080/8085 MACRO ASSEMBLER. ASM80 EJEM76. ejecutable en ambiente MSDOS. NO ERRORS Fig.1 LOC 0000 0003 0005 0006 0009 000B 000D 0010 0012 0014 0017 0019 001C 001E 0021 0023 0026 0027 0028 002B 002D 002F 0031 0034 0037 OBJ 210010 0611 05 CA3700 DB02 E601 CA0900 DB00 FE30 FA2B00 FE3A FA2600 FE41 FA2B00 FE47 F22B00 77 23 C32D00 D301 DB02 E601 C22D00 C30500 76 MODULE PAGE 1 LINE SOURCE STATEMENT 1 LXI H.21. Salida del macro ensamblador ASM80/85 .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. V4. usando el programa ensamblador ASM80 de INTEL.21 muestra el resultado de ensamblar el programa del ejemplo 7.Desarrollo y Simulación de Programas 338 La figura 7.

22 se presenta la salida del ensamblador ASM85. Todos los programas simuladores suministrados a los estudiantes tienen un ensamblador el cual compila y carga en memoria el archivo binario.17 B SALIR 02H 01H BIT01 00H 30H INVAL 3AH VALI 41H INVAL 47H INVAL M. Salida del ensamblador cruzado del programa SID85. 1 0000 21 00 10 2 0003 06 11 3 0005 05 4 0006 CA 39 00 5 0009 DB 02 6 000B E6 01 7 000D CA 09 00 8 0010 DB 00 9 0012 FE 30 10 0014 FA 2C 00 11 0017 FE 40 12 0019 FA 27 00 13 001C FE 41 14 001E FA 2C 00 15 0021 FE 47 16 0023 F2 2C 00 17 0026 77 18 0027 23 19 0028 C3 2F 00 20 002B D3 01 21 002D DB 02 22 002F E6 01 23 0031 C2 2F 00 24 0034C3 05 00 25 0037 76 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 H.1000H B.7. También la herramienta MICROIDE tiene un ensamblador (ASM85). incorporado en el programa SID85. Para el desarrollo de los programas asignados en el curso se debe usar un programa ensamblador comercial. no es más que un ejercicio didáctico.22. Estos . Este ofrece la mayoría de las funciones realizadas por ensambladores comerciales.Desarrollo y Simulación de Programas 339 En la figura 7. Observe la generación automática de una lista de referencia cruzada.A H BIT10 01H 02H 01H BIT10 LAZO LAZO: BIT01: VALI: INVAL: BIT10: SALIR: Etiquetas Definidas =================== LAZO 0005 SALIR INVAL 002B VALI Referencia Cruzada ================== LAZO #3 24 SALIR 4 #25 BIT01 #5 7 INVAL 10 14 16 #20 VALI 12 #17 0037 0026 BIT01 BIT10 0009 002D Fig. El procedimiento de ensamblaje manual realizado.

definir variables de trabajo y fijar las direcciones de inicio y final del código generado por el ensamblador. Este conjunto de programas incluye un ensamblador (AVMAC85) con capacidad para procesar macros. pudiendo ser precedidas por una etiqueta y/o seguidas por un comentario.Desarrollo y Simulación de Programas 340 ensambladores en general son de desempeño limitado y no permiten el uso de macros ni generan código relocalizable. END Señala el final de un programa en lenguaje ensamblador. al poner el contador de posiciones LC al valor especificado por el operando expresión. 7.comentario Los campos de etiqueta y comentario son opcionales. Entre los programas de trabajo del curso se encuentra el paquete ISISII de INTEL. Otro recurso al alcance del estudiante de sistemas de microprocesadores es el software distribuido por la empresa AVOCET y dirigido al desarrollo de programas para el 8085A. Las directivas se ubican en el campo de operación. Todas las pseudos-operaciones requieren un argumento. ENDIF Fin de ensamblaje condicional. o una expresión que al ser evaluada produce un valor de 16 bits (una dirección). DB Define bytes de datos. Expresión es un valor de 16 bits. ORG Fija el inicio de las direcciones absolutas del programa o área de datos. Si se usa una expresión en lu- . exceptuando a END y ENDIF. reservar áreas de memoria. ORG Define la dirección de inicio del programa o de un área de datos. Un programa puede tener varias declaraciones ORG si se requiere ensamblar secciones del programa en direcciones diferentes. Directivas generales del ensamblador El ensamblador reconoce un grupo de órdenes de ensamblaje que no pertenecen al conjunto de instrucciones del procesador y que no generan código de máquina. DS Reserva áreas de memoria para almacenamiento de datos. IF Inicio de ensamblaje condicional. el cual incluye el ensamblador ASM80 y el enlazador LINK80. DW Define palabra de datos. SET Asigna un valor numérico a un símbolo. ignorar o ensamblar líneas de código. Las directivas reconocidas por el ensamblador son: Tabla. un enlazador/relocalizador (AVLINK) y otros programas asociados.7 Directivas de control de ensamblaje. Estas se denominan pseudos-instrucciones y pueden usarse para controlar el proceso de ensamblaje. EQU Define constantes numéricas. Tiene la forma: etiqueta: ORG expresión . almacenar datos y resultados.

si el valor de inicio de un área de datos es 2000H. 2000H LXI H. Si no existe una directiva ORG antes de la primera instrucción del programa.Desarrollo y Simulación de Programas 341 gar de un valor absoluto. Esta directiva asigna un valor numérico a un nombre. en el campo de expresión. END Señala el punto de culminación del programa y que el proceso de ensamblaje debe detenerse. área de datos EQU Sirve para facilitar la lectura del programa. . son equivalentes: LXI H. inicio del programa 1000H . Por ejemplo. Tiene la forma: nombre: EQU expresión El valor de expresión es asignado al nombre especificado en el campo de etiqueta. En consecuencia las instrucciones siguientes. END 0500H . . La asignación: DIRDAT EQU 2000H permite a cualquier instrucción hacer referencia al comienzo del bloque de datos. éste se ensamblará con inicio en la dirección 0000H. . . Sólo debe existir una directiva END y debe estar al final del texto del programa. usando el nombre DIRDAT. DIRDAT . . la etiqueta usada debe ser definida en líneas anteriores. El formato de esta directiva es: etiqueta: END Un ejemplo del uso conjunto de las instrucciones ORG y END es el siguiente: ORG . ORG .

mientras que el definido por un comando SET es válido hasta la próxima directiva SET que contenga el nombre. . Si el resultado es cero (0H) las n instrucciones son ignoradas. Suponga que se tiene un programa que contiene un lazo cuya ejecución es controlada por un valor desconocido cargado desde un puerto de entrada en la posición de memoria MEM. . si el bit 0 es uno lógico. La directiva ELSE es opcional y solo una puede aparecer en un bloque IF-ENDIF. cuando la prueba de IF resulte cero las declaraciones entre ELSE y ENDIF se ensamblaran. Se desea saber . Los bloques de código acotados por directivas IF-ENDIF se usan con frecuencia en la fase de prueba y depuración de programas. De modo que el valor de un identificador fijado por una asignación EQU es válido para todo el programa. exceptuando el hecho que una asignación SET posterior puede cambiar el valor de nombre. El formato de esta directiva es: etiqueta: expresión instrucción 1 instrucción 2 . ENDIF IF El programa ensamblador evalúa la expresión que acompaña a la declaración IF. Algunos ensambladores no requieren los dos puntos al final de la etiqueta. Si existe ELSE. en este caso las instrucciones de la 1 a la n.Desarrollo y Simulación de Programas 342 El valor asignado a un símbolo por una directiva EQU no puede ser cambiado por otra declaración EQU. serán ignoradas. las instrucciones entre la directiva IF y el próximo ELSE o ENDIF son ensambladas. Toda declaración IF debe estar asociada a un ENDIF. IF y ENDIF Permiten incluir o excluir partes de un programa durante el proceso de ensamblaje. SET Es idéntica a la directiva EQU. instrucción n ELSE . y si el bit 0 del resultado es un valor lógico uno (evaluado como 0FFFFH). . .

Una vez que el programa ha sido depurado simplemente se le fija el valor NO al identificador .SRC ISIS-II 8080/8085 MACRO ASSEMBLER. SI NO PRUEBA MEM EQU EQU EQU EQU -1 0 SI 2000H LAZO: LHLD MEM LXI B.0 8 LAZO: DCX H 9 IF PRUEBA 10 INX B 11 ENDIF 12 JNZ LAZO 13 END MODULE PAGE 1 PUBLIC SYMBOLS EXTERNAL SYMBOLS USER SYMBOLS LAZO A 0006 MEM A 2000 NO A 0000 PRUEBA A FFFF SI A FFFF ASSEMBLY COMPLETE. ASM80 IF.1 LOC OBJ FFFF 0000 FFFF 2000 0000 2A0020 0003 010000 0006 2B 0007 03 0008 C20600 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. dentro del bloque IF-ENDIF. ensamblándose la instrucción INX B. NO ERRORS Observe que la directiva EQU ubicada en la línea 3 se usa para asignar al símbolo PRUEBA el valor 0FFFFH. El código objeto resultado de ensamblar la rutina es el siguiente.Desarrollo y Simulación de Programas 343 cuantas veces se repite en lazo en algún momento. La rutina mostrada a continuación puede usarse con ese propósito.0 DCX H IF PRUEBA INX B ENDIF JNZ LAZO END Al final de la ejecución del programa el registro par BC contendrá el número de veces que el lazo se repite. V4. La evaluación del bit 0 de prueba produce uno lógico.

SRC ISIS-II 8080/8085 MACRO ASSEMBLER. con todas las rutinas de entrada y salida sujetas a ensamblaje condicional.1 LOC OBJ FFFF 0000 0000 2000 0000 2A0020 0003 010000 0006 2B 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. Esto. V4. no se ensambla el código responsable de registrar el número de veces que se ejecuta el lazo. DB La directiva DB (Definición de byte) carga una serie de posiciones consecutivas de memoria con valores de ocho bits. En este caso el programa de aplicación. Cuando deba programarse una tarjeta particular se selecciona las rutinas correspondientes al sensor y al actuador elegido por el usuario. es el mismo para cualquiera de las posibilidades. entre varias opciones.Desarrollo y Simulación de Programas 344 PRUEBA. será necesario escribir 12 programas para cubrir todas las opciones. incluyendo el bloque de código del programa que realiza el algoritmo de control. La diferencia estará en el código de los sensores y actuadores. ASM80 IF. Se escribe como: etiqueta DB lista de expresiones o cadenas de caracteres . El uso bloques IF-ENDIF permite la escritura de un solo programa. los sensores de entrada y los actuadores de salida. Si existen 3 tipos de sensores y 4 de actuadores. debido a que el valor de PRUEBA es 0 (NO). Cuando se ensambla de nuevo la rutina.0 8 LAZO: DCX H 9 IF PRUEBA 10 INX B 11 ENDIF 12 JNZ LAZO 13 END MODULE PAGE 1 0007 C20600 PUBLIC SYMBOL EXTERNAL SYMBOLS USER SYMBOLS LAZO A 0006 MEM A FFFF A 2000 NO A 0000 PRUEBA A 0000 SI ASSEMBLY COMPLETE. NO ERRORS La utilidad del uso del ensamblaje condicional en la fase de desarrollo del software de una aplicación se hace patente cuando se diseña una tarjeta de control con la opción de seleccionar.

MEM+2 01000001 41 A MEM+3 00101110 2E . con la única diferencia que almacena valores de 16 bits de la lista de expresiones como direcciones de memoria. etiqueta DW lista de expresiónes o cadenas de caracteres Si la evaluación de una expresión resulta en un número de ocho bits.A.23 la forma en la cual se almacena la cadena ‘R. si existe se le asigna el valor del contador de posiciones. MEM+4 01001101 4D M Fig. La lista puede incluir hasta 8 elementos separados por comas. El símbolo POS1 es definido en un programa como 2064H: . DW La directiva definición de palabra es similar a DB. 0C5H. y en esa dirección se almacena el primer byte especificado por la directiva DB. Los símbolos en expresión deben definirse previamente.M’ 2*8. LISTA: LISTA: DB DB DB DB DB DB 1.M ocupa 5 bytes consecutivos de la memoria a partir de la dirección MEM. mientras que el byte alto será 00H. se muestran a continuación.A.M’ en memoria: Dirección MEM Contenido 01010010 52 R MEM+1 00101110 2E .4*8 Código objeto 01C508 01C508 MEM: MULT: 522E412E4D 1020 Observe en la figura 7. este resultado corresponde al byte de bajo del resultado.23 La cadena R. Para facilitar la lectura de la lista pueden usarse varias declaraciones DB.Desarrollo y Simulación de Programas 345 El campo etiqueta es opcional. Algunos ejemplos del uso correcto de la directiva de definición de palabra. 7. Algunos ejemplos se muestran a continuación.A. 1000B 1 0C5H 1000B ‘R.

DS Es una directiva usada para reservar posiciones de memoria para almacenamiento de datos generados por el programa. . Forma de almacenamiento de los datos y direcciones de las etiquetas.24. DS reserva la memoria incrementado el LC al valor definido por expresión.7. La directiva DS no genera datos.’C’ Código objeto 6420 0D00 42414300 Si el contador de posiciones es igual a 0300H cuando se alcanza el símbolo DIR.Desarrollo y Simulación de Programas 346 DIR: TEMP: ABCD: DW DW DW POS1 0DH ‘AB’. los datos se almacenarán en la unidad de memoria del sistema en la forma que se muestra en la figura 7. RESULT: DS 20 . el contenido de las posiciones de memoria reservadas es impredecible al inicio de la ejecución del programa. La sintaxis de DS es: etiqueta DS expresión El ensamblador evalúa la expresión y reserva el número de bytes de memoria especificado por el resultado. Los símbolos en expresión deben definirse con antelación a la declaración DS.24.Reserva 20 bytes a partir de RESULT. Dirección DIR: 0300H Contenido 01100100 64H 301H 00100000 20H TEMP: 0302H 00001101 0DH 0303H 00101110 00H ABC: 0304H 01000010 42H 0305H 01000001 41H 0306H 01000011 43H 0307H 00000000 00H Fig.

. sustituir el anterior .Apuntar al próximo elemento en la tabla.Desarrollo y Simulación de Programas 347 Los comandos anteriores son algunas directivas generales del ensamblador.101011B. . .Si valor en la tabla es menor. Cargar en A. DB 64H. considere el ejemplo 7. El programa debe cargarse en la dirección 0200H. .M H B MENOR M LAZO1 A.cargado en el acumulador.Apuntar a próximo valor.Comparar elemento de la tabla con el potencial .NUM H B MAYOR M LAZO2 A.Si elemento es mayor. .Si es menor.2H.Comparar un valor con el posible mínimo . Las usadas en relocalización de código se explican más adelante y las directivas de control no se discuten en este trabajo. Ejemplo 7.30 END . . . .3H.45. Para demostrar el uso de algunas de las directivas cuya unción se describió.siguiente.Almacenar el valor mínimo de la tabla. . DS 1 .Primer valor al acumulador.23Q. es el nuevo mínimo.Parar.Si (B)=0.Mover al acumulador el primer número. .15H DB 20H.TABLA B.34H.M LAZO2 MAX .50H.máximo depositado en el acumulador. .TABLA A.Inicio del área de datos MENOR: LAZO2: MAYOR: ORG 0300H MIN: MAX: TABLA: DS 1 .M B.24H. .NUM A. . Posición para almacenar el mínimo. . .15.Comparar nuevo máximo con próximo en la tabla. .Decrementar contador de elementos de la lista.7 Escribir una rutina con el propósito de encontrar los valores máximo y mínimo de una tabla de 16 números almacenada en la memoria a partir de la dirección 0300H. el mínimo está en el acumulador.Si es mayor.Al inicio de la tabla en búsqueda del mayor.Si (B)=0. . .Almacenarlo en memoria y buscar el mayor.90H. .Cargar contador de números.Decrementar contador. Número de elementos de la tabla.80H. .M LAZO1 MIN H.próximo. Inicio del programa. comparar con el .Inicializar contador de elementos. comparar con el . . .Comparar el nuevo mínimo con el siguiente valor. .60H. . NUM MENOR: LAZO1: ORG EQU LXI MVI MOV INX DCR JZ CMP JC MOV JMP STA LXI MOV MVI INX DCR JZ CMP JNC MOV JMP STA HLT 0200H 010H H. almacenar máximo en memoria y salir.7. .Cargar dirección de inicio de la tabla HL.Almacenar en memoria el máximo. Posición para almacenar el máximo.

M 24 JMP LAZO2 25 MAYOR: STA MAX 26 HLT 27 28 ORG 0300H 29 30 MIN: DS 1 . Primero se halla el valor mínimo y luego el máximo.NUM 6 MOV A. Observe que los datos de la tabla se representan en los sistemas numéricos: hexadecimal. Las direcciones para depositar los valores máximo y mínimo se reservan usando la directiva DS. Cuando un elemento sea mayor que el próximo. El proceso se inicia asumiendo que el primer elemento es el mínimo. V4. Cuando el registro B contador de elementos llegue a cero.M 17 MVI B. binario y decimal.M 13 JMP LAZO1 14 MENOR: STA MIN 15 LXI H.Desarrollo y Simulación de Programas 348 Dos declaraciones ORG fijan los inicios de las áreas de programas y datos.NUM 18 LAZO2: INX H 19 DCR B 20 JZ MAYOR 21 CMP M 22 JNC LAZO2 23 MOV A.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 MODULE PAGE 1 210203 0610 7E 23 05 CA1302 BE DA0602 7E C30602 320003 210203 7E 0610 23 05 CA2902 BE D21C02 7E C31C02 320103 76 LINE SOURCE STATEMENT 1 ORG 0200H 2 NUM EQU 010H 3 4 LXI H. La salida del ensamblador para el archivo del ejemplo se muestra a continuación. Este se compara con los datos siguientes y mientras sea menor permanecerá como mínimo.TABLA 5 MVI B. octal.SRC ISIS-II 8080/8085A MACRO ASSEMBLER. ASM80 EJEM2.M 7 LAZO1: INX H 8 DCR B 9 JZ MENOR 10 CMP M 11 JC LAZO1 12 MOV A. El procedimiento para encontrar el mayor es similar como se deduce del listado del programa. éste último pasa a ser el nuevo mínimo y se procede a compararlo con el que sigue. el mínimo estará en el acumulador. La tabla de valores se introduce usando directivas DB.TABLA 16 MOV A.

Esto significa que un programa escrito para ser traducido por el ASM80 de INTEL puede ser usado como entrada de otro en- .60H.15.50H.34H.23Q.Desarrollo y Simulación de Programas 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. NO ERRORS MODULE PAGE 2 Para cargar los elementos de la tabla se usan dos directivas DB.1 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. Observe que el ensamblador carga los datos a partir de la dirección 0300H seleccionada por la segunda directiva ORG en la línea 28.90H.2H.101011B.80H.3H.30 END PUBLIC SYMBOLS EXTERNAL SYMBOLS ISIS-II 8080/8085A MACRO ASSEMBLER. Directivas generales para relocalización de código Todo lo expuesto en páginas anteriores sobre la sintaxis del lenguaje ensamblador para el 8085A es válido para un gran número de las versiones disponibles del traductor y ofrecidas por segundas fuentes.15H 33 34 DB 20H.24H. V4.45.

obj Como salida se obtiene un archivo en formato HEX INTEL llamado: nombre. H02B. el archivo objeto puede ser procesado por AVLINK por medio del comando: C:\avlink nombre=prueba. archivo objeto archivo de listado Aunque el programa fuente conste de un módulo de entrada único y sólo contenga segmentos absolutos. El programa enlazador/relocalizador denominado AVLINK.obj prueba.prn. a partir de los segmentos de cada archivo fuente. las órdenes necesarias para configurar y ejecutar el enlazador. resaltando que todo lo expuesto en páginas anteriores sobre el lenguaje ensamblador es válido para el AVMAC85. En la tabla 7.asm es el nombre de un archivo fuente.8 se especifican las directivas de ensamblador usadas para relocalización del código. Por ejemplo. A diferencia de lo establecido en el párrafo anterior para la sintaxis del traductor. es la siguiente: C:\avmac85 prueba Como resultado se obtienen dos archivos: prueba. Como otro ejemplo. El AVMAC85 puede distinguir dos tipos de directivas para relocalización de código: aquellas usadas para definir y seleccionar los segmentos del programa (DEFSEG y SEG) y las usadas para dirigir el enlazado del código objeto relocalizable (PUBLIC y EXTERN). puede procesar varios módulos con segmentos reubicables y crear un archivo único ejecutable. considere que prueba. utilizan: 0x02B. Aunque parece engorroso especificar por línea de comando. algunos programas ensambladores en lugar de usar la nomenclatura: 02BH para representar el número 4310 en hexadecimal. La sintaxis del enlazador se detalla en la figura 7. .hex. La sintaxis del comando necesario para ensamblar el programa fuente. Para ilustrar el uso de este traductor.Desarrollo y Simulación de Programas 350 samblador realizando pequeñas modificaciones al código fuente.25. o simplemente 02B. En esta sección se discuten las directivas para relocalización del Macroensamblador AVMAC85. más adelante se explicará como es posible automatizar el proceso de ensamblar y enlazar los archivos de un programa fuente. el número y tipo de directivas generales usadas para controlar la generación de código relocalizable y el posterior enlazado de los módulos objetos. los símbolos %IF y %ENDIF sustituyen a las directivas IF y ENDIF. si presenta diferencias representativas de una versión de ensamblador a otra.

PUBLIC Define un símbolo público. Directivas para relocalización de código. Tabla. La selección de un segmento previamente definido causa que toda instrucción o dato subsiguiente sea ensamblado en esa área de memoria. DEFSEG La sintaxis de esta directiva es. El código es ensamblado y enlazado para ejecutarse en direcciones lógicas. DEFSEG nombre .25. 7. Los distintos segmentos usados por el programador en una aplicación determinada deben definirse al inicio del programa. DEFSEG Asigna el nombre de un segmento.8.Desarrollo y Simulación de Programas 351 Fig. el segmento es relocalizable y de clase CODE. EXTERN Define un símbolo externo. SEG Activa el segmento. datos constantes y datos que pueden ser modificados. A continuación se presentan las directivas usadas para la definición y activación de segmentos. Pantalla de ayuda del programa AVLINK. atributos Define un segmento de usuario denominado nombre. El punto de carga del nuevo . Si no se especifican atributos. Los segmentos se usan para definir la posición en memoria del código. El hecho que las direcciones del µP sean cantidades de 16 bits limita el tamaño de los segmentos a un valor menor o igual 64K.7.

Desarrollo y Simulación de Programas 352 segmento es puesto a cero. CLASS= clase Es opcional y asigna el nombre de la clase del segmento. Esta discriminación hace posible definir segmentos M e I en el mismo rango de direcciones. Puede ser usado para indicar que el código debe cargarse en EPROM o EEPROM y que los resultados deben almacenarse en la zona de RWM. incluso si residen en módulos distintos. Esto significa que tal sección de código o datos se concatena (uno se inicia donde termina el otro) con otros segmentos del mismo nombre. Coloca al segmento en la clase DATA. En caso contrario. Si éste es absoluto. recuerde que si no declara atributos al definir un segmento.28. START indica al enlazador la dirección de origen del segmento relocalizable. La información de START es usada por el enlazador/relocalizador y puede ser modificada en el momento del enlace. actúa como una directiva ORG. Las clases válidas son: CODE DATA IOSPACE Ubica al segmento en la clase CODE. Si el atributo CLASS es omitido. Aunque en la figura 7. como se observa en las opciones del AVLINK en la figura 7. ABSOLUTE Establece que el segmento es absoluto. donde éste debe ser una potencia de dos. el atributo START= es ajustado para que se inicie en valor. las pruebas realizadas no tuvieron éxito. Los atributos permitidos son los siguientes y deberán estar separados por comas. Cuando el segmento es enlazado por AVLINK. ALIGN= valor Fija el alineamiento del segmento. Asignar este atributo hace posible el uso de ORG dirección en el cuerpo del segmento. debido a que corresponden a posiciones lógicas pertenecientes a espacios distintos. DEFSEG define el segmento pero no lo activa. Debido a que los chips microcontroladores tienen una arquitectura con área determinadas de memoria interna. éste será relocalizable por defecto y el uso de la directiva ORG causará la emisión de un . la clase CODE se fija por defecto. Aunque los atributos son declarados en el archivo fuente esta información no es usada por el ensamblador. START= expresión Asigna la dirección lógica de inicio del segmento. Si valor no es potencia de dos. El ensamblador si diferencia los segmentos de memoria 'M' (CODE y DATA) de aquellos de entrada/salida 'I' (IOSPACE). en el sentido que no agrupa segmentos de la misma clase. En realidad la definición de los atributos de un segmento es prorrogada hasta el momento del enlazado. En el caso del AVMAC85.28 se indica que existen opciones de AVLINK para fijar la dirección de inicio y final de los segmentos pertenecientes a una clase. Este es un segmento relocalizable de memoria Pone al segmento en la clase IOSPACE. Los segmentos son por defecto relocalizables y concatenables. el alineamiento ocurre en la dirección representada por la potencia de dos inmediatamente inferior a valor. Este es un segmento relocalizable del espacio de entrada/salida del procesador. Este es un segmento relocalizable de memoria. las clases son vitales para especificar la clase de espacio de memoria donde residirá el segmento. Este atributo se usa para aquellos segmentos reubicables que solo pueden ser cargados en direcciones determinadas. éste no parece distinguir entre las clases CODE y DATA.

stack xra a .Desarrollo y Simulación de Programas 353 mensaje de error. Además el atributo indica que secciones del programa con el mismo nombre pueden ocupar direcciones que se solapan en el espacio de direcciones lógicas aunque permanecen en direcciones físicas diferentes. START=40H DEFSEG SOLP. OVERLAID DEFSEG DATO. START=0 DEFSEG LAB. aunque el segmento resida en varios módulos. CLASS=CODE. Su sintaxis tiene la forma. BLOCK=8000h. ALIGN=80H SEG Activa el segmento llamado nombre definido previamente con la directiva DEFSEG. Ejemplos: DEFSEG PROG. AVLINK genera un mensaje de error. Ejemplos: DEFSEG PROG. Cada clase tiene un segmento predefinido por el ensamblador. ABSOLUTE. DATA e IOSPACE sin requerir el uso de DEFSEG para estos segmentos. Si el segmento tiene START=. hasta que el bloque sea desactivado por otra directiva SEG que seleccione un nuevo segmento. BLOCK= expresión Fija el valor máximo permitido para el segmento. . los cuales son de uso opcional por el programador. . Si esta restricción es violada. CLASS=CODE. El comando ORG dirección puede utilizarse en un segmento relocalizable pero únicamente si éste tiene el atributo START= y pertenece por entero a un módulo. OVERLAID Este atributo sólo puede ser usado para segmentos del mismo nombre en más de un módulo. la condición OVERLAID permite el uso de la directiva general ORG dirección. START=0 SEG PROG lxi sp. Esto permite el uso de bancos de memoria conmutados durante la ejecución. La directiva SEG puede activar a los bloques predefinidos con nombres: CODE. SEG nombre Toda instrucción o dato declarado a continuación se ensamblará en este segmento. . CLASS=CODE DEFSEG ABS.

Puede especificarse varias etiquetas separadas por comas. . EXTERN Especifica que el operando etiqueta tiene un alcance externo.5. START=2000H SEG DATOS DB 1.6.3.4. aunque ésta sea definida en otro.stack xra a .6. . Un símbolo externo no puede definirse como público. usadas en relocalización de código. dir).8 SEG DATA DB 1. Las directivas restantes: PUBLIC y EXTERN.7.5. Sólo puede existir una directiva PUBLIC para una etiqueta.2. PUBLIC etiqueta El símbolo etiqueta deberá estar definido en el módulo donde se declara como público y estará disponible para uso de los otros módulos del programa. Puede especificarse más de una etiqueta. DEFSEG DATOS. EXTERN etiqueta . hacen posible la comunicación entre los diferentes módulos que componen un programa. en cuyo caso deben separarse por comas.3. CLASS=DATA.7.8 DEFSEG ABS. Una rutina contenida en un módulo determinado puede ser llamada desde otro módulo y una etiqueta de direcciones o datos puede ser usada por el código localizado en un archivo fuente. En el momento del enlace puede definirse la dirección de carga de un segmento usando la opción AVLINK: -PS (nombre_seg.4. PUBLIC Declara que el operando etiqueta tiene un alcance publico.2. El segmente CODE es ensamblado a partir de la dirección cero y una vez terminado se ensambla el bloque DATA. ABSOLUTE SEG ABS ORG 300H DB 'UDO 2003' ORG 500H DB 'Prueba final' Observe que los segmentos CODE y DATA no fueron definidos antes de su selección.Desarrollo y Simulación de Programas 354 SEG CODE lxi sp.

El uso de la etiqueta data dos veces no causa mensaje de error debido a que toda identificador cuyo nombre va precedido por (..data yln . Primera definición del identificador: data . se produce una indicación de error por definiciones múltiples de un mismo identificador. Segunda definición del identificador: data El ejemplo siguiente muestra el uso de procedimientos y símbolos locales. Una solución a este obstáculo es el uso de procedimientos. inicio procedimiento nombre Considere que los siguientes procedimientos pertenecen a un mismo programa.8 Debe escribirse un programa que examine el contenido del acumulador y si: (A) = 'M' (A) ≠ 'M' (HL) (H) (C) • (E) (C) ÷ (E) (L) residuo . lo marca la directiva PROC. Ejemplo 7.data PROC ds 10H ENDPROC PROC ds 10H ENDPROC .) sólo es conocido entre la directiva PROC anterior y la directiva ENDPROC posterior. Esto significa que una etiqueta local puede ser usada en otra sección del programa sin causar error. Un procedimiento es una forma de escribir una subrutina. Las siguientes directivas definen un procedimiento. los cuales permite el uso de símbolos locales conocidos sólo dentro del procedimiento.. nombre PROC . PROC y ENDPROC El inicio de un procedimiento denominado nombre.Desarrollo y Simulación de Programas 355 Hace posible el uso en un módulo de una etiqueta aunque esté definida en otro módulo. El símbolo data tiene alcance local al ser precedido por dos puntos contiguos. El símbolo etiqueta deberá ser declarado como público en el módulo donde es definido o en caso contrario AVLINK emitirá un mensaje de error. ylog . Si en un mismo archivo fuente o en módulos diferentes se define una etiqueta más de una vez..

. enlazado y relocalización de distintos segmentos contenidos en módulos diferentes.salto mov l. B a cero .salto: dad b dcr e jnz . División por restas sucesivas div PROC mvi h.h . La multiplicación se hará por sumas sucesivas y la división por restas sucesivas. Si no igual.0 mov a..salto: sub e cmp e inr h jnc .a ret div ENDPROC END (HL) (C)*(E) .. Si igual.Operando de 8 bits. A continuación se presenta un ejemplo que muestra los pasos a seguir para programar una tarea en forma modular e ilustra el proceso de ensamblaje.. multiplique ..salto ret mul ENDPROC .Repetir las veces que indique el multiplicador (H) (C)/(E) (L) residuo El programa supone que los operandos son cargados en los registros B (multiplicando o dividendo) y en C (multiplicador o divisor).Desarrollo y Simulación de Programas 356 Las operaciones aritméticas se realizan con operandos de 8 bits y deben usarse procedimientos para cada una.0 mov b. pero al ser un símbolo local no hay indicación de error. Compare A con ASCII M . Observe que la etiqueta salto se define dos veces.c . stack: equ 07ffh lxi sp. El cociente de 8 bits se deposita en L y el residuo en E.Resultado cero al inicio . divida salto: . El resultado de 16 bits del producto se almacena en el registro par HL.stack cpi 'M' jnz salto call mul hlt call div hlt .HL = HL + BC . Multiplicación por sumas sucesivas mul PROC lxi h.

45 uS y el puerto 8 en t =15. Estas salidas siguen el valor de las entradas hasta que el flanco negativo de CLK retiene el último dato.ASM: Programa principal.ASM: ENTSAL. Las tareas a realizar por el programa se distribuirán en cinco módulos en archivos particulares.26.ASM: RAIZ. Suponga que el sistema tiene de 2Kbytes de EPROM con inicio en cero y ¼ de Kbytes de RWM a partir de 0800H. Cuando el dispositivo externo coloca un dato en las entradas D0-D7 del puerto 8.43 uS. El puerto 8 consiste de un registro latch del tipo 74LS373 y el puerto de entrada 9 se realiza con un buffer de tres estados 74LS125. El programa se mantiene leyendo continuamente el puerto 9 hasta detectar que esté en nivel alto. Estos son: PRPAL. en cuyo caso leerá el valor en el puerto de entrada 8. Los resultados de cada operación deben cargarse en la memoria RWM.28 muestra los resultados de la simulación del circuito de puertos usando la herramienta ORCAD/PSPICE. Código usado por RAIZ. Este mantiene sus salidas en tercer estado porque la entrada OC de habilitación de salida está en nivel alto. Las líneas triples indican estado de alta impedancia. . Rutina de manejo de datos y resultados Rutina de adquisición de datos. El diagrama eléctrico de los puertos del sistema se muestra en la figura 7. El puerto 0 se lee en t =10. Extrae la raíz cuadrada entera de un número de dos bytes. el flanco positivo de la señal CLK lo transfiere a la salida de los flip-flops internos del latch. La figura 7. la salida Q del flip-flop D se pone a cero y se mantiene en este estado hasta cuando el periférico coloque un nuevo dato. En t =0. En este momento el pulso CLK ha desaparecido.9 La tarea a programar consiste en adquirir dieciséis valores hexadecimales del puerto de entrada con dirección 8 y almacenarlos en posiciones consecutivas de la memoria RWM del sistema. el periférico coloca el dato 10101010 a la entrada del 74LS373 y activa el pulso CLK en t =5 uS.Desarrollo y Simulación de Programas 357 Ejemplo 7. Esta última transición también carga un estado lógico alto en la salida Q del biestable 74LS74 anunciando la presencia de un nuevo valor de entrada. Estos datos representan ocho números de 16 bits. a cada uno de los cuales debe extraérsele la raíz cuadrada. Cada vez que un nuevo dato esté disponible para lectura el bit 7 del puerto de entrada 9 se pone a nivel alto .ASM: DIV1616. Observe que cada vez que se carga un dato en el µP desde el registro latch. la indicación de dato listo el dato está activa y la información ha sido cargada por el periférico en el interior del registro.ASM: ADAT.

Desarrollo y Simulación de Programas 358 Fig. Diagrama estructurado del programa del ejemplo 7.8 . Fig.26.7.27.9.7. Puertos de entrada para el ejemplo 7.

.Desarrollo y Simulación de Programas 359 Fig.26.28 Salidas de la simulación con ORCAD/PSPICE para el circuito de la figura 7. 7.

class=data.--------------------------------------------------------------------------------------------------------------------------------. Dirección de puertos de entrada defseg stack.--------------------------------------------------------------------------------------------------------------------------------. el cual a su vez usa la rutina DIV1616 para extraer la raíz cuadrada del valor. seg stack ds 10H .--------------------------------------------------------------------------------------------------------------------------------t_stack:equ $-1 . Finalmente la rutina ENTSAL carga el resultado en la memoria del sistema. Definición de segmentos defseg puertos.tabl . La pila reside en la RWM defseg datos.t_stack . Base de la pila .start=8. 2k de EPROM desde 0000H .sqrt.Dirección del elemento 1 de la tabla de valores call entsal .ndatos . Inicio de la pila i_rwm equ 0800H . Segmento de código en EPROM seg progr lxi sp.--------------------------------------------------------------------------------------------------------------------------------- . Puertos de entrada del sistema seg puertos p8 ds 1 p9 ds 1 .temp1 extern entsal . class=iospace . start=0 . Los 16 bytes últimos de RWM soportan el stack.27.Se carga el apuntador de pila mvi b.Fin de programa end .--------------------------------------------------------------------------------------------------------------------------------. Dirección de inicio de RWM ndatos equ 10H . número de datos de entrada . El programa PPRAL llama a la rutina ENTSAL la cual almacena en memoria los datos de entradas adquiridos por el subprograma ADAT.pb9. start=i_stack .Se inicia proceso hlt . En el programa principal se define la pila y todas las constantes. El código fuente de cada módulo del programa se presenta a continuación: $title(Procesamiento de tabla de valores) $subtitle(Cálculo de raiz cuadrada) .Contador de valores de entrada lxi h. A continuación ENTSAL extrae un número de 16 bits desde la memoria y llama al módulo RAIZ. class=code.tabl.--------------------------------------------------------------------------------------------------------------------------------. start=i_rwm .Desarrollo y Simulación de Programas 360 Los módulos se organizan en forma jerárquica como se ilustra la figura 7.--------------------------------------------------------------------------------------------------------------------------------i_stack equ 08F0H . 256 bytes de RWM a partir de 0800H defseg progr. Segmento de datos en RWM seg datos tabl ds 10H sqrt ds 10H temp1 ds 2 .Modulo de programa principal public p8.

a inx h dcr b jnz adat ret end adat: . . Datos de entrada: Puerto 08 .Dirección de los resultados en BC .Desarrollo y Simulación de Programas 361 $title(Entrada de datos y salida de resultados) . . Los datos desde el puerto se cargan en memoria en posiciones .Apunta a próximo dato .resultado en DE .noper lxi b.raiz.m push h push d xchg push b call raiz mov a.Contador de números de 16 bits .Son 8 números de 2 bytes prox: .tabl push psw mov e.Obtiene los 16 valores desde el puerto 8 .Se extrae la raíz del contenido de HL . Bit de control: Línea 7 del puerto 09 .Modulo ENTSAL public entsal.Se almacena byte bajo del resultado.Modulo ADAT public adat extern p8.p9 defseg adatos seg adatos in p9 ani 80H jz adat in p8 mov m.noper extern adat.BC apunta al número siguiente .sqrt lxi h. consecutivas y representan 8 valores de 16 .--------------------------------------------------------------------------.sqrt noper equ 8 defseg progr seg progr entsal: call adat mvi a.d stax b inr c pop d pop h pop psw dcr a inx h jnz prox ret end .--------------------------------------------------------------------------$title(adquisición de datos) .e pop b stax b inr c mov a.tabl.Se almacena byte alto del resultado .m inx h mov d.Terminar si se procesaron todos los valores.Dirección de los datos en HL .bits. .

El bloque stack corresponde al apila del sistema y se ubica en las posiciones finales de la memoria RWM.a lhld temp1 xchg call div1616 mov h.obj calc. Finalmente.obj raiz.e jmp rep end $title(División entera 16x16) .d mov c. El segmento datos reserva 32 posiciones de RWM para los datos adquiridos y los resultados y 2 localidades para variables temporales.l rar mov e.b cmp d jnz cont mov a.asm avmac85 div1616. se ejecuta la siguiente secuencia de comandos: avmac85 prpal.obj div1616 El programa ejemplo consta de cuatro segmentos definidos en el programa principal. El segmento progr contiene el código del programa y se origina en la dirección de inicio de la EPROM.Desarrollo y Simulación de Programas 362 $title(Cálculo de raìz cuadrada) .asm avmac85 raiz.Modulo RAIZ public raiz extern div1616. stack y datos) y el restante (puertos) es de espacio de E/S.0 div161: xchg dad h xchg jnc yyy dad h inr l jmp www yyy: dad h www: inr e push psw mov a.a mov a.10H lxi h.c dad d inx h mov a.a mov a.obj adat. tres de los cuales son de memoria (progr.h rar mov d.temp1 defseg progr seg progr shld temp1 mov a.hex.c cmp e rz mov b.a mov a.asm avlink ejem78=prpal.asm avmac85 adat.a jnc div162 dcr e dad b div162: pop psw dcr a jnz div161 ret end raiz: rep: cont: Para generar el archivo ejecutable denominado ejem78.l sbb c mov l.b mov l.asm avmac85 calc.l rar mov c.h sbb b mov h. Segmentos parciales del mismo nombre se activan en cada módulo y son tratados por el enlazador como un segmento único de código. puertos define las direcciones de los puertos de entrada. .Modulo DIV1616 public div1616 defseg progr seg progr div1616: mvi a.h rrc mov a.

el archivo objeto no contiene direcciones absolutas. se deben sustituir los módulos correspondientes y las nuevas rutinas deben ser llamadas desde ENTSAL. Cuando el enlazador avlink. Observe que los módulos predefinidos por el ensamblador (CODE.Dirección de los resultados en BC .tabl push psw mov e.Obtiene los 16 valores desde el puerto 8 .tabl.Dirección de los datos en HL . si en lugar de extraer la raíz cuadrada se requiere realizar alguna otra operación sobre los datos.Terminar si se procesaron todos los valores.Se extrae la ramz del contenido de HL . Modificando el programa principal se puede variar el número de valores a procesar y el área de almacenamiento de datos y resultados.sqrt lxi h.noper lxi b.Son 8 números de 2 bytes =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 .d stax b inr c pop d pop h pop psw dcr a inx h jnz prox ret end . DATA e IOSPACE) no se usan.Contador de números de 16 bits . El programa enlazador/relocalizador usa la información suministrada por las directivas de relocalización declaradas en el cuerpo del programa para generar un módulo ejecutable con direcciones completamente definidas. las direcciones aún no están definidas.resultado en DE . 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.sqrt equ 8 defseg progr seg progr call adat mvi a. es la salida con extensión prn (lista) producto del ensamblaje del módulo entsal.Apunta a prsximo dato . . Debido a que las direcciones reales no se conocen en el momento del ensamblaje. se genera en forma adicional un archivo ASCII con extensión map que contiene información detallada sobre el proceso de enlazado.exe se ejecuta activando la opción –sm.Se almacena byte alto del resultado . Observe que por ser relocalizable el código dentro del módulo. Además. En la página que sigue se muestra el contenido de este archivo.noper extern adat.Desarrollo y Simulación de Programas 363 Cada archivo fuente se ensambla en forma independiente.Se almacena byte bajo del resultado. . generándose un módulo objeto.raiz.m inx h mov d. El listado siguiente.e pop b stax b inr c mov a.BC apunta al nzmero siguiente .m push h push d xchg push b call raiz mov a.asm.

CLASS 'I' SYMBOL NAME P8 P9 SYMBOLS -.02.CLASS 'M' SYMBOL NAME ENTSAL RAIZ DIV1616 ADAT TABL SQRT TEMP1 SYMBOLS -. CLASS 'I' START 0008 CLASS 'M' START 0000 007c 0800 08f0 STOP 007b 008b 0821 08ff LENGTH ovl/cat def/undef 007c Concat Defined 0010 Concat Defined 0022 Concat Defined 0010 Concat Defined STOP 0009 LENGTH ovl/cat def/undef 0002 Concat Defined START 0000 0000 0000 START 0008 0009 SYMBOL'S SEGMENT def/undef PUERTOS Defined PUERTOS Defined START 000c 0032 0058 007c 0800 0810 0820 SYMBOL'S SEGMENT def/undef PROGR Defined PROGR Defined PROGR Defined ADATOS Defined DATOS Defined DATOS Defined DATOS Defined START 0008 SYMBOL'S SEGMENT def/undef ABSOLUTE Defined MODULE DATA -------MODULE: SEGMENT NAME CODE DATA IOSPACE PUERTOS STACK DATOS PROGR MODULE: SEGMENT NAME CODE DATA IOSPACE PROGR prpal OFFSET 0000 0000 0000 0000 0000 0000 0000 entsal 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 .Desarrollo y Simulación de Programas 364 AVLINK ---.LOAD MAP For: Avocet 8085/Z80 Assembler v2.CLASS 'N' SYMBOL NAME NOPER No Transfer Address. #01235 RELOCATED SEGMENTS SEGMENT NAME PUERTOS RELOCATED SEGMENTS SEGMENT NAME PROGR ADATOS DATOS STACK ZERO LENGTH SEGMENTS SEGMENT CODE DATA IOSPACE SYMBOLS -.

realizado como tesis de grado por el Ing. el Sistema Integral de Desarrollo para el Microprocesador 8085 (SID85).4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS La realización de un proyecto de una aplicación basada en μPs transciende el simple uso de un ensamblador. Un sistema de desarrollo y emulador profesional para el 8085A puede costar la astronómica cifra de $6000. En la figura 7. César García. El SID85 ofrece en un ambiente orientado a ventanas los siguientes recursos: . En el diseño de sistemas de cierta envergadura es casi obligatoria la presencia de un sistema de desarrollo. dotado con las herramientas de programación mínimas necesarias. Para solventar este problema se desarrolló en el año 1995. un PC por ejemplo. la situación hace diez años era bien diferente ya que el estudiante de Sistemas de Microprocesadores no disponía de simulador alguno. egresado de nuestra Universidad. Una solución común para superar este obstáculo es desarrollar el programa usando un µC de propósito general. enlazador/relocalizador y un simulador del µP. con ejecución en plataformas Linux y Windows. el cual por su costo elevado rara vez está a la disposición de quienes asisten a un curso básico de sistemas de μP. aunque es posible adquirir sistemas de bajo costo con menos prestaciones por menos de una décima parte del precio señalado.Desarrollo y Simulación de Programas 365 MODULE: SEGMENT NAME CODE DATA IOSPACE ADATOS MODULE: SEGMENT NAME CODE DATA IOSPACE PROGR MODULE: SEGMENT NAME CODE DATA IOSPACE PROGR adat OFFSET 0000 0000 0000 0000 raiz OFFSET 0000 0000 0000 0032 div1616 OFFSET 0000 0000 0000 0058 NUMBER OF SEGMENTS: 4 STOP 0000 0000 0000 000f LENGTH 0000 0000 0000 0010 NUMBER OF SEGMENTS: 4 STOP 0000 0000 0000 0057 LENGTH 0000 0000 0000 0026 NUMBER OF SEGMENTS: 4 STOP 0000 0000 0000 007b LENGTH 0000 0000 0000 0024 7. ensamblador cruzado.29 se muestra un diagrama de flujo de los pasos a seguir para el diseño de programas usando estos recursos. estas son: editor de textos. Aunque en la actualidad pueden obtenerse en INTERNET más de veinte simuladores para el 8085A.

29 Fases del desarrollo del programa .Desarrollo y Simulación de Programas 366 Fig.7.

Es obvio que la utilización del SID85 garantiza que la grabación de la memoria EPROM solo se realiza una vez. Si se toma en cuenta que un programa objeto creado y depurado con el SID85 está listo para ser grabado en EPROM. • Ensamblador cruzado (ASM85).30 se muestra la pantalla de inicio del programa.6. Un programa puede ser creado y modificado. • Simulador del μP8085A (SIM85). cuando el programa pasa la prueba de la simulación y de la ejecución en tiempo real. ofreciendo capacidad de edición de registros. simulado en modo de corrida libre o paso a paso. Para ilustrar el uso de nuestro primer simulador. es justo decir que se dispone de un sistema de desarrollo de bajo costo. memoria y puertos de E/S.7. El la figura 7.Desarrollo y Simulación de Programas 367 • Editor de texto. Fig. sin duda alguna.30 Presentación del SID85 . El SID85 representó. Una tarjeta para desarrollo MPR85 conectada al puerto paralelo del PC. un recurso de gran valor para la enseñanza de μPs y para el desarrollo de aplicaciones. se usa el SID85 con el programa del ejemplo 7. habilita la prueba en tiempo real del programa bajo desarrollo. El SID85 permite la simulación de interrupciones de hardware y de las líneas de comunicación serie. Información adicional sobre el SID85 puede obtenerse en el informe del trabajo de grado. • Conexión con el microcomputador MPR85.

Se carga el archivo ejem7_6. Fig7.asm. El procedimiento para realizar la simulación.lst y ejem7_6.32. es el siguiente: 1.6. con posibilidad de extenderse a 64 K . 1 Hasta 4 K en el SIM85. El código objeto ocupa 55 bytes consecutivos de la RAM 1 del sistema.32 Editor de memoria del SID85 mostrando como se almacena en la RAM el código objeto del ejemplo 7. se generan: ejem7_6.obj en la dirección de memoria 0000H. como muestra la figura 7.obj.31 Editor del SID85 Al ensamblar el archivo ejem7_6.Desarrollo y Simulación de Programas 368 Fig.7.

.33a para almacenar en el contador de programa la dirección de inicio del programa a ejecutar. (a) (b) Fig. debido a que apunta a la dirección 0000H.Desarrollo y Simulación de Programas 369 2.33 (a) Registros internos del µP b) Ventana de selección modo de ejecución. Se activa el editor de registros de la figura 7. En este caso no existe necesidad de cambiar el contenido del PC.7.

como ilustran las figuras 7. Para probar el programa se edita el puerto de entrada 00H y se escribe el primer caracter.6 se hace referencia a la memoria (dirección 1000H) y a los puertos de E/S (00. se activan los editores de memoria y puertos en las direcciones señaladas.Desarrollo y Simulación de Programas 370 3. 01 y 02). El pulso de habilitación se simula escribiendo la palabra de control 01H (subida del pulso) en el puerto 02H.35 Editor de puertos del SID85 La simulación debe ejecutarse paso a paso. mostrando los resultados de la simulación. Bloque de memoria 1000H-1077H.34 y 7.35. Fig. que en el puerto 00H existe un caracter válido para lectura. El periférico conectado al puerto de entrada señala al μP. Fig 7. 7. con un pulso de control en el bit 0 del puerto 02H. se activa el paso a paso hasta que el caracter sea . Debido a que para lograr su propósito.34. la rutina del ejemplo 7.

6. Este programa fue escrito por un estudiante del curso de Sistemas de Microprocesadores dado la necesidad de disponer de un sistema de desarrollo de bajo costo para realizar las asignaciones de la asignatura. se llamaría a una subrutina que se encargaría de distinguir los dígitos y escribirlos a memoria o puerto. más o menos funcionales. En la figura 7. Esta forma requiere la realización de algunas modificaciones en el programa del ejemplo 7. Para la lectura de un nuevo caracter. Versiones de evaluación.1 Programas para simulación del microprocesador 8085 El sistema integrado para desarrollo SID85 no es la única ni la mejor herramienta disponible para desarrollar programas para el microprocesador 8085. usando periféricos comerciales. Estos permiten el desarrollo de los programas de la aplicación en un entorno muy similar al real. La mayoría operan en forma correcta aunque algunos fallas en la ejecución de instrucciones específicas.36 se muestran los iconos de 16 simuladores. de ambientes integrados para desarrollo de código. si es un dígito válido. El proceso continúa hasta que sean escritos los 16 dígitos. no por el procesador. Algunos de estos programas trascienden a la simple simulación de la ejecución de las instrucciones del CPU y se presentan como simuladores de un microcomputador basado en el 8085. antes de que se registre el nuevo caracter. Debido a que en modo RUN no es posible editar los puertos no es posible simular activar/desactivar el bit de control. teclado y pantalla de visualización. esperando que el pulso de control suba a nivel alto. Recuerde que en el mundo real la entrada del dato es controlada por el dispositivo de entrada. y a la vez emule el pulso de control. y programas de uso público para simulación del 8085 pueden ser descargados de Internet. Tales errores han sido participados a los autores de los simuladores y en ciertos casos éstos han realizados las correcciones correspondientes.4. en forma de programa principal. en caso de no ser un caracter hexadecimal. En su momento y aun ahora el SID85 puede cumplir tal función. el sistema entrará en un lazo. y solo sería un recurso para la depuración del programa. el pulso de control debe ir primero a cero (bajada del pulso). Es posible escribir una rutina. que transfiera los 16 caracteres en forma automática hacia el puerto. El autor ha evaluado dos decenas de estos programas y se ha verificado su funcionamiento. . Cada vez que un caracter se presente al puerto. Si la ejecución se hace en modo de corrida libre (RUN). 7. o escrito al puerto 01H.Desarrollo y Simulación de Programas 371 almacenado en memoria. y el control sea transferido al sistema. todos contenidos en el disco compacto entregado al inicio del curso. escribiendo 00H en el puerto 02H.

memoria y puertos de E/S. transmisor/receptor universal UART 8251. Ofrece soporte para interrupciones. Si se desea simular la operación de periféricos comerciales como el PPI 8255. en busca de nuevas herramientas y de las actualizaciones de las versiones disponibles.36. Permite la ejecución del código en modo de . módulo LCD. teclado para entrada de datos. los cuales sólo soportan puertos mapeados como memoria (no reconocen las instrucciones IN/OUT). será necesario escoger el WSIM85 como herramienta de simulación Este trabajo no dispone de espacio para presentar en forma detallada el funcionamiento de los programas. La única excepción son: el 8085 Simulator y el MPS85KIT.36 Algunos de los simuladores en el CD de trabajo. puede usar cualquiera de los programas de la figura 7. pero no emula las líneas SID y SOD para comunicación serie. Todos disponen de algún tipo de ayuda y de ejemplos para orientar a quien se inicia A continuación se presentan las características dignas de resaltar de aquellos simuladores que se consideran de mayor utilidad para el curso. Si el usuario desea verificar la ejecución de un programa y examinar el contenido de los registros. Se recomienda al estudiante visitar la WEB periódicamente. El ambiente gráfico es muy amigable y los programas una vez ensamblados se cargan automáticamente en memoria. MICRO 85 Es una aplicación de ambiente WINDOWS que simula la operación de una tarjeta de evaluación comercial denominada MICRO 85.Desarrollo y Simulación de Programas 372 8085 Instruction Set Simulator 8085 Simulator Ide 8085 Virtual Kit 8085-Simulator [SW] Micro 3 AVSIM85 (DOS) Micro85 8085 Simulator Microprocessor 8085 Simulator MPS85-KIT SID85 (DOS) Sim8085 Simulator Vsim Win85 WSIM85 Fig. Puede editarse la memoria y los registros incluyendo el de máscara de interrupción y el de banderas. un controlador de teclado/display 8279. 7. La selección del simulador a usar depende estrechamente de las necesidades de la aplicación.

• Un PPI 8255. • Memoria RAM 6264 de 8K.5 0024H FFB0H 003CH FFB3H 0034H FFB6H PPI8255 . • CPU 8085. Las siguientes funciones de la tarjeta MICRO85. Fig.5 RST6. 7. Millenium o XP. son simuladas por el programa.37 Editor de textos y contenido de la memoria 6264. El ensamblador es limitado y el programa no corre en ambientes Windows 2000. Mapa de memoria E000H-FFFFH RAM Mapa de E/S 08H – 0BH Interrupciones Los vectores de interrupción han sido cambiados según se indica: TRAP RST7.Desarrollo y Simulación de Programas 373 corrida libre y paso a paso.

39 Puertos de Entrada y salida. Una vez escrito el programa fuente se pulsa el botón ensamblar y el programa es traducido y cargado en RAM. mostrada en la figura 7. El circuito para interconexión de E/S 8255 puede ser programado en la ventana del PPI de la figura 7.5 INTR RST 0 RST 1 RST 2 RST 3 RST 4 RST 5 RST 6 RST 7 002CH FFB9H Ejecuta una de las RST n 0000H 0000H 0008H FFCBH 0010H FFC8H 0018H FFC5H 0020H FFC2H 0028H FFBFH 0030H FFCBH 0038H FFCEH En la figura 7.38. El contenido de los puertos de entradas también puede ser modificado. 7.Desarrollo y Simulación de Programas 374 RST5. Fig.37 se observa el editor de textos y la ventana de memoria RAM.38 Registros internos del 8085 y sistema de interrupciones. Fig. . El contenido de los registros puede ser modificado en la ventana del CPU. 7.39 o directamente por programa.

La versión de evaluación acepta programas hasta 256 bytes de tamaño. Por ejemplo la figura 7. Las opciones de este simulador son diversas y no pueden exponerse con detalle en este trabajo. . Excepto el código todos estos elementos pueden ser modificados con un click del ratón. el simulador puede ser de alguna utilidad. Acepta la inserción de puntos de ruptura durante la corrida lo cual hace más fácil la depuración del código. Los módulos posibles de interconectar al 8085 son: 8279 Controlador programable de teclado/display.40 Se observa la ventana de código. Es capaz de simular el CPU y diversos dispositivos periféricos y el ensamblador es aceptable. 8255 Interconexión programable de E/S 8251 Transmisor receptor universal.41 corresponde al 8279 pudiéndose especificar la dirección del puerto y la entrada de interrupción del 8085 a la cual se conecta la salida de interrupción del 8279. LCD Módulo de cristal líquido Las ventanas principales del WSIM85 se muestran en la figura 7.Desarrollo y Simulación de Programas 375 El ensamblador no contiene todas las funciones de un programa comercial pero en general. pueden definirse hasta 4 bancos de RAM/EPROM definiendo las direcciones de inicio y fin de cada banco. Ofrece soporte para el sistema de interrupciones del microprocesador pero no simula los terminales SID y SOD para comunicación serie. • Pueden definirse las direcciones de los puertos de los controladores de periféricos a conectarse al µP. 8253 Temporizador programable. El programa en memoria puede ejecutarse en corrida libre o en modo paso a paso. 8155 RAM + E/S + Temporizador. la memoria y de los módulos de E/S conectados en la aplicación. Los recursos disponibles son: • Para especificar el tipo y capacidad de la memoria disponible. Desafortunadamente el archivo fuente debe ser ensamblado por un programa externo. También es posible definir los códigos de siete segmentos para los caracteres de acuerdo con el tipo de indicador utilizado. La aplicación WSIM85 tiene una opción de configuración que permite definir el mapa de la memoria EPROM/RAM del sistema y los periféricos conectados al 8085. Se recomienda al estudiante el uso de esta herramienta por ser de suma utilidad. WSIM85 Es quizás el más útil de todos los simuladores del 8085. los registros internos. Cada controlador tiene su ventana de dialogo para definir su modo de operación. Acepta archivos en formatos HEX y binario. La ayuda es aceptable y ofrece programas ejemplos.

7.41 Ventana de configuración del controlador de teclado/display 8279 .40 Entorno gráfico de WSIM85 Fig. 7.Desarrollo y Simulación de Programas 376 Fig.

El µC puede usar el teclado para examinar y modificar la memoria RWM y los registros del 8085 y además se puede ejecutar programas previamente cargados en la tarjeta.43. Como todos los simuladores el programa pude ser ejecutado por pasos o en corrida libre. . MICRO3 Aunque este programa no simula controladores de periféricos comerciales su modo de operación es de gran ayuda desde el punto de vista del seguimiento de la ejecución del programa.asm para el control de un microcomputador (µPro 85) con teclado y pantalla de 6 dígitos. 8085 Virtual Kit Este recurso es un verdadero modelo de programación de una tarjeta real de evaluación y entrenamiento para el microprocesador 8085A. El código fue simulado en el WSIM85. El resultado fue realmente un éxito que permitió desarrollar el software para una aplicación real sin tener que construir el prototipo. La figura 7. Otra ventaja de esta herramienta que supera el obstáculo del uso obligado de un ensamblador externo. Cuando el programa es ejecutado se presenta una ventana denominada simulador con la historia de las últimas 25 instrucciones ejecutadas. puede incorporase a un Entorno Integrado para Desarrollo o IDE (Integrated Development Environment). el teclado de instrucciones y la ventana del simulador.Desarrollo y Simulación de Programas 377 El autor escribió un programa mon85. El editor de instrucciones no es muy amigable pero tiene un teclado de código que facilita la escritura del programa. El proceso de edición. Posee un teclado totalmente funcional y 6 indicadores de siete segmentos para presentar información como ilustra la figura 7.42 muestra la ventana de código. Este software intenta simular un sistema microprocesador con hardware real. de las banderas y de los puertos de E/S. Una vez introducido el programa se pulsa el botón RUN y el archivo fuente es ensamblado y el código objeto es cargado en memoria. la representa el hecho que al aceptar la carga de archivos de entrada desde la línea de comando. Por ejemplo el controlador de teclado/display opera en forma similar al 8279. ensamblaje y enlazado se realiza con los recursos del IDE y al final se invoca el WSIM85 para simular el archivo ejecutable. Para controlar la ejecución del programa se pueden insertar puntos de ruptura accionando el ratón sobre la instrucción correspondiente. mostrando para cada una el contenido de los registros internos. No soporta interrupciones ni los terminales para comunicación serie. No tiene editor de memoria pero se pueden definir y modificar hasta cuatro puertos de E/S.

7.Desarrollo y Simulación de Programas 378 Fig.42 Ventanas del simulador MICRO3. .

Desarrollo y Simulación de Programas

379

Fig. 7.43 Ventana principal del 8085 Virtual Kit.

El SDA 85 tiene las siguientes características:
• • • • • • • Editor de textos excelente. Modela hardware similar al real. Programa monitor incorporado con posibilidad de modificación. Simulación de teclado e indicadores visuales. Soporte para interrupciones y comunicación serie. Ejecución de programas paso a paso. En el modo trace se visualiza la ejecución de instrucciones en el programa fuente.

Al no tener editor de memoria, sólo puede examinarse/modificarse la memoria de datos desde el teclado pero los programas a ejecutar se cargan automáticamente en RAM. Posee un editor de puertos pero los registros sólo pueden modificarse por programa, lo cual es una desventaja severa. El programa monitor mon85.asm fue modificado y usado como monitor del 8085 Virtual Kit, funcionando en forma correcta. El archivo no solo incorpora el examen/modificación de memoria y la ejecución de programas, sino que se incluye la opción de examen/modificación de registros, función no realizada por la versión original del 8085 Virtual Kit.

Desarrollo y Simulación de Programas

380

8085 Simulador IDE Este programa constituye una herramienta de gran valor para el desarrollo de software de aplicaciones basadas en el microprocesador 8085. En un ambiente gráfico integra un compilador BASIC, ensamblador, simulador del µP, depurador y desensamblador. Las características del programa son:
• • • • • • • • • • Editor de texto y ensamblador integrado. Acepta la entrada de archivos con extensiones .obj y .hex. Editor de memoria. Módulo de dispositivos periféricos. Módulos externos. Editor de puertos. Administrador de puntos de ruptura. Compilador BASIC. Desensamblador. Registrador visual de la simulación.

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 instrucción a ejecutar, el número de estados del programa, el contador de instrucciones, las líneas de comunicación serie y las interrupciones del microprocesador.

Fig. 7.44 Ambiente de trabajo del 8085 Simulator IDE.

Desarrollo y Simulación de Programas

381

Fig. 7.45 Editores de memoria y puertos.

Este programa se recomienda porque es muy completo y facilita la simulación de código. El contenido de cualquier posición de memoria o de un puerto puede ser modificado en el curso de la simulación. La figura 7.45 muestra los editores correspondientes. Además el usuario dispone de un módulo de dispositivos periféricos, mostrado en la figura 7.46, con indicadores luminosos conectados a las líneas de cua-

Desarrollo y Simulación de Programas

382

tro puertos de E/S y una ventana de un terminal ASCII de salida de información. La herramienta módulos externos permite establecer una interconexión entre el modelo de simulación y hasta 5 módulos externos diseñados como aplicaciones cliente/servidor. El controlador LCD de la figura 7.47 es un ejemplo de este tipo de recurso. La figura 7.48 presenta la ventana del administrador de puntos de rupturas, mediante el cual se pueden fijar puntos de parada durante la ejecución del programa en modo de corrida libre. Aunque se puede fijar la velocidad de ejecución del código de entre cinco opciones, puede ser preferible usar este administrador debido a que permite realizar la simulación por pasos, con un tamaño de paso variable y elegido por el usuario.

Fig. 7.46 Módulo de dispositivos periféricos

Fig. 7.47 Módulo de pantalla de cristal líquido

Desarrollo y Simulación de Programas

383

Fig. 7.48 Administrador de puntos de parada

Otras herramientas como el compilador BASIC y el desensamblador son comentadas en la ayuda del 8085 Simulator IDE.

VSim Simulador Este es un programa limitado y sin mayores pretensiones. La ventana de trabajo se muestra en la figura 7.49 donde se observa los registros de internos y las banderas, los controles para la simulación y el editor de memoria. También 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 lógicos y salidas a indicadores luminosos conectados a puertos del sistema, puede simplificar el trabajo usar el panel de LED & Switch del VSim, mostrado en la figura 7.50.

Desarrollo y Simulación de Programas

384

Fig. 7.49 Ventana principal del VSim.

Fig. 7.50 Módulo de interruptores y LEDs del VSim.

Desarrollo y Simulación de Programas

385

8085 Emulator (Win85) El programa Win85 no tiene editor de textos ni ensamblador incorporado. La memoria y los registros internos sólo pueden ser modificados por programa y únicamente se dispone de un puerto de entrada y uno de salida. Soporta interrupciones y no modela las el canal de comunicación serie. A pesar de estas carencias, los periféricos conectados al sistema y los ejemplos que vienen con el software son de tal calidad que hacen que Win85 sea de uso obligado para quienes siguen un curso introductorio de µPs con el 8085A. La figura 7.51 muestra los recursos que acompañan al emulador.

Fig. 7.51 Herramientas del Win85.

En la parte superior izquierda de la figura se observa la ventana principal del simulador donde se despliega el contenido de los registros internos y de banderas del µP. Además se muestra el estado de las interrupciones, el registro de máscara de interrupciones, la frecuencia del reloj y el número de estados. Para ver el contenido de la memoria existen dos ventanas de memoria y otra para la pila del sistema.

Desarrollo y Simulación de Programas

386

El parte superior derecha de la figura 7.51 se muestra la ventana de dispositivos periféricos con los puertos e interrupciones asociadas. Se distinguen:
• • • • Puertos básicos de E/S Teclado Monitor de puertos Módulo LCD con capacidad gráfica tipo Seiko G1216B1N000

Tanto el teclado como el módulo LCD pueden usarse en los programas de usuario. La lectura del puerto de teclado carga el valor de la tecla pulsada en el acumulador. Ejemplos del manejo conjunto del teclado/LCD son suministrados por el autor como algunos buenos esfuerzos de programación en ensamblador del 8085A como los juegos PacMan y Tetris, y otras animaciones sencillas.

Fig. 7.52 Salidas de las simulaciones de PacMan.bin y Runner.bin en Win85

8085 Simulador y Sim8085 Estos dos programas son útiles para ejecutar las funciones básicas de simulación de las instrucciones del microprocesador. El Sim8085 posee editor de memoria y puertos y el 8085 Simulator carece de esta última herramienta, además no reconoce las instrucciones IN y OUT de modo que sólo permite puertos mapeados como memoria. El Sim8085 incorpora un asistente en forma de teclado para escritura de código y un diseñador de rutinas de retardo. Ninguno de estos programas simula el sistema de interrupciones ni los terminales SID y SOD para interconexión con periféricos serie. Las ventanas principales de ambos programas se muestran a continuación en la figura 7.53. Todos los programas en este trabajo han sido probados usando algunos de los simuladores de la figura 7.36 y ejecutados en el Sistema de Evaluación MPR85 PLUS. Es necesario que el estudiante seleccione la herramienta de su preferencia y

Desarrollo y Simulación de Programas

387

Fig. 7.53 Ventanas principales del 8085 Simulator y del Sim8085

la use para simular el mayor número de programas posibles hasta obtener un completo conocimiento de los recursos que ofrece el simulador. La mayoría de las asignacio-

Desarrollo y Simulación de Programas

388

nes del curso deben desarrollarse en un ambiente de simulación 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 presentación de ejemplos de éstas no sea muy ilustrativa. Cuando se considere necesario se realizaran observaciones sobre simulaciones realizadas por el autor. A continuación se presentan resultados obtenidos de la simulación de algunos ejemplos seleccionados. Así, la figura 7.54 muestra los resultados de simular la ejecución del programa del ejemplo 7.7 usando el SID85. Debido a que este simulador le asigna a la directiva DS una función distinta a la descrita en este trabajo, el código debe ser modificado sustituyendo las directivas DS por:
MIN: MAX: DB 0 DB 0

Esto asigna a MIN la dirección 0300H y a MAX 0301H. Cada posición es cargada al inicio con cero. El resultado es el mismo que usar DS.

Fig. 7.54 Resultados de simular el programa del ejemplo 7.7.

Observe la lista de valores a partir de la posición de memoria 0302H, el valor mínimo en 0300H, y el máximo en 0301H. El acumulador contiene el máximo, el cual fue el último número escrito en memoria, mientras que el registro par HL apunta al final de la tabla. El contador de programa contiene la dirección de la próxima instrucción.

Desarrollo y Simulación de Programas

389

El programa también fue simulado usando WSIM85. Como la versión de evaluación acepta archivos menores de 256 bytes detectando cuando el código se carga sobre la dirección 0100H, se fijó el área de código a partir de 0020H y la de datos se inicia en 0080H. El ensamblador de WSIM85 tampoco reconoce la directiva DS.

Fig. 7.55 Al inicio las posiciones 0080H y 0081H están en cero.

Fig. 7.56 Después de simular en programa contienen el mínimo y el máximo de la tabla de valores que se inicia en 0082H.

Desarrollo y Simulación de Programas

390

Este simulador presenta un problema adicional para ejecutar el programa del ejemplo 7.7. Los datos a cargar en memoria por medio de DB deben estar expresados en hexadecimal o decimal. El ensamblador de WSIM85 no acepta los bytes de DB en octal o binario, por lo cual debe hacerse la modificación correspondiente en el programa fuente. Otra posibilidad es usar otro ensamblador y convertirlo a hex intel antes de cargarlo en WSIM85. Las figuras 7.55 y 7.56 muestran la ventana gráfica de WSIM85 antes y después de ejecutar el programa. A continuación, el programa del ejemplo 7.9 se simula a usando el 8085 Simulator Ide. Previamente se generó el archivo ejecutable Ejem_78.hex, el cual se carga en la memoria del simulador como muestra la figura 7.57

Fig. 7.57 El archivo Ejem_78.hex se carga en la memoria del simulador.

Fig. 7.58 Cuadro de dialogo para entrada de dato a puerto.

Con el programa en ejecución, cada ver que ocurra una lectura a puerto se despliega la ventana de la figura 7.58 (si esta opción está habilitada) de modo que pueda cargarse el valor adecuado en el puerto. Esto hace muy sencilla la simulación

Desarrollo y Simulación de Programas

391

del código al facilitar la entrada de los 8 valores de 16 bits en el puerto P8 y el estado de la señal de control en la línea P9.7. El resultado de la simulación se almacena en memoria a partir de la dirección 0810H, como ilustra la figura 7.59.

Fig. 7.59 Editor de memoria con las entradas y salidas del ejemplo 7.8

Ejemplo 7.10 Escribir un programa que calcule el periodo de la señal aplicada a la línea 0 del puerto 10H. La frecuencia de la onda está comprendida entre 0.1 Hz y 1 KHz. El código debe escribirse para ser simulado en el 8085 Virtual Kit, en cuya pantalla deberá presentarse la medida con el formato de la figura 7.60.

Fig. 7.60 Medida del periodo de una onda.

El periodo de la señal de entrada está en el rango 1 ms ≤ Ti ≤ 10000 ms, de modo que bastará determinar cuantos milisegundos transcurren entre una transición positiva de la onda y el siguiente flanco de subida.

Desarrollo y Simulación de Programas 392 El único problema es que el simulador no presenta el carácter ‘m’.por lo cual debe hacerse una pequeña modificación al monitor del programa para desplegar las unidades de medida. .Character Map ----------------------org 0700h CharMap: db 3fh . se requiere seleccionar un algoritmo para la conversión de binario a BCD. Usando la primera opción.'-' 17h db 37h .'H' 10h db 0111000b .END CharMap ----------------------- El uso de un contador hexadecimal para registrar el número de milisegundos del periodo de la señal bajo medida.----------------------------------------------------------.'L' 11h db 1110011b . Otra posibilidad es usar un contador con incremento en decimal.'U' 16h db 1000000b . como se hace con lápiz y papel. .'m' 24 . .'F' 0fh db 1110110b .----------------------.'I' 13h db 1010000b . map for '0' db 06h db 5bh db 4fh db 66h db 6dh db 7dh db 07h db 7fh db 67h db 77h db 7ch db 39h db 5eh db 79h db 71h . Existen muchos de éstos. Este valor debe ser convertido a BCD antes de presentar.' ' -blank 15h db 0111110b . Basta con agregar al mapa de caracteres del monitor del SDA 85 la línea db 37h como se indica en el siguiente listado. En este caso se usa el siguiente: bin_bcd: acum_bcd = 0 contador = precisión repetir bin = 2 x bin bcd = 2 x bcd + acarreo contador = contador -1 hasta contador = 0 fin bin_bcd Este algoritmo calcula el valor BCD de un número.'P' 12h db 0110000b . implica que el registro contador contendrá un valor hex para indicar el periodo.'R' 14h db 0000000b .--------------------.

------------------------------------------------------------------------------.------------------------------------------------------------------------------.01h mvi b.------------------------------------------------------------------------------. Contador de milisegundos a cero de10: call medir .tope_pila lxi h.0 nbytes_dec equ byte 2 nbytes_bin equ byte 2 org 8000h .00h call output .----------------------------------------. Ejemplo 7. Incrementa medida en 1 ms call retard . Señal en P10.------------------------------------------------------------------------------.----------------------------------------.Subrutinas de monitor output equ ADDR 05fcH . Unidades de medida (ms) . Presenta cadena alfanumérica en pantalla updad equ ADDR 06bcH . Convierte medida a BCD call updad . Presenta contenido de memoria en pantalla . Dirección presentada por UPDAD dir_bin equ addr 0f000h tope_pila equ addr 8700h puerto equ byte 10h .----------------------------------------unid: db 5 db 24 .----------------------------------------medir: inx d .0 .------------------------------------------------------------------------------.10 . Detecta fin de semiperiodo y continúa medida jnz de10 de01: call medir .Desarrollo y Simulación de Programas 393 El listado de programa para medida y presentación del período de la onda se muestra a continuación: . Detectar flanco positivo de la onda ani 1 jz bit01 lxi d. Retardo de 1ms in puerto .----------------------------------------dir_dec equ addr 0fff7h . Esperar que señal pase a nivel bajo jnz bit10 bit01: in puerto .------------------------------------------------------------------------------.------------------------------------------------------------------------------.unid mvi a. Incrementa en 1 el registro BC entre transiciones positivas . Se ppresenta 'Ms' en pantalla sin pd bit10: in puerto ani 1 . Programa principal .----------------------------------------.------------------------------------------------------------------------------. Mide hasta transición positiva jz de01 xchg shld dir_bin . Presenta medida en campo de direcciones hlt . En DE periodo de la señal call bin_bcd .----------------------------------------org 8100h lxi sp.------------------------------------------------------------------------------.----------------------------------------.----------------------------------------.

.----------------------------------------- .0cbh retad1: dcr b jnz retad1 ret . Conversión multidígito de binario a BCD.----------------------------------------retard: mvi b.a inx h dcr b jnz llenar .nbytes_dec .----------------------------------------bin_bcd: mvi c.nbytes_bin .d ral ral ral mov e.Desarrollo y Simulación de Programas 394 ani 1 ret .m adc a daa mov m.dir_dec xra a mov b. contador = 8*nbytes_dec .----------------------------------------.a . 16 bits binarios.bin = 2 * bin cont: lxi h.----------------------------------------.c llenar: mov m. Retardo de 1 ms a f = 2.------------------------------------------------------------------------------.a inx h dcr b jnz dsplzm .d dsplzm: mov a.85 Mhz .bcd = 2 * bcd + acarreo lxi h.a inx h dcr b jnz decadj dcr e .c decadj: mov a.dir_dec mov b.m ral mov m. bcd_acum = 0 lxi h.dir_bin mov b. 4 dígitos BCD mvi d.------------------------------------------------------------------------------.------------------------------------------------------------------------------. repetir . .------------------------------------------------------------------------------. contador = 16 en este caso mov a. hasta que contador = 0 jnz cont ret .------------------------------------------------------------------------------.

7. .61. Los resultados de la simulación se presentan en la figura 7. ensamblador. por lo cual el usuario debe adaptar cada programa a la sintaxis del ensamblador usado. respectivamente. Consulte la ayuda del programa para más detalles. Para simular se usó la herramienta trace del 8085 Virtual Kit.61 Medida del periodo de una señal. éste fue escrito como un solo módulo despreciando el disfrute de los beneficios de la programación modular. Esto se debe a que el ensamblador del simulador no procesa código relocalizable y no se puede usar un ensamblador externo por que no carga un archivo binario o hex desde la línea de comando. Los recursos modernos para el desarrollo de programas para sistemas empotrados usando microprocesadores microcontroladores se presentan incorporados a una aplicación WINDOWS o LINUX identificada como Entorno Integrado para Desarrollo o IDE (Integrated Development Environment). Para presentar las unidades de medida y valor del período en la pantalla del SDA 85 se usaron las rutinas de usuario OUTPUT y UPDAD. aunque el programa del ejemplo anterior consta de varias subrutinas. Los dos obstáculos 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. Fig. compilador C y muchos otros recursos que simplifican la escritura de programas usando técnica modular . Esta situación se repite en otros simuladores. Una solución al problema planteado es utilizar un verdadero sistema de desarrollo de programas. la cual incluye editor. Como puede observar el lector.Desarrollo y Simulación de Programas 395 El código fue simulado y funcionó en forma correcta.

62 Funciones típicas de un entorno integrado para desarrollo de programas El proceso de desarrollo del programa se inicia cuando se escribe en C o en ensamblador.O. los archivos fuente del programa principal y de las subrutinas de la aplicación. 7. se compilan los archivos en C o se ensambla los programas en ensamblador. Biblioteca de programas. Enlazador/Relocalizador. usando el editor de texto.Desarrollo y Simulación de Programas 396 7.2 Sistema integrado para desarrollo de programas Una aplicación IDE estándar contiene al menos: • • • • • • Editor de texto.4. Simulador Un diagrama que ilustra los recursos de una aplicación IDE estándar. El enlazador relocalizador a continuación resuelve todas las . Activando la función: construir proyecto. Macroensamblador. Estos módulos aparecen como archivos independientes y son organizados como un proyecto que contiene todos los módulos fuente y de biblioteca necesarios para construir el programa de la aplicación.62. TIEMPO REAL CPU ENLAZADOR/RELOCALIZADOR DEPURADOR GRABADOR DE EPROM SIMULADOR EMULADOR Fig. EDITOR DE TEXTO COMPILADOR ANSI C MACRO ENSAMBLADOR BIBLIOTECA ESTANDAR BIBLIOTECA S. Compilador ANSI C. se muestra en la figura 7.

denominados MPR-85 PLUS. Esta herramienta dispone de todos los recursos necesarios para la prueba del hardware de prototipos y la verificación del programa. un sistema de desarrollo básico pero funcional. Esta tiene todas las funciones descritas. descargar el programa en la memoria del MPR85PLUS. Se puede incorporar nuevas herramientas de desarrollo de programa como macroensambladores y enlazadores. y algunos simuladores seleccionados. Para que el estudiante utilice un entorno para desarrollo de programa que sea más profesional y eficiente que el ofrecido por el software MICROIDE. el usuario puede usar un ensamblador/relocalizador profesional para escribir los módulos de su programa. pero es posible incorpóraselo. se hace uso de las opciones de configuración de la misma aplicación IDE para: . el cual no procesa macros ni código relocalizable. 6. La aplicación Micro-IDE de Bipom. Algunas IDE ofrecen recursos adicionales como un sistema operativo de tiempo real apropiado para aplicaciones que involucran tareas de tiempo crítico. el paquete de programación MicroIde. El programa ejecutable puede ser simulado en el microcomputador. El lector dispone de una IDE denominada MICROIDE dirigida a diversos microprocesadores y microcontroladores. haciendo imposible la programación modular. Con el IDE en marcha.Desarrollo y Simulación de Programas 397 direcciones relativas de memoria generando un código objeto absoluto. Para construir. No incorpora un simulador para la versión correspondiente al 8085. pero desafortunadamente la versión de evaluación para el 8085 no contiene simulador. simular el código en un simulador. Limita el tamaño del código a 500 líneas. verificar su operación y finalmente grabar la memoria EPROM. 3. Para programación en ensamblador utiliza el ASM85. cargado en un equipo emulador de microprocesadores o en una memoria EPROM. se usa un computador personal. Permite el desarrollo de programas en forma modular con el compilador C: MICROC-85. 2. el macroensamblador AVMAC85. en el CD de trabajo. 5. En el Laboratorio de Microprocesadores existen 5 microcomputadores de bajo costo para desarrollo aplicaciones con el 8085. Dispone de un terminal por medio del cual se puede conectar al MPR-85. Las salidas del enlazador es son: un archivo binario que contiene el código ejecutable o una versión en formato HEX INTEL y un archivo ASCII que contiene información relativa al proceso de traducción. Con esta herramienta se puede programar en forma modular y el código final puede ser ejecutado en un simulador asociado o cargado en un emulador o grabador de EPROM. es una versión de evaluación con las siguientes características: 1. con los pocos recursos disponibles. 4.

Desarrollo y Simulación de Programas

398

a) Sustituir el ensamblador original por un Macroensamblador AVMAC85 con capacidad para procesar código relocalizable; e incorporar el enlazador/relocalizador correspondiente (AVLINK). b) Añadir al menú de herramientas dos programas simuladores/depuradores: WSIM85 y WIN85. Esto permite cargar en el simulador el archivo generado por el proceso de ensamblaje.

El proceso para configurar el entorno de desarrollo usa una herramienta incluida en el paquete de software MICROIDE denominada Toolkit configurator. Con este recurso es posible:
• Incorporar el ensamblador AVMAC85 como opción 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 extensión .hex generado por AVLINK a un archivo binario que pueda ser cargado en el simulador WIN85. El programa WSIM85 acepta como entradas archivos en formato HEX-INTEL o en binario.

Configurando MICROIDE
1. Ejecute el programa Toolkit Configurator de MICRO-IDE.

Fig.7.63. Ventana principal del Toolkit Configurator de MICRO-IDE

Desarrollo y Simulación de Programas

399

2. Seleccione la opción: Add New Toolkit

Fig.7.64. Se agrega un nuevo ensamblador 3.

En la ventana de dialogo de la figura 7.64 escriba el nombre de la nueva herramienta. Escriba los comandos necesarios para el ensamblaje de los módulos del programa, el enlace y la conversión a binario del archivo .HEX resultado de la compilación.

4.

Fig.7.65. Configuración de la nueva herramienta

Desarrollo y Simulación de Programas

400

El comando {TOOLKITDIR}\avmac85 {SOURCEFILES} procesa uno o más archivos fuente (con extensión ASM) y los ensambla a uno o más archivos con extensión OBJ. El enlazador AVLINK procesa el (los) archivos .OBJ y genera un archivo único (SIMUL.HEX) con el código ejecutable. Este archivo está en formato HEXINTEL. Una vez obtenido el módulo ejecutable (SIMUL.HEX), se convierte a binario (SIMUL.BIN) usando la herramienta HEX2BIN. El simulador WSIM85 acepta como entrada ambos tipos de archivos, pero WIN85 solo simula archivos binarios.
NOTA Cuando cree en Micro-IDE un nuevo proyecto (con cualquier nombre) puede seleccionar como lenguaje ensamblador el AVMAC85. Al construir el proyecto obtendrá siempre un archivo SIMUL.HEX. Este nombre común no es problema, si cada proyecto reside en su carpeta particular.

Creando un nuevo proyecto:
1. Del menú Projects seleccione New project

Fig.7.66. Creación del proyecto Ejemplo1

2.

Indique la carpeta (el programa la creará) donde residirá el proyecto dentro del directorio de trabajo …\EXAMPLES. La carpeta puede tener el mismo nombre del proyecto. Seleccione la herramienta (Toolkit).

3.

Desarrollo y Simulación de Programas

401

Fig.7.67. El proyecto Ejemplo1 está vacío.

4.

Usando el menú Projects\Add files to project adjunte los archivos al proyecto. Estos deben residir en la carpeta Ejemplo1.

Fig. 7.68. Se suman los archivos.asm a Ejemplo1.

Completado el procedimiento, el proyecto está listo para compilación y enlazado como ilustra la figura 7.69.

Desarrollo y Simulación de Programas

402

Fig.7.69. El proyecto está listo para procesarse.

Es de suponer que con la configuración del AVMAC85 y del AVLINK realizada con el Toolkit Configurator, no es necesario realizar ajustes adicionales. No obstante examinemos Project\Settings:

Fig.7.70. Seleccione Generic Serial Loader.

Al seleccionar un cargador es posible transferir al MPR85 (Por un puerto serie del PC) el archivo SIMUL.HEX.

Desarrollo y Simulación de Programas

403

Fig.7.71. El directorio de trabajo puede ser también {ROOTDIR}\microc.

Fig.7.72. La extensión del archivo objeto debe marcarse como obj.

El comando {TOOLKITDIR}\avmac85 {SOURCEFILES} procesa uno o más archivos fuente (.ASM) y los ensambla a uno o más archivos con extensión OBJ.

Desarrollo y Simulación de Programas

404

Fig.7.73. Ventana del enlazador

El enlazador AVLINK procesa el (los) archivos .OBJ, salidas del AVMAC85 y genera un archivo único (SIMUL.HEX) con el código ejecutable. Este archivo está en formato HEX-INTEL. Las opciones son:
–sy –sp Activa la generación de un archivo de símbolos y Incluye información de símbolos en el archivo .map generado por AVLINK.

Fig.7.74. Marque simul.hex como archivo de salida. Se pone por defecto nombre_proyecto.hex

Una vez obtenido el módulo ejecutable SIMUL.HEX se convierte a binario (SIMUL.BIN) usando la herramienta HEX2BIN. Finalmente use Build\Build Simul.hex para generar el archivo ejecutable.

Desarrollo y Simulación de Programas

405

Fig.7.75. Proceso de generación del archivo ejecutable

Incorporando los simuladores
1. Seleccione Tool\Add Tool .

Fig.7.76. Configure el simulador Wsim85 como herramienta de usuario.

Desarrollo y Simulación de Programas

406

2. . Seleccione Tool\Add Tool y agregue los programas de simulación. El simulador

WSIM85 acepta como entrada archivos .hex o .bin

Fig.7.77. El simulador Win85 requirió el auxilio de un archivo .bat para ejecutarse

El contenido del archivo win85.bat consiste de la línea: c:\avocet\win85\win85 simul.bin Los programas avmac85.exe, avlink.exe, hex2bin.exe y win85.bat deben residir en el directorio: C:\bipom\devtools\microc.

Comunicación entre el µC MPR85 y MICRO-IDE Micro-IDE tiene una herramienta Terminal que permite la comunicación entre el PC y el microcomputador MPR85. Para la descarga de archivos se usa la herramienta Loader esta permite, una vez puesto el MPR85 en el modo de recepción de archivo, descargar el programa SIMUL.HEX en un área de memoria del MPR-85 PLUS para su posterior ejecución. También es posible que el microcomputador MPR85 PLUS transfiera un archivo HEX hacia el PC.

Desarrollo y Simulación de Programas

407

Fig.7.78. Ahora se tiene acceso a dos simuladores

1.

Para configurar Terminal use Tools\Options\Terminal

Fig.7.79. El puerto serie del MPR85 se conecta al COM1 del PC.

Desarrollo y Simulación de Programas

408

En este caso la velocidad de transmisión del canal serie del MPR85 debe ajustarse a 9600 baudios.
2.

Para configurar Loader use Tools\Options\Loader. La configuración del cargador es similar a la de Terminal.

Fig.7.80. Seleccione dos bits de parada.

Los cargadores disponibles en Micro-IDE no están destinados para la transferencia de archivos en el MPR85. Se usó El Generic Serial Loader. Aunque este indica un error al tratar de poner al MPR85 en modo RUN, realiza la transferencia del archivo en forma correcta.

Fig.7.81. Cargadores para download.

Desarrollo y Simulación de Programas

409

7.5 MACROS
Cuando se escribe un programa es común encontrar que un conjunto de instrucciones se repiten con frecuencia variando únicamente algunos de los parámetros. En estos casos puede ser conveniente usar una instrucción macro para simplificar el desarrollo del programa. Un macro es una instrucción que puede ser llamada dentro de un código, obteniéndose como resultado la sustitución de cada llamada por una expansión de código equivalente a una secuencia de instrucciones. El uso de macros reduce las líneas de código del programa y permite la creación de librerías de que pueden ser usadas en cualquier programa. Suponga que necesita generar un retardo por software con una duración 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 código excepto por el parámetro tiempo retardo. En lugar de escribir dos rutinas, el diseñador puede utilizar un macro definiendo en cada llamada el tiempo deseado. Las aplicaciones de macro son diversas, recomendándose su uso cuando el número 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 propósito el ensamblador acepta las siguientes directivas relacionadas con tal definición:
Tabla. 7.9. Directivas para control de macros. MACRO Definición de macro. ENDM Fin de cuerpo del macro. LOCAL Asigna a símbolo 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 carácter % (%MACRO, por ejemplo). La definición 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 parámetros a ser reemplazados durante la expansión del macro. El formato es el siguiente:
nombre MACRO { cuerpo del macro } ENDM lista de parámetros falsos

Desarrollo y Simulación de Programas

410

Si los símbolos que aparecen dentro del cuerpo del macro tienen alcance global, toda llamada al macro, excepto la primera, causará error por duplicación de definiciones de símbolos. A un identificador o etiqueta puede asignársele un alcance limitado (dentro del cuerpo del macro) usando la directiva LOCAL, la cual asigna un valor único para el símbolo cada vez que el macro es llamado y expandido. Si se desea copiar un grupo de líneas de código 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 número de veces en un programa. La llamada consiste del nombre del macro y la lista de parámetros reales que reemplazaron a los falsos durante la expansión del macro. Durante el proceso de ensamblaje cada llamada a un macro es sustituida por el código en el cuerpo del macro y los parámetros falsos son reemplazados por los verdaderos. El ensamblador deberá encontrar la definición 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 después debe usarse otra instrucción para copiarlos en otro registro interno. El macro PUERTOreg carga directamente en cualquier registro distinto al acumulador, la información presente en un puerto de entrada.

Pdato EQU 80H ;----------------------------------------------------------------------Definición de macro PUERTOreg ;----------------------------------------------------------------------PUERTOreg %MACRO r,PUERTO IN PUERTO MOV r,A %ENDM ;-----------------------------------------------------------------------

Las siguientes instrucciones de llamadas al macro cargarán en el registro B el contenido del puerto 80H, en C el de 81H, en D el de 82H y en E el de 83H.
;-----------------------------------------------------------------------PUERTOreg B,Pdato PUERTOreg C,Pdato+1 PUERTOreg D,Pdato+2 PUERTOreg E,Pdato+3 ;-----------------------------------------------------------------------

1

Estas directivas no se discuten. El interesado puede recurrir al manual del isis-ii 8080/8085

A ENDM PUERTOreg B.Pdato+3 END Ejecute la secuencia de comandos: C:\ISIS_II\isim85. cuyo contenido se muestra a continuación: ASM80 Ejem_7110. V4. ejem_711.Desarrollo y Simulación de Programas 411 La sintaxis del código corresponde al avmac85.Pdato+1 PUERTOreg D. $MACROFILE . este último programa muestra claramente en el archivo de salida .A 7 ENDM 8 .SRC ISIS-II 8080/8085 MACRO ASSEMBLER.----------------------------------------------------------.src y obtendrá el archivo ejem_710.11 Usando el programa isis-ii 8080/8085 obtenga el archivo .PUERTO IN PUERTO MOV r.lst para el macro PUERTOreg. Ejemplo 7.----------------------------------------------------------PUERTOreg MACRO r. Puerto de entrada .Pdato+2 PUERTOreg E.lst.lst. Observe el cambio en la sintaxis. El siguiente ejemplo ilustra el uso del isis-ii 8080/8085.----------------------------------------------------------.----------------------------------------------------------Pdato EQU 80H .PUERTO 5 IN PUERTO 6 MOV r.1 LOC OBJ 0080 MODULE PAGE 1 LINE SOURCE STATEMENT 1 $MACROFILE 2 Pdato EQU 80H 3 4 PUERTOreg MACRO r.attach :f0:=c: -asm80 ejem_711.exe . la expansión del macro. Definición de macro .src .Pdato PUERTOreg C.

mientras que el de orden bajo se usa para las luces en dirección EO. El sistema de control se diseña de modo que las luces se controlen por medio del byte escrito en el puerto de salida 10H. NO ERRORS Observe la declaración inicial $MACROFILE. Estados de las luces.84.Desarrollo y Simulación de Programas 412 0000 DB80 0002 47 0003 DB81 0005 4F 0006 DB82 0008 57 0009 DB83 000B 5F 9 10+ 11+ 12 13+ 14+ 15 16+ 17+ 18 19+ 20+ 21 PUERTOreg B. 7. Esta es un control de ensamblaje del sistema operativo ISIS-II y señala que el archivo fuente contiene macros.2 P10. Tabla. Como otro ejemplo de aplicaciones de macros. de acuerdo a la siguiente secuencia.0 Norte-Sur 0 0 0 0 0 0 0 0 1 0 0 1 0 1 0 1 Apagadas Rojo Ámbar Verde 0 0 0 0 Este-Oeste 0 0 0 0 0 1 0 1 0 1 0 1 . Esto no es necesario si usa el avmac85.A PUERTOreg E.7 P10. Las instrucciones que resultan de la expansión se muestran con el caracter (+) al final del número de línea. igual número de veces.A PUERTOreg C.4 Estado de las luces P10. El hecho que el macro PUERTOreg sea llamado cuatro veces implica que este será expandido.Pdato+2 IN Pdato+2 MOV D. P10. considere el problema de control de tráfico urbano suministrado como asignación y cuya intersección se repite en la figura 7.Pdato+3 IN Pdato+3 MOV E. El nibble de orden alto controla las luces en dirección NS.A PUERTOreg D.A END PUBLIC SYMBOLS EXTERNAL SYMBOLS USER SYMBOLS PDATO A 0080 PUERTO + 0000 ASSEMBLY COMPLETE.Pdato+1 IN Pdato+1 MOV C.3 P10.7 P106 P10.Pdato IN Pdato MOV B. Es apreciable además que la definición de macro no genera código objeto.10. con parámetros distintos.1 P10.

Desarrollo y Simulación de Programas 413 Fig. 7.83 Secuencia para el cambio de luces con circulación continua de en ambas direcciones.82. INICIO A 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 A Fig.Intersección vial simple En la figura 7. considerando la presencia de vehículos en ambas avenidas.7.83 se muestra un flujo grama para el ciclo principal de cambio de luces. .

Macro PONluz dir. .Control de trafico .------------------------------------------------------------------------------------------------------------luz equ 10h nsbits equ 4 eobits equ 0 noluz equ 0 rojo equ 1 ambar equ 2 verde equ 3 .verde .roja .------------------------------------------------------------------------------------------------------------PONluz eo. El macro ESPERAR se omite por tratarse de una asignación.ambar ESPERAR 5 PONluz ns.verde ESPERAR 15 .color mvi a. Esperar 20 segundos . Iniciar secuencia .------------------------------------------------------------------------------------------------------------.------------------------------------------------------------------------------------------------------------.Desarrollo y Simulación de Programas 414 El código presentado a continuación usa macros para resolver el problema de control de una intersección básica. Prohibir circulación en dirección este-oeste ESPERAR 20 .color shl dir&bits out luz ENDM .------------------------------------------------------------------------------------------------------------PONluz ns.------------------------------------------------------------------------------------------------------------.------------------------------------------------------------------------------------------------------------PONluz MACRO dir.--------------------------------------------------------------------------------------------------------------ESPERAR MACRO segundos { Cuerpo del macro } ENDM . Cambio para repetir ciclo luces .------------------------------------------------------------------------------------------------------------.------------------------------------------------------------------------------------------------------------ciclo: PONluz ns. Permitir paso en dirección norte-sur PONluz eo. .roja PONluz eo.color. Macro ESPERAR segundos .ambar ESPERAR 5 REPETIR ciclo Como ilustración se programa el macro PONluz dir.------------------------------------------------------------------------------------------------------------.color . Cambiar luces .------------------------------------------------------------------------------------------------------------.

En otros. el µP solo debe realizar una operación de enmascaramiento. el procedimiento no es directo. Si se requiere convertir una cadena de caracteres ASCII a binario. Observe la tabla 7. 7.11 Código de 7 segmentos Dígito binario Código 7-Segmentos Binario hex gfedcba 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0111111 0000110 1011011 1001111 1100110 1101101 1111101 0000111 1111111 1100111 1110111 1111100 0111001 1011110 1111001 1110001 3FH 06H 5BH 4FH 66H 6DH 7DH 07H 7FH 67H 77H 7CH 39H 5EH 79H 71H .color shl dir&bitss la cadena dir es sustituida por ns (nsbitss) o eo (eobitss) según la dirección sea norte-sur o este-oeste.------------------------------------------------------------------------------------------------------------REPETIR MACRO destino jmp destino ENDM En la declaración mvi a. Macro REPETIR destino . donde se muestra la relación existente entre un dígito hexadecimal y el código usado con un indicador de 7 segmentos de cátodo común.6 TABLAS DE CONSULTA (LOOKUP TABLES) Es usual que el microprocesador sea usado para convertir datos desde un dominio a otro.11.------------------------------------------------------------------------------------------------------------. Fig. En un dominio todas las unidades son iguales.Desarrollo y Simulación de Programas 415 . 7. basta con que el procesador realice una multiplicación y una suma: °F = 9/5 x °C + 32 °C = 5/9 x (°F – 32) En estos casos el proceso de conversión entre dominios se reduce a aplicar una función matemática conocida. Para convertir de grados Centígrados a Fahrenheit. Note la complejidad de la relación. por ejemplo todas las velocidades en Km/h o todas las temperaturas en °C. seguida de una rotación y una suma.

255 inr b mov a. ----------------------------------------------------------------------------------.150h mvi b.67h.5bh.6dh.06h. En lugar de intentar encontrar una expresión de la relación entre el número binario y el patrón de siete segmentos. la tabla se inicia en la dirección 200h org 200H db 3fh. Guardar código en memoria dig: salir: bin7seg: push h lxi h.b cpi 16 jz salir call bin7seg mov m. La tabla contendrá el arreglo de unos y ceros que se requieren para presentar todos los números.71h end .a inr l jmp dig hlt .4fh. Una rutina capaz de realizar la conversión desde binario a siete segmentos es la siguiente.39h.a mov a. se recurre a una tabla de consulta para realizar la conversión. org 100h lxi sp.Desarrollo y Simulación de Programas 416 Fig.79h.tabla add l mov l.300h lxi h. Tabla de conversión .07h db 7fh. ----------------------------------------------------------------------------------.84 Código de 7 segmentos para un indicador con cátodo común El bits D6 corresponde al segmento g y D0 al segmento a. Convertir digito a 7 segmentos .7dh.7ch. El bits más significativo D7 se asume cero. B contiene el dígito a convertir . Un nivel uno activará el segmento y un cero lo apagará.77h.5eh. 7.66h. Si dígito ‘F’ parar .m pop h ret .

Un simulador llamado Simulador de 8085 y creado en el Departamento de Arquitectura y tecnología de Computadores de la Universidad de Granada en España permite simular el programa de conversión. el cual está conectado al puerto de salida 9. En la práctica esta conversión se realiza para presentar información BCD en pantallas con dispositivos de 7 segmentos conectados a puertos del sistema. En la práctica se requiere un lapso de al menos un segundo entre presentaciones. pero es una herramienta útil para la simulación de programa. asociadas con áreas específicas de memoria. 7. En la figura 7. encuentra el código siete segmentos correspondientes y lo almacena en memoria a partir de la dirección 150H. . iniciando en cero.Desarrollo y Simulación de Programas 417 El programa carga en forma secuencial. El Simulador de 8085 no fue presentado en la sección 7.86 muestra la ventana principal del programa durante la simulación. Fig.85.4. puede ajustarse al velocidad del µP para hacer visible la presentación de los dígitos. El programa de conversión usa el indicador más la derecha de la figura 7.85 Visualizadores del simulador conectados a los puertos 00H-07H. Esta herramienta es fácil de usar y es acompañada con manual de usuario. Esto no es necesario para la simulación porque usando el menú Opciones\De ejecución de la barra de herramientas del programa de emulación. La figura 7. Los dígitos desde 0 hasta F se presentan en el display y al final el programa se detiene. además ofrece pantallas de texto y gráficas monocromáticas y a colores. guía para el ensamblador y algunos ejemplos.85 se muestra el hardware para presentación. en el registro B los dígitos hexadecimales. El sistema emulado tiene puertos de entrada con interruptores y teclado y puertos de salida con LEDs e indicadores de siete y de quince segmentos. La simulación del código fue realizada en forma correcta.

.86 Ventana del simulador.Desarrollo y Simulación de Programas 418 Fig. 7.

tabla add l mov l.12 Se requieren dos rutinas que usen tablas de consulta para realizar la conversión desde grados Centígrados a Fahrenheit y viceversa. Conversión de Centigrados a Fahrenheit .m ret . Por ejemplo es usual el uso de tablas en lugar de series para el cálculo de funciones como seno. de la cantidad de memoria disponible para almacenar los datos de la tabla y de la precisión deseada para el resultado. Con una tabla de búsqueda de 90 entradas que representen el seno de ángulos entre 0 y 90 grados. puede determinarse el seno y coseno de cualquier ángulo.---------------------------------------------------------------------------------------------------------------tempf equ 150h org 100h lxi sp. esto depende de la complejidad de la subrutina que realice el acceso a la tabla. coseno o tangente de un ángulo. o para realizar conversiones cuando no exista una relación analítica conocida entre los datos a convertir. La siguiente rutina realiza la conversión del valor en °C cargado en el acumulador a °F y lo almacena en la dirección 150h. 180 ó 360 entradas.a mov a.200h call gcaf sta temp hlt . Ejemplo 7. Se usa una tabla de 101 entradas. el tiempo para que el µP convierta de una temperatura a otra usando rutinas que ejecuten cálculos matemáticos. puede ser demasiado largo en algunas aplicaciones. Esto implica llevar todos los ángulos a sus correspondientes en el primer cuadrante y asignar el signo del seno y coseno. está puede tener 90. de la velocidad a la cual debe ejecutarse la conversión.Desarrollo y Simulación de Programas 419 La técnica de tablas de búsqueda puede usarse en aplicaciones donde una conversión deba realizarse en el menor tiempo posible. Si la tabla de datos tiene 90 entradas. Si una tabla de consulta se utiliza para determinar el seno y coseno de un ángulo. Aunque la relación entre grados centígrados y grados Fahrenheit es bien conocida. . El rango es entre 0 °C y 100 °C y debe evaluarse la temperatura con un grado de diferencia. En estos casos el uso de tablas puede imprimir velocidad al proceso de conversión. 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. el logaritmo natural de un número o conversión entre códigos.---------------------------------------------------------------------------------------------------------------gcaf: lxi h.

61.135.129.70.61.26.78.32.12.70.58. .92.57.6.92.79.79 db 80.12.99 db 100 end .94.45.28.63.88.---------------------------------------------------------------------------------------------------------------- .72.15.55.41.90.65.35.---------------------------------------------------------------------------------------------------------------tempc equ 150h org 100h lxi sp.46 db 47.169.42.59 db 60.41.34.41.76.---------------------------------------------------------------------------------------------------------------- Para convertir desde °F a °C.45.3.17.81.142.53 db 53.74.5.149.48.160 db 162.138 db 140.39 db 40.210.71.7.54.21.91.93 db 93.96.57.1.44.174.194.98.83.84.11.16.52 db 54.36.18.62.178.109.72.185.33 db 33.52.187.87.37.34.84.57.93.97.3.156.81.18.113.75.21.63.32.36.25.85.38.154.9.77.55.58.115.99.158.74.111.27.122.90.34.145.10.68.42.14.199.82.89.147.61.59.tabla sui 32 add l mov l.212 end .13 db 13.163.46.198.108.2.83.208.144.76.28.11.91.37.66 db 67.9.63.176.50.a mov a.131.91.66.48.68.17.117 db 118.39.44.102.86.207.49.97.86.23.43.98.82.89.104.19.77.300h call gfac sta tempc hlt gfac: lxi h.31.82.38. se usa una tabla de 181entradas (212-32+1) la temperatura de entrada en Fahrenheit no se suma simplemente a la dirección base como en el caso anterior.69.36.171.203 db 205.8. Conversión de Fahrenheit a Centigrados .124.66.49.190.1.68.69.153.48.72.54.8.106.167.95 db 97.62.64.86 db 87.m ret org 200h tabla: db 0.64.52.120.29.47.73 db 75.43.136.189.14.50.37.79.67.46.4. Observe el código a continuación.165.22.78.201.29.4.77.64.151.22.133.56.88.31.192.51.51.84.43.16.71.23.94.19 db 20.196.24.2.24.100.99. es necesario restar al contenido del acumulador el valor 32.172.6 db 7.Desarrollo y Simulación de Programas 420 tabla: org 200h db 32.96.30.73 db 73.56.39.88.181 db 183.59.126.81.127.95.180.26 db 27.

. ángulo en grados en registro BC sencos: lxi sp.Desarrollo y Simulación de Programas 421 Ejemplo 7. los valores del seno o coseno del ángulo para θ en el cuadrante I.180 θ =360 . byte de orden alto del ángulo a B cpi 1 . 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. realiza la traslación si es necesario y llama una rutina calc la cual encuentra el seno y el coseno deθ. con incrementos de un grado. Cuadrante Relación sen(θ) I II III IV θ θ =180 .θ + + cos(θ) + + El código consta de un programa principal el cual determina el cuadrante en el cual se ubica el ángulo. Programa principal . También se llama a dos subrutinas senneg y cosneg que colocan el signo negativo a las funciones cuando corresponda.--------------------------------------------------------------------------------------------------------------------------defseg prog seg prog .0200h lxi h.12. Tabla.13 Un programa debe calcular el seno y el coseno de un ángulo θ en el rango de 0 a 360°. Use una tabla de consulta que registre. Por ejemplo: 5000 → sen (30°) 8660 → sen (60°) Para determinar el valor del seno y el coseno se usará una tabla de búsqueda con 91 entradas. El signo del sen/cos lo indicará el bit más significativo del registro par B/D.--------------------------------------------------------------------------------------------------------------------------. 7. Para encontrar el coseno de θ se usa la relación trigonométrica de ángulos complementarios: cos(θ) = sen (90 − θ) Además es necesario trasladar los ángulos en el rango 90° < θ ≤ 360° hacia el primer cuadrante. ángulo es mayor de 255 grados . La tabla siguiente muestra las relaciones necesarias y el signo de las funciones para cada cuadrante. la cual contiene el seno de los ángulos entre 0° y 90° multiplicados por 10000.b .θ θ = θ . Signos de sen y cos por cuadrantes.tbsenx mov a.

si.Desarrollo y Simulación de Programas 422 cuad23: III: III_IV: IV: salir: jz III_IV mov a. pasar de cuadrante 4 al 1 . si. extraer seno de la tabla . seno negativo . BC contiene el senx y DE el cosx ret . coseno negativo . ubicar el cuadrante entre el 3 ó 4 .---------------------------------------------------------------------------------------------------------------calc: mvi b. no. pasar a cuadrante 1 .a mov e.2 mov c. no.. ángulo no mayor de 255 grados .104 sub c call calc call senneg hlt . seno negativo . Subrutina CALC de búsqueda en la tabla .m inx h mov d. extraer seno de la tabla .---------------------------------------------------------------------------------------------------------------. pasar a cuadrante 1 . en el cuadrante 3 o 4 .90 sub c lxi h. teta en el 3. extraer seno/cos de la tabla add l mov l. está en cuadrante 3.m dcr b jz retor push d mvi a. probar si está en cuadrante 2 ó 3 .a ccos: add a . si. teta está en el cuadrante 4 . está en el cuadrante 2. extraer seno/cos de la tabla .c cpi 14 jnc IV adi 76 call calc call senneg call cosneg jmp salir mvi a.c cpi 90 jnc cuad23 call calc jmp salir cpi 180 jnc III mvi a. seno negativo . . coseno negativo . si. coseno negativo . probar entre cuadrantes 3 ó 4 .. pasar al cuadrante 1 .tbsenx jmp ccos retor: pop b .180 sub c call calc call cosneg jmp salir sui 180 call calc call senneg call cosneg jmp salir mov a. ¿teta está en cuadrante 1? . extraer seno de la tabla . de cuadrante 3 al 1 .

9877. En aquellas regiones de curvatura moderada los segmentos de líneas pueden ser más largos. Tabla de senos.9613.6820.9511.7880.8290.9781.9976.9703.4848 dw 5000.9945.1908.2250. el valor de la función puede ser encontrado por interpolación lineal sobre el segmento correspondiente.2588.--------------------------------------------------------------------------------------------------------------------------.3746.3090.9994.0523.9659.3584.8910.8192.1219.6157. .8988.5592.--------------------------------------------------------------------------------------------------------------------------. Conocido entonces un valor para la variable independiente.0698.--------------------------------------------------------------------------------------------------------------------------senneg: mov a.7986.4226.--------------------------------------------------------------------------------------------------------------------------cosneg: mov a.9063.8387.7771.6691.9744.9962.4695.8480.2924.7071.5878.1392.a okc: ret defseg datos.1045.7547 dw 7660. En general el uso de interpolación mejora la precisión de la determinación de la función.4540. Cuando la relación entre dos variables es marcadamente no lineal.9986.8829.--------------------------------------------------------------------------------------------------------------------------tbsenx: dw 0000. coseno negativo cpi 0 jz okc ori 80h mov d.9563.8572 dw 8660.8090.7431.6947.0872.7314.d .9336 dw 9397.9816 dw 9848.3256 dw 3420.5446.0349.--------------------------------------------------------------------------------------------------------------------------.4384.1564 dw 1736.9272.b . .2079.0175. seno negativo cpi 0 jz oks ori 80h mov b. Subrutina COSNEG para colocar el signo negativo al coseno .Desarrollo y Simulación de Programas 423 .9998 dw 10000 end Interpolación En algún caso puede ser necesario usar tablas de consulta reducidas y recurrir a la técnica de interpolación para determinar la función para valores que no son entradas de la tabla.7193.8746.3907.a oks: ret .9925.6018.6561.9135.5736.9903. la curva puede ser aproximada por una secuencia de segmentos de líneas rectas.5299.9205.5150.6293 dw 6428.4067.2756.start=100H seg datos . Subrutina SENNEG para colocar el signo negativo al seno .9455.2419.

se obtiene un error despreciable.1°.8681989814 Error = 2.87 El valor de y para la entrada x puede calcularse por interpolación Para un valor x cualquiera de la variable independiente. entonces: sen (61 ) − sen (60 ) 61 − 60 y= ( x − 60 ) + sen (60 ) y = sen (61 ) − sen (60 ) × (60. 7. Como el valor de la función para 60 y 61 grados.Desarrollo y Simulación de Programas 424 Fig. Suponga que un intervalo de un grado es suficientemente cercano para considerar un comportamiento lineal y desea determinar el seno de 60.4834 × 10 −5 [ ] Al contrastar el valor dado por la interpolación y el obtenido de una calculadora. y= y i − y i −1 × ( x − x i −1 ) + y i −1 x i − x i −1 Usando interpolación en la tabla del ejemplo anterior mejora la precisión a 0. suficiente para la mayoría de los problemas de triangulación en navegación.25 − 60 ) + sen (60 ) y = 0. la salida correspondiente puede calcularse de.8681739796 y calc = 0. El proceso implica una multiplicación y una divi- .25 grados.

. Se examina el bit más significativo de la parte fraccionaria y si es igual a uno se lleva el valor al inmediato superior. El código para interpolación no conlleva complicación alguna y su escritura se deja al estudiante como ejercicio. En aplicaciones de instrumentación que usan transductores con relación no lineal entre la entrada y el voltaje equivalente. la variable x corresponde a la salida de un convertidor analógico digital mientras que la variable dependiente y puede ser temperatura o cualquier otra magnitud física. El uso de una tabla de búsqueda con interpolación es el procedimiento a usar para convertir a °C la tensión a la salida del sensor. Si el bit menos significativo del cociente es uno.Desarrollo y Simulación de Programas 425 sión y conviene redondear el cociente después de la división. se divide el resultado por dos y se incrementa en uno. El redondeo en el sistema binario se realiza de igual forma que en el decimal. Si este bit es cero sólo se realiza la división por dos. Para hacer visible la parte fraccionaria se multiplica el numerador por dos y se ejecuta la división.

puede degradar significativamente el comportamiento del sistema durante el proceso de comunicación. esto debido a que en algunas aplicaciones no solo es necesario seleccionar el puerto y ordenar . Debido a que es común que el μP debe intercambiar grandes cantidades de información con varios periféricos que operan a distintas velocidades velocidad. Las características operacionales del periférico conectado al sistema. Los términos dispositivos para Interconexión Periférica Programable (PPI). determina cuan complejo es el circuito de interconexión. Se precisa garantizar que una operación de lectura o escritura de E/S resulte en la recepción o en la transmisión a través del bus de datos de la información correcta en el instante justo. El desarrollo del programa que controla el acceso al periférico es una fase del diseño que requiere tanta atención como la selección del circuito de puerto. Una selección inadecuada del circuito de interconexión que permite que el procesador pueda comunicarse con el mundo exterior.Técnicas de gestión de Entrada y Salida 426 Técnicas de Gestión de E/S Té Un funcionamiento adecuado de un sistema basado en μP está íntimamente relacionado con el diseño del soporte físico y lógico que controla la comunicación entre la CPU y los dispositivos de E/S conectados al sistema. Adaptador para Interconexión Versátil (VIA). que incluye desde la posibilidad de programación de los registros de entrada y salida o de bits específicos de cada puerto hasta la capacidad de establecer diálogos bajo control de interrupciones generadas por el periférico. pudiendo requerirse desde simples registros y/o buffers de tres estados hasta circuitos LSI programables de propósito general. identifican algunos de los componentes integrados programables de E/S ofrecidos por empresas fabricantes de circuitos digitales. Adaptador para Interconexión Periférica (PIA). múltiples consideraciones debe realizar el técnico. En este último caso. y Unidad de E/S programable (PIO). o de la técnica usada en la rutina de transferencia. se le exige a la estructura de E/S cierta versatilidad. para el diseño de la sección de E/S de una aplicación específica.

La cantidad de tiempo que el CPU destina a procesar la información proveniente del exterior y la velocidad con la cual el periférico requiere la entrega de los resultados. La selección de los circuitos de interconexión 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. En el caso que se discute. considerando que no es necesario que el circuito de puerto tenga capacidad de almacenamiento. Suponga que por medio de un arreglo de 8 interruptores lógicos se introduce información al μC. se reduce el número de circuitos necesarios para construir el puerto.Técnicas de gestión de Entrada y Salida 427 la transferencia. y el estado de los interruptores se transferirá al acumulador a través del bus de datos. con los datos se realiza algún tipo de cálculo y se entrega el resultado a un puerto de salida donde se conectan 8 indicadores luminosos. durante o después de la transferencia. los periféricos de salida generalmente exigen que la información sea retenida por el circuito de interconexión después que culmina la operación de escritura en puerto. Una aplicación de simple en extremo donde el proceso de comunicación se reduce a la transmisión/recepción incondicional de un byte portador de algún tipo de información significativa. La línea de habilitación . Cuando ésta se ejecute el decodificador de direcciones del sistema activará la señal de selección del puerto conectada a las entradas de control del 74LS244. para presentar y mantener el resultado numérico en los diodos luminosos el puerto de salida puede consistir en un registro de almacenamiento paralelo como el 74LS373. es vital verificar que el μP es capaz de manejar esta carga computacional. pero es necesaria una gran cantidad de líneas de código para escribir las rutinas de control. Si se adopta la estrategia de realizar la mayor parte de las funciones de control de la comunicación por programa. El uso de dispositivos programables para interconexión periférica simplifica en forma significativa la complejidad del programa debido a que muchas de las funciones de control son realizadas por el circuito integrado. En el caso del puerto de salida. el cual es capaz de admitir y procesar señales de interrupción generadas por el periférico cuando necesita servicio de parte del CPU. El código necesario para el manejo del puerto de entrada se reduce al uso de la instrucción IN puerto. 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. Para el puerto de salida. sino que se requiere algún tipo de control del propio periférico conectado al puerto. La ausencia en el ejemplo de condiciones para la transferencia se refiere a que no es necesario el establecimiento de algún tipo de conversación o dialogo entre el μP y el puerto antes. puede ayudar a entender lo establecido en el párrafo anterior. cuando se ejecuta una instrucción OUT puerto el contenido del acumulador pasa bus de datos y a la entrada del 74LS373. son también factores que pueden hacer inapropiada la selección de una solución por programa para el control de la comunicación. En este caso.

si el sistema está enviando 8 bits de datos en paralelo a una impresora. por medio de un protocolo de enlace. por ejemplo. lentas e incapaces de entregar o aceptar datos a frecuencias elevadas como a la que funciona el μP.Técnicas de gestión de Entrada y Salida 428 del chip proveniente del circuito de decodificación del sistema y conectada al reloj del CI se encarga de transferir la información a la salida del registro. Algunos periféricos requieren establecer un dialogo con el sistema. Un caso típico en donde la transferencia de datos está sujeta a condiciones impuestas por el periférico. el μP y el dispositivo externo deberán indicarse uno a otro. que los que ésta puede imprimir. En estos casos la estructura de E/S debe proveer algún tipo de almacenamiento intermedio para el intercambio correcto de información entre el puerto y el sistema. En tales casos. por su naturaleza electromecánica. Es posible también que la información acceda a un puerto a una velocidad y lo abandone a otra. es fundamental establecer un protocolo de comunicación para sincronizar la transferencia de datos entre el μP y los dispositivos. Una memoria RWM. inicialmente carga el puerto y avisa al dispositivo de salida que los datos están listos. puedes ser necesario que el μP detecte si un dispositivo determinado está en disposición de transmitir o recibir datos. Es obvio que si la impresora . es cuando la comunicación se realiza con periféricos lentos. En estos casos el puerto debe proveer elementos que permitan la adaptación. que no son capaces de mantener el intercambio de datos a la alta velocidad impuesta por la frecuencia de operación del µP. el μP cargará el puerto con el próximo dato y el proceso se repite. manteniéndose el estado de los diodos hasta que sean cambiados por una nueva operación de escritura. En este tipo de comunicación asincrónica. Por ejemplo. Pero las unidades controladoras de discos flexibles son. No siempre la información que entra o sale del sistema es compatible con el tipo de señal comprensible por el microprocesador o por el dispositivo de E/S. y además debe sincronizar la transferencia correcta de la información. Una vez seleccionado el hardware que conforma el puerto y realizada la conexión a los buses del sistema. el dialogo adapta la velocidad del μP a la de la impresora. El intercambio de datos entre el μP y un puerto no siempre es tan sencillo como ilustra el ejemplo anterior. e incluso entre periféricos y otras unidades del sistema. La impresora lee el puerto de control. en el caso de periféricos cuyo modo de funcionamiento es relativamente complejo. e indica al procesador que está disponible para recibir más datos. El μP puede entregar a la impresora más caracteres por segundo. Puede ser necesario también el uso de convertidores analógico digital y digital analógico para modificar la naturaleza de la señal de entrada o salida. disminuir o cambiar la polaridad de la tensión de entrada o salida de acuerdo con las características eléctricas del sistema o del periférico. cuando la información está lista para ser transferida. se requiere establecer la estrategia a usar para la gestión de la información que el μP envía a o recibe desde los puertos de E/S. puede operar en forma rápida y soportar una velocidad alta. Tales elementos pueden consistir de circuitos desplazadores de nivel para aumentar. y cuando el receptor está listo para recibir datos.

• Existen tres técnicas principales de gestión para establecer comunicación entre un periférico y el µP. el µP lee o escribe en el puerto sin consultar la disponibilidad del periférico para aceptar o recibir los datos. éstas son: 1. Finalmente. y dependiendo de la naturaleza de las señales aceptadas o entregadas por el dispositivo externo. Una técnica de gestión apropiada. debido a la carga acumulativa que implica esta situación. 3. habrá pérdida de información.Técnicas de gestión de Entrada y Salida 429 no imprime la palabra recibida desde el sistema antes que arribe el próximo dato. la activación de un indicador luminoso o la generación de una palabra de configuración para un circuito de E/S pro- . En conclusión. 2. El uso de buffers garantiza que los dispositivos conectados a los buses del sistema no signifiquen una carga excesiva cuando el dispositivo está activo. el uso de amplificadores con histéresis. puede ser necesario un circuito de interconexión para acondicionar las señales que entran o salen del CPU.1 ENTRADA Y SALIDA POR PROGRAMA La entrada y salida de datos de los dispositivos de E/S están sincronizadas por el programa en ejecución. E/S por programa. o a electricidad estática. un problema serio durante la transmisión de señales es la interferencia por ruido. el cual puede ser debido a fuentes externas. los buffers de entrada ser tri-estados. Esto es particularmente importante cuando varios puertos de salida son conectados al bus de datos. Ejemplos de esta modalidad es la lectura de un arreglo de interruptores. Acceso directo a memoria (DMA) 8. Existen dos modos de realizar la E/S por programa: en la primera. Es importante que el puerto este en capacidad de limpiar la señales que entran al sistema. E/S usando interrupciones. Toda transferencia de información entre el µP y un puerto es consecuencia de la ejecución de una instrucción de E/S. a líneas de potencia situadas en la proximidad del sistema. Un puerto de E/S deberá estar en capacidad de recibir señales relativamente deterioradas y de enviar señales de suficiente amplitud para que lleguen al periférico destino sin degeneración apreciable. Como dos puertos de entrada no pueden manejar simultáneamente el bus. y de los periféricos remotos. permiten ejecutar esta función. la conexión de un periférico al µC requiere: • El uso de un puerto de E/S. De modo que el puerto de E/S debe ser capaz de cambiar la amplitud de las señales de control e información para cumplir con los requisitos del μP.

2. Cuando éstos se incluyen en un diseño debe prestarse especial cuidado al efecto de rebote de contactos (a) Fig. Esta acción libera partículas microscópicas de oxido y corrosión de modo que ocurren muchos cierres y aperturas de contactos antes que el interruptor se establezca en la condición de cerrado. Muestre el número de veces que S5 es activado. El programa debe parar la décima vez. si se presenta información numérica en una pantalla multiplexada de indicadores de 7 segmentos. será responsabilidad del código transmitir los datos a la velocidad adecuada para que éstos sean visibles. son interruptores mecánicos como los mostrados en la figura 8. (b) Pulsador. Tome en consideración el efecto de rebote de los pulsadores. El siguiente ejemplo usa E/S por programa en el primer modo para comunicar al µprocesador con dispositivos externos Ejemplo 8. La puesta en práctica del modo de gestión requiere circuitos de poca complejidad y al ser una técnica sincrónica. el impacto mecánico de la tensión de esta parte puede producir rebotes antes que el contacto real ocurra. En estos casos es responsabilidad del programa realizar todas las operaciones necesarias para una correcta entrada o salida de datos. 8. En interruptores que usen resortes. (a) Interruptor deslizante.1.Técnicas de gestión de Entrada y Salida 430 gramable. (b) Considerando una escala microscópica.2 se muestra un arreglo de ocho interruptores lógicos conectado al puerto de entrada 16 y un indicador de siete segmentos en el puerto de salida 17.1 En la figura 8. CPU atiende al periférico y el tiempo usado en ejecutar la rutina de servicio. Se deben escribir dos programas que: 1. Por ejemplo.1. un contacto se ubique sobre el otro. Un dispositivo de entrada de uso común en aplicaciones de control. . se presente en el indicador el número del pulsador. Cuando un interruptor sea presionado y liberado. se sabe el momento exacto en el cual la. la superficie de los contactos no es lisa sino que está formada por elevaciones y depresiones y minúsculos promontorios originados por las chispas de las continuas conmutaciones. Los interruptores usualmente son diseñados para que al ser activados.

Técnicas de gestión de Entrada y Salida 431 Fig.2 Puertos de E/S para el ejemplo 8.1. .8.

4 es ideal para esta función. el circuito de la figura 8. Un biestable con puertas NAND suprime el efecto de rebote en un interruptor SPDT. Fig.8.3. Si se tiene un interruptor SPDT. 8.3. Efecto del rebote de contactos en un interruptor mecánico. En la práctica la intermitencia de contactos pude ser eliminada con circuitos o por programa.4. 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 duración indicada para el rebote es un estimado y depende fuertemente de la calidad y tiempo de uso del dispositivo. 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. La forma de onda generada durante el accionamiento de un interruptor convencional. se presenta en la figura 8. .Técnicas de gestión de Entrada y Salida 432 Es claro que si los interruptores son usados como entradas en circuitos digitales se requiere un contacto limpio sin los indeseables rebotes que sugieren que el dispositivo ha sido accionado varias veces en lugar de una vez. En pulsadores de costo elevado se usan contactos con un baño de oro para disminuir el oxido y la corrosión. Fig.

de modo que D0 cae a estado bajo.4 no puede ser utilizado. En pulsadores e interruptores del tipo SPST.7. el circuito de la figura 8. Fig.7. Cuando el pulsador es activado. como ilustra la figura 8.8. Observe que el cierre y apertura del interruptor sólo ocurre una vez. Otro método de eliminación de la intermitencia en los contactos es usar un multivibrador monoestable que produzca un pulso con una duración mayor al tiempo de rebote. a la onda real en el terminal D0. La constante de tiempo del circuito RC se elige de tal manera que los pulsos de rebote no afecten significativamente el proceso de descarga como ilustra la parte izquierda de la figura 8.Técnicas de gestión de Entrada y Salida 433 En el flanco de caída del primer rebote. En este caso la salida es el complemento lógico de la entrada: cuando el interruptor está liberado. el capacitor es conectado a tierra a través del resistor de 390Ω. Cualquier rebote posterior no tiene efecto sobre la salida. con duración de 5 ms. Un chip circuito integrado del tipo 74LS121 puede usarse con tal propósito. un circuito antirebote práctico puede construirse combinando una red RC y un disparador de Schmitt. la salida D0 es llevada a uno o cero dependiendo de la posición del interruptor.5. La apertura del pulsador inicia de nuevo la carga del capacitor como muestra la figura 8. la salida es . Supresión del rebote de un pulsador.6.7 superpone la señal de rebote. La figura 8. El capacitor en la figura 8. Para eliminar la acción de rebote en estos dispositivos pueden usarse varios métodos.5 está normalmente cargado a 5 V produciendo un nivel lógico alto en D0. Finalmente. el primero de los cuales se muestra en la figura 8.5. La duración y la separación de los pulsos de rebote corresponden a un interruptor real.

Cuando el pulsador es activado el voltaje del capacitor se descarga rápidamente. totalmente limpio. la salida del 74LS14 cae a cero lógico. La salida es un pulso en nivel alto. la salida conmuta a nivel alto hasta cuando el interruptor es desactivado.1.1 se usará esta técnica. Fig. Se supone una duración de 10 ms para el transitorio del rebote de contactos.8. El código necesario es una rutina que retardo que espere hasta cuando los contactos del interruptor han dejado de rebotar. como se aprecia en la figura 8. Para muchos pulsadores o un teclado es preferible usar el programa para suprimir el rebote de contactos.Técnicas de gestión de Entrada y Salida 434 cero lógico y al ser presionado sube a estado uno. La eliminación de la acción de rebote por hardware se recomienda cuando existen pocos interruptores en la aplicación. Si el rebote al cierre no es suprimido. el µP tomará el rebote como la desactivación del dispositivo y lo identificará sin esperar la apertura real.8 pide que luego de activado un interruptor se espere su liberación para presentar el número del pulsador en el indicador. . El diagrama de flujo para el código del ejemplo puede verse en la figura 8. A continuación se presenta la solución al primer apartado del ejemplo 8. En este momento el capacitor vuelve a cargarse y cuando el voltaje sube por encima de VT+. El código consta del programa principal y dos subrutinas: una para el retardo de 10 ms y la otra para la conversión. éste debe convertirse al código adecuado para presentarse en el indicador de siete segmentos antes de ser escrito en el puerto de salida 17. Debido a que el número con el cual se identifica el interruptor es un valor binario. Cuando esta tensión cae por debajo del umbral inferior de histéresis VT-. El programa se realizó suponiendo que no ocurren cierres simultáneos de dos o más de los ocho interruptores. Circuito antirebote con disparador de Schmitt. Solución parte 1: Esta parte del ejemplo 7.6.8. Para resolver el ejemplo 8.9.

5.7. Formas de ondas resultado de la simulación del circuito antirebote de la figura 8. En t=0 se cierra/abre el interruptor el cual estaba abierto/cerrado en t=0-.8. .Técnicas de gestión de Entrada y Salida 435 Fig.

Técnicas de gestión de Entrada y Salida 436 Fig.8. . una vez liberado. Flujograma para identificar el interruptor activado y presentar su número.8.

1 .------------------------------------------------------------------------------------------------------. programar 8255 mvi a. class=iospace .Técnicas de gestión de Entrada y Salida 437 Fig.----------------------------------------------------------------------------------------------------seg p8255 pa: ds 1 pb: ds 2 pctrl: ds 1 .1 .tope_pila mvi a. esperar cierre de un interruptor cpi 0ffh .-----------------------------------------------------------------------------------------------------extern ret_10ms.------------------------------------------------------------------------------------------------------. apagar indicador esper_cierre: in pa .8.-----------------------------------------------------------------------------------------------------seg progr lxi sp. Ejemplo 8.start=16. start=0 defseg p8255.95h out pctrl .9.------------------------------------------------------------------------------------------------------defseg progr. Programa principal .255 out pb .bin_7seg tope_pila equ 0300h . Ventana principal de Microide con el proyecto del ejemplo 8.

Rutina de conversión de binario a siete segmentos . mov a.e ora d jnz ret1 pop psw ret end ret_10ms: ret1: .-----------------------------------------------------------------------------------------------------tabla: db 3fh. esperar apertura para presentar número cpi 0ffh . retardar 10 ms mvi b.07h db 7fh.a mov a.06h. salir end .6dh. probar otro pulsador esper_apert: in 10h . esperar call ret_10ms . presentar número hlt .39h.m ret .Técnicas de gestión de Entrada y Salida 438 jz esper_cierre . tabla de conversión .79h.-----------------------------------------------------------------------------------------------------public bin_7seg defseg convers seg convers bin_7seg: lxi h.b . convertir a 7 segmentos cma .-----------------------------------------------------------------------------------------------------. el indicador es ánodo común out pb .------------------------------------------------------------------------------------------------------ .-----------------------------------------------------------------------------------------------------public ret_10ms defseg retardo seg retardo push psw lxi d. ninguno cerrado.7dh.-----------------------------------------------------------------------------------------------------.tabla add l mov l.4fh.0ffh .7ch. alguno cerrado. Rutina de retardo .66h.5eh. jnz esper_apert .502h dcx d mov a.77h.71h end .-----------------------------------------------------------------------------------------------------.67h. identificar interruptor otro: inr b rar jc otro . número al acumulador call bin_7seg .5bh.

8. . lo cual sucedía con el primer rebote de apertura.11 y a continuación se muestra el código para el programa principal. Fig. De otro modo. Solución parte 2: En la parte anterior se debía esperar la liberación del interruptor para proceder a parar al programa. El diagrama de flujo para el programa se presenta en la figura 8. Simulación del ejemplo 8. esto significa que es necesario también eliminar los rebotes durante la desactivación.1 parte 1 con el interruptor S4 activado.10. En este caso se desea registrar el número de veces que el interruptor 5 es presionado. estos serían contabilizados como cierres/aperturas. El ejemplo se simuló con WSIM85 y funcionó bien.Técnicas de gestión de Entrada y Salida 439 El código programa un PPI8255 en la dirección 10H con el puerto A como entrada y el puerto B como salida. La programación de la subrutina de retardo y la de conversión de binario a siete segmentos fue realizada en la parte anterior del ejemplo.

start=16.8.bin_7seg equ 0300h seg p8255 ds 1 ds 2 ds 1 tope_pila pa: pb: pctrl: . defseg progr.11. start=0 defseg p8255.Técnicas de gestión de Entrada y Salida 440 Fig. Flujograma para presentar el número de veces que el interruptor S5 es activado. class=iospace extern ret_10ms.

contador inicia en cero . indicador a cero .7 y si está en nivel alto. lee el contenido del puerto P7. Por ejemplo el terminal P8. convertir a 7 segmentos . el cual constituye un ejemplo de E/S programada con consulta. indicador es ánodo común .b cpi 10 jz salir mov a. esperar cierre de un interruptor . se debe examinar un bit de estado activado por el periférico cuando necesita atención. presentar número . El código para la transferencia se presentó en el ejemplo 7. Para preguntar al puerto.5 corresponde al .12 se repite el circuito de la figura 7. cada uno deberá generar su propio bit de estado.b call bin_7seg cma out pb in 10h cpi 0ffh jnz esper_apert call ret_10ms jmp esper_cierre hlt end . pero al ser una comunicación asincrónica. En la figura 8. La lógica necesaria para poner en práctica esta modalidad es sencilla. cada uno con su bit de estados particular en la línea correspondiente del puerto P8. Considere ahora que se tienen ocho puertos de entrada P0-P7. esperar .95h out pctrl mvi a. se gasta tiempo de CPU en forma innecesaria debido a que para garantizar el funcionamiento del sistema. .Técnicas de gestión de Entrada y Salida 441 esper_cierre: esper_apert: salir: seg progr lxi sp.tope_pila mvi a.0 in pa cpi 0ffh jz esper_cierre call ret_10ms inr b mov a. retardar 10 ms .7 para anunciar la presencia de un nuevo dato en la entrada del puerto 8. el lazo de consulta debe ejecutarse en intervalos regulares aunque los periféricos no requieran servicio.not(3fh) out pb mvi b. . esperar apertura para presentar número . se tiene que la segunda modalidad es la de consultas sucesivas o polling cuando el µP pregunta periódicamente a cada periférico si requiere atención. En otras palabras el periférico sube a uno el terminal P8.8. ninguno cerrado. alguno cerrado. desactiva el bit de condición. número al acumulador . Si existen varios dispositivos de E/S.30. Si la respuesta es negativa. esperar siguiente cierre Retomando lo dicho sobre la existencia de dos modos de realizar E/S por programa. permaneciendo en el lazo hasta cuando se le solicite servicio. En este caso el µP examina la línea P8. el µP consultará al siguiente dispositivo de E/S. Una vez que el µP lee el puerto.

bit 0 a la bandera de acarreo . El siguiente código permite ejecutar la rutina de servicio correspondiente a los puertos que requieran atención. leer nuevo dato en puerto 7 si bit 7 es uno Fig. conslt_suc: in 8 rar cc rut_0 rar cc rut_1 rar cc rut_2 rar cc rut_3 rar cc rut_4 rar cc rut_5 rar cc rut_6 rar cc rut_7 ret . leer bits de estados .12. .Técnicas de gestión de Entrada y Salida 442 puerto de entrada P5. bit 7 a la bandera de acarreo . Entrada de datos usando un bit de condición. leer nuevo dato en puerto 0 si bit 0 es uno . El µP debe leer el puerto P8 y examinar los bits individuales para determinar en cual puerto se ha cargado un nuevo dato.8.

El tiempo de espera desperdicia tiempo de CPU y requiere más líneas de código para su realización. adat: in p9 ani 80H jz adat El ancho de banda del periférico nos sugiere que el examen de la bandera tendrá éxito cada 62. los cuales pueden ser registrados o actualizados en cualquier momento.64 µs/paso.5 ms. .8. No obstante la verificación ocurrirá 115741 veces cada segundo.30 tarda un segundo en transmitir los 16 valores. Otros dispositivos de E/S con mayor velocidad como: teclados.99 %. Entrada de datos usando una interrupción. La pérdida de tiempo es del 99. La solución a este problema es el uso de la técnica de interrupciones. Una interrupción es una solicitud realizada al microprocesador por parte de un periférico para solicitar servicio. deben ser atendidos cuando estén disponibles para transmitir o recibir información. La figura 8.Técnicas de gestión de Entrada y Salida 443 8.13. debido a que el tiempo útil es de 138. Suponga que el periférico de la figura 7. impresoras y sistemas de adquisición de datos. Todo µP tiene al menos una entrada INTR para este propósito y una salida INTA de reconocimiento de interrupción.24 µs por cada segundo. el programa estará a la expectativa por la activación de una bandera de condición que notifique que el periférico está libre.13 muestra como el puerto de bit de estado de la figura 8. Fig.8 que examina la bandera de estado tiene una duración de 8.2 ENTRADA Y SALIDA USANDO INTERRUPCIONES El método de E/S por programa es adecuado para atender periféricos muy lentos como interruptores e indicadores visuales. En estos casos. El lazo en la rutina ADAT del ejemplo 7.12 puede ser eliminado para que en respuesta a una interrupción el µP lea el dato cargado en el puerto de entrada por el dispositivo externo. lo cual equivale a 7234 veces antes de la transmisión de cada carácter.

Entrada de datos usando una entrada INTR sensible a nivel. Si INTR es sensible a nivel. la señal debe permanecer aplicada con un nivel estable hasta cuando la interrupción sea aceptada. Fig.Técnicas de gestión de Entrada y Salida 444 Cuando el µP recibe una interrupción puede tomar dos acciones: parar la ejecución del programa en progreso y ejecutar una rutina de servicio a la interrupción para luego regresar al programa principal.8.14. En el otro caso. Fig. 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 interrupción. La entrada INTR puede ser sensible a flanco o a nivel. . De modo que la señal de solicitud no tiene porque permanecer en uno lógico.15. o ignorar la petición si la interrupción está deshabilitada. debe usarse un latch para memorizar la petición de interrupción como ilustra la figura 8.8.14. Proceso de atención a una interrupción.

se dice que son enmascarables. RST 7.5.x interna que suministra la dirección de salto. de modo que cuando son activadas y están habilitadas. el procesador será interrumpido 16 veces cada segundo y ejecutará la rutina de servicio para leer y cargar en memoria el valor. se genera una instrucción RST n. • El contenido del contador de programa se almacena en la pila. Cuando ocurre. Cuando una señal es aplicada a una entrada de interrupción vectorizada. el control se transfiere de nuevo al programa principal. se completa la instrucción que está en ejecución. RST 7. leer el puerto y almacenar los valores cuando se usa el método de polling. • Se activa la señal de reconocimiento de interrupción. Si la duración del código en la RSI es digamos 15 µs. . Las tareas que siguen a una interrupción son las siguientes: • Culmina la ejecución de la instrucción en curso. el µP espera que una lógica externa provea tal dirección.1 El sistema de interrupciones del 8085A El µP 8085A tiene cinco de entradas de interrupción: TRAP.15 muestra como se interrumpe el procesamiento normal de un programa y se reanuda una vez ejecutada la RSI.Técnicas de gestión de Entrada y Salida 445 Una interrupción. Las interrupciones que pueden ser inhabilitadas por el programa. el µP espera que en respuesta a la conmutación de la salida INTA . RST 6. 8. • Se ejecuta la rutina de servicio. En el caso de interrupciones no vectorizadas. Una vez completada la RSI. la cual no puede ser deshabilitada por el sistema. Todas son enmascarables excepto TRAP. alguna lógica externa coloque en el bus de datos una instrucción CALL dirección o preferiblemente una RST n.5. mientras que aquellas que el sistema no puede suspender son no enmascarables. En el caso de activación de la línea INTR. La figura 8.2. Las interrupciones TRAP. el µP acepta la petición y transfiere el control a una rutina de servicio de interrupción (RSI) la cual salva las variables para preservar las operaciones a reanudarse y atiende al periférico que originó la llamada. Existen instrucciones específicas del microprocesador para la habilitación o no de una interrupción particular o de todo el sistema de interrupciones. • El PC se carga con la dirección de la primera instrucción de la RSI. se le suministra internamente al procesador la dirección a la cual se debe transferir el control del programa. como todo evento asincrónico. en contraste con el tiempo de más de un segundo que requiere el µP para examinar la bandera de estado. Si la transferencia se ejecuta por medio de una interrupción. puede producirse en cualquier momento durante la ejecución de un programa. Considere de nuevo el caso del periférico que transmite 16 bytes por segundo. RST 6.5 son vectorizadas. para poder transmitir y almacenar en memoria los 16 valores se invierte un tiempo de CPU de aproximadamente 240µs.5 y RST 5.5. RST 5.5 e INTR. • Se recupera el contenido del PC guardado en la pila.

8. RIM y la conocida RST n. como INTR. SIM.5 es disparada por el flanco anterior de la señal presentada a esta entrada. Las restantes entradas: RST 6.5 y RST 5. DI.1 Instrucciones asociadas al sistema de interrupciones. pero la entrada deberá ser mantenida en uno hasta cuando la solicitud sea reconocida. de modo para activar esta interrupción debe aplicarse un 1 lógico a la entrada y mantenerse hasta cuando la interrupción sea reconocida. Instrucciones asociadas con interrupciones EI DI Habilitar interrupción Inhibir interrupción Poner máscara de interrupción Leer máscara de interrupción SIM RIM . Tabla. Estas son: EI. El vector de interrupción de la entrada INTR debe suministrarse externamente.5 en alto. Debido a que el µP registra la ocurrencia del flanco cargando uno en un bit interno. La línea RST 7.5 son sensibles a nivel alto. Fig. Entradas de interrupción y salida de reconocimiento de interrupción La entrada TRAP tiene prioridad máxima y es sensible a flanco y a nivel. no es necesario mantener a RST 7.8.Técnicas de gestión de Entrada y Salida 446 El terminal INTR es sensible a nivel. Cuando la interrupción es atendida la bandera vuelve a cero. El 8085 tiene varias instrucciones destinadas a ser usadas con las interrupciones.16. lo cual significa que el flanco de subida de la señal aplicada dispara el proceso de interrupción.

5.5 RST6. Las rara nomenclatura de las interrupciones RST n. deshabilitando todas las interrupciones enmascarables.5 x 8).5 RST7.5 le corresponde 34H (6. EI pone en uno la bandera de habilitación de interrupción o BITINTE. Como se expuso en el capítulo 4.Técnicas de gestión de Entrada y Salida 447 EI Habilita las interrupciones del microprocesador después de la ejecución de la siguiente instrucción. lo cual es suficiente para contener una instrucción de salto a la RSI. Tabla. autorizando todas las interrupciones enmascarables. la presencia de una interrupción es detectada por el µP durante el flanco negativo del pulso de reloj anterior al fin de la instrucción durante la cual la interrupción es activada. Cuando una señal es aplicada a la entrada TRAP.5 INTR 1 2 3 4 5 Ninguna SIM EI SIM EI SIM EI EI Flanco y nivel Nivel Nivel Flanco anterior Nivel Vector de interrupción 0024H 002CH 0034H 003CH Externo (CALL dir o RST n) El espacio de direcciones entre 0000H y 0040H debe preservarse para el manejo de interrupciones. RST 6. Observe que entre los vectores de las interrupciones existe un espacio de ocho posiciones de memoria. inmediatamente después la ejecución de DI. las entradas RST 7. 8. DI Pone en 0 la bandera de habilitación de interrupción o BITINTE. Esto permite la culminación de la . Para que una de estas entradas sea habilitada se debe desenmascarar la interrupción correspondiente usando la instrucción SIM y posteriormente se debe ejecutar la instrucción EI. Por el contrario.5 y RST 5.x se debe a que su vector se encuentra en el punto medio entre la RST n anterior y la subsiguiente. de modo que a RST6. Para que una solicitud de interrupción realizada en la línea INTR sea atendida basta con que la entrada esté habilitada por medio de la instrucción EI.2 Características de las interrupciones del 8085A. Entrada Prioridad Habilitación Disparo TRAP RST5. la interrupción es atendida de inmediato independientemente que el sistema de interrupciones esté deshabilitado con DI. Por ejemplo RST 6 tiene como vector 0030H (8 x 6) y 38H (7 x 8) es el de RST 7.5 disponen de un mecanismo de enmascaramiento que permite la autorización o no de cada entrada en forma independiente.

Si existen solicitudes diferidas. Durante el ciclo de máquina BI se . se desactivan las interrupciones poniendo a cero el BITINTE de habilitación y se reconoce la petición cargando uno en el bit de reconocimiento de interrupción BITINTA. El ciclo de máquina INA es similar al ciclo de búsqueda excepto que IO / M va a nivel alto y se activa INTA en lugar de RD . si e trata de INTR o un ciclo de máquina del tipo de bus inactivo o BI. y.17 se muestra un diagrama de transición simplificado de la operación del 8085. Diagrama de transición de estados simplificado del 8085A. Si la respuesta es negativa el µP buscará la siguiente instrucción. Si el µP está en el estado HALT el muestreo se realiza en cada ciclo de reloj. Observe que al final del último ciclo de máquina de la instrucción en ejecución se pregunta si hay alguna interrupción pendiente que esté habilitada y/o desenmascarada. En el siguiente pulso de reloj.8. se inicia un ciclo de máquina de reconocimiento de interrupción o INA.17. Fig. en el caso de TRAP y RST. En la figura 8.Técnicas de gestión de Entrada y Salida 448 ejecución de la instrucción en curso antes de atender la interrupción.

el cual es la dirección de la primera instrucción de la RSI o de una instrucción de salto a ésta. el cual contiene la dirección de la instrucción que sigue a la que estaba en ejecución en el momento de producirse la interrupción. La instrucción RST n requiere menos lógica externa para esta tarea que la CALL. Durante el ciclo INA no se incrementa el contador de programa.3. Mientras INTA esté en nivel bajo. También debe almacenar en la pila el contenido del contador de programa para que el programa pueda reasumir. Tabla. IO / M = 1 y la línea INTA activada a nivel bajo.8.5 y RST 5. A continuación se deshabilitan las interrupciones poniendo a cero el BITINTE y el µP inicia un ciclo de máquina tipo de reconocimiento de interrupción con S1 = 1 . una vez finalizada la RSI.5. las operaciones que estaba realizando antes de producirse la interrupción. Instrucción Vector de interrupción Instrucción Vector de interrupción RST0 RST1 RST2 RST3 0000H 0008H 0010H 0018H RST4 RST5 RST6 RST7 0020H 0028H 0030H 0038H . S 2 = 1 .Técnicas de gestión de Entrada y Salida 449 genera la instrucción RST interna que suministra el vector de interrupción para las entradas TRAP y RST. el proceso de interrupción se inicia cuando el periférico pone en alto la entrada.5 y TRAP y se colocan (ponen a 1) las máscaras de interrupción a RST 7.5. Para esta función. Vectores de interrupción para las instrucciones RST n. También en un evento de RESET son puestos a cero el BITINTE. Cuando una interrupción es reconocida. el µP esperará que el dispositivo que interrumpe coloque en el bus de datos el código de operación de la próxima instrucción a ejecutar. El código de instrucción de RST n es: D7 1 D6 1 D5 N D4 N D3 N D2 1 D1 1 D0 1 Donde NNN es el valor de n en binario. se deshabilita el sistema de interrupciones al ponerse a cero el BITINTE. Usualmente un flip flop de habilitación se pone a uno para permitir la interrupción mientras que un flip flop de máscara se pone a cero para desenmascarar la interrupción. Tal instrucción debe suministrar a la CPU la dirección de inicio de la rutina de servicio de interrupción. Interrupciones disparadas por la entrada INTR Estando habilitada INTR por medio de la instrucción EI. sólo dos instrucciones son factibles de usar: CALL dirección y RST n. RST 6. el bit interno de reconocimiento de flanco del RST 7. La ejecución de RST n carga en la pila el contenido del PC y carga en el PC el valor 0000000000NNN000 ó 8 x n.

Interconexión de una RST n al 8085.8. El interruptor S permite seleccionar la instrucción RST n (n: 0-7) y la señal INTA habilita los buffers de modo que la instrucción RST n programada pase al bus de datos del µP. Debido a que la instrucción RESTART sólo salva en la pila el contenido del contador de programa.18. es responsabilidad del programador incluir al inicio de la RSI las instrucciones PUSH necesarias para preservar el contenido de los registros que van a ser modificados. La lógica consiste de ocho buffers de tres estados del tipo 74LS244 y tres interruptores lógicos. los cuales deben ser recuperadas con POP al culminar la RSI.Técnicas de gestión de Entrada y Salida 450 Un circuito que permite cargar en el bus de datos cualquiera de las instrucciones RST n cuando la línea INTA esté en nivel cero se muestra en la figura 8. La rutina de servicio de interrupción debe terminar con una instrucción RET para . Fig.18.

Cuando el dispositivo finaliza el proceso de conversión de una muestra de la entrada analógica Ve. las cuales fueron inhibidas por el proceso de interrupción previo. datos adquiridos . in puerto_adc mov m.----------------------------------------------------------------------------------------------------------jmp inicio org 28H .Técnicas de gestión de Entrada y Salida 451 reasumir el programa principal y ésta debe estar precedida por una EI para habilitar de nuevo las interrupciones enmascarables. .dat . instante cuando la salida INTA inicia a cero el biestable.19 muestra el diagrama eléctrico de un circuito de conversión analógico digital ADC0804 conectado al microprocesador 8085. leer valor desde ADC . procesamiento de los .a inx h jmp ret_int end leer_dato: . . Se debe escribir un programa que maneje el puerto del ADC y cargue 16 datos partir de la dirección de memoria 2000H.. El latch mantiene a INTR en uno hasta cuando el CPU reconoce la interrupción. muestra siguiente En las aplicaciones usuales de interrupciones. Luego de atender al dispositivo externo.b_stack dcr b jz proceso out puerto_adc . inicio de zona de almacenamiento de datos mvi b.2 . Ejemplo 8. . A continuación se expone un ejemplo del modo de operación de un puerto de entrada con interrupción.2 La figura 8. contador de datos ret_int: lxi sp. activa a nivel bajo la salida de fin de conversión del conversor A/D INTR . cargar dato en memoria . próxima posición . Ejemplo 8.17 .----------------------------------------------------------------------------------------------------------.. habilitar interrupciones hlt . esperar interrupción proceso: . e interrumpe al procesador al aplicar un nivel alto a la entrada de interrupción INTR. iniciar conversión ei . el procesador retorna a ejecutar el programa que proce- . vector de interrupción de RST 5 rst5: jmp leer_dato . salto a rutina de servicio de interrupción org 100h inicio: lxi h.. el µP está ejecutando una sección de código y en cualquier momento es interrumpido por un periférico.

en espera de la interrupción de fin de conversión.El ADC0804 interrumpe al µP al final de cada conversión. En este ejemplo. se inicia el proceso de conversión de una muestra. la CPU inicia el proceso de conversión y a continuación espera. el programa coloca en el registro par HL. La RSI no finaliza con un RET porque el µP retornaría a la siguiente instrucción después de HLT y lo que se requiere es adquirir la siguiente muestra o procesar los datos adquiridos. A continuación.8. En caso contrario. Al inicio.19. la dirección de carga del primer dato e inicia en 17 el contador de datos adquiridos. se ejecuta una instrucción RST 5 y el control salta a la rutina de lectura del CAD. Cuando la línea INTR del conversor cae a cero. Si lo es. carga el apuntador de pila y prueba si el dato anterior fue el último. El retorno se realiza a restaurar el valor del apuntador de pila y probar el contador de datos. Fig.Técnicas de gestión de Entrada y Salida 452 saba antes de ser interrumpido. ejecutará un código no mostrado para procesar la información obtenida. El µP sólo espera por la interrupción y no se requiere código de consulta de una bandera de estado ni una línea de puerto adicional para el bit de estado. por una interrupción. . habilitando las interrupciones con EI y se lleva al µP a un estado de parada. sin realizar ninguna acción.

si lo emula.Técnicas de gestión de Entrada y Salida 453 El programa fue simulado con WIN85.5 Máscaras de interrupción Habilitación de puesta de máscaras.5 D0 M5. RST 7.El registro de máscaras de interrupción como es puesto por la instrucción SIM. Interrupciones disparadas por las entradas RST Cuando el µP reconoce una interrupción provocada por la aplicación de una señal en las entradas TRAP.5 D3 MSE D2 M7. Es necesario que previamente se desenmascare la interrupción. no habilita las entradas de interrupción RST. SIM Esta instrucción permite que el contenido del acumulador sea usado como indica la figura 8. permaneciendo en estado HALT del cual puede ser sacado con una interrupción o con un pulso de RESET.5.5 o RST 5. por el contrario.21. D7 SOD D6 SOE D5 X D4 R7. . La mayoría de los simuladores detienen la ejecución del programa al ejecutar HLT y no simulan el modo de parada. transita a un ciclo de máquina de bus inactivo durante el cual se genera una instrucción RST n. Durante el ciclo BI no se incrementa el contador de programa.5 Sin uso Habilitación de salida serie Salida serie de datos Fig.8. como ilustra la figura 8.5 D1 M6. RST 6.x interna. WIN85. La sólo ejecución de la instrucción EI. Reset RST7.20 para programar el registro interno de máscara de interrupciones. la cual provee el vector de interrupción.5.20. usando la instrucción SIM (Set Interrupt Mask).

.8.Ventana principal de WIN85 mostrando los resultados de la simulación.21.Técnicas de gestión de Entrada y Salida 454 Fig.

22.8. se pone en cero el flip flop interno de RST7.5.5 D0 M5. RIM Carga en el acumulador con las máscaras de las entradas RST. .5 Máscaras de interrupción Bandera de habilitación de interrupciones Interrupciones pendientes Entrada serie de datos Fig.5 D3 IE D2 M7.5 D1 M6.5 independientemente de que la entrada está enmascarada.Técnicas de gestión de Entrada y Salida 455 Un 1 debe ser cargado en el bit 3 del acumulador para poder poner/quitar la máscara de cualquiera de las entradas de interrupciones RST.22. Quitando la máscara se habilita la interrupción correspondiente. Si el bit 4 del acumulador es puesto a 1 antes de ejecutar SIM. La salida de este biestable es puesta a 1 cuando se presenta un flaco positivo a la entrada RST7.5 D4 I5. La instrucción SIM también carga el bit 7 del acumulador en la salida SOD si el bit 6 está en 1.5 D5 I6.El registro de máscaras de interrupción como es leído por la instrucción RIM. el estado de las máscaras RST y las interrupciones pendientes. D7 SID D6 I7. la cual carga en el acumulador el estado del bit de validación de interrupciones. las interrupciones solicitadas y aún no atendidas. Este biestable también es puesto en cero cuando se reconoce la interrupción o después de un RESET. La última instrucción asociada al sistema de interrupciones es RIM (Read Interrupt Mask). la bandera de habilitación de interrupciones y el estado de la línea SID de entrada serie como indica la figura 8. Un 1/0 en los bits D0-2 deberá poner/quitar la máscara de la entrada correspondiente.

5.Técnicas de gestión de Entrada y Salida 456 Cuando las interrupciones están pendientes. antes que sea detectada una nueva solicitud.---------------------------------------------------------------------------------------------org 3ch . +5V 2.3 La figura 8.8. puede usarse la instrucción RIM para dar servicio a o a los periféricos que solicitan atención.El pulsador S1 dispara la interrupción RST7.---------------------------------------------------------------------------------------------.5.0bh .a inicio del programa . . retorno desde interrupción . Rutina de servicio de interrupción . Programa principal . Escriba un programa que cargue el puerto de salida 20H el número de veces que el pulsador S1 es presionado. start=0 seg prog jmp inicio .---------------------------------------------------------------------------------------------. Se incrementa contador de pulsaciones out 20h . desenmascara RST7.2k S1 220 RST7.--------------------------------------------------------------------------------------------org 0100h inicio: lxi sp.5 74LS14 10µF Fig.5 debe ponerse a 1 el bit 4 del acumulador por medio de SIM. absolute. pero enmascaradas. el contador se inicia en cero out 20h esper: jmp esper . vector de RST7.---------------------------------------------------------------------------------------------defseg prog.3 .23.5 inr a .23 muestra un pulsador conectado a la entrada de interrupción RST 7. Ejemplo 8. espera por interrupción end .5 sim ei . Si la entrada es RST 7. salida al puerto 20H ei .--------------------------------------------------------------------------------------------.b_stack mvi a. habilita sistema de interrupciones xra a . Ejemplo 8. Se vuelven a habilitar las interrupciones ret .

En la práctica debe usarse una instrucción DAA después del incremento del acumulador para que la cuenta sea en BCD.4 .0 contar: rim .4 Debe repetirse el ejemplo anterior. 00001011b sim ei El bit 3 en uno permite manipular los bits de máscara.5 y RST 5. ocultar todos los bits excepto el de RST7. Observe en la figura 8. salida al puerto 20H mvi a. start=0 seg prog org 0100h mvi b.Técnicas de gestión de Entrada y Salida 457 Para habilitar la entrada de interrupción es necesario quitar la máscara de interrupción con la secuencia.5 es puesto a 1 cuando se aplica un flanco positivo a esta entrada. no hay interrupción pendiente. pero con la entrada RST 7. . Sin embargo. de modo que las solicitudes al µP son ignoradas. mientras que los bits 1 y 0 en uno mantienen RST 6.5.5 pendiente jz contar . mvi a. . el programador debe llevar a cero este bit usando SIM para que una nueva solicitud pueda ser detectada. usando RIM puede detectarse si se ha realizado una petición en cualquiera de las entradas RST. Debido a que el flip flop interno de RST 7. Antes del retorno de la RSI se rehabilita el sistema de interrupciones con EI.--------------------------------------------------------------------------------------------------------------. Si las interrupciones hubiesen estado habilitadas la salida de este biestable volvería a cero. absolute. esperar inr b .10h . Para completar la habilitación de las interrupciones se ejecuta EI.--------------------------------------------------------------------------------------------------------------- En este caso las interrupciones no se habilitan. se activo el pulsador y se incrementa contador.5 enmascaradas.24 que el simulador muestra el contenido del puerto directamente en decimal. Ejemplo 8. El bit 2 en cero quita la máscara a RST 7. out 20h .b . mov a. Ejemplo 8. Cuando esto ocurre puede brindarse atención al dispositivo en una forma similar a la técnica de consultas.--------------------------------------------------------------------------------------------------------------defseg prog. a esperar por interrupción end . se inicia flip flop que indica flanco detectado en entrada sim .5 enmascarada. leer registro de máscaras de interrupciones ani 40h . El programa fue simulado con WIN85. Use la instrucción RIM para detectar una solicitud e interrupción. al ser reconocida la interrupción. RST7.5 jmp contar .

La instrucción RIM permite atender a periféricos cuando el sistema de interrupciones está deshabilitado.24.8.Técnicas de gestión de Entrada y Salida 458 Fig. .

.Teclado y pantalla del SDA 85. • El monitor del SDA 85 tiene en la dirección ROM:003CH un salto a la posición de memoria RAM:0FFB1H.5 es presionada. quitar mascara a RST7. Fig. el número de veces que la tecla Rst 7.--------------------------------------------------------------------------------------------------------------. al ser pulsado.--------------------------------------------------------------------------------------------------------------org 4000h lxi sp.--------------------------------------------------------------------------------------------------------------. Ejemplo 8. La solución es que la rutina de servicio de interrupción espere 30 ms (duración del rebote).5.5 sim ei . si se presiona está tecla una sola vez se generarán múltiples peticiones de interrupción. habilitar interrupciones . Programa principal . En esta última dirección debe estar la primera instrucción de la RSI.Técnicas de gestión de Entrada y Salida 459 Ejemplo 8.4800h mvi a.5.0bh .5 está conectado directamente a la entrada de interrupción RST 7. El programa de este ejemplo debe garantizar que se produce una solicitud de interrupción por cada activación de la tecla Rst7. dirección de rutina UPDDT cont equ addr 0fff9h . a continuación suprima toda interrupción pendiente y finalmente proceda a incrementar el contador.5 Escribir un código que permita ver en la pantalla del SDA 85. de modo que se produce efecto de rebote. En un µC como el SDA 85 lo usual es que el controlador de teclado suprima en forma automática el rebote de contactos de cada una de las teclas. el pulsador Rst 7. • La subrutina UPDDT (06D3H) presenta en el campo de datos de la pantalla el byte almacenado en la dirección 0FFF9H.5 . Como consecuencia.25.8.--------------------------------------------------------------------------------------------------------------upddt equ addr 06d3h . En este caso. dirección cuyo contenido muestra UPDDT .

5 .5 .Desenmascarar RST7.--------------------------------------------------------------------------------------------------------------- Si el efecto de contactos no es eliminado.e ora d jnz ret30 ret .--------------------------------------------------------------------------------------------------------------.--------------------------------------------------------------------------------------------------------------.5 ret .--------------------------------------------------------------------------------------------------------------.5: call rebot . contador se inicia en vero . cuenta en decimal sta cont . el contador se incrementará por cuatro cada vez que se pulse la tecla Rst7.--------------------------------------------------------------------------------------------------------------ret30ms: lxi d. dos de los cuales son controlados por interrupción.--------------------------------------------------------------------------------------------------------------org 0ffb1h jmp rst7. Las interrupciones normalmente están asociadas al funcionamiento de circuitos de control de tiempo o temporizadores y en casos donde el µP intercambia datos con un periférico o con otro procesador. presentar contador en campo de datos .00h . rehabilitar interrupciones ret .Técnicas de gestión de Entrada y Salida 460 ocup: mvi a. Estos tópicos se tratan más adelante.0 sta cont mvi b.Limpiando el FF RST 7. Para finalizar el capítulo se presenta un ejemplo que involucra tres eventos. incrementar contador daa . sin punto decimal lda cont .Suprimir interrupciones no deseadas sim . contador al acumulador inr a . presentar contador call upddt rim ei .--------------------------------------------------------------------------------------------------------------rebot: call ret30ms . esperar por interrupción . .10h .00h call upddt jmp ocup . Retardo de 30 ms .0deah ret30: dcx d mov a.--------------------------------------------------------------------------------------------------------------rst7. Vector de interrupción RST 7.--------------------------------------------------------------------------------------------------------------.Esperar 30 ms mvi a.5 . sin punto decimal . Suprimir rebote mvi b. Subrutina de servicio de interrupción.5 mvi a.0bh sim . .5. Eliminar rebote de tecla Rst7.

5 se presionó treinta y seis veces.26 La tecla Rst 7. .8.Técnicas de gestión de Entrada y Salida 461 Fig.

Esto es que debe presentar la hora del día en su pantalla de acuerdo con el formato de la figura 8.Técnicas de gestión de Entrada y Salida 462 Ejemplo 8.Formato del reloj de 24 horas. 3.5.8. Pero el simulador no permite aplicar tal señal a la entrada RST 6.5> del teclado del microcomputador se genera una interrupción que permite ajustar la hora como se indica. 2. Tecleando de nuevo <END> se presenta la nueva hora.27. Como base de tiempo se usará una rutina de retardo de 1 segundo. Pulsando la tecla <END> se modifican los minutos.6 El microcomputador SDA 85 del simulador 8085 Virtual Kit debe ser convertido en un reloj de tiempo real. El reloj presentará continuamente la hora del día en un formato de 24 horas.27. 4. El funcionamiento del programa debe ser como se indica a continuación: 1. . para generar el retardo base de 1 segundo. Pulsando la tecla <RST7. Fig. En la práctica se prefiere aplicar la señal de un oscilador externo de frecuencia estable a una de las entradas de interrupción. al estar conectada a una tecla con efecto de rebote.

5 debe ser desenmascarada.5 ejecutará una rutina de servicio que permite modificar las horas y los minutos. Los diagramas de flujo del programa principal y de la rutina de servicio de interrupción RST 7. El contenido de las direcciones de memoria FFF7H y FFF8H se presenta en el campo de direcciones de la pantalla. Esta rutina debe desenmascarar la entrada RST 5. El byte en la posición FFF9H se presenta en el campo de datos de la pantalla. se lleva a cero y se incrementa en uno el contador de horas (HOR). Si (A)=1 se usa el campo de datos. se pone en cero y se reinicia la cuenta. Cuando SEG alcance 60. Tabla. Aquí se inserta un salto a la rutina de servicio pon_hm. Cuando HOR indique 24. RDKBD 0634H 06BCH UPDAD UPDDT 06D3H El programa ejecutará un programa principal el cual mide y presenta horas. Cada vez que transcurre un segundo. El registro B controla el punto decimal.4. . Si (A)=0 se usa el campo de direcciones. para poder leer el teclado.5 (003CH) contiene un salto a la posición de memoria RAM: FFB1H. Si (B)=1 sin punto decimal.4. El vector de RST7.29 y el listado del código a continuación. Una interrupción RST 7.Rutinas de monitor del SDA 85.Técnicas de gestión de Entrada y Salida 463 Para escribir el programa de reloj digital se usan las rutinas de usuario mostradas en la tabla 8. El programa usa tres contadores en memoria para presentar la hora. Para simplificar el programa las posiciones de memoria que se usan como contadores son: MIN HOR SEG 0FFF7H 0FFF8H 0FFF9H Observe que SEG corresponde a la posición 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. Si (B)=0 se muestra el punto decimal. Espera la pulsación de una tecla y retorna en el A el código de la tecla.8. Rutina Dirección OUTPUT 05FCH Descripción Presenta en pantalla la cadena de caracteres apuntada por HL.28 y 8. se incrementa el primer contador (SEG). se pone a cero y se suma uno al contador de minutos (MIN) y cuando MIN llegue a 60.5 se muestran en las figuras 8. minutos y segundos.5. El registro B controla el punto decimal. La interrupción RST5.

Técnicas de gestión de Entrada y Salida 464 Fig.8. Diagrama de flujo del programa principal .28.

5.8. Rutina de servicio RST 7.Técnicas de gestión de Entrada y Salida 465 Fig. .29.

incrementar minutos inx h . si menor presentar hh:min:seg mvi m. Programa reloj digital .0 . incrementar hora daa . si mayor hor a cero jmp inicio . comparar con 24 jc inicio . presentar hh:min:seg .a .*************************************************************************** . 5000h mvi a. apuntar hora inx h inx h mov a. presesentar horas-minutos call ret1s . actualizar hora cpi 24h . cargar en acumulador seg/min anterior inr a . desenmascarar interrupción RST7.a . si menor presentar hh:min:seg mvi m. cargar hora anterior en el acumulador inr a . comparar con 60 jc inicio .5 sim ei .*************************************************************************** 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 .seg .0 . incrementar seg/min daa . Programa principal . si mayor seg/min a cero dcx h dcx h .m . apuntar segundos inc_min: mov a.*************************************************************************** . contador para control de seg-min lxi h. habilitar interrupciones call upddt .Técnicas de gestión de Entrada y Salida 466 . presentar segundos call updad . inicio en 00:00:00 sta min sta hor inicio: lxi sp.m . cuenta en decimal mov m.*************************************************************************** .code org 4000h xra a sta seg .0bh .*************************************************************************** . actualizar seg/min cpi 60h . contador decimal mov m. apuntar min dcr b jnz inc_min . esperar un segundo mvi b.2 .

*************************************************************************** . salvar registros push b push d push h mvi a.msj_m . . empezar en cero segundos sta seg mvi a. recuperar registros pop d pop b pop psw ei ret . si mayor o igual modificar minutos sta min . de direcciones lda min . se suprime efecto del rebote sim . en campo call output . leer teclado cpi 0ah . al acumulador valor anterior de hor/min add a .5 (RDKBD) sim lxi h. presentar Hora/Minuto en campo de datos noend: call rdkbd .*************************************************************************** pon_hm: push psw . es <END>.*************************************************************************** . leer teclado form_2d: mov b.msj_h . modificar hora cpi 24h . cargar minuto anterior en acumulador may60: call hm . presentar mensaje HorA xra a . comparar con tecla <END> jz listo . comparar con 60 jnc may60 . no es <END>.desenmascarar RST5. si menor actualizar minutos xra a . Rutina de servicio RST7. cargar hora anterior en acumulador may24: call hm . combinar con última entrada desde teclado jmp hm .Técnicas de gestión de Entrada y Salida 467 . comparar con 24 jnc may24 . si menor actualizar hora lxi h.*************************************************************************** hm: sta seg call upddt . presentar mensaje Minu xra a . próximo dígito listo: lda seg .5. en registro B última entrada desde teclado lda seg .0eh . de direcciones lda hor .10h . determinar si valor es decimal jc form_2d . si es decimal: dar formato de dos dígitos cpi 10h . cargar valor en campo de datos en A jmp noend . no es decimal. si mayor o igual modificar hora sta hor . desplazar 4 bits a la izquierda add a add a add a ora b . retornar con nuevo valor de Hora/Minuto en A .a . modificar minuto cpi 60h . Eliminando interrupciones pendientes pop h . en campo call output . Modifica horas/minutos .

*************************************************************************** . La señal maestra puede también derivarse de la red de 60 Hz como ilustra el circuito de la figura 8. Otra solución para el ejemplo del reloj es usar una base de tiempo externa.e ora d jnz ret1 dcr b jnz ret2 pop psw pop d pop b ret .A db 25 . La onda seno es rectificada y aplicada a un disparador de Schmitt obteniéndose una señal de variación rápida. Rutina de retardo de 1 segundo . Las rutinas de usuario se ejecutan usando la secuencia de código: mvi a. salto a rutina de servicio El programa anterior fue simulado usando el 8085 Virtual Kit y funcionó como se esperaba.n db 29 .r db 27 .i db 24 .*************************************************************************** . Mensajes .o db 16 . frecuencia 60 Hz y nivel TTL. n es el número de la rutina de monitor . Vector de interrupción RST7.*************************************************************************** ret1s: push b push d push psw mvi b. El circuito no está aislado de la línea de potencia.09aeah ret1: dcx d mov a.Técnicas de gestión de Entrada y Salida 468 ret .*************************************************************************** .5 .*************************************************************************** org 0ffb1h jmp pon_hm .5.H msj_m: db 28 . Este µC es una tarjeta de desarrollo de bajo costo pero de gran utilidad.3 ret2: lxi d. debido a las dificultades presentes para la simulación.M .u db 26 . El código para ésta versión del reloj fue escrito para el microcomputador real MPR-85 PLUS.*************************************************************************** msj_h: db 10 .n rst 7 .31 y se aplica a la entrada de interrupción RST6.

Técnicas de gestión de Entrada y Salida 469 Fig.8. .30. El SDA 85 ejecutando el programa de reloj digital.

Esto se logra examinando la entrada SID por medio de la instrucción RIM.8.5 y SID del 8085A. Tabla.5. la subrutina de servicio espera que el pulso de solicitud conmute a nivel bajo antes de habilitar las interrupciones y retornar desde la rutina de servicio a esta entrada.8.5 es sensible a nivel. Se usan 4 posiciones consecutivas de memoria como contadores: RED SEG MIN HOR 1/60 segundos minutos horas . La salida del circuito se aplica a las entradas RST 6. El número del indicador donde se presentará el carácter lo indica el valor en el registro B.31.5. Para escribir el programa de reloj para el MPR-85 PLUS se usan las rutinas de usuario mostradas en la tabla 8. 10 12 Debido a que la entrada RST 6. C=(00) L en campo de datos. C=(11) HL en campo de direcciones con punto decimal Espera la pulsación de una tecla y retorna en el A la posición de la tecla. L0 L1 L2 L3 L4 L5 9 El contenido del registro par HL o L se presenta en pantalla.Técnicas de gestión de Entrada y Salida 470 Fig. C=(10) L en campo de datos con punto decimal C=(01) HL en campo de direcciones.Rutinas de monitor del MPR-85 PLUS. Rutina Descripción Presenta en pantalla el caracter cuyo código de 7segmentos esté cargado en el registro C.

Rutina ESCRB_CAD .-------------------------------------------. Para simplificar el código se escribe una rutina escrb_cad.-------------------------------------------escrb_cad: push b push d push psw mov a. El vector de RST7. aquí se inserta un salto a la rutina de servicio medir.0 mvi d. en el campo de datos.b cmp d jnz escr pop psw pop d pop b ret camp_dat: escr: Del manual de usuario del MPR-85 se extrajeron los códigos de los caracteres a presentar.6 mov c. El programa se carga en la RAM de usuario a partir de la dirección 6002H.5 (003CH) provee un salto a la dirección de memoria RAM: 4006H. la cual está reservada por el programa monitor El vector de RST6..5 (0034H) contiene un salto a la RAM: 4004H.4 mvi d.5 se incrementa el primer contador (RED) y este se usa para dividir la frecuencia de la red por 60. la cual presenta en pantalla la cadena de caracteres apuntada por el registro par HL: si B = (00).Técnicas de gestión de Entrada y Salida 471 Cada vez que se ejecuta la subrutina de la interrupción RST6. en el campo de direcciones y si B = (01). de modo que cuando RED llegue 60 se incremente en 1 el contador de segundos (SEG).m mvi a. desde donde se transfiere el control del programa a salto a la rutina de servicio pon_hm. La interrupciones generan un salto al área de memoria 4000H-40FFH.9 rst 7 inx h inr b mov a. estos son: A 77H n 54H H 76H O 3FH I 13H r 50H M 37H U 3EH . iniciándose la cuenta.4 jmp escr mvi b. El listado de la rutina se muestra a continuación: .b ani 1 jnz camp_dat mvi b.

seg y min lxi h.************************************************************************* .Técnicas de gestión de Entrada y Salida 472 El programa del reloj digital es el siguiente: .************************************************************************* . Programa reloj digital para MPR-85 PLUS . Letra I M equ 37h . Vectores de interrupción . Se desenmascaran las interrupciones sim ei .5 .m . A registro L contador de segundos mvi c.0 . min cpi 60h . Letra n 0 equ 3fH .************************************************************************* . Letra A H equ 76h .5 para ajustar hor/min . Letra O (cero) r equ 50h . seg.************************************************************************* org 4004 h jmp medir .************************************************************************* .red .a . Se repite el mismo lazo para red. A rutina de servicio RST7. Cuenta en decimal mov m.1 . cargar en minutos en L y horas en H mvi c.8 . Letra H I equ 13h . Incrementar contador daa . Rutina de servicio RST6. Apuntar a contador red seguir: mov a. Se presentan segundos en campo de datos mvi a.************************************************************************* . Letra M n equ 54h . Programa principal . Se habilitan las interrupciones phm: lhld seg . Salvar registros push d push b push psw mvi b. Presentar en campo de direcciones mvi a.0ah rst 7 lhld min . Actualizar: red. Letra r U equ 3eh .6500h mvi a. Tecla (↓) ¿A equ 77h .0ah rst 7 jmp inicio . Cargar en A: red/seg/min inr a . Presentar hh:mm:ss .3 .************************************************************************* org 6002h inicio: lxi sp.************************************************************************* .************************************************************************* medir: push h . salto a rutina de servicio para medir tiempo org 4006 h jmp pon_hm .************************************************************************* flecha equ . Letra U . Comparar con 60 .

seguir con:seg/min mov a.0 . No es cero.Técnicas de gestión de Entrada y Salida 473 jc sal . Si llego a 60. Contador de segundos min: db 0 .0eh .msj_h . comparar con 60 jnc may60 . Cuenta en decimal mov m. Recuperar registros pop b pop d pop h ei . Actualizar hora cpi 24h . incrementar hora daa . Apuntar contador siguiente dcr b .*************************************************************************** . Habilitar interrupciones ret . Si es 60. Contador min al acumulador may60: call hm .a .0 .0 . Contador de minutos hor: db 0 . Contador de horas temp: ds 1 . actualizar minutos xra a . habilitar interrupciones jm sal pop psw .5 sea cero ana a . Imprimir mensaje HorA lda hor . Si menor presentar hh:mm:ss mvi m. Imprimir mensaje MinU lda min . modificar hora sta hor .5 . Es mayor. Es mayor. Esperar que RST6. Acumulador a cero . Es menor. Es menor.m . Se enmascaran las interrupciones sim lxi h. Modificar minutos cpi 60h . Retornar . Apuntar a mensaje HorA mvi b.************************************************************************* pon_hm: push psw . Comparar hora con 24 jnc may24 .msj_m .************************************************************************* . Almacén temporal . Se usará campo de direcciones call escrb_cad . Comparar con 24 jc sal . al A contador de horas inr a . Si menor presentar hh:mm:ss mvi m. Contador 1/60 seg: db 0 . cargar 0 en: red/seg/min inx h . Los contadores se inician en cero red: db 0 . Rutina de servicio RST7. Se usará campo de direcciones call escrb_cad . Contador hor al acumulador may24: call hm . Es cero.0 . Apuntar a mensaje MinU mvi b. Modificar hora cpi 24h . cargar cero en hora sal: rim . modificar minutos sta min . Salvar registros push b push d push h mvi a. actualizar hora lxi h. Decrementar contador de lazo jnz seguir .

************************************************************************** . Es flecha. Mensajes .?A msj_m: db ?M. Es mayor que 9. Esperar tecla rst 7 cpi 0ah . comparar con flecha jz es_flecha .0ah . Comparar con diez jc men_diez . Salvar registros push b push d otro: sta temp .12 . el uso . Cargar en A hor/min anterior add a . lo cual hace que los programas de las aplicaciones sean difíciles de depurar. Puede ser complicado establecer cuando una determinada interrupción debe estar habilitada. leer teclado men_diez: mov b. Habilitar interrupciones ret hm: push h . Es un dígito decimal cpi flecha . en campo de rst 7 .n.0 .a .o. La desventaja principal de las interrupciones es que al ser un evento de naturaleza asincrónica no se puede precisar el momento cuando ocurren. Nueva hor/min al acumulador pop d .Técnicas de gestión de Entrada y Salida 474 sta red .i. datos esper: mvi a. Preservar ultimo dígito decimal lda temp .r.************************************************************************** msj_h: db ?H. listo jmp esper . ni dígito decimal. Se gasta menos tiempo en examinar bits de estados y puede eliminar la necesidad de rutinas de retardo. Si la velocidad de transferencia es muy alta. Recuperar registros pop b pop h ret . Las rutinas de servicio de interrupción deben tener código extra para asegurar la preservación de los registros y banderas de estado con independencia del momento que ocurra la interrupción. No es flecha. Contadores red y seg a cero sta seg pop h .u . Recuperar registros pop d pop b pop psw ei . El procesador responde en forma rápida a las solicitudes.************************************************************************* En esta sección se han mostrados las ventajas de la técnica de interrupciones para gestión de entrada y salida. Retornar con nueva hor/min en el A . Siguiente valor es_flecha: lda temp . Suprimir dígito de más peso add a add a add a ora b . Salvar hor/min mvi c. Insertar nuevo dígito decimal jmp otro . Se presentar hor/min mvi a.

8. • Genera una señal de interrupción aplicada a la entrada INTR y cuando la salida INTA del µP se activa.8. El controlador de interrupciones 8259A. cuando un periférico necesita servicio. el sistema incluía al menos dos 8259A en cascada para controlar la única entrada de interrupción INTR del procesador. La otra entrada de interrupción NMI es similar a TRAP. en algunos casos puede requerirse circuitos adicionales para el control de las interrupciones. A partir del Pentium se incorporó dentro del chip un controlador local de interrupciones APIC (Advanced Programmable Interrupt Controller) compatible con el 8259A.2. aplicando su salida INT a la entrada INTR del µP. Las cuatro funciones más relevantes del controlador son: • Recibe solicitudes de interrupción de 8 fuentes. .32 muestra el diagrama funcional y la distribución de terminales del 8259A.32. Hasta los PC diseñados con microprocesadores 80486. • Pone la máscara a interrupciones por solicitud del programa. Fig. • Asigna las prioridades y controla la cola de solicitudes simultáneas. el cual se encarga de administrar hasta ocho líneas de solicitudes de interrupción e informar al procesador. coloca sobre el bus de datos una instrucción CALL dirección. con la dirección programada por el usuario. puede usarse un circuito LSI controlador de interrupciones 8259A. Es posible conectar varios 8259A en cascada para aumentar el número de fuentes de interrupción hasta 64. La figura 8.Técnicas de gestión de Entrada y Salida 475 de interrupciones puede ser ineficiente o imposible de realizar.2 El controlador de interrupciones 8259A En aplicaciones complejas que requieran el uso de un número de entradas de interrupciones superior a las del procesador. Finalmente.

información de estados y los vectores de interrupción. Usualmente se conecta a la salida A0 del 8085A. WR y RD conforman un código que permite al µP escribir comandos y leer información de estado de los registros del controlador. Cuando se usa el modo sin SP de identificación de maestro ( SP =1) o de esclavo ( SP =0). Debe conectarse a la entrada de interrupción del CPU. • Al recibir el pulso INTA . puede ser usado como salida buffers es una entrada SP/ EN EN para habilitar los buffers. un cero en esta entrada autoriza al 8259A para aceptar comandos desde el RD D0-D7 CAS0-CAS2 Cuando CS está activo. En el modo de disparo por nivel sólo se requiere mantener un nivel alto en la línea IR. el bit de más alta prioridad del registro ISR (In Service Register) es puesto. El 8259A se conecta fácilmente a un sistema 8085A como ilustra la figura 8. Es el bus de datos bidireccional por medio del cual se transfieren comandos. Son salidas para el dispositivo maestro y entradas para los esclavos. el primero de los cuales causa que el controlador coloque en el bus de datos el byte menos significativo de la . el 8259A carga en el bus de datos el código de una instrucción CALL dirección. Interconexión con el sistema 8085A. CS . Cuando se usa en sistemas grandes que requieren el uso de buffers en el bus de datos.33. Simultáneamente el bit correspondiente del IRR es llevado a cero. En el modo de disparo por flanco.Técnicas de gestión de Entrada y Salida 476 DEFINICIÓN FUNCIONAL DE LOS TERMINALES DEL 8259A VCC GND +5V Tierra Un nivel bajo en este terminal permite la comunicación entre el µP y el 8259A. Terminal con doble función. se conmuta la entrada de cero a uno y se mantiene en uno hasta cuando se reconozca la solicitud. También. Los pasos de la secuencia de interrupción son los siguientes: • Uno o varias de las líneas IR0-7 conmutan a nivel alto. Se activa a nivel alto cuando se realiza una solicitud válida de interrupción. El controlador se conecta al puerto 40H y la entrada SP/ EN se lleva a nivel alto para indicar que el dispositivo es un maestro. • La instrucción CALL libera dos pulsos INTA adicionales. • El CPU reconoce la solicitud y activa la salida INTA . CS WR CS está activo. Habilita al 8259ª para cargar en el bus de datos el vector de interrupción por medio de una secuencia de pulsos En conjunto con las entradas INTA suministrados por el µP. • Si es procedente el 8259A genera una señal activa en alto en la salida INT para interrumpir al µP. Son líneas de solicitudes de interrupción. Cuando µP. INT IR0-IR7 INTA A0 Salida usada para interrumpir al µP. un cero en esta entrada habilita al 8259A para colocar información de estado en el bus de datos del sistema. Líneas de cascada que permiten controlar una estructura multinivel de 8259s. Este registro almacena todos los niveles de interrupción que han solicitado servicio. El ISR almacena todos los niveles de interrupción que están siendo atendidos. activando el bit correspondiente en el registro de solicitud de interrupción IRR (Interrupt Request Register). Entrada de reconocimiento de interrupción.

En caso contrario. el bit del ISR permanecerá en uno hasta cuando un comando EOI sea ejecutado al final de la secuencia de interrupción. Si el controlador funciona en el modo de fin automático de interrupción (AEOI). como se expone a continuación: • Primer pulso INTA : El código de operación CDH de la instrucción CALL dirección es cargado sobre el bus de datos. Primer byte del vector de interrupción. Fig.Técnicas de gestión de Entrada y Salida 477 dirección preprogramada de la rutina de servicio de interrupción.33.34.8. AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 1 1 0 0 1 1 0 1 Fig. el bit ISR es cargado con cero al final del tercer pulso INTA .8. Interconexión de un controlador de interrupciones 8259A con el µP 8085A. . El contenido de AD0-7 será el siguiente. Direcciones de las rutinas de servicio El 8259A suministra la dirección de la rutina de servicio sincronizados por los pulsos INTA generados por el µP. • Con esto se completa la carga de los tres bytes de la instrucción CALL dirección. El segundo INTA permite la carga de los ocho bits de orden alto de la dirección de la RSI.

Segundo byte del vector de interrupción El número de bytes de espaciamiento entre los vectores de interrupción puede ser seleccionado por programa entre 4 u 8.8. Con nueve chips se arma una estructura de 64 . AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 A15 A14 A13 A12 A11 A10 A9 A8 Fig.36 Tercer byte del vector de interrupción. Si el intervalo seleccionado es de 4. El diagrama de tiempos de la secuencia de INTA se muestra en la figura 8. Cuando el intervalo es 8.8. La figura 8. Varios controladores 8259A pueden conectarse en cascada para aumentar el número de fuentes de interrupción. Los ocho niveles de interrupción generarán CALLs a 8 posiciones de memoria igualmente espaciadas. A6-A7 son programados por el usuario mientras que A0-A5 son implantados por el 8259A. De acuerdo con el intervalo seleccionado.35. Fig. • Tercer pulso INTA : El byte de orden alto de la dirección de la RSI se carga en el bus de datos. los bits de dirección A5-A7 son programados por el usuario mientras que A0-A4 son insertados por el controlador.37. Este byte es programado previamente por el usuario en la secuencia de inicio.Técnicas de gestión de Entrada y Salida 478 • Segundo pulso INTA : Durante este evento se coloca en el bus de datos los ocho bits de menos peso de la rutina de servicio.40 muestra los bits a programar del byte bajo de la dirección de la RSI.

el cual se encarga de cargar en el bus de datos el vector de interrupción correspondiente. la menor. el 8259A debe ser programado antes de ser utilizado. Fig. 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 específicas del maestro.Técnicas de gestión de Entrada y Salida 479 fuentes de interrupción.37 La señal INTA sincroniza la carga sobre el bus de datos de la instrucción CALL dir Programación del 8259A Al contrario de otros dispositivos LSI de E/S. las cuales consisten de una secuencia de 2 a 4 bytes que se cargan en el dispositivo bajo la sincronización de WR . El control es tomado entonces por el esclavo.8. durante el primer pulso el maestro debe colocar el código de operación la instrucción CALL en el bus de datos y depositar en las líneas C0-C2 la identificación del esclavo que realizó la solicitud de interrupción. Esto se logra usando las palabras de órdenes de inicio ICWs (Initialization Command Words). Una vez inicializado por las ICWS. en operación en un modo denominado completamente jerarquizado en el cual se asigna la mayor prioridad a la entrada IR0 y menor prioridad a IR7. el cual se encarga de iniciar la secuencia de interrupción. el 8259A entra. Si los 8259s están correctamente programados. Un nuevo modo de operación puede asignarse al controlador en funcionamiento por medio de las palabras de órdenes de operación OCWs (Operacional Command Words). Estos modos son: 1. Modo completamente jerarquizado: A IR0 se la asigna la mayor prioridad y a IR7. . De este modo cualquier petición de interrupción proveniente desde un esclavo es primero notificada al maestro. Este esquema de prioridades alcanza a los chips conectados en cascada. por defecto.

Palabras de órdenes de inicio En la figura 8. como ilustra la figura 8. la cual arranca la secuencia de inicio. Modo básico de máscara: Cualquiera de las ocho entradas IR pueden ser enmascaradas.39 se presentan los formatos de las cuatro palabras de órdenes de inicio. 3. Modo de consulta: En este modo la línea de salida INT no se utiliza. . Palabras ICW1 e ICW2 Cuando una orden es dada al controlador con A0 igual cero y D4 en uno. Las dos primeras ICW1 – ICW2 son obligatorias mientras que las otras son opcionales. 4. 5.38 Formato de ICW1 e ICW2. a la interrupción en ejecución se le asigna la menor prioridad una vez culminada la ejecución de su RSI. Fig. Modo con prioridad especificada rotante: La prioridad puede ser asignada una vez ejecutada la RSI.8. se interpreta como ICW1. En lugar un puerto de estado que puede ser consultado proporciona a una indicación de cual interrupción ha ocurrido. Modo con prioridad igual rotante: Todos los dispositivos tienen la misma prioridad.38. Modo especial de máscara: Permite que una interrupción de prioridad más baja interrumpa una interrupción de una prioridad más alta 6.Técnicas de gestión de Entrada y Salida 480 2.

Técnicas de gestión de Entrada y Salida 481 Fig.8. .39 Formatos de palabra de los comandos de inicialización.

Si un esclavo se conecta a la entrada IR5. Un valor de 1 selecciona un intervalo de cuatro posiciones de memoria y un valor 0 de ocho localizaciones. los bits ID0-2 identifican al esclavo. Si el dispositivo es un maestro. La función de los bits son las siguientes: . Intervalo de 4. entonces el bit S5 debe ser puesto a 1. los bits S0-7 permiten indicar cuales entradas IR del maestro tiene salidas INT de esclavos conectadas a éstas. El bit IC4 de ICW1 se pone a 0 cuando no es necesario usar ICW4. Palabra ICW4 Procede si el bit IC4 de ICW1 fue programado como 1. en caso contrario debe ir a 1. existe un solo 8259A y no será necesario programar la palabra de inicio ICW3. SNGL es 0). Un solo chip Sin ICW4. Palabra ICW3 Es aceptada cuando existe más de un controlador en la estructura de interrupción. El byte alto de la dirección de salto A8-15 es programado por el usuario por medio de ICW2. la cual define el modo de cascada cuando SNLG es 0. Después de programar esta secuencia. el 8259A puede ser usado en una estructura de un controlador operando en el modo completamente jerarquizado. porque el terminal SP / EN es llevado a uno o en el modo con acoplador cuando M/S = 1 en ICW4. la cual se aplica con A0 igual a 1. Ejemplo: ICW1 = 16H = ICW2 = 10H = 00010110 00010000 Vectores de interrupción a partir de 1000H (IR0). LTIM en 1 deshabilita la lógica de detección de flanco y las entradas IR serán disparadas por nivel. Si el dispositivo es un esclavo.35.Técnicas de gestión de Entrada y Salida 482 El bit ADI selecciona el espaciamiento entre las instrucciones CALL generadas por cada solicitud de interrupción. porque el terminal SP / EN es llevado a 0 en el modo con acoplador cuando M/S = 0 en ICW4. Esta palabra permite seleccionar varios modos de operación. lo cual significa que fue programado en el modo cascada (ICW1. ID2 = 1. La función de los bits de ICW3 varía si el controlador a programar es el maestro o un esclavo. ID1 = 0. ID0 = 1 para establecer que este esclavo está conectado a la entrada IR5 del maestro. Los bits A5-7 fijan el valor del byte bajo del vector de interrupción según indica la tabla de la figura 8. Disparo por flanco. Para el ejemplo anterior. Si SNGL está en 1.

Así. Cuando está en 1 selecciona el modo de fin automático de interrupción.Técnicas de gestión de Entrada y Salida 483 µPM: AEOI: Es puesto a 0 para uso en sistemas 80/85. el estado de este bit no es considerado. Se usa en conjunto con el modo con acoplador. En el caso que no se use ICW4 también SP / EN define operación como maestro o esclavo. SFNM: Permite tener una verdadera estructura completamente jerarquizada entre las entradas IR de los esclavos cuando se opera en cascada. La figura 8. . el 8259A opera como maestro y como esclavo cuando M/S es 0. 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. si es 0 este modo no es seleccionado. Si Mi es 1. En cualquier momento este modo puede ser cambiado por medio de tres OCWs. ignorándose toda solicitud de igual o mayor prioridad. En 1 selecciona el modo MCS-86-88. De modo que la petición 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. Los bits Mi de OCW1 se usan para controlar la máscara de las entradas IR. Si este bit es 1 se selecciona un modo especial completamente jerarquizado. Estos son comandos aplicados con palabras OWCs para notificar al 8259A la culminación de la rutina de servicio de interrupción. esta será procesada. BUF es puesto a 0 no se selecciona el modo con acoplador y SP / EN establece si el dispositivo opera como maestro o esclavo. En 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 es puesto a 0. Si por el contrario. Si no se programa el modo con acoplador. está no será reconocida por el maestro. si un esclavo recibe una solicitud de mayor prioridad que la atendida. la entrada IR correspondiente es deshabilitada. un comando EOI (End Of Interrupt) debe ejecutarse al final de la RSI. La necesidad de este modo especial se debe a que si un esclavo recibe una interrupción de mayor prioridad que aquella que está siendo atendida (generada a través del mismo esclavo).40 muestra los formatos de las palabras OCWs disponibles. M/S: BUF: Si este bit es puesto a 1 se programa el modo con acoplador y el terminal SP / EN se usa para habilitar los acopladores bidireccionales. Si Mi es cero el canal IRi es habilitada. Esto se debe a que el bit ISR de la interrupción servida está en 1. Palabras de órdenes de operación Luego que el 8259A es iniciado por la secuencia de ICWs. Palabra OCW1 Se usa para activar/desactivar los bits de máscaras del registro de máscara de interrupción IMR. Sólo el maestro deberá ser programado en este modo. Cuando M/S es 1. Este modo se utiliza en sistemas grandes donde se requiere acopladores bidireccionales para el bus de datos. estará listo para operación en el modo completamente jerarquizado.

.Técnicas de gestión de Entrada y Salida 484 Fig.40 Formatos de palabra de los comandos de operación.8.

Si EOI es 0. Se usa para toda orden de final de interrupción (excepto el modo AEOI). Palabra OCW2 Permitir definir por medio de los bits R. no se ejecutará una orden de fin de interrupción.41 Formato de OCW1. La función de cada bit de OWC3 se indica a continuación: Fig. Especifica un nivel de interrupción para una operación determinada. AEOI) se seleccionan usando una combinación de los bits de OCW2.. SL: R: Palabra OCW3 Es usada para determinar el estado del proceso de interrupción y para seleccionar el modo especial de enmascaramiento. el nivel de interrupción (0-7) para la operación seleccionada por R. una forma de rotación de prioridad será ejecutada dependiendo del estado de los bits SL y EOI. Cuando SL es 0. una forma del comando de fin de interrupción será ejecutado dependiendo del estado de R y SL. Si R está en 1. La definición de los bits de OCW2 son las siguientes: L0-L2: EOI: Especifican. Controla las operaciones de rotación del 8259A. los bits L0-2 son deshabilitados.Técnicas de gestión de Entrada y Salida 485 Fig. Cuando es 1. Si R es cero no se ejecuta la rotación. rotación automática y rotación específica. Fig. SL y EOI las operaciones de fin e interrupción.8.42 Formato de OCW2. Comandos asociados y las modalidades de estas operaciones (exceptuando ICW4. cuando el bit SL está en 1. . SL y EOI.8.8. los bits L0-2 son habilitados y la operación seleccionada por los bits EOI y R será ejecutada sobre el nivel de interrupción indicado.43 Formato de OCW3. Cuando está en 1.

Como IR4 tiene mayor prioridad que IR5.Técnicas de gestión de Entrada y Salida 486 RIS: Se usa para especificar el registro comando a leer entre el ISR (cuando RIS está en 1) y el IRR (cuando RIS es 0). en el cual se habilita al siguiente pulso de RD (por medio de una instrucción IN puerto) para leer el valor BCD de la solicitud de mayor prioridad y poner a 1 el bit ISR correspondiente. debido a que ninguna de las dos rutinas de servicio se ha completado. Mientras el bit del ISR esté habilitado. solicitudes de servicio de igual o menor prioridad no serán atendidas. Una petición de mayor prioridad generará una interrupción y la ejecución de la rutina de servicio asociada si se ha ejecutado una instrucción EI en la RSI que estaba siendo procesada antes de ocurrir la interrupción de mayor prioridad. Si las interrupciones están habilitadas se ejecutará la rutina de servicio RSI5. la solicitud de mayor prioridad es determinada desde el IRR y su rutina de servicio es ejecutada. el bit ISR5 es activado. La ins- . Cuando una interrupción es reconocida. el bit correspondiente del registro ISR es activado para señalar la rutina en servicio. Para operar en el modo de consulta una palabra OCW3 deberá ser escrita previo a cada lectura Se usa para habilitar el modo especial de máscara. la cual será reconocida después de la ejecución de EI en la rutina RSI5. Al reconocerse la petición en IR4 se activara además ISR4. El estado del bit RIS se considera si el bit RR es 1. El servicio al dispositivo es realizado por programa por medio de un comando de consulta. Considere que en el modo totalmente jerarquizado ocurre una interrupción en la entrada IR5 durante la ejecución del programa principal. Este bit permanecerá activado hasta cuando un comando EOI de fin de interrupción sea ejecutado. Cuando la solicitud en IR5 es reconocida. En el modo de consulta el CPU deshabilita su entrada de interrupción. Cuando es puesto a 1 indica que el registro comando indicado por el bit RIS se va a leer. Si SMM está en 1. El estado de SMM sólo se considera si el bit ESMM está en 1. generará una interrupción en la línea INTR. Un comando EOI al final de RSI4 deberá desactivar el bit ISR4 para notificar al controlador que la rutina servida ha culminado. no se leerá el registro comando. Las prioridades de las ocho entradas IR son asignadas desde la más alta a IR0 hasta la más baja a IR7. Modo completamente jerarquizado Este es el modo de operación en el cual entra por defecto el 8259A después de la secuencia de inicio programada usando las ICWs. Para completar la presentación del modo de programación se describen algunos modos asociados con las OWCs. Si es 0. Un nivel 1 en este bit ejecuta un comando de consulta. Durante la ejecución de RSI5 se produce una solicitud en la entrada IR4 y se mantiene hasta ser reconocida. si está en 0 no lo selecciona. Además. RR: P: SMM: ESMM: Habilita (cuando está en 1) o deshabilita (cuando es 0) al bit EMM. selecciona el modo especial de máscara.

Técnicas de gestión de Entrada y Salida 487 trucción final RET en RSI4 transfiere el control del programa a la rutina RSI5. Modo EOI automático. 2. Es decir. Existen tres tipos de comandos EOI: 1. cuya instrucción RET retornará el programa al programa principal. El comando EOI no específico sólo debe ser usado cuando el último nivel reconocido y servido sea el de mayor prioridad. Por ejemplo. este comando indica el bit del registro ISR que debe ser desactivado. si la rutina RSI en ejecución cambia las prioridades de los niveles de interrupción y existen otras RSI atendidas. Ejemplo: OCW2 = 20H = 0 0 1 0 0 0 0 0 Comando EOI especifico: Contrario al anterior. Esto se realiza con un seguimiento de cuales niveles de interrupción están en proceso y su prioridad relativa. el cual será desactivado por el comando EOI al final de RSI5. el 8259A debe ser notificado para que actualice el registro ISR. Esta forma de operación indica que en el modo totalmente jerárquico. 3. este comando notifica cuando la RSI de un nivel determinado ha culminado. De modo que si se opera en el modo totalmente jerárquico el comando EOI no específico puede ser utilizado. el más reciente nivel reconocido y atendido siempre es el de mayor prioridad. un EOI no específico puede desactivar el bit ISR incorrecto. Esta orden se usa en situaciones cuando el controlador no puede determinar el bit ISR que debe ser borrado. El controlador deberá determinar el nivel de la interrupción y desactivará el bit ISR correspondiente. 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 interrupción. En este momento el único bit del registro ISR que permanece activado es el ISR4. Ejemplo: OCW2 = 3xH = 0 0 1 1 0 L2 L1 L0 . Fin de interrupción Al completarse una RSI. Comando EOI especifico. Comando EOI no especifico. Cuando el 8259A recibe este comando desactiva el bit ISR de mayor prioridad para indicar la finalización de la rutina de mayor prioridad entre las que están siendo atendidas.

El comando poner prioridad se programa usando OCW2 por medio de los bits R SL EOI sobre el nivel indicado por L2 L1 L0. se operará en el modo AEOI. Si en este momento ocurre una interrupción. en el peor caso. con la diferencia que la rotación de prioridad se realiza de manera automática pasado el tercer pulso de INTA (modo 80/85) de una secuencia de interrupción. está será atendida independientemente de su prioridad. Esto se logra asignándole la menor prioridad al último periférico atendido. Rotación automática-Prioridad igual: Este modo es útil en aplicaciones donde los periféricos atendidos tienen la igual prioridad. entonces IRi+1 será la de mayor prioridad. Rotación específica (Prioridad específica) El programa puede modificar las prioridades asignando la más baja. Rotar en modo EOI automático: Es similar al anterior.Técnicas de gestión de Entrada y Salida 488 Modo EOI automático: Cuando AEOI e 1 en ICW4. estas son: Rotar en comando EOI no específico y Rotar en modo EOI automático. . y al nivel IR se le asigna la menor prioridad. como lo hace un comando EOI no especifico. Si están en servicio las rutinas RSI5 (prioridad 5) y RS3 (prioridad 3) y en RS3 se ejecuta un comando rotar en EOI no especifico entonces el bit ISR3 es desactivado y a IR3 se le asigna la prioridad más baja quedando ISR4 como el nivel de mayor prioridad. no se le dará servicio de nuevo hasta cuando. Las prioridades de los otros IR son rotadas para ajustarse al modo completamente jerarquizado con base en la prioridad más baja que fue asignada. Considere que el bit ISR de la rutina en servicio es desactivado inmediatamente después de su reconocimiento de modo que no que da indicación en el ISR de cual RSI está en ejecución. Después que un dispositivo es atendido. hayan sido asistidos. Las restantes se asignarán automáticamente: si IRi es la de menor prioridad. Rotar en comando EOI no específico: Cuando este modo es programado el bit ISR de más prioridad es desactivado. Este comando sólo debe usarse cuando no se requiere una estructura multinivel jerarquizada. Existen dos formas de rotación automático de acuerdo con su combinación con el comando EOI. al resto de igual prioridad. En su lugar el controlador ejecuta un comando EOI no específico en el flanco de subida del tercer pulso de la señal INTA (modo 80/85). Se puede entrar en este modo fijando en la palabra OCW2 los bits R SL EOI = 1 0 0 y salir del modo con R SL EOI = 01 0 0. La programación de este modo elimina la necesidad de que el programa notifique la culminación de la rutina servida.

---------------------------------------------------------------------------------------------------------------- . .---------------------------------------------------------------------------------------------------------------. puerto del 8259A con A0=0 p8259_A0_1 equ 41H .7 Escribir el código de inicio y la tabla de saltos (inicio en 1000H) de una estructura con un controlador 8259A para ocho niveles de interrupción.---------------------------------------------------------------------------------------------------------------inic_8259: mvi a. disparo por flanco.A5=0.---------------------------------------------------------------------------------------------------------------. . Escribir ICW1 mvi a. . Programa principal . pila en RWM call inic_8259 .A6.---------------------------------------------------------------------------------------------------------------.33. palabra de orden de inicio . puerto del 8259A con A0=1 icw1 equ 16h . .7 . programar secuencia de inicio del 8259. icw1 out p8259_A0_0 . El sistema se interconecta como muestra la figura 8. continúa programa principal . icw2 out p8259_A0_1 . un solo chip y sin ICW4 icw2 equ 10h . . Dirección IR0=1000H ocw2 equ 20h .---------------------------------------------------------------------------------------------------------------lxi sp.---------------------------------------------------------------------------------------------------------------p8259_A0_0 equ 40H . ICW1: A7. Si se desea modificar loa prioridad durante un comando EOI se puede usar el comando rotar en comando EOI específico: Ejemplo: OCW2 = 7xH = 0 1 1 1 0 L2 L1 L0 Ejemplo 8. Ejemplo 8. . intervalo de 4. Escribir ICW2 ret . Comando EOI no especifico . .Técnicas de gestión de Entrada y Salida 489 Ejemplo: OCW2 = 6xH = 0 1 1 0 0 L2 L1 L0 Esta horma es independiente del comando EOI también seleccionado por OCW2. ICW2 y OCW2. . ICW2: A15-A8=10H. Rutina de inicialización del 8259A . . modo totalmente jerarquizado ei . Deben usarse las palabras ICW1.tope_pila .

Técnicas de gestión de Entrada y Salida 490 Fig.8. .44 Cascada de 8259As.

---------------------------------------------------------------------------------------------------------------. Rutina RSI0 ..Tabla de vectores de interrupción . salto a RSI de IR0 El 8259A se programa para que el vector de interrupción de IR0 esté en la dirección 1000h y los vectores de interrupción estén espaciados 4 posiciones de memoria.---------------------------------------------------------------------------------------------------------------. ocupando 32 bytes de memoria. . Restaurar registros pop . Programar EOI no específico pop .---------------------------------------------------------------------------------------------------------------.Técnicas de gestión de Entrada y Salida 491 .ocw2 out p8259_A0_0 . La tabla de saltos se inicia en 1000H y contiene un salto para cada RSI. ret . rehabilitar interrupciones mvi a. .---------------------------------------------------------------------------------------------------------------. La estructura funciona por defecto en el modo completamente jerarquizado de modo que se utiliza un EOI no específico para indicar el fin de la .---------------------------------------------------------------------------------------------------------------RSI0: push . --------------------------------------------------------------------------------------------------------------org 1000h jmp RSI0 nop jmp RSI1 nop jmp RSI2 nop jmp RSI3 nop jmp RSI4 nop jmp RSI5 nop jmp RSI6 nop jmp RSI7 nop . .. . Retornar desde interrupción . Se escribe una rutina para cada RSI .. Preservar registros push .. ei . .

el cual transfiere los datos directamente entre el periférico y el subsistema de memoria. más bien el controlador sustrae ciclos de reloj al CPU hasta completar la . ejecuta toda la operación. La única consideración que se debe tener en estructura donde las IR del maestro no sólo reciben solicitudes de interrupción desde los esclavos sino que algunas IR aceptan peticiones directamente desde periféricos es que la entrada IR0 desde el maestro no debe usarse para solicitudes desde esclavos. el microprocesador cede el control de los buses al controlador. Si un esclavo es conectado a IR0. convierten a esta técnica en el modo más rápido de ejecutar operaciones de E/S.48 se deja al lector como ejercicio. Durante una operación de acceso directo a memoria. Las líneas de control de cascada CAS0-2 del maestro actúan como salidas y se conectan a los terminales correspondientes en los esclavos. Cada controlador debe recibir su propia secuencia de inicio. El hecho que el controlador de DMA ejecuta todas las tareas de la transferencia de datos sin intervención del procesador (el hardware sustituye al programa). Para que el controlador transmita bloques de datos deberá suministrar direcciones y señales de control. Esto debido a que cuando una entrada IR sin esclavo recibe una solicitud. 8. las líneas CAS0-2 no se activarán permaneciendo el direccionamiento por defecto para IR0 (esclavo IR0). Un maestro U1 y dos esclavos U2-3 están conectados en cascada. La programación de la rutina de inicio y la tabla de saltos para el arreglo de la figura 8. donde son entradas. denominado controlador de DMA. Las operaciones de DMA no se realizan de una sola vez. A los esclavos se les debe ser identificado con el código de la entrada IR del maestro al cual está conectada su salida INT. así como el inicio y final de la operación. pueden presentarse fallas. Al inicio se habilita el sistema de interrupciones y cada RSI debe habilitarlo de nuevo. Para la programación del modo en cascada se usa la palabra ICW3 en el maestro para indicar cuales de las líneas IR del maestro reciben solicitudes desde la salida INT de los esclavos. Por ejemplo. El terminal SP / EN del maestro se conecta a 5 voltios y los pines SP / EN de loa esclavos se llevan a tierra. En la figura 8.44 se presenta una estructura de interrupciones con 22 niveles.3 ACCESO DIRECTO A MEMORIA El DMA es una técnica de entrada y salida en la cual un dispositivo LSI de propósito específico. la dirección de memoria inicial y el número de palabras ha enviar. La salida INT de cada esclavo se aplica a una entrada IR del maestro. La salida INT del maestro va a la entrada de interrupción INTR del µP y cada 8259A recibe la señal INTA .Técnicas de gestión de Entrada y Salida 492 RSI. cuando se genere una interrupción sobre una línea sin esclavo. siendo el tiempo de acceso del circuito de memoria la única restricción para la velocidad a la cual se ejecuta la operación.

Técnicas de gestión de Entrada y Salida 493 transmisión. la CPU atenderá la solicitud poniendo en estado de alta impedancia las líneas A8-A15. e IO / M y sube a nivel alto la salida HLDA para indicar al controlador de DMA que reconoce la petición de DMA. RD . AD0-AD7. • Señalar el final de la operación El método DMA más sencillo consiste en usar los ciclos de reloj cuando el µP no realiza accesos a la memoria. Usualmente el controlador dispone de varios canales para atender más de un periférico. esto se logra aplicando un nivel alto en la entrada HOLD. Fig. Después de finalizar el ciclo de máquina en progreso. • Realizar el control de los buses del sistema de modo que no obstaculicen el funcionamiento del µP. Además este tipo de operaciones de DMA son ocasionales y el tamaño de la transferencia es variable.8. Pero esta modalidad puede requerir circuitos adicionales para detectar los estados internos durante los cuales la CPU no accede a la memoria. Esta técnica se conoce como robo de ciclos (Cycle stealing) y la CPU puede usar los buses del sistema sin notificar al µP. Las tareas del controlador durante una operación de DMA son: • Solicitar al procesador el inicio del DMA. • Indicar la ubicación y tamaño de los datos a transferir. WR . En un sistema 8085.45 Controlador de DMA 8237 de INTEL. Un modo más eficiente de realizar DMA es solicitar al µP que ceda al controlador el control de los buses. . El terminal HLDA se mantiene en alto durante toda la operación.

Técnicas de gestión de Entrada y Salida 494 DEFINICIÓN FUNCIONAL DE LOS TERMINALES DEL 8237 CLK CS RESET Reloj. Entrada de selección de chip. RESET las baja. Bus de datos. Salida parra acceder a la memoria durante la escritura o las transferencias memoriamemoria. Notifica a los dispositivos de E/S que ha sido atendida su solicitud. en el ciclo activo actúa como línea de salida para que el 8237 controle la lectura de datos de los periféricos. El 8237 queda en Ciclo Inactivo. El nivel de operación de esta línea es programable. Inicia los registros de comando.A3 A4-A7 HRQ DACK0-3 AEN ADSTB MEMR MEMW Un dispositivo DMA compatible con sistemas basados en el 8085A es el 8237. En el ciclo activo. Habilita el latch de 8 bits que guarda la parte alta de la dirección. los 8 bits más significativos de la dirección son cargados en el bus de datos con objeto de ser almacenados en un latch externo controlado por ADSTB. Durante los ciclos de DMA. Salidas de los 4 bits de mayor peso de la dirección durante el ciclo activo. DREQ0 tiene la mayor y DREQ3 la menor. En el ciclo inactivo es una entrada empleada por la CPU para escribir los registros del 8237. La polaridad de DREQ es programable. por lo que requiere una resistencia externa. el bus de datos recibe y envía los bytes a transferir. Línea de salida para solicitar. fin de cuenta) en algún canal. el registro de máscara se asigna para ignorar las solicitudes. durante una operación DMA. Entrada de solicitud de estados de espera Reconocimiento de solicitud de DMA. estado. Líneas bidireccionales triestado de direcciones. El canal resulta enmascarado salvo en el caso del modo de autoinicialización. En el modo de prioridad fija. salvo en el modo memoria-memoria del canal 0 (en ese caso. programables en tres modos. El 8237 permite que un ente exterior fuerce el final de un servicio bajando esta línea. Las líneas no usadas deben ser enmascaradas. End Of Process. Línea bidireccional que informa de la finalización del servicio DMA. Cuando llega una señal -EOP. I En el ciclo inactivo es una entrada empleada por la CPU para leer los registros de control. El propio 8237 genera un pulso en ella cuando se alcanza un TC (Terminal Count. el control de los buses al µP. son salidas y proveen los 4 bits menos significativos de la dirección. Sirve también para inhibir el acceso al bus por parte de otras fuentes. Línea que controla la carga de la parte alta de la dirección en el latch externo. el cual es un controlador de 4 canales. pone a cero la bandera last/first y el contador de registro de modo. Los periféricos solicitan el servicio de DMA en estas líneas y esperan a bajarlas hasta el correspondiente DACK. solicitud y los temporales. Salida USADA para acceder a la memoria durante la lectura o las transferencias memoria-memoria. con posibilidad . En las operaciones memoria-memoria. Líneas asincrónicas para solicitud de DMA. En el ciclo inactivo son entradas empleadas para direccionar los registros internos a leer o escribir. en el ciclo activo actúa como línea de salida para que el 8237 controle la escritura de datos en los periféricos. el 8237 finaliza el servicio aunque en el modo de autoinicialización los registros base volverán a ser escritos en los registros en curso del canal implicado. Esta patilla está conectada en el interior del chip a un transistor en colector abierto. la señal se produce al alcanzarse el TC del canal 1). READY HLDA DREQ0-3: DB0-7 IOR IOW EOP A0-.

. Para mayor información usar la hoja técnica del fabricante. El 8237 realiza también transferencias memoria-memoria. La interconexión con el µP.Técnicas de gestión de Entrada y Salida 495 de conexión de varios chips en cascada. los modos de funcionamiento y la programación del controlador DMA 8237 no se tratarán en este trabajo. incluyendo llenar un bloque de la memoria con un dato.

bien sea dentro del µP o en el conjunto de chips. conversión D/A y modulación por ancho de pulso. El uso de estos chips simplifica el circuito de interconexión y reduce el número de líneas del programa de control. para que un microprocesador pueda ser usado en aplicaciones de control es necesario interconectar a la CPU circuitos LSI externos para que realicen las distintas tareas bajo la dirección del µP. el desarrollo de la tecnología del µP introdujo desde hace 30 años un grupo de dispositivos programables para interconexión de E/S. Aunque cada fabricante de semiconductores (Intel. En contraposición. También en caso que los recursos de un microcontrolador no sean suficientes para una aplicación determinada. En este capítulo se prestará atención a los circuitos programables diseñados originalmente por INTEL para la serie MCS-80/85.Dispositivos de E/S Programables 496 Dispositivos de E/S Programables En este capítulo se presentarán aplicaciones prácticas que usan dispositivos programables para interconexión de E/S. El modo de operación de tales circuitos es programado al inicio del código y puede ser modificado en cualquier momento. . Motorola y Zilog entre otros) introdujo su propio grupo de chips programables durante la década de los setenta. control de tiempo. a los modernos sistemas Pentium. En el interior del encapsulado de los dispositivos microcontroladores modernos se integra un grupo de circuitos programables los cuales realizan las funciones mínimas necesarias para resolver una tarea típica de control de complejidad baja. Aunque estos dispositivos externos pueden ser simples acopladores de tres estados o registros paralelos. Estas funciones son: E/S digital. los cuales pueden realizar en forma eficiente cualquier tarea que involucre gestión de E/S. adoptados luego por los sistemas MCS-86/88 y que han sido incorporados. es necesario convertir el µctrl en un microprocesador y conectarle hardware externo.

1. No obstante algunos componentes como el USART 8251A y el PPI 8255A mantienen hoy en día toda su funcionalidad y son usados en aplicaciones con µPs como controladores de periféricos. el controlador de interrupciones PIC 8259A. El PPI 8255A. El 8255A ofrece 24 terminales de E/S las cuales pueden programarse en dos grupos (A y B) de 12 líneas.1 CIRCUITO PARA INTERCONEXIÓN DE PERIFÉRICOS 8255 EL PPI 8255A (Peripheral Interface Programmable) fue diseñado originalmente para µPs INTEL. En el caso del controlador de interrupciones. pero ha siso usado en aplicaciones realizadas con la mayoría de los microprocesadores existentes. En este capítulo se discutirá el uso de estos chips en ejemplos del mundo real. . las funciones del PIC8259A se incorporaron al µP Pentium como una unidad funcional interna. 8255 Fig. El avance en la tecnología de fabricación de circuitos integrados ha hecho obsoletos a muchos de estos chips (controladores de CRT y de discos). 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 USART 8251.Dispositivos de E/S Programables 497 El circuito de interconexión de E/S paralela PPI 8255A.1 muestra el diagrama de bloques y la distribución de terminales del 8255A. 9.9. 1 y 2). El dispositivo puede operar en tres modos diferentes (0. La figura 9.

1 Direcciones de los registros internos del PPI 82550 A7 x x x x A6 x x x x Dirección del puerto de E/S A5 A4 A3 A2 A1 x x x x 0 x x x x 0 x x x x 1 x x x x 1 A0 0 1 0 1 Registro seleccionado Puerto A de E/S Puerto B de E/S Puerto C de E/S Registro de comando El tipo de operación a realizar es determinado por la activación de una de las entradas de control: RD o WR . Estas líneas de entrada puede conectarse a los terminales de igual nombre del µP o a las salidas de control de lectura y escritura en puerto de E/S: IORD e IOWR . Puede usarse como dos puertos de 4 Al grupo A pertenecen el puerto A: PA0-PA7 y los cuatro bits más significativos del puerto C (PC4-PC7). buffer y un latch de entrada. En conjunto con las entradas CS WR RD D0-D7 RESET A0 –A1 CS . WR y RD controlan el acceso a uno de los tres puertos de E/S o al registro de control. según lo indicado por la tabla 9. Puerto A: Ocho bits de un latch de salida. se realiza por medio de las entradas de dirección A0 y A1. o usar uno de los puertos. Para que el 8085A pueda tener acceso a uno de los registros para programar el dispositivo. Esta entrada se activa a cero durante una operación de escritura del µP. Además de los puertos. Usualmente se conectan a las salidas A0-1 del 8085A. PA0-PA7 PB0-PB7 PC0-PC7 bits de un latch de salida. La selección del registro de comando o de un puerto de E/S particular. independientemente del estado de CS .1. se ofrece en la tabla 9. Puerto C : Ocho bits de un latch de salida . de acuerdo con el modo que se decodifica la dirección del dispositivo.21. 9. Cuando al sistema se le . donde se usa selección lineal para habilitar el 8255A. Puerto C: Ocho bits. el grupo B agrupa las ocho líneas del puerto B: PB0-PB7 y los cuatro bits de orden bajo del puerto C (PC0-PC3). La tabla de estados del funcionamiento básico del 8255. Las ocho líneas de datos D0-D7 van al bus de direcciones/datos AD0-AD7 y permanecerán en estado de alta impedancia cuando CS no esté activa.Dispositivos de E/S Programables 498 DEFINICIÓN FUNCIONAL DE LOS TERMINALES DEL 8255A VCC GND +5V Tierra Un nivel bajo en este terminal permite la comunicación entre el µP y el 8255A. y buffer de entrada. la entrada de habilitación CS debe ponerse a nivel bajo. Entrada activa en cero durante una operación de lectura del µP.2. buffer y un latch de entrada. el 8255A contiene un registro de comandos para la programación del dispositivo. Un nivel alto en esta entrada inicia el registro de control con todos los puertos en el modo de entrada. Tabla. 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. o en caso que RD y WR estén ambas en uno. El modo en el cual el PPI se interconecta con la CPU se muestra en la figura 5.

donde cada grupo es formado por un puerto de ocho bits y otro de cuatro líneas. Los cuatro puertos se organizan como dos grupos A y B. Si tal configuración no es la deseada para la aplicación. Grupo A: PA0-7 + PC4-7 Grupo B: PB0-7 + PC0-3 La función de las líneas de cada grupo la fija una palabra de control que se carga en el registro de comando (A0-1=112). el PPI debe ser reprogramado escribiendo un cierto patrón de bits en el registro de comando. Transferencia bidireccional. E/S con protocolo de enlace. 9. 9.Dispositivos de E/S Programables 499 aplica energía. Tabla. pudiendo dividirse el puerto C en dos registros de E/S de cuatro bits cada uno.1. Al grupo B lo forma el puerto B y los cuatro bits de orden bajo del puerto C.1. Estos son: 1.1. C de ocho bits. . Modo 0 2. para operación en tres modos diferentes.2 Operación del PPI 8255A. 9. Modo 2 E/S normal. el grupo A está compuesto por el puerto A y el nibble más alto del puerto C. Como ilustra la figura 9. la línea RESET OUT del µP sube a nivel alto y obliga al 8255A a iniciarse con todos los puertos programados como entrada.2 Modos de operación del 8255A El código de la aplicación puede programar los grupos A y B del 8255A para que funcione en uno de tres modos de operación. Modo 1 3. B.1 Puertos de entrada y salida El 8255A tiene tres puertos A.

Cuando el bit más significativo (D7) de la palabra de control es uno. Los grupos A y B pueden ser programados en forma independiente para usar el puerto de ocho bits para transferencias controladas por las cuatros líneas del puerto C del grupo correspondiente.Dispositivos de E/S Programables 500 Modo 0 Los terminales de los puertos A. con posibilidad de activar/desactivar cualquiera de las líneas individualmente.1. Activación/desactivación de bits del puerto C. Son posibles 16 configuraciones diferentes de E/S en este modo. El formato de esta palabra se muestra en la figura 9. el siguiente código realizará la programación de chip. La figura 9. Si la dirección del puerto de control es 0BH y la palabra de control es 91H.2 Se puede configurar al componente para operación en un modo o en una combinación de estos. Dalabra de control al acumulador . 9.3 Programación del 8255A La palabra escrita en el registro de control es decodificada por la lógica interna del dispositivo para establecer cual de dos funciones posibles será realizada. 2. Modo 1 La transferencia desde/hacia los puertos A y B es controlada por un protocolo de enlace usando las líneas del puerto C. ambas con retención de datos. Estas son: 1.10010001b out pctrl_8255 . Se programa el dispositivo mvi a. Tanto las entradas como las salidas son retenidas y se usan cinco líneas del puerto para controlar y examinar el estado de la transferencia a través del puerto A. En este caso los grupos A y B se configuran como entradas/salidas en el modo 0. pctrl_8255 equ 0bh . El puerto A y B puede ser entrada o salida. Dirección del registro de control . Modo 2 El puerto A puede programarse para transmisión o recepción de datos sobre las mismas líneas. Definición de modo de operación. El puerto C puede usarse como dos puertos de 4 bits. B y C pueden programarse como entradas o salidas con retención (sólo las salidas) de los datos.3 muestra un ejemplo de selección de modo. Los terminales del puerto C respectivo se usan como señales de control o de estado del puerto de ocho bits. esta se interpreta como un byte de definición de modo de operación.

3 Ejemplo de configuración en modo 0.2 Palabra de definición del modo de operación. Fig. 9.Dispositivos de E/S Programables 501 Fig. 9. .

Pulso se inicia en cero mvi a. . Bit 2 a cero al final del pulso. Bit 2 a uno. Esta función se denomina bit set/reset. al inicio. 9.00000100b out pctrl_8255 . los circuitos internos del PPI la entienden como una orden de activación/desactivación de uno de los bits del puerto C.---------------------------------------------------------------------------------------------.00000100b . Palabra de control al acumulador out pctrl_8255 .4 Formato de la palabra de control para activar/desactivar un bit del puerto C. . El formato de este comando se muestra en la figura 9.---------------------------------------------------------------------------------------------pctrl_8255 equ 0bh . . . . Palabra de control al acumulador . Suponga que se desea generar un pulso de nivel alto en el terminal 2 del puerto C. Palabra de control al acumulador . y permite poner a uno o a cero cualquiera de las líneas del puerto C. El siguiente programa realizará la tarea.00000101b out pctrl_8255 . Poner bit a nivel alto mvi a. Bit 2 a cero. Poner bit a nivel bajo mvi a. Dirección del registro de control. Fig.4.Dispositivos de E/S Programables 502 Cuando el bit D7 de la palabra de control es cero lógico.

Las funciones que debe realizar el programa de control de teclado son: • • • • • Detectar la pulsación de una tecla.1. (a) (b) Fig. Suprimir los rebotes de contactos.Dispositivos de E/S Programables 503 9. b) Símbolo eléctrico.1 Se debe escribir un programa para la lectura del teclado numérico de la figura 9. como indica la figura 9.6.4 Aplicaciones del 8255 A continuación se presentan un grupo de ejemplos prácticos que ilustran el uso del PPI 8255A en sus diferentes modos de operación. La presión de un pulsador conectará la fila donde se encuentra la tecla. 9. El periférico de entrada está formado por 16 pulsadores conectados en una matriz 4 x 4. . Para conectar el teclado. Tanto las filas como las columnas se fuerzan a +5 V por medio de resistores. a) Aspecto mecánico.5 Teclado numérico. Ejemplo 9. se usa el puerto C del 8255 funcionando en modo 0.5. Operación en el modo 0 La primera aplicación del modo 0 consiste en la interconexión de un teclado al sistema usando un 8255A y la rutina de lectura del teclado.5 se usa para introducir al µC información numérica en representación hexadecimal. con la columna correspondiente. Las filas del se conectan a los terminales PC0-3 y las columnas a las líneas PC4-7. Generar el código correspondiente. En forma opcional: proteger al sistema contra pulsaciones simultáneas de teclas distintas. Identificar la tecla. El teclado de la figura 9. Cuando se pulse una tecla. debe retornarse su valor en el registro acumulador.

9.Dispositivos de E/S Programables 504 Fig. .6 Un PPI 8255 funciona como puerto para el teclado.

El número (posición en la matriz) del pulsador viene dado por: N = N de la Fila × Número de Columnas + N de la Columna La tecla de valor 6 tendrá como número 1 x 4 + 2 = 6. 9.Dispositivos de E/S Programables 505 El programa esperará en un lazo hasta que ocurra la pulsación de una tecla.7 Identificación de la fila. 1 1. De modo que para este caso. A cada elemento de la matriz le corresponde un número para indicar su ubicación y un código que representa el valor de la tecla. Las teclas se numeran: 0 0. . El algoritmo para determinar el valor de una tecla consiste en identificar la fila y la columna de la tecla presionada. Se escribe el patrón de bits 0000 en el puerto PCalto y se procede a leer en el puerto PCbajo: 1101. el código de la tecla se corresponde con su número. El bit 1 estará en nivel bajo debido a que la tecla 6 fue pulsada. Si el teclado tiene teclas de función será necesario el uso de una tabla. Por ejemplo la tecla 6 (número 6) estará en la fila 1 columna 2. La activación de un pulsador conectará la fila donde éste se ubica con la columna correspondiente.…F F. Identificación de la fila: • PCbajo: Entrada • PCalto: Salida Fig. a la cual se entra con el número de la tecla para encontrar el valor correspondiente. En este caso el número corresponde con el valor.

El teclado del ejemplo 9.6 se decodifica en la dirección 0. Identificación de la columna: • PCbajo: Salida • PCalto: Entrada Fig. Si ocurre una pulsación válida. La posición de la tecla pulsada es cargada en el registro acumulador. Otras pueden permitir: el borrado de la pantalla. se procede a determinar el número del pulsador como se indicó. la ejecución de un programa. Una vez identificadas la fila y la columna puede calcularse el número del pulsador como se describe en la página previa. En la práctica. El bit 2 estará en cero debido a que la tecla 6 fue pulsada.1 solo permite introducir al sistema números del código hexadecimal. Por ejemplo una tecla puede validar un número previamente introducido. El código de la rutina Tecla se presenta a continuación y considera que el 8255 de la figura 9. 9. .9 se muestra el diagrama de flujo del programa tecla. es usual que las aplicaciones requieran teclados con pulsadores de función. el cual espera por la presión de una tecla y suprime el efecto del rebote del interruptor o una activación falsa por ruido.Dispositivos de E/S Programables 506 El valor en el acumulador permite identificar la fila a la cual pertenece el pulsador activado.8 Identificación de la columna. el desplazamiento en un menú de opciones. En la figura 9. Se escribe el patrón 0000 en el puerto PCbajo y se lee en el puerto PCalto: 1011. especificar la dirección de giro de un motor o calcular la raíz cuadrada del valor cargado previamente.

Dispositivos de E/S Programables 507 Fig. eliminar rebote e identificar pulsador.9 Rutina tecla para detectar activación. . 9.

Número de tecla en registro A . Poner mascara . Volver a desplazar . Nibble alto del acumulador a cero . Patrón de columnas en A leer: releer: listo: . Contador de filas a cero . Si CY=1. Detectar error por ruido . Detectar pulsación falsa .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. Numero de fila al acumulador . en C numero de fila . Contador de columnas a 3 . Tecla pulsada. Teclas liberadas.palb_ctrl2 out pctrl_8255 mvi a. Todas las columnas a cero . Si ruido. incrementar contador de filas . Patrón de filas en acumulador . Detectar tecla pulsada . esperar 20 ms . esperar 20 ms . PCH:salida . Identificar columna iden_c: mvi b. Identificar fila fila: iden_f: mov a.c ral ral ora b ret .PCL:entrada.--------------------------------------------------------------------------------------------------------------------------tecla: mvi a.c mvi c.3 ral jnc fila dcr b jmp iden_c . leer .Dispositivos de E/S Programables 508 . Si tecla pulsada. Desplazar a la derecha . . Si CY=0. leer puerto . Desplazar . Todas las filas en cero .--------------------------------------------------------------------------------------------------------------------------. en B numero de columna . PCL:salida.--------------------------------------------------------------------------------------------------------------------------palb_ctrl1 equ 91h palb_ctrl2 equ 8ah pc_8255 equ 2 pctrl_8255 equ 3 . Cargar patrón de filas en C . Leer filas . restar 1 a contador de colum. Tecla no pulsada. Sumar número de columna . Si CY=0. PCH:entrada . Rutina de lectura de teclado 4x4 .0 rar jnc listo inr c jmp iden_f mov a. Leer filas . Si CY=1. Desplazar a la izquierda . Numero de la fila x 4 .palb_ctrl1 out pctrl_8255 mvi a. Poner mascara . leer puerto .0f0h out pc_8255 in pc_8255 .a mvi a.

También deben usarse cuatro líneas del puerto A para las filas y cinco del puerto B para las columnas.a mov a.10 presenta un teclado de 20 teclas arregladas en una matriz de 4x5 con cuatro pulsadores de función. Debido a la distribución de los pulsadores en la matriz. Esto determina que una vez determinada la posición del elemento en la matriz.Dispositivos de E/S Programables 509 El ejemplo que sigue describe el modo de interconexión al sistema y el programa de control de un teclado con teclas cuyas funciones son especificadas por el diseñador. .cod_tecla add l mov l. el número que indica la posición no corresponde con el valor que debe retornar la tecla.2 La figura 9. . lo retorna en el registro acumulador. . . Sección de programa principal que llama a rutina tecla. 9. El siguiente código realiza la tarea solicitada en el ejemplo. Con el número del pulsador entra en una tabla de consulta y encuentra el código de la tecla activada y . Por ejemplo la tecla número 4 es F4 y la número 5 tiene el valor 4.m . debe usarse una tabla de búsqueda para encontrar el código correspondiente. . Ejemplo 9.tope_pila call tecla lxi h. .--------------------------------------------------------------------------------------------------------------------------lxi sp. Fig.--------------------------------------------------------------------------------------------------------------------------tope_pila equ 300h . Escriba una rutina que lea el teclado y cargue el código de la tecla en el registro acumulador.10 Matriz de 20 teclas con cuatro funciones.--------------------------------------------------------------------------------------------------------------------------.

tecla e db 0fh . tecla f4 . tecla 6 db 07h . tecla 9 db 0ah .--------------------------------------------------------------------------------------------------------------------------. tecla c db 0dh .--------------------------------------------------------------------------------------------------------------------------palb_ctrl1 equ 91h palb_ctrl2 equ 8ah pa_8255 equ 0 pb_8255 equ 1 pctrl_8255 equ 3 . tecla a db 0bh . tecla 3 db 10h . tecla f2 db 08h . Retorna número de tecla en el acumulador .a mvi a.--------------------------------------------------------------------------------------------------------------------------tecla: mvi a. Rutina de lectura de teclado 4x5. tecla 4 db 05h .Dispositivos de E/S Programables 510 . tecla f1 db 04h . tecla f3 db 0ch .--------------------------------------------------------------------------------------------------------------------------. tecla 7 db 11h . tecla b db 12h .--------------------------------------------------------------------------------------------------------------------------cod_tecla: db 00h . tecla 0 db 01h . 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. tecla f db 13h . palb_ctrl2 out pctrl_8255 xra a . tecla d db 0eh . tecla 8 db 09h . tecla 5 db 06h . tecla 1 db 02h . tecla 2 db 03h . Tabla de código de tecla .

Numero de la fila x 5 . Para minimizar el número de líneas de interconexión se usa la técnica de multiplexado de los datos a presentar.0 rar jnc fila inr b jmp iden_c mov a. Los segmentos de todos los LEDs se conectan en ocho líneas comunes y cada dígito se activa a una frecuencia fmux.Dispositivos de E/S Programables 511 iden_c: fila: iden_f: listo: out pa_8255 in pb_8255 mvi b. Los sistemas de bajo costo usan módulos LCD o indicadores de siete segmentos. Es usual que una aplicación basada en µPs requiera además de periféricos de entrada algún tipo de dispositivo para exhibición de información. mostrando en la pantalla el mensaje: Udo 2005.3 La figura 9.11 muestra un circuito visualizador de ocho dígitos con indicadores de siete segmentos tipo ánodo común. los visualizadores con diodos 7-segmentos son de uso difundido en el medio industrial sobre todo cuando la luz ambiental es deficiente. El ejemplo siguiente ilustra el uso de tales indicadores para exposición de información alfanumérica. Aún cuando las pantallas LCD de 2 a 4 íneas han disminuido en costo y no requieren refrescar continuamente los datos presentados. Se debe escribir una rutina para el control de exhibidor. Estos valores permiten al programador conocer cual función fue seleccionada en cualquier momento.0 rar jnc listo inr c jmp iden_f mov a. cada indicador es seleccionado durante un lapso determinado.c mvi c. 12H para F3 y 13H para F4. Al multiplexar en el tiempo.Sumar número de columna Observe que a las cuatro teclas de función se les asigna códigos arbitrarios y diferentes a los dígitos del sistema hexadecimal. éste aparenta estar continuamente activado. conectados a un PPI 82C55.c ral ral add c add b ret . Puede considerarse que la presentación con dispositivos tipo LEDs permanecerá durante muchos años como una opción válida para el despliegue de información en sistemas e instrumentos electrónicos de bajo costo. 11H para F2. Ejemplo 9. pero debido a la persistencia de la imagen en la retina humana. . Por ejemplo 10H para F1.

Circuito de presentación con ocho caracteres alfanuméricos.11.Dispositivos de E/S Programables 512 Fig. . 9.

La corriente que circula por el circuito de colector de los transistores Q2N4405 de manejo de dígito será igual a kIf con k igual al número de segmentos iluminados en el indicador correspondiente. se usa un transistor discreto Q2N222A para el punto decimal.11. La distancia de observación. Debido a que el chip solo tiene siete pares darlington.5 KHz. la frecuencia fmux será igual: f mux = f mux = 1 Tx × N 1000 = 250 Hz 0.5 × 8 El circuito debe estar sincronizado. Este proceso se repite para cada dígito. a una frecuencia Nfmux. la frecuencia de multiplexado debe estar comprendida entre 100 Hz y 1. Como se observa en la figura 9. el puerto A del 82C55 se usa para activar los segmentos. La selección de dígitos se logra activando con un nivel bajo en el terminal correspondiente del puerto B. Debido a que cada LED permanece apagado la mayor parte del tiempo. La corriente If es provista por los amplificadores del ULN2003 y por el transistor Q2N222A. por medio de una línea del puerto B. de acuerdo con las especificaciones del fabricante del indicador. una intensidad de If =10 mA por segmento garantizará un brillo aceptable.Dispositivos de E/S Programables 513 Para una presentación con parpadeo mínimo. Para compensar el efecto del multiplexado sobre el nivel de corriente directa. el ángulo de visión. la altura del carácter. Esto significa que debe cargarse en el puerto A del 82C55 (funcionando en modo 0) el complemento del código de 7 segmentos del caracter a presentar en un LED y simultáneamente debe aplicarse un nivel bajo. En nuestro caso se considera que. La corriente que circula en promedio durante un periodo de multiplexado es: If = T I pico N ×I pico = T N . La selección de la corriente que debe circular por cada segmento para garantizar una brillantez adecuada ante el observador. en la base del transistor que aplica energía al indicador correspondiente. Esto significa que si los N indicadores se activan en intervalos Tx de 500 µs. depende de distintos factores físicos y humanos. la iluminación ambiental y la razón de contraste entre el indicador y el color del fondo ambiental son algunos de los parámetros a considerar para fijar el valor adecuado de la corriente por segmento. la corriente promedio que circula por un segmento será mucho menor que 10 mA y en consecuencia la iluminación percibida por el observador será deficiente. uno de los transistores PNP Q2N4405. se calcula la resistencia Rp de modo el pico de corriente en el segmento produzca una intensidad promedio de 10 mA. Para proveer la corriente necesaria para los segmentos se usa un circuito amplificador ULN2003 el cual puede manejar con comodidad corrientes de salida de hasta 500 mA.

6 − 2. es de aproximadamente 600 mV.12 conduce por la aplicación de un nivel bajo en su base. se aplica un nivel alto a la entrada del ULN2003. Esta tensión proviene de una línea del puerto B. El valor del resistor de 510 Ω en la base de Q1 se calcula para que cuando todos los segmentos del indicador estén activados. El transistor Q2 del par darlington del ULN2003 está activado cerrando el camino de la corriente a través del segmento a. 9. es de 0.8 V. Fig.4 − 0. El VCESATQ1. Esto es: I pico = N × I f Para calcular el valor del resistor limitador de corriente Rp se usa el circuito de la figura 9. para una pantalla de ocho dígitos. Para iluminar un segmento. circule una ICQ1 = 8x80 mA= 640 mA.Dispositivos de E/S Programables 514 Esto indica que para obtener un nivel de iluminación equivalente a la que produciría una corriente de 10 mA en condiciones de corriente continua. El transistor Q1 de la figura 9.12 que muestra la trayectoria de la corriente por un segmento de un indicador.12 Circuito equivalente para el cálculo de Rp. Con estos valores se calcula Rp: 5V − VCEsatQ1 − VF − VCEsatQ 2 I pico (5 − 0. bajo estas condiciones. mientras que la tensión de saturación de Q2 a una corriente de 80 mA.8)V = 15 Ω 80 mA RP = = . el pico de corriente debe ser igual a 80 mA.

class=iospace .---------------------------------------------------------------------------------------------------------------i_stack equ 8fbh . Este programa presenta el mensaje Udo 2005 en . Activar dígito n mov a. Base de la pila .start=0.msj . 8255 en dirección 0 defseg stack.Dispositivos de E/S Programables 515 La resistencia en la base del transistor que maneja el punto decimal se calcula de modo que una tensión de 4. Palabra de control del 8255 out pctrl_8255 . Salvar patrón de selección de indicador pres: out pb_8255 . La presentación se inicia por el indicador del extremo derecho.8 V.plbr_ctrl . Repetir por siempre . . Definición de segmentos defseg puertos. Selección de dígitos pctrl_8255 ds 1 . Segmento de código en EPROM seg progr lxi sp. Rutina visual .num_dig . Salidas a segmentos pb_8255 ds 2 .m . Presentar mensaje jmp rep .t_stack . class=code. Se inicia el apuntador de pila mvi a.a .11 se muestra a continuación.---------------------------------------------------------------------------------------------------------------. Puertos del 8255 seg puertos pa_8255 ds 1 .---------------------------------------------------------------------------------------------------------------. una pantalla de indicadores de 7-segmentos. start=0 . Al registro acumulador primer caracter del mensaje xchg . start=i_stack . Este presenta el mensaje especificado con una frecuencia de multiplexado de 250 Hz. El programa de control para el circuito de la figura 9.0feh .---------------------------------------------------------------------------------------------------------------visual: mvi b. Primero se activa el dígito 0 mov c. seg stack ds 8 t_stack:equ $-1 . La pila reside en la RWM defseg progr. Se programan puertos A y B como salidas rep: lxi h. Registro B es el contador de dígitos mvi a.---------------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------------------. Los 8 bytes últimos de RWM soportan el stack.---------------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------------------. Salvar dirección del mensaje en registro par DE . Inicio de la pila num_dig equ 8 plbr_ctrl equ 80h . Registro par H apunta a primer caracter del mensaje call visual .6 V en la línea PA7 produzca una intensidad de 80 mA en el circuito de colector del Q2N2222 con una tensión colector-emisor de 0.---------------------------------------------------------------------------------------------------------------. Puerto de control . .

Recuperar dirección de caracter del mensaje call r500us . Sacar por puerto A xchg .---------------------------------------------------------------------------------------------------------------. Recuperar patrón de selección de dígito rlc . . Tabla de códigos de siete segmentos .m . Se activará el dígito siguiente mov c. Mensaje .cod_7seg . Si no cero.cero. HL apunta al inicio de la tabla de códigos 7-segmentos add l .Dispositivos de E/S Programables 516 lxi h.?d. Retornar si caracter final.a mov a.c . Contador de caracteres menos 1 jnz pres .espac.---------------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------------------cod_7Seg: cero equ $-cod_7Seg db 0f3h db 60h dos equ $-cod_7Seg db 0b5h db 0f4h cuatro equ $-cod_7Seg db 66h cinco equ $-cod_7Seg S equ $-cod_7Seg db 0d6h db 0d7h db 70h ocho equ $-cod_7Seg db 0f7h db 7eh ?A equ $-cod_7Seg db 77h ?B equ $-cod_7Seg db 0c7h ?C equ $-cod_7Seg db 93h ?d equ $-cod_7Seg db 0e5h ?E equ $-cod_7Seg db 97h F equ $-cod_7Seg db 17h g equ $-cod_7Seg db 0f6h ?H equ $-cod_7Seg db 67h ?L equ $-cod_7Seg .dos.a .---------------------------------------------------------------------------------------------------------------msj: db u.cero.cinco . Guardar patrón inr l . siguiente caracter ret . Sumar desplazamiento mov l.o. Esperar 500 µs mov a. Código de 7-seg al registro acumulador out pa_8255 . Apuntar siguiente caracter del mensaje dcr b .

4 En este ejemplo se mide y presenta el valor de una tensión continua positiva en el rango de 0 a +5 V. El proceso de conversión se realiza en un número de pasos igual al de bits (en este caso ocho) que tenga el CDA. Se construirá y programará un convertidor análogo digital por aproximaciones sucesivas (AS). Fig. El método de AS usa un conversor digital analógico y un comparador como ilustra la figura 9. Convertidor A/D por aproximaciones sucesivas. .Dispositivos de E/S Programables 517 db 85h equ $-cod_7Seg db 0e6h n equ $-cod_7Seg db 45h i equ $-cod_7Seg db 20h J equ $-cod_7Seg db 0e1h o equ $-cod_7Seg db 0e4h P equ $-cod_7Seg db 37h q equ $-cod_7Seg db 76h r equ $-cod_7Seg db 05h t equ $-cod_7Seg db 44h u equ $-cod_7Seg db 0Eh ¿ equ $-cod_7Seg db 0a3h _ equ $-cod_7Seg db 80H espac equ $-cod_7Seg db 00h end .13. 9.13.---------------------------------------------------------------------------------------------------------------?M Ejemplo 9.

como ilustra la figura 9. Fig.14. La primera sólo puede tomar valores 1 ó 0. conectando un DAC0808 al puerto de salida B (01H) de un 8255A y examinando la salida del comparador LM311 por el bit 7 del puerto de entrada C (02H).Dispositivos de E/S Programables 518 Algoritmo: Al inicio del proceso de conversión se aplica a las entradas del CDA un valor digital con el bit más significativo puesto a nivel alto y los bits restantes a cero y se lee la salida del comparador. Un nivel lógico 1/0 indica que la señal de entrada es mayor/menor que la generada por el CDA. En este caso se usa el µP como controlador. El principio de AS está basado en un método de ensayo y error que aproxima el valor de la señal de entrada a la mitad superior e inferior del rango de representación de cada etapa.6K VS = VREF 2 n × A base10 = 5 × A base10 256 . El valor lógico de la salida del comparador se asigna en la siguiente etapa al bit que se procesa. El PPI 8255A funcionará en modo 0 y no se muestra en el diagrama. EL convertidor D/A tiene una resolución de 8 bits y se configura para entregar una corriente de salida IOUT desde 0 hasta IFS cuando las entradas A8-1 van desde 00 hasta FFH.15 se presenta el diagrama de transiciones para un convertidor análogo digital por aproximaciones sucesivas de cuatro bits. El amplificador operacional LM741 a la salida del CDA es un conversor de corriente a voltaje y provee una tensión de salida igual a: VS = I OUT × 5. A continuación se repite el proceso con el siguiente bit y así sucesivamente hasta el menos significativo. Las señales Vo y Vr representan las salidas del circuito comparador y del conversor digital análogo respectivamente.14.9. En la figura 9. Circuito del convertidor A/D por aproximaciones sucesivas. Existen convertidores analógico digital del tipo descrito presentados como un chip en el cual el controlador se realiza por hardware y se integra al encapsulado. según la tensión de entrada sea mayor o menor que la generada por el CDA y la segunda es la tensión generada por este conversor.

Dispositivos de E/S Programables 519 Fig.15. 3 Realizar un programa que permita presentar el valor BCD de tres dígitos en el circuito de exposición visual de la figura 9. Diagrama de transiciones para un CAD por aproximaciones sucesivas. 9. . 2 Desarrollar una rutina que convierta el valor binario de Vi en tres dígitos BCD y los almacene en memoria.16. Los objetivos de este ejemplo son: 1 Escribir un programa en ensamblador para obtener el valor binario de la tensión analógica de entrada Vi usando el µP para resolver el algoritmo de aproximaciones sucesivas.

Llama a la rutina ADC. la cual realiza el algoritmo de consultas sucesivas y retorna el valor digital de la muestra.Dispositivos de E/S Programables 520 Fig. La frecuencia de multiplexado debe ser 333.16. El módulo de presentación está formado por un display que contiene tres indicadores de 7 segmentos cátodo común y es especialmente fabricado para uso con la técnica de multiplexado.33 Hz (1000/3). 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. Convierte el valor del voltaje de entrada desde binario a BCD y lo almacena en memoria. 9. Pantalla de tres dígitos con indicadores tipo cátodo común. Para la conversión a decimal se usa el hecho que dada la salida A del convertidor A/D. El circuito usa un decodificador CMOS 4511 para generar el código de 7 segmentos. el valor del voltaje de entrada es: 5 Vi = × A base10 256 En representación hexadecimal se tiene: 5 Vi = × A base16 100H . Solución: El programa de control para el voltímetro de corriente continua del ejemplo consta de 4 módulos.

num_dig extern adc. entonces el valor del voltaje es: Vi = 5 × 255 = 4.-------------------------------------------------------------------------------------------------------------- . Este nivel es comparado con el valor del voltaje desconocido de entrada.temp. En caso contrario. El valor FBH es el residuo después de la división por 256.-------------------------------------------------------------------------------------------------------------$title(Voltímetro DC) .visual . al ser multiplicado por 5 ó por 10 siempre producirá un resultado (supuesto de 12 bits) cuyo dígito más significativo es un número BCD.-------------------------------------------------------------------------------------------------------------i_stack equ 8500H . Modulo de programa principal . resultando 9CEH. Inicio de la pila i_rwm equ 8000H . La rutina de retardo forma parte del mismo módulo que VISUAL. el periodo de muestreo del voltaje de entrada se ajusta aproximadamente a 1 segundo.Dispositivos de E/S Programables 521 Si el resultado de la conversión es 25510 = FFH. Este proceso continúa tratándose todos los bits de izquierda a derecha. Con este algoritmo sencillo puede convertirse el dato entregado por el ADC a un voltaje en BCD. Repitiendo el proceso con el nuevo residuo resulta el valor 80CH y se obtienen las centesimas (8) de voltios. Esta técnica pone a 1 el bit más significativo del puerto conectado al convertidor D/A. En este caso el valor de 16 bits retornado por el programa POR5. Número de indicadores LEDs plbr_ctrl equ 89H .98 Volt 256 Un número de 8 bits. el bit más significativo es puesto a cero y se procede con el próximo. se desplaza un bit hacia la izquierda. Para disminuir el parpadeo del dígito menos significativo. La división entera de este valor por 256 entrega el dígito BCD (9) de las décimas de voltios y un residuo de C0H. También es llamada para ejecutar el producto por 10. el bit es puesto a 1 permanentemente y se prueba el bit menos significativo siguiente. en el mismo orden como se describieron: . De modo que bastará ejecutar el producto 5 x FFH = 4FBH para obtener el primer dígito BCD (4) del resultado.pc_8255. de modo que la salida del DAC tendrá la tensión de media escala.pb_8255. • Rutina VISUAL Es llamada por el programa principal para presentar el valor de la tensión almacenado en BCD en la memoria del sistema. PA y PB: Salidas PC: Entradas .por5. Una subrutina RET1MS genera el retardo de 1ms para fijar la frecuencia de multiplexado deseada. hasta el último. • Rutina POR5 Multiplica por 5 el contenido del registro L y retorna el resultado en el registro par HL. A continuación se presentan el contenido de cada módulo. Si el voltaje de prueba a la salida del CDA es demasiado bajo. Dirección de inicio de RWM para datos num_dig equ 3 .-------------------------------------------------------------------------------------------------------------public pa_8255. • Rutina ADC Realiza el algoritmo de aproximaciones sucesivas y retorna en el registro acumulador la representación digital del voltaje Vi de entrada. En realidad esta última operación no se realiza sino que el remanente FBH se multiplica por diez.

Salvar patrón de media escala. Resultado se multiplica x2 mov a.t_stack . Dígito menos significativo al A sta temp+2 .-------------------------------------------------------------------------------------------------------------. class=iospace defseg stack. Segmento de datos en RWM seg datos temp ds 3 . Base de la pila . start=6002H . Primera posición de RWM de . Dirección de almacenamiento de valor medido . 8255 en dirección 0 . salida del comparador p_ctrl ds 1 . Dígito más significativo al A sta temp . class=code. Resultado x2 mov a.plbr_ctrl . Buscar muestra siguiente end . class=data. seg stack ds 10H t_stack:equ $-1 .b .Dispositivos de E/S Programables 522 . Remanente se multiplica por 10 (x5) dad h .-------------------------------------------------------------------------------------------------------------.0.h . usuario en el MPR-85 PLUS . Palabra de control al A out p_ctrl .h .h . Dígito siguiente a memoria call por5 .-------------------------------------------------------------------------------------------------------------.-------------------------------------------------------------------------------------------------------------.pc_8255 defseg progr seg progr adc: lxi b. Dígito menos significativo a memoria call visual . Dígito siguiente al A sta temp+1 .Rutina ADC . . Los 16 bytes últimos de RWM soportan el stack. start=i_rwm defseg progr. Puerto de control del 8255 . Definición de segmentos defseg puertos. Línea PC0 = P2.start=0. Salida a convertidor D/A pc_8255 ds 1 . Se carga el apuntador de pila mvi a.-------------------------------------------------------------------------------------------------------------public adc extern pb_8255. La pila reside en la RWM . Adquirir muestra de la entrada mov l. start=i_stack defseg datos. registro C a cero mov a. Patrón de media escala en B.-------------------------------------------------------------------------------------------------------------. Salida de datos BCD y selección de indicadores pb_8255 ds 1 . Se inicia conversión de binario a BCD mov a. Puertos del 8255 seg puertos pa_8255 ds 1 . Dígito más significativo a memoria call por5 .8000h .-------------------------------------------------------------------------------------------------------------. Se programa el 8255 prpal: call adc . Datos a partir de 8000H . Presentar resultado de la medida jmp prpal . Segmento de código cargado en RWM de usuario del MPR-85 PLUS seg progr lxi sp.a . Valor digital de muestra al registro L call por5 . Nuevo residuo x10 (x5) dad h .

Agregar al acumulador (D4-D6) patrón . Tp-->0 . de selección de indicador . Presentar durante 1/(3 x fmux) .b ora c mov c.-------------------------------------------------------------------------------------------------------------public por5 defseg progr seg progr por5: mvi h. Multiplicando x2 dad d .a jnc prob mov a. Salvar contador de 16 bits . Valor de prueba al convertidor D/A . Formar el total hasta ahora . . Salida de código BCD y selección de display . Si acarreo es 1. Se lee salida del comparador. es el último bit .c rar . Patrón de selección de LED 1 . Desplazar hacia próximo bit menos significativo .327 push d mvi b.-------------------------------------------------------------------------------------------------------------public visual extern temp. Multiplicando x2 dad h . Patrón de selección actual al A .num_dig lxi h. Multiplicando a registro par DE mov e. Rutina VISUAL . Rotar hacia la derecha . Sumar valor anterior de prueba . Sumar multiplicando.l dad h . Valor de tensión al registro A precib: .-------------------------------------------------------------------------------------------------------------.temp mvi c. Se pone máscara .-------------------------------------------------------------------------------------------------------------.0 .-------------------------------------------------------------------------------------------------------------. Guardar nuevo patrón . mulx2 + mul x2 + mul = mulx5 ret end . Apuntar digito 1 en memoria .40h mov a.h .Dispositivos de E/S Programables 523 prob: ora c out pb_8255 in pc_8255 ani 1 jz alto mov a. Saltar si valor de prueba es mayor que el .c ret end .a alto: mov a.m ora c out pa_8255 call f_mux mov a. Salvar total . Número de dígitos al registro B . Recuperar valor de prueba actual . Recuperar último valor de prueba . Rutina POR5 . desconocido .num_dig defseg progr seg progr visual: rep: lxi d. Byte alto de nultiplicando a cero mov d.pa_8255. Dígito n en BCD (D0-D3) al acumulador .-------------------------------------------------------------------------------------------------------------.b rar mov b.

17.80H fmux: dcx d mov a.-------------------------------------------------------------------------------------------------------------- Fig. Los circuitos de la figuras 9. Rutina de retardo .-------------------------------------------------------------------------------------------------------------f_mux: lxi d.Dispositivos de E/S Programables 524 mov c. recuperar contador dcx d .d ora e jnz fmux ret end . El programa ejecutable resultante fue descargado por el . Apuntar dirección del caracter siguiente dcr b . retornar en búsqueda de muestra siguiente . 9. No es el último dígito. Ventana principal de MICRO-IDE con el proyecto del ejemplo 9. Último dígito. Los módulos del proyecto fueron compilados y enlazados usando la herramienta Micro-IDE.14 y 916 fueron construidos e interconectados al µC MPR85-PLUS. Contador menos uno mov a.a . Es 0. continuar pop d . Contador de dígitos -1 jnz precib .4. No es cero.d .-------------------------------------------------------------------------------------------------------------. seguir presentando muestra ret . Patrón de selección de dígito siguiente a C inx h . Probar si alcanzó cero ora e jnz rep .

presentado en pantalla el valor del voltaje fijado en el potenciómetro.18 muestra un diagrama de tiempos de una transferencia CENTRONICS y en la figura 9. El ejemplo siguiente ilustra el uso del PPI para la interconexión de un sistema 8085A a una impresora paralela.19 se indican las funciones de las líneas del bus y su ubicación en el conector CANON DB-25. los cuales vienen integrados en chips multifunción.5 Realizar la interconexión de una impresora CENTRONICS a un µP8085A usando un 8255A funcionando en el modo cero. no se aprecia error alguno. El diseño fue probado y funcionó en forma correcta. El modo 0 del PPI 8255A también puede usarse para el control de periféricos que requieran un protocolo de enlace sin uso de interrupciones. Fig. puedan realizarse funciones más complejas como la conversión analógica digital. además de la conversión proveen salidas en BCD e incluso señales y temporización para la pantalla multiplexada. Este ejemplo fue un ejercicio didáctico donde se mostró como pueden usarse circuitos integrados CDA de bajo costo para que.Dispositivos de E/S Programables 525 puerto serie del PC en la memoria del MPR-85 PLUS. EL puerto paralelo puede realizarse con un 8255A bajo el control del programa de transferencia. . Por ejemplo. En la práctica los voltímetros se construyen con CAD de doble pendiente. Su uso es tan extendido que la mayoría de las impresoras hasta hace dos años usaban este protocolo. Ejemplo 9. 9. Contrastando la lectura con la de un voltímetro comercial. La figura 9. con apoyo de código. CENTRONICS es un estándar usado por muchos años para enviar datos desde un µC hacia una impresora paralela.18. Escribir una rutina para enviar al periférico el carácter cuyo código ASCII se encuentra en el registro B. Transferencia de un carácter a una impresora usando el protocolo de enlace CENTRONICS. Las impresoras modernas ofrecen además un puerto USB.

1 Entrada/Salida con respecto al microcomputador . Activa en bajo por la ocurrencia de un error. • Impresora en OFF LINE. Es generada cuando la línea BUSY va a nivel bajo. Está en nivel alto cuando ésta no puede recibir datos. 9. • 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 alimentación de línea (LF). Detiene el equipo y borra el buffer de datos. ON LINE: • Al energizar la impresora. Cuando está en línea. • Estado de sobrecarga. Es puesta a cero por el µC durante 1 µs para notificar que se envió un dato. Entrada que cuando está en nivel alto notifica que no hay papel en la bandeja de la impresora. 14 15 AFD : AUTOFEED XT S E ERROR 16 17 18-25 RESET SL TIERRA S S – OFF LINE: • Impresora sin papel. Señal activa en bajo generada por la impresora cuando está lista para recibir un nuevo carácter. Entrada OCUPADA que indica la disponibilidad de la impresora.5 µs antes y después del pulso STB . Deben ser estables al menos 0.19. Fig.Dispositivos de E/S Programables 526 Terminal 1 2-9 Señal E/S 1 S S STB : DATASTROBE DATA 0 – DATA 7 Función Salida normalmente en nivel alto. Si está en nivel alto la transferencia de datos no es aceptada. 10 ACK : ACKNOWLEDGE BUSY PO: SLCT: PAPER OUT SELECT E 11 12 13 E E E • • Cuando se aplica un RESET . Al presionar el interruptor ON LINE. Indica el estado de la impresora. Salidas de los ocho bits de datos. • Cubierta exterior abierta En cero inicializa la impresora. Cuando es cero se selecciona la impresora. la señal conmuta a uno lógico. Conector CANON DB25 hembra y descripción de las señales del estándar CENTRONICS. Condiciones de error son: • Ausencia de papel en la bandeja.

Dispositivos de E/S Programables 527 Nota: La tarjeta de impresora debe tener resistores conectados a +5V en todas las entradas. Fig. 9.20 Puerto de impresora .

y por el terminal PC4 se genera la señal de sincronización STB .20 Los bits del carácter a imprimir se entregan por el PA del 8255A. modo 0. PCL:entrada. Palabra de control. porque la impresora está ocupada. La salida BUSY de la impresora se aplica a la línea PC0 del puerto de entrada C. el código ASCII del carácter a imprimir es presentado por el µP en las líneas de datos DATA0-7 y entonces se examina la entrada BUSY para verificar. Si la línea BUSY está en alto. La impresora lee el dato durante el flanco positivo de STB . Puerto A pc_8255 equ 82h . Se utilizan buffers de colector abierto en todas las salidas del 8255A. el cual debe ser configurado para operación en el modo 0. Imprime bloque a partir de dirección 2000h .18. Registro de control plbr_ctrl equ 83h . Debido a que ACK es disparada en el flanco posterior de BUSY. . Caracter de escape. el procesador coloca en nivel bajo la salida STB durante al menos 1 µs.---------------------------------------------------------------------------------------------------------------- .---------------------------------------------------------------------------------------------------------------inic_blq equ 2000h . ACK puede ser ignorada y el programa sólo tiene que examinar si la impresora está libre. Los resistores de colector se encuentran en el circuito de entrada a la impresora. Activar STB stb_uno equ 9 . PCH:salida stb_cero equ 8 . puede ser tratada como una notificación de lista para recibir un nuevo dato. NULL 0 . En este caso. Esto significa que durante la transferencia de datos a la impresora. Carácter de escape . que la impresora esté disponible. PA:salida . al igual que BUSY. Desactivar STB escap equ 0 .Dispositivos de E/S Programables 528 El protocolo CENTRONICS trasmite en paralelo los datos a imprimir y además presenta varias señales para que el µP controle la transferencia. El puerto de conexión a la impresora se muestra en la figura 9.---------------------------------------------------------------------------------------------------------------. colocar el dato y generar la señal STB . si está en cero lógico. Puerto C pctrl_8255 equ 83h . para sincronizar la transferencia del dato. Como ilustra el diagrama de tiempos de la figura 9. Dirección de primer caracter a imprimir pa_8255 equ 80h . Rutina SAL_IMPR de salida a impresora . activa a cero durante 5 µs la señal de reconocimiento ACK . . y un grupo de líneas de salida desde la impresora indican en cualquier momento el estado del periférico. el µP permanecerá en espera hasta cuando BUSY retorne a cero. Cuando la impresora ha aceptado un carácter.

la cual se mantiene en bajo por un tiempo superior a 1 µs. la transferencia desde/hacia .m . ¿Es el byte de escape? jz cont .. Poner máscara jnz sal_impr .5 finalizan los ejemplos de operación del 8255A en modo cero.stb_uno out pctrl_8255 . El modo 1 de operación está especialmente diseñado para la realización de transmisiones y recepciones de información. Continuar impresión cont: . El carácter NULL señala el final del bloque a imprimir.b . BUSY es cero out pa_8255 .plbr_ctrl out pctrl_8255 . Con el ejercicio 9.---------------------------------------------------------------------------------------------------------------- El código anterior imprime un bloque de memoria de una página máximo y continúa ejecutando el código de usuario. . Si está en nivel alto. esperar mov a. Leer estado de BUSY ani 1 . No. usando señales de dialogo generadas por el microprocesador y por el equipo de E/S. La rutina de salida a impresora examina el estado de la línea BUSY. fue una muestra de una operación de entrada y salida con un periférico que requiere un protocolo de enlace para realizar las transferencias. Apuntar primer caracter a imprimir prox: mov b. Enviar caracter a impresora mvi a.Dispositivos de E/S Programables 529 mvi a. .b . Si. STB se pone a uno lxi h..stb_cero out pctrl_8255 . En este caso. inic_blq . Este modo puede usarse para el control de motores por paso o servomotores o para el control de de la potencia suministrada a cargas de corriente alterna.. Poner señal STB en cero mvi a. Se programa 8255A mvi a. Apuntar siguiente caracter jmp prox . En este momento. conmuta a cero lógico la línea STB . Caracter de memoria a registro B mov a. continuar programa principal call sal_impr . Examinar caracter cpi escap . se mantiene la prueba hasta cuando BUSY retorne a cero. Operación en el modo 1 El último ejemplo del modo 0. Desactivar línea STB ret . Imprimir byte en registro B inr l .stb_uno out pctrl_8255 . Lo presentado es una muestra pequeña que en modo alguno agota las posibilidades del uso práctico del modo cero en combinación con el programa para control de periféricos. sal_impr: in pc_8255 . Si BUSY es alto. instante cuando se retorna al programa principal.

. realizado usando los terminales del puerto C.21muestra los formatos de la palabra de entrada para la configuración de los grupos A y B para operación en el modo 1. Modo 1: Entrada La figura 9.Dispositivos de E/S Programables 530 los puertos A y B es controlado por un protocolo de enlace. Las dos líneas restantes. PC6-7. • Cada grupo con un puerto de 8 bits de datos y puerto de 4 bits de control/datos. 9. como se indica a continuación: • Grupos A y B.21 Formatos de palabra de control para operación en el modo 1 de entrada. • Los puertos de 8 bits (PA y PB) pueden ser entradas o salidas. respectivamente. Tres bits de PCH o de PCL se usan para controlar la transferencia de datos desde el periférico hacia el sistema a través de los puertos PA y PB. Fig. del puerto C quedan disponibles para ser usadas como líneas de E/S. si ambos grupos operan en modo 1. • El puerto de 4 bits (PCH y PCL) se usa para control/estado del puerto de datos de 8 bits. ambas con retención. Observe que tanto el puerto A como el B se programan como entradas. Como se expuso en páginas anteriores ambos grupos A y B pueden programarse para funcionamiento en este modo.

Es una señal IBF Input Buffer Full de reconocimiento activada como respuesta a la entrada cuando el µP lee el puerto. El µP puede detectar cuando el periférico transmite un dato. Fig.22. STB Strobe Input Cuando se activa esta entrada el dato entregado por el periférico es cargado en el registro latch del puerto de entrada. el periférico coloca el dato en los terminales del puerto de entrada y pone en nivel bajo al línea STB para cargar el byte en el registro de entrada.22. una señal de reconocimiento IBF se pone en alto para indicar la presencia de un dato en el latch de entrada. un periférico interrumpa al CPU. Entrada en modo 1. si las interrupciones están habilitadas. mediante un programa que examine el estado de IBF o al ser interrumpido por INTR. STB y es llevada a cero INTR Interrupt Request Salida puesta a 1 cuando STB retorna a nivel alto. Este modo de operación permite que con solo cargar un dato en el puerto. Al inicio de la transferencia. Salida que notifica la presencia de un dato en el registro de entrada. Las interrupciones deben estar habilitadas por: INTE A: bit set/reset de PC4 INTE B: bit set/reset de PC2 PC7 y PC6 Líneas disponibles para E/S.Dispositivos de E/S Programables 531 Aunque en este caso se considera que ambos grupos se configuran en el modo 1 de entrada. en la práctica pueden programarse una combinación de modo 1. Al retornar STB a uno lógico. A continuación. se dispara la señal INTR de solicitud de interrupción. 9. en cuyo caso uno de los grupos se programa como entrada y el otro como salida. Regresa a 0 cuando el puerto es leído por el µP. La función de las señales de control y el diagrama de tiempo de una transferencia de entrada en el modo 1 se muestra en la figura 9. El modo 1 de operación permite que el dato desde el periférico se almacene en el puerto A o en el puerto B hasta cuando el µP pueda leerlo. IBF es uno y el bit INTE está en 1. El flanco de .

6 Escriba una rutina para leer un dato desde un dispositivo de entrada. cada vez que una tecla es activada. Cada vez que el periférico coloca un byte en las líneas del puerto de entrada. Como ilustra el diagrama simplificado de la figura 9.--------------------------------------------.Leer puerto C ani 2 . Modo 1:Entrada out pctrl_8255 exam_IBF: in pc_8255 . Palabra de control. detectan la prsión de la tecla. PB:entrada . Modo 1.Si IBF=0. Si el periférico es un teclado.Puerto B. Esta situación es apropiada para el uso del modo 1. Ejemplo 9.--------------------------------------------.-----------------------------------------------------------------. El siguiente programa carga el dato D0-D7 en el registro acumulador. 9.------------------------------------------------------------------ . este entregará al puerto B el código ASCII y una señal de habilitación a PC2 cada vez que una tecla es presionada.--------------------------------------------.Examinar IBF jz exam_IBF . la solicitud es realizada con sólo cargar el dato en el registro de entrada. le asignan el código correspondiente. Registro de control plbr_ctrl equ 10000110b . Los circuitos electrónicos asociados al teclado.--------------------------------------------. Observe que en el modo de interrupción. . registro vacío in pb_8255 .Si IBF=1. las salidas de datos se aplican al PB configurado como entrada y la señal de sincronización DATO LISTO se conecta al terminal PC2 o STB B . la identifican. Rutina de lectura de teclado . Fig. mientras que el flanco de caída de RD remueve la solicitud de interrupción. leer el latch de PB ret . suprimen el efecto de los rebotes de contactos y protegen contra la pulsación simultánea de varios pulsadores.-----------------------------------------------------------------pb_8255 equ 81h .23. genera un pulso negativo. Puerto B pc_8255 equ 82h . Puerto C pctrl_8255 equ 83h .86H .23 Entrada en modo 1.Dispositivos de E/S Programables 532 subida de RD desactiva la señal IBF.-----------------------------------------------------------------teclado: mvi a.

Observe que cada vez que el µProcesador escribe un dato en el puerto A o en el puerto B. Al igual que el el modo 1 de entrada. conmuta a nivel bajo para indicar existe un dato disponible en el registro de salida. pueden usarse interrupciones durante la transferencia. respectivamente. la salida OBF respectiva.25.24. controlan la salida de datos hacia el periférico.Dispositivos de E/S Programables 533 Modo 1: Salida El puerto A o el B se configuran como salidas y tres señales del puerto PCH o PCL. Esto ocurre durante el flanco de subida de WR . Fig. Cuando el periférico acepta el dato. la cual desactiva la línea OBF notificando que el dato fue recibido y que el registro está vacío. El terminal INTR es puesto a 1 . Formatos de palabra de control para operación en el modo 1 de salida. 9.24 se muestran las señales de control del puerto C para cada grupo y el formato de la palabra de control para los grupos A y B. Las funciones de las señales de control y el diagrama de tiempo de la transferencia de datos en el modo 1 de salida. En la figura 9. coloca en estado cero la señal de reconocimiento ACK . se muestran en la figura 9. La señal INTR puede usarse para interrumpir al µP cuando el periférico ha leído el dato enviado por la CPU.

PC4 y PC5 Fig.7 Usar el modo 1 de salida. son todas uno. El dispositivo externo pone a nivel bajo está entrada para indicar al µP que el dato en el puerto A o B ha sido recibido. Para la línea de sincronización de transmisión de datos STB del puerto CENTRONICS. Este modo de operación permite interrumpir al CPU cuando un periférico acepta un dato transferido por el µP. Es llevada a cero. programado en el modo 1.Dispositivos de E/S Programables 534 cuando la salida de reconocimiento ACK . 9. Las interrupciones deben estar habilitadas por: INTE A: bit set/reset de PC4 INTE B: bit set/reset de PC2 Líneas disponibles para E/S. Formatos de palabra de control y diagrama de tiempos de salida en modo 1 Ejemplo 9. Escribir la rutina de salida de datos a la impresora. la línea de indicación de latch lleno OBF y el bit INTE. Regresa a 0 cuando el el µP escribe un dato en el puerto. Salida en nivel bajo cuando el µP escribe un dato en el puerto A o B. La impresora recibe el código ASCII del carácter a imprimir por las 8 líneas del puerto A. OBF es uno y el bit INTE está en 1. ésta no puede ser . se usa el bit PC5. para la interconexión a la impresora se usa el grupo A. Es activada OBF Output Buffer Full por el flanco posterior de WR y desactivada por el flanco de bajada de la señal de reconocimiento ACK generada por el periférico. Como puede verse en la figura 9. por el flanco de caída de WR . para enviar un bloque de datos a una impresora paralela. ACK Acknowledge Input INTR Interrupt Request Salida activa cuando ACK conmuta a nivel alto.25. Aunque la señal OBF indica que existe un dato válido en el registro de salida.26.

El código de la rutina se muestra a continuación. Activar STB stb_uno equ 11 . STB se pone a uno lxi h. Puerto A pc_8255 equ 82h . Caracter de escape.26. Palabra de control. Se programa 8255A mvi a.---------------------------------------------------------------------------------------------------------------inic_blq equ 2000h . 9. inic_blq . Fig. Desactivar STB escap equ 0 . Esto ocurre cuando la impresora acepta el dato y borra el registro de salida.---------------------------------------------------------------------------------------------------------------. Carácter de escape . NULL 0 . PA:salida .plbr_ctrl out pctrl_8255 . porque se requiere un pulso para indicar a la impresora que hay un dato listo. Apuntar primer caracter a imprimir . Por tal razón se usa PC5. Rutina SAL_IMPR de salida a impresora . Registro de control plbr_ctrl equ 0A0h . Dirección de primer caracter a imprimir pa_8255 equ 80h .---------------------------------------------------------------------------------------------------------------mvi a. Una vez que la impresora acepta el dato genera la señal de reconocimiento ACK para indicar que está lista para recibir otro dato. Imprime bloque a partir de dirección 2000h . .Dispositivos de E/S Programables 535 usada como STB . Puerto C pctrl_8255 equ 83h .stb_uno out pctrl_8255 . Esta salida se conecta a la entrada ACK A o PC6 del 8255A y cuando se activa retorna a nivel alto a OBF . Con la impresora libre el µP carga el dato en el registro de salida PA y genera por PC5 el comando STB . modo 1. PCH:salida stb_cero equ 10 . Salida a impresora en modo 1 El programa examinará OBF para detectar si la impresora está disponible. .

---------------------------------------------------------------------------------------------------------------- Operación en el modo 2 Es el modo de transferencia bidireccional sobre los terminales del puerto A.Dispositivos de E/S Programables 536 prox: mov b.27. Desactivar línea STB ret . En la figura 9.. 9. Continuar impresión cont: . transferencias paralelas con el estándar para instrumentación de propósito general GPIB (IEEE-448) y para la comunicación entre computadores.27 se muestran las señales asociadas al modo 2 y la palabra de control para operación en ambas direcciones. sal_impr: in pc_8255 . . . Ejemplos del uso de este modo de operación es la interconexión con un controlador de discos flexibles. Imprimir byte en registro B inr l . Caracter de memoria a registro B mov a. Poner máscara jnz sal_impr .. No.stb_cero out pctrl_8255 . ¿Es el byte de escape? jz cont . Poner señal STB en cero mvi a.m .stb_uno out pctrl_8255 . Examinar caracter cpi escap . OBF es cero out pa_8255 . . continuar programa principal call sal_impr . Si. Palabra de control y señales asociadas con el modo 2 de operación.. Apuntar siguiente caracter jmp prox . esperar mov a. Enviar caracter a impresora mvi a.b . Si OBF es bajo. Leer estado de OBF ani 80h .b . Fig.

las salidas de PA permanecen en alta impedancia. 9.28. Si ACK está en alto. Fig. INTE 1: Bit set/reset PC6 INTR Interrupt Request INTE 2: Bit set/reset PC4 PC2. Cuando se activa esta entrada el dato entregado por el periférico es cargado en el registro latch del puerto AUn alto en esta salida indica que un dato ha sido cargado en el registro de entrada. . IBF Input Buffer Full Salida activa que en nivel alto puede usarse para interrumpir al µP durante transferencias tanto de entrada como de salida. PC1 y PC0 Líneas disponibles para E/S controladas por bit set/reset. Entrada que en cero lógico habilita los buffer de tres estados de salida del puerto A. Formatos de palabra de control y diagrama de tiempos para el modo 2 Debido a que la conexión de una unida de disquetes al sistema y la comunicación interprocesador son aplicaciones fuera del alcance de este trabajo. el siguiente ejemplo se limita a la presentación de rutinas de transmisión y recepción en el modo de operación 2.Dispositivos de E/S Programables 537 OBF Output Buffer Full ACK Acknowledge Input STB Strobe Input Salida en nivel bajo cuando el µP escribe un dato en el puerto A indicando que el latch de salida está lleno.

.Dispositivos de E/S Programables 538 Ejemplo 9.8 1. en los modos de operación 1 y 2.----------------------------------------------------------------------------------------------------------trasm: in pc_8255 . Recibe el dato por las líneas del puerto A y lo retorna en el acumulador .. La figura 9. Próximo dato al acumulador out pa_8255 . Si IBF es 0. Leer puerto C ani 20h .. Leer puert C ani 80h .----------------------------------------------------------------------------------------------------------. Puerto A pc_8255 equ 82h . registro de entrada vacío in pa_8255 . Rutina TRASM.b . leer dato ret .----------------------------------------------------------------------------------------------------------.----------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------- El lector debe haber notado que para detectar el estado de las señales de control. Registro de control . Si OBF es 1. Una rutina debe recibir por las líneas bidireccionales del puerto A el dato enviado por un dispositivo externo.plbr_ctrl out pctrl_8255 . Si OBF es 0. . Si IBF es 1. Examinar OBF jz trasm ..----------------------------------------------------------------------------------------------------------recib: in pc_8255 . Transmitir byte ret . . Programa principal mvi a.----------------------------------------------------------------------------------------------------------. basta con realizar una lectura convencional del puerto C. registro de salida lleno mov a. 2. Puerto C pctrl_8255 equ 83h . . Sin mayores comentarios se presenta el código de transferencia en el modo 2 de operación.29 muestra los formatos de la palabra de estado para los modos 1 y 2. Transmite el dato en el registro B por las líneas del puerto A . Ejemplo en modo 2 . . Examinar IBF jnz recib . Se programa 8255A . Rutina RECIB.----------------------------------------------------------------------------------------------------------pa_8255 equ 80h . Escribir un programa que transmita por las líneas bidireccionales del puerto A el dato cargado en el registro acumulador.

.2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER Es conocido por el lector. en incluso la compañía INTERSIL ofrece una versión (HS-81C55RH) con alta resistente a la radiación cósmica.Dispositivos de E/S Programables 539 Fig. 9. 9. diseñado para compatibilidad pin a pin con el µP 8085A. Es fabricado por varias empresas.9. Fig.29. que el circuito integrado 8155/56 es un dispositivo de funciones múltiples. destinada al diseño de instrumentos y controles que viajan al espacio.30. Formatos de las palabras de estado para los modos 1 y 2. El dispositivo multifunción 8155.

La dirección es programada escribiendo en el registro de comando. • 1 puerto programable de 6 bits • 1 temporizador/contador binario • Registro latch interno controlado por ALE para decodificar el programable de 14 bits.. RESET ALE PA0-PA7 PB0-PB7 PC0-PC7 CS e IO / M . Entrada al temporizador contador. 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. 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.Dispositivos de E/S Programables 540 Los recursos ofrecidos por el 8155/56 son: • 2Kbits de memoria RWM estática arregladas como 256x8 bytes. Para el 8156 esta entrada es activa en alto.9. Puerto A: seis líneas de E/S de propósito general o pueden usarse como líneas de control para transferencia del pA y B en los modos ALT3 y ALT4. Si el terminal IO/ M AD0-AD7 IO / M está en nivel bajo el contenido de la posición de RWM seleccionada será cargado en el bus de datos/direcciones. Selecciona la RWM si es cero y los puertos de E/S y el registro comando/estado si está en alto.31. En el flaco de caída de esta entrada se carga dentro del chip el estado de las líneas de dirección AD0AD/. Usualmente se conecta el reloj del µP aunque puede conectarse cualquier señal digital con frecuencia menor o igual a fclk Salida de onda cuadrada o pulso según el modo seleccionado para el temporizador. dependiendo de la entrada CS WR RD IO / M . En caso contrario el contenido de un puerto de E/S o del registro de estado será colocado en el bus multiplexado. . by- • Registro de comando/estado Fig. Puerto B: Ocho líneas de E/S de propósito general. TIMER IN TIMER OUT Puerto A: Ocho líneas de E/S de propósito general. DEFINICIÓN FUNCIONAL DE LOS TERMINALES DEL 8155 VCC GND +5V Tierra Un nivel bajo en este terminal permite la comunicación entre el µP y el 8155. Los modos de operación se programan escribiendo en el registro de comando. Esta entrada en cero con CS activado habilita los buffers de salida AD0-AD7. Los ocho bits bajos de las direcciones se cargan en el latch interno durante el flanco de bajada de la señal ALE. Secciones del 8155/56 te bajo de direcciones. 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. para E/S. La dirección es programada escribiendo en el registro de comando. • 2 puertos programables de 8 bits para E/S.

se realiza a través del bus multiplexado AD0-AD7. Como ilustra la figura 9. El circuito integrado no requiere lógica externa para conectarse al μP 8085. Estos son: dos puertos de E/S: PA y PB de 8 bits. La entrada ALE se aplica a un registro latch interno para demultiplexar el byte de orden bajo A0-A7 del bus de direcciones. la cual indica si el bus contiene datos o direcciones. El 8155/56 tiene tres puertos programables de E/S. bajo el control de las señales: ALE. Tabla. el dispositivo 8155 contiene una memoria RAM estática de 256 bytes y siete registros internos. el estado lógico de la señal IO / M distingue cuando la dirección presente en las líneas AD0-AD7 corresponde una posición de la memoria SRAM o hace referencia a uno de los registros internos del circuito.32. . y un contador/temporizador de 14 bits. 9. Los puertos A y B son de 8 bits y pueden ser usados para transferencias de E/S controladas por programa según el modo programado en el circuito. mientras que esta información. y los estados de IO / M y CS se aplican a la lógica interna del chip durante el flanco posterior de ALE.Dispositivos de E/S Programables 541 El acceso a la zona de memoria RWM. o a los puertos de E/S. Los 6 bits del puerto C pueden a su vez funcionar como entradas o salidas de propósito general o como líneas de control y estado para transferencias sobre el puerto A y B. una dirección válida se presenta en las líneas de direcciones en el flanco anterior de ALE. cuando IO / M conmuta a nivel alto.1 Sección de entrada y salida del 8155 Las direcciones asignadas a los registros internos del 8155 se muestran en la tabla 9.3 y en el capítulo 5 se expone todo lo relacionado con el diseño del decodificador de direcciones para el 8155/56. los registros de comando/estado (C/S) para la programación y examen del estado del dispositivo.3 Direcciones de los registros internos del 8155 Dirección del Puerto de E/S Registro seleccionado AD7 AD6 AD5 AD4 AD3 AD2 AD1 AD0 x x x x x 0 0 0 Registro de Comando/Estado x x x x x 0 0 1 Puerto A de E/S x x x x x 0 1 0 Puerto B de E/S x x x x x 0 1 1 Puerto C de E/S x x x x x 1 0 0 8 bits de orden bajo del temporizador/contador x x x x x 1 0 1 6 bits de orden alto del temporizdor/contador y 2 bits del modo temporizador. de acuerdo con la configuración del 8155. 9. y WR y RD que señalan cuando el acceso corresponde a una operación de escritura o de lectura. con IO / M en nivel bajo.2. un puerto PC de 6 bits.

pero son unidades independientes. Fig. 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 más a la derecha son destinados para el control del temporizador. El puerto A puede ser usado como entrada o salida según establezca el bit 0 de registro C/S. La información transferida al registro de comando durante una operación de escritura en puerto.Dispositivos de E/S Programables 542 Registro de comando Los registros de comando y de estado tienen la misma dirección. Su dirección la esta- . puede funcionar en el modo básico de E/S o en el modo con protocolo de enlace. 9. de acuerdo con el formato de palabra mostrado en la figura 9. permite programar las funciones de los puertos de E/S. y de acuerdo con las función seleccionada para el puerto C.32 Los bits 0 a 3 definen el modo de los puertos.32 Formato de la palabra de control del 8155. El puerto B tiene las mismas características mencionadas para el puerto A.

Por ejemplo.4 Modos del puerto C TERMINAL ALT1 PC0 ENTRADA PC1 ENTRADA PC2 ENTRADA ALT2 SALIDA SALIDA SALIDA ALT3 INTRA BFA STB A ALT4 INTRA BFA STB A PC3 PC4 PC5 ENTRADA ENTRADA ENTRADA SALIDA SALIDA SALIDA SALIDA SALIDA SALIDA INTRB BFB STB B INTR: Salida de SOLICITUD DE INTERRUPCIÓN del puerto A o B.33.Dispositivos de E/S Programables 543 blece el estado del bit 1 del registro de C/S. La única diferencia es en la nomenclatura de las señales. Como se observa en los diagramas de tiempos de la figura 9.36 se muestran los diagramas de tiempos para transferencias de E/S bajo control del puerto C. Las seis lineas del puerto C pueden configurarse como entradas o salidas convencionales (ALT1 Y ALT2) o como señales 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 continuación. el funcionamiento en los modos ALT3 y ALT4 es similar al modo 1 del 8255A. STB : Entrada STROBE que se activa en nivel bajo para indicar la disponibilidad de un dato de entrada o la aceptación de un dato de salida. BF: Salida BUFFER LLENO que en nivel alto notifica que un dato ha sido cargado en por el µP/periférico en el latch del puerto pero aun no ha sido transferido al periférico/µProcesador. se considera que los ejemplos presentados para el 8255. En las figuras 9. Dada la similitud en los modos de operación de ambos dispositivos. Tabla. 9. la señal de buffer lleno se denomina BF tanto para entrada como para salida (OBF e IBF en el 8255A) y la señal de reconocimiento en modo salida. operando en los modos 0 y 1. llamada ACK en el 8255. Un alto en esta línea indica que el periférico ha enviado un dato pero este aún no ha sido leído por el µP o que el dato escrito en el puerto por la CPU ha sido aceptado por el periférico. 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). pueden adaptarse con facilidad al 8155. Cuando se usan estos modos tres bits del puerto C se asignan a control del puerto A y los tres restantes al puerto B. se nombra STB para el 8155. En el modo ALT3 donde solo se controla el puerto A. los bits PC3-5 funcionan como salidas.

Dispositivos de E/S Programables 544 Fig.33 Formas de ondas para transferencias de entrada y salida bajo el control del puerto C. Registro de estado Una operación de lectura al registro de estado de siete bits. la escritura sería a este último. porque al compartir la misma dirección con el registro comando. el estado de las líneas de interrupciones y si éstas están habilitadas. Una lectura del registro de estado puede indicar si en el latch de entrada o salida existe un dato aun no transferido al receptor. 9.34. entrega información de estados de los puertos de E/S y el temporizador. Pudiéndose además detectar cuando el temporiza- . El µP no puede escribirse sobre este registro. El formato de la palabra de estado se muestra en la figura 9. El programa puede examinar esta información en cualquier momento.

Fig.Dispositivos de E/S Programables 545 dor contador llega a la cuenta final después de haber sido iniciado. 9. Pantalla de cristal líquido conectada a un 8155.35.9 Se debe controlar la presentación de información alfanumérica en una pantalla de cristal líquido.34. Esto último se logra detectando el estado del bit 6 del registro de estado. 9. Ejemplo 9. Fig. Formato de la palabra de estado del 8155. .

36. Realizar la interconexión a un sistema 8085A. en cuyo caso sólo serán necesarias siete líneas de interconexión. de un módulo de cristal líquido de 16x2 caracteres (controlador HD44780U). Solución: La pantalla LCD de la figura 9. Las funciones y distribución de los terminales del dispositivo LM032L se muestran en la figura 9.35. El formato de presentación es el de la figura 9. 2. Fig.Dispositivos de E/S Programables 546 1. R / W y ocho líneas para datos y comandos. generador de caracteres y los manejadores de cristal líquido necesarios para el control de una matriz de puntos. por lo cual se simplifica la interconexión del LCD con el sistema procesador.36 es de 16x2 caracteres. basándose en el diagrama simplificado de la figura 9. Esta unidad provee todas las funciones como memoria de presentación. El HD44780U tiene dos registros de 8 bits: Registro de Datos (DR) Contiene temporalmente los datos a ser leídos o escritos en la memoria RAM de datos a presentar (DDRAM: Display Data RAM) y en la memoria RAM del . El dígito más significativo en la posición más baja. RS.37. Los valores de temperatura son de dos dígitos y está almacenados a partir de la dirección de memoria MEM. lo cual significa que puede presentar 2 líneas de 16 caracteres cada una. para comunicarse con el módulo LCD se requieren tres líneas de control: E. Valores de temperatura y estado del proceso. para presentación de caracteres alfanuméricos y símbolos. Escribir el programa de control de presentación. Este es un sistema microcontrolador y manejador de pantallas LCD. El carácter se construye en una matriz de 5x7 puntos Existe un gran número de módulos LCD producidos por diferentes fabricantes y existe un estándar que facilita la interconexión entre el dispositivo y un µP o µCtrl. e imprima la temperatura en dos puntos de un proceso. Como ilustra la figura 9. independientemente del modelo. Tal estándar se conoce como HD44780U.35.36. 9. El código de la aplicación puede programar al dispositivo para operación con datos de 4 bits.

Nibble bajo del bus de datos bidireccional. Cuando es 1 se escribe o lee desde el registro de datos (DR) Read/Write Selección de operaciones de lectura y escritura. La línea de control RS permite seleccionar uno de los registros como indica la tabla 9.5 V. El bit D7 puede usarse como bandera de ocupado. El dispositivo LM032L usa el estándar HD44780U. ocultar cursor o desplazar cursor. Una vez que el µP lee el dato. Estas 4 líneas no se usan durante el modo de operación con transferencias de 4 bits. 0: Escritura. Cualquier información cargada en el DR por el µP. La CGRAM contiene caracteres definidos por el usuario. y direcciones para la DDRAM o la CGRAM.5. como por ejemplo: limpiar pantalla. Registro de Instrucciones (IR) Almacena los códigos de las instrucciones. Comunica el µP con el HD44780U. 9. Inicia las operaciones de lectura y escritura. Enable.7 V a 5. un dato es leído desde la DDRAM o CGRAM y cargado en el DR para ser transferido al µP. Tierra. es almacenada automáticamente en la DDRAM o en la CGRAM. Nibble mas significativo del bus de datos bidireccional. Cuando es 0 se escriben comandos en el registro de instrucción (IR) o se leen desde IR el estado de la bandera de ocupado y del contador de direcciones. Cuando el µP lee datos desde la DDRAM o CGRAM. 1: Lectura.37. Regulación de contraste de la pantalla (0-5 V) Selects registers.Dispositivos de E/S Programables 547 VDD: VSS: VEE: RS: Alimentación de 2. Comunica el µP con el HD44780U. R/ W : E: D4-D7: D0-D3: Fig. el contenido de la siguiente posición de la memoria se envía al DR para una próxima lectura por el sistema. . estos son transferidos al DR. generador de caracteres (CGRAM: Character Generador RAM). Cuando una dirección es escrita en el IR.

la ejecución de una instrucción (Borrar pantalla. Para el dispositivo de 16x2 caracteres. Todo texto escrito en el HD44780U se almacena en esta memoria y el µCtrl a continuación leerá la DDRAM y presentará el mensaje en el LCD. llevar la línea R / W a cero. la bandera de ocupado estará en alto y el controlador no aceptará transferencia alguna hasta cuando BF retorne a nivel bajo.38. Operación de escritura en el IR con RS =0). Una escritura en el módulo. Fig. 9.5. colocar el dato. se puede activar E. ésta es cargada en el AC. La memoria de datos a presentar o DDRAM contiene los códigos de 8 bits de los caracteres en pantalla. cargar el dato en el bus D0-D7 y retornar E a cero lógico. Cuando el µP escribe la dirección de una instrucción en el IR. poner la entrada E en alto. el evento que ejecuta las operaciones internas. puede tener dos propósitos: uno. Por ejemplo.5. En la práctica está secuencia no es crítica. 9.Dispositivos de E/S Programables 548 Tabla. Selección de registros. El diagrama de tiempos de una operación de escritura al módulo LCD se presenta en la figura 9. El AC es incrementado/disminuido en 1. por ejemplo. la DDRAM puede representarse con el siguiente mapa de memoria. El procedimiento implica: poner RS en el estado correspondiente. la presentación de un caracter ASCII en la pantalla (Operación de escritura al DR con RS =1). Su máxima capacidad son 80 caracteres.39. Memoria DDRAM . y al final retornar a cero la línea E. Como se expone en la tabla 9. La propia instrucción especifica si el destino es la DDRAM o la CGRAM. fijar el estado de RS y R / W . el otro. el estado de BF y del contador de direcciones puede ser examinado por el programa. RS 0 R/ W 0 OPERACIÓN 0 1 1 1 0 1 Escritura de instrucción o dirección en el IR Lectura de la bandera de ocupado BF (D7) y del contador de direcciones (D0-D6). por cada operación de escritura/lectura. Escritura en el DR (Dato desde el DR a la DDRAM o CGRAM) Lectura del DR (Dato desde DDRAM o CGRAM hacia el DR) Cuando el HD44780U está realizando una operación interna. Es en realidad el flanco de caída de la señal E. El contador de direcciones (AC:Address Counter) es un apuntador de direcciones para la DDRAM y la CGRAM.

Dispositivos de E/S Programables 549 Fig. sus códigos y el número de ciclos de reloj invertidos en la ejecución de cada una. Ciclo de escritura en el HD44780U. y el número indica la dirección de la memoria que corresponde a cada posición en la pantalla.39. El área que no se usa para presentar caracteres puede usarse como RAM de propósito general.38 corresponde a los caracteres visibles o 16x2 caracteres. el segundo a la 1 y así sucesivamente.40. Si escribimos un carácter el la dirección 0FH.6. se muestran en la tabla 9. Las instrucciones disponibles. 9. El primer caracter pertenece a la posición 0. El área más oscura en la figura 9. . Los caracteres imprimibles se muestran en la tabla de la figura 9. éste aparecerá en la ultima posición de la línea 1. el siguiente carácter enviado no aparecerá al comienzo de la segunda línea (dirección 40H) debido a que fue escrito en la dirección 10H. En este caso antes de enviar el caracter debe ejecutarse un comando que desplace el cursor hacia la primera posición de la línea 2.

40. . 9.Dispositivos de E/S Programables 550 Fig. Patrones en la ROM del generador de caracteres.

9. 1 = Desplazamiento hacia la derecha. Conjunto de instrucciones del módulo LCD. 1 = Presenta 2 líneas de caracteres. 0 = Bus de 4 bits. 0 = Presentación normal. 1 = Pantalla activada. . F: 1 = Caracteres de 5 x 10 puntos. 0 = Cursor normal. 1 = Desplaza el contenido de la pantalla.6. 1 = Módulo LCD está ocupado. 0= “ “ 5 x 7 puntos. 0= “ apagada. 1 = Bus de 8 bits. 0 = Cursor oculto. 0= “ “ “ izquierda. 0 = Mueve el cursor. 1 = Cursor está activo. 1 = Desplaza el contenido de la pantalla con cada nueva escritura de dato. 0 = Muestra 1 línea de caracteres. I/D: S: D: C: B: S/C: R/L: BF: DL: N: 1 = Avance del cursor.Dispositivos de E/S Programables 551 Tabla. 0 = Retroceso del cursor. 0 = Dispositivo libre para aceptar comandos o datos. 1 = Cursor parpadea si está activo.

el HD44780U debe ser configurado por medio de una secuencia de instrucciones enviada al controlador del módulo.64 ms. a un estado inicial. * Antes de esta instrucción los tiempos de espera deben cumplirse. Esperar al menos 40 µs. Esta orden limpia la pantalla y coloca al cursor en la posición del primer carácter de la primera línea. Esperar al menos 40 µs. que cada vez que se presente un nuevo carácter. Ejecutar la instrucción Display Control (08H: pantalla y cursor desactivados). por lo cual es suficiente con verificar a BF. es la siguiente: Esperar 15 ms después que VCC alcance 4. Esto se corresponde con el byte 38H=000011102. la posición del cursor se mueva hacia la derecha. se usa la instrucción Function Set para especificar que se usa un ancho de 8 bits para el bus de datos. un comando 06H=000001102 de la instrucción Entry Mode Set. Ejecutar la instrucción Entry Mode set (06H:Auto incremento. Para borrar la pantalla en cualquier momento. .7 V. se ejecuta una sucesión de instrucciones que lleva al módulo LCD. que si no se satisfacen las condiciones de la fuente de alimentación para la operación del circuito de RESET interno. Ejecutar la instrucción Function Set (30H: bus 8 bits). al aplicársele energía. la cual activa la pantalla y muestra el cursor. Esperar al menos 40 µs. Si se escribe en la línea 1 y se desea que el carácter que sigue se presente en la posición 5 de la segunda línea se usa la función Set DDRAM Addr o C5H=110001012 (Dirección DDRAM= 45H). Ejecutar la instrucción Function Set(* ) (30H: bus 8 bits). Esperar al menos 1. Avanzar el cursor). Ejecutar la instrucción Function Set (30H: bus 8 bits). Esperar al menos 40 µs. No basta con examinar la bandera de ocupado BF para detectar cuando el módulo está disponible. Esperar al menos 4. el programa de la aplicación deberá ejecutar las instrucciones de configuración del LCD. Esperar al menos 40 µs. Ejecutar la instrucción Display Control (0EH: Activar pantalla y mostrar cursor). También se indica. sugerida por el fabricante. En este caso.1 ms. Ejecutar la instrucción Function Set (38H: bus 8 bits. Esperar al menos 100 µs. como se deduce de la tabla 9. Ejecutar la instrucción Clear Display (01H: borrar pantalla). establece.Dispositivos de E/S Programables 552 Configurando el módulo LCD Antes de usar la pantalla de cristal líquido. La secuencia de inicio por instrucciones. para el modo de 8 bits. 2 líneas de caracteres y una matriz de 5x7 puntos.6. por defecto. Finalmente. Los tiempos de espera después de esta instrucción se corresponden con el tiempo de ejecución de la misma. se ejecuta Clear Display. La instrucción siguiente de la secuencia de inicio corresponde al comando 0EH=000011102 de la instrucción Display Control. El manual de usuario del HD44780U especifica que un circuito interno de RESET inicia dispositivo. 2 líneas matriz 5x7). En principio. cuyo código es 01H=000000012.

• SAL_CMD Escribe en el registro de intrucciones IR. El carácter de escape es NULL (00H). • ESP_5MS Retardo de 5 ms (>4.1ms) para permitir satisfacer los tiempos especificados en la rutina de inicio. • INIC_LCD Rutina de inicio. . Antes de ejecutar una instrucción determinada se detecta si el dispositivo está libre. Configura el módulo LCD y lo deja listo para ser usado. Las instrucciones del programa de control del módulo LCD.41. • LCD_OCUP Verifica el estado de la bandera de ocupado. • TEXTO1 Envía al LCD la cadena de caracteres cuyo primer elemento está almacenado en la posición con dirección de memoria apuntada por el registro par HL. la interconexión del LCD con el 8085A en la figura 9. El resultado se presenta en la figura 9. se muestran a continuación. el cual debe cargarse en el acumulador. El archivo resultante en de formato hex se cargó en el programa 8085SimulatorIde el cual emula un módulo LCD. • TEXTO2 Envía al LCD la cadena de caracteres BCD de longitud especificada por el contenido del registro C y cuyo primer elemento está almacenado en la dirección de memoria especificada por el registro par HL.36 consta nueve módulos.42.Dispositivos de E/S Programables 553 El programa desarrollado para establecer la comunicación entre el µP y el HD44780U y presentar el texto de la figura 9. El programa consta de 9 módulos ensamblados con el AVMAC85 y enlazados con el AVLINK. Si BF está en uno. Antes de ejecutar la transferencia se verifica que el LCD esté disponible. • PULSO_E Genera un pulso de nivel alto en la línea de control ENABLE (E). espera hasta cuando retorne a cero para continuar la ejecución del programa. el comando cuyo código está cargado en el registro acumulador. • SAL_DATO Escribe en el registro de datos DR el código ASCII del carácter a presentar. los cuales se describen a continuación: • LCD Programa principal.

Puerto de control del 8155 pa_8155 ds 2 . 2 líneas de 5x7 puntos dspy_ctrl1 equ 8 .escap.dspy_ctrl1.texto2 . Conversión BCD a ASCII . Líneas de control para escribir dato E_alto equ 4 . Líneas de control para escribir comando escrb_dat equ 2 . Definición de segmentos .func_set2. Máscara para activar línea enable E_bajo equ 0fbh . PC0-->RW . Líneas de datos del módulo LCD pc_8155 ds 1 . Definición de etiquetas .ent_mod_set.escrb_dat.--------------------------------------------------------------------------------------------------------------------seg stack ds 10H t_stack:equ $-1 .--------------------------------------------------------------------------------------------------------------------public pa_8155.--------------------------------------------------------------------------------------------------------------------defseg puertos.clr_dspy. Base de la pila . Caracter de escape para texto1 bcd_ascii equ 30h . Líneas de contro (E=0) para leer LCD escap equ 0 .--------------------------------------------------------------------------------------------------------------------- .--------------------------------------------------------------------------------------------------------------------.start=50h. Dirección de inicio de RWM func_set1 equ 30h .leer_dato2 extern inic_lcd.--------------------------------------------------------------------------------------------------------------------seg puertos pctrl_8155 ds 1 .sal_cmd.E_bajo. RWM a partir de 0800H defseg progr.texto1. Pantalla off y cursor oculto dspy_ctrl2 equ 0EH .--------------------------------------------------------------------------------------------------------------------.--------------------------------------------------------------------------------------------------------------------. Puertos del 8155 . La pila reside en la RWM defseg datos.--------------------------------------------------------------------------------------------------------------------. Líneas de contro (E=1) para leer LCD leer_dato2 equ 1 . Pantalla on y mostrar cursor clr_dspy equ 1 . PC2-->EN . Área de la pila . start=0 . Máscara para llevar enable a cero leer_dato1 equ 5 . Inicio de la pila i_rwm equ 0800H .leer_dato1 public func_set1.--------------------------------------------------------------------------------------------------------------------. start=i_stack . 8155 en dirección 50h defseg stack. Borrar pantalla cursor a la esquina izquierda ent_mod_set equ 6 .bcd_ascii. class=code. class=iospace . start=i_rwm .--------------------------------------------------------------------------------------------------------------------i_stack equ 08F0H . 2k de EPROM desde 0000H . PC1-->RS . Autoincremento y avanzar cursor escrb_cmd equ 0 . Interconexión de 8 bits. Modulo de programa principal .E_alto.Dispositivos de E/S Programables 554 $title(Manejo LCD) $subtitle(Módulo LCD) . class=data.dspy_ctrl2. Interconexión de 8 líneas func_set2 equ 38h .pc_8155.escrb_cmd.

--------------------------------------------------------------------------------------------------------------------.--------------------------------------------------------------------------------------------------------------------seg datos mem ds 4 temp ds 1 . Presentar temperatura 1 lxi h. Son dos dígitos BCD call texto2 .--------------------------------------------------------------------------------------------------------------------- . Apuntar valor de temperatura 1 mvi c. Apuntar mensaje 'T1=' call texto1 . Presentar texto 'T1=' lxi h. Apuntar mensaje '(-->)' call texto1 . Presentar '(-->)' hlt . Área de mensajes .--------------------------------------------------------------------------------------------------------------------. Apuntar mensaje 'T2=' call texto1 .0 end .t_stack .cad2 .mem+2 .7eh.--------------------------------------------------------------------------------------------------------------------. Configuración de inicio del módulo LCD lxi h.--------------------------------------------------------------------------------------------------------------------seg progr lxi sp.cad1 . Presentar 'grados centigrados' lxi h. Dirección de posición 13 de línea 2 call sal_cmd .2 .'C '.cad4 .0 db '('. Presentar temperatura 2 lxi h. Se carga el apuntador de pila mvi a.Dispositivos de E/S Programables 555 . Mover cursor lxi h.cad3 . Área de variables .mem .0 db 0dfH. Apuntar 'grados centigrados' call texto1 . Segmento de código .2 .')'.0cdh . Apuntar valor de temperatura 2 mvi c.cad2 . Pa:salida Pc:salida out pctrl_8155 .--------------------------------------------------------------------------------------------------------------------cad1: cad2: cad3: cad4: db 'T1='.0dH . Presentar texto 'T2=' lxi h. Apuntar 'grados centigrados' call texto1 . Son dos dígitos BCD call texto2 . Programar 8155 call inic_lcd . Presentar 'grados centigrados' mvi a.0 db 'T2='.

Function set call sal_cmd call lcd_ocup .dspy_ctrl1.func_set2 .escrb_cmd. Recuperar código de instrucción out pa_8155 .clr_dspy .func_set1 . Entry Mode Set call sal_cmd ret end .escrb_cmd .---------------------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------------------------- .---------------------------------------------------------------------------------------------------------------------inic_lcd: call esp_5ms .lcd_ocup defseg progr seg progr . Rutina INIC_LCD . Esperar al menos 4. Function set call sal_cmd call esp_5ms . Generar un pulso en E ret end .---------------------------------------------------------------------------------------------------------------------public sal_cmd extern lcd_ocup. Display Control call sal_cmd mvi a. Function set call sal_cmd mvi a. Function set call sal_cmd call esp_5ms . RS=0.dspy_ctrl2 .1 ms mvi a.---------------------------------------------------------------------------------------------------------------------. Salvar estado de RS y RW out pc_8155 .esp_5ms.pulso_E defseg progr seg progr . Líneas de control para inicio de ejecutar instrucción sta temp .temp.Dispositivos de E/S Programables 556 .dspy_ctrl2 extern clr_dspy. Esperar al menos 40 µs mvi a.pa_8155. E=0. Rutina SAL_CMD .pc_8155. Clear Display call sal_cmd mvi a.ent_mod_set .---------------------------------------------------------------------------------------------------------------------sal_cmd: mov b.func_set2.ent_mod_set. RW=0 mov a.dspy_ctrl1 . Esperar al menos 15 ms call esp_5ms call esp_5ms mvi a.a . Display Control call sal_cmd mvi a.func_set1 . Cargar instrucción en bus de datos call pulso_E .b . Esperar al menos 100 µs mvi a. func_set1.func_set1 . Espera que el módulo esté libre mvi a.---------------------------------------------------------------------------------------------------------------------. Salva código de instrucción call lcd_ocup .----------------------------------------------------------------------------------------------------------------------public inic_lcd extern sal_cmd.

a . Pa:entrada Pc:salida out pctrl_8155 . Recuperar dato out pa_8155 . RS=0. Rutina LCD_OCUP . Espera que el módulo esté libre mvi a.---------------------------------------------------------------------------------------------------------------------- . RS=0.0dH . Si BF es 1. E=0.escrb_dat . Estado de líneas de control para inicio de enviar dato sta temp .leer_dato1 . RS=1. RW=1 out pc_8155 nop . Leer estado de bandera de ocupado mov e. Tiempo extra in pa_8155 .b .pc_8155.---------------------------------------------------------------------------------------------------------------------public sal_dato extern lcd_ocup. salvar BF en registro E mvi a.leer_dato2 .leer_dato2 defseg progr seg progr .e . E=1.------------------------------------------------------------------------------------------------------- . Cargar dato en el bus call pulso_E .---------------------------------------------------------------------------------------------------------------------lcd_ocup: mvi a. Pa:salida Pc:salida out pctrl_8155 .---------------------------------------------------------------------------------------------------------------------.pulso_E defseg progr seg progr .a .---------------------------------------------------------------------------------------------------------------------.pc_8155. Salvar estado de RS y RW out pc_8155 .leer_dato1.---------------------------------------------------------------------------------------------------------------------public lcd_ocup extern pa_8155. Recuperar BF rlc .escrb_dat. Generar un pulso en E ret end . BF a la bandera de acarreo jc lcd_ocup . Programar 8155 para escritura ret end . Rutina SAL_DATO .---------------------------------------------------------------------------------------------------------------------sal_dato: mov b. Programar 8155 para lectura mvi a. RW=0 mov a. E=0.0cH .temp.pa_8155.Dispositivos de E/S Programables 557 . Salvar dato call lcd_ocup . esperar mvi a. RW=1 out pc_8155 mov a.

RW ret end . Retornar si fin de cadena call sal_dato .---------------------------------------------------------------------------------------------------------------------texto1: mov a. Máscara con E = 1 out pc_8155 .sal_dato. end . Rutina TEXTO2 .---------------------------------------------------------------------------------------------------------------------public texto1 extern escap.m . Cuenta de valores presentados jnz texto2 . Continuar presentando end . Caracter desde la memoria al acumulador cpi escap .pa_8155. Es el último. Probar si es el último caracter del mensaje rz .---------------------------------------------------------------------------------------------------------------------.---------------------------------------------------------------------------------------------------------------------- . continuar presentando ret .m . Rutina TEXTO1 . Rutina PULSO_E . Si no es el último valor. RS.---------------------------------------------------------------------------------------------------------------------.bcd_ascii defseg progr seg progr . Presentar caractes inx h .---------------------------------------------------------------------------------------------------------------------texto2: mov a. Dígito BCD desde memoria al acumulador adi bcd_ascii .---------------------------------------------------------------------------------------------------------------------pulso_E: lda temp .---------------------------------------------------------------------------------------------------------------------public pulso_E extern temp.E_bajo. E=0. Recuperar estado de RS y R/W ori E_alto .E_alto. Tiempo adicional ani E_bajo .Dispositivos de E/S Programables 558 . RW nop .pc_8155 defseg progr seg progr . Convertir a ASCII call sal_dato . RS. E=1.---------------------------------------------------------------------------------------------------------------------. Apuntar dígito siguiente dcr c . Máscara con E = 0 out pc_8155 . retornar.---------------------------------------------------------------------------------------------------------------------. Presentar dígito inx h .---------------------------------------------------------------------------------------------------------------------public texto2 extern escap.---------------------------------------------------------------------------------------------------------------------.sal_dato defseg progr seg progr . Apuntar siguiente elemento de la cadena jmp texto1 .

41.e ora d jnz esp pop d ret end .---------------------------------------------------------------------------------------------------------------------.Dispositivos de E/S Programables 559 .---------------------------------------------------------------------------------------------------------------------public esp_5ms defseg progr seg progr .---------------------------------------------------------------------------------------------------------------------- Fig. Puerto de conexión del módulo LCD.---------------------------------------------------------------------------------------------------------------------esp_5ms: push d lxi d. 9. .281h esp: dcx d mov a.42. Fig. Módulo LCD del programa 8085Simulator Ide. 9. Rutina ESP_5MS .

Dispositivos de E/S Programables 560 9. La sección del timer del 8155 es un temporizador contador binario descendente de 14 bits. TH y TL son señales internas al 8155 y se usan para seleccio- . entrega a su salida una onda cuadrada o un pulso. Este puede usarse para generar sonido. Las aplicaciones de un temporizador son diversas. está presente en toda aplicación que involucre generación y control de tiempo. libera al µP de la tarea de mantenerse en un lazo sin hacer nada por la duración del retardo. Entradas y salidas de la sección del timer del 8155. controlar servomotores. Las entradas AD0-AD7 corresponden a los terminales del 8155 y permiten el acceso a los registros. el 8155 tiene un temporizador contador programable que puede usarse en aplicaciones que requieran control de tiempo. medir variables físicas como temperatura y humedad.43. Los terminales TIMER IN y TIMER − OUT son externos. el uso de un temporizador sólo lo limita la imaginación del diseñador. • Realizar la cuenta de eventos. 9. Al primero se conectan los pulsos a contar y en el segundo se presenta la señal de salida. • Generar velocidades de baudios para el canal de comunicación serie.43 muestra las líneas de entrada y salida del temporizador. En la práctica.2. de acuerdo con el modo de operación previamente programado. y en general. el cual registra los pulsos de entrada y al culminar la cuenta. La figura 9. convertir de voltaje a frecuencia. Entre las funciones básicas del dispositivo se tienen: • Generar retardos y medir el tiempo transcurrido entre dos eventos. AD0-AD7 Registro TH Registro TL TH TL TIMER-IN TIMER − OUT Fig. El uso de un circuito para generar. arrancar el temporizador y esperar que éste le indique el final del retardo. La CPU sólo debe programar el modo de operación.2 Sección del temporizador-contador del 8155 Además de 256 bytes de memoria RWM y de 3 puertos de E/S. por ejemplo: tiempos de espera.

En la tabla 9. basta con escribir la palabra de control adecuada en el registro de comandos. este puede verse como un componente con una entrada de reloj y una salida. desde el punto de vista del hardware. Programación del temporizador-contador Antes de ser puesto en operación. Entradas y salidas externas de la sección del timer del 8155.Dispositivos de E/S Programables 561 nar los registros del contador.32. el dispositivo debe ser programado para indicarle el modo de operación y la longitud de la cuenta.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 de orden alto (TM2-TM1) del registro de comando se usan para funciones del contador. como ilustra la figura 9. De modo que para arrancar o parar el temporizador. Debido a que la programación del temporizador se realiza por programa.44. Los dos bits altos de TH. de acuerdo con el formato mostrado en la figura 9. debe . Debido a que el programa puede iniciar o parar al timer en cualquier momento. Formato de los registros internos del timer. establecen el modo de operación. 9. Como se observa en la figura 9.7 se especifican los cuatro comandos disponibles. 9.44. TIMER-IN TEMPORIZADOR TIMER − OUT Fig.45. Fig. Esta configuración se realiza cargando palabras de control en los registros internos del contador.

46. como se especifica en la tabla 9. si la longitud de la cuenta es 4. M2 M1 0 0 Onda cuadrada. Por ejemplo. la salida permanecerá en alto durante 4 . Tabla.Dispositivos de E/S Programables 562 cuidarse que tales acciones no modifiquen la configuración de los puertos de E/S realizada al inicio del programa. El periodo de la onda cuadrada es igual a la longitud de la cuenta. cuando el modo 0 es seleccionado. Para el modo 2. Tabla.. Como se observa en la figura 9. el tiempo en uno lógico será de 3 periodos de reloj y el tiempo en cero de dos ciclos de reloj.46. TM2 TM1 0 0 No afecta al temporizador. se produce a la salida un ciclo de onda cuadrada. La longitud de la cuenta puede ser un valor entre 2 y 3FFFH. la cual es recargada automáticamente al final del conteo. 9. 1 0 Para el contador una vez alcanzado el final de la cuenta. 1 0 Pulso único en nivel bajo cuando se alcanza el final de la cuenta. 9.8. Para modo 1. La salida TIMER − OUT está normalmente en nivel alto y se puede seleccionar uno entre cuatro modos de operación. Pone la salida en cero durante la segunda mitad de la cuenta. con una cuenta de 5.8. durante los primeros 2 ciclos de reloj la salida permanecerá en alto y durante los siguientes 2 pulsos se pondrá en bajo. 9. Comandos del timer. Modos de operación del temporizador.7. Formas de ondas de salida según el modo seleccionado. Fig. Para una longitud de 5. se recarga la longitud y se repite el ciclo continuamente hasta cuando se pare el contador. Si el timer está 1 1 corriendo se espera el final de la cuenta antes de cargar el nuevo modo y longitud. 1 1 Pulso en nivel bajo con auto recarga al final de la cuenta. Carga el modo y longitud de la cuenta. 0 1 Detiene de inmediato la cuenta. 0 1 Onda cuadrada con auto recarga.

Tabla. En el modo 3 se recarga la longitud generándose un tren de pulsos.9.9 indica como se selecciona la frecuencia de salida y la figura 9.10 Se tiene un 8155 decodificado en la dirección 40H y se usará el temporizador para generar una señal de reloj de frecuencia seleccionada por la posición de tres interruptores S0-2 conectados a las líneas PA0-2 del puerto A. . S2 S1 S0 Frecuencia (Hz) 0 0 0 300 0 0 1 600 0 1 0 1200 0 1 1 2400 1 0 0 4800 1 0 1 9600 1 1 0 9600 1 1 1 9600 Fig.Dispositivos de E/S Programables 563 periodos de reloj y en cero durante el quinto ciclo.144 MHz. 9. Generador de reloj de frecuencia variable. 9. Considere que la frecuencia de oscilación del cristal externo del µP es de 6. con las características descritas. La tabla 9. Ejemplo 9.47 muestra el circuito de generación de señales.47. Selección de la frecuencia de salida.

Frecuencia Longitud decimal (Hz) de la cuenta 300 10240 600 5120 1200 2560 2400 1280 4800 640 9600 320 La subrutina CLK lee los interruptores y encuentra en la tabla la longitud correspondiente. 8155 en dirección 40h defseg progr.--------------------------------------------------------------------------------------------------------------------------. Para una frecuencia fx la longitud de la cuenta se calcula con: f lc = clk fx Para una frecuencia de 4800 Hz y un reloj externo de 6. 9.144 Mz se tiene. Definición de etiquetas .072 × 10 6 = 640 4800 Usando la ecuación se obtiene la siguiente tabla. A continuación se cargan los registros TL y TH y se arranca el temporizador. . start=0 . class=code.--------------------------------------------------------------------------------------------------------------------------. Tabla.--------------------------------------------------------------------------------------------------------------------------defseg puertos. Definición de segmentos .start=40h. Arrancar timer palb_ctrl equ 2 tope_pila equ 200h . Generador de reloj . Onda cuadrada con autorecarga inic_timer equ 0C0h . lc = 3. Frecuencia de salida en función de la longitud de la cuenta. Segmento de código . class=iospace .--------------------------------------------------------------------------------------------------------------------------modo_timer equ 40h .Dispositivos de E/S Programables 564 Solución: 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 función del estado de cada interruptor.9.

Apuntar byte bajo de la longitud mov e. Leer estado de interruptores call ret_20ms . . Multiplicar por dos add l . Puertos del 8155 .m . .--------------------------------------------------------------------------------------------------------------------------. Byte bajo de longitud a TL mvi a. . . Enmascarar ral .320 end .320. Pa:Entrada out pctrl_8155 . .320. . Programar 8155 lxi sp. Sumar desplazamiento mov l. . Rutina de retardo . Apuntar byte alto de la longitud mov d. Modo y byte alto de longitud a TH mvi a. Rutina CLK . Comando de inicio del timer out pctrl_8155 ret .1280. Tabla de valores de longitud de la cuenta .--------------------------------------------------------