Microprocesadores-Luis Urdaneta

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

Views 59 Downloads 0 File size 7MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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.

xv

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

xvi

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

xvii

Contenido Dedicatoria………………………………………………………………………………... .ii Prefacio……………………………………………………….............................................iii Este libro está destinado………………………………………………………………….xiii Conducta de entrada………………………………………...............................................xiv Propósito………………………………..…………………………………………………xv Advertencia………………………………………………………………………………xvi

Capítulo 1. INTRODUCCIÓN AL COMPUTADOR. 1.1 GENERALIDADES………………………………………………………………….. 1 1.2 EL COMPUTADOR Y SU HISTORIA……………………………………………… 2 1.2.1 Los precursores del computador moderno………………………………………. 2 1.2.2 El computador digital……………………………………………………………. 4 La primera generación: Las válvulas de vacío………………………………….. 4 La segunda generación: Los transistores..…………………………….............. 13 La tercera generación: Los circuitos integrados………………………………. 15 La cuarta Generación: El microprocesador……………………………………. 18 La quinta Generación: Tecnología VLSI……………………………………… 24

Capítulo 2. ORGANIZACIÓN DEL COMPUTADOR. 2.1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR 2.1.1 La unidad central de proceso 2.1.2 La unidad de control 2.1.3 La memoria 2.1.4 La unidad de entrada/salida 2.1.5 El generador de reloj 2.2 LAS INSTRUCCIONES DEL COMPUTADOR 2.3 CLASIFICACIÓN DE LOS COMPUTADORES

31 33 34 34 35 35 36 39

Capítulo 3. INTRODUCCIÓN AL MICROPROCESADOR. 3.1 GENERALIDADES………………………………………………………………… 41 3.2 ARQUITECTURA INTERNA DEL MICROPROCESADOR…………………….. 45 3.2.1 Proceso de síntesis de un microprocesador………………………………………… 45 El conjunto de instrucciones del microprocesador…………………………………. 46 La unidad de cálculo……………………………………………………………….. 46 Periférico de entrada……………………………………………………………….. 47 Periférico de salida…………………………………………………………………. 51 El conjunto extendido de instrucciones…………………………………………….. 54 Formatos para representación de información………………………………………55 La memoria del sistema……………………………………………………………. 58 El generador de direcciones………………………………………………………... 65

xviii

El microprocesador como máquina de estados…………………………………….. 68 La unidad de control………………………………………………………………... 70 Comunicación con periféricos lentos………………………………………………. 73 Conjunto extendido de instrucciones………………………………………………. 75 Instrucciones no soportadas………………………………………………………... 80 Diagrama final del microprocesador sintetizado…………………………………… 83 Las señales de entrada y salida al microprocesador………………………………... 84 3.2.2 El sistema microcomputador……………………………………………………….. 86 Las direcciones de memoria………………………………………………………... 87 Las direcciones de los puertos……………………………………………………… 90 3.3 ARQUITECTURA DE UN µP DE 8 BITS MÁS VERSÁTIL……………………. 91 3.4 ARQUITECTURA DE UN µCOMPUTADOR ESTÁNDAR………………………. 98

Capítulo 4. ARQUITECTURA Y OPERACIÓN DEL µP 8085 4.1 GENERALIDADES……………………………………………………………….. 101 4.2 ESTRUCTURA FUNCIONAL DEL 8085A……………………………………..... 104 4.2.1 La unidad de control…………………………………………………………..105 4.2.2 Los registros internos………………………………………………………… 108 4.2.3 La unidad aritmética y lógica………………………………………………… 110 4.2.4 El bus interno de datos……………………………………………………….. 111 4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A…………………………... 114 4.3.1 El ciclo de instrucción………………………………………………………... 115 4.3.2 Secuencia de transición de estados…………………………………………... 118 4.3.3 El estado de espera…………………………………………………………… 122 4.3.4 El modo de operación paso a paso…………………………………………… 125 4.3.5 Ciclos de lectura y escritura en memoria y puertos de E/S…………………... 127 4.4 LA SECUENCIA DE INICIO DEL 8085A……………………………………….. 129

Capítulo 5. EL MICROCOMPUTADOR BÁSICO. 5.1 SISTEMA MCS-85 MÍNIMO…………………………………………………….. 134 5.2 INTERCONEXIÓN CON DISPOSITIVOS CONVENCIONALES……………… 143 5.2.1 La memoria de programa…………………………………………………….. 147 5.2.2 La memoria de datos…………………………………………………………. 151 5.2.3 Los puertos de entrada y salida………………………………………………. 154 5.3 DECODIFICACIÓN EXHAUSTIVA DE LAS DIRECCIONES………………… 158 5.4 PUERTOS DE E/S SELECCIONADOS COMO MEMORIA……………………. 173 5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES………………… 179 5.6 CONSIDERACIONES SOBRE INTERCONEXIÓN A LOS BUSES……………. 188 5.6.1 Carga máxima del bus del 8085A…………………………………………... 188 5.6.2 Selección de la memoria del sistema………………………………………… 190 5.7 MEMORIAS EEPROM Y FLASH…………………………………………………193 5.8 BANCOS DE MEMORIA…………………………………………………………. 197

xix

Capítulo 6. INTRODUCCIÓN A LA PROGRAMACIÓN DEL 8085A 6.1 EL MODELO PARA PROGRAMACIÓN……………………………………….. 207 6.2 FORMATO DE LAS INSTRUCCIONES………………………………………… 208 6.3 MODOS DE DIRECCIONAMIENTO……………………………………………. 210 6.3.1 Direccionamiento directo…………………………………………………….. 210 6.3.2 Direccionamiento Inmediato…………………………………………………. 211 6.3.3 Direccionamiento por registro………………………………………………...213 6.3.4 Direccionamiento indirecto por registro……………………………………... 213 6.4 EL CONJUNTO DE INSTRUCCIONES DEL 8085……………………………… 214 6.4.1 Grupo de instrucciones para transferencia de datos…………………………. 215 6.4.2 Grupo de instrucciones que ejecutan operaciones lógicas…………………… 218 6.4.3 Instrucciones para manejo de la pila…………………………………………. 234 6.4.4 Grupo de instrucciones para bifurcaciones…………………………………... 240 6.4.5 Grupo de instrucciones aritméticas…………………………………………... 249 6.5 ARITMÉTICA DE PUNTO FIJO O DE PUNTO FLOTANTE…………………... 276 6.6 INSTRUCCIONES ADICIONALES……………………………………………… 284 6.7 RUTINAS DE RETARDO………………………………………………………… 284 6.7.1 El lazo de retardo básico……………………………………………………... 285 6.7.2 Retardos de mayor duración…………………………………………………..289

Capítulo 7. DESARROLLO Y SIMULACIÓN DE PROGRAMAS 7.1 EL LENGUAJE DE PROGRAMACIÓN…………………………………………. 294 7.1.1 Traducción de programas…………………………………………………….. 296 7.1.2 Lenguaje ensamblador o de alto nivel………………………………………... 298 7.1.3 El formato HEX-INTEL……………………………………………………... 303 7.2 ESTRUCTURA DEL PROGRAMA……………………………………………… 306 7.2.1 Programación modular……………………………………………………….. 306 7.2.2 Diseño hacia abajo…………………………………………………………… 307 7.2.3 Código estructurado………………………………………………………….. 308 Estructura secuencial………………………………………………………… 309 Estructura IF-THEN/ELSE………………………………………………….. 311 Estructura CASE……………………………………………………………. 313 Estructura DO-WHILE………………………………………………………. 316 Estructura REPEAT-UNTIL………………………………………………... 317 7.3 EL LENGUAJE ENSAMBLADOR………………………………………………. 318 7.3.1 El proceso de ensamblaje…………………………………………………….. 319 7.3.2 Proceso de ensamblaje de un programa modular…………………………….. 320 7.3.3 Lenguaje ensamblador para el 8085………………………………………….. 325 Formato de línea……………………………………………………………... 326 Conjunto de caracteres……………………………………………………….. 327 Delimitadores………………………………………………………………… 327 Especificación de operandos………………………………………………….327 Símbolos reservados…………………………………………………………. 329 Definición de símbolos………………………………………………………. 329 Evaluación de expresiones…………………………………………………… 331

xx

Traducción de un archivo fuente…………………………………………….. 332 Directivas generales del ensamblador……………………………………….. 340 7.4 HERRAMIENTAS PARA DESARROLLO DE PROGRAMAS…………………. 365 7.4.1 Programas para simulación del microprocesador 8085……………………… 371 7.4.2 Sistema integrado para desarrollo de programas…………………………….. 396 7.5 MACROS………………………………………………………………………….. 409 7.6 TABLAS DE CONSULTA (lookup tables)………………………………… 415

Capítulo 8. TÉCNICAS DE GESTIÓN DE ENTRADA Y SALIDA 8.1 ENTRADA Y SALIDA POR PROGRAMA……………………………………… 429 8.2 ENTRADA Y SALIDA USANDO INTERRUPCIONES………………………… 443 8.2.1 El sistema de interrupciones del 8085A…………………………………………. 445 Interrupciones disparadas por la entrada INTR…………………………………... 449 Interrupciones disparadas por las entradas RST………………………………….. 453 8.2.2 El controlador de interrupciones 8259A………………………………………… 475 Interconexión con el sistema 8085A……………………………………………… 476 Programación del 8259A………………………………………………………... 479 8.3 ACCESO DIRECTO A MEMORIA………………………………………………. 492

Capítulo 9. DISPOSITIVOS DE E/S PROGRAMABLES 9.1 CIRCUITO PARA INTERCONEXIÓN DE PERIFÉRICOS 8255……………….. 497 9.1.2 Modos de operación del 8255ª…………………………………………... 499 Modo 0…………………………………………………………………... 500 Modo 1…………………………………………………………………... 500 Modo 2…………………………………………………………………... 500 9.1.3 Programación del 8255ª…………………………………………………. 500 9.1.4 Aplicaciones del 8255Aª………………………………………………… 503 Operación en el modo 0…………………………………………………. 503 Operación en el modo 1…………………………………………………. 529 Operación en el modo 2…………………………………………………. 536 9.2 DISPOSITIVO 8155: SRAM/PUERTOS DE E/S/TIMER………………………... 539 9.2.1 Sección de entrada y salida del 8155………………………………………… 541 Registro de comando…………………………………………………………. 542 Registro de estado……………………………………………………………. 544 9.2.2 Sección del temporizador-contador del 8155………………………………… 560 9.3 CONTROLADOR DE TECLADO Y PANTALLA 8279…………………………. 580 9.3.1 Funcionamiento del 8279…………………………………………………….. 582 9.3.2 Programación del 8279………………………………………………………. 585

Bibliografía…………………………………………………………………………. 644

Introducción al Computador

1

Introducción al Computador

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

Introducción al Computador

2

• El tiempo de ingeniería empleado en el desarrollo de sistemas se acorta en forma drástica. Estas tres cualidades han resultado en un cambio sustancial en las técnicas de diseño lógico, de hecho en la actualidad todos los sistemas cuya complejidad esté por debajo del nivel de minicomputadores, se diseñan en base a μPs.

1.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. Para simplificar la reseña de la evolución de las máquinas de computación, 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. 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, 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. 1.2.1 Los precursores del computador moderno La idea del autómata inteligente es antigua, 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. La figura 1.1 es una ilustración de la contribución del eminente científico francés al progreso del conocimiento.

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

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, revelando que además de ser un gran científico tenía alma de visionario, Este anuncio pretende poner en tu conocimiento, amable lector, que yo presento a la opinión pública una pequeña máquina..., que te proporciona alivio del trabajo que tantas veces fatigo tu espíritu, cuando has hecho cálculos con tu pluma.

Inspirado en el diseño de Pascal, el famoso matemático germano Gottfried Wilhelm Leibniz (1646-1716) desarrolló en 1670 una versión de la calculadora más eficiente y precisa, capaz de realizar las cuatro operaciones aritméticas: suma, substracción, multiplicación y división. A pesar que los diseños de Pascal y Leibniz no tuvieron mayor éxito comercial, en las postrimerías del siglo XIX fueron de uso común versiones perfeccionadas de éstas máquinas, tanto en el campo científico como financiero. El primer equipo de computación automática fue inventado por el francés Joseph Marie Jacquard (1752-1834), quien introdujo el concepto de programa almacenado para el control del cálculo, al diseñar un telar automático. 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, simplificando la realización de diseños con tramas complejas. 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. Aunque puede considerarse a la máquina calculadora de Pascal como el precursor del computador moderno, 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). En la figura 1.2 se muestra una sección de la estructura de ésta calculadora mecánica programable.

Fig. 1.2 Máquina diferencial de Babbage.

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. No obstante, en el año 1991 unos científicos británicos ensamblaron la máquina basándose en las especificaciones dejadas Babbage, comprobando su funcionamiento al realizar en forma correcta cálculos sencillos con una precisión de 31 dígitos. En realidad los diseños de Babbage eran demasiado avanzados para el nivel de desarrollo de la tecnología del siglo XIX. De hecho en 1830 proyectó la máquina analítica, jamás construida, dirigida a realizar cálculos complejos, la cual presentaba notables similitudes con la organización de un computador moderno: un grupo de tarjetas perforadas introducían datos al dispositivo, una unidad de memoria para almacenamiento, una unidad operativa para realizar los cálculos matemáticos y una impresora para la salida de los resultados. En el año 1880, 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. La información almacenada en las tarjetas era interpretada haciéndolas pasar a través de sensores eléctricos. En el año 1896, Hollerith fundó una empresa que treinta años más tarde se convertiría en el famoso consorcio International Business Machines Corporation (IBM). 1.2.2 El computador digital Los fundamentos de los sistemas digitales modernos y la base de la sintaxis de los programas de computación actuales fueron propuestos por el matemático británico George Boole en El análisis Matemático de la Lógica (1847), y en su tratado clásico Una Investigación de las Leyes del Pensamiento, publicado en el año 1954. 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). Pasados ochenta años, en 1938, Claude Elwood Shannon, publicó su trabajo Un Análisis Simbólico de Relés y Circuitos de Interrupción, donde entrega los resultados de su investigación sobre una teoría de conmutación basada en las proposiciones de Boole. Las primeras aplicaciones prácticas del álgebra de Boole fueron en redes de conmutación telefónicas construidas con relés, y posteriormente en el diseño de sistemas digitales usando válvulas de vacío como componentes básico. 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), proyecto financiado por el gobierno de los

Introducción al Computador

5

Estados Unidos, y desarrollada en la Escuela de Ingeniería Moore de la Universidad de Pennsylvania bajo la supervisión de John Presper Eckert y John.Mauchly.

Esta máquina es aceptada como el primer computador programable, y se alojaba en un gabinete de 30 metros de longitud, 3 metros de altura y 1 metro de profundidad, estando constituida por 18000 tubos de vacío. Este computador digital de 2 millones de dólares, pesaba 30000 kilogramos y consumía 150 KW, requiriendo toneladas de equipos de aire acondicionado para evitar el sobrecalentamiento. El ENIAC se diseño en base a una arquitectura conocida como tipo Harvard, cuya característica fundamental es que usa unidades de memoria separadas para los datos y las instrucciones.

Fig.1.3 La computadora gigante ENIAC ocupaba un área significativa de un edificio.

La arquitectura Harvard fue introducida en la década de los 30's por un científico de la Universidad de Harvard llamado Howard Aiken. Las figuras 1.3 y 1.4 muestran en forma dramática las diferencias existentes entre el ENIAC y un µcomputador monopastilla moderno.

Fig.1.4 El microcontrolador C167R aloja en un área de 100 mm2 todos los elementos de un computador, además de múltiples controladores de periféricos.

En la figura 1.5 se presenta un diagrama de la arquitectura del ENIAC donde se observa el uso de buses distintos para la transferencia de datos e instrucciones, un conjunto de veinte acumuladores para almacenar los operandos y dos unidades aritméticas para ejecutar divisiones, productos y extracción de raíces cuadradas. La operación y sincronización global del sistema la realizaba la unidad de control. La unidad de almacenamiento estaba constituida por tambores magnéticos pudiendo almacenar 20 números decimales de 10 dígitos. El programa en lenguaje de

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.5. Este computador ejecutaba una operación de suma en un tiempo de 200 μs y una multiplicación en la eternidad de 2.8 ms.

Lectora de tarjetas

Impresora de tarjetas

Bus de Escritura

Divisor y

20

Multiplicador

3 ...

Unidad de Control

1 2

Acumulador

Bus de Lectura

Bus de Instrucciones

Unidad de Programación Fig. 1.5 Estructura del computador ENIAC

Como sistema de computo el ENIAC solo es de interés histórico, 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. 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. 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.

Introducción al Computador

7

Pese a que en el mes de diciembre de 1943 se puso en marcha el computador Colossus, y el año siguiente el Harvard Mark I, la mayoría de los datos históricos señalan al ENIAC como el primer computador electrónico para aplicaciones de propósito general.

Fig. 1.6 ElColossus fue la primera computadora totalmente electrónica.

El diseño del Colossus se inició en 1939, estando compuesto por 1500 válvulas de vacío. 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. El Colossus fue usado durante la segunda guerra mundial para descifrar las transmisiones de radio del ejército nazi. El Mark I era un computador electromecánico que contenía 200000 componentes y 800 kilómetros de cable, requiriendo diez segundos para realizar una división entera. Pese a su lentitud extrema, la ENIAC era mil veces más rápida. En la arquitectura del Mark I se distinguen las unidades que constituyen los computadores modernos, tales como la memoria, la unidad aritmética, la unidad de control, y los puertos de entrada y salida.

Fig. 1.7 El computador MARK I.

Introducción al Computador

8

El computador ABC (Atanasoff-Berry Computer) fue otra máquina, anterior al ENIAC, construida en 1939 en la universidad del estado de Iowa por John Atanasoff (1903-1995) y su asistente Clifford Berry. Como un hecho curioso, Atanasoff alegaba ser el autor de ciertos principios y técnicas que se utilizaron en el desarrollo del ENIAC sin contar con su autorización. En el año 1973, y con base en este argumento, la empresa propietaria de las especificaciones para la fabricación del ENIAC fue despojada del derecho exclusivo para fabricar o vender el computador. El desarrollo de los computadores sucesores del ENIAC, también basados en válvulas de vacío, fue impulsado fundamentalmente por la necesidad de resolver problemas de ingeniería de la industria de armamentos de los Estados Unidos, tales como el diseño de aviones de combate y misiles. La razón para el uso restringido de estos computadores gigantes es obvia, a mediados de los años 40, en plena postguerra, 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. De hecho el ENIAC nace impulsado por las necesidades militares del Laboratorio de Investigación de Balística (BRL) de las fuerzas armadas norteamericanas. 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, sin variaciones sustanciales en la estructura física del sistema, fue obstaculizada en forma severa por problemas de complejidad variable derivados del uso de la arquitectura Harvard. Un uso eficiente de la memoria del sistema era deseable dado el alto costo de esta unidad de la máquina. No obstante, establecer en la fase de diseño la capacidad de las memorias separadas era una tarea que se distinguía por su ambigüedad, debido a la variedad de tareas que potencialmente debía resolver el computador. En una aplicación de corte administrativo o financiero es seguro que se requiere el almacenamiento de una cantidad considerable de datos, cuyo procesamiento necesita la ejecución de programas con algoritmos convencionales desarrollados usando un número reducido de instrucciones; 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. Si se usa arquitectura Harvard, es claro que, dependiendo de la aplicación, una de las memorias del sistema será subutilizada. 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 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. En una artículo científico publicado en el año 1946 Von Neumann junto con Burks y Goldstine, presentan el primer computador que funcionaba con el programa almacenado en memoria el EDVAC (Electronic Discrete Variable Computer), el cual estaba basado en una arquitectura nove-

Introducción al Computador

9

dosa que usaba una memoria común para el almacenamiento de los datos y las instrucciones.

Fig. 1.8 El computador EDVAC.

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, bastará con espacio común de memoria para almacenar los datos de E/S y las instrucciones del programa. El mérito de Von Neumann estuvo en la idea de la construcción de una máquina de propósito general, cuya secuencia de operación podía ser programada de acuerdo con las necesidades de una aplicación específica. El programa que debía ejecutarse, los datos, y resultados se almacenan en una memoria, concepto novedoso que sustituía el cableado de componentes, y que permitía cambiar el comportamiento del equipo con la simple modificación del programa en memoria. El formato de instrucciones propuesto por Von Neumann, dividía la instrucción en dos campos: el campo de código de operación para identificar la instrucción a ejecutar, y el campo de dirección para especificar la localización en memoria del operando u operandos a usar por la instrucción. La figura 1.9 muestra el formato descrito. 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. 1.9 Formato de la instrucción de cuatro direcciones

Introducción al Computador

10

Debido a que el computador es una máquina de naturaleza secuencial que acepta información de entrada, realiza algún tipo de operación sobre estos datos, entrega un resultado, y luego se dirige a ejecutar la próxima instrucción. En un principio se pensó que la instrucción básica (una operación aritmética, por ejemplo) debía contener la siguiente información: 1. El código de operación para señalar el tipo de operación: suma, resta, producto, detección de paridad, complemento etc. 2. La dirección de los operandos que participan en el cálculo. 3. La dirección de memoria donde debe almacenarse el resultado. 4. La dirección donde está la instrucción próxima.

Una máquina de cómputo cuya instrucción tenga el formato de la figura 1.9 se conoce como computador de 4 direcciones. A pesar que no existían obstáculos insalvables para la construcción de un computador de este tipo, algunas consideraciones indican que el uso de tal formato resulta en sistemas de estructura compleja y dimensiones exageradas. La principal desventaja está relacionada con el número de bits de cada instrucción, si se asignan 8 bits para identificar al código de operación, con una memoria de 65536 posiciones que necesita 16 bits para especificar cada dirección de memoria, resulta un total de 72 bits por instrucción. 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, 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. 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. 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. En la actualidad estas dificultades han sido superadas, los computadores actuales no usan instrucciones de 4 direcciones y los microcomputadores utilizan instrucciones de una dirección o sin dirección. En la sección próxima se expone como fue posible construir máquina de una dirección o sin ésta. 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, John Von Neumann participó a partir de 1946 en el proyecto de desarrollo del computador IAS construido en 1952 en el Instituto para Estudios Avanzados en Princenton. Un diagrama funcional del IAS se muestra en la figura 1.10 donde se aprecia el uso de una memoria común para las instrucciones y los datos.

Introducción al Computador

11

Instrucciones y datos

Direcciones

Fig. 1.10 Diagrama de bloques del computador IAS.

A diferencia del ENIAC, el computador IAS era una máquina binaria y no decimal, 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. El IAS fue el modelo a seguir para el diseño se los siguientes computadores de propósito general. Excepto algunos casos, todos los computadores modernos mantienen la estructura de la máquina de Von Neumann. 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. En 1950 el computador abandonó los centros académicos y de investigación con la liberación de la primera máquina comercial, el UNIVAC I. (Universal Automatic Computer) fabricada por una empresa fundada en el año 1947 por John Eckert y John.Mauchly: Eckert-Mauchly Computer Corporation, la cual posteriormente se fundió con la Sperry Rand Corporation. Esta última empresa compartía con IBM el dominio de la industria de fabricación de computadores. La figura 1.11 es una fotografía del UNIVAC I en operación. A finales del los 50 salió al mercado el modelo UNIVAC II, el cual era una máquina más avanzada que su antecesor La EckertMauchly Computer Corporation, ahora la división UNIVAC de la Sperry, también inició el desarrollo de la serie de computadores con código 1100. 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

12

Fig. 1.11 El UNIVAC I. Primer computador capaz de procesar texto además de datos numéricos.

Fig. 1.12 El UNIVAC II.

Por su parte, el consorcio IBM puso en venta los modelos 604 y 701, en los años 52 y 53 respectivamente. El precio de adquisición del modelo 701 alcanzaba el millón de dólares. A mediados de la década del 50, IBM liberó el modelo 650, 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, lo que requería personal técnico altamente especializado. No existía sistema operativo y la velocidad máxima de procesamiento que alcanzaron estas máquinas fue de 40 mil operaciones por segundo. Eran equipos de grandes dimensiones, poca capacidad de memoria, de difícil mantenimiento y con un alto consumo de energía.

Introducción al Computador

13

La segunda generación: Los Transistores El desarrollo del transistor entre los años 1948 y 1952, realizado por los científicos William Shockley (1910-1989), John Baardeen (1908-1991), y Walter Brattain (1902-1987), de los laboratorios Bell de los Estados Unidos, conmocionó a la industria de la electrónica al ofrecer un dispositivo amplificador y conmutador de estado sólido con menores dimensiones, precio más bajo, y más eficiente que los tubos de vacío de uso común. 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, 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, mayor confiabilidad y menor consumo de energía, las cuales constituyen lo que se conoce como la segunda generación de computadores. La tabla 1.1 señala que un computador típico de la segunda generación, fabricado con tecnología de transistores discretos, funcionaba a una velocidad de 200 mil operaciones por segundo, mientras que una máquina de la tercera generación construida con una combinación de la tecnología SSI y MSI, era 5 veces más rápida. Tabla 1.1 Características típicas de los computadores agrupados por generación. GENERACIÓN

PERIODO

I II III

1946-1955 1956-1964 1965-1970

IV

1971-1977

V

1978 →

TECNOLOGÍA

Válvulas de vacío Transistores discretos Circuitos integradosTecnologías SSI, MSI. El µprocesador. Tecnología LSI. Diseño VLSI.

VELOCIDAD

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), 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. A pesar de su indiscutible reinado en la industria de computación, no fue la IBM quien introdujo el primer sistema de computación de estado sólido, las empresas NCR (National Cash Registers) y Radio Corporation of America (RCA), en este orden, ofrecieron a partir de 1956 sistemas de computación de capacidad baja construidos con transistores. En 1960 se incorpora al mercado de equipos con semiconductores la empresa Digital Equipment Corporation (DEC) con el modelo PDP-1, el cual se considera

Introducción al Computador

14

como el primer minicomputador en el mercado de máquinas de computación. Está máquina usó el primer terminal de video y tenía capacidad gráfica. La respuesta del consorcio IBM no llegó hasta el año 1959 con el computador IBM 7090, primer modelo de la famosa serie 7000, cuyo último miembro, el 7096 II se construyó en 1964. Cada nuevo integrante de la serie 7000 tenía mayor capacidad y menor precio que su antecesor. El modelo IBM 7090 tenía 32 Kbytes de memoria y un tiempo de instrucción igual a 2.18 µs, mientras que el IBM 7094 II, con un acceso a igual espacio de memoria, tardaba 1.5 µs en ejecutar una instrucción típica. El IBM 7093, introducido en el año 1961, usaba la técnica de segmentación para mejorar su rendimiento

Fig. 1.13 El IBM 7093 fue el primer computador en usar segmentación.

Las máquinas de esta generación podían ejecutar los programas con mayor eficiencia que sus antecesoras. Por ejemplo, el computador ATLAS desarrollado en 1962 en la universidad de Manchester usaba memoria virtual, segmentación e interrupciones. En el año 1964, el ingeniero electrónico norteamericano Seymour Cray, mientras trabajaba en Control Data Corporation (CDC) diseño los computadores CDC 6600 y CDC 7600. Considerado el primer supercomputador comercial, el CDC 6600 usaba unidades segmentación y era una máquina de carga/almacenamiento que

