Introduccion a Los Microprocesadores

1.1 INTRODUCCION A LOS MICROPROCESADORES El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas s

Views 239 Downloads 3 File size 689KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

1.1 INTRODUCCION A LOS MICROPROCESADORES El microprocesador es uno de los logros más sobresalientes del siglo XX. Esas son palabras atrevidas, y hace un cuarto de siglo tal afirmación habría parecido absurda. Pero cada año, el microprocesador se acerca más al centro de nuestras vidas, forjándose un sitio en el núcleo de una máquina tras otra. Su presencia ha comenzado a cambiar la forma en que percibimos el mundo e incluso a nosotros mismos. Cada vez se hace más difícil pasar por alto el microprocesador como otro simple producto en una larga línea de innovaciones tecnológicas. Ninguna otra invención en la historia se ha diseminado tan aprisa por todo el mundo o ha tocado tan profundamente tantos aspectos de la existencia humana. Hoy existen casi 15,000 millones de microchips de alguna clase en uso (el equivalente de dos computadoras poderosas para cada hombre, mujer y niño del planeta). De cara a esa realidad, ¿quién puede dudar que el microprocesador no sólo está transformando los productos que usamos, sino también nuestra forma de vivir y, por último, la forma en que percibimos la realidad? No obstante que reconocemos la penetración del microprocesador en nuestras vidas, ya estamos creciendo indiferentes a la presencia de esos miles de máquinas diminutas que nos encontramos sin saberlo todos los días. Así que, antes de que se integre de manera demasiado imperceptible en nuestra diaria existencia, es el momento de celebrar al microprocesador y la revolución que ha originado, para apreciar el milagro que es en realidad cada uno de esos chips de silicio diminutos y meditar acerca de su significado para nuestras vidas y las de nuestros descendientes.

1.1.2

DEFINICION DEL MICROPROCESADOR

El microprocesador es la parte de la computadora diseñada para llevar acabo o ejecutar los programas. Este viene siendo el cerebro de la computadora, el motor, el corazón de esta máquina. Este ejecuta instrucciones que se le dan a la computadora a muy bajo nivel haciendo operaciones lógicas simples, como sumar, restar, multiplicar y dividir. El microprocesador, o simplemente el micro, es el cerebro del ordenador. Es un chip, un tipo de componente electrónico en cuyo interior existen miles (o millones) de elementos llamados transistores, cuya combinación permite realizar el trabajo que tenga encomendado el chip. 1.1.3 Tipos de microprocesador según su velocidad y ancho de palabra Las características básicas que definen a un microprocesador son la longitud depalabra (comúnmente de 8, 16, 32, 64 ó 128 bits), la velocidad de ejecución y lacapacidad de gestionar interrupciones.Otras de sus calidades diferenciativas, son el número de instrucciones, el númerode registros, y los tipos de direccionamiento. La longitud de la palabra se refiere al número de bits que procesasimultáneamente un microprocesador y se determina por su arquitectura, es decir,por el tamaño de los registros, de la unidad lógica y aritmética (ALU) y de losbuses internos. La longitud de la palabra crece conforme las nuevas tecnologías lopermiten.El primer microprocesador tenía una longitud de 4 bits, ahora y una frecuencia de108 KHz, el microprocesador PENTIUM IV tiene una longitud de palabra de 64bits, con una frecuencia de 2GHz.

1.2 Arquitectura del microprocesador A través de diagrama a bloques La unidad central de proceso (CPU) o microprocesador, es el verdadero cerebrode la computadora. Su misión consiste en controlar y coordinar todas lasoperaciones del sistema. Para ello extrae, una a una, las instrucciones delprograma que está en la memoria central del computadora (memoria RAM),lasanaliza y emite las órdenes necesarias para su completa realización.Para entender cómo funciona un microprocesador, hay que tener en primer lugar una clara idea acerca de su arquitectura. De otro modo, será prácticamenteimposible hacerse una idea sobre su funcionamiento. De una forma global,podemos considerar al microprocesador dividido en tres grandes bloques: UNIDAD DE DECODIFICACION Se encarga de decodificar la instrucción que se va a ejecutar. Es decir, saber qué instrucción es. Cuando el microprocesador lee de memoria una instrucción, el código de esa instrucción le llega a esta unidad. Esta unidad se encarga de interpretar ese código para averiguar el tipo de instrucción a realizar. Por ejemplo, instrucciones de suma, multiplicación, almacenamiento de datos en memoria, etc. UNIDAD DE EJECUCION Una vez que la unidad de decodificación sabe cuál es el significado de la instrucción leída de memoria, se lo comunica a la unidad de ejecución. Esta unidad será la encargada de consumar la ejecución y para ello activará las señales necesarias y en un orden determinado. Es decir, es la encargada de dar las órdenes necesarias a las diversas partes del microprocesador para poder ejecutar cada una de las instrucciones. UNIDAD ARIRMETICOLOGICA La ALU (Aritmethic Logic Unit) es el bloque funcional del microprocesador encargado de realizar todas aquellas operaciones matemáticas y logicas asi como tambien operaciones de corrimiento. Las operaciones que realiza son las siguientes: suma, resta, multiplicación, división y aquellas que trabajan con dígitos binarios (10 que se conoce como operaciones lógicas: AND, NOR, NOT, NAND,OR, X-OR, etc).En suma, saber cómo funciona un microprocesador, implica conocer cómo se van ejecutando cada una de las instrucciones del programa que se almacena en memoria. Los pasos globales que se siguen a la hora de ejecutar una instrucción son:

PARTES DE CPU Vamos a profundizar aún más en el estudio de las partes funcionales que componen un microprocesador. No significa que la primera división en bloques anterior fuera errónea, sino que era más superficial..Podemos, entonces, considerar a un microprocesador compuesto por las dos siguientes unidades: UNIDAD DE CONTROL Y UNIDAD ARITMETICA LOGICA

