El microprocesador 8085
por Dario Alejandro Alpern
Introducción
El siguiente microprocesador creado por la empresa Intel fue el 8085 en 1977.
La alimentación es única: requiere sólo +5V. Esto se debe a la
nueva tecnología utilizada para la fabricación llamada HMOS
(High performance N-channel MOS) que además permite una mayor integración,
llegando a la VLSI (Very Large Scale of Integration o muy alta escala de
integración) con más de diez mil transistores (el 8085 no es
VLSI, pero sí el 8088, como se verá más adelante). Tiene
incorporado el generador de pulsos de reloj con lo que sólo hace falta
un cristal de cuarzo y un par de capacitores externos (para el 8080 se necesitaba
el circuito integrado auxiliar que lleva el código 8224). Además está
mejorado en lo que se refiere a las interrupciones. Incluye las 74 instrucciones
del 8080 y posee dos adicionales (RIM y SIM) referidas a este sistema de
interrupciones y a la entrada y salida serie. El bus de datos está
multiplexado con los ocho bits menos significativos del bus de direcciones
(utiliza los mismos pines para ambos buses), con lo que permite tener más
pines libres para el bus de control del microprocesador (el 8080
necesitaba un integrado especial, el 8228, para generar el bus de control).
Intel produjo ROMs, RAMs y chips de soporte que tienen también el bus
multiplexado de la misma manera que el microprocesador. Todos estos
integrados forman la familia MCS-85.
Debido a la gran densidad de integración comparado con el 8080, se
utilizó mucho este microprocesador en aplicaciones industriales. Sin
embargo, para aplicaciones de computación de uso general, se extendió
más el uso del microprocesador Z-80 como se indicó en el apartado
referente al 8080.
Interrupciones
El microprocesador 8085 posee un complejo y completo sistema de interrupciones. Esta uP posee cinco terminales destinados al tratamiento de interrupciones.
Recordemos que una interrupción es un artificio hardware/software por el cual es posible detener el programa en curso para que, cuando se produzca un evento predeterminado, después de concluir la instrucción que está ejecutando, efectúe un salto a una determinada subrutina en donde se efectuará el tratamiento de la interrupción; una vez acabado éste, el uP continúa con la instrucción siguiente del programa principal.
Así pues, el 8085 dispone de tres formas diferentes de tratar las interrupciones que le llegan por los citados cinco terminales. Los nombres de estos cinco terminales son:
- INTR (Interrupt Request): Por esta entrada se introduce una interrupción que es aceptada o no según haya sido previamente indicado por las instrucciones EI (Permitir interrupciones) o DI (No permitir interrupciones). Cuando una interrupción es permitida y ésta se ha producido, la CPU busca una instrucción RST (de un sólo byte), que es presentada por el bus de datos por el periférico que interrumpe. Este byte tiene el formato binario 11 XXX 111. La subrutina se ubicará en la dirección 00 XXX 000.
- RST 5.5, RST 6.5 y RST 7.5: Los terminales de RST 5.5 y RST 6.5 detectan la interrupción sólo si la señal que se les aplica es un uno lógico o nivel alto de una cierta duración, lo mismo que la entrada anterior INTR; sin embargo, la entrada de interrupción correspondiente al terminal RST 7.5 se excita por flanco ascendente, es decir, por una transición de cero a uno. Esta transición se memoriza en un biestable en el interior del uP.
Estas interrupciones se pueden habilitar o deshabilitar mediante las instrucciones EI y DI, como en el caso de INTR; pero además son enmascarables por software mediante la instrucción SIM (Set Interrupt Mask). Es posible leer tanto el estado de la máscara como las interrupciones que se han producido y aún no se atendieron mediante la instrucción RIM.
- TRAP: Es una interrupción no enmascarable que es activada cuando el terminal del mismo nombre se lleva a nivel lógico uno. Esta interrupción es la de más alta prioridad, por lo que puede ser usada para tratar los acontecimientos más relevantes, tales como errores, fallos de alimentación, etc.
Nivel de prioridad | Nombre de la interrupción | Valor leído en el bus de datos | Dirección de la subrutina en hexadecimal
|
---|
Mayor prioridad | TRAP | No importa | 0024
|
---|
- | RST 7.5 | 003C
|
---|
- | RST 6.5 | 0034
|
---|
- | RST 5.5 | 002C
|
---|
Menor prioridad | INTR | 11000111 | 0000
|
---|
11001111 | 0008
|
11010111 | 0010
|
11011111 | 0018
|
11100111 | 0020
|
11101111 | 0028
|
11110111 | 0030
|
11111111 | 0038
|
Control de entrada/salida serie
Este microprocesador posee dos terminales denominados SID (Serial Input Data) y SOD (Serial Output Data). Estos terminales se pueden usar con propósitos generales. Por ejemplo el terminal SID se puede conectar a un interruptor y el SOD a un LED (a través de una compuerta inversora externa).
Para leer el estado del terminal SID se ejecuta la instrucción RIM, con lo que se puede leer en el bit 7 del acumulador el estado de dicho terminal.
Para enviar un dato por el terminal SOD se ejecuta la instrucción SIM, donde el bit 7 del acumulador debe tener el valor a poner en el terminal, y el bit 6 debe estar a uno.
Conjunto de instrucciones del 8085
Aparte de las 74 instrucciones del 8080, este procesador posee dos instrucciones más.
- SIM (Set interrupt mask): Sirve para poner la máscara de interrupción de RST 5.5, RST 6.5 y RST 7.5 y para enviar un dato por la puerta serie (terminal SOD).
Estos datos deben estar cargados en el acumulador y son:
- Bit 7: Valor a enviar al terminal SOD
- Bit 6: Permiso para cambiar el estado del terminal SOD. Sólo se puede cambiar si vale 1.
- Bit 5: No usado.
- Bit 4: R 7.5 (Reset 7.5): Bit para poner a cero el biestable de la interrupción RST 7.5.
- Bit 3: MSE (Mask Select Enable): Cuando vale 1, se puede cambiar la máscara de interrupción.
- Bit 2: M 7.5 (Mask 7.5): Se habilita la interrupción RST 7.5 si este bit vale 1 y se ejecutó previamente la instrucción EI.
- Bit 1: M 6.5 (Mask 6.5): Se habilita la interrupción RST 6.5 si este bit vale 1 y se ejecutó previamente la instrucción EI.
- Bit 0: M 5.5 (Mask 5.5): Se habilita la interrupción RST 5.5 si este bit vale 1 y se ejecutó previamente la instrucción EI.
- RIM (Read interrupt mask): Sirve para leer la máscara de interrupción general, y de RST 5.5, RST 6.5, RST 7.5, las interrupciones pendientes y para leer el dato de la puerta serie (terminal SID).
Luego de la ejecución de esta instrucción, el acumulador tiene lo siguiente:
- Bit 7: Valor leído del terminal SID
- Bit 6: I 7.5 (Interrupt Pending 7.5): Indica que todavía no se ejecutó la interrupción RST 7.5.
- Bit 5: I 6.5 (Interrupt Pending 6.5): Indica que todavía no se ejecutó la interrupción RST 6.5.
- Bit 4: I 5.5 (Interrupt Pending 5.5): Indica que todavía no se ejecutó la interrupción RST 5.5.
- Bit 3: IE (Interrupt Enable): Cuando vale 1 la interrupción INTR está habilitada.
- Bit 2: M 7.5 (Mask 7.5): Si este bit y IE valen 1, la interrupción RST 7.5 está habilitada.
- Bit 1: M 6.5 (Mask 6.5): Si este bit y IE valen 1, la interrupción RST 6.5 está habilitada.
- Bit 0: M 5.5 (Mask 5.5): Si este bit y IE valen 1, la interrupción RST 5.5 está habilitada.
Terminales (pinout) del 8085
Este microprocesador estaba encapsulado en el formato DIP (Dual Inline
Package) de 40 patas (veinte de cada lado). La distancia entre las patas es de 0,1 pulgadas (2,54 milímetros), mientras que la distancia entre patas enfrentadas es de 0,6 pulgadas (15,32 milímetros).
Nótese en el gráfico el semicírculo que identifica la posición de la pata 1. Esto sirve para no insertar el chip al revés en el circuito impreso.
Las funciones de las 40 patas con las que se conecta el 8085 con el exterior son las siguientes:
Pata | Nombre | Descripción
|
---|
1 | X1 | Entre estas dos patas se ubica el cristal
|
---|
2 | X2
|
---|
3 | RESET OUT | Para inicializar periféricos
|
---|
4 | SOD | Salida serie
|
---|
5 | SID | Entrada serie
|
---|
6 | TRAP | Entrada de interrupción no enmascarable
|
---|
7 | RST 7.5 | Entrada de interrupción (máxima prioridad)
|
---|
8 | RST 6.5 | Entrada de interrupción
|
---|
9 | RST 5.5 | Entrada de interrupción
|
---|
10 | INTR | Entrada de interrupción (mínima prioridad)
|
---|
11 | /INTA | Reconocimiento de interrupción
|
---|
12 | AD0 | Bus de direcciones y datos multiplexado
|
---|
13 | AD1 | Bus de direcciones y datos multiplexado
|
---|
14 | AD2 | Bus de direcciones y datos multiplexado
|
---|
15 | AD3 | Bus de direcciones y datos multiplexado
|
---|
16 | AD4 | Bus de direcciones y datos multiplexado
|
---|
17 | AD5 | Bus de direcciones y datos multiplexado
|
---|
18 | AD6 | Bus de direcciones y datos multiplexado
|
---|
19 | AD7 | Bus de direcciones y datos multiplexado
|
---|
20 | GND | Referencia de tierra. Todas las tensiones se miden con respecto a este punto.
|
---|
21 | A8 | Bus de direcciones
|
---|
22 | A9 | Bus de direcciones
|
---|
23 | A10 | Bus de direcciones
|
---|
24 | A11 | Bus de direcciones
|
---|
25 | A12 | Bus de direcciones
|
---|
26 | A13 | Bus de direcciones
|
---|
27 | A14 | Bus de direcciones
|
---|
28 | A15 | Bus de direcciones
|
---|
29 | S0 | Bit de estado del 8085
|
---|
30 | ALE | Cuando está uno indica que salen direcciones por las patas ADn, en caso contrario, entran o salen datos
|
---|
31 | /WR | Cuando vale cero hay una escritura
|
---|
32 | /RD | Cuando vale cero hay una lectura
|
---|
33 | S1 | Bit de estado del 8085
|
---|
34 | IO/M | Si vale 1: operaciones con ports, si vale 0: operaciones con la memoria
|
---|
35 | READY | Sirve para sincronizar memorias o periféricos lentos
|
---|
36 | /RESET IN | Cuando está a cero inicializa el 8085
|
---|
37 | CLK OUT | Salida del reloj para los periféricos
|
---|
38 | HLDA | Reconocimiento de HOLD
|
---|
39 | HOLD | Sirve para poner los buses en alta impedancia para el manejo de DMA (acceso directo a memoria)
|
---|
40 | VCC | tensión de alimentación: +5Vdc
|
---|