Introducción al Computador

15

explotó el uso del paralelismo a nivel de unidades funcionales de la CPU. Su desempeño era superior al IBM 7094.

Fig. 1.14 Computadores CDC 6700 y CDC 6700.

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

Introducción al Computador

16

La tercera generación: Los circuitos integrados El ensamblaje de las tarjetas de circuitos digitales, módulos básicos que formaban las máquinas que usaban lógica de transistores, era en general una tarea compleja y de costo elevado. El mantenimiento del producto final era un proceso tedioso y difícil, al estar las distintas unidades de los computadores compuestas de miles de transistores, resistencias, y capacitores. Con la fabricación del primer CI en el año 1959, nace la novedosa tecnología de la microelectrónica. 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. 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, y menor consumo de potencia. El sistema 360 de IBM es el exponente más destacado de esta generación. 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. 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. Este computador fue de uso difundido en las principales universidades y centros de investigación durante la década del 60.

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

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

Introducción al Computador

17

fabricados actualmente por IBM. En 1965 IBM liberó cinco modelos de la familia del sistema/360, identificados como los modelos: 30, 40, 50, 65, y 75. Tal estrategia permitió no solo adaptar la máquina a las necesidades del usuario, sino que ofreció la posibilidad que al incrementarse los requerimientos de procesamiento del comprador, éste pudiese, con una inversión razonable, adquirir un modelo más avanzado del sistema. El 360 fue diseñado de modo que un programa determinado pudiese ser ejecutado por cualquiera de los modelos, no obstante existían diferencias sustanciales en los recursos que ofrecía cada miembro de la familia, básicamente en la capacidad de memoria, velocidad de procesamiento, número de buses y de puertos de E/S. 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, con un área de memoria de 512 Kbyte, era capaz de transferir ocho bytes en forma simultanea. De hecho el modelo 75 era cincuenta veces más rápido que el 30. En la tabla 1.2 se detallan las características principales de los diferentes modelos de la familia IBM/360. Tabla 1.2. Características de los modelos del sistema IBM/360. MODELO CARATERÍSTICAS

Memoria Máxima (Kbytes) Velocidad de acceso a memoria (Mbytes/s, máx) Tiempo de ciclo del procesador (µs) Velocidad relativa Número de buses de datos Velocidad del bus de datos. (Kbytes/s, máx)

30

40

50

65

75

64 0.5

256 0.8

256 2.0

512 8.0

512 16.0

1.0 1 3 250

0.625 3.5 3 400

0.5 10 4 800

0.25 21 6 1250

0.2 50 6 1250

Además del concepto de microprograma, con el IBM 360 surgieron otras innovaciones en el campo de diseño de computadores. Por ejemplo el uso de circuitos controladores de interrupciones y de acceso directo a memoria. En el año 1968 se diseño el primer computador comercial donde se puso en práctica el concepto de memoria cache, éste fue el modelo 360/85 de IBM. A la par de aumentar la velocidad de ejecución y la confiabilidad de los computadores de gran escala de la época, la incipiente tecnología de la microelectrónica impulsó el diseño de un nuevo tipo de sistema procesador con menor tamaño, requerimientos de energía reducido, y de fácil mantenimiento, 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, tales máquinas se conocen como minicomputadores. El prototipo de este tipo de computadores fue el PDP-8 fabricado por la empresa DEC y cuyas dimensiones y cantidad de calor generado no exigían su ubicación en grandes locales refrigerados.

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, 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, lo cual representaba en cierta medida un desperdicio de recursos tecnológicos.

Fig. 1.16 El PDP-8 podía colocarse sobre un escritorio. 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, 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. 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, con su relativo bajo costo, 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. El PDP-8, por ejemplo, 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. En segundo término, era común encontrar minicomputadores fabricados con propósito específico, actuando como el elemento clave en tareas de adquisición de datos, supervisión y control de sistemas industriales complejos. Con relación a la programación, IBM introdujo el primer sistema operativo OS/360 con multiprogramación. En el año 1970, Ken Thompson y Dennis Ritchie desarrollaron el sistema operativo UNIX en los laboratorios Bell. Los computadores de esta generación alcanzaron velocidades de hasta 1 x 106 instrucciones por segundo.

Introducción al Computador

19

La cuarta Generación: el microprocesador. A diferencia de las generaciones anteriores, la fecha de transición hacia la cuarta generación no la distingue la introducción de un nuevo modelo de computador, o el uso de una tecnología novedosa en la fabricación de éstos. 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, como resultado del sostenido incremento de la densidad de integración de circuitos digitales. 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. 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, tradicionalmente usadas en computadores. A partir de la aparición del primer circuito integrado en 1959, un impresionante desarrollo en la tecnología de la microelectrónica condujo en la década del 60, a duplicar cada año el número de interruptores contenido en un CI. Este vertiginoso compás disminuyó en la siguiente década, a la aún significativa cadencia de cuadriplicarlos cada tres años. Gordon Moore, uno de los fundadores del consorcio INTEL, había predicho este comportamiento para la fabricación de chips de memoria, vaticinio hoy conocido como la famosa Ley de Moore. La figura 1.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. Se observa que es patente la validez del pronóstico de Moore, considerando que sólo el circuito integrado de 1 Mbits se negó a seguir la conducta de sus antecesores, al debutar un año antes de lo previsto. 105 16M

Capacidad en Kbits

10

4

4M 1M

103 256K

102

64K Ley de Moore 16K DRAM

10 1976

1978

1980

1982

1984

1986

1988

1990

1992

Año de inicio de ventas Fig. 1.17 Incremento de la capacidad de dispositivos de memoria dinámica con el tiempo

Introducción al Computador

20

En el curso de los siguientes veinte años, la industria del silicio se ha mantenido a este nivel. El perfeccionamiento en las técnicas de integración permitió la construcción de sistemas procesadores más pequeños, con menor duración del ciclo de instrucción, y costo más bajo. 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, y al penetrar con los minicomputadores en el sector industrial que hasta esa fecha no disfrutaba de las ventajas inherentes al uso de procesadores, fue el 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, 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, se trata de la invención del microprocesador por ingenieros de una modesta empresa de nombre INTEL, hasta entonces fabricante de dispositivos de memoria. Todo comenzó 20 años antes, en los años 50, 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, impulsó a las empresas fabricantes de semiconductores a la mejora de los componentes electrónicos de uso común para la época. La carrera espacial exigía dispositivos de menor tamaño, con bajo consumo de energía y más eficientes. 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. El primer microprocesador Pentium, por ejemplo, aloja cerca de tres millones de transistores en su encapsulado. En al actualidad un procesador Pentium IV o un Power PC tienen cerca de 200 millones de transistores. Aun cuando, en principio, la carrera a la conquista del espacio produjo un notable desarrollo de la industria de la microelectrónica; 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, junto con los elevados costos que suponía mantener un programa continuo de envío de astronautas a la exploración del espacio; 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.. En búsqueda de colocar sus productos en un mercado de más amplio espectro, las compañías de componentes electrónicos dirigieron su atención hacía el desarrollo de máquinas de calcular electrónicas de bolsillo, abriendo de esta manera un mercado potencial que significaba la introducción de cientos de miles de sus productos, como una compensación a la pérdida del reducido, pero lucrativo, mercado de aplicaciones militares y espaciales. 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, dedicada a desarrollos de sistema electrónicos de cálculo. En el

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. Este cliente japonés solicitó el diseño de dispositivos integrados para cinco nuevos modelos de calculadoras de escritorio, tarea que representaba para INTEL el desarrollo de doce CIs diferentes de propósitos específicos. En lugar de esto, se realizó el diseño de un circuito programable para satisfacer las necesidades de la empresa Busicom

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

La invención de una CPU mono pastilla no fue el resultado de un proceso de investigación planificado y desarrollado por INTEL, más bien debe considerarse que el advenimiento del dispositivo fue un afortunado producto de las circunstancias. De hecho el equipo de ingeniería de INTEL no tenía idea del potencial encerrado en el diseño que realizaron. En realidad el μP 4004 era de potencia limitada e inadecuado para el uso en el tratamiento de grandes cantidades de datos, al sólo tener un conjunto de 45 instrucciones diferentes y un espacio máximo de memoria de 4 Kbytes. Fue usado como CPU de sistemas controladores simples y en juegos de video. A finales del año 1971, INTEL inicia la comercialización del primer µP de 8 bits, el cual fue bautizado con el nombre código 8008. El dispositivo fue presentado en un encapsulado de 18 terminales en doble línea, donde alojaron los 3500 transistores utilizados en el diseño. Con acceso hasta 16 Kbytes posiciones de memoria, 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, tales como equipos periféricos y terminales de computadores.

Fig. 1.19 El microprocesador 8008 de Intel.

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. Diseñado el dispositivo, fue rechazado por la empresa contratante aduciendo que si bien el CI cumplía con la mayoría de las especificaciones, carecía de la velocidad necesaria para realizar eficientemente la tarea de presentación serial de caracteres. Ante este aparente fracaso, INTEL liberó el circuito al mercado, obteniendo sorpresivamente volúmenes de venta del chip, tan grandes como imprevistos; había nacido el microprocesador como un circuito LSI de uso estándar. 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, pero con requisitos técnicos imposibles de satisfacer con el repertorio de instrucciones y la capacidad de memoria disponibles para el µP 8008. Con la propiedad de un dispositivo en vías de convertirse en un estándar industrial, la atención del equipo de ingeniería de INTEL se enfocó en el perfeccionamiento este producto, presentando en el año 1974 el primogénito de la segunda generación de microprocesadores, el 8080. Fabricado con 6000 transistores y tecnología PMOS, el 8080 era compatible por programa con el 8008. El desempeño del nuevo producto superaba con creces el del 8008: además de disponer de un número mayor de instrucciones, un espacio de memoria de 64 Kbytes, y ser 10 veces más rápido que su antecesor, podía acoplarse directamente con componentes de la familia lógica TTL. 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, fabricación y comercialización de chips microprocesadores, posición que mantiene actualmente. Tabla 1.3. Microprocesadores de 8 bits. FABRICANTE

Signetics Motorola Intel MOS technology Rockwell Fairchild National Semiconductor

CÓDIGO

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, algunos de los cuales aun hoy se encuentra en venta. Una relación de los primeros µPs modernos de 8 bits, con los nombres códigos y la casa fabricante, se muestra en la tabla 1.3. Cada nuevo producto presentado por la empresa INTEL exhibía mayor velocidad, espacio de memoria aumentado y un repertorio de instrucciones más potente y diverso; además de requerir cada vez menos componentes para diseñar y construir un sistema µC completo a partir del µP.

Introducción al Computador

23

Para el diseño de su siguiente µP INTEL utiliza 20 mil transistores y tecnología NMOS, introduciendo en año de 1977, el microprocesador 8085 como una versión sutilmente mejorada del 8080. Con sólo dos nuevas instrucciones, igual capacidad de almacenamiento y una leve disminución de la duración del ciclo de instrucción (de 2 µs a 1.3 µs), 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.

Número de componentes para un sistema mínimo

Algunos elementos que aparecían, en sistemas basados en el 8080, como circuitos integrados externos al microprocesador, tales como el generador de reloj y el controlador de sistema, se incluyeron en el encapsulado del 8085, incorporándose además un canal de comunicación serie controlado por programa, además de cinco niveles de interrupción por hardware. Las características del 8085 y circuitos asociados permitieron la construcción de un microcomputador con sólo tres circuitos integrados, como indica la figura 1.20. Esto representó un avance significativo, si se considera que diseñar un sistema mínimo con el µP 8008 requería sesenta componentes, y treinta con el 8080. A la tercera generación de microprocesadores pertenecen, además del 8085, el µP MC6802 de Motorola, y el Z80 de Zilog, todos procesadores de 8 bits.

Año del diseño del microcomputador Fig. 1.20. Disminución en el tiempo del número de circuitos integrados necesarios para construir un sistema µC básico.

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, en año 1976, el primer microcomputador de propósito general, al cual llamaron Apple I. Esta máquina fue el modelo inicial de una fructífera empresa de fabricación de microcomputadores conocida actualmente como Apple Computer Inc.

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, el MITS Altair 8800 (8080), .Atari 400 (R6502B), PCS–80/30 (8085), TRS-80 (Z80) y el Apple II (6502), entre otros. Las velocidades de ejecución de estos μCs no superaba los 3 MHz, estando la capacidad de memoria limitada a 64 Kbytes.

Fig. 1.21 El microcomputador APPLE II.

La quinta Generación: Tecnología VLSI. 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. Inicialmente la pertenencia a una generación la fijaba el tipo de tecnología empleada en el hardware de la máquina, con independencia del sistema operativo, potencia de los programas de aplicación, o lenguajes posibles de ejecutar por el computador. A medida que los computadores evolucionaron hacia máquinas de menores dimensiones pero con alta potencia de procesamiento, el software devino en un factor de primera línea para medir el desempeño de un sistema. Tal situación junto con la aparición, cada vez con mayor frecuencia, de nuevos modelos provenientes de una gran diversidad de fabricantes, ha atenuado las fronteras entre una generación y otra, haciendo que tal clasificación sea de poca o ninguna utilidad. En este trabajo se supone que la actual y quinta generación se inicia con el desarrollo de la tecnología VLSI. Las limitaciones naturales de los μPs de 8 bits florecieron con el incremento de la complejidad de los programas de procesamiento de datos, tales como los administradores de base de datos y los procesadores de palabras, cuyas funciones cada vez más sofisticadas exigían una capacidad de memoria superior a 64 Kbytes; además del hecho que operaciones aritméticas elementales como la multiplicación y división debían ser realizadas por programas de usuario. Tales razones impulsaron el diseño de

Introducción al Computador

25

un microprocesador de mayor potencia de computo y capaz de soportar mayor capacidad de memoria. INTEL libera en abril de 1978 el 8086, un μP de 16 bits de gran potencia construido con 29000 transistores y tecnología HMOS. En virtud de un conjunto de instrucciones muy completo y versátil, y con la posibilidad de manejar hasta 1 Mbyte de memoria, ofrecía tanta capacidad de procesamiento como la de un minicomputador de la época. El 8088, compatible con el 8086, fue lanzado en el año 1979, siendo elegido por IBM como CPU del µC IBM PC original. Este dispositivo es catalogado como un µP de 16 bits pero para reducir los costos de producción, el bus de datos es de 8 bits. 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. El 8086 ejecuta una suma 3.25 veces más rápido que su antecesor el 8085, 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), cada unidad dispone de su banco de registros, su unidad aritmética y de control y operan en forma independiente. 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. 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. El 8086 y el 8088 pueden considerase los primeros μPs modernos, los cuales fueron evolucionando hasta disponer de numerosos procesadores internos que ejecutan tareas independientes con un comportamiento global que permite la ejecución de instrucciones en forma paralela. 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. Cuando en el año 1980 IBM introdujo el Computador Personal (PC) basado en el procesador 8086 ejecutando a 4.77 MHz, se desató una vertiginosa carrera tecnológica que no solo derrumbó en forma impensable los precios de los µCs, 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. 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, y Zilog con el Z8000; hasta cuando IBM concedió a INTEL el contrato de desarrollo de la arquitectura del PC, producto del cual se vendieron un millón de unidades en los dos primeros años. Puede afirmarse con seguridad que la historia de la computación personal tiene como actor principal a INTEL, no existe en la actualidad desarrollo posible en la arquitectura o programación de PCs que no esté relacionada de

Introducción al Computador

26

alguna forma con los diseños de INTEL, empresa que representa un estándar en la industria de la computación. 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. El µP 80186 fue un dispositivo diseñado para aplicaciones de control y no se utilizó como CPU de µCs, mientras que el 80286, introducido en febrero de 1982, fue el sucesor del 8086 y puede considerarse el siguiente escalón en el proceso de desarrollo de los µPs de 16 bits para propósito general. 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. 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. La frecuencia máxima de operación de la última versión del 80286 fue de 16 MHz. Durante la década de los 80 el dominio del gigante del silicio en el diseño de μPs era indiscutible, como lo indica la introducción de nuevos procesadores a ritmo acelerado. Cada producto estrenado revelaba un notable incremento del grado de integración del circuito integrado. En la tabla 1.4 se presentan las características de los µPs INTEL. El número de transistores indicado corresponde a la primera versión del modelo de microprocesador. Tabla 1.4 Características de los microprocesadores de Intel. Código

Fecha de Introducción

Frecuencia

Memoria

Transitores

MHz

4004

abr/1971

0.108

640

2.300

8008

abr/1972

0.108

16 K

3.500

8080

abr/1974

2

64 K

6.000

8086

jun/1978

5-10

1M

29.000

8088

jun/1978

5-8

1M

29.000

80286

feb/1982

8-16

16 M

134.000

80386

oct/1985

16-33

4G

275.000

80486

abr/1989

25-100

4G

1.200.000

Pentium

mar/1993

60-233

4G

3.100.000

Pentium Pro

mar/1995

150-200

64 G

5.500.000

Pentium II

may/1997

233-400

64 G

7.500.000

Pentium III

feb/1999

450-933

64 G

9.500.000

Pentium IV

nov/2000

1400-x000 64 G

42.000.000

La curva de la figura 1.22 muestra el aumento del número de transistores con las etapas de desarrollo de los µPs de INTEL, apreciándose la validez de la ley de Moore.

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. El 80486 nació en 1989 e incluía en el mismo encapsulado una CPU de 32 bits más avanzada que un 80386, un coprocesador matemático, y una memoria cache de 8 Kbytes, recursos que garantizaban la ejecución 54 millones de instrucciones por segundo (MIPS) para el modelo de 66 MHz, mejora notable si se considera que el 8086 original solo ejecutaba 2.5 MIPS.

Pentium Pro Pentium II

Transistores

80486

Pentium

80286 80386 8086 8088 Ley de Moore

8008 8080

µProcesadores

8004

.Año de inicio de ventas Fig.1.22 Comparación entre el aumento del grado de integración de los µPs de INTEL y la Ley de Moore.

En junio de 1989 y durante los siguientes 9 meses, un equipo de ingenieros de INTEL bajo la coordinación de Vinoh Dham realiza el diseño de un nuevo CPU con nombre código P-5, el Pentium o 80586. La fase de desarrollo del Pentium continuó hasta el 22 de marzo de 1993, se fecha de entrega a los fabricantes de microcomputadores de una versión de 66 MHz. Una falla presentada en la ejecución de una versión del Pentium y difundida ampliamente por todos los medios, incluyendo Internet, 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, apelando a la nueva generación de procesadores Power PC, desarrollados en conjunto por las empresas Motorola y Apple Computer, y usados en estaciones de trabajo producidas por Hewllet Packard, IBM, y Sun Microsystems. En el año 1995 existían 1 millón de máquinas fabricadas por Sun Microsystems, y 100 millones de PCs o compatibles.

Introducción al Computador

28

El Power PC es un microprocesador de arquitectura RISC (Reduced Instruction Set Computing). Este término identifica a las máquinas diseñadas con una arquitectura desarrollada a finales de los 70 por John Cocke, científico de IBM que laboraba en el Centro de Investigaciones de Georgetown. 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), 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. Aunque líder, INTEL no ha carecido de competidores en el lucrativo mercado de microprocesadores. Desde la el indiscutible éxito comercial logrado con las primeras versiones del 8086 y 8088, otras empresas fabricantes de circuitos integrados se incorporaron al desarrollo y producción de μPs. El consorcio japonés NEC (Nipppon Electric Company) realizó clones de ambos procesadores denominándolos V20 y V30 pero incrementando notablemente el rendimiento. En la actualidad existen diversos fabricantes que ofrecen μPs competitivos con los fabricados por Intel, destacándose Advance Micro Devices (AMD), Cyrix Corporation, Texas Instruments, NEC, NexGen y SGS Thompson. 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. A pesar de los esfuerzos de los competidores por desplazar al gigante del silicio, los avances en el Pentium continuaron en forma acelerada con la introducción en marzo y junio de 1995 de las versiones de 120 y 133 MHz. Hasta 1999 el Pentium III de 550 MHz era el µP más poderoso de Intel, el cual es 20 % más rápido que el μP Pentium II/450 MHz fabricado en el año 1998. Por su parte AMD, la empresa competidora, tenía el AMD-K6 como su producto estrella, lanzando posteriormente el AMD-K7 como opción ante el Pentium III. 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, construido alrededor de un procesador Pentium III funcionando a la vertiginosa velocidad de 750 MHz. En la actualidad, una máquina Pentium IV /3.0 GHz con 512 MBytes de DDR y demás periféricos, cuesta aproximadamente 2 millones de bolívares con impresora incluida. En realidad la falla encontrada en el Pentium solo diversificó la oferta de μPs, 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, la cual en general resulta en una reducción de los precios.

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. Por ejemplo existen desarrollos importantes en procesamiento paralelo, donde se ejecuta más de un programa en forma simultanea usando más de un microprocesador activo, 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. Problemas como procesamiento de imágenes requieren de una intensidad de cómputo considerable. 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 colores (3 bites por pixel), se requieren una velocidad de 24 millones de bytes por segundo. Un algoritmo simple puede requerir miles de operaciones por pixel, de modo que el uso de computación paralela es inevitable para resolver esta clase de problemas. 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. 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. 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. 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, las cuales conviene hacer a alta velocidad. Aunque los procesadores CISC tienen una instrucción de multiplicación, desafortunadamente requiere varios ciclos de reloj para su ejecución, debido a que se realiza a través de microprogramación. El procesamiento de señales en tiempo real exige la realización de cierta cantidad de cálculo en un tiempo determinado, de acuerdo con la velocidad que son transferidos los datos a procesar. De modo que los procesadores CISC no son adecuados para este tipo de cálculo, por la lentitud con la cual realizan operaciones de multiplicación. 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. 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, todos con arquitectura Harvard. En el año 1982 Texas Instruments liberó el TMS 32010. Una fuente actualizada sobre procesadores modernos es la WEB, los avances tecnológicos son de tal magnitud, diversidad y velocidad que casi es necesario redefinir el concepto de computador. Por ejemplo, existe una máquina japonesa constituida

Introducción al Computador

30

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

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, 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. El computador es usado en todos los campos donde se requiere resolver problemas relacionados con el procesamiento de información. En general, la solución de tales problemas exige la realización de las funciones mostradas en el diagrama de la figura 2.1. Datos

Adquirir

Procesar

Almacenar

Presentar

Resultados

Fig. 2.1 Funciones de un sistema de procesamiento de 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; procesada, codificada, decodificada, evaluada, ordenada, asociada, o combinada para generar nuevas representaciones de información; almacenada en un subsistema de memoria donde puede ser recuperada y usada; y presentada, los resultados del procesamiento de los datos de entradas pueden mostrarse en forma apropia-

Organización del Computador

32

da para ser entendida por humanos o como comandos que permiten la realización de algún trabajo. En un sistema de procesamiento de información son vitales los elementos periféricos encargados de vincular al sistema con su entorno. Los captadores de entrada o sensores y elementos asociados acondicionan la variable física al lenguaje entendido por el computador, mientras que los periféricos de salida permiten presentar o transmitir los resultados del procesamiento, todas estas funciones son controladas por un programa almacenado en memoria.

2.1 ESTRUCTURA FUNCIONAL DEL COMPUTADOR Un sistema capaz de realizar las funciones básicas de procesamiento de datos representadas en la secuencia de bloque de la figura 2.1 es el computador, el cual de hecho se define como un procesador de datos que ejecuta operaciones aritméticas y/o lógicas sin que requiera comúnmente intervención humana durante la ejecución del programa. CCPPU U

MEMORIA

SALIDAS

UNIDAD LÓGICA Y ARITMÉTICA

UNIDAD DE CONTROL ENTRADAS

RELOJ

Fig. 2.2 Estructura simplificada de un computador.

Un computador es en esencia un sistema digital que resulta de la combinación de una unidad secuencial sincrónica de control programable, una unidad para la ejecución de operaciones lógicas y aritméticas y una sección de memoria. 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, el cual no hace referencia a la memoria principal. 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, las

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. Modificar las especificaciones de funcionamiento del computador solo requiere almacenar en la memoria una nueva secuencia de instrucciones. En la literatura especializada se acostumbra agrupar la 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. Un computador típico incluye los elementos propuestos en la estructura básica de la máquina de Von Newmann, cuyo diagrama en bloques se muestra en 2.1. Aunque John Von Newmann propuso este esquema a mediados de siglo ha perdurado, aunque evolucionando sustancialmente en los últimos 50 años, como el modelo a seguir por muchos de las máquinas de cómputo modernas. Como se observa en la figura 2.2, los componentes básicos de un computador son:

La Unidad Lógica y Aritmética. (ALU) • La Unidad Central de Proceso (CPU) La Unidad de Control. •

La Memoria



La Unidad de Entrada/Salida. , y



El Generador de Reloj.

(CU)

2.1.1 La unidad central de proceso Es la esencia del sistema, su 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. Las operaciones aritméticas y lógicas requeridas por la instrucción son ejecutadas por la ALU, estas operaciones generalmente son realizadas por medio de lógica programada, e incluyen: suma, sustracción, multiplicación y división; además, de las funciones lógicas: AND, OR, NOT, XOR y desplazamientos y rotaciones. Los operandos necesarios así como el resultado son almacenados temporalmente en registros internos de la CPU capaces de conectarse a las entradas de la

Organización del Computador

34

ALU. Dentro de la CPU existen también un grupo de registros de propósito específico cuyas funciones se expondrán más adelante.

Registros

Direcciones

ALU

Datos

Unidad de control

Control

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

2.1.2 La unidad de control Dirige la secuencia de operaciones del sistema. La CU controla la búsqueda, transferencia a la CPU, decodificación y ejecución de las instrucciones del programa almacenado en la memoria del sistema. De acuerdo con los resultados de la interpretación de la instrucción, la CU envía señales de control internas que sincronizan la transferencia de datos entre registros, y entre éstos y la ALU. Además, genera señales de control externas dirigidas a las restantes unidades del sistema. El control del flujo de datos por las líneas de interconexión del sistema, y la interpretación de las señales de control que llegan a la CPU, son también responsabilidad de la CU.

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

(b)

Fig. 2.4 a) Conexión del circuito l μP b) Información almacenada

Organización del Computador

35

En la figura 2.4.a se muestra un esquema simple de conexión de una memoria de 1024 posiciones al CPU. El procesador entrega la dirección (A9-A0) de la celda de memoria fuente o destino de la información a transferir, 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. El dato es transferido desde o hacia la CPU a través del bus bidireccional de datos. Una memoria puede concebirse como un arreglo de biestables organizados en celdas de 1, 4, 8, ó 16 bits, cada una de las cuales tiene una dirección específica. La figura 2.4.b es una representación de una memoria de 1024 (0000-1023) posiciones de 8 bits. Existen distintos tipos de memoria de acuerdo con el tipo de acceso y la tecnología usada en la fabricación. La memoria principal en computadores es del tipo de acceso aleatorio (RAM), 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, 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. 2.1.4 La unidad de entrada/salida Representan el canal de comunicación del computador con el mundo exterior. A través de las unidades de E/S se intercambia información con dispositivos periféricos conectados al computador. La naturaleza de la información es variada. Los datos y comandos provenientes de un teclado llegan a la CPU desde la unidad de entrada, en forma de un código interpretable por la CPU. Los resultados de la ejecución de un programa pueden ser dirigidos a una impresora por medio de una unidad de salida.