UNIDAD DE CONTROL Es el centro nervioso del computadora, ya que desde ella se controlan y gobiernan todas las operaciones. Realiza las funciones básicas de: -Tomar las instrucciones de memoria. -Decodificar o interpretar las instrucciones. -Ejecutar las instrucciones (tratar las situaciones de tipo interno (inherentes ala propia CPU) y de tipo externo (inherentes a los periféricos). Para funcionar de la manera anterior, la unidad de control consta de: -Contador de programa -Registro de instrucciones -Decodificador -Reloj Secuenciador Contador de programa. Contiene permanentemente la dirección de memoria de la siguiente instrucción a ejecutar. Al iniciar la ejecución de un programa toma la dirección de su primera instrucción. Incrementa su valor en uno, de forma automática, cada vez que se concluye una instrucción, salvo si la instrucción que se está ejecutando es de salto o de ruptura de secuencia, en cuyo caso el contador de programa tomará la dirección de la instrucción que se tenga que ejecutar a continuación; esta dirección está en la propia instrucción en curso. Registro de instrucción. Contiene la instrucción que se está ejecutando en cada momento. Esta instrucción llevará consigo el código de operación (un código que indica qué tipo de operaciónse va a realizar, por ejemplo una suma) y en su caso los operandos (datos sobrelos que actúa la instrucción, por ejemplo los números a sumar) o las direccionesde memoria de estos operan dos. Decodificador. Se encarga de extraer el código de operación de la instrucción en curso (que está en el registro de instrucción), lo analiza y emite las señales necesarias al resto de elementos para su ejecución a través del secuenciador .

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

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

UNIDAD ARITMÉTICOLÓGICA (ALU): Esta unidad se encarga de realizar las operaciones elementales de tipo aritmético (sumas, restas, productos, divisiones) y de tipo lógico (comparaciones). A través de un bus interno se comunica con la unidad de control la cual le envía los datos y le indica la operación a realizar .La ALU está formada a su vez por los siguientes elementos: Circuito operacional Registros de entrada (REN) Registro acumulador Registro de estado (flags) Circuito operacional. Contiene los circuitos necesarios para la realización de las operaciones con los datos procedentes de los registros de entrada (REN). Este circuito tiene unas entradas de órdenes para seleccionar la clase de operación que debe realizar encada momento (suma, resta, etc.) Registros de entrada (REN). En ellos se almacenan los datos u operando que intervienen en una instrucción antes de la realización de la operación por parte del circuito operacional.

También se emplean para el almacenamiento de resultados intermedios o finales de las operaciones respectivas. Registro acumulador. Almacena los resultados de las operaciones llevadas a cabo por el circuito operacional. Está conectado con los registros de entrada para realimentación en el caso de operaciones encadenadas. Asimismo tiene una conexión directa al bus de datos para el envío de los resultados a la memoria central o a la unidad de control. Registro de estado (flags). Se trata de unos registros de memoria en los que se deja constancia de algunas condiciones que se dieron en la última operación realizada y que habrán de ser tenidas en cuenta en operaciones posteriores. Por ejemplo, en el caso de hacer una resta, tiene que quedar constancia si el resultado fue cero, positivo o negativo.

1.2.2.- Arquitectura externa del microprocesador (terminales): En un sistema digital se le da el nombre de ³ puerto ³ al medio físico por el cual entran y salen datos al microprocesador. Los puertos de E/S son registros externos dedicados a aceptar y/o a enviar información a dispositivos periféricos. Un puerto de entrada (E) está compuesto sólo por un buffer de tercer estado junto con un registro de almacenamiento (latch). El buffer de tercer estado tiene la función de controlar, es decir, aislar o permitir el flujo de información del puerto al bus de datos del microprocesador. El registro tiene la función de almacenar temporalmente la información generada por el dispositivo periférico de entrada hasta que pueda ser leída por el microprocesador.

El dispositivo de entrada controla el almacenamiento de un dato en el registro, mientras que el microprocesador determina el estado del buffer (activo o en estado de alta impedancia) por medio de un pulso de selección. Puerto de Salida. La concepción básica de un puerto de salida es un simple registro de almacenamiento (latch), que conecta al bus de datos con el dispositivo de salida. El microprocesador coloca en el registro el dato que va a ser enviado al dispositivo periférico por medio de un pulso de selección aplicado a la entrada de reloj del registro. Direccionamiento y Control de Puertos Para puertos de salida, circuitos externos combinan las señales IOQR, WR y la dirección del puerto y generan un pulso de selección único para cada puerto. Este pulso actúa a la manera de un pulso de escritura para grabar el dato en el puerto durante el ciclo de salida de una instrucción OUT que especifique ese puerto .El diseño de la circuitería de selección varía, dependiendo del número de dispositivo de E/S en el sistema y de las características de los circuitos que componen los puertos de E/S. Si únicamente se requiere un puerto de entrada y un puerto de salida, no es necesario decodificar los bits de dirección. Para generar los pulsos de selección de estos puertos bastan las señales E/SR y E/SW. En este caso el número de puerto no importa, pero de cualquier manera no puede omitirse en la instrucción .Cuando el sistema requiere más de un puerto de entrada o de salida, entonces es necesario decodificar las líneas de dirección con el fin de generar los pulsos de selección para cada puerto en particular.

Circuitos Para la Implementación de Puertos

Los puertos de E/S pueden implantarse con circuitos SSI, MSI o LSI. Sin embargo, para minimizar el número de componentes en general se usan circuitos MSI o LSI. Un puerto de salida de 8 bits se puede implantar con un circuito de tipo cerrojo (latch) de 8 bits como el 74LS373 o el 74LS374. El 74LS373 contiene 8 cerrojos disparados en el nivel positivo con una entrada común de reloj activa en 1 lógico .El 74LS374 contiene 8 flip-flops tipo D disparados en la transición positiva (0 a 1) con una entrada común de reloj.

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

cerrojos (latches) direccionales individualmente, los cuales pueden utilizarse como 8 puertos de salida de un bit para propósitos de control. La entrada de datos del 9334 se conecta a una de las líneas del bus de datos. Cada uno de los cerrojos es seleccionado como un puerto de salida independiente por medio de tres líneas de dirección, con lo cual se puede cambiar el estado de un bit sin afectar el estado de los otros. Con este circuito solamente se requieren dos instrucciones para poner un bit en 0 o en 1lógico: una carga el acumulador con 00H o 01H; la otra es una instrucción de salida para el puerto (bit) seleccionado. Suponiendo un 9334 conectado al Z-80, como se muestra en la figura, la siguiente secuencia de instrucciones pone el bit 4en 1 lógico: En contraste, para cambiar un solo bit sin alterar ninguno de los otros bits de un puerto de salida en donde todos los bits son manejados simultáneamente, por ejemplo un 74LS373 o un 74LS374, se vuelve necesario mantener en memoria una copia de la última información enviada al puerto. Compare la siguiente secuencia de instrucciones que pone en 1 lógico el bit 4 de un puerto implantado con un 74LS373, con la secuencia utilizada en el caso de un 9334:

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

Al conjunto de operaciones implicadas en la transferencia condicional de un dato se le conoce como PROTOCOLO DE COMUNICACIÓN. En un protocolo de comunicación entre dispositivos electrónicos, al igual que en las relaciones humanas, ocurre un intercambio de ³cortesías´, en este caso señales eléctricas, las cuales tienen como fin asegurar que la transferencia de información se realice en la forma más conveniente para los participantes. Una de las formas más comunes para implantar un protocolo es el procedimiento denominado VERIFICACIÓN o control de transferencia (HANDSHAKING, o apretón de manos). Aquí el transmisor indica al receptor la presencia de un dato (data ready) y enseguida transfiere el dato; el receptor completa la verificación respondiendo a la recepción del dato (input acknowledge). El receptor puede controlar la situación solicitando inicialmente el dato o indicando su disponibilidad para aceptarlo (peripheral ready); luego el transmisor envía el dato y completa la verificación avisando que la información está lista (output ready). En cualquier caso, el transmisor sabe si la transferencia se ha completado exitosamente y el receptor sabe cuando está disponible un nuevo dato. Las figuras 4.12 y 4.13muestran operaciones comunes de E/S usando un protocolo de verificación.

Lectura de puerto (entrada) -Examinar el registro de estado del puerto y esperar a la señal que indique que el puerto está listo. -Enviar un comando de lectura al registro de control del puerto. Después de iniciar la operación, el microprocesador puede dedicarse a otras tareas. Cuando llega al punto en el que debe aceptar el dato del puerto, prosigue con el siguiente paso. -Examinar el registro de estado del puerto y esperar a la señal que indique la disponibilidad del dato. -Transferir al microprocesador el contenido del registro de datos del puerto.

Escritura en puerto (salida). -Examinar el registro de estado del puerto y esperar a la señal que indique que el puerto está listo. -Transferir el dato del microprocesador al registro de datos del puerto. -Enviar un comando de escritura al registro de control del puerto. El microprocesador puede pasar el control a otras tareas que se puedan ejecutar mientras se efectúa la operación de E/S.

En la siguiente figura se muestra el diagrama de una transferencia condicional controlada por programa.

Transferencia condicional controlada por programa

Hay varias maneras de proporcionar las señales de control y estado. Una es por medio de líneas de E/S dedicadas a este propósito. El microprocesador tiene acceso a ellas a través de puertos adicionales. Un solo bit de estado puede indicar cuándo un puerto de entrada tiene información disponible para ser leída o cuando un puerto de salida está listo para recibir información. Considérese, por ejemplo, un periférico de entrada que ha colocado un dato en el puerto de entrada 1 (registro de datos), para ser transmitido al microprocesador. Para indicar la existencia de un dato, el periférico pone en 1 lógico un flip-flops o bandera que corresponde al bit 7 del puerto de entrada 0 (registro de estado). Con el fin de determinar la presencia de un dato para ser leído, el microprocesador periódicamente lee el contenido del registro de estado y examina el estado del bit; si el bit 7 es 1, hay un dato disponible y entonces una instrucción lo lee del puerto1. El pulso de selección que activa el buffer del puerto 1, también restablece (vuelve a 0 lógico) la bandera que indica la existencia de un dato. Cuando existen varios dispositivos de E/S en un sistema que utiliza E/S controlada por programa, el microprocesador debe preguntar por la disponibilidad de cada periférico antes de que se efectúe la transferencia de información. Este procedimiento es llamado ENCUESTA (POLLING).

En la subrutina de encuesta el microprocesador examina la bandera de cada dispositivo y ejecuta la secuencia de instrucciones que le da servicio al dispositivo si encuentras que la bandera correspondiente esté activa. Además, el procedimiento de encuesta establece un esquema jerárquico de servicio en el quela prioridad de los periféricos está determinada por el orden en que el microprocesador examina la bandera de estado de cada uno de ellos. Evidentemente, este procedimiento puede requerir una gran cantidad de tiempo de microprocesador si hay muchos dispositivos de E/S. Con frecuencia las banderas de estado de varios dispositivos o los bits independientes de control, son combinadas y manejadas por un solo puerto de entrada o salida respectivamente. La figura siguiente se muestra la combinación de las banderas de ³dato disponible´ de 8 dispositivos de entrada en un byte común de estado al que el microprocesador tiene acceso a través de un puerto de entrada. El agrupar la información de estado y control en bytes reduce el número de direcciones para puertos de E/S requeridos por los periféricos. Sin embargo, esto implica que los bits individuales de estado deben aislarse para poder ser interpretados y que los bits de control deben ser determinados por separado.

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

Para separar los bits de estado:   

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

1.3 Conexión del microprocesador con dispositivos de: 1.3.1 Memoria 1.3.2.2 Interrupciones programables (8259) 1.3.2.3 De comunicación serial

1.3.2 Periféricos

1.3.2.1 De interface programable (8255). Uno de los integrados universalmente usados en sistemas basados en microprocesadores es sin duda el 8255. Este circuito fue inicialmente diseñado por Intel Corporation como parte del juego de integrados de apoyo a sus primeros sistemas de 16 bits (8086 y 8088). El chipset incluía numerosos dispositivos tales como controladores serie, controlador de CRT, gestores de acceso directo a memoria, controladores de unidades de disco, etc. La fuerte evolución en el diseño de computadoras ha convertido a gran parte del chipset del 8086 en piezas de museo debido a que muchas de las funciones no tienen hoy día utilidad alguna (carece de sentido emplear viejos controladores de CRT o disco). Sin embargo existen una serie de componentes que conservan todavía hoy, después de veinte años, toda su utilidad.

En concreto nos estamos refiriendo a la UART 8251 y al controlador de interfaz paralelo PPI 8255. En este artículo trataremos el 8255, un versátil y económico integrado de fácil conexión a cualquier sistema basado en microprocesador o micro controlador, que proporciona de un modo elegante y sencillo puertos E/S disponibles.

La opción más correcta sería emplear estos dispositivos en un sistema basado en un 8086/8088 (actualmente manufacturados en versiones CMOS de bajo consumo y alta velocidad por OKI Semiconductor Corp.), si bien dada su versatilidad pueden ser empleados por cualquier otro sistema.

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

El 8255 se encapsula en formato DIP de 40 terminales como es habitual en los controladores del chipset 8086. Existen cinco grupos de señales, además de los dos terminales de alimentación: · Grupo de control · Bus de datos · Puerto A · Puerto B · Puerto C

Los terminales del dispositivo se distribuyen del siguiente modo:

Básicamente se trata de tres puertos (A, B,C) de ocho bits, encontrándose el puerto C dividido en dos puertos de cuatro bits. Estos cuatro puertos formados (dos de ocho bits y dos de cuatro) se organizan en dos grupos de 12 bits. Cada grupo contiene un puerto de ocho bits y otro de cuatro. El primer grupo comprende el puerto A y la parte alta del puerto C mientras que el segundo comprende el puerto B y la parte baja del puerto C.· Grupo A: PA0...PA7 + PC4...PC7· Grupo B: PB0…PB7 + PC0...PC3Estos grupos pueden operar en tres modos de funcionamiento diferentes:

Modo 0: Tres puertos de cuatro bits programables como entrada o salida. Modo 1: Un puerto de ocho bits programable como entrada o salida y un puerto de cuatro bits de control. Modo 2: Este modo configura al puerto A como un puerto bidireccional dejándolos cinco bits más significativos del puerto C (PC3...PC7 nótese que emplea por tanto más de un grupo) como líneas de control del puerto. Estos modos de operación se definen mediante un octeto de estado del que hablaremos a continuación. Para acceder tanto al octeto de estado como a los puertos en sí debemos hacer uso de las señales de control del 8255. Dx: Bus de datos bidireccional con estado de alta impedancia. Conecta el dispositivo con el bus de datos del microprocesador. CS: Señal Chip select. Cualquier operación sobre el chip requiere un nivel bajo en esta señal. Usualmente se compara la dirección emitida por el microprocesador mediante lógica externa y si dicha dirección corresponde con el rango asignado por el diseñador al periférico la lógica comparadora de dirección pondrá a cero esta línea. Mientras esta línea se encuentre alta el bus de datos D7...D0 se encuentra en un estado de alta impedancia para permitir que otros periféricos hagan uso del bus del microprocesador. R D: Señal de lectura. Un valor bajo en esta señal dispondrá en el bus de datosbidireccional.D7...D0 el valor del puerto indicado por las dos líneas de dirección A1 y A0. WR: Señal de escritura. Un valor bajo escribirá el octeto presente en el bus de datos en el registro/puerto indicado por A1 y A0.

Hemos visto hasta ahora los diferentes puertos que existen y los modos de configurar los. Sabemos también que esto se realiza por medio del octeto de control (para ello realizamos una operación de escritura sobre él, no siendo posible su lectura).Veremos a continuación la descripción completa de dicho octeto:

Bit 0: Puerto C bajo (1=Entrada, 0=Salida) Bit 1: Puerto B (1=Entrada, 0=Salida) Bit 2: Selección modo grupo uno (0=Modo 0, 1=Modo 1)· Bit 3: Puerto C alto (1=Entrada, 0=Salida) Bit 4: Puerto A (1=Entrada, 0=Salida) Bit 5,6: Selección modo grupo dos (00=Modo 0, 01=1, 1x= 2) Bit 7: Flag de modo a uno (1=Activo)

Acceso individual al Puerto C. El bit 7 a uno permite acceder al registro de control y configurar el modo de funcionamiento del periférico. Si a la hora de acceder a dicho registro ponemos acero el bit 7 accedemos al control individual de las líneas de salida del puerto C. Los puertos A y B son leídos y escritos en bloques de cuatro u ocho bits según sea la configuración de los mismos, pero el puerto C permite un acceso individual sobre las líneas de salida del mismo:·

Bit 0: Valor de salida (1 ó 0)· Bit 3, 2, 1: Selección de bit (000=bit 0, 001=bit 1 ...111=bit 7) Bit 4, 5,6: No influyen, cualquier valor. Bit 7: Flag de modo (0=Acceso al puerto C).

Modo cero El modo de funcionamiento 0 es el más simple posible. Los puertos se configuran como entrada y salidas. En el caso de que se configuren como salidas los datos se enclavan y permanecen invariables hasta la siguiente escritura. La lectura se realiza en el momento de efectuar la operación sobre el 8255. El dispositivo opera por tanto como si de un transceptor multiplexado con catch de salida se tratase. Modo uno El modo de funcionamiento 1 puede emplearse en ambos grupos de pines. Proporciona un puerto de 8 bits y cuatro señales de control de cada mitad del puerto C que operan del siguiente modo en el caso de que se configure el puerto correspondiente como entrada:/STB: Strobe InputPC4 grupo A/PC2 grupo B

Cuando esta señal se pone a nivel bajo el dispositivo memoriza el estado del puerto de ocho bits. La siguiente operación de lectura RD sobre el 8255 por parte del microprocesador devolverá el estado del bus en el estado bajo de dicha señal. Permite efectuar por tanto lecturas del puerto de ocho bits de modo independiente del microprocesador que gestiona el 8255. IBF: Input Buffer Full Flag Output PC5 grupo A/PC1 grupo B Esta señal responde a STB subiendo a uno cuando el dato ha quedado enclavado durante el flanco de bajada de un pulso en STB. Vuelve a nivel lógico cero en el flanco de subida de la señal de lectura RD.

INTR: Interrupt request output PC3 grupo A/PC0 grupo B Esta salida sube a nivel alto (si el bit INTE está activado) en el flanco de subida de STB indicando al microprocesador que controla el 8255 la presencia de un dato en el dispositivo. Vuelve a bajar a nivel lógico cero en el flanco de bajada de RD. Para el grupo A el flag INTE está activado si lo está el bit PC4 mientras que para el grupo B el bit INTE está activado si lo está el bit PC2. El modo de activar o desactivar dichos bits es el descrito anteriormente mediante el acceso individual al puerto C. Si la configuración indicada establece el puerto de 8 bits como salida la descripción de los bits de control es la siguiente: /OBF Output Buffer Full Flag Output PC7 grupo A/PC1 grupo B Esta señal indica el estado de escritura en el puerto. Baja a nivel lógico cero en el flanco de subida de la señal de escritura /WR volviendo al nivel lógico 1 en el flanco de bajada de la señal de respuesta del dispositivo ACK. /ACK Acknowledge Input PC6 grupo A/PC2 grupo B Esta señal de entrada permite al terminal indicar al controlador 8255 que hare cogido el dato que el sistema le envió. Para ello el terminal pondrá a cero esta entrada. INTR Interrupt request output PC3 grupo A/PC0 grupo B La señal pasa a nivel alto en el flanco de subida de /ACK y pasa a nivel lógico cero en el flanco de bajada de /WR, siempre y cuando los correspondientes bits INTE estén habilitados. Para el primer grupo INTEA corresponde al bit PC6 mientras que para el segundo grupo INTEB corresponde al bit PC2.

Modo dos El modo 2 permite habilitar un puerto de 8 bits bidireccional. Solo es posible disponer de él con el grupo A. La descripción de los pines es la siguiente: /OBF Output buffer full flag output PC7 La señal pasa a nivel lógico cero en el flanco de subida de /WR y vuelve al nivel lógico uno en el flanco de bajada de /ACK. Indica a la CPU que ha recogido el dato. /ACK Acknowledge input PC6 La entrada habilita el puerto A del 8255 al pasar al nivel lógico cero. El dato escrito en el registro interno del 8255 pasa al puerto A y el terminal lo lee. Al volver al nivel lógico uno el puerto A vuelve de nuevo al estado de alta impedancia. /STB Stobe input. PC4 Cuando esta entrada pasa a nivel lógico bajo la salida de datos hacia el puertodesde los pines es enclavada en el registro interno. El dato sale por el bus dedatos una vez se recibe la señal RD desde el microprocesador, si bien el buspermanece en alta impedancia hasta entonces. IBF Input buffer full flag output PC5 La señal pasa a nivel alto en el flanco de bajada de STB volviendo al nivel bajo enel flanco de subida de RD, indicando que el dato ha sido enclavado en el registrointerno del 8255. INTR Interrupt request output PC3 Esta señal se emplea del mismo modo que en el modo de funcionamiento número1. La diferencia estriba en que existen ahora dos bits INTE, uno para habilitar lainterrupción en operaciones de salida (PC6) y otro para habilitar la interrupción enoperaciones de entrada (PC4).

El 8255 es un interface programable de periféricos (PPI). Su función es la de uncomponente EIS de propósito general, para interfasar equipo periférico al bus del sistemamicrocomputador. La configuración funcional del 8255 es programada por el software delsistema, de manera que normalmente no se necesita circuiteria externa para interfasar periféricos o estructuras. CARACTERÍSTICAS.         

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

DESCRIPCION DE LOS PINES DEL 8255

El 8255 DE INTEL es un dispositivo de E/S de propósito general, tiene 24 pines de EISque pueden ser programados individualmente en dos grupos de 12 y usados en tresmodos de operación principales. En el primer modo (modo O), cada grupo de 12 pinespuede programarse en grupos de 4 como entrada ó salida. En el segundo modo (modo 1),cada grupo puede programarse para tener 8 entradas ó salidas;de los 4 pines restantestres son empleados para protocolo (Handshaking) y control de interrupciones. El tercer modo de operación (modo 2, es un modo de bus bidireccional, que usa 8 líneas para unbus bidireccional y 5 líneas, una prestada del otro grupo, para protocolo (handsking). El 8255 es una interfase para comunicación en paralelo con periféricos. Las partes que loconstituyen se muestran en la figura anterior, a continuación se describen estas partesdependiendo de su aplicación.

BUFFER DELBUSDEDATOS. Este buffer bidireccional de 8 bits se usa para interfasar el 8255 al bus de datos delsistema. Los datos son enviados o recibidos por este buffer bajo la ejecución deinstrucciones de entrada o salida por el CPU. Las palabras de control y la información delestado también se transfieren a través de este bus. LOGICA DECONTROL Y DE LECTURA ESCRITURA La función de este es manejar todas las transferencia internas y externas de palabras dedatos, control o estados. Esta acepta entradas del bus de control y de direcciones delCPU, y en turno, define comandos para lo dos grupos de control. SELECCIÓN DE CHIP(CS') Un cero en este Pin de entrada habilita la comunicación entre el 8255 y el CPU. LECTURA (RD') Un cero en este Pin de entrada habilita al 8255 a enviar los datos o información del estadoal CPU, sobre el bus de dato. Esencialmente este permite al CPU "leer del" 8255. SELECCIÓN DE PUERTO (Ao Y A1). Estas señales de entrada en conjunto con RO' y WR', controlan la selección de uno de lostres puertos o del registro de la palabra de control. AQ y A1 están conectadas a los bitsmenos significativos del bus de direcciones. ESCRITURA (WR’) Un cero en este Pm de entrada, permite al CPU escribir datos o palabras de control sobreel 8255. RESET Un uno (1) en esta línea limpia el registro de control y todos los puertos (A, B, y C) seponen como modo de entrada. CONTROL DE RESET DE PUERTOS La configuración funcional de cada puerto se programa por el software del sistema

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

Cada grupo de control acepta comandos de la unidad lógica de control lectura/escritura,reciben palabras de control del bus de datos interno y envía comandos apropiados a suspuertos asociados:  

Grupo de control A: Puerto A y puerto C superior (C7-C4) Grupo de control B: Puerto B y puerto C inferior (C3-CO)

La palabra de control únicamente puede ser escrita. No se permite lectura del registro depalabra de control. 1.4 Lenguaje ensamblador del microprocesador 1.4.1 Registros 1.4.2 Declaración de segmentos 1.4.3 Modos de direccionamiento 1.4.4 Control de dispositivos de entrada/salida 1.4.5 Conjunto de instrucciones 1.4.6 Esqueleto de un programa 1.4.7 Uso de procedimientos LENGUAJE ENSAMBLADOR El lenguaje ensamblador utiliza unos códigos de operación llamados mnemónicos.Los mnemónicos son instrucciones las cuales le indican al microprocesador quetipo de operación debe de realizar, ya sea de carga de rotación o de decremento.Se conoce como setde instrucciones al conjunto de instrucciones que es capaz deentender y ejecutar un microprocesador. El conjunto de instrucciones es para elmicroprocesador lo mismo que una tabla de verdad es para una compuerta lógica,un registro de desplazamiento o un circuito sumador. INSTRUCCIONES El conjunto de instrucciones de un microprocesador es el conjunto de entradasbinarias que producen acciones definidas durante un ciclo de instrucción. Unainstrucción es un patrón de dígitos binarios el cual debe estar a disposición delmicroprocesador en el tiempo y forma que éste lo requiera. En función del tipo de microprocesador, podrá entender y ejecutar más o menosinstrucciones.Un programa es una serie de instrucciones que causan que la computadorarealice una tarea en particular.

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

Instrucciones de transferencia de datos Instrucciones de cálculo Instrucciones de transferencia del control del programa Instrucciones de control

Instrucciones de transferencia de datos. Estas instrucciones mueven datos (que se consideran elementos deentrada/salida) desde la memoria hacia los registros internos del microprocesador,y viceversa. También se usan para pasar datos de un registro a otro delmicroprocesador. Existen algunas instrucciones que permiten mover no sólo undato, sino un conjunto de hasta 64 KBytes con una sola instrucción. Instrucciones de cálculo. Son instrucciones destinadas a ejecutar ciertas operaciones aritméticas, como por ejemplo sumar, restar, multiplicar o dividir, o ciertas operaciones lógicas, como por ejemplo ANO, OR, así como desplazamiento y rotación de bits . Instrucciones de transferencia del control del programa. Permiten romper la secuencia lineal del programa y saltar a otro punto del mismo.Pueden equivaler a la instrucción GOTO que traen muchos lenguajes de programación. Instrucciones de control. Son instrucciones especiales o de control que actúan sobre el propiomicroprocesador. Permiten acceder a diversas funciones, como por ejemploactivar o desactivar las interrupciones, pasar órdenes al coprocesador matemático,detener la actividad del microprocesador hasta que se produzca una interrupción,etc. Prácticamente todas las instrucciones están formadas por dos elementos:  

código de operación que indica el tipo de operación se va a realizar operandos, que son los datos sobre los que actúa. Por ejemplo, una instrucción que sume dos números está formado por:

  

código de operación que indique "sumar" primer número a sumar segundo número a sumar

Existen instrucciones que sólo tienen un operando o incluso que no tienenninguno, estan formadas solamente por el código de operación. EJECUCIÓN DE LAS INSTRUCCIONES Para que un programa pueda ser ejecutado por un computadora, ha de estar almacenado en la memoria central (memoria RAM). El microprocesador tomaráuna a una las instrucciones que lo componen e irá realizando las tareas correspondientes

Se denomina ciclo de instrucción al conjunto de acciones que se llevan a cabo enla realización de una instrucción.  

Se compone de dos fases: Fase de búsqueda Fase de ejecución

Fase de búsqueda. En esta fase se transfiere la instrucción que se va a ejecutar desde la memoriacentral a la unidad de control. El lenguaje ensamblador no resuelve todos los problemas de programación. Unode ellos es la tremenda diferencia entre el set de instrucciones delmicroprocesador y las tareas que el microprocesador debe realizar. Lasinstrucciones del microprocesador tienden a hacer cosas como: sumar contenidosde dos registros, desplazar el contenido de un acumulador un bit, o colocar unnuevo valor en el contador de programa (PC). Por otro lado, el usuario generalmente quiere que la computadora haga cosascomo: chequear si un valor analógico leído se excedió de un cierto umbral, buscar y reaccionar ante un comando particular de una consola o teletipo, o activar unrelé en el momento apropiado. El programador de lenguaje ensamblador debetraducir estas tareas a secuencias de simples instrucciones de microprocesador.Esta traducción suele ser dificultosa, consume tiempo de trabajo. Otro inconveniente es la no portabilidad. Cada microprocesador posee su propioset de instrucciones en el cual está reflejado su arquitectura interna. Para solucionar este inconveniente se utiliza un lenguaje de programación de altoo medio nivel, como puede ser el lenguaje C. CONVENCIONESENLEESCRITURA DELCODIGOFUENTE. Para hacer la tarea del programador más grata, se usan algunas convenciones.Cada uno puede adoptar las que más le agraden y ayuden para ser másproductivo. En general, las convenciones son cualquier acción que facilita larevisión y comprensión de un programa, especialmente el que uno mismo haescrito cuando tiene que revisarlo algunos meses después. Comentamos algunasconvenciones que usaremos:

Los ficheros de código fuente llevarán la extensión *.ASM Los ficheros de listado llevarán la extensión *.LST Los ficheros de código objeto llevarán la extensión *.OBJ Los ficheros de errores llevarán la extensión *.ERR Los ficheros ejecutables en formatoI ntel Hex llevarán la extensión *.HEX Los mnemónicos escritos en mayúscula hacen que el código escrito sea más visible. En lo posible, usar comentarios explicando cada línea de código. Un párrafo de comentarios explica las rutinas o conjunto de instrucciones yaque los campos de comentarios suelen ser pequeños. El espacio entre caracteres se escribe ³_´.RB0_E S_1 es más fácil de leer queRB0 E S1. Recuerde que las convenciones son cualquier cosa que le haga más fácil lalectura y comprensión de su código, como por ejemplo: 1- Una cabecera estandarizada. 2- Colocar las rutinas en el mismo sitio, todas contiguas. 3- Dibujar diagramas de flujo o escribir seudocódigo. CARACTERISTICAS DEL ENSAMBLADOR CAMPOS DEL LENGUAJE ENSAMBLADOR: Las instrucciones están divididas en un número de campos, como se muestra:



El campo del código de operaciónes el único que nunca puede estar vacío; éste siempre contiene una instrucción o una directiva del ensamblador.



El campo del operando o dirección puede contener una dirección o un dato, opuede estar en blanco.



El campo del comentario o de etiquetases opcional. El programador asignará una etiqueta a una línea de instrucción o agregará un comentariosegún su conveniencia: normalmente, para hacer más fácil el uso y la lectura; por ejemplo si va a retomar el trabajo dentro de tres semanas.

Delimitadores (separación entre campos):  Los campos van separados sólo con espacios y/o tabulaciones. No agreguenunca otros caracteres (comas, puntos, etc.)  No utilice espacios extra, particularmente después de comas que separanoperandos. ( Ej: movlw 5,w )  No use caracteres delimitadores (espacios y tabulaciones) en nombres oetiquetas.

 

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

Esta etiqueta puede volver a usarse en otro lugar pero como operandode unainstrucción. El ensamblador reemplazará ésta etiqueta por el valor de cuando fue creada.Se usan frecuentemente en las instrucciones de salto. - No puede ex istir más de una etiqueta en el 1° campo de instrucción. - No pueden usarse como nombres de etiquetas a palabras ya reservadas por el ensamblador ( ORG, EQU, etc. ) o nombres de instrucciones ( movlw,call, nop, etc.)

La instrucción goto INICIO causa que la dirección de la instrucción con laetiqueta START (movlw) se cargue en el PC. Por lo tanto ésta instrucciónserá luego ejecutada. -No se permite el uso de números o caracteres no alfabéticos como 1° letrade la etiqueta. -Como regla práctica: usar siempre letras, y en mayúscula. Ejemplos:

Mnemónicos (códigos de operación): La tarea principal del ensamblador es la traducción de los códigos de operación enmnemónico en sus equivalentes binarios. El ensamblador realiza ésta tareausando una tabla como si lo hiciésemos ³a mano´. El ensamblador debe hacer algo más que traducir los códigos de operación.También debe determinar cuantos operandos requiere la instrucción y de que tipo.

Esto es un poco complejo; algunas instrucciones (como CLRW, SLEEP) no tienenoperandos, otras (ADDLW 13, GOTO FIN) tienen una, mientras que otras (BSFSTATUS,C o BTFSS PORTA,0) requieren dos. DIRECTIVAS: Algunas instrucciones del lenguaje ensamblador no se traducen directamente ainstrucciones del lenguaje máquina. Éstas instrucciones son directivas para elensamblador ;éstas asignan al programa ciertas áreas de memoria, definensímbolos, designan áreas de RAM para almacenamiento de datos temporales,colocan tablas o datos constantes en memoria y permiten referencias a otrosprogramas. Las directivas se utilizan como comandos escritos en el código fuente para realizar un control directo o ahorrar tiempo a la hora de ensamblar. El resultado deincorporar directivas se puede ver en el fichero *.LST, después de ensamblar el programa. Para usar éstas directivas o pseudo-operandos, el programador las coloca en el campo del código de operación, y, si lo requiere la directiva, una dirección o datoen el campo de dirección. Las directivas más comunes son: EQU (Equate) ORG (Origin) DEFB (Define Byte) DEFW (Define Word) END (fin del código fuente) EQU (Equate - Equivalente): La directiva EQU permite al programador igualar nombres a datos o direcciones. Esta pseudo-operación se nota EQU. Los nombres utilizados se refierengeneralmente a direcciones de dispositivos, datos numéricos, direcciones decomienzo, direcciones fijas, posiciones de bits, etc.

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

El valor del operando debe estar ya definido anteriormente, sino el compilador entregará un error.

 ORG (Origin - Origen): La directiva origen (se nota ORG) permite al programador especificar la posición de memoria donde programas, subrutinas o datos residirán. Los programas y los datos pueden estar alojados en diferentes áreas de memoria dependiendo de la configuración de memoria. Rutinas de comienzo, subrutinas de interrupción y otros programas deben comenzar en locaciones de memoria fijados por la estructura de microprocesador. La directiva ORG hace al compilador colocar el código que le sigue en una nueva dirección de memoria (la salida del compilador no solo coloca los códigos de operación sino también las direcciones de cada instrucción y datos del programa). Usualmente se la utiliza para: reset, programas de servicios de interrupción, almacenamiento en RAM, stack, programa principal, subrutinas.

j DEFB (Define Byte), DEFW (Define Word):Esta directiva le permite al programador ingresar datos fijos en la memoria deprograma. Estos datos pueden ser: Tablas de conversión Mensajes Nombres Umbrales Comandos Factores de conversión Identificación de teclas Direcciones de subrutinas Esta directiva trata a los datos como parte permanente del programa.El formato es muy simple

Operandos y direcciones:Los ensambladores permiten elegir con libertad el tipo de elemento a colocar en elcampo de operando o dirección. Números decimales: La mayoría de los ensambladores asumen todos los números como decimales ano ser que se marquen de otra manera. Por ejemplo: movlw 100 Significa: ³mover el número literal 100 (en decimal) al registro de trabajo W´. Otros sistemas de numeración: Los ensambladores también aceptan números Hexadecimales, octales o binarios.Esta es la forma de representarlos:

Si se utiliza la forma 0A000H para representar números hexadecimales, hay quetener en cuenta que el número debe comenzar siempre con un dígito entre 0 y 9(no acepta comenzar con las letras A a F);es por eso que el número A000h se loescribe 0A000h. Hexadecimal: es la numeración por defecto. Para mayor claridad para elprogramador se utiliza una letra H al final del número. Por ejemplo: 0100h, 0A0H,5H, 66h. Importante: Como ésta es la numeración por defecto hay que tener muchocuidado al colocar números en decimal. Por E jemplo la instrucción MOVLW 64 no utilizará el número 64 decimal sino el 100 decimal.

Binario: para escribir números en binario utilizar B¶xxxxxxxx¶ (utilizar comillas simples). Por ejemplo: B¶01101001¶ , b¶11110000¶. Decimal: puede utilizar la forma: D¶200¶ (tambien con comillas simples) o laforma corta, anteponiendo un punto al número decimal. Esta es la forma utilizadaen todos los programas realizados por microchip. Por ejemplo: D¶112¶ d¶10¶ .200 .100 Tener en cuenta siempre el tamaño de datos con el que se está trabajando. E n la mayoría de los casos, se utilizará un número para almacenarlo en el acumulador y éste es de 8 bits. Por lo tanto el número utilizado no debe ex eder de 255 decimal o FF hexadecimal. Por ejemplo: Un error muy común, y que el compilador avisa con un mensaje de peligro, es el siguiente: MOVLW 205. Nombres:Los nombres pueden aparecer en el campo de operando;éstos son tratados comoel dato que representan. (Ver directiva EQU). Códigos de caracteres: Algunos ensambladores permiten el uso de caracteres en ASCII.

Expresiones lógicas y aritméticas: Los ensambladores permiten combinaciones de datos con operandos especiales,aritméticos o lógicos. Éstos operandos se llaman expresiones.

En estos casos el compilador utilizará el resultado de sumar (VALOR+2) o (REG1+1) como operando.

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

En este caso el valor de SINK hará que el compilador utilicedistintas instrucciones de código. Si la CONDICION es verdadera en el tiempo de compilación, las instrucciones queestán entre IF y ENDIF se incluirán en el programa. Los usos típicos son: Para incluir o excluir variables extras. Para incluir código de diagnóstico en condiciones de testeo(DEBUG). Para permitir datos de distintos tamaños.

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

Por ejemplo: Le dice al compilador que incluya el código que se encuentra en el archivo DISPLAY.ASM como si fuese parte del propio programa. Esto se utiliza para reutilizar códigos realizados con anterioridad. En el ejemplo delsiguiente punto lo vemos más claro.

DEFINICIONES La directiva #define permite definir un nombre (cadena de caracteres) para que secomporte como otra cadena de caracteres válida. Ejemplos: #define CINCO 5 Cada vez que se utilice la palabra CINCO será reemplazada en elmomento de la compilación por el número 5. #define PIN1 PORTA,1Cada vez que aparezca la palabra PIN1 en el código, ésta seráinterpretada como PORTA,1 que es una instrucción válida. #define BANCO1 BSF STATUS,RP0Cada vez que se utilice la palabra BANCO1, en realidad estará utilizandola instrucción BSF STATUS,RP0 Esta directiva es muy util para hacer el código más fácil de leer y entender.En el Apéndice A se adjunta un ejemplo de directivas if, define, macros e include. MACROS A veces ocurren secuencias de instrucciones particulares en los programas queson repetitivas. Estas secuencias de instrucciones se pueden eliminar utilizando MACROS. Las macros permiten asignarle un nombre a una secuencia de instrucciones.Luego se utiliza el nombre de la macro en el programa como si se usase lasecuencia de instrucciones anterior. Las macros no son lo mismo que las subrutinas. El código de las subrutinasaparece una sola vez en un programa y la ejecución del programa salta a lasubrutina. En cambio, el ensamblador reemplaza cada ocurrencia del nombre dela macro con la secuencia especificada de instrucciones. Por consiguiente laejecución del programa no salta a la macro como una subrutina. Veamos un ejemplo utilizando los conceptos vistos hasta ahora:

En la línea de la Macro está el error.¿Que está ocurriendo? Los saltos no pueden saltar macros! Porque las macros están compuestas por más de una instrucción, y el salto se produciría dentro de la misma. El código anterior con la macro incrustada sería:

Otro tema importante, que aquí también observamos, es que las macros pueden modificar registros (en este caso W) en forma oculta al programador. En el ejemplo anterior, PORTA se debería cargar con 1, que aparentemente era el valor de W, pero la macro lo ha modificado; por consiguiente tenemos otro error.

MICROPROCESADOR Z80 El Z80 es una versión apreciablemente mejorada tanto en circuitería como encaracterísticas de programación del antiguo modelo INTEL 8080, el Z80 resultaser un microprocesador más rápido y sencillo en el desarrollo de sistemas ya quesolo usa una fuente de alimentación de +5 Volts, contiene íntegramente todo elconjunto de instrucciones del 8080, lo cual le permite ejecutar todos los programasescritos para el CPU 8080, contiene el Z80 una expansión adicional de 80instrucciones de ahí se deriva su nombre, su repertorio suma un total de 156instrucciones. Mientras algunos diseñadores de INTEL trabajaban en el 8085A como una mejoradel 8080A, algunos de los diseñadores que trabajaron en el 8080, se salieron deIntel, fundaron la compañía Zilog INC, y diseñaron el Z80. El cual se introdujo almercado en 1976. El microprocesador Z-80 fue el primero de la tercera generación, se fabrico contecnología NMOS, tiene bus de datos de 8 bits. El Z-80 está basado en el 8080,pero apreciablemente mejorado, tanto en el software como en el hardware. El Z-80 resulto ser un microprocesador mucho más rápido y fácil de usar, ya quesolo requerían una fuente de alimentación de 5v. y toda la circuitería de soporteestaba incluida en el circuito integrado. Su conjunto de instrucciones contenía las78 instrucciones del 8080, lo que le permitía ejecutar todos los programas escritospara este último, así como 80 instrucciones mas, en total 158.

Un sistema con Z80 se completa con el empleo de memorias estándar de lectura y memorias estáticas o dinámicas de lectura y escritura, además pertenecen al sistema, puertos de entrada y salida paralelo, interfaces de comunicación serie,sistemas contadores temporizadores y circuitos de acceso directo a memoria. El Z-80 posee más registros internos en forma de direccionamiento que la mayoríade los otros microprocesadores de 8 bits, estas características le permitenprocesar una mayor cantidad de información en un menor tiempo.

El microprocesador Z80 contiene las siguientes unidades funcionales; 1).- Unidad aritmética y lógica 2).- El contador de programa 3).- El apuntador del stack 4).- Registros de propósito general 5).- Registros de índice 6).- Registros de interrupciones 7).- Registro de banderas 8).- Registro para refrescar memorias dinámicas LA UNIDAD ARITMÉTICA Y LÓGICA ( ALU ) La Unidad Aritmética y Lógica es la sección dentro de la CPU encargada de hacer todas las operaciones aritméticas y lógicas. Uno de los operandos se encuentraen el acumulador (registro A), y el otro proviene normalmente de la memoria, o deotro registro. El resultado se almacena en el acumulador, y el grupo de FLIP-FLOP denominados registro de Estado o registro de Banderas cambia de estadosegún las operaciones realizadas. REGISTRO DE ESTADO (FLAGS,BANDERAS) Las banderas existen físicamente dentro de la CPU están agrupados lógicamenteformando un registro. Las Banderas del Z80 son los siguientes:



Bandera de Zero ( Z ) : Toma el valor 1 si el resultado de una operación escero.



Bandera de signo(S): Toma el valor 1 si el resultado de una operaciónes negativo.



Bandera de Carry (C): Esta bandera es afectada por las instrucciones dedesplazamiento y es puestoen 1 ó 0 según el valor del bit desplazado.También es afectado por las operaciones aritméticas.



Bandera de Paridad y Desbordamiento (overflow) (P/V ): En el caso deparidad, se pone en 1 si el resultado de una operación posee un númeropar de unos. Cuando la bandera P/V se usa para representar overflow, labandera se pone en 1 si ocurre un overflow después de una operaciónaritmética.



Bandera H y N: Son dos Flip - Flop que no pueden ser examinados por lasinstrucciones de salto condicional. El Z80 los usa para las operacionesBCD. H representa el rebase que genera considerando los cuatro bits menos significativos del resultado y N es la bandera de resta, la cual seactiva para indicar si la última instrucción ejecutada fue suma o resta. En elcaso general, una instrucción de resta coloca en 1 la bandera N y una instrucción de suma lo coloca en 0.

REGISTROSDEPROPÓSITOESPECIAL  Contador dePrograma (PC) :Es un registro de 16 bits que indica ladirección de la próxima instrucción ejecutar. Las instrucciones del Z80pueden contar de uno, dos, tres o cuatro Bytes. 

