microprocesador 8085
TRANSCRIPT
1
2
Investigación sobre el Microprocesador 8085 de INTEL
¿Qué es el microprocesador?
Integración a gran Escala.
Estructura de un Microprocesador.
El Microprocesador INTEL 8085.
Descripción física del Microprocesador.
Lenguaje e Instrucciones del uP.
En muchos textos que tratan el tema de los
microprocesadores se ha escrito
sobre las características técnicas y
funcionales de este tipo de dispositivos. No se
pretende en la investigación realizar una
exposición exhaustiva de dichas
características, para lo cual
Sería más oportuno acudir a los manuales del
fabricante, sino más bien llevar a cabo un
Estudio paulatino del microprocesador 8085A,
y de una serie de dispositivos asociados
(Memorias, periféricos, etc.)
3
CENTRO ESCOLAR INSA
BACHILLERATO TECNICO INDUSTRIAL
ESPECIALIDAD: ELECTRONICA
Modulo: Programación de Microprocesadores
Ing. Francisco Andaluz Guzmán
I-III-D
Información e Investigación del Microprocesador, aplicaciones y
funcionamientos.
Microprocesador 8085 de INTEL, Funciones, estructuras, programación, e
instrucciones.
GRUPO 1
Alumnos: Numero de Lista:
Jorge Edgar Aguirre Gutiérrez 3
José Neftali Alvarado Rosales 5
Elmer Antonio Avelar Lemus 7
4
El microprocesador Pág. 6
Integración a gran escala Pág. 7
Estructura de un Microprocesador Pág. 8
Microprocesador de INTEL 8085 Pág. 11
Descripción Física del Microprocesador 8085 de INTEL Pág. 13
Descripción Funcional del Microprocesador 8085 de INTEL Pág. 16
Diagrama de Bloques del Microprocesador 8085 de INTEL Pág. 17 Instrucciones del Microprocesador 8085 Pág. 19
Instrucciones Lógicas y Aritméticas Pág. 21
Instrucciones de Control Pág. 22
Ejemplos de Programación Pág. 23
Conclusión Pág. 26
Recomendaciones Pág. 27
Bibliografía Pág. 28
5
EL MICROPROCESADOR:
Se denomina microprocesador a un circuito integrado semiconductor formado por transistores que
permiten o cierran el paso, de forma lógica, a una serie de señales eléctricas. El microprocesador
está compuesto por la unidad de control, la unidad aritmético-lógica y un grupo de registros. Es
característico del microprocesador el poseer un alto grado de integración, siendo capaz de ejecutar
algorítmicamente una serie de instrucciones. La
diferencia entre un semiconductor de memoria y un
microprocesador es su funcionalidad, ya que los
microprocesadores son circuitos de puertas lógicas
distribuidas irregularmente para poder realizar las
diferentes tareas y operaciones de manejo del sistema
informático, mientras que las memorias son circuitos
repetitivos de almacenamiento de información; por ello,
los microprocesadores son más complicados de
desarrollar y construir que los semiconductores de
memorias.
Como se ha indicado anteriormente, el microprocesador
efectúa la ejecución de las instrucciones de forma
secuencial, excepto cuando la propia instrucción le
ordene la alteración de la secuencia. El microprocesador
va a poder controlar las distintas unidades del sistema
informático que permitirán la comunicación con el
exterior de la computadora y la memoria de ésta, donde
se almacenarán los datos.
- Como Circuito Físico Programable. Un microprocesador permite sustituir a los viejos subsistemas
de componentes físicos (válvulas) o de circuitería cableada (mazos de cables que conectan
diferentes componentes en equipos electrónicos, industriales, etc.) dentro de sistemas informáticos
más complejos.
La capacidad de programación que caracteriza a los microprocesadores permite una mayor
potencia y versatilidad de estos subsistemas con respecto a los anteriormente utilizados. En la
actualidad se están utilizando los "viejos" chips 8086 como base para subsistemas de tarjetas
gráficas.
- Como Procesador Central de una Computadora Es el motor de la Unidad Central de Proceso,
encargándose de:
1.- Manejar la memoria.
2.- Controlar el flujo de información en el sistema informático.
3-. Realizar las operaciones básicas sobre los datos.
6
INTEGRACION A GRAN ESCALA:
Podemos considerar que los primeros utensilios y equipos empleados para efectuar operaciones de cálculo fueron los ábacos orientales, siendo aproximadamente en el siglo XVII cuando se construyeron las primeras máquinas calculadoras mecánicas. Posteriormente se pasó al empleo de elementos electromecánicos, significando esto un gran avance en dicho campo. En 1941 comienzan a construirse computadoras digitales basadas en el sistema binario de numeración basándose en relés, y en un paso posterior se consigue la primer computadora basada en miles de válvulas a la que se denominó ENIAC y que ha supuesto un paso decisivo y definitivo en el desarrollo tecnológico industrial. A partir de la aparición de los materiales semiconductores (fundamentalmente el silicio) se produce un crecimiento imparable en la industria y fundamentalmente en el sector de la electrónica. Los semiconductores son materiales que no pueden considerarse ni buenos ni malos conductores, presentando unos valores de resistividad comprendidos entre los de los buenos conductores y los de los aislantes. La resistividad de estos elementos es alterada añadiéndoles otros materiales, denominados impurezas que aumentan la conductividad de los cristales, obteniendo de este modo los semiconductores extrínsecos. Dependiendo del tipo de impurezas añadido, se obtendrán cristales tipo N o cristales tipo P. Cuando se doparon los cristales de forma controlada con impurezas de ambos tipos aparecieron las junturas PN o diodos. Fue posteriormente, al conseguir dos junturas, formando uniones PNP o NPN, cuando aparece el transistor y es en este momento cuando se produce un verdadero desarrollo y gran expansión de la electrónica en general. Con el perfeccionamiento de la tecnología se consigue colocar o integrar en muy poco espacio, hasta varias decenas de transistores. Estamos ante la aparición de los primeros circuitos integrados trabajándose a muy baja escala de integración (SSI). Posteriormente se consigue almacenar en una misma pastilla varios miles de elementos integrados, obteniendo de este modo componentes más complejos que se enmarcan dentro de la media escala de integración (MSI). Hacia 1976 con la mejora de la tecnología se consigue implementar en un solo chip varios miles de componentes, apareciendo en ese momento la alta escala de integración (LSI). A partir de 1980 se trabaja con la muy alta escala de integración (VLSI) que permite incorporar una cantidad muy elevada de componentes en un solo circuito integrado.
La LSI provocó la aparición del primer microprocesador, el 4004 de INTEL. Se trata de un
microprocesador de 4 bits que hoy en día está totalmente en desuso.
Con posterioridad al 4004, aparecen los microprocesadores 8008 y 8080 de INTEL, se trata ahora
de componentes LSI de 8 bits. Este último microprocesador posee múltiples ventajas sobre los
anteriores por lo que adquirirá mayor importancia. Sin embargo para su correcto funcionamiento
necesita de algunos componentes auxiliares como son: un generador de impulsos de reloj, un
7
controlador de buses del sistema y además emplea tres tensiones de alimentación (+12V, +5V, y –
5V).
La casa INTEL presenta en 1977 el nuevo microprocesador 8085, que posee una arquitectura
interna similar a la del 8080, con la diferencia de que ahora se añade en la misma pastilla el
generador de impulsos de reloj, el controlador de buses y además solo se necesita una tensión de
alimentación de +5V. Dispone también de cuatro nuevas entradas de interrupción y dos líneas para
entrada/salida de información en serie. El bus de direcciones y el bus de datos están multiplexados
y en el juego de instrucciones aparecen algunas novedades (que veremos más adelante) respecto
al juego de instrucciones del 8080.
Gracias a todas estas novedades incorporadas, el microprocesador adquiere gran relevancia y
potencialidad frente a sus competidores de igual categoría. Puede decirse que un microprocesador
es un componente que contiene en una sola pastilla los componentes necesarios para desarrollar
funciones aritméticas, lógicas y de control. Por tanto es una pequeña Unidad Central de Proceso
(CPU) en una pastilla.
ESTRUCTURA DE UN MICROPROCESADOR:
En la actualidad los microprocesadores están entrando en muchos campos de la electrónica
tradicional, debido a una serie de ventajas como pueden ser: la necesidad de emplear menos
componentes, que lleva aparejado un menor volumen, menor consumo, menos conexiones y
mayor fiabilidad; y la posibilidad de programar el sistema que aporta gran facilidad para simplificar
diseños y minimizar los tiempos de desarrollo. La programación proporciona además la posibilidad
de emplear un mismo sistema para la realización de tareas muy diversas.
En general, los fabricantes han mantenido líneas generales de diseño bastante similares, por tanto
la mayoría de los microprocesadores tienen la misma arquitectura básica o estándar. Puede
asumirse como tal la representada en la FIG.12A.
En esta representación esquemática podemos apreciar que el microprocesador posee una serie de
“bloques internos” que se comunican entre sí y con el exterior a través de unos conjuntos de líneas
8
denominados “buses” que sirven para transmitir señales y datos entre los distintos componentes.
Puede apreciarse con claridad la diferencia entre los buses internos, empleados por el
microprocesador para realizar sus operaciones internas y los buses externos, utilizados para
comunicarse con el exterior, es decir con componentes que están situados fuera del propio
microprocesador. En general podemos decir que hay tres tipos de buses distintos:
· Bus de “direcciones” que se crea en los registros de direccionamiento de 16 bits y se comunica
con el exterior mediante un conjunto de 16 líneas (líneas de direcciones) normalmente enumeradas
de A0 hasta A15. Por este bus, las direcciones salen siempre hacia el exterior.
· Bus de “datos” que se genera en el interior del microprocesador y lo utiliza para intercambiar
información entre sus distintos bloques internos y para comunicarse con el exterior. Son un
conjunto de 8 bits que utilizan 8 líneas de conexión al exterior, normalmente denominadas D0 a
D7. Por este bus sale y entra información, por tanto se trata de un bus bidireccional.
· Bus de “control” compuesto por una serie de líneas, variable en número según el componente de
que se trate. Contiene las líneas de sincronización de funciones, pudiendo ser unas de salida y
otras de entrada al microprocesador. Algunas señales de control pueden ser por ejemplo, las de
lectura, escritura, reloj o clock, etc.
El bloque fundamental del microprocesador es el llamado ALU, representa la parte del
microprocesador que realiza las operaciones aritméticas y lógicas. Para llevar a cabo este proceso
emplean normalmente un registro especial denominado “Acumulador” donde almacenan el
resultado de las operaciones realizadas. Algunos microprocesadores poseen más de un
acumulador.
9
Para completar las indicaciones necesarias tras la ejecución de las instrucciones, el
microprocesador emplea además un registro
especial de 8 bits denominado “Registro de
Estado” o “Registro de Flags” que marcarán
distintas características y peculiaridades de las
operaciones desarrolladas. Posteriormente
veremos con más detalle este Registro de Flags.
En la FIG.12A puede verse también un bloque
denominado “Control” que sirve para sincronizar el
funcionamiento de todo el sistema. Genera
señales de sincronismo para la ALU, memorias y
dispositivos de E/S.
Las unidades de control generalmente están
constituidas basándose en microprogramación
(programación interna no accesible al usuario) y se encargan de descifrar y ejecutar las
instrucciones del programa que nosotros construyamos.
Puede verse además un bloque compuesto por “Registros Internos de 8 bits”, se trata en este caso
de una serie de registros (variable según el microprocesador de que se trate) de uso general que
emplea la ALU para manipular datos. Estos registros normalmente almacenan palabras de 8 bits y
en ocasiones pueden ser utilizados como registros pares (de dos en dos) almacenando palabras o
informaciones de 16 bits.
Finalmente, decir que en la estructura estándar que se está tratando debe haber también un
bloque de “Registros Internos de 16 bits” que también son llamados registros de direccionamiento.
Están conectados al bus de direcciones y suele haber dos registros de este tipo que son:
· El “Puntero de Pila”, denominado abreviadamente SP, es indispensable durante el desarrollo de
programas tanto para trabajar con interrupciones como para el tratamiento de subrutinas. El
contenido del SP señalará en todo momento a la cima de la pila. (La pila estará constituida por un
bloque de memoria RAM, donde se almacenarán de forma temporal los datos. Hablaremos de ella
con posterioridad).
· El “Contador de Programa”, denominado abreviadamente PC, es imprescindible en todos los
microprocesadores. Contiene la dirección de la siguiente instrucción que deba ejecutarse y su
contenido se va incrementando a medida que las instrucciones van siendo ejecutadas. De todas
formas el contenido del PC puede alterarse por programa cuando se desee o cuando se necesite
como posteriormente se verá, alterando de este modo la ejecución secuencial de las instrucciones.
10
MICROPROCESADOR 8085 DE INTEL:
Tras habernos iniciado a los microprocesadores en el punto anterior de una forma generalista, pasamos ahora a iniciar el estudio del microprocesador 8085A. La representación esquemática de sus señales o líneas de conexión exterior, pueden apreciarse en la FIG.13A, indicándose en dicha figura el sentido de acción de todas las señales que vendrá marcado por el sentido de las flechas que las representan. Por ejemplo podemos ver que la señal ALE es generada por el microprocesador y sale hacia el exterior; del mismo modo la señal SID será una señal que procedente del exterior entrará en el microprocesador para ser tratada.
Es importante detenerse unos instantes en la observación de esta figura y estudiar superficialmente todas las líneas que posee. Debe decirse que las señales marcadas con letra en negrita son activas con nivel lógico 0, por ejemplo la señal RD (lectura). Como características más importantes en el 8085 pueden destacarse: · Se presenta en encapsulado dual in line de 40 patillas.
· El bus de datos y la parte baja del bus de direcciones están multiplexados.
· En total posee un bus de direcciones de 16 bits. · Direccionamiento de E/S para 256 elementos o puertos. · Un acumulador de 8 bits. · Seis registros básicos de 8 bits cada uno de uso general. Estos registros pueden usarse como registros pares para el tratamiento de información de 16 bits. · Dos registros de direcciones de 16 bits (SP y PC). · Un bloque de cinco señales de interrupción distintas con diferentes órdenes de prioridad.
11
· Dos señales que permiten la transferencia de información en serie (SID y SOD). · Tensión de alimentación única de +5V. · Buffers para la salida y entrada de información por los buses de direcciones y datos. · Generador de impulsos de reloj incorporado. En los manuales o folletos proporcionados por los fabricantes se especifican con mucho más detalle y minuciosidad, las características y propiedades del microprocesador, incluyendo además los diagramas de tiempo correspondientes a la ejecución de las instrucciones en función de la frecuencia del cuarzo colocado en las líneas X1 y X2.
12
DESCRIPCION FISICA DEL MICROPROCESADOR 8085:
Como se ha mencionado anteriormente, este microprocesador se presenta en un encapsulado de
40 patillas cuya distribución puede verse en la FIG.14A. A continuación se da una descripción de la
función de cada una de las patillas:
· Patillas 1 y 2 (X1 y X2): Permiten la generación de las señales de reloj, mediante la utilización de
un cristal de cuarzo, según se verá posteriormente.
· Patilla 3 (RESET OUT): Señal de salida. Cuando en ella tenemos un 1, quiere decir que el
microprocesador queda reinicializado. Esta señal es generada por el propio microprocesador.
· Patilla 4 (SOD): Salida serie. Se activa mediante la instrucción SIM.
· Patilla 5 (SID): Entrada serie. El dato queda cargado en el bit 7 del Acumulador cuando se ejecuta
la instrucción RIM.
· Patilla 6 (TRAP): Interrupción. Cuando se activa esta patilla bien por flanco o por nivel lógico 1, el
microprocesador finaliza la instrucción que estaba ejecutando y salta a una subrutina enganchando
en la dirección de memoria 0024H. Al hacer este salto, lleva el contenido del Contador de
Programa a la pila, al objeto de que cuando termine la subrutina, mediante una instrucción RET,
vuelva a tomar el curso normal de su trabajo al recargar el Contador de Programa con el contenido
de la pila. Esta es la interrupción de más alta prioridad.
· Patilla 7 (RST 7.5): Interrupción. Es enmascarable por programa. Para conseguir esto, es
necesario que se haya ejecutado la instrucción EI con posterioridad a DI y a continuación
enmascararla (o no), colocando un 0 en el bit adecuado mediante la instrucción SIM. Esta
interrupción se activa por flanco y nos permite enganchar en la dirección 003CH.
13
· Patilla 8 (RST 6.5): Se activa por nivel 1 lógico, que debe mantenerse hasta que la petición de
interrupción sea atendida. Es enmascarable por programa (Idem a la anterior). Permite enganchar
en la dirección 0034H.
· Patilla 9 (RST 5.5): Se activa por nivel 1 lógico, que debe mantenerse hasta que la petición de
interrupción sea atendida. Es enmascarable por programa (Idem a la anterior). Permite enganchar
en la dirección 002CH.
· Patilla 10 (INTR): Interrupción. Cuando en esta patilla introducimos un 1 lógico, el contador de
programa no se incrementa y el 8085 busca una instrucción que entra a la CPU por el bus de datos
mediante hardware externo y activa INTA que es la señal de reconocimiento. Se puede entonces
presentar el código de operación de una instrucción RST o CALL para realizar el subprograma de
tratamiento de la interrupción. La interrupción queda autorizada o prohibida por programa (EI o DI).
Queda prohibida a continuación de un RESET o inmediatamente después de una interrupción.
Forma un segundo grupo de interrupciones al emplear las instrucciones RST 1,2,3,4,5,6 y 7. INTA
es la señal de reconocimiento. Las instrucciones RESTART pueden producir interrupciones por
software, pero al activar esta patilla INTR del 8085A, si se introduce por el bus de datos el código
de una instrucción RST, la interrupción se produce por hardware.
· Patilla 11 (INTA): Reemplaza a RD en una operación de lectura de instrucción que sea una
interrupción.
· Patillas 12 a 19 (AD0 a AD7): Conforman el bus de datos/direcciones multiplexado durante la
ejecución de una instrucción. Transporta desde el principio la parte BAJA del bus de direcciones
para a continuación transportar los 8 bits de datos. Este bus está en estado de ALTA IMPEDANCIA
durante un HOLD o durante un HLT. Es un bus tri-estado.
· Patilla 20 (GND): Masa o tensión de referencia.
· Patillas 21 a 28 (A8 a A15): Transporta la parte ALTA del bus de direcciones. Está en estado de
ALTA IMPEDANCIA con un HOLD o un HLT. Es un bus tri-estado.
· Patilla 29 (S0): Es una salida que codifica el estado del bus de datos durante el curso del ciclo de
máquina que está en ejecución (junto con S1).
· Patilla 30 (ALE): Libera un impulso cada vez que el bus AD0-AD7 presenta la parte baja de una
dirección. Se utiliza para diferenciar entre la parte baja de la dirección y el dato que se presentará a
continuación.
· Patilla 31 (WR): Indica que el dato presente en el bus de datos debe quedar escrito en la memoria
o en la E/S direccionada. Nivel bajo activo.
· Patilla 32 (RD): Indica que el dato presente en el bus de datos debe ser leído de la memoria o de
una E/S direccionada. Nivel bajo activo.
· Patilla 33 (S1): Salida que codifica el estado del bus de datos junto con S0.
· Patilla 34 (IO/M): Si es un 1 indica que el microprocesador selecciona una E/S en el caso de una
instrucción IN u OUT. Si es 0 selecciona la memoria.
14
· Patilla 35 (READY): Es una entrada que indica que la memoria o E/S seleccionada por un ciclo de
escritura o lectura está dispuesta a recibir o proveer el dato. Si es 0 el
8085 espera a su puesta a 1 antes de seguir su ciclo de lectura o escritura.
· Patilla 36 (RESET IN): Si es activada con un 0, se reinicializa el contador de programa a 0000H,
así como la autorización de interrupción.
· Patilla 37 (CLK OUT): Señal de salida de reloj del 8085. También llamada CLK.
· Patilla 38 (HLDA): Si es un 1 indica que el microprocesador responde a la demanda de espera
(HOLD) y que el bus y líneas de control están en estado de alta impedancia.
· Patilla 39 (HOLD): Indica que algún otro usuario está solicitando el acceso el bus de direcciones y
al bus de datos. El microprocesador termina la ejecución del ciclo en curso, después posiciona en
estado de alta impedancia al bus AD0-AD15 y las líneas de control RD, WR e IO/M, señalando este
paso sobre la línea HLDA.
· Patilla 40 (Vcc): Tensión de alimentación de +5V.
15
DESCRIPCION FUNCIONAL DEL MICROPROCESADOR 8085 DE INTEL:
Del mismo modo que hasta ahora hemos descrito con detalle todos los terminales del
microprocesador, lo cual nos permitirá abordar en cierta medida el diseño de un sistema
electrónico, ahora llevaremos a cabo un estudio básico del funcionamiento interno del
microprocesador, que nos permitirá posteriormente iniciar trabajos de programación.
Para realizar esta tarea nos apoyaremos en el diagrama de bloques representado en la FIG.15A,
en la que podemos apreciar los siguientes elementos característicos:
· El conjunto decodificador/secuenciador que lleva incluido el generador de reloj y el sistema
controlador.
· El conjunto unidad aritmética/lógica y sus registros asociados: acumulador de 8 bits, registro
temporal y registro de los indicadores o señalizadores (flags).
· El conjunto de los registros de trabajo (B, C, D, E, H y L) de 8 bits, el Contador de
Programa (PC)y Puntero de Pila (SP), ambos de 16 bits.
· El control de las interrupciones que comanda un grupo de 5 señales de interrupción
y genera una señal de salida que nos marca una interrupción aceptada.
· El control de las entradas / salidas serie.
· Los buffers que generan los buses de direcciones y datos.
Todos y cada uno de estos bloques están controlados por la microprogramación interna que
interpreta y ejecuta las instrucciones recibidas del programa que se esté ejecutando. Y de acuerdo
a esas directrices actuará sobre los datos e informaciones y los moverá a través de registros y
bloques para obtener el resultado deseado. Debe decirse que estos procesos de trabajo interno del
microprocesador no son accesibles al usuario, es decir, el programador puede indicar la instrucción
a ejecutar, pero no puede decirle al microprocesador cómo ha de ejecutarla.
16
DIAGRAMA DE BLOQUES DEL 8085 DE INTEL:
17
Por tanto desde el punto de vista de la persona que deba realizar los programas, es fundamental
conocer que el microprocesador dispone de:
· Seis registros (B,C,D,E,H y L) que pueden ser usados para almacenar datos temporalmente de 8
bits, o bien pueden emplearse por pares (BC,DE y HL) para retener informaciones de hasta 16 bits.
· El “Puntero de Pila” o Stack Pointer (SP) que es un registro de 16 bits y se usa para direccionar
por programa la parte de la pila en la que se debe guardar una determinada dirección o en la que
se debe salvar un determinado dato. Normalmente debe apuntar a la cima de la pila.
· El “Contador de Programa” o Program Counter (PC). Al poner en funcionamiento el sistema
arranca de la posición inicial 0000H y se va incrementando secuencialmente a la velocidad
marcada por el cristal de cuarzo del sistema. La secuencia del contador de programa puede ser
alterada mediante determinadas instrucciones del programa.
· El Acumulador, que es un registro de 8 bits, con el que el microprocesador realiza las operaciones
lógicas, aritméticas, etc. según el desarrollo del programa.
· Registro de Estados (FLAGS), tiene 8 bits y nos indica en cada momento cual es el estado del
acumulador después de haber realizado la última operación. El formato de este registro es como
sigue:
- CARRY.- En este bit del registro de estados, aparecerá un 1 lógico cuando la última operación
realizada con el acumulador, desborde el contenido del mismo.
- PARITY.- En este bit aparecerá un 1 lógico cuando el número de "unos" que hay en el
acumulador sea par. Si es impar aparecerá un 0 lógico.
- AUX CARRY.- Aquí aparece un 1 lógico cuando hay acarreo en el cuarto bit del acumulador. Este
bit se usa generalmente para ejecutar instrucciones de "ajuste decimal".
- ZERO.- En este bit aparece un 1 lógico cuando el contenido del acumulador es 0000 0000. En
caso contrario aparece un 0 lógico.
- SIGN.- Este es el bit del signo que nos indica, cuándo el dato que hay en el acumulador es un
número positivo o negativo.
· Registro de máscara de interrupciones (I). Tiene dos aspectos diferentes según sea leído
(mediante una instrucción RIM) o escrito (mediante una instrucción SIM).
18
Cuando procedemos a una lectura del registro de máscara de interrupciones, mediante la
instrucción RIM, se obtiene el siguiente formato SID I7.5 I6.5 I5.5 IE M7.5 M6.5 M5.5 Siendo el bit
SID el dato de entrada serie al microprocesador, los bits I7.5, I6.5 e I5.5 nos indican las
interrupciones pendientes de servicio, el bit IE es el flag de interrupciones habilitadas y finalmente
los bits M7.5, M6.5 y M5.5 nos permiten poner los enmascaramientos de las interrupciones. (Ver
instrucción RIM del 8085). Cuando se procede a escribir en el registro de máscara de
interrupciones, mediante la instrucción SIM, el formato a considerar es ahora
SOD SOE X R7.5 MSE M7.5 M6.5 M5.5 Siendo en este caso el bit SOD el dato de salida, el bit
SOE la autorización de la salida serie, el bit R7.5 nos da la posibilidad de realizar un reset en la
interrupción 7.5, el bit MSE autoriza el enmascaramiento de las interrupciones y finalmente los bits
M7.5, M6.5 y M5.5 ponen las máscaras de cada interrupción respectivamente. (Ver instrucción SIM
del 8085).
· Dos Bloques Buffers que genera el microprocesador, en los que puede apreciarse cómo la parte
alta del bus de direcciones se constituye de forma independiente, mientras que la parte baja es
compartida con el bus de datos. Así pues es necesario un multiplexado adecuado, mediante el cual
los periféricos asociados sepan cuándo se trata de la parte baja de una dirección o de un dato. La
señal que identifica este proceso de multiplexado es ALE.
· Un bloque que genera el bus de control del sistema.
· Un bloque que permite cinco tipos diferentes de interrupciones.
· El conjunto de control de Entrada/Salida serie.
INSTRUCCIONES DEL MICROPROCESADOR 8085:
Básicamente se pueden tener los siguientes tipos de instrucciones:
- MOV r1, r2: Mueve el contenido del registro r2 a r1 (ej.: MOV A, B, MOV L, C).
- MOV r, M; MOV M, r: Mueve el contenido de un registro a la posición de memoria M definida por la pareja de registros HL, y viceversa (ej.: MOV C,
M, MOV M, A).
- MVI r, byte: Carga un registro con un valor numérico de un byte de longitud (ej.: MVI D, 03H).
- LXI rp, dbyte: Carga una pareja de registros con un valor de 2 bytes de
longitud (ej.: LXI H, 0010H, LXI B, 25AFH).
- LDA addr: Carga al acumulador con el contenido de la dirección indicada (ej.: LDA FF00H).
- STA addr: Guarda el contenido del acumulador en la dirección indicada
(ej.: STA FF00H).
19
20
• Instrucciones lógicas y aritméticas:
La mayoría de instrucciones de este tipo afectan las banderas del registro de estado (Z,
S, AC, P, CY). El resultado de toda operación que incluya al acumulador, es almacenado en el
mismo acumulador. Básicamente se pueden tener los siguientes tipos de instrucciones:
- ADD r: Suma el contenido del registro especificado con el contenido del acumulador (ej.: ADD C,
ADD L).
- ADD M: Suma el contenido almacenado en la dirección de memoria M especificada por los
registros HL, con el contenido del acumulador (ej.:
ADD M).
- ADI byte: Suma al acumulador el valor numérico especificado (ej.: ADI 05H).
- ADC r; ADC M; ACI byte: Realizan lo mismo que ADD r, ADD M y ADI byte, excepto que si se
produce un acarreo, este también es sumado.
- SUB r; SUB M; SUI byte; SBB r; SBB M; SBI byte: Restan un valor del acumulador (ej.: SUB B,
SUB M, SUI 05H).
- INR r: Incrementa en una unidad al registros especificado (ej.: INR B).
- INR M: Incrementa en una unidad al contenido de la dirección de memoria M (ej.: INR M).
- DCR r; DCR M: Realizan las operaciones inversas a INR r y INR M
- ANA r: Realiza la operación lógica AND entre el acumulador y el registro r (ej.: ANA C, ANA L).
- ANA M: Realiza la operación lógica AND entre el acumulador y el contenido de la dirección de
memoria M (ej.: ANA M).
- ANI byte: Realiza la operación lógica AND entre el acumulador y el valor numérico especificado
(ej.: ANI 05H).
- ORA r; ORA M; ORI byte: Realizan la operación lógica OR.
- XRA r; XRA M; XRI byte: Realizan la operación lógica XOR.
- CMP r; CMP M; CPI byte: Realizan una comparación con el acumulador.
Si son iguales, la bandera Z se pone en 1 y si el acumulador es el menor,
CY se pone en 1.
- RLC: Rota el acumulador una posición a la izquierda (en el sentido del bit 0 al bit 7)
- RRC: Rota el acumulador una posición a la derecha (en el sentido del bit 7 al bit 0)
- CMA: Complementa el valor del acumulador, es decir, realiza una operación lógica NOT con cada
bit del acumulador.
21
• Instrucciones de control de bifurcación o cambio de secuencia del programa:
Estas instrucciones alteran el contenido del contador de Programa y pueden o no depender de una
condición específica. Básicamente se pueden tener los siguientes tipos de instrucciones:
- JMP addr: Carga el contador de programa con la dirección especificada, es decir, “salta” a la
dirección especificada para continuar la ejecución del programa desde esa dirección (ej.: JMP
0010H, JMP SIGUIENTE).
- JNZ addr: Salta si la bandera Z es cero.
- JZ addr: Salta si la bandera Z es uno.
- JNC addr: Salta si la bandera CY es cero.
- JC addr: Salta si la bandera CY es uno.
- JP addr: Salta si la bandera S es cero.
- JM addr: Salta si la bandera S es uno.
- CALL addr: Opera de la misma manera que JMP, sin embargo en este caso guarda la dirección
actual más uno, en la pila. Debido a esto su uso es exclusivo para llamadas subrutinas (ej.: CALL
1010H, CALL LUCES)
- CNZ addr; CZ addr; CNC addr; CC addr; CP addr; CM addr: Operan como CALL pero basadas en
una condición específica.
- RET: Trabaja en conjunto con CALL, su función es recuperar la última dirección guardada en la
pila, es decir, restablece el contador de programa.
- RNZ; RZ; RNC; RC; RP; RM: Operan como RET pero basadas en una condición específica.
• Instrucciones de control, entrada / salida y de manejo de pila:
Básicamente se pueden tener los siguientes tipos de instrucciones:
- PUSH rp: Mueve a la pila el par de registros especificado, se utiliza para respaldar los registros en
el caso de que vayan a ser utilizados por una subrutina (ej.: PUSH B, PUSH H).
- PUSH PSW: A diferencia de PUSH rp, en este caso respalda al acumulador junto al registro de
estado.
- POP rp; POP PSW: Realizan la función contraria a PUSH, es decir, recuperan los valores
almacenados en la pila.
22
- IN port: Carga en el acumulador el dato proveniente de un periférico específico cuya dirección es
PORT (ej.: IN 00H, IN PORTA).
- OUT port: Envía el dato almacenado en el acumulador a un periférico específico cuya dirección es
PORT (ej.: OUT 01H, IN PORTB).
- HLT: Detiene al contador de programa, por lo que el procesador se dice esta “congelado”, dicho
estado se mantiene hasta que se le dé un reset al procesador.
- NOP: No realiza ninguna operación, por lo que se dice que es un “código muerto”. Se utiliza para
perder tiempo de ejecución del procesador, de esta manera se retarda el funcionamiento del
procesador sin alterar ningún registro. Es común encontrarlo en demoras de tiempo.
EJEMPLOS DE PROGRAMACION:
Para finalizar, se presentan algunos programas básicos que demuestran la aplicación de varias de
las instrucciones antes analizadas así como también detalles de la programación en lenguaje
ensamblador.
• Ejemplo 1:
;El siguiente programa realiza la siguiente operación: SUM = NUM1 + NUM2
;si el resultado es igual a un número LIM,
;realiza la siguiente operación RES = SUM - NUM3.
;************************************************************************
;************************************************************************
;Define constantes utilizadas por el programa
NUM1 .EQU 05H ;Número 1
NUM2 .EQU 02H ;Número 2
NUM3 .EQU 03H ;Número 3
LIM .EQU 07H ;Límite de Comparación
;************************************************************************
;************************************************************************
;El siguiente código representa al programa principal
.ORG 0000H ;Inicia en la posición de memoria 0000H
MVI A, NUM1 ;Carga número 1 en el Registro A
MVI B, NUM2 ;Carga número 2 en el Registro B
MVI C, NUM3 ;Carga número 3 en el Registro c
MVI D, LIM ;Carga límite en el Registro D
ADD B ;Realiza NUM1 + NUM2
CMP D ;Compara el resultado de la suma
JZ RESTAR ;Si es igual al límite entonces salta a RESTAR
HLT ;Caso contrario se detiene
RESTAR:
SUB C ;Realiza SUM - NUM3
HLT ;Detiene al procesador
;************************************************************************
;************************************************************************
.END
23
• Ejemplo 2:
;El siguiente programa llama a dos rutinas de tiempo de un lazo y de doble lazo,
;mientras rota el dato en el registro A.
;El tiempo que demore la rutina depende del cristal utilizado.
;Para un cristal de 2MHz, la primera rutina se demora 1 mseg y la segunda 3mseg
;***************************************************************************************
;***************************************************************************************
;Define constantes utilizadas por el programa
TIEMPO1 .EQU 03H ;Número de veces que se repie el lazo 1
TIEMPO2 .EQU 02H ;Número de veces que se repie el lazo 2
;***************************************************************************************
;***************************************************************************************
;El siguiente código representa al programa principal
.ORG 0000H ;Inicia en la posición de memoria 0000H
MVI A, 01H ;Carga registro de prueba
REPITE:
CALL DEMORA1 ;Llama rutina 1
RLC ;Rota el acumulador 1 bit a la izquierda
CALL DEMORA2 ;Llama rutina 2
RLC ;Rota el acumulador 1 bit a la izquierda
JMP REPITE ;Salta a etiqueta REPITE
;***************************************************************************************
;***************************************************************************************
;El siguiente código representa una demora de tiempo de un lazo
.ORG 0040H ;Inicia en la posición de memoria 0040H
DEMORA1:
MVI B, TIEMPO1 ;Carga contador del lazo 1
LAZO1: DCR B ;Decrementa por uno le registro B
NOP ;No hace nada
JNZ LAZO1 ;Salta si el resultado no es cero
RET ;Regresa al programa principal
;***************************************************************************************
;***************************************************************************************
;El siguiente código representa una demora de tiempo de dos lazos
.ORG 0060H ;Inicia en la posición de memoria 0060H
DEMORA2:
MVI B, TIEMPO1 ;Carga contador del lazo 1
LAZO3: MVI C, TIEMPO2 ;Carga contador del lazo 2
LAZO2: DCR C ;Decrementa por uno le registro C
NOP ;No hace nada
JNZ LAZO2 ;Salta si el resultado no es cero
DCR B ;Decrementa por uno le registro B
JNZ LAZO3 ;Salta si el resultado no es cero
RET ;Regresa al programa principal
;***************************************************************************************
;***************************************************************************************
.END
24
• Ejemplo 3:
;El siguiente programa realiza un sencillo juego de luces utilizando al 8155
;para tal motivo configura el puerto A como salida de datos.
;***************************************************************************************
;***************************************************************************************
;Define constantes utilizadas por el programa
REG_CONF .EQU 00H ;Dirección del registro de configuración del 8155
PORTA .EQU 01H ;Dirección del PORTA del 8155
TIEMPO .EQU 01H ;Establece el tiempo de la demora
;***************************************************************************************
;***************************************************************************************
;El siguiente código representa al programa principal
.ORG 0000H ;Inicia en la posición de memoria 0000H
MVI A, 0FH ;Configura PORTA como salidas
OUT REG_CONF
MVI A, 01H ;Envía 00000001b al puerto A
ROTAR: OUT PORTA
CALL DEMORA ;Espera cierto tiempo
RLC ;Rota el acumulador 1 bit a la izquierda
JMP ROTAR ;Salta a la etiqueta ROTAR
;***************************************************************************************
;***************************************************************************************
;El siguiente código representa una demora de tiempo la cual nos permite observar más
;detenidamente la secuencia de luces.
.ORG 0040H ;Inicia en la posición de memoria 0040H
DEMORA: MVI B, TIEMPO ;Carga contador del lazo 1
LAZO2: MVI C, 0FFH ;Carga contador del lazo 2
LAZO1: DCR C ;Decrementa por uno le registro C
JNZ LAZO1 ;Salta si el resultado no es cero
DCR B ;Decrementa por uno le registro B
JNZ LAZO2 ;Salta si el resultado no es cero
RET ;Regresa al programa principal
;***************************************************************************************
;********************************* ******************************************************
.END
25
CONCLUSION:
En el desarrollo tecnológico, en el crecimiento de la evolución necesaria de la
automatización en la vida cotidiana, nos encontramos con estos pequeños
físicamente, pero muy grandes en funcionalidad y gigantescos en manejo de
información, los Microprocesadores, son una de las más grandes invenciones
creadas por el hombre, en esa miniaturización siempre de lo accesible para el
hombre, nace como resultado este dispositivo con una gran capacidad llamada en si
también como cerebro o el mas cercano al cerebro humano, manejando lógica y
aritmética podemos controlar y desarrollar muchas y sin fin de cosas, todo gracias a
este pequeño artefacto. Y en la investigación específicamente del Microprocesador
8085, se denota el manejo complejo en instrucciones pero sin duda alguna muy
sencillo en comprensión, todas su funcionalidad dada y creada para el desarrollo y la
rapidez de procesamiento de información, todo esto ha venido a mejorar en mucho la
vida del hombre en la faz del tierra, y sin duda alguna que seguirá siendo una
innovación completa para el mismo hombre.
26
RECOMENDACIONES:
Se recomienda adentrarse en la lectura y análisis del funcionamiento de los distintos
Microprocesadores existentes, para que según el conocimiento adquirido y el análisis el
programador o electrónico constate las miles de aplicaciones en la cual puede o están
sujetados los Microprocesadores.
Cada Microcontrolador tiene sus referencias gracias al creador o empresa realizadora de
este dispositivo, se recomienda indagar e investigar acerca de algún microprocesador
antes de su adquisición.
Para mejorar y siempre obtener respuestas, antes de la creación de un proyecto o
programación, lo favorable es simularlo mediante software, para corregir posibles errores
no visibles.
En el paso de programación o creación de las instrucciones, se debe tener en cuenta que
de acuerdo al lenguaje procedido (Assembler, C, Basic, Pascal…etc) así será el resultado
obtenido, para dar el mayor rendimiento del Microprocesador se recomienda siempre
.asm ya que este interactúa directamente con el Microprocesador obteniendo mayor
eficiencia y velocidad.
27
BIBLIOGRAFIA:
Revista:
MICROPROCESADORES – CURSO PRACTICO REVISTA N° 7 2010
Páginas WEB:
http://www.alpertron.com.ar/8085.HTM
http://www.ehowenespanol.com/informacion-microprocesador-intel-8085-sobre_138668/
http://proton.ucting.udg.mx/temas/microprocesadores/mcs/caracteristicas_generales_de_808.htm