2.1.5 El generador de reloj Constituye la base de tiempo maestra del sistema, siendo usado por la CU para sincronizar la secuencia de operaciones del computador, generando todas las señales necesarias para la transferencia interna y externa de información y para el funcionamiento de la ALU. Como se observa en la figura 2.2, 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, 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. Existen tres tipos de buses: direcciones, datos, y control. Por el primero circulan las direcciones de la fuente o destino de la información que se transfiere, la cual se transmite por el bus bidireccional de datos. El bus de control lo forman las señales necesa-

Organización del Computador

36

rias para el control de la máquina y del intercambio de información con los periféricos, por ejemplo la entrada de reset y las salidas de lectura y escritura, forman parte del bus de control. La ejecución de un programa implica la participación de todas las unidades del computador. La CPU busca las instrucciones en la memoria, las decodifica y genera las señales de control del sistema (UC), ejecuta, si el programa lo requiere, operaciones aritméticas y/o lógicas (ALU). Los datos y resultados son transferidos a y desde la CPU por las unidades de E/S. La señal de tiempo que sincroniza todo el proceso la suministra el reloj del sistema. Aunque el modo de operación de la máquina de Von Newmann es de naturaleza secuencial, lo cual significa que el programa está almacenado en forma ordenada en posiciones consecutivas de memoria, y así es ejecutado. La máquina puede alterar la secuencia de la ejecución, buscando la siguiente instrucción en una posición de otra área de memoria. Esta capacidad, junto con el concepto de programa almacenado constituyen los fundamentos de las sofisticadas máquinas diseñadas y construidas en la actualidad.

2.2 LAS INSTRUCCIONES DEL COMPUTADOR La ejecución de toda instrucción se realiza en dos fases fundamentales: búsqueda y ejecución. 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. Instrucción a la CPU BÚSQUEDA

EJECU-

Ejecución culminada

CIÓN

Fig. 2.5 Fases de ejecución de una instrucción.

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. Como se observa en la figura 2.5 durante la fase de ejecución la instrucción va al interior del procesador, culminada la fase de ejecución se inicia la búsqueda de la instrucción siguiente. El tiempo que el CPU dedica al procesamiento de una instrucción depende del tipo de instrucción. En el capítulo 4 se analizarán detalladamente las fases de ejecución de las instrucciones de un microprocesador. 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. 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. Si bien no existen en la ac-

Organización del Computador

37

tualidad, ni existieron hace 40 años, limitaciones de orden técnico para fabricar un computador de 4 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. Para simplificar la estructura del procesador conviene disminuir el número de bits por instrucción, lo cual es equivalente a reducir la cantidad de información que contiene la instrucción de 4 direcciones. De modo que la única posibilidad es eliminar algunas o todas las zonas del campo de dirección. No se considera la opción de mantener cada instrucción en una posición de memoria, porque la memoria debería tener celdas de 80 bits, lo cual exigiría que el bus de datos, los registros internos del procesador, y la ALU fuesen de tal longitud. 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. D79

Código de Operación

D0

Dirección Operando 1

Dirección Operando 2

Dirección Resultado

D63

(a)

D0

Código de Operación

Dirección Operando 1

Dirección Operando 2

D47

Dirección Resultado

(b)

D0

Código de Operación

Dirección Operando 1

D31

Dirección Operando 2

(c)

D0

Código de Operación D15

Dirección Instrucción Siguiente

Dirección Operando

(d)

D0

Código de Operación

(e)

Fig. 2.6 Formato de instrucciones del computador. (a) Cuatro direcciones. (b) Tres direcciones. (c) Dos direcciones. (d) Una dirección. (e) Sin dirección

Para obtener un computador de tres direcciones con el formato de instrucción de la figura 2.6.b, se considera que el programa a ejecutar el computador se almacena en memoria como una secuencia de instrucciones que ocupan posiciones adyacentes, es posible entonces suprimir la zona del campo de direcciones que indica la 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, tal registro se denomina contador de programa. Si es necesario romper la secuencia normal del programa para ejecutar una instrucción en otra área de la memoria, 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. El efecto de la ejecución de tal instrucción es sustituir el contenido del contador de programa por el campo de dirección.

Organización del Computador

38

Para suprimir otros campos de la instrucción, debe incorporarse al procesador registros internos que contengan el o los operandos que se requieren para ejecutar la instrucción, y el resultado de ésta. Por supuesto, 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.

Fig. 2.6 Reducción del número de bits por instrucción.

Eliminando la zona de dirección del resultado se tiene un computador de dos direcciones como se aprecia en la figura 2.5.c. Esto puede lograrse si el resultado se almacena en la dirección que ocupa uno de los operandos, destruyendo el contenido original (el operando) de la posición de memoria en cuestión. 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. 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. Queda claro que el computador de dos direcciones debe tener al menos dos registros internos, el contador de programa y un registro para almacenamiento temporal. Como indica la figura 2.5.d, un computador es de una 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. Una instrucción de transferencia de datos se encargará de trasladar un operando desde la memoria al registro interno o Acumulador (A). 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. Esto no significa mayor problema debido a que en memoria existe una copia

Organización del Computador

39

del operando original en A. El resultado se deposita en memoria por medio de una instrucción de transferencia de datos desde el A hasta el dispositivo de almacenamiento. 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, 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.5.e.

2.3 CLASIFICACIÓN DE LOS COMPUTADORES Definir grupos que abarquen los distintos computadores es una tarea difícil. Las máquinas de cómputo se fabrican en diferentes tamaños y bajo dos categorías, de acuerdo con la naturaleza de la información que procesan. La primera corresponde al Computador Analógico, el cual es un sistema electrónico que procesa señales de tensión y corriente que representan variables físicas. Esta máquina es construida en base a dispositivos amplificadores operacionales, los cuales son capaces de ejecutar un gran número de operaciones matemáticas. El campo de aplicación del computador análogo es reducido, fue utilizado en el pasado en actividades militares relacionadas con afinación de la puntería de cañones y aviones bombarderos, en el primer piloto automático para aeronaves, y en simulación de sistemas de control industrial. La imprecisión en los resultados inherente a un sistema analógico, y el hecho que estas máquinas eran diseñadas para la ejecución de una tarea y ninguna otra, produjo el rápido decaimiento y obsolescencia de esta tecnología en la producción de computadores. La otra categoría, corresponde al computador digital (a partir de aquí, llamado computador), 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, 32, 64 ó más. Además, el increíble desarrollo de la tecnología de integración de circuitos digitales, garantiza la construcción de máquinas con estructura más simple y eficiente que su contraparte analógica. Los expertos del área acostumbran a clasificar los computadores en tres grupos principales: Computadores grandes o Mainframes, Minicomputadores o Estaciones de Trabajo, y Microcomputadores, en función de sus dimensiones y velocidad de operación. Tal clasificación es excesivamente amplia, y su validez está sujeta al desarrollo altamente dinámico de la industria del computador. Una máquina clasificada

Organización del Computador

40

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

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. En este capítulo, se presenta desde una óptica funcional, la arquitectura interna de un microprocesador genérico justificando la presencia de cada registro o unidad integrados en el dispositivo. Se considera necesario que el estudiante conozca con cierto detalle la estructura interna del dispositivo y se cree suficiente que el alumno pueda distinguir y comprender el modo de funcionamiento de los distintos grupos de circuitos lógicos que conforman al µP y que contribuyen a realizar una tarea específica, tales circuitos se conocen como unidades funcionales.

3.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, según las especificaciones fijadas por la arquitectura de la máquina. La Arquitectura, por su parte, engloba aquellas propiedades del sistema que son determinantes del modo en el cual se ejecutan las instrucciones del programa. El conocimiento de las particularidades arquitectónicas del computador es un recurso esencial para que el programador desarrolle el soporte lógico de las aplicaciones. Atributos típicos de la arquitectura son: • Conjunto de instrucciones, • Longitud de palabra, • Modos de direccionamiento y • Técnicas de gestión de entrada y salida.

Introducción al Microprocesador

42

• Conjunto de instrucciones • Longitud de palabra • Modos de direccionamiento • Técnicas de gestión de E/S

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

Aquellos aspectos del sistema ocultos para quien escribe el código, constituyen la organización. En la figura 3.2 puede observarse el diagrama funcional de una tarjeta de video con información no perceptible por el programador. Este no requiere conocer el tipo de tecnología usada para fabricar la memoria principal o de video, 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.

Fig. 3.2 Los detalles de la tarjeta de video y el modo de interconexión con el µP son transparentes para el programador.

Ocurre a menudo que las máquinas ofrecidas por un fabricante determinado tengan la misma arquitectura pero estén organizadas en forma diferente. Esto signifi-

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. 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. En este sentido, un diseñador lógico cumple funciones parecidas a un arquitecto, al disponer de bloques en forma de μPs, circuitos o bancos de memorias, dispositivos controladores, y líneas de interconexión los cuales deben organizarse en un sistema capaz de realizar las funciones características de un microcomputador. Los elementos que se combinan para constituir un μC pueden agruparse en dos categorías: Hardware y Software. La parte de la máquina que no acepta modificaciones, solo expansiones, constituye el hardware del sistema. Es el soporte físico, y lo forman los circuitos integrados, los distintos componentes electrónicos, y la tarjeta de circuito impreso que permite la interconexión eléctrica. El término software se refiere a los algoritmos, instrucciones, y programas que dirigen el funcionamiento de la máquina. Como soporte lógico, el software puede ser modificado de acuerdo con las necesidades de la aplicación. Es conocido que la CPU de un microcomputador es un circuito integrado VLSI conocido como microprocesador, el cual es equivalente a la unidad central de procesamiento de un computador de una dirección. Para que un chip sea considerado un μP contener al menos las siguientes unidades: Registros internos, Unidad Lógica y Aritmética y Unidad de Control, como ilustra el diagrama de la figura 3.3.

REGISTROS

ALU

UNIDAD DE CONTROL

Fig. 3.3 Componentes básicos de un microprocesador

Un sistema microcomputador completo está constituido por la CPU, la memoria y las unidades de E/S. El μP es diseñado para operar como un procesador secuencial, controlando y ejecutando un conjunto específico de instrucciones almacenadas

Introducción al Microprocesador

44

en la memoria del μC. Para realizar esta tarea, un μP típico contiene: la unidad de control, la unidad lógica y aritmética, y un grupo de registros para el almacenamiento temporal de la información. Un registro denominado contador de programa (PC) es el encargado del barrido del programa. Cada vez que el μP busca una instrucción en memoria, el PC se incrementa en uno para apuntar a la siguiente instrucción. Si en el encapsulado del circuito integrado se encuentran además de las unidades que conforman un μP, algún tipo de memoria y unidades de E/S como ilustra la figura 3.4, se trata de un microcomputador monopastilla o simplemente Microcontrolador (μctrl). Estos dispositivos se diseñan para uso en aplicaciones específicas de control a diferencia del μP, destinado aplicaciones de propósito general.

CPU

PUERTOS

EPROM

RWM TIMERS

Fig. 3.4 Microcomputador en una pastilla.

Los μCtrls de 8 bits son a menudo usado como controladores de teclado de microcomputadores (un 8049 controlaba el teclado del PC compatible IBM), en surtidores de gasolina, hornos de microondas, receptores de TV y otros electrodomésticos, en control de ascensores, controladores de tráfico urbano, y muchas otras aplicaciones con complejidad media. Los dispositivos de 16 y 32 bits se encuentran en reguladores de sistemas de frenado antibloqueo de automóviles, en el control de motores de inyección directa, en controladores inteligentes de discos, en sistemas de robots, en equipos de audio y procesamiento de imágenes y en el control de manipuladores industriales. 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.

Introducción al Microprocesador

45

Es común que toda empresa fabricante de μPs produzca también μCtrls. Por ejemplo, Motorola fabrica las series M680x y M68H11/12, Siemens ofrece los modelos C167 y C167CR, y National Semiconductor las series COPx00 y NS8050. Uno de los fabricantes más populares es la empresa MICROCHIP, la cual ofrece una gran diversidad de modelos adaptables para aplicaciones de baja, media y alta complejidad. Los modelos de la serie PIC18xxx son los de más alto desempeño.

3.2 ARQUITECTURA INTERNA DEL MICROPROCESADOR El camino habitual para introducir la arquitectura de μC en un curso básico de microprocesadores, consiste en utilizar un diagrama funcional de la máquina especificando la tarea que desempeña cada elemento, en forma similar a como se presentó en el capítulo 2 la teoría básica del computador. 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, consiste en especificar una tarea de cálculo simple y desarrollar un diagrama en bloques de una máquina capaz de ejecutarla. Para iniciar el estudio del µP se usa un proceso de síntesis, desarrollado paso a paso, de una máquina hipotética que ejecuta un conjunto mínimo de instrucciones. De esta forma es posible establecer las unidades funcionales que se requieren para la ejecución de una instrucción típica, considerando que lo esencial es exponer en forma muy general la función que cumple cada unidad del µP, más que detenerse en los detalles de diseño de cada circuito. El desarrollo de la máquina teórica propuesta no solo conduce a establecer los elementos internos constituyentes de la CPU, sino que a su vez permite introducir los diferentes elementos que conforman la arquitectura de un μC básico. 3.2.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.1. Tabla 3.1. Conjunto de Instrucciones y código de operación asociado.

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

Introducción al Microprocesador

46

En principio se requiere escribir un programa para sumar dos números enteros N1 y N2. 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, tal como ilustra la figura 3.5. El problema consiste en establecer los componentes de la caja negra de la figura 3.5, de modo que pueda ejecutar un programa que lea dos números desde los interruptores, ejecute la operación aritmética y presente el resultado en los indicadores luminosos. El conjunto de instrucciones del microprocesador El número binario denominado código de operación (OC) en las instrucciones de la tabla 3.1 corresponden a los dos bits de mayor peso del código de instrucción, el cual tiene una longitud de 8 bits. Este arreglo de bits permite a la CPU distinguir la instrucción y realizar la acción ordenada por ésta. Para simplificar la tarea del programador, es usual que cada instrucción se identifique con una palabra, abreviatura o siglas que en lenguaje inglés expresen la función que realiza la instrucción. Por ejemplo SBB r (Subtract Register with Borrow) produce que el contenido del registro r y la bandera de acarreo sean restados del contenido del acumulador. VCC

R9-R16 270 Ω

R1-R8 5.1 KΩ

S0-S7

D0-D7

?

3.5. Diagrama general del sistema propuesto.

En el μP hipotético, ADD ejecuta la operación de adición de dos números binarios, mientras que SUB realiza la substracción. 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, respectivamente. La unidad de cálculo Para ejecutar las instrucciones ADD y SUB se requiere una Unidad Aritmética Lógica o ALU, la cual como se sabe es la parte de la CPU encargada de realizar operaciones de este tipo.

Introducción al Microprocesador

47

Registro A

Registro B

(A)

(B)

Unidad Lógica y Aritmética

(A+B)

Fig. 3.6 La Unidad Lógica Aritmética, el Acumulador y el registro B de propósito general.

Debido a que ambas instrucciones involucran dos números binarios, se requieren dos registros para almacenarlos: el acumulador (A) y un registro de propósito general B. Ambos registros deben conectarse a las entradas a 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, como puede observarse en la figura 3.6. El medio de comunicación entre los registros y la ALU, ambos de ocho bits, es el camino interno de datos del µP. Cada línea de interconexión de la figura 3.6 representa los 8 bits del bus interno del µP.  Periférico de entrada Si se escribe un programa para realizar una operación con dos números binarios de ocho bits, los operandos deben ser obtenidos desde el exterior del μP y cargados en los registros de entrada a la ALU. La instrucción IN permite transferir datos desde el periférico de entrada hasta el registro A conectado a la entrada izquierda de la ALU. La ejecución de IN resulta en que el byte suministrado por el periférico de entrada es copiado en el registro A, 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. En la figura 3.7 se muestra el periférico1 de entrada conectado directamente al registro acumulador, en la práctica la conexión entre dispositivos externos al sistema y la CPU se realiza mediante un registro externo. El término entrada/salida (E/S) cubre toda transferencia o intercambio de datos entre el µP y un dispositivo externo. Durante una operación de entrada, los datos no son transferidos directamente desde el periférico al acumulador, sino que un

Introducción al Microprocesador

48

circuito digital, denominado en forma genérica puerto de entrada, 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.

S0-S7

Periférico 1

Registro A

Registro B

(A)

(B)

Unidad Lógica y Aritmética

(A+B)

Fig. 3.7 Un periférico de entrada permite introducir datos al μC.

A un μC se le conectan distintos dispositivos de entradas de acuerdo con la aplicación a la cual está destinado, pero sólo uno de éstos puede comunicarse a la vez con el µP. 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. En este caso, al puerto donde se conectan los interruptores se le asigna la dirección 1.

Operación de entrada

Operación de salida

Fig. 3.8 Operaciones de E/S.

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, • 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. Dos puertos de entrada no pueden conectarse simultáneamente al bus sin que ocurra un deterioro de la información transferida. • Para puertos de salida tal consideración reviste importancia cuando varios equipos externos que funcionan conjuntamente con el μP están conectados al bus, debido a que la carga tiene efecto acumulativo.

En su forma más sencilla, 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, se usa un registro latch. La estructura de puerto de entrada básico se presenta en la figura 3.9. 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, 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, 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. La activación de la línea de selección de puertos, ocurre cuando se está realizando una operación de lectura en el puerto como respuesta a la ejecución de una instrucción IN. BUS DE DATOS

D7 DISPOSITIVO DE ENTRADA

BUFFER DE TRES ESTADOS

REGISTRO DE 8 BITS

D6

D0

SEL

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

El puerto de entrada necesario para conectar los interruptores S0-S7 no requiere un registro latch porque el estado 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. Un circuito práctico para introducir los datos a la CPU hipotético se presenta en la figura 3.10. Los interruptores se conectan al bus de datos del µP por medio de ocho buffers de tres estados.

Introducción al Microprocesador

50

VCC

R1-R8

Puerto 01

CON1

S0 - S7

Fig. 3.10 Puerto de entrada al μP.

Introducción al Microprocesador

51

De este modo, la entrada de selección PE01 , activa en nivel bajo, habilita la lectura y carga en el acumulador del estado lógico de S7-S0. El bus de datos del µP se conecta al conector CON1.

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, como se indica en la figura 3.11. Código de operación

Instrucción IN

Operando Puerto 1

Código de operando

D7

D6

D5

D4

D3

D2

D1

D0

1

0

X

X

X

X

0

1

Fig. 3.11. Un operando es necesario para la instrucción IN puerto.