Registro de interrupciones ( I ): Es un registro de 8 bits que puede ser cargado para especificar el byte más significativo de una dirección dememoria. El byte menos significativo es proporcionado por el dispositivoque solicita la interrupción.



Registro de refresh de memoria (R): Es un registro especial diseñadopara proporcionar un refresh automático de las memorias RAM dinámicas.



Registro de Instrucciones: El registro de instrucciones tiene por misiónalmacenar el código de operación de la instrucción leída desdememoria.Este código es comparado con los códigos de cada instrucciónque reconoce el microprocesador. Si el código es válido se ejecuta sino semarca un error de sintaxis.

LA UNIDAD DETIEMPOYCONTROL Su objetivo es mantener la secuencia adecuada y el control de todas lasoperaciones del microprocesador. Atiende y responde a todas las señales externas.

DESCRIPCION DETERMINALES DEL Z80 El Z80 es un microprocesador de 8 bits y cuenta con 158 instrucciones y 10modos de direccionamiento. El circuito integrado del microprocesador Z80 sedeposita en un encapsulado Dual In Line de 40 terminales, de las cuales 5 sonúnicamente de entrada, 24 son de salida y 8 son bidireccionales, además, existendos que sirven para conectar la fuente de alimentación y otra más que es laentrada del reloj.