Al ser el μC de ocho bits (un byte), el formato binario de la palabra de la instrucción contiene igual número de bits. En este caso los bits D7 y D6 especifican el OC, mientras que D1 y D0, corresponden al código de operando. Los bits D5-D2 se definen posteriormente. La acción resultado de la ejecución de la instrucción IN 01, es transferir al acumulador la palabra binaria presente en los interruptores del periférico 1 de entrada, 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. En la figura 3.12 se ilustra la disposición de los LEDs en el conjunto del sistema microcomputador. Para conectar los indicadores luminosos al bus de datos del microprocesador es necesario un puerto de salida, al cual se le asigna la dirección 2. Como consecuencia, la instrucción OUT 02 transferirá el contenido del registro A, igual al resultado de la suma, a un periférico con dirección 2, esto es, (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 se observa el la figura 3.13 se usan los dos bits de menor peso del código de la instrucción.

Introducción al Microprocesador

52

Periférico 2

Periférico 1 OUT

IN

(A)

Registro B

Registro A (A)

(B)

Unidad Lógica y Aritmética

(A+B)

Fig. 3.12. Un periférico de salida permite visualizar el resultado de la operación.

Las características operacionales del periférico conectado al sistema determina cuan complejo es el circuito de interconexión, pudiendo requerirse desde simples registros y/o buffers de tres estados hasta circuitos LSI programables de propósito general. Para el puerto de entrada fue suficiente con conectar los interruptores al bus de datos del μP por medio de buffers de tres estados considerando que el estado lógico de los bits de entrada es retenido por los interruptores. Código de operación

Instrucción OUT

Operando Puerto 2

Código de operando

D7

D6

D5

D4

D3

D2

D1

D0

1

1

X

X

X

X

1

0

Fig. 3.13 Un operando es necesario para la instrucción OUT puerto.

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, 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. En la práctica, 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, como ilustra la figura 3.14. El diagrama eléctrico del puerto de salida para la máquina bajo síntesis es el de la figura 3.15, donde se observa que, durante la operación de escritura a puerto, la activación de una señal de selección de puerto de salida 2 PS02 permite la carga del

Introducción al Microprocesador

54

contenido del bus de datos en el registro de salida y la presentación del resultado de la suma. BUS DE DATOS

D7 D6 REGISTRO DE 8 BITS

D0

DISPOSITIVO DE SALIDA

CLK

SEL

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

El conjunto extendido de instrucciones Establecida la forma en la cual el µP obtiene los operandos desde los interruptores lógicos y como presenta el resultado, es necesario considerar que la suma que debe realizar la máquina requiere dos números N1 y N2 , los cuales deben cargarse en los registros A y B conectados a las entradas de la ALU, para que ésta pueda ejecutar la operación aritmética. 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. Proveer un mecanismo para mover el contenido de A al registro B, implica introducir una nueva instrucción: MOV (mover). Aunque MOV carece de operandos, se asume que su ejecución implica la transferencia del contenido de A hasta B, esto es, (B) ← (A) Es claro que la ausencia de operandos en la nueva instrucción de transferencia denominada MOV, se debe a que el único registro interno del µP que puede actuar como destino, es el B. En caso de la existencia de más registros, debe añadirse el operando respectivo al código de la instrucción. Por ejemplo: MOV r copia el contenido del A al registro r. Al incorporarse MOV al conjunto de instrucciones del μP, se requieren ahora tres bits como mínimo para especificar el código de operación. La tabla 3.2 presenta el conjunto expandido de instrucciones y los nuevos códigos de operación.

Introducción al Microprocesador

55

VCC

R9-R16

D7-D0

Puerto 02

CON2

D7 D6 D5 D4 D3 D2 D1 D0 CLK OE

Fig. 3.15 Puerto de salida del μP

Q7 Q6 Q5 Q4 Q3 Q2 Q1 Q0

Introducción al Microprocesador

56

Tabla 3.2. Conjunto de instrucciones incluyendo MOV. Código de operación Instrucción Operando ADD SUB IN Puerto 1 OUT Puerto 2 MOV

D7

D6

D5

D4

D3

D2

D1

D0

0 0 1 1 0

0 1 0 1 1

1 1 1 1 0

X X X X X

X X X X X

X X X X X

X X

X X

0 1

1 0

X

X

Con el conjunto de instrucciones disponible es posible escribir un programa que realice la suma de dos números. La secuencia de instrucciones siguiente realiza esta tarea.

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

El primer operando N1 es obtenido desde los interruptores y transferido al registro B, mientras que N2 se mantiene en el acumulador. La instrucción ADD ejecuta la operación (A) Å (A) + (B) o (N1 + N2 ) Å (N2 ) + (N1) . El resultado de la suma se envía al puerto de salida por medio de la instrucción out 2.

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, caracteres y cualquier otro tipo de información en un arreglo de bits denominado Palabra. La longitud o número de bits que componen una palabra varía de un sistema a otro. Un bit (0 ó 1) se define como la cantidad mínima de información posible de expresar, mientras que una secuencia de 8 bits constituye un byte, y dos bytes una palabra, como se especifica el patrón mostrado en la figura 3.16a. Un formato de palabra doble (cuatro bytes) lo usan los microprocesadores fabricados por INTEL: 386 y 486, mientras que los µPs Pentium usan palabras cuádruples (ocho bytes). En la máquina bajo desarrollo y en el microprocesador INTEL 8085A, casos donde el ancho del bus de datos es de ocho bits, se considera una palabra formada por un byte como se observa en la figura 3.16b.

Introducción al Microprocesador

57

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

Que un byte contenga ocho bits no es, en modo alguno, una elección realizada al azar. El microcomputador debe comunicarse con distintos periféricos como teclados y monitores, los cuales entregan y reciben información alfanumérica. El alfabeto, los números, símbolos y algunos comandos forman un conjunto de aproximadamente 130 elementos, los cuales pueden representarse el código de 7 bits (27=128) ASCII estándar (Standard Code for Information Interchange). Tabla 3.3. El código ASCII estándar. D3-D0

D6-D4

0000

0

0001

1

0010

2

0011

3

0100

4

0101

5

0110

6

0111

7

1000

8

1001

9

1010

A

1011

B

1100

C

1101

D

1110

E

1111

F

K ETB

→ 7510 → 2310

000 0

001 1

010 2

011 3

100 4

101 5

110 6

111 7

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

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

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

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

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

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

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

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

010010112 000101112

(4B16) (1716)

(End of Transmission Block)

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

Introducción al Microprocesador

59

pueden usarse para almacenar las instrucciones, más bien están diseñados para el almacenamiento temporal de información, además el número de registros internos es muy reducido como para contener un programa. Por lo tanto es necesario conectar un circuito externo al μP que actúe como la memoria del sistema. Este nuevo componente de la máquina puede observarse en el diagrama funcional de la figura 3.16.

Periférico 2

Periférico 1 OUT

IN

(A)

Registro A (A)

Registro B (B)

Unidad Lógica y Aritmética

Memoria

(A+B)

Fig. 3.16. La memoria contiene el programa.

Las memorias que se usan en la actualidad para el propósito especificado, son circuitos integrados LSI diseñados para almacenar una gran cantidad de información en un número específico de registros, generalmente con entradas y salidas comunes. Existen diversos tipos de memorias caracterizadas por: la forma de acceso de los datos, el modo de almacenamiento y la tecnología empleada en su fabricación. Para el sistema en síntesis, se supone que se usa un circuito integrado de memoria que permite el almacenamiento del programa y su posterior recuperación. 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. En un circuito integrado diseñado para almacenar información, es posible cargar las instrucciones del programa o los datos necesarios para la ejecución del programa. Cuando se realiza esta acción, se habla de una operación de escritura, mientras que la obtención de la información contenida en una determinada celda implica una operación de lectura de la memoria. Cada registro individual de la memoria se conoce como posición o celda memoria, siendo cada registro de uno, cuatro u ocho bits. Cada celda tiene asignada una dirección específica, de modo que para lograr acceso a una determinada posición se requiere especificar la dirección correspondiente. La

Introducción al Microprocesador

60

figura 3.17 muestra el símbolo lógico de un dispositivo de memoria de lectura/escritura y en la figura 3.18 se observan los componentes internos del circuito integrado.

Líneas de Direcciones n

Líneas de E/S de Datos m

MEMORIA

Líneas de Control

2

Fig. 3.17. Símbolo de un circuito de memoria.

Fig. 3. 18 Arquitectura interna de una memoria.

Introducción al Microprocesador

61

Las líneas de acceso típicas de un circuito de almacenamiento de lectura / escritura, son: • n líneas de direcciones. • m líneas de E/S de datos, y • Algunas líneas de control.

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, la dirección 0 corresponde a la primera posición y la dirección 2n-1 identifica a la posición final. Para tener acceso a P = N x 1 Kbytes posiciones se requieren: n = log 2 (N) + 10 Líneas de direcciones.

Por ejemplo, un circuito de 8 Kbytes debe tener: 3

n = log 2 (2 ) + 10 = 13 Líneas de direcciones,

y un chip de 256 bytes (¼ Kbytes) requiere:

( )

⎛ 1 ⎞ −2 + 10 = log 2 2 + 10 = 8 Líneas de direcciones. 2⎟ ⎝2 ⎠

n = log 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. El valor de m es variable en dispositivos comerciales, pudiendo ser, como se dijo, de 1, 4 u 8 bits. En el caso de la máquina hipotética conviene una memoria con 8 líneas de datos por ser el μP de tal ancho de palabra. Si se usan chips con 4 líneas de E/S de datos, se requieren dos chips para el almacenamiento de las instrucciones. Las líneas de control son dos para la memoria de la figura 3.18: R/ W (Read/Write), cuyo nivel lógico especifica si se realiza una operación de lectura/escritura (1: Lectura, 0: Escritura), y CS (Chip Select) que permite la selección del circuito. Un nivel lógico alto en esta entrada, coloca en estado de alta impedancia las líneas de E/S de datos. El decodificador de direcciones en la figura 3.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 describir el modo de funcionamiento del circuito de almacenamiento, considere la realización de una operación de lectura. Los pasos a seguir para esta tarea son:

62

Introducción al Microprocesador

1. Aplicar la dirección a las entradas A0 – An-1 . 2. Seleccionar la memoria colocando un nivel lógico bajo en la entrada CS . 3. Presentar un nivel lógico TTLalto en la línea R / W . 4. Transcurrido el tiempo de acceso, la memoria coloca el byte en las salidas de datos D0 -D7.

A0-An-1

Dirección válida

CS

R/ W

D0-D7

Datos válidos

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

Una de las características que distinguen a un circuito de almacenamiento es la capacidad de la memoria: Esta es: N = 2n x m,

donde:

N = Capacidad total en bits. 2n = Número de posiciones. m = Ancho de la palabra o números de líneas de datos.

Así, la expresión 256 x 8 = 28 x 8 = 2048 bits, especifica un chip de 256 posiciones organizadas en palabras de 8 bits. Para la máquina hipotética se elige un circuito con capacidad de 512 x 8, cuyo símbolo se muestra en la figura 3.20. A0 – A7 IO0 - IO7

CE OE

WE MODO

Lectura Escritura Inhibir

Líneas de direcciones E/S de datos Seleccionar Chip Habilitar Salida Habilitar Escritura WE CE

OE

E/S

VIH

VIL

VIL

O7 -O0

VIL

VIL

x

I7 -I0

VIH

x

VIH

Z

Fig. 3.20. Circuito de memoria de lectura/escritura de la máquina hipotética.

63

Introducción al Microprocesador

El circuito integrado seleccionado para el sistema bajo síntesis tiene: 9 líneas de direcciones A8 - A0 para proveer acceso a las 512 celdas de almacenamiento, 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 , OE y WE . Para una operación de entrada de datos, la señal de habilitación de escritura WE debe ponerse en nivel lógico cero, mientras que para leer los datos almacenados se pone a cero la señal de habilitación de salidas OE . En ambos casos la entrada de selección de chip CS debe estar en estado bajo. A la izquierda de la figura 3.20 se presenta información sobre los modos de funcionamiento del circuito de 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, ocho líneas de datos y terminales para generación de comandos de control de lectura y escritura. 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

511

xxxxxxxxx

Nemónico in 01 mov in 01 add out 02

Fig. 3.21. El programa 1 se carga en la memoria de la máquina. Los bits del código de instrucción aun no definidos se suponen cero lógico.

El programa de suma del ejemplo 3.1 se carga en la memoria del sistema, mostrándose en la figura 3.21 una imagen de la forma en que la secuencia de instrucciones en formato binario ocupa la memoria. Ejecución de las instrucciones El procesamiento de cada instrucción se realiza durante un ciclo de instrucción, el cual consta de dos tiempos básicos como se mencionó en la sección 2.2, la fase de búsqueda del código de operación en memoria y la de ejecución de la instrucción. En la fase de búsqueda, el μP obtiene la instrucción desde la memoria, sin importar por los momentos como lo hace. La CPU debe entonces interpretar el código de la instrucción para determinar la función a realizar. Esto implica que para almacenar el código a descifrar, es necesario dotar a la CPU de un nuevo registro interno de 8 bits o Registro de Instrucciones (IR)

64

Introducción al Microprocesador

add sub in out mov

Decodificador de Instrucción

Registro de Instrucción

Instrucción

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

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, como se observa en la figura 3.22. 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. En general puede decirse que la secuencia búsqueda-decodificación-ejecución, consiste de una secuencia de microperaciones controlados por un Microprograma. Este es un programa de microinstrucciones que no hacen referencia a la memoria principal, y es diseñado en base a subcomandos los cuales son trasladados a comandos de máquina por hardware. El μprograma para cada instrucción reside en la sección de decodificación, siendo ejecutado por las unidades de temporización y control del μP, aun no mencionadas. 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, eficiencia, y tiempo de desarrollo de un programa determinado, 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, el funcionamiento de la ALU, y la comunicación con la memoria y los dispositivos de E/S; de hecho el tratamiento de este tópico lo contemplan programas de estudio de asignaturas que el lector cursará en el futuro. De mayor provecho en esta sección introductoria es presentar en forma conceptual y muy simple el modo de funcionamiento del decodificador de instrucciones. Como muestra la figura 3.22, el ID recibe la información almacenada en el IR y coloca en nivel alto la salida que corresponde a la instrucción obtenida desde la memoria. Para ilustrar el modo de operación de la lógica de decodificación durante una transferencia entre registros, se considera ahora el circuito de la figura 3.23. Se observa que si la instrucción depositada en el registro de instrucciones es IN 01, la salida del decodificador etiquetada in se activa, ocasionando que el estado de los interruptores lógicos en el periférico 01 se transfiera al acumulador. En caso de ser OUT 02 la instrucción obtenida de la memoria, 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.

65

Introducción al Microprocesador

Interruptores Lógicos in

Acumulador out

Indicadores lógicos Fig. 3.23. Las salidas del decodificador de instrucciones permiten la ejecución de la instrucción.

En la práctica, 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. El registro acumulador, por ejemplo, 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, tales como desplazamientos de su contenido hacia la derecha o izquierda, complemento y otras funciones lógicas, además de interactuar con la ALU. No obstante, puede considerarse que la función básica de transferencia paralela entre registros es ilustrada apropiadamente con el sencillo ejemplo de la figura 3.23.

El generador de direcciones La forma en que opera la unidad de memoria de programa de la máquina implica que el μP debe generar direcciones para poder obtener cada una de las instrucciones del programa almacenado. Para que la CPU pueda obtener, durante la fase de búsqueda, la instrucción almacenada en la memoria debe suministrar al dispositivo de almacenamiento la dirección de la celda que contiene la instrucción. Esta información debe mantenerse estable en las líneas de direcciones de la memoria hasta que culmine la operación de acceso. Como ilustra la figura 3.24 se introduce un registro interno de propósito específico denominado Registro de Dirección de Memoria (MAR), el cual retiene la dirección de la instrucción cuya búsqueda progresa. La dirección debe permanecer en el bus de direcciones al menos el tiempo de acceso del CI de memoria, para permitir que éste coloque en el bus de datos la información que contiene la celda seleccionada. En general para que el μP pueda establecer comunicación con cualquier dispositivo externo a la CPU que tenga dirección asignada, sea memoria o periférico de E/S, se requiere el uso del MAR, el cual es en realidad el origen del bus de direcciones

66

Introducción al Microprocesador

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

Memoria

Líneas de datos

Fig. 3.24. El registro de direcciones de memoria contiene la dirección de búsqueda de la instrucción.

Resuelto el problema de generar dirección de la posición de memoria que ocupa cada instrucción, existe otro detalle de interés. 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, sino que debe estar en capacidad de realizar una exploración secuencial de la memoria para poder obtener todo el programa.

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. 3.25. El contador de programa permite el barrido de las direcciones que ocupa el programa.

Para generar las direcciones consecutivas que permitan la ejecución del programa, se usa un contador que se incremente en 1 cada vez que se ejecuta una instrucción, de modo que en todo momento contenga la dirección de la siguiente instrucción a ejecu-

Introducción al Microprocesador

67

tar. Este nuevo componente interno de la CPU es el Contador de Programa (PC). Como se observa en la figura 3.25, la salida del PC se conecta al registro MAR para enviar a la memoria la secuencia de direcciones de 0 a 4 donde reside el programa. Cuando se inicia la fase de búsqueda de una instrucción, el µP carga en el MAR el contenido del PC e incrementa a éste para apuntar a la siguiente posición de memoria. El MAR mantiene la dirección aplicada a la memoria hasta el final de la fase de ejecución. La lógica de incremento del contador de programa es mostrada en la figura 3.26.

Fig. 3.26. 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. Ahora es necesario establecer la longitud de los nuevos registros internos del µP. Para establecer el número de bits del registro de memoria MAR y del contador de programa PC, considere que para tener acceso a las 512 (29) posiciones de la memoria SRWM seleccionada para el sistema, debe aplicarse una dirección de 9 bits a las líneas de entrada de direcciones del dispositivo de almacenamiento. 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, es patente la necesidad de un byte adicional para especificar todas las direcciones. En realidad basta con un bit extra, pero como la máquina opera con formato de 8 bits se usa un múltiplo de un este valor. Al usarse dos bytes para especificar una dirección, se deduce que el contador de programa y el registro de direcciones de memoria deben ser ambos de 16 bits. El hecho que el MAR tenga capacidad para almacenar dos bytes le permite al μP tener acceso a 216 = 65536 posiciones de memoria, lo cual es la capacidad de direccionamientos de los μP de 8 bits, incluyendo al 8085A. Al PC no solo se aplican pulsos de reloj, sino que dispone de una entrada adicional de inicialización o RESET. Cuando esta señal es activada, el contenido del PC va a cero, ejecutando el programa desde la dirección de inicio. En μC reales la línea de RESET tiene otras funciones; por ejemplo: un programa en progreso que funcione mal puede ser abortado por medio de esta señal; también cuando se aplica potencia a un μC inicialmente desactivado, un circuito de autoreset permite la estabilización del μP hasta

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, típicamente un 75 % del valor nominal de la fuente de energía del CI.

El microprocesador como máquina de estados El procesamiento de una instrucción implica la ejecución de una secuencia de operaciones, cada una de las cuales inician una o más microoperaciones a la vez, sincronizadas por el reloj del μP. Cada ciclo del reloj del sistema es un estado Ti, y para completar cada ciclo de instrucción se requieren varios estados.

Fig. 3.27 Cada ciclo del reloj se denomina estado.

Toda secuencia de microinstrucciones es sincronizada por el reloj maestro del μP, estando la ejecución de cada paso del microcódigo vinculada con un estado interno o ciclo de reloj. En general la extensión del ciclo de instrucción varía de una instrucción a otra, de acuerdo con la cantidad de microinstrucciones necesarias para completar el procesamiento de una instrucción en particular. Por ejemplo, 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, debido a que ADD requiere un mayor número de operaciones internas para ser completada, o expresado de otra manera, la ejecución de ADD exige más ciclos de reloj que los necesarios para MOV. Para que el μP realice una suma gasta cuatro estados internos para buscar la instrucción en memoria, decodificarla, usar la ALU, y transferir el resultado al registro acumulador; mientras que para completar MOV usa tres estados, porque después de la decodificación es suficiente con realizar una transferencia desde el registro A hasta el B. 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, 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. Para definir el diagrama de estado considere que al μP se le aplica un pulso de reset que pone en cero el contador de programa. El ciclo de instrucción se inicia en el instante que la CPU sale del estado TR de RESET. A continuación se describe los eventos que ocurren a partir del estado interno inicial T1 y en la figura 3.28 se representan como un diagrama de transición de estados.

69

Introducción al Microprocesador

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. (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. (IR) ← (OC) T3: Si el código de operación de la instrucción corresponde a IN, OUT o MOV, se ejecuta la transferencia respectiva a, o entre registros. T4: En el caso de una instrucción aritmética ADD o SUB, durante el estado T4 se ejecuta la operación de la ALU, y se pasa a T3 para transferir el resultado al registro acumulador.

reset

TR

reset T1

T2

instrucción ADD

IN OUT MOV

T3

SUB

T4

Fig. 3.28 Diagrama de transición de estados del μP.

La fase de búsqueda de la instrucción corresponde a los estados T1 y T2, mientras que la decodificación del OC se realiza al final de T2. 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. 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, en tanto que la decodificación se realiza al inicio de la fase de ejecución. 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

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. Por ejemplo, búsqueda de OC, lectura a puerto... ; pudiendo decirse que el ciclo de una instrucción lo constituyen un número determinado de estos ciclos. En el caso que nos ocupa, el ciclo de instrucción de MOV consta de dos ciclos de máquinas M1 y M2 con diferentes duraciones, estando M1 formado por dos estados (T1 y T2); y quedando claro que para toda instrucción M1 corresponde al ciclo de máquina de búsqueda.

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, estas son:

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

Fig. 3.29 Contador de estados y decodificador de estados

En el diagrama de la figura 3.29 se aprecian los componentes incorporados a la CPU. Esta unidad de control y temporización acepta: la salida activa del ID, 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. Observe que las señales S0 y S1 están disponibles como terminales de salida del μP, pudiendo ser usadas desde el exterior para registrar el progreso de la ejecución de una determinada instrucción.

71

Introducción al Microprocesador

Periférico 2

Periférico 1 OUT

IN

Registro B

Registro A (A)

(B)

Unidad Lógica y Aritmética (A+B) Señales Internas de Control

Registro y Decodificador de Instrucción

Decodificador de Estados

Reloj

S1

S0

S1

S0

Instrucción

Contador de Estados

Memoria

Registro de Dirección de Memoria

Pulsos

Contador de Programa

Reset

Fig. 3.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.

Además, 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. Son necesarias dos señales de control RD (lectura) y WR (escritura), ambas activas en nivel bajo, para indicar a la memoria o puerto de E/S que el procesador esta en una operación de lectura o escritura de dato. 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. El uso de RD y WR para anunciar al sistema la realización de un ciclo de lectura o escritura, determina que el espacio de direcciones disponible es común para la memoria y para los puertos de E/S

72

Introducción al Microprocesador

Por ejemplo, para trasladar un dato hacia un dispositivo externo el μP emite la dirección a la cual desea tener acceso, digamos 0020H, coloca la información en el bus de datos y pone la señal WR en estado bajo. Debido a que el μP reconoce sólo un área de direcciones, no es capaz de distinguir si el destino de la información es posición 20H de memoria o el puerto 20H de salida. 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, 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. 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. En la figura 3.29 se observa que las tres nuevas salidas del μP se originan en la sección del control.

Velocidad de procesamiento La rapidez de procesamiento de las instrucciones esta vinculada con la frecuencia del reloj maestro del μP. En la medida que la fclk sea más alta, con mayor velocidad se realiza la ejecución debido a que la duración de cada estado será menor. Si una instrucción especifica requiere 10 ciclos de reloj o estados internos para completar su ejecución y la fclk es conocida, puede determinarse el tiempo que utiliza el μP para ejecutar la instrucción. Para calcular el tiempo que el μP consume en la ejecución del programa 1 se repite en la tabla 3.4 la secuencia del código indicando el número de estados requerido para completar cada instrucción. Tabla. 3.4 El programa 1 tiene 16 estados. INSTRUCCIÓN IN 01 MOV IN 01 ADD OUT 02

N° total de estados

ESTADOS

3 3 3 4 3 16

Si la frecuencia de reloj de la máquina hipotética es, digamos fclk = 2 Mhz, cada ciclo de reloj es de 500 ns. Como la duración de un estado es 500 nS, el programa tardará en ejecutarse un tiempo igual a 16 estados x 0.5 μS/estado = 8 μs. En otras palabras, sumar dos números binarios de ocho bits gasta un tiempo de 8 μs. De acuerdo con la tabla 3.4, la velocidad máxima con la cual el μP puede ejecutar una instrucción es de 1.5 μs, en el caso de las instrucciones de transferencia de datos. Las instrucciones aritméticas requieren 2 μs para su ejecución. De este modo que si en

Introducción al Microprocesador

73

una aplicación determinada es necesario calcular una suma en un tiempo inferior a 8 μS, debe recurrirse a una CPU más rápida o bien incrementar la frecuencia del reloj maestro sobre los 2 MHhz, debido a que la fclk impone el límite superior de la velocidad de procesamiento. 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, al permitir al usuario programar lazos de retardo del orden de μs, segundos, horas o años. Las rutinas de tiempo permiten, entre otras aplicaciones, 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, garantizando un reloj maestro con frecuencia exacta y muy estable. 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. 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.

Comunicación con periféricos lentos. A menos que sea forzado a permanecer en estado de RESET por acción externa, el μP inicia la ejecución del programa procesando secuencialmente cada instrucción en memoria a partir de la dirección 0. La rutina de suma requiere recibir desde el exterior los números binarios a sumar, siendo evidente que 8 μs es un tiempo insuficiente en extremo para introducir en forma manual los datos desde los interruptores lógicos. 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 solución se inicia con la introducción del concepto de Estado de Espera o TWAIT, 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. El estado de espera puede trasladarse al diagrama de estados del μP, como ilustra la figura 3.31. Observe en el nuevo diagrama de transición de estados, que la transición hacia TWAIT depende de la prueba de la condición ready, de modo que es necesario establecer algún medio para que el periférico lento pueda controlar el estado de ready. La solución es dotar al microprocesador de una línea de entrada identificada como READY, cuyo estado puede ser fijado desde el exterior de la unidad central de proceso. En el estado T2, el μP prueba el estado de esta entrada, si está en nivel lógico uno pasa a T3 y se completa la ejecución de la instrucción en el modo acostumbrado. Si por el contrario READY está en cero lógico, el μP entrará en un estado de espera TWAIT en el cual permanece hasta que la entrada de control retorne a nivel alto. Así, la 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.

Introducción al Microprocesador

74

Fig.3.31. El diagrama de transición incluye un estado T5 = TWAIT para permitir la sincronización del μP con dispositivos de E/S lentos.

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, como muestra el circuito de la figura 3.32. Suponiendo que S1S0 es ‘01’ cuando el µP esté en el estado T2, el flanco posterior del reloj cargará uno en la salida Q del biestable U1, llevado la entrada READY a nivel bajo. Si la instrucción en ejecución es IN u OUT, el procesador examinará la entrada READY e introducirá estados de espera parando el proceso de ejecución. 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. En todo microprocesador existe esta señal de control, en los fabricados por INTEL (8, 16 y 32 bits) se denomina READY o RDY, en otros como el Z80 se denota WAIT. En aplicaciones del mundo real, la 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. Activando READY, el componente ex-

75

Introducción al Microprocesador

terno obliga a que la CPU dejar pasar, sin realizar operación alguna, un número de entero de periodos de reloj hasta cuando el dato esté disponible.

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

Conjunto extendido de instrucciones La desventaja principal de la 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, incorporar nuevas instrucciones, la otra, extender el alcance de las existentes. Si por ejemplo, se modifica la instrucción MOV de modo que además de transferir el contenido del registro A hasta registro B, pueda cumplir la acción inversa, se obtiene una instrucción MOV más poderosa. La nueva MOV requiere dos operandos para indicar el sentido de la transferencia, tales son el registro fuente (S) y el registro destino (D). Los nemónicos de la nueva MOV son: MOV A,B

(A) ← (B)

MOV B,A

(B) ← (A)

Ahora, tanto A como B pueden ser origen o destino de los datos. La instrucción MOV original no necesitaba operandos debido a que la acción a ejecutar estaba implícita, esto es mover el contenido de A hasta B. El hecho que deba hacerse ahora referencia a los registros internos de la CPU, indicando cual entrega y cual recibe datos, requiere asignar algún código a los registros para identificarlos. Los códigos asignados a los registros son:

76

Introducción al Microprocesador

Tabla. 3.5. Código de 2 bits para identificar a los registros. 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, cuyo símbolo genérico es MOV r1,r2. MOV B,A Código de operación Operando destino Operando fuente

(B)←(A)

MOV A,B Código de operación Operando destino Operando fuente

(A)←(B)

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

Fig. 3.33. Códigos de instrucción para MOV r1,r2

El nuevo grupo de instrucciones con MOV completamente especificada, se muestra en la tabla 3.6. Tabla. 3.6. Conjunto de instrucciones con MOV mejorada. 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,A 0 1 0 0 0 1 0 MOV A,B 0 1 0 0 0 0 0

D0

0 0 1 0 0 1

La escritura de programas eficientes está relacionada con los recursos que ofrece la CPU, por ejemplo la cantidad de registros internos accesibles por el programador, y por supuesto con la diversidad de instrucciones del μP. Si un procesador no dispone de instrucciones de multiplicación, cuando se requiera realizar esta operación debe escribirse una rutina de producto en base a instrucciones de sumas y desplazamientos. La máquina que se sintetiza, al ser un recurso didáctico, 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, conviene introducir nuevas instrucciones para mostrar ciertos aspectos característicos de sistemas del mundo real. Para esto, suponga que se desea realizar un programa que ejecute la suma de dos números binarios

77

Introducción al Microprocesador

obtenidos del teclado primitivo conectado al periférico 1 y luego al resultado obtenido se le debe agregar una constante, digamos 2BH. Como este valor constante debe sumarse los datos de entradas, se introduce una nueva instrucción que cargue un dato de 8 bits en el registro acumulador. De esta forma, esta constante puede ser sumada al resultado de la operación precedente N1+N2. Tal instrucción está presente en el conjunto de instrucciones de cualquier procesador y se denomina mover inmediatamente un dato, o MVI dato. MVI dato Código de operación Operando destino Dato

(A)←(dato)

110???00 110 00 PC+1

Fig. 3.36. El operando dato de MVI dato se carga en la siguiente posición de memoria

La nueva instrucción de carga inmediato se usa en el siguiente programa para realizar la suma N1 + N2 + 43. Dirección Contenido de la memoria Binario

0 1 2 3 4 5 6 7 8 9

10100001 01000100 10100001 00100000 01000100 11000000 01001011 00100000 11100010 xxxxxxxx

Comentario

Nemónico

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

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

add out2

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

in 01

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

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

78

Introducción al Microprocesador

el registro acumulador. Desafortunadamente la inteligencia del decodificador de instrucciones, como la de la mayoría de las personas y máquinas, tiene un límite. ¿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. En la posición 9 puede existir cualquier cosa, una instrucción no programada, inexistente o simplemente basura. Cuando el PC se incremente hasta está dirección el μP intentará procesar esta información con resultados imprevisibles. El problema es que no existe una instrucción que permita señalar cuando finaliza el programa. Una solución parcial a esta dificultad es introducir una instrucción de salto que permita alterar la ejecución secuencial del programa. Se trata de cambiar el contenido del PC, de modo que cuando sea ejecutada produzca que el control del programa sea bifurcado a otra instrucción, según las necesidades específicas del algoritmo programado. Así, se introduce la instrucción JMP dirección, en la cual el operando corresponde a una dirección. El resultado de la ejecución es un salto incondicional a la posición de memoria especificada por el operando dirección, el cual señala la localidad de memoria que contiene la próxima instrucción que debe ser ejecutada. JMP dirección

PC ← (dirección)

DIRECCIÓN

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

NEMÓNICO in 01 mov b,a in 01 add mov b,a mvi a,43 add out 02 jmp 0000

Fig. 3.38. La instrucción de transferencia JMP permite al programa operar en un lazo.

Es pertinente aclarar el panorama oscurecido por la introducción de la instrucción de salto en el programa de la figura 3.38. El operando que acompaña a JMP, la dirección de salto, está formado por dos bytes, lo cual implica que JMP dirección es una instrucción de tres bytes. El código de la instrucción lo especifica el primero de ellos, los dos restantes señalan la dirección. Un lector inquieto habrá entendido que JMP 0000 ha creado un lazo infinito, esto significa que la máquina ejecuta el programa continuamente esperando por la introducción de operandos desde el teclado, sumando e indicando el resultado hasta que, como una posibilidad, se le desconecte la alimentación. Aun aplicando al μP un pulso de RESET, el lazo se mantiene. Este modo de operación es resultado del hecho que la unidad

79

Introducción al Microprocesador

de control de la máquina solo dispone de dos modos de operación: búsqueda y ejecución. DIRECCIÓN

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

CONTENIDO DE LA MEMORIA

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

COMENTARIOS

Nemónico in 01 mov b,a in 01 add mov b,a mvi 43

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

add out 02 jmp 0000

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

Fig. 3.39. La instrucción JMP tiene como operando la dirección de la próxima instrucción a ejecutar.

Si se permite al μP tener un modo adicional de funcionamiento en el cual se detenga toda operación, sería posible para la ejecución de un programa en cualquier punto. La CPU entrará en el modo de HALT (parada), como respuesta a la ejecución de una instrucción nueva con nemónico HLT, la cual carece de operandos. El modo HALT se comprende mejor haciendo referencia al diagrama de transición de la figura 3.40, donde se muestren los 3 modos de operación de la sección de control del μP. reset HALT

reset

Búsqueda

HLT

Ejecución

Fig. 3.40. Modos de operación del microprocesador

Con energía aplicada y liberado del estado de reset, la CPU busca y ejecuta la secuencia de instrucciones en memoria, en caso que la instrucción obtenida corresponda a HLT, el μP entrará es un estado de parada del cual solo saldrá al activarse la línea de RESET. Sustituyendo la instrucción de salto a al dirección cero en el programa de la figura 3.39, se asegura que el μP cesará de funcionar cuando ejecute la instrucción HLT almacenada en la dirección 9.

80

Introducción al Microprocesador

0 1 2 3 4 5 6 7 8 9

A1 44 A1 20 44 B0 2B 20 E2 00

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

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

add out 2 hlt

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

Fig. 3.41. Los códigos de instrucción son más fácil de manejar si se expresan en hexadecimal.

El conjunto de instrucciones del μP con los nuevos miembros MVI dato, JMP dirección y HLT es el de la tabla 3.7. Tabla. 3.7. 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,A 44 0 0 1 0 MOV A,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.7 muestra el repertorio de instrucciones definitivo del µP. Esto sólo significa que el diagrama de la figura 3.30 ilustra como se organizan los componentes de un µP típico y que la tabla 3.7 presenta las instrucciones que permiten realizar la tarea especificada al inicio de esta sección. En modo alguno estamos en presencia de una CPU completamente funcional. 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. 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. 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. Si tal condición no es satisfecha el programa ejecuta la próxima instrucción en memoria.

81

Introducción al Microprocesador

Las banderas a probar son bits de un registro especial de la CPU denominado registro de condición de estados o registro de banderas, el cual forma parte de la arquitectura interna del μP y es accesible por el programador. Los bits de este registro son activados por la ALU de acuerdo con el resultado producido por una determinada operación lógica o aritmética. La figura 3.42 muestra la conexión del registro de condiciones a la ALU, y los bits de banderas típicos. Los cinco bits definidos para el registro banderas son los mismos que se encuentran en el microprocesador 8085A.

Registro A

Unidad Lógica y Aritmética

Registro B

Registro de banderas

Fig. 3.42. El registro de estados permite la ejecución de instrucciones condicionales.

Los estados que se asignan a las banderas están relacionados, como se dijo, con el resultado de una operación aritmética o lógica, de modo que dependen del contenido del acumulador después de la ejecución ADD o SUB, en este caso. Tabla 3.8 Condiciones del registro de banderas. Se produce si: BANDERA ESTADO Acarreo CY = 1 Hay desborde desde el bit 7 del acumulador Acarreo auxiliar AC = 1 Ocurre desborde desde el bit 3 de A Signo S=1 A7 = 1 S=0 A7 = 0 Cero Z=1 (A) = 00000000 Z=0 (A) ≠ 00000000 Paridad P=1 El número de bits en 1 en A es par. P=0 La suma de los bits en 1 en A es impar.

Debido a que cuando se describa la arquitectura del μP8085A se insistirá sobre este tema, por ahora se limita el análisis a la función de la bandera de acarreo CY. Por ejemplo, si se desea realizar la operación aritmética 19110 + 110 = 192 10, los valores binarios en los registros conectados a las entradas a la ALU deben ser: (A) = 101111112 y (B) = 000000012. La ejecución de la instrucción de suma ADD produce como resultado (A) = 110000002. El lector puede verificar que no ocurre desborde del bit 7 del acumulador, siendo la bandera CY =0.

82

Introducción al Microprocesador

Si la operación a realizar ahora es 19110 + 6610 = 25710, los registros de operandos a las entradas de la ALU contendrán: (A) = 101111112 y (B) = 010000102. Luego de ejecutar la instrucción ADD, el contenido del acumulador es (A) = 000000012, resultado obviamente incorrecto. 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. 1

0

1

1

1

1

1

1

A

+

0

1

0

0

0

0

1

0

B

1

0

0

0

0

0

0

0

1

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

Salto a dirección si CY =1

JNC dirección

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. Una instrucción lógica típica es ANA, la cual realiza la función lógica AND, bit a bit, entre el registro B y el registro A. Si (A) = 11010011 y (B) = 01100010, al ejecutar ANA, la ALU transfiere al acumulador (A) = 01000010. Posteriormente se detallan aplicaciones de las instrucciones lógicas. DIRECCIÓN

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

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

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

Fig. 3.43. Programa que usa instrucciones de salto condicional

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

Introducción al Microprocesador

83

ción de los dos bytes siguientes. Los códigos de las instrucciones ANA, JC y JNC no se asignaron, observe que tres instrucciones adicionales incrementa a 11 el numero de instrucciones que puede ejecutar la CPU, de modo que no es posible considerar que los 3 bits 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). Diagrama final del microprocesador sintetizado. El diagrama funcional terminado de la máquina de 8 bits sintetizada se presenta en la figura 3.44, donde se incluyen los buses de direcciones, de datos y el bus interno de la CPU. Las instrucciones y datos provenientes de la memoria y la información que se obtiene o se entrega a los periféricos de E/S, 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.

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

84

Introducción al Microprocesador

La arquitectura interna de la CPU de la figura 3.44 está compuesta por unidades funcionales similares a las de una unidad central de procesamiento típica, mientras que la máquina en conjunto constituye un verdadero μC al disponer de CPU, memoria y puertos de E/S.

Las señales de entrada y salida al microprocesador. Los componentes del microcomputador se comunican por medio de grupos de líneas de interconexión o bus. Los μPs no usan el mismo principio de los computadores grandes para la comunicación con el exterior. Para contribuir a la reducción del espacio ocupado por el sistema, se utilizan canales de comunicación comunes para todas las unidades. En un sistema con estructura de bus único sólo un dispositivo a la vez podrá transferir información hacia o desde el CPU. Un intento de comunicación simultánea creará conflictos y el inevitable deterioro de la información. De acuerdo con la función que cumplen y con el tipo de información que conducen, los buses son de tres tipos: Datos, Direcciones, y Control, y se caracterizan por: el ancho del bus o número de líneas que lo forman, el sentido de conducción (unidireccionales o bidireccionales), y el tipo de función que cumplen las señales que portan (datos, direcciones o control). En la figura 3.45 se presentan los símbolos más usados para representar un bus en diagramas eléctricos.

Conexión explicita

Unidireccional

Bidireccional

Fig. 3.45. 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 el canal que permite el flujo de información desde el μP hacia la memoria y los puertos de E/S, y desde estos hacia el μP. El ancho del bus de datos lo define generalmente (el 8088 es una excepción) el formato de las instrucciones y datos que usa la máquina. Es común distinguir la arquitectura de la máquina señalando el ancho de este bus, de modo que un μC de 8 bits contiene un μP con bus de datos con igual número de bits.

Introducción al Microprocesador

85

El Bus de Direcciones (A0-A15) es unidireccional, solo conduce información proveniente del μP, la cual indica la dirección de memoria o puerto de E/S, hacia donde debe transferirse o desde donde se obtienen los datos que circulan por el bus de datos. Como se mencionó el ancho del bus de direcciones define la capacidad de memoria de la máquina. El μP tendrá acceso a un máximo de 216 (65536) posiciones de memoria, debido a que el bus de direcciones es de 16 bits. El bus de Control ( RD , WR , IO/M , RESET, y READY) lo conforman líneas de entrada o salida a la CPU y lo constituyen las señales que sincronizan las operaciones del μP. Controla el sentido de la transferencia por el bus de datos, indicando si la transmisión es hacia o desde la memoria o puerto de E/S. Generalmente está constituido de 10 ó más líneas, dependiendo del procesador. La definición de la función que realiza cada uno de los terminales del μP se especifica en la Tabla 3.9. Tabla. 3.9 Funciones de las señales del μP de la figura 3.44. +5V VCC Tierra VSS Entrada de reloj al microprocesador CLK Entrada que pone en cero el contador de programa. RESET Bus de direcciones del microprocesador. A0-A15 Bus de datos de la CPU D0-D7 Indica que el μP desea leer la localización de memoria o dispositivo de E/S RD seleccionado. Además avisa que el bus de datos está disponible para realizar la transferencia.

WR IO/M

Señala una salida válida de datos en el bus de datos. 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. Distingue si la operación de lectura o escritura se realiza sobre la memoria o puerto de E/S. Si tiene nivel lógico alto durante la ejecución de las instrucciones IN puerto y OUT puerto, indica que la memoria o dispositivo de E/S está listo para recibir o transferir datos.

READY

Si presenta nivel bajo, el procesador esperará un 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.

Los primeros microprocesadores de 8 bits (8080, Z80, y 6800) que dominaron el mercado se fabricaban en un encapsulado de 40 terminales en dos líneas de 20 pines cada una. 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, y el de la figura 3.44, se deja volar la imaginación y se procede a integrar el μP en un encapsulado del tipo DIP 40.

86

Introducción al Microprocesador

Las 34 señales del μP se distribuyen en el encapsulado en forma arbitraria como se muestra a la izquierda de la figura 3.46, los 6 terminales restantes del CI se consideran no conectados. A la derecha se ofrece un diagrama de la CPU donde se agrupan las líneas en los tres buses típicos de un μP.

BUS DE CONTROL

BUS DE DIRECCIONES

μP

BUS DE DATOS

μP Fig. 3.46 Configuración de terminales y buses del microprocesador.

Las 16 líneas de direcciones, las 8 de datos, las 2 de alimentación, y el reloj del sistema están presentes en todos los μPs mencionados y ocupan 27 terminales del encapsulado. El bus de control está constituido por 7 señales, 2 de las cuales (RESET y READY ) se usan para el control de la CPU, mientras que las restantes ( IO/M , RD , WR ,S0 y S1) está destinadas al control del sistema. Se ha establecido que un μP de uso 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. Esto significa que alguna señales de importancia están ausentes en el μP desarrollado, debido a que en beneficio de la sencillez se han omitido ciertas entradas y salidas. Para control de acceso directo a memoria y aceptación de interrupciones un μP típico destina por lo menos 4 entradas. En general los μPs disponen de señales que cumplen funciones similares en formas diferentes. El Z80 por ejemplo usa 4 señales: RD , WR , IOREQ , y MREQ para las funciones que el μP de la figura 3.46 realiza con solo 3: IO/ M , RD , y WR . Se puede concluir que el μP desarrollado en forma descriptiva dispone de la mayoría de las entradas y salidas que se encuentran en un μP comercial, exceptuando el control de interrupciones y DMA, tópicos a discutir más adelante. 3.2.2 EL SISTEMA MICROCOMPUTADOR Considerando el modo de operación de un microcomputador práctico, son múltiples las omisiones o simplificaciones que se han realizado a lo largo de esta sección in-

Introducción al Microprocesador

87

tentando exponer de modo sencillo el funcionamiento de las unidades internas del μP y los dispositivos asociados. En μCs reales los procedimientos descritos para el acceso a la memoria y a los puertos del µP no son tan simples como los expuestos. Con 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. Las direcciones de memoria Sí el dispositivo de memoria SRWM de ½ Kbytes de la figura 3.20 se acopla directamente al μP, 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. Un μP de 8 bits con 16 líneas de direcciones puede tener acceso hasta un máximo de 65536 celdas, de modo que el uso de una memoria con 9 entradas de direcciones acoplada directamente al sistema representa el desperdicio del 99.68 % de la capacidad de memoria del procesador. A primera vista pudiese parecer que la solución estaría en usar circuitos integrados con mayor capacidad de almacenamiento, pero antes conviene considerar que a pesar que el procesador ve un espacio único para toda la memoria del sistema, lo usual es que aun en aplicaciones simples sea necesario el uso de más de un chip para organizar el subsistema de memoria. 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. Un microcomputador requiere un área de memoria capaz de retener los datos aun luego de retirarle la energía, este espacio contiene el programa almacenado y es conocido como la memoria de solo lectura (ROM). Es común que el espacio de ROM se genere usando un solo circuito integrado. En contraposición, para organizar la zona de memoria de lectura/escritura (RWM) usada para almacenamiento temporal de datos y resultados, puede ser necesario un arreglo de paralelo o serie de dos o más dispositivos. Esto, debido a que los circuitos disponibles no son de la capacidad que exige las especificaciones del sistema en desarrollo, o bien porque la longitud de la palabra del CI es menor a 8 bits. Un CI de memoria de 8 Kbytes tienen 8192 celdas con direcciones físicas comunes desde 0000H hasta 1FFFH. En una aplicación que requiera esta capacidad para la ROM y para la RAM, se encuentra que las líneas A0-A12 del bus de direcciones del μP estarán conectadas a las entradas correspondientes de ambos chips. 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, o en cualquier otra, tendrá resultados imprevisibles debido existen dos celdas con la misma dirección. 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. Tal circuito digital sec-

88

Introducción al Microprocesador

ciona el espacio de 64 Kbytes en bloques de rango especificado y asigna cada una de las particiones a la ROM y a la RWM del sistema de acuerdo con lo establecido en la fase de diseño 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, mostrándose en a figura 3.47 el correspondiente a un sistema que tiene 8 K de ROM y 4 K de RWM.

DIRECCIÓN

DATOS

0000

0010000000000000

. . . 1FFF

. . . 1010111110110111

2000

0010000000000000

. . . 5FFF

. . . 0101111111111111

6000

111111111110000

. . 6FFF

. . . 0101111111111111

7000

0101111111111111

. . . FFFF

. . . 111111111111111

8 K ROM

16 K libre

4 K RWM

36 K libre

Fig. 3.47 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, sólo disponemos de una memoria de 512 bytes con una pila interna para retener los datos del programa, sin importar como éste es cargado en la memoria. A continuación se diseña el de decodificador de memoria del sistema. El objetivo es generar una señal de selección del chip de memoria llamada MEM y activa en nivel bajo, cuando en el bus de direcciones esté un valor dentro del rango de direcciones de la memoria y cuando se realice una operación de búsqueda. Como solo existe un dispositivo de memoria de 512 bytes el diseño de un decodificador es directo. En el rango de direcciones del dispositivo (0000H-01FFH) las líneas A9 hasta A15 están siempre en estado bajo, como se puede observar en la zona más oscura de la tabla de la tabla 3.10, 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.

89

Introducción al Microprocesador

Esta combinación solo se presenta cuando el μP desea acceso a la RWM, por lo cual puede usarse para generar la señal de selección de memoria MEM , la cual se aplica a la entrada de habilitación CS del circuito integrado. La señal MEM responde a la la ecuación lógica, MEM = A 15 + A 14 + A 13 + A 12 + A 11 + A 10 + A 9 + IO/ M

Tabla. 3.10 Estados de las líneas de direcciones del μP en el espacio de 64 K. Dirección 0000H

A15 A14 A13 A12 A11 A10 0 0 0 0 0 0

A9 0

A8 0

A7 0

A6 0

A5 0

A4 0

A3 0

A2 0

A1 0

A0 0

0001H

0

0

0

0

0

0

0

0

0

0

0

0

0

0

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, deshabilitando la memoria. Así mismo cuando IO/ M esté en uno lógico, lo cual ocurre cuando el μP realiza una operación de lectura/escritura sobre un puerto de E/S, el estado lógico de MEM será uno. El circuito del decodificador de direcciones de memoria se muestra en la figura 3.48.

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

90

Introducción al Microprocesador

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; la segunda PS02 para cargar en el registro paralelo de la figura 3.15 el resultado de la suma. El circuito decodificador de direcciones de puertos tiene como tarea la 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. Como indica la tabla 3.2 los dos bits menos significativos del código de instrucción representan la dirección del puerto. Durante una transferencia de datos hacia o desde un puerto la señal de control IO/ M permanece en estado lógico alto, 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. En ambos casos el número del puerto aparece en los bits A1 y A0 del bus de direcciones. En la tabla 3.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. Tabla. 3.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. De la tabla 3.11 se deduce por simple inspección el circuito digital para obtener ambas señales.

Fig. 3.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. Para extender a 8 puertos la capacidad de la estructura de E/S del μC se usa un CI 74LS139, el cual contiene dos decodificadores binarios 2 a 4.

91

Introducción al Microprocesador

Tabla. 3.12 Tabla de estados del G B A Y3 Y2 Y1 1 x x 0 1 1 0 0 0 1 1 1 0 0 1 1 1 0 0 1 0 1 1 0 0 1 1 1 1 0

74LS139

Y0 1 0 1 1 1

La tabla 3.12 indica que con la entrada G está en estado bajo la salida yk estará en nivel bajo si el número entero representado por la entrada B A es igual a k. La figura 3.50 muestra el diagrama eléctrico del decodificador de 4 puertos de salida y 4 de entrada. 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. Finalmente, la figura 3.51 ilustra el diagrama del circuito final del μC. Los puertos de E/S del sistema final son decodificados usando el método de selección lineal

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

3.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. 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. 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. El propósito de este capítulo, que se supone cumplido, fue introducir en forma resumida la mayor cantidad de tópicos relacionados

Introducción al Microprocesador

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

92

Introducción al Microprocesador

93

con el área sin tener que esperar el avance por capítulos para la introducción de nuevos conceptos. 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, hasta conceptos algo más elaborados como la introducción de estados de espera. 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. El microprocesador hipotético presenta ciertas limitaciones ausentes en μP comerciales. En primer lugar tiene solo dos registros internos: el acumulador usado para contener un operando y el resultado en cualquier operación realizada por la ALU y el registro B donde se almacena el segundo operando. 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. 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, sin requerirse hacer referencia a la memoria externa. Los microprocesadores modernos con arquitectura RISC tienen al menos 32 registros internos. En segundo termino, solo se especificaron algunas señales para control de la máquina como RESET y READY , y RD , WR , IO/M , S0 y S1 para control de los dispositivos del sistema.

Fig. 3.52 Arquitectura de un microprocesador típico de 8 bits

Introducción al Microprocesador

94

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

Introducción al Microprocesador

95

• El reloj del sistema, • Líneas externas de control para alterar o interrumpir la secuencia del programa, tales como RESET, READY , y otras aun no mencionadas, y • Las salidas de la sección formada por el Decodificador de Instrucciones y el Codificador de Ciclos de Máquina (llamado decodificador de estados en la figura 3.44), que portan información sobre la instrucción bajo procesamiento, la cual es usada por la unidad de control para generar las señales externas para manejo de memoria y dispositivos de E/S, y señales internas para el control de la ALU y la transferencia entre registros de la CPU, estando toda operación sincronizada por el reloj maestro del sistema. En general, 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, no obstante puede considerarse que el diagrama de la figura 3.52 reproduce en forma adecuada, desde el punto de vista funcional, la estructura interna de un μP, y lo que es más importante desde el punto de vista didáctico, no introduce contradicción alguna con los resultados del proceso de síntesis de la máquina hipotética. 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.

Fig. 3.53 Arquitectura de bus doble

El diagrama de la figura 3.53 corresponde a una sección del μP PACE fabricado por National Semiconductor. Este μP usa una estructura de bus doble. Uno denominado bus de operandos conectado a las dos entradas de la ALU, el otro o bus de resultados conecta la salida de la ALU con los registros internos donde se deposita el resultado de la operación lógica o aritmética. 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. Si el bus de

Introducción al Microprocesador

96

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

Fig. 3.54 Arquitectura de bus triple.

EL μP de la figura 3.52 usa un bus único conectado a las dos entradas de la ALU. Al existir una sola vía para la transferencia de datos entre los registros y la ALU, tanto los operandos como el resultado circulan por el bus interno aunque en tiempos diferentes. Este modo de operación se destaca por su lentitud, mientras que el principal beneficio que ofrece el uso de un bus simple es la poca complejidad de la arquitectura del μP y la reducida área que ocupa las ramificaciones del bus interno en la oblea de silicio, lo cual representa un verdadero ahorro de superficie de integración. 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, dos desde los registros que contienen los operandos hasta cada entrada de la ALU, y una para trasladar el resultado al acumulador. Se supone que las empresas fabricantes de μPs evaluaron el compromiso entre la velocidad y el ahorro de superficie de integración y optaron por esta última, porque la mayoría de los μPs usan un solo bus interno. Aunque esta arquitectura es sencilla y ocupa poco espacio en el área de silicio del CI, presenta problemas de sincronización que afectan la operación de la ALU.

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. Suponga que se carga un valor en el acumulador, el cual está conectado a la entrada izquierda de la ALU, y se ejecuta la instrucción SUB b. La unidad de control selecciona el registro B y lo conecta por medio del bus interno a la entrada derecha de la ALU. Al ejecutar la sustracción el resultado A-B debe cargarse en el acumulador. Cuando el resultado de la operación aritmética se transfiere por medio del bus de datos hacia el A, el cual debe estar habilitado, se originan dos problemas serios de sincronización en el interior del μP. Primero, el resultado no solo se almacena en el A, sino que a través del bus

97

Introducción al Microprocesador

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) - (B).

A

Entradas falsas

ALU

Fig. 3.55 Ilustración del problema de sincronización. Las entradas a la ALU son falsas.

En segundo lugar, para hacer más crítico el problema, observe que aun cuando el A aísla una entrada a la ALU del bus de datos, el hecho que la instrucción de resta use al acumulador para almacenar el resultado, implica que en el instante que la suma se deposite en el A, la entrada izquierda de la ALU tendrá un operando no deseado, por lo cual contribuirá a la obtención de un nuevo y falso resultado.

Fig. 3.56 La CPU ejecuta dos transferencias simultáneas por distintas rutas.

La solución de ambos problemas se muestra en la figura 3.56 y consiste en usar dos registros para almacenamiento temporal: uno denominado TEMP separa la entrada derecha de la ALU del bus interno de datos, el otro es un acumulador temporal para aislar la entrada izquierda de la ALU del acumulador. Ambos registros TEMP y ATEMP son de uso exclusivo del sistema y son transparentes para el programador. Ahora, con un valor precargado en el acumulador se ejecuta la instrucción SUB B: la existencia de los registros adicionales permite que el μP realice dos transferencias de datos simultáneas, una implica mover el contenido del registro B por el bus de interno de datos hacia el registro temporal de la entrada derecha de la ALU. El

Introducción al Microprocesador

98

otro, transferir el dato en A al acumulador temporal, y de hecho a la entrada izquierda de la ALU. Observe que en este flujo paralelo de datos no existe conflicto, dado que usan diferentes caminos, como se aprecia en la figura 3.57.

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

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

Introducción al Microprocesador

99

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

Introducción al Microprocesador

Fig. 3.58. Arquitectura de un sistema estándar basado en microprocesador.

100

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.1 GENERALIDADES El 8085A de INTEL es un microprocesador de 8 bits para uso general construido usando tecnología NMOS. El dispositivo incorpora un generador de reloj interno y es capaz de tener acceso hasta 64 Kbytes de memoria y 256/256 puertos de E/S. Con este dispositivo puede realizarse un sistema microcomputador mínimo usando solo 3 circuitos integrados, alimentados con una fuente de poder de +5 V. La figura 4.1a es una imagen del área de integración de los 20000 transistores MOS de canal N que componen el circuito del μP. El CI se presenta en un encapsulado tipo DIP-40, mostrado en la figura 4.1b, el cual era el estándar industrial para la fabricación de circuitos integrados VLSI, durante la década de los 70. El 8085A tiene un ciclo de instrucción de 1.3 μs, estando disponibles en versiones más rápidas con códigos 8085A-2, 8085AH, 8085AH-1 y 8085AH-2.

(a) Fig. 4.1 (a) Foto microscópica del μP8085A. (b) Encapsulado DIP-40

(b)

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, el cual usa un cristal externo de resonancia paralela y frecuencia máxima de 6.25 MHz. 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. Una versión avanzada, el 8085A-2 puede operar a 5 MHz con un cristal de 10 Mhz. X1 X2 RESET OUT SOD SID TRAP RST 7.5 RST 6.5 RST 5.5 INTR INTA AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7 Vss

8085A

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

Fig. 4.2. Disposición de los terminales del microprocesador 8085A

De los 40 terminales, 12 son entradas, 18 salidas, 8 son bidireccionales, y 2 están destinadas a la alimentación del circuito, como ilustra la figura 4.2. La fuente de poder de +5 V, se aplica los terminales VCC (+) y VSS (-). El cristal de cuarzo se aplica a la entradas X1-X2. El diagrama de la derecha en la figura 4.2 indica el sentido del flujo de información en los terminales del 8085. Como ilustra la figura 4.2, el 8085 no presenta buses de datos y direcciones separados. En este μP, mientras que el byte de orden alto de la dirección se presenta en las líneas A8-A15, los 8 bits menos significativos de la dirección aparecen en los mismos terminales (AD0-AD7) que el bus de datos. Las funciones de estos ocho pines se presentan multiplexadas en el tiempo, encargándose la señal ALE (Address Latch Enable) de indicar a dispositivos externos cuando la información presente corresponde a datos o direcciones. 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. En esa época, como en la actualidad, durante el proceso de producción los chips eran probados usando equipos especiales y costosos para garantizar el correcto funcionamiento del producto final. En los inicios de los setenta, tales instrumentos sólo podían verificar el funcionamiento de circuitos integrados en receptáculos de hasta 42 terminales. Esto no significa que treinta años atrás no se fabricaran CI de más de 40 pines, se hacían de 64 pines, pero su prueba representaba un proceso engorroso para el fabricante.

Arquitectura y Operación del Microprocesador 8085A

103

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

Arquitectura y Operación del Microprocesador 8085A

104

4.2 ESTRUCTURA FUNCIONAL DEL 8085A Para entender como funciona un µP es necesario conocer los tipos de registros internos del dispositivo y el modo en el cual se realiza la transferencia de datos entre éstos. El conjunto de los registros y el repertorio de instrucciones son atributos de la arquitectura de la máquina, y constituyen el modelo de programación por excelencia. El conocimiento de la función de cada uno y una técnica apropiada de utilización permiten la programación 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, se reproduce en la figura 4.3 un diagrama de bloques del µP, tal como es suministrado por INTEL en la hoja técnica del dispositivo.

RST 5.5 TRAP

INTA INTR

RST 6.5

RST7.5

SID

SOD

Canal Serie

Control de Interrupciones

Bus Interno de Datos (8)

Acumulador

Reg. Temp.

Registro de Instrucciones (8)

Flags

ALU

Decodificador de Instrucciones y Codificador de Ciclo de Máquina

B D H

(8) (8)

C E L

(8) (8) (8)

Apuntador de Pila Contador de Programa (16)

±

GND

(8)

Registro de Dir.

+5V Buffer Dir X1 X2

Gen. Reloj CLK OUT

Buffer Dir/Dat

Lógica de Control y Tiempo CONTROL

READY

RD WR

ESTADO

ALE

S0 S1 IO/ M

Bus de Control

DMA

RESET

HLDA RESET OUT HOLD RESET IN

A0 - A15 Bus De Direcciones

AD0 - AD7

Bus de Direcciones/Datos

Fig.4.3. Diagrama funcional del 8085ª

En el 8085 están integradas todas las funciones de una unidad de procesamiento central capaz de ejecutar el conjunto de instrucciones del µP, además de un grupo de funciones adicionales, tales como: la generación del reloj, la selección y asignación de la prioridad de las interrupciones y el control del canal de comunicación serie. El circuito integrado µP 8085 contiene un número considerable de componentes digitales interconectados para formar unidades funcionales. Éstas pueden estar

Arquitectura y Operación del Microprocesador 8085A

105

constituidas por algunos elementos digitales o por arreglos complejos de puertas lógicas, registros y biestables. En el diagrama de la figura 4.3 solo se muestran las los bloques que ejecutan las funciones básicas del dispositivo, tales son: • El conjunto del Registro de Instrucciones, el Decodificador de Instruccio-

nes y la lógica de Control y Tiempo, la cual conforman la Unidad de Control del microprocesador. • El Banco de Registros de propósito general (B,C,D,E,H,L) de 8 bits. El

Apuntador de Pila (SP), el Contador de Programa (PC), y el registro de direcciones de memoria (MAR), de 16 bits. • La Unidad Aritmética y Lógica (ALU), el Acumulador (A), el Registro

Temporal y las Banderas de Estado. • El control de selección y asignación de prioridad de las interrupciones. • El Control del Canal de Comunicación Serie. • Los buffers de datos y datos/direcciones.

4.2.1 La unidad de control Toda operación realizada por el 8085 durante la ejecución del programa de instrucciones almacenado en memoria, ocurren como respuestas a señales de control generadas por esta sección del microprocesador. El µP incorpora un generador interno de reloj, el cual usa un cristal conectado a las entradas X1-X2 para fijar la frecuencia de oscilación. 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. En esta sección también se libera una salida CLK OUT, a la misma frecuencia del reloj interno, la cual puede ser usada como reloj de componentes externos. Como se observa en la figura 4.3, las entradas de la lógica de control y tiempo son los terminales del cristal de cuarzo, las salidas de la sección de decodificación de instrucciones y codificación de ciclo de máquina, y señales externas generadas por dispositivos externos a la CPU. Las entradas externas a la lógica de control son tres: RESET IN , READY y HOLD., éstas permiten a circuitos periféricos modificar el modo normal de funcionamiento del µP.