Todas sus terminales tienen características eléctricas compatibles con la familiaTTL el intervalo del voltaje de entrada para 0 lógico (VIL) es ±0.3 V a 0.8 V, elintervalo de voltaje de entrada para 1 lógico (VIH)es de 2.0 a VCC, el voltajemáximo de salida para 0 lógico(VLO) es de 0.4 V y el voltaje mínimo de salida para1 lógico (VOH)es 2.4 V. La corriente de salida para 0 lógico (IOH) es 1.8 mA y lacorriente de salida para 1 lógico (IOH)es ±250Q A (se supone positiva la corrienteen una terminal del CI si esta entra). El Z80 opera con una fuente de alimentación de +5.0 Volts conectada a la terminal11, (pin 11), la tierra de la fuente se conecta a la terminal GND, (pin 29), elconsumo típico de corriente para el Z80 es de 90 mA. Cuenta con 18 registros de 8 bits y 4 registros de 16 bits, todos los registros delZ80 se implementan con una RAM estática, los registros incluyen 2 bancos de 6registros de propósito general, que se usan individualmente como registros de 8bits, o en pares como registros de 16 bits, existen también 2 bancos de registrosdenominados "acumulador" y "banderas", además cuenta con 6 registros depropósito especial, 4 registros de 16 bits, PC, SP, IX e IY, y 2 registros de 8 bits, elregistro del refresh "R" y el registro de interrupciones "I", la aritmética de 8 bits delas funciones, y las instrucciones lógicas de la CPU se ejecutan en la ALU.La ALUrealiza las siguientes funciones: 1. Sumar. 2. Restar. 3. Función lógica AND. 4. Función lógica OR. 5. Función lógica OR-EX. 6. Comparación. 7. Desplazamientos a la derecha y a la izquierda. 8. Incrementar bytes. 9. Decrementar bytes.