Arquitectura y Operación del Microprocesador 8085A

106

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

Arquitectura y Operación del Microprocesador 8085A

107

Bus Interno de Datos

Registro de Instrucciones

Buffer de Dir/Datos

Decodificador de Instrucciones y Codificador de Ciclo de Máquina

Lógica de Control y Tiempo

Bus Dir/Datos

Señales Internas de Control

E/S externas Fig.4.4. Sección de decodificación y control del μP

Sincronizada por el reloj interno, la lógica de control y tiempo tiene la responsabilidad de ejecutar la secuencia de microinstrucciones que controla la búsqueda, decodificación y ejecución de las líneas de código almacenadas en la memoria. Según la naturaleza de la instrucción, la lógica de control emitirá señales internas destinadas a sincronizar la transferencia de datos entre registros, o entre éstos y la ALU. Además, se encarga de generar señales externas dirigidas al control de la memoria, 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, son también responsabilidad de a lógica de control. Las salidas externas del bloque de control son S1, S0, IO/M, RD, RW, ALE, CLK OUT, RESET OUT y HLDA. Para entender las funciones de las seis primeras de éstas, considere una operación de búsqueda en memoria. Durante el arranque del sistema, una red de RESET automático pone a cero el contador de programa. Cuando el µP sale del estado de RESET, la lógica de control genera las señales de estado IO/M=0, S1=1, S0=1, 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.

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), mientras que el byte de orden alto del PC (A8-A15) se carga en el buffer de direcciones. 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. Una vez que la dirección se estabiliza en el bus, 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, y de allí al registro de instrucciones para su posterior decodificación. Si la operación fuese de escritura en memoria se hubiese generado un comando de escritura WR. 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. Si la instrucción en progreso contiene más de un byte, 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. En este momento se inicia la ejecución propiamente dicha. De acuerdo con el tipo de instrucción, la UC generará todas las señales internas y externas necesarias para la transferencia entre registros, uso de la ALU, o acceso a memoria o puertos de E/S. 4.2.2 Los registros internos La figura 4.3 indica que el 8085 tiene un grupo de registros de 8 y 16 bits, a los cuales se tiene acceso por medio del bus interno de datos. Siete de estos registros son direccionables y están a la disposición de programador. El acumulador (A) es un registro especial de 8 bits asociado a la ALU, debido a que es usado por casi todas las instrucciones aritméticas y lógicas. Los seis registros restantes (B,C,D,E,H,L), también de 8 bits, son de propósito general y están disponibles para almacenamiento de datos durante la ejecución del programa. Para permitir la realización de algunas operaciones con operandos de 16 bits, los registros de propósito general pueden ser usados como tres registros pares de 16 bits: BC, DE, y HL. El 8085 posee instrucciones que hacen referencia a registros pares. Por ejemplo: LXI D, dato, cargará el dato de 16 bits especificado por el operando de la instrucción en el registro par DE. El uso adecuado de los registros internos resulta en la escritura de programas eficientes y de rápida ejecución. Al existir 7 registros de 8 bits accesibles por el programador, son necesarios sólo tres bits para identificarlos, de modo que las instrucciones de transferencia entre registros y las aritméticas (exceptuando las de suma y resta inmediata) son de un byte, al igual que en la máquina hipotética. 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, y toda operación adicional es realizada dentro de la propia CPU.

Arquitectura y Operación del Microprocesador 8085A

109

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

W

Z

B D H

C E L

MAR

PC SP

Buffer Direcciones

Buffer datos/ Direcciones

A8-A15

AD0-AD7

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

La figura 4.5 indica que existen cuatro fuentes posibles para cargar una dirección específica en el registro de direcciones de memoria (MAR), el cual es de 16 bits. Estas son: el PC, los registros de propósito general, el apuntador de pila SP y dos registros W y Z de 8 bits no accesibles por el programador. EL generador por excelencia de direcciones del μP es el contador de programa, el cual es un registro de 16 bits que mantiene la dirección de la próxima instrucción a ejecutar, o la dirección de búsqueda del 2do o 3er byte de una instrucción multibyte en proceso. Al final de la ejecución de una instrucción, o al concluir una búsqueda en memoria, el PC es incrementando automáticamente en 1 para apuntar a la siguiente posición de memoria. Cuando el arreglo de registros de propósito general actúa como fuente de una dirección, ésta debe ser cargada en el registro par por el programa. Instrucciones subsiguientes que hacen referencia a memoria utilizan esta información, por ejemplo: LDAX D, transfiere al acumulador el contenido de la posición de memoria cuya dirección especifica el contenido del registro par DE. El contenido del SP, otro registro de 16 bits, representa la dirección del tope de un bloque de memoria con estructura LIFO manejado por programa, y en la cual se pueden almacenar datos en forma temporal, recuperándolos oportunamente. 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. 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. 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, el SP es incrementado, o decre-

Arquitectura y Operación del Microprocesador 8085A

110

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

Reg.Temp.

A

Banderas

ALU

Fig. 4.6. La unidad aritmética lógica.

Se observa en la figura 4.6 el Registro de Estados o Banderas, de 5 bits, donde la ALU deposita información vinculada con el resultado de una operación aritmética o lógica. Las condiciones pueden ser probadas por programa. S

Z

AC

Fig. 4.7 Registro de condiciones de estado del 8085A

P

CY

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, en otras palabras CY =1 cuando el resultado no puede ser expresado por 8 bits, como se expuso en párrafos anteriores. Si no ocurre desborde, CY = 0. • La condición de Acarreo Auxiliar (AC) indica con un nivel alto el desborde desde el bit 3 del acumulador. Es útil cuando se realizan operaciones BCD. • El bit de Signo (S) se activa si el bit más significativo del resultado almacenado en A, es 1. Es puesta por instrucciones que usan el bit 7 del acumulador como bit de signo. En estos casos se permiten números entre -128 a + 127. • La bandera de Cero (Z) es 1, si el resultado de operaciones lógicas o aritméticas es cero. Si el resultado es distinto de cero, entonces Z = 0. • El bit de Paridad (P) va a 1 si número de bits en 1 del registro acumulador, es par. Si es impar, P = 0.

4.2.4 El bus interno de datos El 8085A es un µP con estructura de bus único, lo cual significa que toda transferencia de información en el interior del dispositivo se realiza a través del bus interno de datos de 8 bits. Las líneas internas de interconexión están separadas de los buses externos por medio de dos buffers de almacenamiento de 8 bits, cuyas salidas son de tres estados. Estos se denominan: buffer de direcciones y buffer de datos/direcciones. Durante una operación de acceso a memoria o puerto de E/S, el µP debe usar el bus de direcciones para distinguir el dispositivo con el cual desea comunicarse. Para cargar el bus externo con una dirección, el µP transfiere el byte alto del registro de direcciones de memoria al buffer de direcciones y el orden bajo del mismo registro se carga en el buffer de datos/direcciones, el cual debe estar habilitado en modo de salida. Debido a que el bus interno es de 8 bits, el µP debe realizar dos transferencias internas para emitir los 16 bits de la dirección. La dirección permanece estable sobre el bus por un tiempo equivalente a un ciclo de reloj, permitiendo que alguna lógica externa retenga el estado de las ocho líneas de menor peso de la dirección. Al final del ciclo de reloj, la unidad de control lleva a tercer estado las salidas del buffer de datos/direcciones. Dependiendo del tipo de operación a realizar con el dispositivo externo, 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, o abandonarán el tercer estado para que la CPU transmita el dato hacia el exterior durante una operación de escritura.

Arquitectura y Operación del Microprocesador 8085A

112

Finalmente, en la figura 4.8 se muestran el control de interrupciones y el canal de comunicación series, ambos conectados al bus interno de datos del 8085. Estos tópicos serán discutidos con detalle en capítulos próximos.

Fig. 4.8. 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. Muchas de estas señales son conocidas, otras adquirirán sentido a medida que el estudiante progrese en la lectura de este trabajo. 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. La frecuencia de CLK es la mitad de la de la señal en X1 X2. Entrada que inicializa el contador de programa y los flip flops de habilitación de interrupción y HLDA. Los buses de datos y direcciones y las líneas de control permanecen en tercer estado durante el proceso de RESET. Los contenidos de los registros internos del procesador, incluyendo el de banderas, pueden ser alterados por RESET.

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

A8-A15

Bus de direcciones. Los 8 bits más significativos de las direcciones de memoria o de dispositivos de E/S. Permanecen en tercer estado durante el proceso de RESET o en los modos HOLD y HALT.

AD0-AD7

Bus de datos/direcciones multiplexado. Los 8 bits menos significativos de las direcciones de memoria o dispositivos de E/S aparecen en el bus durante el primer estado un ciclo de máquina. El bus de datos se presenta durante el 2do y 3er ciclo de reloj.

ALE

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

Arquitectura y Operación del Microprocesador 8085A

S0,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, escritura en memoria o en puerto de E/S, lectura en memoria o en puerto de E/S, reconocimiento de interrupción o estado HALT. Señal de lectura. Un nivel bajo en RD indica que el μP desea leer la memoria o dispositivo de E/S seleccionado, y que el bus de datos está listo para la transferencia de información. Permanece en tercer estado durante el proceso de RESET o en los modos HOLD y HALT. Señal de escritura. 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. Permanece en tercer estado durante el proceso de RESET o en los modos HOLD y HALT. 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. Si presenta nivel bajo, 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 utiliza cuando el sistema se comunica con periféricos lentos cuyos tiempos de acceso sean superiores al periodo del dispositivo microprocesador. Entrada que indica que otro procesador o controlador solicita el uso de los buses de direcciones y datos. el CPU abandona el uso de estos buses una vez finalizado el ciclo de máquina en progreso, poniendo en estado de alta impedancia las siguientes líneas: A8-A15, AD0-AD7, RD , WR , e IO / M .

HLDA

Reconocimiento de HOLD. Salida que indica que el μP ha recibido una petición de HOLD y que los buses entrarán en tercer estado. HLDA vuelve a nivel bajo una vez que la solicitud de HOLD es removida.

INTA

Reconocimiento de interrupción. Después que una solicitud de interrupción ha sido aceptada, esta salida se usa, en lugar de RD, para activar el circuito que genera la interrupción.

TRAP SID SOD

Entrada de interrupción no enmascarable. Es la interrupción de más alta prioridad. Entrada de datos en serie. Los datos en la entrada SID son cargados en el bit 7 del acumulador se ejecuta una instrucción RIM. Salida de datos en serie. Usando la instrucción SIM, el estado del bit 7 del acumulador es cargado en esta salida.

Tabla. 4.1. Tipos de ciclos de máquina y señales de estado IO/M 0 0 1 1 0 1 Z Z Z

1

113

Ver tabla 4.1.

S1 0 1 0 1 1 1 0 X X

S0 1 0 1 0 1 1 0 X X

ESTADO Escritura en memoria Lectura de memoria Escritura a puerto de E/S Lectura de puerto de E/S Búsqueda de OP Reconocimiento de interrupción HALT HOLD RESET

Arquitectura y Operación del Microprocesador 8085A

114

4.3 CONSIDERACIONES DE TIEMPO PARA EL 8085A En la sección 3.1 se trató al µP imaginario como una máquina de estado. 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. 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. No obstante, 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.

Características del cristal f = 2fclk CL ≤ 30 pf, CS ≤ 7 pf, RS ≤ 75 Ω L

Ce

Ci

Red LC de resonancia paralela

f =

1 2π L (C e + C i )

Con Ce ≥ 2Ci para un Δfmin ≈ 10 % 20 pf

10 KΩ

Ci

Red RC de resonancia paralela

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

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

Arquitectura y Operación del Microprocesador 8085A

101

4.3.1 El ciclo de instrucción Al igual que el µP del capítulo anterior, cuando se aplica potencia al procesador, éste inicia la ejecución de las instrucciones en la posición 0000H de la memoria, esto se logra porque el sistema está provisto de una red para autoreset de la CPU. El microprocesador buscará la primera instrucción en memoria y la ejecutará, procesando todo el programa hasta su finalización. Este modo de operación se mantiene, a menos que el μP sea forzado a entrar, por una instrucción HLT, en un estado de parada (HALT). Existen otros métodos para modificar el proceso de ejecución normal de un programa, tales como las interrupciones o la petición de operación en modo HOLD.

M1 Estado

T1

T2

M2

T3

T4

T1

T2

M3

T3

T1

T2

M4

T3

T1

T2

T3

CLK

Ciclo de Máquina Ciclo de Instrucción

Fig. 4.10. Estados y ciclos de máquina del microprocesador.

El tiempo necesario para que el µP busque y ejecute una instrucción representa un ciclo de instrucción. Para completar la ejecución de una instrucción, el 8085A debe realizar de 1 a 5 operaciones de lectura/escritura a memoria o puerto de E/S. Cada uno de estos accesos a dispositivos externos a la CPU constituyen un ciclo de máquina (Mi), los cuales se realizan internamente por medio de una secuencia de microinstrucciones almacenadas en ROM. Cada paso de esta secuencia comprende un estado (Ti), necesitándose de 3 a 6 estados para completar un ciclo de máquina. Un estado corresponde a un ciclo del reloj del sistema. En la figura 4.10 se muestra un ciclo de instrucción de cuatro ciclos de máquina. 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. Lectura de puerto de E/S. Escritura en puerto de E/S Reconocimiento de interrupción.

Arquitectura y Operación del Microprocesador 8085A

102

• Modo de bus inactivo.

En el transcurso del primer estado cualquier ciclo de máquina, el microprocesador asigna los estados de las señales IO/M, S1, S0, para informar a dispositivos periféricos el tipo de ciclo de máquina que se inicia. La tabla 4.2 muestra el estado de las señales de estado y control para cada tipo de ciclo de máquina. Tabla. 4.2. Ciclos de máquina del 8085A. SEÑALES DE ESTADO

IO/M

S1

S0

0 0 0 1 1 1 0 1 Z

1 0 1 0 1 1 1 1 0

1 1 0 1 0 1 0 1 0

SEÑALES DE CONTROL

CICLO DE MÁQUINA

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

RD

WR

INTA

0 1 0 1 0 1 1 1 Z

1 0 1 0 1 1 1 1 Z

1 1 1 1 1 0 1 1 1

Durante el ciclo de máquina de bus inactivo no se realizan operaciones con memoria o puerto de E/S. Este tiempo es usado para operaciones internas con los registros y la ALU. El 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. Algunas instrucciones de un byte, como INX rp, requieren un ciclo de máquina único para obtener el OC de memoria y completar su ejecución; mientras que DAD rp, también de un byte, se procesa durante tres ciclos de máquina. En este último caso, los ciclos M2 y M3, ambos del tipo de bus inactivo, son utilizados por el µP para realizar operaciones internas necesarias para completar la ejecución de la instrucción. Considerando las instrucciones multybyte, por ejemplo JMP dirección, ésta exige tres lecturas de la memoria o ciclos de máquina para obtener el código de operación, la dirección de salto y culminar la ejecución. En cualquier caso, ninguna instrucción del 8085A requiere más de cinco ciclos de máquina. La fase de búsqueda del código que identifica a toda instrucción se realiza durante el primer ciclo de máquina M1. En cada ciclo se invierten tres estados, excepto el ciclo de búsqueda del código de operación, el cual utiliza cuatro o seis ciclos de reloj. Para ilustrar la secuencia de operaciones necesarias para la ejecución de una instrucción, considere INX H, la cual produce que el contenido del registro par HL se incremente en 1. En la figura 4.11 se observa el estado de los registros del µP antes de ejecutar la instrucción. El contenido de IR (21H) corresponde al código de operación de la última instrucción ejecutada, LXI H,20FFH, usada para cargar en HL, el dato de 16 bits 20FFH.

Arquitectura y Operación del Microprocesador 8085A

103

Fig. 4.11. Registros del CPU antes de ejecutar la instrucción INX H

Observe, en la figura 4.12, que una vez procesada la instrucción aritmética, el registro par contiene el valor 2100H y el registro IR mantiene el código de operación,23H, de la instrucción INX rp.

Fig. 4.12 Estado interno del CPU después de la ejecución de INX H.

Las figuras mostradas son una copia de la salida del programa MICRO 85, el cual simula en ambiente WINDOWS la operación de un microcomputador basado en el µP8085. Esta es una herramienta de gran valor didáctico y práctico, 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.

Arquitectura y Operación del Microprocesador 8085A

104

4.3.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. RESET

TR

RESET

RESET HALT

T1

HALT READY

T2

THALT

TW HOLD

READY

HOLD = 1

HOLD· INTVAL

READY

BITHLDA = 1

SI

INTVAL BITHALT= 0

BITHLDA = 1

no M1

T3

T4

CC=6

HOLD = 1

no

CC=4

no no

ÚLTIMO CICLO SI

no

SI

BITHLDA = 1

T5

T6 BITHLDA = 1

BITINTA = 1 BITINTE = 0

SI

HOLD

THOLD HOLD BITHLDA = 0

INT. VÁLIDA SI BITINTA = 1 BITINTE = 0

HALT = 1

SI

no

Fig. 4.13 Diagrama de transición de estados del µP 8085A

Para distinguir los modos de operación del µP, se analiza el diagrama de la figura 4.13 considerando sólo aquellos sucesos que modifican la transición normal de la ejecución entre los estados T1 y T6. Debe recordarse que durante un ciclo de máquina el µP pasa por tres estados, a menos que se trate del ciclo de búsqueda, el cual tiene una duración de cuatro o seis estados.

Arquitectura y Operación del Microprocesador 8085A

105

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

Arquitectura y Operación del Microprocesador 8085A

106

THALT. En este caso el sistema será reiniciado en TR y procederá a ejecutar la instrucción en la dirección 0000H de la memoria, cuando la orden de RESET sea levantada. Con el análisis previo, basado en el diagrama de estados de la figura 4.13, se pretende mostrar los modos de operación del microprocesador 8085A, más que detallar los sucesos que ocurren durante cada estado por el cual pasa la CPU. 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, entrada en el modo de operación HOLD o interrumpe al µP; é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, si se trata de una instrucción con un ciclo de máquina. Si la búsqueda o la ejecución de la instrucción requieren más de una acceso a la memoria, el primer ciclo M1 constará de cuatro o seis estados y los subsiguientes de sólo tres. Tal situación la describe el diagrama de transición de la figura 4.14.

RESET

RESET

TR RESET

T1

T2

T3

T4 T6

T5

Fig. 4.14 Diagrama de transición de estados del µP 8085A sin considerar los estados THALT, THOLD, TW, ni solicitudes de interrupción.

Retomando el caso de la instrucción INX H, cuyo ciclo de instrucción está constituido por un ciclo de máquina de seis estados, a continuación se detallan todas las operaciones, tanto externas como internas, realizadas por el 8085A durante cada estado. Se supone que la instrucción INX H, de un byte, 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.

Arquitectura y Operación del Microprocesador 8085A

107

T1 Externas: Al inicio de T1, el µP identifica el ciclo de máquina en progreso emitiendo las señales, IO / M =0, S0=1 y S1=1. Para indicar a la memoria la dirección de la posición donde se encuentra la instrucción, transfiere el contenido del contador de programa al buffer de datos/direcciones y al buffer de direcciones. Simultáneamente, el 8085A genera la señal ALE, activa en alto, para informar a dispositivos externos que el contenido del bus AD0-AD7 corresponde a los 8 bits de orden bajo de la dirección. Internas: Examina el flip flop de estado HALT. 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. Internas El contador de programa es incrementado. El estado de las entrada READY es capturado en el flanco de subida de T2, si es bajo se introduce un estado de espera. La entrada HOLD es examinada y si está en nivel alto se carga uno en el BITHLDA. T3 Externas: El código de operación de la instrucción es cargado en el registro de instrucciones del µP. RD pasa a nivel alto. Internas: El código de operación es pasado al decodificador de instrucciones. T4 Externas: Ninguna Internas: El código de operación es interpretado. 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. Si el ciclo de búsqueda de la instrucción en ejecución tuviese cuatro estados, al salir de T4, iniciaría un nuevo ciclo de máquina en T1. Durante T4 de instrucciones de 4T, se examina el BITHLDA, si es uno los buses pasan a tercer estado, se activa a uno la salida HLDA y el µP entra en un estado THOLD. Durante T4 de instrucciones de 6T, la entrada HOLD es muestreada, y si está en uno el BITHLDA es cargado con uno. T5-6 Externas: Ninguna Internas: El registro HL es incrementado. Se detecta el estado del BITHLDA, si está en uno el µP se traslada al estado THOLD en el próximo pulso de reloj.

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, se muestra como un diagrama de tiempo en la figura 4.15.

Arquitectura y Operación del Microprocesador 8085A

108

M1 SEÑAL

T1

T2

T3

T4

T5

T6

M1 T1

CLK S1,S0

IO / M

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

A8-A15

PCH

AD0-AD7

PCL

Indeterminado 23H

ALE

RD

Fig. 4.15 Ciclo de instrucción (Ciclo de máquina de búsqueda ) para la instrucción INX H (OC=23H).

En la mayoría de las instrucciones del 8085, el ciclo de búsqueda tiene cuatro estados, de modo que como indica el diagrama de figura 4.14, al final del estado T4 la transición ocurre hacia el estado T1 del ciclo de máquina siguiente. Las instrucciones en las cuales se invierte 6 estados durante el ciclo de búsqueda son: CALL, CALL condicional, DCX, INX, PCHL, PUSH, SPHL, y RET condicional. La función de cada una se describirá oportunamente. El 8085A requiere seis estados para completar la ejecución de la instrucción INX rp. Si la frecuencia de la fundamental del cristal de cuarzo externo es 6.25 MHz, cada estado interno tendrá una duración de 2000/6.25 ns o 320 ns. Esto significa que para realizar la operación de incrementar cualquiera de los registros pares, el 8085A invierte un tiempo de 6 estados x 320 ns/estados = 1.92 µs. La hoja técnica del µP señala un ciclo de instrucción de 1.3 µs. En realidad esta información se refiere tiempo que corresponde a la ejecución de las instrucciones de cuatro estados, 4x320 ns = 1.28 µs. Existen instrucciones de 18 estados, en cuya ejecución se invierte un tiempo de 5.76 µs. Una versión más rápida, el 8085A-2 tiene un ciclo de instrucción de 0.8 µs, operando a 5 MHz. También una versión CMOS de OKI semiconductor liberada en 1998 y con código MSM80C85AHRS, opera a esta velocidad. 4.3.3 El estado de espera. 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, 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, como indica la figura 4.16.

Arquitectura y Operación del Microprocesador 8085A

109

RESET

RESET

TR RESET

T1

T2

READY

READY

TW

READY

T3 T4 Fig. 4.16 Diagrama de transición de estados del µP 8085A considerando el estado TW. T6

T5

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

El diagrama de tiempos de la ejecución de la instrucción INX H con estado de espera es el de la figura 4.17.

Arquitectura y Operación del Microprocesador 8085A

SEÑAL

T1

T2

M1 T3

110

M1 T4

T5

T6

T1

CLK S1,S0 IO / M

A8-A15 AD0-AD7

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

Indeterminado

PCH PCL

23H

ALE

RD READY

Fig. 4.17 Ciclo de instrucción (Ciclo de máquina de búsqueda) para INX H (OC=23H) con estado de espera.

El estado de espera puede ser solicitado por dispositivos de memoria con tiempo de acceso tacc mayor que el tiempo especificado para que el 8085A lea un dato válido, después que la dirección está estabilizada en las líneas de direcciones. En la figura 4.18 se muestra un ciclo de lectura de memoria, especificándose el tiempo tAD (A0-15 valid to valid data in).

Fig. 4.18 Ciclo lectura en memoria.

El tiempo tAD es el lapso del cual dispone un dispositivo externo para cargar un dato válido en el bus de datos, después que el 8085A presenta una dirección válida en las líneas de direcciones. El fabricante especifica un valor de tAD = 575 ns para un cristal de 6.25 MHz. Si la memoria tiene un tiempo de acceso mayor que tAD, deberá solicitar al µP que

Arquitectura y Operación del Microprocesador 8085A

111

agregue uno o más estados de espera al ciclo de máquina en progreso. El valor de tAD para cualquier frecuencia del cristal dentro del rango válido está dado por la expresión (2.5+N).T-225 ns, donde N es el número de estados de espera. Por cada estado de espera, el tiempo tAD tendrá un incremento efectivo de 320 ns, a la frecuencia especificada. Aunque el concepto de estado de espera fue originalmente introducido para sincronizar la transferencia de datos entre el µP y memorias o periféricos de velocidad baja, es posible utilizarlo para detener el programa cada vez que se ejecute una instrucción o un ciclo de máquina. Estos modos de operación son de gran utilidad en la fase de desarrollo de un programa. 4.3.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, 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. No obstante, 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, este será ejecutado instrucción por instrucción. El circuito mostrado en la figura 4.19 permite llevar a la práctica el modo de operación de ejecución de instrucciones por pasos. El funcionamiento del circuito de paso simple se entiende mejor si se examina el diagrama de tiempos de la figura 4.20. El objetivo es detener la ejecución de un programa cada vez que se ejecuta una instrucción, debiéndose pulsar el interruptor paso de la figura 4.18 para procesar la instrucción siguiente. Considere el inicio de la ejecución de un programa después de haber reiniciado el µP. Una vez que el 8085A sale del estado de RESET, 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 T1 el µP identifica el ciclo en progreso emitiendo las señales de estado IO / M, S0 , y S1 . Por tratarse del ciclo de búsqueda, IO / M estará en nivel lógico cero, mientras que S0 y S1 estarán en alto, de modo que la salida de la puerta 74LS11 pasará a nivel alto. En el flanco descendente de la señal ALE, también generada durante el estado T1, se carga uno en U2A y la entrada READY del 8085 conmutará a nivel lógico bajo. Durante el flanco de subida del ciclo T2, el µP examina la línea READY y en siguiente pulso de reloj entrará en un estado de espera TW. El µP cesará toda actividad por la duración de N pulsos de reloj, hasta cuando se reciba un comando PS (CLKU2B) de paso simple.

Arquitectura y Operación del Microprocesador 8085A

Fig. 4.19. Circuito para paso simple.

126

Arquitectura y Operación del Microprocesador 8085A

127

Fig. 4.20 Ejecución de una instrucción de un ciclo de máquina y cuatro estados usando el modo de paso simple.

En la transición positiva de PS, el biestable U2B forzará un cero en U2A, ocasionando que la entrada READY regrese a uno. 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, repitiéndose el proceso descrito hasta la ejecución de la última instrucción del programa en proceso.

4.3.5 Ciclos de lectura y escritura en memoria y puertos de E/S. Para instrucciones de más de un byte, 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. Considere la figura 4.21, donde se presentan los estados y ciclos de máquina necesarios para ejecutar la instrucción STA dirección. 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, 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. Durante el ciclo de máquina M1, 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.

Arquitectura y Operación del Microprocesador 8085A

128

Fig. 4.21 Ciclos de instrucción de STA dirección.

Los ciclos de máquina M2 y M3, ambos del tipo de lectura en memoria, son necesarios para obtener el operando dirección de STA, mientras que durante M4 se escribe a memoria el byte en el acumulador. El µP invierte cuatro ciclos de máquinas y un total de trece estados en procesar STA dirección.

Fig. 4.22 Ciclo de instrucción para OUT 01H (OC=32H).

Los ciclos de máquina de lectura o escritura pueden ser de acceso a memoria o a un puerto de E/S. En el repertorio de instrucciones del 8085A existen 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, carga el contenido del acumulador en el bus de datos, mientras que en las dieciséis líneas de direcciones se duplica el número de ocho bits del operando puerto. Como resultado, la información en el registro A es transferida al dispositivo de salida con la dirección especificada por puerto. En la

Arquitectura y Operación del Microprocesador 8085A

129

figura 4.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. El ciclo de instrucción de OUT puerto lo constituyen tres ciclos de máquina distintos, el primero de búsqueda de OC, seguido de un ciclo de lectura en memoria para obtener la dirección del puerto, y finalmente un ciclo de escritura a memoria para realizar la transferencia hacia el dispositivo externo. Cada ciclo de máquina es identificado por las señales de estado IO / M, S1 , y S 0 , como puede apreciarse en la figura 4.22. Estas salidas son generadas al inicio de cada ciclo y mantienen sus niveles durante el transcurso del ciclo de máquina. Durante el ciclo de búsqueda M1, 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. 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, donde es decodificado. A la salida de T4 , el 8085A ha interpretado el OC y está enterado que debe regresar a la memoria y extraer el número del puerto. En el estado T1 de M2, la dirección PC+1 es presentada en el bus de direcciones, se activa de nuevo RD y entonces la memoria coloca en el bus de datos el número del puerto (01H), la cual se almacena en el µP. Finalizado el ciclo de máquina M2, 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. Para que en el ciclo M3 de escritura a puerto se realice la transferencia del byte en el A hacia el exterior del µP, es necesario cargar la dirección de 8 bits del puerto en las líneas de direcciones. 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.22. Al inicio del estado T2 de M3, el µP activa la señal de escritura WR , y carga en el bus externo de datos el contenido de A. Durante T3 se completa la transferencia hacia el periférico identificado por los 8 bits altos o bajos del bus de direcciones.

4.4 LA SECUENCIA DE INICIO DEL 8085 Cuando se suministra potencia a una aplicación basada en el 8085A, es de importancia vital para el funcionamiento adecuado del sistema, que el soporte físico de la máquina garantice que el µP entre en un estado inicial definido, 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. La entrada RESET IN del 8085A se usa con el propósito de llevar a la CPU al estado inicial deseado, después del proceso de arranque; o para restituir las condiciones iniciales, si el µP está bloqueado o funcionando en situación de falla. En ambos casos es necesario aplicar un nivel bajo al terminal, y mantenerlo por un tiempo mayor o igual a la duración de tres ciclos del reloj interno.

Arquitectura y Operación del Microprocesador 8085A

130

Como resultado de la aplicación de una señal válida a RESET IN , el µP entra en el estado de RESET (TR) y ejecuta una secuencia interna Durante el proceso de inicio se pone en cero el contador de programa y el registro de instrucciones y se inhabilita el sistema de interrupciones del µP. Todos los bits de control y de estado asociados a las líneas HOLD, READY, HLDA, y SOD, y los bits de ciclos de máquina y estados de máquina, son cargados con cero. La figura 4.23 muestra el diagrama de tiempos de la secuencia de inicio. M1

SEÑAL

T1

M1 T2

TR

TR

TR

TR

T1

CLK

RESET IN

RESET OUT

Fig. 4.23 Secuencia de RESET.

Un comando de RESET finaliza la ejecución del programa y lleva a tercer estado los buses de direcciones y datos y las líneas de control. Las banderas de condición de estados y los registros internos del µP no son manipulados durante la secuencia de inicio, pero no puede asegurarse que mantengan su contenido después de una operación de RESET. El nivel de la entrada RESET IN es examinado durante cada pulso del reloj. Cuando un nivel bajo es detectado, el µP, entra en TR y activa a uno la salida RESET OUT , tal como indica la figura 4.23, para notificar al exterior que el µP esta siendo iniciado. RESET OUT es sincrónica con el reloj CLK y permanece activa durante un número entero de ciclos de reloj. Esta salida puede usarse para el inicio de circuitos externos del sistema. Mientras RESET IN permanezca en cero transcurren nuevos TR y se continúa examinando el nivel de RESET IN . Durante este tiempo se ejecuta la secuencia de inicio. Cuando se detecta el regreso a nivel alto de la línea RESET IN , 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. Cuando el µP sale del estado TR, el contador de programa contiene la dirección 0000H, de modo que después de una operación de RESET la primera instrucción

Arquitectura y Operación del Microprocesador 8085A

131

será buscada en esta dirección. 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. Es usual que esta área de la memoria contenga la identificación del sistema, rutinas de detección de fallas y comandos para programar los periféricos y controladores asociados al sistema. Es obvio que si el dispositivo no es iniciado durante TR, la naturaleza aleatoria de los estados iniciales alcanzados por registros y flip flops internos 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. Existen otras situaciones en las cuales es necesario forzar el 8085A al estado inicial. Por ejemplo, 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. Si no ocurre la interrupción, una operación de RESET es el único medio para sacar al µP del estado THALT.

6.125 MHz

+5V 8085A

R1 5.1 KΩ

RESET

1N914

C1 10μf

Fig. 4.24 Circuito de RESET.

En las versiones CMOS del 8085A, por ejemplo MSM80C85A, existe una forma de operación conocida como modo de consumo bajo (power down mode), durante el cual el µP mantiene la información en memoria, pero se suspenden las actividades internas a tal punto que el consumo de potencia global se reduce en forma apreciable. Reiniciar el µP, es una de las opciones para salir del modo de bajo consumo. Un circuito típico para generar la señal de RESET, tanto en modo automático como manual, se presenta en la figura 4.24. Al activarse la fuente de +5V, el capacitor C1 aplicará un nivel bajo en la entrada RESET IN , iniciándose el estado TR. A continuación C1 se carga a través del resistor R1 con constante de tiempo τ = R1C1. El µP se mantendrá en TR hasta cuando

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 . Este es VIHR = 2.4 V. En condiciones normales de operación, el capacitor C1 mantiene en nivel alto la entrada de RESET. Si se acciona el pulsador de la figura 2.24, se lleva a nivel bajo a RESET IN por algunos milisegundos, al final de este periodo se repite el proceso de carga de C1. El diodo D1 permite la descarga rápida del C1 al desconectarse al energía. La duración de TR es fijada por el valor deτ, de modo que bastará con seleccionarla para que asegure el mantenimiento de RESET IN en cero por un tiempo equivalente al menos al de tres ciclos del reloj. No obstante deben tenerse presente dos condiciones de operación que obligan a prolongar el tiempo de RESET. Primero, debe considerarse que el voltaje de alimentación requiere algunos milisegundos para alcanzar un nivel del 95% de VCC, o 4.75 V, especificado en la hoja técnica del dispositivo como voltaje mínimo de operación. En segundo lugar, INTEL especifica que no garantiza, por razones concernientes a la tecnología de fabricación del dispositivo, el funcionamiento correcto del µP hasta 10 ms después que la tensión de alimentación VCC se eleve a 4.75 V . En consecuencia, conviene que durante el arranque se retarde la subida a nivel alto de la entrada RESET IN , por un tiempo mayor a t95 + 10 ms, donde t95 es el tiempo transcurrido desde la activación de la fuente de poder hasta cuando VCC = 4.75 V.

Fig. 4.25 Salida de la fuente de poder y señal

RESET IN durante el arranque del µP.

La figura 4.25 ilustra la situación descrita. Una vez estabilizado VCC en 4.75 V, se deja transcurrir un tiempo 10 ms + tR. En el inicio de tR el µP funciona en condiciones normales y la línea RESET IN está en cero. La rutina de inicio se ejecuta y

Arquitectura y Operación del Microprocesador 8085A

133

el µP entrará al último estado TR, durante el cual se detectara un nivel alto en RESET IN , y el 8085A transitará al ciclo de búsqueda de la primera instrucción del programa. En realidad no representa un problema crítico la selección de la constante de tiempoτ. El valor de 51 ms seleccionado para τ en el circuito de la figura 4.24, mantiene a RESET IN en cero (por debajo de 2.4 V) durante 33 largos ms, desde el momento de accionarse el interruptor de la fuente de poder. Con la descripción del circuito que hace posible el transito del 8085A hacia el estado TR, culmina la discusión del tópico de análisis de tiempos iniciada en este capítulo. 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, se analizan en capítulos posteriores.

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, es necesario organizar un sistema microcomputador alrededor del µP. Los recursos ofrecidos por el 8085A, tales como el sistema de interrupciones y el canal de comunicación serie, además de la versatilidad de los circuitos de soporte, distinguen al dispositivo como una CPU apropiada para uso en aplicaciones de control susceptibles de realizar con máquinas de 8 bits. Debido a que el 8085A es un microprocesador, no tiene memoria, puertos de E/S, ni temporizadores internos. En un sistema de cómputo basado en el 8085, todas estas funciones deben ser realizadas por circuitos externos conectados a los buses del microprocesador. El 8085A puede usarse para construir un microcomputador usando los circuitos de soporte del dispositivo, o interconectando el microprocesador a circuitos de memoria y puertos de E/S estándares. 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.

5.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. El sistema debe permitir que los valores de temperatura adquiridos, así como las eventuales condiciones de alarma sean presentados en la pantalla de un terminal o sean transmitidos por el canal de comunicación serie hacia un microcomputador de mayor capacidad. Un diagrama de bloques de sistema se muestra en la figura 5.1

El Microcomputador Básico

Vi

MUX

135

S/H

A

S2 S1 S0

D0-D7

CAD S/H

start

eoc

sensores

interrupción salida analógica

CDA

D0-D7

µC

8085A

salida serie

entrada serie

PC

Fig. 5.1 Sistema de adquisición de datos.

La adquisición, medición y control de temperatura es una aplicación susceptible de ser realizada con un µP de ocho bits. En otros casos, 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. 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. Cada sensor del sistema de adquisición de datos de la figura 5.1 proporciona como señal de salida una tensión analógica, cuya magnitud es una función no lineal del valor de la temperatura en el punto de prueba. El multiplexor analógico (MUX) selecciona una de las señales para ser enviada al convertidor analógico digital (CAD), después de ser procesada por el amplificador de instrumentación (A) y el circuito de muestreo y mantenimiento (S/H). 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. El circuito S/H muestrea la tensión de entrada y la mantiene constante durante el tiempo que dure la conversión. El proceso de conversión se inicia cuando es activada la línea START del CAD, y el fin de la conversión lo señala el CAD por medio de la salida EOC. 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. En caso que sea necesario disponer de otras salidas análogas, debe usarse un circuito demultiplexor análogo. Los circuitos de CAD y CDA son conectados al 8085A, por medio de puertos de E/S de dirección determinada. Como puede observarse en el diagrama de bloques del sistema, el valor digital equivalente al voltaje análogo desconocido es cargado en

El Microcomputador Básico

136

el µP. Este lo convertirá a unidades de temperatura y posteriormente lo transmitirá, por el canal de comunicación serie, hacia un terminal o computador central. El CDA, conectado a un puerto de salida, recibe un valor digital desde el µP y lo envía al proceso en forma de una tensión análoga. El 8085A presenta en las entradas S0-S2 del multiplexor, el número del canal, para seleccionar cual de las ocho señales va a ser convertida. Simultáneamente ordena al circuito S/H que inicie el muestreo de la señal. Transcurrido un tiempo igual al retardo de los circuitos MUX, A, y S/H, el µP detendrá el proceso de muestreo poniendo al S/H en el modo de mantenimiento y activará la señal START dando lugar al inicio de la conversión. Una vez culminada la conversión, el CAD usará la salida EOC para interrumpir al procesador. Como respuesta, el µP cargará en memoria el byte resultado de la conversión y procederá a procesar la siguiente entrada. Una vez adquiridas las ocho señales de entradas son convertidas en unidades de temperatura y enviadas al canal serie, reiniciándose el proceso. Para conectar la sección de adquisición de datos al µP, son necesarios tres puertos, uno de entrada (Puerto A) y dos de salida (Puertos B y C). La salida del CAD se acopla al puerto A, el puerto B entrega un valor digital a las entradas de CDA y cinco líneas del puerto C son utilizadas por el µP para el control del proceso de adquisición. El la figura 5.2 se observa que las líneas PC4- PC2 se usan para la selección del canal, mientras que PC1 controla el S/H y PC0 suministra la señal de inicio de conversión. D0-D7: CAD PA7 PA6 PA5 PA4 PA3 PA2 PA1 PA0

Puerto A: Entrada

PB7 PB6 PB5 PB4 PB3 PB2 PB1 PB0

Puerto B: Salida D0-D7: CDA

PC7 PC6 PC5 PC4 PC3 PC2 PC1 PC0 S2

Puerto C: Salida

S1 S0 S/H START

Fig. 5.2 Funciones de las líneas de los puertos de E/S.

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 puertos programables de 8 bits, uno de 6 bits y un contador/temporizador programable de 14 bits. El 8355/8755 provee 2 Kbytes de memoria ROM/EPROM y dos puertos 8 bits.

El Microcomputador 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.3 presenta el símbolo lógico de ambos circuitos.

Fig. 5.3 Dispositivos compatibles directamente con el 8085A.

No se requieren componentes LSI adicionales para construir la tarjeta necesaria para la aplicación. Una vez que la tensión de entrada desconocida es convertida a digital, el CAD activará la salida EOC de fin de conversión. Esta señal conecta a una de las entradas de interrupción del 8085A. Pueden usarse cualquiera de las líneas RST 5.5, RST 6.5, RST 7.5 o TRAP. El uso del sistema de interrupciones del µP para detectar el final del proceso de conversión de una muestra de la tensión de entrada, simplifica el diseño del sistema. Cuando un periférico aplica un nivel alto a cualquiera de estas entradas una vez que el µP acepta la solicitud, el contenido del contador de programa es almacenado en la pila y el control del programa es transferido a una posición determinada de la memoria. 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, resida en la dirección del salto. 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. El problema propone el uso del canal serie del 8085A para que el microprocesador se comunique con un microcomputador de mayor capacidad o con un terminal remoto. La 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. Para establecer la comunicación se utilizan la entrada SID y salida SOD del canal serie del µP. En el 8085A se integra un circuito transmisor/receptor

El Microcomputador Básico

138

asincrónico primitivo, el cual ser programado apropiadamente para establecer el enlace. Si el microcomputador o terminal está separado del sistema de adquisición por una distancia superior a 2 metros, la transferencia no puede ser realizada conectando directamente el transmisor al receptor. A esta distancia, los niveles lógicos de 0 y +5V sufrirán un deterioro severo debido a la atenuación introducida por el cable, el ancho de banda del canal y la velocidad de transmisión. Una de las soluciones a este problema es utilizar la interfase RS232C, la cual consiste en elevar los niveles lógicos desde 0 y 5 V a valores superiores, uno positivo para representar el cero lógico y otro negativo para el uno lógico. Computador

8085A

SID

1 ≥ 2.0 V 0 ≤ 0.8 V

0 = +V 1 = -V

1 ≥ 2.0 V 0 ≤ 0.8 V

SOD

Fig. 5.3 Interconexión RS232C

Los circuitos integrados LM1488 y LM1489 pueden usarse como dispositivos de interconexión entre el µP y el canal RS232C. El transmisor (LM1488) requiere alimentación de ±12V. Si no se dispone de fuentes de doble polaridad, debe utilizarse el dispositivo MAX-232, este circuito además de realizar el cambio de tensión de las señales de transmisión y recepción, también permite el uso de una fuente única al elevar el voltaje de la fuente desde +5 V hasta ±12V. Usando los circuitos de soporte del 8085A, se diseña un sistema mínimo para el control de la adquisición y presentación de datos. El acoplamiento de la entrada y salida serie al canal RS232C se realiza por medio de circuitos integrados de propósito específico. Para la recepción de datos se usa el LM1489 y para la transmisión, el LM1489.

El Microcomputador Básico

139

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

El Microcomputador Básico

140

Las entradas de interrupción no usadas son llevadas a nivel bajo al igual que le entrada HOLD. Debido a que el tiempo de acceso de la RAM del 8156 y de la EPROM del 8755 es de 400ns, no se requieren estados de espera por lo cual se mantiene la entrada READY en nivel alto. El fabricante del 8085A recomienda llevar las salidas WR y RD a +5V usando resistores, para evitar que cuando estén en tercer estado se produzcan selecciones falsas de dispositivos. Esto no lo muestra el diagrama de la figura 5.4. 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, según establece la interconexión de los componentes en el diagrama eléctrico de la figura 5.4.

Como se explicó con anterioridad, durante una operación de escritura o lectura en memoria o puerto de E/S, 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 . Según el tipo de operación en progreso, escribirá un dato sobre el bus AD0-AD7 o leerá el contenido del mismo. 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. El µP completará la lectura o escritura con independencia que el origen o destino de la información sea el deseado por el programador. Cuando varios circuitos de memoria son conectados al sistema, cada dispositivo debe ser habilitado para una zona particular del espacio de memoria. El mecanismo usado para decodificar la memoria debe asegurar que no exista la posibilidad que dos posiciones de memoria sean seleccionadas simultáneamente. En el caso del sistema de supervisión y presentación de temperaturas, 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. La selección de los circuitos de memoria y puertos de E/S se realiza usando el método de selección lineal. Para situar los 2 Kbytes de la EPROM en el espacio de memoria de 64K del 8085A, se conecta la línea de dirección A11 a la entrada habilitación CE1 mientras que la otra entrada de selección, CE 2 es forzada a uno lógico. Debido a que el circuito 8755 es habilitado cuando CE1 = 0 y CE 2 = 1 , el 8755 será seleccionado cada vez que la línea A11 esté en nivel bajo, como señala la tabla 5.1 de decodificación de direcciones. El proceso de adquisición se inicia una vez que el µC sale del estado de RESET, después de aplicarse potencia a la tarjeta. Debido a que el programa reside en la EPROM, cuando una dirección de los dos primeros Kbytes (0000H-07FFH) del espacio de direcciones se presente el bus, debe habilitarse el 8355. Con el esquema seleccionado se satisface tal condición, pero en realidad el 8355 será seleccionado cada vez que el bus contenga una dirección comprendida en los rangos 0-2K, 4-6K, 8-10K, 12-14K, 16-18K,...,60K-62K, lo cual representa 16 bloques de 2Kbytes, para un total de 32 K.

El Microcomputador Básico

141

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

EPROM (2K)

RWM (256 bytes)

A7 A6 A5 A4

A3 A2 A1 A0

x

x

x

x

0

0

0

0

0

0

0

0

0

0

0

0

x .

x .

x .

x .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

1 .

x

x

x

x

0

1

1

1

1

1

1

1

1

1

1

0

x

x

x

x

0

1

1

1

1

1

1

1

1

1

1

1

x

x

x

x

1

x

x

x

0

0

0

0

0

0

0

0

x

x

x

x

1

x

x

x

0

0

0

0

0

0

0

1

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

x

x

x

x

1

x

x

x

1

1

1

1

1

1

1

0

x

x

x

x

1

x

x

x

1

1

1

1

1

1

1

1

Para cualquier dirección en esta zona, la línea A11 está en cero. Observe que esto lo determina la condición indiferente de las líneas A12-A15. 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. El 8155 es seleccionado cuando la línea A11 está en nivel alto, lo cual ocurre para los restantes 32K del espacio total de memoria. Considerando de nuevo como cero la condición indiferente, la zona de memoria donde está situada la RWM está comprendida desde 0800H hasta 08FFH. Como el µC está dedicado a una aplicación específica, es suficiente con garantizar que no existirá conflicto entre las posiciones de memoria de los dos circuitos existentes. Al igual que ocurre con la sección de la memoria EPROM, los puertos de E/S del 8755 solo podrán se seleccionados cuando la línea de direcciones A11 esté en nivel bajo. El circuito 8755 tiene cuatro registros internos: el puerto A, el puerto B y dos registros de programación, uno para cada puerto. La dirección particular de los puertos la especifica las líneas del bus multiplexado AD0-AD1. En la tabla 5.2 se presenta la asignación de direcciones para los registros de E/S del 8755. Tabla. 5.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

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. 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. Cuando se ejecuta una de estas instrucciones, el número del puerto es duplicado sobre las 16 líneas de direcciones. Debido a que la línea de dirección A11 debe estar en cero, el operando puerto de IN y OUT debe ser especificado como indica la figura 5.5. El estado lógico bajo del bit 3 del número del puerto, garantiza que A11 estará en cero. x

x

x

x

0

x

AD1 AD0

Fig. 5.5 Patrón de bits del número de puerto para el 8755

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

x

x

x

1

AD2 AD1 AD0

Fig. 5.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.3. Tabla. 5.3 Direcciones de puertos de E/S para el 8156

Considerando una vez más como cero, las condiciones especificadas como indiferente en los patrones de bits de las figuras 5.5 y 5.6, se obtienen para los puertos las direcciones especificadas por la tabla 5.4. Aunque los puertos de E/S del 8755 no se usan en el sistema de adquisición, sus direcciones también se indican.

El Microcomputador Básico

143

Tabla. 5.4 Direcciones de los puertos de E/S Puerto A 00H 8755 Puerto B 01H DDR A 02H DDR B 03H RC/S 08H 8156 Puerto A 09H Puerto B 0AH Puerto C 0BH T/C bajo 0CH T/C alto 0DH

Se ha mostrado que el diseño un µC usando el 8085A y sus circuitos de soporte, es una tarea sencilla. En realidad el trabajo se limita a conectar terminal a terminal los 3 dispositivos. Si una aplicación exige mayores recursos que los ofrecidos por el sistema mínimo, pueden usarse circuitos 8755 y 8156 adicionales y utilizar las líneas de direcciones A12 hasta A15 para seleccionarlos. Cuando se usa el método de selección lineal para habilitar varios dispositivos, las áreas de memoria asignadas a cada uno de los chips no corresponden a bloques contiguos, quedando como responsabilidad del programador reconocer las áreas válidas de memoria. Otra desventaja de la selección lineal es que limita el número de circuitos posibles de conectar al µP, 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. Este obstáculo puede ser superado usando circuitos decodificadores, como sugiere la figura 5.7. El dispositivo 8155 cumple funciones iguales que el 8156, exceptuando el hecho que el circuito es seleccionado aplicando un nivel bajo en la entrada de habilitación CE . Otra posibilidad de expandir el sistema MCS-85 mínimo se muestra en la figura 5.8. El uso de los circuitos de soporte del 8085A se recomienda para sistemas que requieran poca memoria. En la medida que se incrementen las exigencias de memoria o de puertos de entrada y salida, deberán conectarse componentes adicionales al microprocesador. Para aplicaciones que exijan capacidad de memoria mediana o grande, puede ser preferible apelar al uso de dispositivos estándares. En tal situación deberá usarse un registro externo de 8 bits para demultiplexar el bus de direcciones /datos.

5.2 INTERCONEXIÓN DEL 8085A CON DISPOSITIVOS CONVENCIONALES. 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. Cuando se considere necesario, es posible acoplar circuitos convencionales de memoria o puertos al 8085A siempre que se separen las ocho líneas me-

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.

Fig. 5.7 Sistema expandido con selección usando decodificadores 3 a 8

El Microcomputador Básico

145

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto A

(8)

Puerto B

(8)

Puerto C

(6)

Puerto A

(8)

Puerto B

(8)

Puerto C

(6)

Fig. 5.8 Sistema MCS-5 expandido.

El 8085A no tiene 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. Estas funciones las cumple en conjunto las señales IO / M , WR y RD . A0-A15 A8-A15 A0-A7

8085A ALE

LACTH

EPROM

RWM

Puerto de Entrada

Puerto de Salida

D0-AD7 RD WR

MRD

MWR

Decodificador

IO/M

Fig. 5.9 Sistema 8085 usando componentes externos convencionales

IORD

IOWR

El Microcomputador Básico

146

Para el control del acceso a memoria y puertos convencionales, estas salidas pueden combinarse para obtener señales de lectura y escritura correspondientes. En el diagrama de bloques de la figura 5.9 se observa el modo de conexión del 8085A a dispositivos externos estándar, 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.

74LS373 ALE

G

8085A AD0-AD7

Q0 - Q7

A0-A7

D0-D7

OC

D0-D7

Fig. 5.10 Demultiplexión del bus de direcciones/datos del 8085A.

Es conocido por el lector que la salida ALE es activada a nivel alto al inicio del estado T1 de todo ciclo de máquina, como medio de notificar a dispositivos externos que el bus AD0-AD7 contiene información correspondiente a direcciones. 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. En la figura 5.10 se muestran las conexiones necesarias para realizar la demultiplexión del bus. Las salidas Q0-Q7 del 74LS373 siguen el valor de las entradas correspondientes AD0-AD7, cuando la línea G está en nivel lógico alto, y capturan el último valor de las entradas cuando G vuelve a cero. Conectando la salida ALE del µP a la entrada G del registro se garantiza la 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, se utiliza la lógica discreta de la figura 5.11.

El Microcomputador Básico

147

Fig. 5.11 Decodificador de señales de lectura y escritura en memoria y E/S

El diagrama eléctrico del µP 8085A, listo para ser interconectado a circuitos de memoria o de puertos de E/S convencionales se presenta en la figura 5.12. Debido a que el objetivo es diseñar un sistema mínimo basado en el microprocesador 8085A pero que use componentes externos estándar, y sea capaz de realizar las tareas de control del sistema de supervisión de temperatura de la figura 5.1, se deben seleccionar los dispositivos de memoria y de E/S a utilizar. A continuación se procede a seleccionar la memoria de programa y de datos y el circuito integrado de puertos de E/S.

5.2.1 La memoria de programa

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

El Microcomputador Básico

Fig. 5.12 Unidad de proceso central de un microcomputador clásico

148

El Microcomputador Básico

149

A7

VCC

A6 A5

A8 A9

A4

VPP

A3

OE

A2

2716

A1

2K x 8

A10 CS/ PGM

A0

O7

O0

O6

O1

O5

A0 – A10 O0 - O7

O2

O4

OE

Direcciones Salida de Datos Habilitar Salida

GND

O3

CS / PGM

Selección de chip/ Programar

Fig. 5.13 Distribución de terminales de la EPROM 2716.

El circuito integrado código 2716 tiene 11 líneas de direcciones (A0-A10) para brindar acceso a las 2048 posiciones de la memoria, y 8 salidas de datos D0-D7. El modo de operación lo establece las 2 entradas de control ( CS y OE ), de acuerdo con lo indicado en la tabla 5.5. Tabla. 5.5 Modos de operación de la EPROM 2716.

MODO Deshabilitar Lectura Espera

OE VIH VIL x

CS / PGM

VPP

VCC

SALIDAS

x VIL VIH

+5 +5 +5

+5 +5 +5

DATOSsalida

+25

+5

DATOSentrada

+25 +25

+5 +5

DATOSsalida

Z Z

VIH

Programar

VIH

Verificar Programa Inhibir Programa

VIL VIH

VIL : TTLbajo 0.8 Vmáx

VIL

VIL VIL

VIH : TTLalto 2.0 Vmín