10. Poner bits en uno lógico. 11. Poner bits en cero lógico y 12. Comprobar el estado de los bits LÍNEAS DE DIRECCIONES (A0 - A15), Pines 30-40, 1-5 respectivamenteSe forman con 16 líneas de direcciones, tienen la facultad de establecerse entercer estado, estas señales proporcionan las direcciones correspondientes aintercambios de datos entre la memoria, la CPU y los puertos de los periféricos, lacapacidad de direccionamiento con 16 bits es de 64 Kbytes y 256 puertos deentrada y salida, son activas en estado alto, los 8 bits menos significativos se usanpara permitirle al usuario seleccionar los 256 puertos E/S, (A0-A7), en donde A0es el bit menos significativo. LÍNEAS DE DATOS (DO - D7), Pines 14, 15, 12, 8, 7, 9, 10 y 13Se forman con 8 líneas de datos bidireccionales con capacidad del tercer estado,son activas en nivel alto, se utilizan para el intercambio de datos con la memoria, yperiféricos de E/S CICLO DE MAQUINA UNO (M1),Salida activa en nivel bajo, indica que en este ciclo de máquina uno elmicroprocesador va a obtener el código operacional de una instrucción, en lasinstrucciones que tienen un código operacional de 2 bytes esta señal se opera alobtener cada uno de los bytes del código operacional, al igual que para indicar elreconocimiento de un ciclo de interrupción cuando ocurre (IORQ)'. REQUERIMIENTO DE MEMORIA (MREQ)', Pin 19 Salida activa en nivel bajo, esta señal indica una petición que interrelaciona a lamemoria con la CPU, obtiene una dirección valida de las líneas dedireccionamiento, esta terminal tiene capacidad del tercer estado. REQUERIMIENTO DE E/S (IORQ), Pin 20 Es salida triestado activa en nivel bajo, esta señal indica que la mitad baja del busde direcciones mantiene una dirección válida de E/S, para efectuar una operaciónde lectura o escritura de E/S, se genera esta señal cuando el ciclo de maquina 1(M1) reconoce una interrupción, indica que el vector de respuesta de lainterrupción se coloca en el bus de datos, las operaciones de reconocimiento deinterrupción ocurren durante el ciclo de maquina 1, mientras que las operacionesde E/S nunca se producen durante este ciclo. LECTURA (RD), Pin 21 Salida triestado activa en nivel bajo, indica que la CPU desea leer datos desde lamemoria de un dispositivo externo de E/S, el dispositivo E/S se direcciona a lamemoria o al periférico, se usa esta terminal para dirigir los datos al bus de datosde la CPU. ESCRITURA (WR)', pin 22 Salida triestado activa en nivel bajo, indica que el bus de datos de la CPU va aobtener datos válidos para ser almacenados en la memoria o en algún dispositivode E/S. REFRESCO DE LA MEMORIA DINÁMICA (RFSH)', Pin 28 Salida activa en nivel bajo, indica que los siete bits inferiores de las líneas dedireccionamiento contienen una dirección válida de refresco de memoria, se utilizapara el mantenimiento de datos en memorias dinámicas, con esta se efectúa unalectura de refrescamiento para todas las memorias dinámicas.

PARO (HALT), Pin 18 Salida que activa en nivel bajo, indica que la CPU realiza una instrucción por software de paro (HALT), y que espera una interrupción (NMI)' o (INT)' antes deque continue la operación, mientras permanezca en este estado la CPU ejecutaoperaciones NOP, para mantener activo el refresco de las memorias dinámicas, alaplicarse un reset se continua con la operación. ESPERA (WAIT), Pin 24 Es una entrada activa en nivel bajo, le indica al microprocesador que la memoriadireccionada o los dispositivos periféricos de E/S no son tan rápidos como pararealizar una transferencia de datos a la velocidad de la CPU, o no están listos para una transferencia de información, la CPU continua con el estado de esperadurante todo el tiempo que esta terminal es activa, esto les permite a los otrosdispositivos sincronizarse con la CPU. REQUISICIÓN DE INTERRUPCIÓN MASCARABLE (INT), Pin 16 Entrada activa en nivel bajo, esta terminal se acciona con dispositivos E/Sexternos, una requisición (INT)' se atiende al final de la instrucción que se ejecuta,si el enable interno del Flip Flop de interrupción IFF1 controlado por software seencuentra habilitado, y si la requisición de bus no esta activa, al aceptar la CPUuna interrupción envía una señal de reconocimiento, la petición de E/S se realizadurante el ciclo de máquina 1, al principio del siguiente ciclo de instrucción, estapetición solo es valida bajo control del programa interno, reconociendo la CPU tresmodos diferentes de interrupción. INTERRUPCIÓN NO MASCARABLE (NMI)', Pin 17 Entrada que se activa con un flanco de bajada mediante un impulso que identificauna interrupción obligada, posiciona al contador de programa (PC) en la dirección0066h desde donde continua el proceso, esta tiene una prioridad más alta que lainterrupción (INT)' y siempre se reconoce al final de la instrucción que se ejecuta,independientemente del estado del IFF1, el contador de programa PC sealmacena automáticamente en el stack pointer externo de forma que el usuarioregrese al programa en el mismo punto del que fue interrumpido. REHABILITACIÓN (RESET), Pin 26 Entrada que se activa con un flanco de bajada mediante un impulso, obliga a laCPU a reiniciar su actividad, coloca al contador de programa (PC) en la localidadde inicio de memoria 0000h, desde donde empieza el proceso, durante estetiempo el bus de direcciones y el bus de datos adquieren el estado de altaimpedancia y todas las terminales de control de salida adquieren el estadoinactivo. REQUERIMIENTO DE LAS TERMINALES DE LA CPU (BUSRQ), Pin 25 Esta entrada es activa en nivel bajo, le indica a la CPU que coloque todas suslíneas en estado de alta impedancia, (tan pronto el ciclo de maquina 1 actualtermine), a petición del periférico externo que desea tomar el control del sistema,regresa el control a la CPU cuando esta señal (BUSRQ)' pasa al nivel alto, seutiliza para pedir que el bus de direcciones, el bus de datos y las terminales desalida triestado del bus de control vayan a un estado de alta impedancia de talforma que otros dispositivos controlen esos buses.