Z

Z: Alta Impedancia

La EPROM tiene dos entradas de alimentación: VCC y Vpp. En funcionamiento normal, ambos terminales se conectan a +5 V. Durante el proceso de programación de la memoria, el terminal Vpp debe estar a +25 V. Como ilustra la figura 5.14, para obtener en las salidas D0-D7 el contenido de una posición de la 2716, los terminales de habilitación de salida OE y de selección de chip CS deben estar en estado cero. Un

El Microcomputador Básico

150

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

Fig. 5.14 Estructura interna de la EPROM.

La entrada de selección de chip, CS , cumple una función doble de control. 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, la línea CS permite controlar la potencia consumida por la 2716. Cuando CS es llevada al nivel lógico uno, 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, quedando sin energía el decodificador de fila, los buffers de salida y el multiplexor de columna. Este modo de operación se conoce como de consumo bajo o espera, 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. Un ciclo de lectura de la 2716 se muestra en la figura 5.15. La entrada CS se usa para seleccionar la memoria y OE para habilitar la presentación de los datos en los terminales de salida. 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, a continuación se selecciona la memoria y se habilitan los buffers de salida llevando a cero las entradas CS y OE , respectivamente. Transcurrido el tiempo de acceso, el dato almacenado en la posición escogida se presenta en las líneas O0-O7.

El Microcomputador Básico

151

DIRECCIONES

Dirección valida

CS

tCE

OE

tOE tOF

tACC SALIDAS

Datos validos

Fig. 5.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.

tCE

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

tOE

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.

tDF

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.

Como se observa en la figura 5.16, 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.4. La línea de dirección A11 se conecta a CS y la salida de lectura en memoria, MRD , se aplica a la entrada de habilitación de salidas OE . 5.2.2 La memoria de datos

Para suplir la zona de memoria volátil se usa una RWM estática 6116 de 2 Kbytes, en lugar de los 256 bytes del 8156.

El Microcomputador Básico

152

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

A7

A6 A5 A4 A3 A2 A1 A0 D0 D1 D2

6116 2K x 8

GND

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

A0 -A10 D0 - D7 CS

Direcciones E/S de Datos Seleccionar Chip

OE

Habilitar Salida

WE

Habilitar Escritura

Fig. 5.17 Distribución de terminales de la RWM 6116.

Tabla. 5.6 Modos de operación de la RWM 6116.

MODO Lectura Escritura Deshabilitar Espera

WE VIH VIL VIH x

CS VIL VIL x VIH

OE VIL x VIH x

D0 –D7 DATOSsalida DATOSentrada

Z Z

El Microcomputador 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, D0-D7. Las líneas de control CS y OE funcionan en forma idéntica que en la EPROM 2716, mientras que la entrada WE es la señal de escritura de datos. El tiempo de acceso de la versión más lenta del dispositivo es de 250 ns. El ciclo de lectura de una celda de memoria de la RWM es similar al descrito para la EPROM. Para explicar como se almacenan los datos en la memoria, se muestra en la figura 5.18 el diagrama de tiempos de un ciclo de escritura. Una 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, la cual debe permanecer estable en A0-A10 durante un tiempo tAS, antes de la activación de las señales de control CS y WE , para permitir que la memoria decodifique la nueva dirección. Si esta restricción es violada, el dato en D0-D7 se almacena en una posición con dirección imposible de predecir. tWC DIRECCIÓN

tCSW CS

tAS

tAH

tWP

WE

tDS

tDH

D0 - D7

Fig. 5.18 Ciclo de escritura de la RWM 6116

Cuando las entradas de selección y escritura van a nivel alto, la dirección debe mantenerse válida durante un tiempo tAH. 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 . Al colocarse el dato en los terminales de entrada, debe permanecer estable cuando menos un tiempo tDS antes, y un intervalo tDH después, que las entradas de selección de chip CS y habilitación de escritura WE sean removidas. La duración del ciclo de escritura es tWC

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.

tAH

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 .

tCSW

Tiempo de preparación de CS . (Chip Select Setup Before End of Write) Duración mínima de la entrada de selección de chip.

tWP

Ancho del pulso de escritura Ancho mínimo del pulso WE .

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.

tDH

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.

(Write Pulse Width)

Las especificaciones técnicas de las memorias SRWM distinguen entre dos modos de ciclo de escritura: 1. Escritura bajo control de WE " " " " CS . 2.

El diagrama de tiempos mostrado en la figura 5.18 corresponde a la memoria de lectura/escritura estática 6116 operando en modo 1. La diferencia la establece cual de las dos señales, WE o CS , se activa de último y se remueve primero. Para que la memoria RWM sea decodificada en las mismas direcciones que la sección de RAM del 8156 de la figura 5.4, es suficiente con aplicar la a la entrada CS , el complemento de la línea de direcciones A11. Las señales de lectura y escritura MRD y MRW se conectan respectivamente a las entradas o OE y WE de la 6116, como especifica la figura 5.19. 5.2.3 Los puertos de entrada y salida

Para conectar al 8085A la etapa de adquisición de datos de temperatura se utilizaron la sección de E/S del 8156. Para cumplir las funciones de E/S de la CPU de la figura 4.41, se usa un circuito programable para interconexión de periféricos del tipo PPI 8255 (PPI: Programmable Peripheral Interface). El 8255 es un circuito LSI de uso difundido y de bajo costo. A pesar que fue introducido en la década de los setenta

El Microcomputador Básico

155

como un componente de E/S para sistemas basados en el μP 8080 de INTEL, aun es posible encontrarlo (no necesariamente como un 8255 discreto) en μCs basados en procesadores modernos, cumpliendo funciones de puerto para la conexión de teclado e impresora.

Fig. 5.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, se realizará en el capítulo 9. Por ahora, interesa más bien entender como se interconecta el PPI al 8085A y la forma en la cual es seleccionado por el µP. El 8255 tiene 24 líneas de E/S distribuidas en 3 puertos de 8 bits, los cuales los cuales pueden ser programados como entradas o salidas en 2 grupos (A y B) de 12 líneas y puede usarse en tres modos principales de operación. La configuración de los terminales y el símbolo eléctrico del circuito programable para interconexión de periféricos 8255, son los mostrados en la figura 5.20.

8255

Fig. 5.20 Distribución de terminales del PPI 8255

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); 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). Además de los puertos el 8255 contiene un registro de comandos para la programación del dispositivo. Para que el 8085A pueda tener acceso a uno de los registros para programar el dispositivo o usar uno de los puertos, la entrada de habilitación CS debe ponerse a nivel bajo. 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, según lo indicado por la tabla siguiente. Tabla. 5.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 . Estas líneas de entrada deben conectarse, respectivamente, a las salidas de control de lectura y escritura en puerto de E/S: IORD e IOWR de la CPU de la figura 5.16. Las ocho 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; o en caso que RD y WR estén ambas en uno, independientemente del estado de CS . La tabla 5.8 muestra el modo básico de operación del 8255.

Tabla. 5.8 Tabla de estados del PPI 8255

El Microcomputador Básico

157

La interconexión del 8255 al µP se realiza como indica la figura 5.21. Observe que para seleccionar el circuito, se usa el complemento de la línea de direcciones A11.

Fig. 5.21 Conexión del PPI 8255 al µP 8085A

Cuando se aplica tensión para arrancar al sistema, la señal de salida de 8085A: RESET OUT se activa en alto, y fuerza al 8255 a iniciarse con todos los puertos programados como entrada. Si tal configuración no es la deseada para la aplicación, el PPI debe ser reprogramado escribiendo un cierto patrón de bits en el registro de comando. La selección lineal del 8255 usando la línea A11, establece las direcciones de los puertos como especifica la figura 5.22. A15

A14 A13 A12 A11 A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

x

x

x

x

1

x

A1

A0

Puerto A Puerto B Puerto C Comando

08H 09H 0AH 0BH

Fig. 5.22 El PPI 8255 es seleccionado por medio de la 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 ). No obstante, las líneas de datos de ambos dispositivos nunca se conectan simultáneamente al bus de direcciones/datos AD0-AD7 del 8085A. Esto es posible porque el espacio de direcciones de memoria está separado del correspondiente a los puertos de E/S. Durante una operación de lectura o escritura, 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 ; mientras que un acceso a un puerto de E/S es notificado por medio de les señales IORD o IOWR . Durante una operación de lectura (escritura) de la memoria RWM, se selecciona el chip 6116 y se activa en nivel bajo la señal MRD ( MRW ) para leer (escri-

El Microcomputador Básico

158

bir) la posición especificada por las líneas de direcciones A0-A10. Aun cuando está operación pone un nivel cero en la entrada CS del 8255, el bus de datos (D0-D7) del PPI permanece en tercer estado debido a que las entradas de control IORD e IOWR están ambas en nivel alto. Esto puede ser verificado consultando la tabla 5.8 de funcionamiento del 8255. Una situación similar ocurre cuando se ejecuta una instrucción IN puerto (OUT puerto). Con el 8255 habilitado, 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. En este caso la memoria 6116 permanece inactiva porque las señales MRD y MRW , ambas en uno, mantienen flotantes las líneas de datos (D0-D7) del circuito. Si se desea mantener la memoria RWM en el modo de bajo consumo ( CS =1) cuando se habilite el 8255, puede usarse una de las líneas de direcciones A12A15 (en lugar de A11) para seleccionar el PPI. En la figura 5.23 se presenta el diagrama final de la sección de memoria y puertos de E/S, usando dispositivos convencionales, para el sistema de adquisición y supervisión de datos de la figura 5.1,

5.3 DECODIFICACIÓN EXHAUSTIVA DE LAS DIRECCIONES En la técnica de selección lineal, cada línea de bus de direcciones del µP se utiliza para habilitar un componente particular del sistema. Este método usado hasta ahora para decodificar las direcciones de los circuitos de memoria y puertos tiene varias desventajas. En primer término, 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. En el caso del µC de la figura 5.4 para el acceso a los 2 Kbytes de EPROM del 8755 son necesarios once líneas de direcciones, mientras que para los 256 bytes de la RWM del 8156 bastan con sólo ocho líneas. Esto significa que de los dieciséis bits del bus de direcciones, once (211=2048K) están destinadas para el acceso a las áreas de EPROM y RAM. Es común que la mayoría de las aplicaciones requieran una zona de EPROM de mayor capacidad que la de RWM. Como indica la figura 5.24, las cinco líneas de direcciones A11-A15 pueden usarse para seleccionar los componentes. La línea A11 selecciona la EPROM y la RAM quedando los cuatro bits restantes para habilitar otras memorias o dispositivos de E/S. A pesar del número reducido de dispositivos posibles de habilitar mediante está técnica, 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.

El Microcomputador Básico

Fig. 5.23 Sección de memoria y E/S del µC de la figura 5.12.

159

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. 5.24 Esquema de selección lineal.

Otra desventaja asociada a esta técnica es que secciona por la mitad el espacio total de 64K de memoria disponible, por cada bit individual de dirección usado como señal de selección de chip. El uso de la línea A11 para seleccionar la EPROM del 8755 en el µC de la figura 5.4, divide el espacio de memoria en dos bloques de 32K cada uno. Otra limitación de la selección lineal es que si se utiliza para habilitar varios 8755, dos por ejemplo, las zonas ocupadas por la sección de memoria de cada circuito no son contiguas. La del primero estará asignada desde 0 a 2K y la del segundo desde 6K hasta 8K, como se deduce examinando el sistema de la figura 5.8. En estos casos, es responsabilidad del programador reconocer las áreas válidas de memoria. 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, la selección lineal resulta en una decodificación parcial del espacio de direcciones. Tal esquema es permitido como medio de simplificar el decodificador, siempre y cuando el sistema no utilice todo el espacio de memoria del µP. Una decodificación incompleta significa que una misma posición de memoria puede ser seleccionada con direcciones diferentes. Recuerde que se indicó en la sección 5.1 que aun cuando la EPROM está asignada a los primeros 2Kbytes (000H-07FFH), la sección de memoria del 8755 será seleccionada cada vez que el bus contenga una dirección comprendida en los rangos 0-2K, 4-6K, 8-10K, 1214K,16-18K, ...,60K-62K. Estos bloques adicionales se conocen como zonas imagen y su número puede ser calculado por la ecuación, I=2

(n − j − k − l)

donde: n: número de líneas del bus de direcciones. j: número de entradas de direcciones de la memoria. k: número de líneas de direcciones usadas en la decodificación externa, y l: número de líneas comunes a la decodificación externa e interna.

En el caso en discusión, I=2(16-11-1-0) = 16. Las zonas imagen del bloque de 2K de la EPROM del 8755 se muestran en el mapa de memoria de la figura 5.25, y corresponden a las direcciones para las cuales la línea A11 está en cero.

El Microcomputador Básico

161

FFFFH 60K-62K

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

0000H

Fig. 5.25 Ubicación del bloque de 2Kbytes en el espacio de 64 K de memoria.

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

A15 A14 A13 A12

A11 A10 A9 A8

A 7 A6 A5 A 4

A 3 A 2 A1 A0

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

0

0

0

0

0

1

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

El Microcomputador Básico

162

Para todas las direcciones en el área de la EPROM, 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. De modo que utilizando estas condiciones y aplicando RD a la entrada de habilitación de salidas OE de la 2732, se puede seleccionar la memoria, como sugiere el circuito de la figura 5.26.

Fig. 5.26 Decodificador de direcciones de la EPROM 2764

Otra posibilidad para la decodificación de la 2764, es utilizar la señal de control de lectura en memoria MRD , en lugar de RD , para habilitar las salidas de la EPROM. Haciendo esto, el circuito decodificador se simplifica como indica el diagrama eléctrico de la figura 5.27.

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

El Microcomputador Básico

163

El decodificador de la figura 5.27 deja abierta la posibilidad que en una operación de acceso a puerto, la entrada de selección CE vaya a nivel lógico cero. Esto no representa un problema, porque MRD estará en uno y las salidas de datos de la EPROM permanecerán flotantes. El uso de lógica integrada en escala pequeña para realizar el decodificador de direcciones no es una buena elección. Tal arreglo no es práctico porque obliga a que cada componente tenga su propio decodificador con puertas discretas, aumentando el costo del sistema. Más conveniente es usar circuitos MSI como decodificadores de direcciones. 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.2 Considere que para un sistema que requiere 32K de memoria EPROM se utiliza un arreglo de ocho memorias EPROM 2732, cada una de las cuales contiene 4096 posiciones. Para seleccionar los dispositivos de memoria se usará un decodificador 3 a 8 del tipo 74LS138. La tabla de estados y la distribución de los terminales del circuito, muestran en la figura 5.28. G1

G2A

G2B

C

B

A

Y7

Y6

Y5

Y4

Y3

Y2

Y1

Y0

0 x x 1 1 1 1 1 1 1 1

x 1 x 0 0 0 0 0 0 0 0

x x 1 0 0 0 0 0 0 0 0

x x x 0 0 0 0 1 1 1 1

x x x 0 0 1 1 0 0 1 1

x x x 0 1 0 1 0 1 0 1

1 1 1 1 1 1 1 1 1 1 0

1 1 1 1 1 1 1 1 1 0 1

1 1 1 1 1 1 1 1 0 1 1

1 1 1 1 1 1 1 0 1 1 1

1 1 1 1 1 1 0 1 1 1 1

1 1 1 1 1 0 1 1 1 1 1

1 1 1 1 0 1 1 1 1 1 1

1 1 1 0 1 1 1 1 1 1 1

A

Vcc

B

Y0

C G2A

G2B

74LS138

Y1 Y2 Y3

G1

Y4

Y7

Y5

GND

Y6

Fig. 5.28 Tabla de la verdad del decodificador 74LS138

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

El Microcomputador Básico

164

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

EPROM 0 1 2 3 4 5 6 7

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.10. Para cada bloque se muestra la dirección inicial y final.

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

A15 A14 A13 A12 A11 A10 A9 A8 EPROM 0

EPROM 1

EPROM 2

EPROM 7

A 7 A6 A5 A 4

A 3 A 2 A1 A0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0 0

0 0

0 0

0 1

1 1 0 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0 0

0 0

1 1

0 0

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 1

0 .

0 .

1 .

1 .

0 0 . .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0 .

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

El circuito decodificador de direcciones para las ocho 2732, es el presentado en la figura 5.40. Observe que para todo el espacio de 32K, la línea de direcciones A15 permanece en nivel bajo, mientras que los bits A12-A14 muestran una progresión binaria desde una EPROM a la siguiente. 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 , el decodificador será habilitado cada vez que el bus de direcciones identifique una posición de memoria

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.

G 1 0 0 0 0

B X 0 0 1 1

A x 0 1 0 1

Y3

Y2

Y1

Y0

1 1 1 1 0

1 1 1 0 1

1 1 0 1 1

1 0 1 1 1

Ga Aa Ba Y0a Y1a Y2a Y3a GND

74LS139

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

Fig. 5.30 Tabla de la verdad del decodificador 74LS139

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

El Microcomputador 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

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

2732 6116 8255

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 EPROM

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

1

1

1

1

0

1

0 0

0

0

0

0

0

0

0

0

0 0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

0

0

0

1

1 0

0

0

0

0

0

0

0

0

0

0

0.

0.

0.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

1.

.

RWM

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

Fig. 5.31 Circuito decodificador de direcciones y de puertos.

167

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

CS

DIRECCIÓN

PUERTOS

0000H-3FFFH

CS0

00H-3FH

EXPANSIÓN DE PUERTOS

4000H-4FFFH

CS1

40H-4FH

8155 N°1

5000H-5FFFH

CS2

50H-5FH

8155 N°2 8729

6000H-7FFFH

CS3

60H-7FH

CONTROLADOR DE TECLADO/DISPLAY

HASTA 8K DE RWM O EPROM

8000H-9FFFH

CS4

80H-9FH

8255 N°1

4K PARA EXPANSION

A000H-AFFFH

CS5

A0H-AFH

EXPANSIÓN

2K PARA EXPANSION

B000H-B7FFH

CS6

B0H-BFH

EXPANSIÓN

2K PARA EXPANSION

B800H-BFFFH

CS7

B8H-BFH

EXPANSIÓN

8255 N°2

27128 (16K EPROM) MONITOR DEL SISTEMA

8155 N°1 256 bytes de RWM

8155 N°2 256 bytes de RWM

6264/2764 HASTA 8K DE RWM O EPROM

6264/2764

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

1 X 0 0 0 0

1C x 0 1 1 1 1

2C

2G

1 X 0 0 0 0

x 1 0 0 0 0

1G

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

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

Y3a

Y 2a

Y1a

Y0a

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

1 1 1 1 0 1

1 1 1 0 1 1

1 1 0 1 1 1

Y 2b

Y1b

Y 0b

1 1 1 1 0 1

1 1 1 0 1 1

1 1 0 1 1 1

Fig. 5.32 Tabla de la verdad del decodificador 74LS15

1C 1G

B

1Y3 1Y 2 1Y1

74LS156

Vcc 2C 2G A

1Y0

2 Y3 2Y 2 2Y1

GND

2Y0

El Microcomputador Básico

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

169

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

EPROM 4 X 4K

RWM

256 bytes RWM

256 bytes

RWM

2 X 4K

A11 A10 A9 A8

A7 A 6 A 5 A 4

A 3 A2 A1 A 0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0 0

0 0

0 0

0 1

1 1 0 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

0 0

0 0

0 1

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

0 0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1 1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

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

RWM 4 X 2K

EXPANSIÓN

4Kbytes

EXPANSIÓN

2Kbytes EXPANSIÓN

2Kbytes

1

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

1 1

0 0

0 0

0 0

0 1

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 1

0 0

0 0

0 1

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1 0

1

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

0

1

1

0

0

0

0

0

0

0

0

0

0

0

1

0

0

1

1

1

1

1

1

1

1

1

1

1 1

1

1

0

1

0

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

0

1

1

1

1

1

1

1

1

1

1

1

1

0

1

0

1

0

0

0

0

0

0

0

0

0

0

0

1

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

0

1

1

0

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

0

1

1

1

1

1

1

1

1

1

1

1

1

0

1

1

1

0

0

0

0

0

0

0

0

0

0

0

1

0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

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

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

PUERTO A

DISPOSITIVO

PUERTO B PUERTO C

8255 N° 2

COMANDO

no válidas CONTROL PUERTO A PUERTO B PUERTO C

8155 N° 1

LSB TIMER MSB DEL TIMER

no válidas

PUERTO

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

FUNCIÓN

DISPOSITIVO

CONTROL PUERTO A PUERTO B PUERTO C

8155 N° 2

LSB TIMER MSB DEL TIMER

no válidas PUERTO DATOS PUERTO CONTROL

8279

no válidas PUERTO A PUERTO B PUERTO C

8255 N° 2

COMANDO

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

8255 #2

74LS374

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

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

El Microcomputador 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

x

x

x

0

8255 1 0

0

0

x

A10

A9

A8

A7

A6

A5

A4

A3

A2

A1

A0

x

x

x

x

A1

A0

x

x

x

x

A1

A0

DIRECCIÓN DE PUERTO

1

x

x

x

x

x

DIRECCIÓN DE PUERTO

x

x

x

x

x

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

DIRECCIÓN

DISPOSITIVO

CS0

0000H-07FFH

EPROM

CS1

0800H-0FFFH

RWM

CS2

1000H-17FFH

TECLADO

CS3

1800H-1FFFH

DISPLAY

CS4

2000H-27FFH

ENTRADA

CS5

2800H-2FFFH

SALIDA

CS6

3000H-37FFH

OTRO

CS7

3800H-3FFFH

OTRO

La 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

DIRECCIÓN

DISPOSITIVO

CS0

8000H-87FFH

27256

CS1

9000H-97FFH

6116

CS2

A000H-A7FFH

6116

CS3

B000H-B7FFH

8255

PUERTO A

B000H

CS4

C000H-C7FFH

SIN USO

PUERTO A

B001H

CS5

D000H-D7FFH

SIN USO

PUERTO A

B002H

CS6

E000H-E7FFH

SIN USO

COMANDO

B003H

CS7

F000H-F7FFH

SIN USO

DIRECCIÓN

DATOS

0000H

0000 0000 0000 0000

. . . 7FFFH

. . . 0111 1111 1111 1111

8000H

1000 0000 0000 0000

. 87FFH . 8FFFH

. 1000 0111 1111 1111 . 1000 1111 1111 1111

9000H

1001 0000 0000 0000

. 97FFH . 9FFFH

. 1001 0111 1111 1111 . 1001 1111 1111 1111

A000H

1010 0000 0000 0000

. A7FFH . AFFFH

. 1010 0111 1111 1111. . 1010 1111 1111 1111

B000H

1011 0000 0000 0000

. B7FFH . BFFFH

. 1011 0111 1111 1111 1011 1111 1111 1111

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

32 K EPROM

2 K RWM

2K

RWM

2K

RWM

8255

El Microcomputador Básico

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

178

El Microcomputador Básico

179

5.5 DECODIFICADOR CON DISPOSITIVOS PROGRAMABLES Además de usando puertas discretas y circuitos integrados MSI, el decodificador de direcciones puede realizarse usando algún tipo de dispositivo lógico programable (PLD). Estos componentes ahorran espacio en la tarjeta del circuito impreso, su estructura es apropiada para el uso como decodificador y mantienen la confidencialidad de la lógica programada. Para ilustrar las ventajas del uso de PLD, considere el siguiente ejemplo. Ejemplo 5.7 Bebe diseñarse un decodificador de direcciones para un subsistema de memoria compuesto por 4 Kbytes de EPROM (1 x 4K), 8 Kbytes de EEPROM (1 x 8K) y 52 Kbytes de RWM (1 x 32K, 1 x 16K y 1x 4K). El espacio de memoria de la aplicación es distribuido como indica el mapa de la figura 5.39. En principio, se observa que el circuito de memoria conectado al sistema y que tiene menor capacidad es el módulo de 4K (212), de modo que para el diseño del decodificador se divide el espació de 64Kbytes de memoria en bloques de 4Kbytes. 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. La tabla 5.20 muestra el rango de direcciones en el cual se habilita cada salida del decodificador. FFFFH SRWM F000H EFFFH SRWM B000H AFFFH SRWM 3000H 2FFFH EEPROM 1000H 0FFFH EPROM 0000H

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

El Microcomputador Básico

180

Tabla. 5.20 Tabla de estados del decodificador de direcciones con PLD. A15 0 0 0 0 0 0 0 0 1 1 1

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

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

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

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

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

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

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

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

1 1 1 1 1

0 1 1 1 1

1 0 0 1 1

1 0 1 0 1

1 1 1 1 1

1 1 1 1 1

1 1 1 1 1

0 0 0 0 1

1 1 1 1 0

Las ecuaciones lógicas de las señales de selección de chip obtenidas a partir de la información suministrada por la tabla de estados, son: CS 0 = A15 + A14 + A13 + A12 CS1 = A15 + A14 + A13 ⋅ A12 + A13 ⋅ A12 CS 2 = A15 ⋅ A14 + A15 ⋅ A13 ⋅ A12 + A15 ⋅ A14 ⋅ A12 + A15 ⋅ A14 ⋅ A13 CS 3 = A15 + A14 ⋅ A12 + A14 ⋅ A13 + A14 ⋅ A13 ⋅ A12 CS 4 = A15 + A14 + A13 + A12

El decodificador de direcciones realizado con circuitos 74LS138, se muestra en la figura 5.41. Como alternativa para el diseño del decodificador especificado, las ecuaciones del decodificador pueden programarse en un dispositivo PAL. Un circuito programable comercial de amplio uso en aplicaciones combinatorias es el de código PAL16L8. La figura 5.40 muestra el diagrama de distribución de terminales y en la figura 5.42 se presenta la estructura interna del chip.

Fig. 5.40 Distribución de terminales para el circuito PAL16L8.

El Microcomputador Básico

Fig. 5.41 Decodificador de direcciones usando decodificadores convencionales.

181

El Microcomputador Básico

182

I1 0 1 2 3

4 5 6 7

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

0 1 2 3 4 5 6 7

20 21 22 23

24 25 26 27 28 29 30 31

O1

I2 8 9 10 11 12 13 14 15

IO2

I3 16 17 18 19 20 21 22 23

IO3

I4 24 25 26 27 28 29 30 31

IO4

I5 32 33 34 35 36 37 38

IO5

39

I6 40 41 42 43 44 45 46 47

IO6

I7 48 49 50 51 52 53 54 55

IO7

56 57 58 59 60 61 62 63

O8

I8

I9

I10

Fig. 5.42 Diagrama 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

El Microcomputador Básico

183

productos. Seis de los terminales de salida son bidireccionales de modo que pueden ser usados como entradas. 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, tales como: ABEL, VHDL, VERILOG, ORCAD/PLD, ONCUPL... y otros. 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. El primer código describe, usando ecuaciones, la estructura lógica del decodificador y el otro programa define el comportamiento funcional del circuito. Si se usa la segunda opción no es necesario usar las técnicas convencionales de diseño digital, debido a que no se requiere especificar las ecuaciones. library ieee; use ieee.std_logic_1164.all; entity decdir is port (

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

in std_logic; out std_logic );

architecture rtl of decdir is begin CS0 => => => =>

CS CS CS CS CS CS CS CS CS