ENTREGA DE LAS TERMINALES DE LA CPU (BUSAK)', Pin 23 Salida activa en nivel bajo, es una indicación para el periférico que efectúa unapetición (BUSRQ)' de que su petición ha sido concedida por parte delmicroprocesador, sirve para indicar al dispositivo que solicita este reconocimiento,que el bus de direcciones, el bus de datos y el bus de las terminales de controltriestado han sido puestos en su estado de alta impedancia y que el dispositivo externo puede ahora controlar estas terminales. RELOJ (CK), Pin 6 Entrada configurada por un tren de impulsos útiles, es la diferencia que permite lasecuencia de tiempos de operación, se implanta físicamente con un oscilador deonda cuadrada cuya frecuencia depende del tipo de características de la CPUZ80, requiere oscilación de una fase con niveles TTL, una forma de satisfacer todos los requerimientos de voltaje es por medio de una resistencia de activación"pull up" de 330 ohms conectada entre +Vcc y la terminal de salida de un oscilador implantado con circuitos TTL que generen oscilaciones. ALIMENTACIÓN POSITIVA DE +5 VOLTS (Vcc), Pin 11 Esta es una entrada de alimentación de tensión de +5 volts con un 5 % detolerancia. TIERRA (GND), Pin 29 Terminal de alimentación negativa, requiere un potencial de 0.0 volts que sirven dereferencia para la interconexión de los dispositivos. BUSDEDIRECCIONES: El bus de direcciones está formado por 16 líneas que van desde la línea A0 hasta A15. Estas líneas son de 3 estados, de modo que cuando el bus de direccionesestá inactivo, se encuentran en el estado de alta impedancia. Cuando el microprocesador maneja dispositivos de E/S, las 8 líneas menossignificativas de este bus contienen la dirección del dispositivo, la cual puede tener un valor entre 0 y 255. Por otro parte, las líneas menos significativas de este buscontienen, durante el lapso de ejecución de la instrucción, el valor presente en el registro de Refresco (Refresh). BUSDEDATOS: El bus de datos está formado por 8 líneas, de la línea D0 a D7. Este bus es bidireccional permitiendo la transferencia de información de la CPU a MEMORIA o hacia dispositivos de E/S y viceversa, también es un bus de 3 estados. ALIMENTACION: El microprocesador Z80 requiere solamente un voltaje de alimentación de 5V, con un margen de error 5%, y consume una corriente máxima de 200 mA. Velocidad de operación de las diferentes versiones del MPUZ-80. Cualquier oscilador que cumpla con las especificaciones de la entrada puede servir para generar la señal de reloj del Z-80. Si se va a operar el microprocesador debajo de la frecuencia máxima y no se necesita que el valor de la frecuencia de oscilación sea muy preciso o estable, se puede utilizar un oscilador RC como el circuito siguiente. Este circuito es muy útil en las etapas de desarrollo y prueba de un sistema, porque siendo un oscilador de frecuencia variable permite al diseñador disminuir el ritmo de operación de sistema(incrementando los valores de R y C). Sin embargo, no se recomienda cuando el microprocesador se use en aplicaciones en las que se requiera un conteo preciso de tiempo. Los valores de R y C establecen la frecuencia de salida.

Para frecuencias cercanas al valor máximo se requiere un oscilador controlado por un cristal de cuarzo, como el circuito que se muestra a continuación. En este caso la frecuencia de oscilación del cristal determina la frecuencia de la señal de reloj, y gracias a la estabilidad del cristal se puede mantener un tiempo de ejecución constante. Cuando no se tiene un cristal cuya frecuencia de oscilación más alta y después dividir la señal de salida del circuito oscilador por medio del flip ± flop o controladores hasta obtener el valor requerido. SEÑALES DE CONTROLCONTROL DE LOS BUSES: El MPU Z80 posee dos señales asociadas con el control de los buses de dirección y datos. Estas señales son la señal de entrada BUSRQ y la señal de salida BUSAK. La señal BUSRQ es generada por un dispositivo externo para obtener el control de los buses y realizar una operación de acceso directo a memoria. Cuando un dispositivo externo solicita el control de los buses colocando en 0 la línea BUSRQ, el microprocesador concluye la instrucción que estaba ejecutando y responde mediante la señal de reconocimiento BUSAK. CONTROL DELA MEMORIA: El Z80 posee 4 señales relacionadas con las operaciones de control de la memoria. Ellas son las señales MREQ, RD, WR y RFSH. La señal MREQ es una señal de 3 estados que se activa en 0 indicando que el bus de direcciones contiene una dirección válida. La señal RD (Read) se activa cuando el microprocesador requiere leer un dato de la memoria o de un puerto. Indica que el bus de datos se está usando como entrada. La señal WR (Write) se genera cuando el microprocesador va a escribir un dato en la memoria o en un puerto. Indica que el bus de datos se está usando como salida y que en sus líneas se encuentra al dato que va a ser almacenado. Tanto la señal RD como la señal WR provienen de terminales de salida con tercer estado.

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

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

SEÑALES MISCELANEAS: En este grupo se encuentran las señales M1, RESET, WAIT y HALT. La señal M1Ciclo de Maquina uno (MachineCycleOne): indica que el microprocesador va a obtener el código de operación de una instrucción. En las instrucciones que tiene un código de operación de dos bytes, la señal M1se genera al obtener cada uno de los bytes del código de operación. La señal RESET es una señal de entrada a la CPU y que se activa en cero para efectuar una operación de restablecimiento general. La función de restablecimiento (reset): es uno de los controles más necesarios en un microprocesador, los registros y flip ± fllops internos adoptan valores aleatorios y la operación del circuito resulta impredecible. Por lo tanto, el microprocesador debe restablecerse para colocarlo en un estado inicial conocido. Los efectos producidos por el pulso de restablecimiento son los siguientes. El contador del programa se carga con ceros PC 0000H El flip - flop de interrupciones se pone en cero IFF 0 El registro del vector de interrupciones se carga con ceros I 00H El registro de refrescado se carga con ceros R 00H Se establece el modo de interrupción 0. Así, en esencia, el restablecimiento del microprocesador equivale a un salto incondicional la dirección 0000H producido por hardware. Además, mientras RESET está en ³cero´ lógico, tanto el bus de datos como el bus de direcciones se ponen a flotar (estado de alta impedancia) y todas las líneas de salida del bus de control pasan a su estado inactivo.

MODOSDEDIRECCIONAMIENTO La mayoría de las instrucciones ejecutadas por un microprocesador requierendatos. La palabra DIRECCIONAMIENTO se refiere al mecanismo por medio delcual un microprocesador tiene acceso a los lugares donde se encuentra los datosque va a procesar y a los lugares donde se almacenaran los resultados de las operaciones. A través del estudio de las instrucciones del Z-80 se ha observado que la mayoríade ellas actúan sobre los datos almacenados en los registros internos y en lamemoria. Este microprocesador ofrece diez tipos de direccionamiento, en loscuales están incluidos todas las modalidades de las instrucciones. Estos son:

DIRECCIONAMIENTO INMEDIATO: Este modo no constituye un direccionamiento propiamente dicho, pues aquí lainstrucción no contiene ninguna dirección, en su lugar figura un operando sobre elcual se realiza la operación que indica la instrucción, no hay necesidad del ciclo dememoria (ejecute) de ejecución, una denominación más precisa es la de operandoinmediato. Una instrucción con direccionamiento inmediato es la que contiene en el byte 2 oen el byte 3 de la propia instrucción en el dato de la transferencia, es decir, el datoes parte integral de los bytes que constituyen la instrucción.