59
TRANSFERENCIA DE DATOS AL EXTERIOR DESCRIPCIÓN FÍSICA DEL PPI 8255 DESCRIPCIÓN FUNCIONAL DEL PPI 8255 MODOS DE DIRECCIONAMIENTO INTERCONEXIÓN DEL PPI 8255 CON EL 8085 APLICACIONES PRÁCTICAS CON EL PPI 8255 EJERCICIOS

Microprocesador 8085 (7) INTEL

Embed Size (px)

DESCRIPTION

Comunicación del 8085 con el exterior mediante el PPI 8255

Citation preview

Page 1: Microprocesador 8085 (7)  INTEL

TRANSFERENCIA DE DATOS AL EXTERIOR DESCRIPCIÓN FÍSICA DEL PPI 8255

DESCRIPCIÓN FUNCIONAL DEL PPI 8255 MODOS DE DIRECCIONAMIENTO

INTERCONEXIÓN DEL PPI 8255 CON EL 8085 APLICACIONES PRÁCTICAS CON EL PPI 8255

EJERCICIOS

Page 2: Microprocesador 8085 (7)  INTEL

microprocesadores microprocesador electronica instrucciones set direcciones datos bus 8085 intel foto macro olympus zuiko potencia direccionamiento decodificador salto bucle logicas aritmeticas condicionales programa ensamblador 8255 PPI Transmisión de datos al exterior Ejemplos de programacion

http://micros.myblog.es/ http://issuu.com/microprocesadores/ © 2010 Celestino Benítez Vázquez Todos los contenidos e imágenes publicados en la revista “microprocesadores” tienen los derechos reservados quedando prohibida la reproducción total o parcial de esta publicación sin el consentimiento expreso de su autor.

Page 3: Microprocesador 8085 (7)  INTEL
Page 4: Microprocesador 8085 (7)  INTEL
Page 5: Microprocesador 8085 (7)  INTEL

7. TRANSFERENCIA DE DATOS AL EXTERIOR.

Además de la circuitería estudiada hasta el momento, está claro que nuestro sistema quedaría incompleto si no dispusiéramos de los componentes adecuados que nos permitieran comunicarnos con el exterior de la CPU. A lo largo de este tema y del tema siguiente mostraremos el empleo de dos componentes básicos para realizar este tipo de operaciones.

La transmisión de datos en paralelo y la transmisión de datos en serie son los dos sistemas

básicos de transferencia de datos de que disponemos. La primera consiste adquirir (leer) o suministrar (escribir) grupos de información formados por palabras normalmente de 8 bits. Cada vez que se lee o escribe un dato se reciben o envían 8 bits simultáneamente. La segunda forma de transmisión consiste en realizar el intercambio de información de modo que cada grupo de 8 bits se transmita por una única línea unos a continuación de otros. Para realizar este proceso necesitaremos además efectuar una sincronización entre el emisor y el receptor utilizando líneas de control.

La casa INTEL ha diseñado una serie de dispositivos periféricos especializados en realizar este

tipo de operaciones, para ser acoplados directamente al bus del microprocesador 8085. Cada uno de ellos posee unas características determinadas y especiales que los diferencian entre sí y los hacen más o menos aptos para aplicaciones concretas.

En este tema realizaremos un estudio básico sobre el PPI 8255, diseñado para trabajar

directamente con el microprocesador 8085, que posee tres puertos de entrada/salida de 8 bits cada uno. Para trabajar con este dispositivo emplearemos el sistema elemental mostrado en el diagrama de

bloques de la FIG.7A , en el que podemos observar como la fuente de alimentación suministra las tensiones precisas para todos los elementos del sistema.

El periférico programable PPI 8255 será gobernado por nuestro sistema básico (fundamentado en el 8085) mediante un conjunto de líneas bidireccionales y las cargas finales serán controladas mediante los puertos de entrada/salida del PPI 8255. En los puntos que siguen se realizará: • Una descripción física detallada de todas las patillas o pines del PPI 8255. • Una descripción de su funcionamiento interno, indicando también los modos de programación. • La interconexión física del PPI8255 a nuestro sistema básico. • Un conjunto de ejercicios prácticos que nos permitirán programar este periférico y comprobar su

funcionamiento, empleando los tres puertos de entrada/salida.

SISTEMA BASICO DEL 8085

FUENTE DE ALIMENTACION

PPI 8255

C1

C2

C3

FIG.7A

Page 6: Microprocesador 8085 (7)  INTEL

7.1 DESCRIPCIÓN FÍSICA DEL PPI 8255.

El componente 8255A de INTEL es un Periférico Programable de Interface (PPI) diseñado para aplicaciones de carácter general como elemento de Entrada/Salida, que puede trabajar con los microprocesadores Intel y más específicamente con el microprocesador 8085.

Este elemento se presenta en un encapsulado de 40 patillas, como puede apreciarse en la

FIG.71A, aunque también hay otras disposiciones que nos muestran una distribución de patillas distinta, siendo la función de cada uno de ellas evidentemente la misma.

Como podemos ver, emplea una tensión de alimentación única de +5V (filtrada y estabilizada).

Las señales de sus entradas y salidas son totalmente compatibles con niveles de tensión TTL. Dispone de un total de 24 terminales (patillas) de entrada/salida que pueden programarse en dos grupos de 12 terminales cada uno y según tres modos diferentes de operación (modo 0, modo 1 y modo 2).

En el modo 0 permite desarrollar simples operaciones de transferencia de datos con el exterior,

es decir, operaciones de entrada/salida en bloques de 8 bits, pudiendo programar los 24 terminales como tres puertos independientes de E/S. En el modo 1 se proporcionan los medios para transferir datos de entrada/salida desde o hacia un puerto dado en combinación con determinadas palabras de control y diálogo. En el modo 2 permite la comunicación con algún periférico mediante la constitución de un bus bidireccional y determinadas señales de control.

La función de cada una de las patillas o terminales es la siguiente:

• Patillas PA0 a PA7: Terminales correspondientes a 8 líneas de entrada/salida del puerto A. Constituyen un byte de datos (octeto) de entrada/salida, siendo PA0 el bit de más bajo orden y PA7 el bit de más alto orden.

• Patillas PB0 a PB7: Terminales correspondientes a 8 líneas de entrada/salida del puerto B. Constituyen un byte de datos (octeto) de entrada/salida, siendo PB0 el bit de más bajo orden y PB7 el bit de más alto orden.

• Patillas PC0 a PC7: Terminales correspondientes a 8 líneas de entrada/salida del puerto C. Constituyen un byte de datos (octeto) de entrada/salida, siendo PC0 el bit de más bajo orden y PC7 el bit de más alto orden.

• Patilla GND: Corresponde al terminal de masa o punto de referencia de alimentación. • Patilla Vcc: Corresponde al terminal de alimentación de +5V filtrados y estabilizados. En esta patilla

es conveniente situar un condensador de 100 nF para eliminar posibles señales parásitas o interferencias.

• Patillas D0 a D7: Son las ocho líneas correspondientes al bus de datos bidireccional del 8255, es decir un conjunto de líneas por las que circula información en ambas direcciones, desde el microprocesador hacia el 8255 y desde éste hacia el microprocesador.

• Patilla RD: Terminal correspondiente a la señal de lectura. Es activa con un nivel lógico BAJO. Es

1 2 3

3

84

37

5

36

6

35

7

34

8

33

9

32

10

31

11

3

0

12

2

9

13

2

8

14

2

7

15

2

6

16

2

5

17

2

4

18

2

3

19

2

2

20

2

13940

PPI 8255

PA3

P

A4

PA2

P

A5

PA1

P

A6

PA0

P

A7

RD

WR

CS

RES

ET

GN

D

D0

A1

D1

A0

D2

PC7

D3

PC6

D

4

PC5

D

5

PC4

D6

PC0

D7

PC1

V

cc

PC2

PB7

PC3

PB6

PB0

P

B5

PB1

P

B4

PB2

P

B3

FIG. 71A

Page 7: Microprocesador 8085 (7)  INTEL

decir, cuando deseemos efectuar una operación de lectura, tendremos que colocar un 0 lógico en esta línea, para luego cargar información del 8255 en el acumulador del microprocesador.

• Patilla WR: Terminal correspondiente a la señal de escritura. Es activa con un nivel lógico BAJO. De esta forma, cuando queramos escribir un dato en el 8255, es decir, cuando deseemos pasar un dato del acumulador del microprocesador hacia el 8255, no tendremos más que colocar un 0 lógico en este terminal.

• Patillas A0 y A1: Son los terminales que nos permiten seleccionar o indicar el puerto con el que deseamos trabajar o bien apuntar el registro de estado del 8255. Estos dos terminales son fundamentales para poder sacar o introducir la información de forma correcta hacia o desde el puerto deseado.

• Patilla RESET: Es el terminal de inicialización o puesta a cero del 8255. Tiene un nivel activo ALTO.

• Patilla CS: Es el terminal de selección chip o selección de componente. Tiene un nivel activo BAJO.

7.2 DESCRIPCIÓN FUNCIONAL DEL PPI 8255

Este periférico programable de interface (PPI), no precisa de ninguna lógica externa para ser acoplado a otros componentes o estructuras periféricas. En la FIG.72A, puede verse un esquema de los diferentes “grupos funcionales” que constituyen este microcircuito.

En dicha figura pueden observarse:

• Buffer del Bus de Datos: Terminales D0 a D7. Es un bus bidireccional tri-estado y se emplea para

acoplar o conectar el 8255A al bus de datos del sistema. Los datos son transmitidos o recibidos a través de este buffer por la ejecución de instrucciones de la CPU, es decir, del microprocesador 8085. Las palabras de Control y la información de estado también son transmitidas a través del buffer del bus de datos.

• Grupo Lectura/Escritura y Control Lógico. La función básica de este bloque consiste en manejar

todas las transferencias internas y externas de grupos de datos, control o palabras de estado. Las funciones de cada una de las señales de este grupo son:

GRUPOCONTROLA

GRUPOPUERTAA (8)

GRUPOPUERTAC (4)

GRUPOPUERTAC (4)

GRUPOPUERTAB (8)

E/SPA0PA7

E/SPC4PC7

E/SPC0PC3

E/SPB0PB7

GRUPOCONTROLB

BUFFERBUS DEDATOS BUS DATOS

INTERNO

CONTROLLOGICOLECTURAESCRITURA

CS

RESET

A1

A0

WR

RD

BUSDEDATOS

MASA

+5V

FIG. 72A

Page 8: Microprocesador 8085 (7)  INTEL

- CS: Selección del microcircuito. Permite (con un 0 lógico) o inhibe (con un 1 lógico) la

comunicación entre el 8255A y el microprocesador 8085. - RD: Lectura. Cuando se sitúa un 0 lógico en este terminal, permitimos al microprocesador 8085,

leer algún dato del 8255A, es decir, cargamos en el acumulador del 8085, algún dato del 8255A.

- WR: Escritura. Al colocar un 0 lógico en este terminal, permitimos al microprocesador 8085, escribir algún dato o palabra de control, en el 8255A.

- RESET: Puesta a cero. Colocando un 1 lógico (nivel ALTO) en este terminal, borramos todos

los registros internos del 8255A (palabra de control, y puertos A,B y C). Todas los puertos se ponen en modo entrada.

A1 A0 RD WR CS OPERACIÓN QUE REALIZA 0 0 0 1 0 Lee puerto A y carga en el bus de datos 0 1 0 1 0 Lee puerto B y carga en el bus de datos 1 0 0 1 0 Lee puerto C y carga en el bus de datos 0 0 1 0 0 Escribe bus datos en la puerta A 0 1 1 0 0 Escribe bus datos en la puerta B 1 0 1 0 0 Escribe bus datos en la puerta C 1 1 1 0 0 Escribe bus datos en palabra de control X X X X 1 Bus de datos tri-estado 1 1 0 1 0 Condición ilegal X X 1 1 0 Bus de datos tri-estado

- A0 y A1: Selecciona los registros de comunicación de que dispone el 8255A. Estas señales de

entrada, en unión con las señales RD y WR, seleccionan uno de los tres puertos disponibles en el 8255A o el registro de la palabra de control (también llamado registro de estado). Normalmente se conectan a A0 y A1 del bus de direcciones del microprocesador (aunque pueden conectarse a cualesquiera otras direcciones del microprocesador que deseemos). En el siguiente cuadro se muestran las operaciones básicas que realiza este componente según sea el estado de las señales de control. Como podemos apreciar, las operaciones de lectura se realizan todas con la misma combinación para las señales RD, WR y CS, siendo la combinación presente en las señales A0 y A1, la que selecciona el puerto a ser leido, es decir, la procedencia de la información. Algo similar sucede en las operaciones de escritura, en las que se mantiene la misma combinación para las señales RD, WR y CS siendo A0 y A1 las que señalan el destino de la información procedente del acumulador del microprocesador 8085. Finalmente se presentan tres estados en los que o bien se produce una condición ilegal en la que se intenta leer la palabra de control, o bien el componente no está seleccionado, permaneciendo en estado de alta impedancia (componente inactivo).

• Grupo de comunicación entrada/salida. El 8255A contiene tres puertos de 8 bits (puertos A,B y C) que pueden ser programados de diversas formas y con distintas características mediante el software adecuado. El puerto A dispone de un buffer de 8 bits para salida de datos y de una báscula de 8 bits para la entrada. El puerto B es similar al anterior en todas sus características. El puerto C también posee un buffer de salida de datos y una báscula de entrada, aunque en este caso dicho puerto puede dividirse en dos partes de 4 bits según el modo de trabajo o control, conteniendo cada una de ellas una báscula de 4 bits y puede utilizarse para las salidas de las señales de control y entrada de las señales de estado en combinación con los puertos A y B.

Cuando en la entrada Reset se coloca un 1 lógico todos los puertos del 8255A se colocan en

modo entrada. Durante la ejecución de cualquier programa, podemos modificar el modo de trabajo mediante una simple instrucción de salida o de carga. Esto proporciona gran facilidad para construir rutinas de servicio y mantenimiento sencillas.

Page 9: Microprocesador 8085 (7)  INTEL

Los modos de trabajo de los puertos A y B pueden ser definidos por separado, mientras que el

puerto C esta dividido en dos partes según se requiera por las definiciones de los puertos A y B. Todos los registros de salida incluidos los flip-flops de estado serán borrados al cambiar de modo de trabajo.

Cualquiera de las patillas del puerto C puede ser puesta a 1 o a 0 utilizando una simple

instrucción OUTput. Esta característica reduce el software requerido en aplicaciones de control. Cuando el 8255A se programa en modo 1 o en modo 2, las señales de control pueden ser empleadas como entradas de interrupción a la CPU. Las señales de interrupción generadas en el puerto C pueden ser inhibidas o habilitadas colocando a 1 o a 0 el flip-flop denominado INTE, empleando para ello el bit función set/reset de la puerta C.

7.3 MODOS DE DIRECCIONAMIENTO.

Como se ha visto hasta el momento, podemos llevar a cabo una programación del 8255A, mediante el software adecuado, según tres modos distintos de trabajo que nos proporcionarán gran potencialidad a este PPI. Estos modos de trabajo son: a.- Modo 0: Este modo de funcionamiento proporciona un método de entrada/salida básico por cada uno de los tres puertos. Los datos son simplemente escritos en cada puerto, es decir, sacamos los datos procedentes del microprocesador, por el puerto que deseemos; o bien pueden ser leídos, es decir, llevamos hacia el acumulador del microprocesador, el dato presente en un determinado puerto. CONFIGURACIONES POSIBLES EN MODO 0 D7 D6 D5 D4 D3 D2 D1 D0 PORT A PORT C(ALTA) PORT B PORT C(BAJA) 1 0 0 0 0 0 0 0 salida salida salida salida 1 0 0 0 0 0 0 1 salida salida salida entrada 1 0 0 0 0 0 1 0 salida salida entrada salida 1 0 0 0 0 0 1 1 salida salida entrada entrada 1 0 0 0 1 0 0 0 salida entrada salida salida 1 0 0 1 0 0 0 0 entrada salida salida salida 1 0 0 0 1 0 0 1 salida entrada salida entrada 1 0 0 1 0 0 0 1 entrada salida salida entrada 1 0 0 0 1 0 1 0 salida entrada entrada salida 1 0 0 1 0 0 1 0 entrada salida entrada salida 1 0 0 0 1 0 1 1 salida entrada entrada entrada 1 0 0 1 0 0 1 1 entrada salida entrada entrada 1 0 0 1 1 0 0 0 entrada entrada salida salida 1 0 0 1 1 0 1 0 entrada entrada entrada salida 1 0 0 1 1 0 0 1 entrada entrada salida entrada 1 0 0 1 1 0 1 1 entrada entrada entrada entrada

Las principales características de este modo son:

1. Se pueden configurar dos puertos de 8 bits y dos de 4 bits. 2. Cualquier puerto puede ser entrada o salida. 3. Las salidas contienen básculas. 4. Las entradas son directas, no contienen básculas. 5. Existen 16 posibles configuraciones de entrada/salida que se muestran en la tabla adjunta.

Page 10: Microprocesador 8085 (7)  INTEL

b.- Modo 1:

Esta configuración funcional nos permite realizar transferencias entrada/salida hacia o desde determinado puerto en unión a las palabras de control y diálogo. Los puertos A y B utilizan las líneas del puerto C para generar o aceptar las señales de diálogo. Tanto el puerto A como el puerto B pueden definirse individualmente en el modo 1 como entradas o como salidas y pueden soportar gran variedad de aplicaciones.

Este modo de funcionamiento se caracteriza fundamentalmente por: 1. Existir dos "grupos" de trabajo.(Grupo A y grupo B). 2. Cada grupo posee 8 bits de datos y un puerto adicional de 4 bits de control de datos. 3. Los puertos de 8 bits (A y B) pueden ser ambos de entrada o salida mediante básculas en los

dos casos. 4. El puerto de 4 bits se emplea para control y estado de los puertos de 8 bits.

c.- Modo 2:

Esta configuración funcional provee de un medio de comunicación con componentes o estructuras periféricas en un bus simple de 8 bits para transmitir y recibir datos (bus bidireccional). También contiene la generación de interrupciones y funciones de actuación/inhibición.

Las características fundamentales de este modo de funcionamiento son: 1. Solo se emplea el grupo A. 2. El puerto A es el bus bidireccional de 8 bits y el puerto C emplea 5 bits de control. 3. Las entradas y salidas emplean básculas.

7.4 INTERCONEXIÓN DEL PPI 8255 CON EL 8085.

Como sabemos, el PPI 8255 es un componente diseñado específicamente para trabajar con microprocesadores INTEL. En este caso, para incorporarlo a la tarjeta de nuestro sistema, tendremos que realizar las siguientes operaciones:

• Conectar el 8255 a la misma tensión (+5V) que el microprocesador 8085 (evidentemente, el terminal

de masa también debe ser el mismo). En el terminal de Vcc es conveniente situar un condensador de 100 nF, al objeto de eliminar posibles parásitos o interferencias.

• Los terminales o patillas correspondientes a las señales RD y WR serán conectadas directamente a

las señales de idéntica denominación del microprocesador 8085. Estas señales están disponibles en el conector CON3 correspondiente a la FIG.24A (ver tema 2).

• Las señales correspondientes al bus de datos del 8255 (D0, D1, D2, D3, D4, D5, D6, D7) serán

conectadas directamente al bus de datos/direcciones del 8085 de denominación equivalente. Estas señales están disponibles en el conector CON2 correspondiente a la FIG.24A (ver tema 2).

• La patilla RESET del 8255 se conecta a la patilla de salida RESET OUT del 8085, al tiempo que se

añade un condensador a masa de 10 nF. La señal de RESET OUT se encuentra en el conector CON3 de la FIG.24A (tema 2).

• Las dos líneas de control A0 y A1 del 8255, pueden ser conectadas a cualquier par de líneas del bus

de direcciones del microprocesador 8085. Sin embargo, lo más normal, es que A0 y A1 sean

Page 11: Microprocesador 8085 (7)  INTEL

conectadas a las líneas de misma denominación del bus de direcciones del 8085. Nosotros así lo haremos y podemos encontrarlas en el conector CON1 de la FIG.24A (tema 2).

• La señal de selección de chip CS, debe ser conectada a una de las salidas disponibles en el

decodificador de direcciones (74LS138). Nosotros realizaremos la conexión a la salida CS3 que nos proporciona dicho componente y a cuya línea tendremos acceso en el conector CON3 de la FIG.24A (tema 2).

• El resto de las patillas de 8255 constituyen las 24 líneas disponibles para comunicación con el

exterior, es decir, forman las líneas de entrada/salida.

Todo lo mencionado hasta el momento puede apreciarse en el esquema de la FIG.74A. Como podemos ver, al asignar la selección de chip a la salida CS3 del decodificador, situamos

este componente en la dirección B000H, y puesto que se han conectado A0 y A1 directamente a las direcciones A0 y A1 respectivamente del microprocesador, tendremos como direcciones de acceso definitivas para este componente:

DIRECCION ELEMENTO SELECCIONADO

B000H Puerto A B001H Puerto B B002H Puerto C B003H Registro C/E

14 PC0

15 PC1

16 PC2 17 PC3

13 PC4

12 PC5

11 PC6

10 PC7

4 PA0

3 PA1

2 PA2 1 PA3

40 PA4

39 PA5

38 PA6

37 PA7

18 PB0

19 PB1

20 PB221 PB3

22 PB4

23 PB5

24 PB6

25 PB7

FIG.74A

A0 A0

A1 A1

WR WR

RD RD

CS3 CS

RESET OUT RESET 35

10nF

D7 D7 27

D6 D6 28

D5 D5 29

D4 D4 30

D3 D3 31

D2 D2 32

D1 D1 33

D0 D0 34

C17100K

+5V

CI1

282

55

26

7

PU

ER

TO

CP

UE

RT

O A

PU

ER

TO

B

Page 12: Microprocesador 8085 (7)  INTEL

7.5 APLICACIONES PRÁCTICAS CON EL PPI8255.

En este apartado estudiaremos algunas aplicaciones sencillas que nos permitan entender el funcionamiento básico del PPI 8255 y su modo de programación. Para ello se desarrollarán unos ejercicios muy elementales que serán el inicio o punto de partida para más adelante realizar tareas más complejas. EJERCICIO 1. Se pretende desarrollar un programa que aplicado a nuestro sistema y apoyándose en el PPI 8255, realice 20 intermitencias con 8 lámparas de 12V (corriente continua). Para llevar a cabo esta tarea debemos darnos cuenta que, siendo el PPI 8255 nuestro medio de comunicación con el exterior, no es posible manejar las mencionadas lámparas de forma directa, sino que necesitamos el apoyo de algún elemento auxiliar que nos permita adaptar la tensión de trabajo del 8255 (+5V) con la tensión de trabajo de las lámparas (+12V). Para realizar esta misión emplearemos un circuito integrado denominado ULN 2803. En la FIG.75A podemos ver su distribución de patillas y además podemos apreciar que se trata de ocho elementos inversores de potencia independientes, cada uno de los cuales dispone de un terminal de entrada y otro de salida. Internamente están compuestos por conjuntos de transistores con montaje darlington y salida en colector abierto. Pueden soportar tensiones de hasta +50V.

En la salida de cada elemento inversor de este circuito integrado, hay un diodo que se emplea

para eliminar corrientes indeseables producidas cuando la carga que se maneja es de tipo inductivo (bobinas). Todos estos diodos (8) van unidos a la patilla marcada como COMUN+ y por tal motivo es conveniente, aunque no indispensable, conectar dicho terminal a la tensión común de las lámparas (+12V). (Notar que en este caso estamos tratando una carga resistiva).

E0 1 18 S0E1 2 17 S1

E2 3 16 S2

E3 4 15 S3

E4 5 14 S4

E5 6 13 S5

E6 7 12 S6

E7 8 11 S7

GND 9 10 COMUN+

ULN

280

3

FIG.75A

E S

Page 13: Microprocesador 8085 (7)  INTEL

Apoyándonos ahora en este nuevo componente realizaremos la conexión mostrada en la FIG.75B, en la que podemos apreciar la conexión de las lámparas en las diferentes salidas S0, S1, S2, S3, S4, S5, S6, S7 del ULN 2803, mientras que las correspondientes entradas E0, E1, E2, E3, E4, E5, E6, E7, serán llevadas a los terminales PA0, PA1, PA2, PA3, PA4, PA5, PA6, PA7 del 8255.

Realizadas de este modo las conexiones, debemos tener claro que si en un momento dado

sacamos un 1 lógico por el terminal PA4 del 8255, dicha señal es inyectada a la entrada E4 del ULN 2803 y en su salida S4, tendremos un 0 lógico, por lo que circulará corriente por la lámpara conectada en dicha salida, es decir se iluminará la lámpara L4.

Completado de este modo el hardware necesario para resolver este ejercicio, pasamos a

plantearnos el desarrollo del software que haga posible llevar a cabo el planteamiento inicial. Para ello, nos basaremos en la generación del siguiente pseudocódigo, teniendo en cuenta que debemos comenzar expresando las distintas funciones a realizar de forma general, para en posteriores pasos de refinado ir concretando todos los detalles necesarios:

NOMBRE: INTERMI FUNCION: Intermitencia de 8 lámparas 20 veces. PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Iniciar el sistema B=20 MIENTRAS B>0 Realizar intermitencia B=B-1 FIN DE MIENTRAS Fin del programa

Como podemos apreciar, necesitamos mostrar con más detalle distintos pasos de este pseudocódigo. En primer lugar al iniciar el sistema, lo que en realidad haremos, será bloquear o prohibir las interrupciones, programar el puntero de pila y programar de forma apropiada el PPI 8255. Vemos también que se realiza un bucle que debe ser ejecutado en 20 ocasiones (20 intermitencias), para lo cual empleamos la variable contador B. En el interior del bucle nos encontramos con la acción “realizar

UL N

280

3

PA0 E0 S0 L0

PA1 E1 S1 L1

PA2 E2 S2 L2

PA3 E3 S3 L3

PA4 E4 S4 L4

PA5 E5 S5 L5

PA6 E6 S6 L6

PA7 E7 S7 L7

+12V

GND

COMUN+

FIG.75B

Page 14: Microprocesador 8085 (7)  INTEL

intermitencia” que básicamente consistirá en encender y apagar las lámparas, permaneciendo en cada estado un tiempo determinado. Teniendo en cuenta estas consideraciones, realizamos un refinado del pseudocódigo, obteniendo:

NOMBRE: INTERMI FUNCION: Intermitencia de 8 lámparas 20 veces. PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones Puntero de pila Programar PPI 8255 B=20 MIENTRAS B>0 Encender lámparas

Temporizar Apagar lámparas Temporizar

B=B-1 FIN DE MIENTRAS Fin del programa

Con este pseudocódigo podríamos pasar a construir el programa definitivo en ensamblador, sin embargo vamos a incluir aquí, para más detalle, el diagrama de flujo de la FIG.75C que representa gráficamente este proceso.

Inicio

Prohibir InterrupcionesPuntero de PilaProgramar PPI 8255

B=20

B>0

Si

No

Encender lámparas

Temporizar

Apagar lámparas

Temporizar

B=B-1

Fin del programa

FIG.75C

Page 15: Microprocesador 8085 (7)  INTEL

A continuación se presenta el listado del programa ensamblado. En él podemos apreciar fundamentalmente los siguientes pasos:

2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : INTERMI.A SM OUTPUT FILENAME : INTERMI.O BJ 1 ;------------------- ----------------------- 2 ;NOMBRE : INTERMI 3 ;FUNCION : Intermite ncia de lamparas 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ----------------------- 7 8 ;------------------- ----------------------- 9 ;PARAMETROS PARA EL 8255 10 ;------------------- ----------------------- 11 00 B0 PA82 EQU B000 H ;Puerto A del 8255 12 01 B0 PB82 EQU B001 H ;Puerto B del 8255 13 02 B0 PC82 EQU B002 H ;Puerto C del 8255 14 03 B0 REES82 EQU B003 H ;Reg. Est. del 8255 15 ;------------------- ----------------------- 16 17 ;------------------- ----------------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ----------------------- 20 FF 87 PPILA EQU 87FF H ;Puntero de pila 21 ;------------------- ----------------------- 22 0000 INTERMI: 23 0000 F3 DI 24 0001 21 FF 87 LXI H,PPILA 25 0004 F9 SPHL 26 0005 3E 8A MVI A,8AH 27 0007 32 03 B0 STA REES82 28 000A 06 14 MVI B,20 29 000C 78 SAL1 MOV A,B 30 000D A7 ANA A 31 000E CA 34 00 JZ FIN 32 0011 3E FF MVI A,FFH 33 0013 32 00 B0 STA PA82 34 0016 CD 25 00 CALL TEMPO 35 0019 3E 00 MVI A,00H 36 001B 32 00 B0 STA PA82 37 001E CD 25 00 CALL TEMPO 38 0021 05 DCR B 39 0022 C3 0C 00 JMP SAL1 40 ;------------------- ----------------------- 41 ;NOMBRE: TEMPO 42 ;FUNCION: Proporcion a un tiempo de espera 43 ;PRECONDICIONES: Nin guna 44 ;POSTCONDICIONES: Mo difica registros D y E 45 ;------------------- ----------------------- 46 0025 TEMPO: 47 0025 F5 PUSH PSW 48 0026 11 FF 07 LXI D,07FFH 49 0029 1B TE1 DCX D 50 002A 7A MOV A,D

Page 16: Microprocesador 8085 (7)  INTEL

51 002B B3 ORA E 52 002C 00 NOP 53 002D 00 NOP 54 002E 00 NOP 55 002F C2 29 00 JNZ TE1 56 0032 F1 POP PSW 57 0033 C9 RET 58 0034 76 FIN HLT 59 60 0035 END *********** S Y M B O L I C R E F E R E N C E T A B L E *********** FIN 0034 INTERMI 0000 PA82 = B000 PB82 = B001 PC82 = B002 PPILA = 87FF REES82 = B003 SAL1 000C TE1 0029 TEMPO 0025 LINES ASSEMBLED : 60 ASSEMB LY ERRORS : 0 • En primer lugar definimos (desde la línea 8 hasta la 21) una serie de parámetros para referirnos al

8255 y a la pila, de modo que resulte más sencillo su empleo en un momento determinado. Por ejemplo, si necesitamos sacar un dato por el puerto A del 8255, tendríamos que hacer referencia a la dirección B000H, sin embargo de este modo no tendremos más que hacer referencia a PA82. Este método simplifica mucho la tarea de programar a medida que va creciendo el programa en número de líneas y empleamos más componentes en nuestro sistema.

• Si seguimos las instrucciones del pseudocódigo (o el diagrama de flujo) vemos que las líneas de código 23 hasta 27, corresponden al proceso de iniciación del sistema. (Prohibir interrupciones,...).

• En la línea 28 se inicia la variable B según el valor que se le da al registro B. • En las líneas 29, 30 y 31 se plantea la ruptura de secuencia según se cumpla B>0. • En las dos instrucciones siguientes (32 y 33) se encienden las 8 lámparas y hacemos que

permanezcan en este estado durante un tiempo marcado por la subrutina de temporización (TEMPO). • En las líneas 35 y 36 apagamos las lámparas que permanecerán así durante el mismo intervalo de

tiempo que estuvieron encendidas. • En la línea 38 se decrementa el contador o variable B, para a continuación volver a realizar el

proceso nuevamente, mientras se cumpla que B>0. • La subrutina de temporización (TEMPO) es la que nos permite realizar los tiempos de espera,

durante los que las lámparas permanecerán encendidas o apagadas. Como podemos deducir, el tiempo viene impuesto por el valor que se almacene en el par de registros DE (en este caso 07FFH) por lo que alterando este valor podemos hacer que la intermitencia de las lámparas sea más rápida (con un valor menor) o sea mas lenta (con un valor mayor). (Debe quedar claro que, aunque aquí no se hace mención alguna acerca de la construcción de la subrutina de temporización, ésta ha sido tomada de la subrutina TEMPORIZ desarrollada en el ejemplo 7 del tema anterior).

• En la línea de código 26 (MVI A,8AH) se proporciona el dato (8AH) para programar el 8255

mediante la instrucción siguiente. Este dato 8AH=10001010(2 establece el puerto A como salida, el puerto B como entrada, la parte baja del puerto C como salida y la parte alta del puerto C como entrada. Esto puede comprobarse analizando la tabla de programación en modo 0 presentada en el apartado 7.3 de este tema. Podríamos haber elegido cualquier otra combinación que nos proporcionara el puerto A como salida ya que ésta es la única condición necesaria para este ejercicio al quedar los otros puertos sin uso.

Page 17: Microprocesador 8085 (7)  INTEL

EJERCICIO 2 Desarrollar un programa que nos permita controlar 24 lámparas conectadas a los tres puertos del 8255, de forma que se produzca un encendido secuencial de las mismas. En este caso nos imponen únicamente dos condiciones: Que el encendido sea secuencial y que las lámparas estén conectadas en los tres puertos del PPI 8255. Por tanto tendremos que analizar el problema con detenimiento e ir imponiendo las condiciones adicionales que nosotros consideremos oportunas para la realización de la tarea encomendada. En primer lugar realizaremos un análisis del hardware que será necesario emplear. Nosotros haremos uso del ya conocido circuito integrado ULN 2803. Situaremos una unidad en cada puerto del PPI 8255 y obtendremos de este modo el esquema de la FIG.75D, en el que pueden verse las conexiones de cada una de las entradas del ULN 2803 con las líneas de los tres puertos (PA, PB y PC) del 8255. Según esta conexión física, cuando deseemos encender la lámpara L12 tendremos que sacar un 1 lógico por la línea 5 del puerto B, es decir por PB4. Si deseamos encender la lámpara L23, debemos sacar un 1 lógico por PC7. Procediendo de modo similar podremos encender todas y cada una de las 24 lámparas que deseamos controlar.

Establecida ya la configuración física de los elementos a controlar no queda más que desarrollar un programa que lleve a cabo el encendido secuencial de las 24 lámparas.

Por encendido secuencial entendemos que, partiendo de una situación inicial en que todas las lámparas se encuentren apagadas, se iran encendiendo una a una (comenzando por L0 por ejemplo) hasta que en la posición final se encuentren todas encendidas. La velocidad a la que iran iluminándose las lámparas, la impondremos nosotros (no nos dicen nada al respecto) mediante el empleo de una subrutina de temporización.

Como debemos sacar datos por los tres puertos, estableceremos tres bucles, cada uno de los

cuales deberá repetirse 8 veces, de modo que en cada iteración se ilumine una nueva lámpara, hasta completar las 24 en total. Cada bucle se empleará para controlar un puerto concreto y se sacarán los datos en primer lugar por el puerto A, a continuación por el puerto B y finalmente por el puerto C.

Además necesitaremos emplear una variable contador que nos posibilite realizar el número de iteraciones deseadas en cada bucle. Usaremos la variable B a la que asignaremos el valor 8 al comenzar cada bucle.

También debemos tener en cuenta que en cada iteración que se realice el dato que tenemos que

sacar varía, por lo que se debe realizar una preparación del dato antes de enviarlo al puerto correspondiente.

En base a estas ideas previas desarrollamos el siguiente pseudocódigo: NOMBRE: SECUEN FUNCION: Encendido secuencial de 24 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Iniciar el sistema Dato=0 B=8 MIENTRAS B>0 Preparar dato Sacar dato al puerto A Temporizar B=B-1 FIN DE MIENTRAS

Page 18: Microprocesador 8085 (7)  INTEL

Dato=0 B=8 MIENTRAS B>0 Preparar dato Sacar dato al puerto B Temporizar B=B-1 FIN DE MIENTRAS Dato=0 B=8 MIENTRAS B>0 Preparar dato Sacar dato al puerto C Temporizar B=B-1 FIN DE MIENTRAS Fin del Programa

UL N

280

3

PC0 E0 S0 L16

PC1 E1 S1 L17

PC2 E2 S2 L18

PC3 E3 S3 L19

PC4 E4 S4 L20

PC5 E5 S5 L21

PC6 E6 S6 L22

PC7 E7 S7 L23GND

COMUN+

FIG.75D

UL N

280

3

PB0 E0 S0 L8

PB1 E1 S1 L9

PB2 E2 S2 L10

PB3 E3 S3 L11

PB4 E4 S4 L12

PB5 E5 S5 L13

PB6 E6 S6 L14

PB7 E7 S7 L15

+12V

GND

COMUN+

ULN

280

3

PA0 E0 S0 L0

PA1 E1 S1 L1

PA2 E2 S2 L2

PA3 E3 S3 L3

PA4 E4 S4 L4

PA5 E5 S5 L5

PA6 E6 S6 L6

PA7 E7 S7 L7GND

COMUN+

Page 19: Microprocesador 8085 (7)  INTEL

Podemos ahora pasar a realizar un nuevo paso de refinamiento en el desarrollo del programa analizando detenidamente los distintos procesos planteados, mostrando con más detalle cada uno de ellos de modo que llegue un momento que podamos convertirlo a mnemónicos de ensamblador. De este modo el programa puede ser el siguiente:

NOMBRE: SECUEN FUNCION: Encendido secuencial de 24 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones

Punterizar la pila Programar el PPI 8255 Apagar todas las lámparas Temporizar Dato=0

B=8 MIENTRAS B>0

Poner CARRY=1 Rotar Dato con CARRY por la izquierda Sacar Dato al puerto A Temporizar B=B-1 FIN DE MIENTRAS Dato=0 B=8 MIENTRAS B>0 Poner CARRY=1 Rotar Dato con CARRY por la izquierda Sacar Dato al puerto B Temporizar B=B-1 FIN DE MIENTRAS Dato=0 B=8 MIENTRAS B>0 Poner CARRY=1 Rotar Dato con CARRY por la izquierda Sacar Dato al puerto C Temporizar B=B-1 FIN DE MIENTRAS Fin del Programa

A continuación, en la FIG.75E, se muestra el diagrama de flujo en el que también nos podemos apoyar para entender el funcionamiento del programa. Como podemos ver tanto en esta figura como en el pseudocódigo, tenemos tres bucles muy similares, solo se diferencian en las instrucciones que permiten sacar el Dato al exterior, por tanto sería posible e interesante realizar una subrutina común que sustituyera a los tres bucles.

Page 20: Microprocesador 8085 (7)  INTEL

INICIO

Prohibir interrupcionesPunterizar la pilaProgramar el PPI 8255

Apagar todas las lámparas

Temporizar

C=00HB=8

B>0

Carry=1Rotar A a izquierdasSacar dato al puerto A

Temporizar

B=B-1

Si

No

C=00HB=8

B>0

Carry=1Rotar A a izquierdasSacar dato al puerto B

Temporizar

B=B-1

Si

No

C=00HB=8

B>0

Carry=1Rotar A a izquierdasSacar dato al puerto C

Temporizar

B=B-1

Si

No

FIG.75E

FIN

SALT3

SALT1

SALT4

SALT2

SALT5

Page 21: Microprocesador 8085 (7)  INTEL

Analizado ya todo el proceso que debe seguirse en nuestro programa pasamos a concretar el mismo en lenguaje ensamblador, obteniendo el siguiente desarrollo: 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : SECUEN.AS M OUTPUT FILENAME : SECUEN.OB J 1 ;------------------- ----------------------- 2 ;NOMBRE : SECUEN 3 ;FUNCION : Encendido secuencal 24 lámparas 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ----------------------- 7 8 ;------------------- ----------------------- 9 ;PARAMETROS PARA EL 8255 10 ;------------------- ----------------------- 11 00 B0 PA82 EQU B000 H ;Puerto A del 8255 12 01 B0 PB82 EQU B001 H ;Puerto B del 8255 13 02 B0 PC82 EQU B002 H ;Puerto C del 8255 14 03 B0 REES82 EQU B003 H ;Reg. Est. del 8255 15 ;------------------- ----------------------- 16 17 ;------------------- ----------------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ----------------------- 20 FF 87 PPILA EQU 87FF H ;Puntero de pila 21 ;------------------- ----------------------- 22 0000 SECUEN: 23 0000 F3 DI 24 0001 21 FF 87 LXI H,PPILA 25 0004 F9 SPHL 26 0005 3E 80 MVI A,80H 27 0007 32 03 B0 STA REES82 28 000A 3E 00 MVI A,00H 29 000C 32 00 B0 STA PA82 30 000F 32 01 B0 STA PB82 31 0012 32 02 B0 STA PC82 32 0015 CD 5E 00 CALL TEMPO 33 0018 0E 00 MVI C,00H 34 001A 06 08 MVI B,8 35 001C 78 SALT3 MOV A,B 36 001D A7 ANA A 37 001E CA 2F 00 JZ SALT1 38 0021 37 STC 39 0022 79 MOV A,C 40 0023 17 RAL 41 0024 4F MOV C,A 42 0025 32 00 B0 STA PA82 43 0028 CD 5E 00 CALL TEMPO 44 002B 05 DCR B 45 002C C3 1C 00 JMP SALT3 46 002F 0E 00 SALT1 MVI C,00H 47 0031 06 08 MVI B,8 48 0033 78 SALT4 MOV A,B 49 0034 A7 ANA A 50 0035 CA 46 00 JZ SALT2 51 0038 37 STC 52 0039 79 MOV A,C 53 003A 17 RAL 54 003B 4F MOV C,A 55 003C 32 01 B0 STA PB82 56 003F CD 5E 00 CALL TEMPO 57 0042 05 DCR B 58 0043 C3 33 00 JMP SALT4

Page 22: Microprocesador 8085 (7)  INTEL

59 0046 0E 00 SALT2 MVI C,00H 60 0048 06 08 MVI B,8 61 004A 78 SALT5 MOV A,B 62 004B A7 ANA A 63 004C CA 5D 00 JZ FIN 64 004F 37 STC 65 0050 79 MOV A,C 66 0051 17 RAL 67 0052 4F MOV C,A 68 0053 32 02 B0 STA PC82 69 0056 CD 5E 00 CALL TEMPO 70 0059 05 DCR B 71 005A C3 4A 00 JMP SALT5 72 005D 76 FIN HLT 73 74 ;------------------- ----------------------- 75 ;NOMBRE: TEMPO 76 ;FUNCION: Proporcion a un tiempo de espera 77 ;PRECONDICIONES: Nin guna 78 ;POSTCONDICIONES: Ni nguna 79 ;------------------- ----------------------- 80 005E TEMPO: 81 005E F5 PUSH PSW 82 005F 11 FF 07 LXI D,07FFH 83 0062 1B TE1 DCX D 84 0063 7A MOV A,D 85 0064 B3 ORA E 86 0065 00 NOP 87 0066 00 NOP 88 0067 00 NOP 89 0068 C2 62 00 JNZ TE1 90 006B F1 POP PSW 91 006C C9 RET 92 93 006D END ********** S Y M B O L I C R E F E R E N C E T A B L E *************** FIN 005D PA82 = B000 PB82 = B001 PC82 = B002 PPILA = 87FF REES82 = B003 SALT1 002F SALT2 0046 SALT3 001C SALT4 0033 SALT5 004A SECUEN 0000 TE1 0062 TEMPO 005E LINES ASSEMBLED : 93 ASSEMB LY ERRORS : 0

• Como podemos apreciar, en las primeras líneas (en este caso de la línea 1 a la línea 6) se presentan el

nombre, función, precondiciones y postcondiciones del programa o subrutina, en forma de comentarios. Recordemos que los comentarios comienzan con el signo “;” y además no forman parte del programa objeto.

• En las líneas 11 a 14 se establecen los parámetros del PPI 8255, de este modo cuando deseemos hacer referencia a un puerto del 8255, por ejemplo el puerto B, no necesitamos emplear y por tanto recordar el valor B001H, sino que nos servirá con escribir PB82 (que es el nombre que le hemos asignado mediante EQU).

• En la línea 20, definimos la dirección del puntero de pila. • El programa comienza en la línea 23 y desde ésta hasta la línea 27 se realiza el proceso de

inicialización del programa. La 23, prohibe interrupciones, las 24 y 25 punterizan la pila y finalmente las 26 y 27 programan el PPI 8255.

• Desde la línea 28 a la 31, se realiza el apagado de todas las lámparas a controlar y en la línea 32 se realiza una llamada a la subrutina de temporización.

• En las líneas 33 y 34 se establecen los valores iniciales de los Datos (C=00H) y del contador (B=8). • Podemos ver cómo en las líneas 35, 36 y 37 se lleva a cabo una toma de decisión. • En las líneas 38 a 42, ponemos el flag CARRY a nivel ALTO, se rota el Dato a la izquierda con el

CARRY y se saca el valor resultante al puerto A del 8255.

Page 23: Microprocesador 8085 (7)  INTEL

• En la línea 43 se realiza una llamada a la subrutina de temporización. • En las líneas 44 y 45, se establece de nuevo el lazo, en caso de que el contador (B) no sea cero. • El resto de las líneas no se comentan, pues se trata de tres lazos similares. • Notar que entre las líneas 74 y 91, se encuentra la subrutina de temporización. El tiempo que el

microprocesador permanece en esta subrutina viene impuesto por el valor cargado en el par DE (en este caso 07FFH), como puede verse en la línea 82.

EJERCICIO 3 Desarrollar el software y hardware necesarios para, a través del 8255, poder controlar 8 lámparas (L0, L1, ..., L7) y 8 pulsadores (P0, P1, ..., P7) de manera que mientras permanezca accionado un pulsador cualquiera, se ilumine su lámpara correspondiente. Es decir, si se acciona P3 se iluminará L3, si se accionan P3 y P5 se iluminarán L3 y L5, etc. En primer lugar tendremos que diseñar el hardware necesario para desarrollar esta actividad. Emplearemos para activar las lámparas, el conocido ULN 2803, que será manejado por el puerto A del 8255. Para la detección de los pulsadores implementaremos un circuito formado por dos resistencias y un condensador conectados del modo indicado en la FIG.75F, de manera que, cuando el pulsador permanezca sin activar, la señal proporcionada será un 1 lógico y cuando el pulsador es accionado, tendremos un 0 lógico. Los pulsadores serán controlados por el puerto B del 8255.

UL N

28 0

3

PA0 E0 S0 L0

PA1 E1 S1 L1

PA2 E2 S2 L2

PA3 E3 S3 L3

PA4 E4 S4 L4

PA5 E5 S5 L5

PA6 E6 S6 L6

PA7 E7 S7 L7

+12V

GND

COMUN+

FIG.75F

RED

RED

RED

RED

RED

RED

RED

RED

PB0 P0

PB1 P1

PB7 P7

PB2 P2

PB4 P4

PB6 P6

PB3 P3

PB5 P5

+5V

100nF 47

10K

RED

Page 24: Microprocesador 8085 (7)  INTEL

Como vemos en la FIG.75F los bloques marcados como RED son todos idénticos entre sí e iguales a la red mostrada en la misma figura. Resuelta ya la disposición física de todos los elementos a controlar, procedemos a desarrollar el programa que haga efectivas las propuestas del enunciado de esta actividad. Un primer paso para obtener el pseudocódigo necesario puede ser el siguiente:

NOMBRE: PULSAR FUNCION: Control de 8 pulsadores y 8 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna.

Iniciar el sistema Leer Dato de contactos Tratar el Dato leído Sacar Dato a lámparas Volver a Leer Dato de contactos Final del programa Debemos proceder a un refinado del pseudocódigo de forma que aclaremos del mejor modo y de manera más precisa todos los conceptos expresados. Mostrando en más detalle los distintos puntos tendremos:

NOMBRE: PULSAR FUNCION: Control de 8 pulsadores y 8 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna.

Prohibir interrupciones Punterizar la pila Programar el PPI 8255 Apagar las lámparas Leer Dato de PB82 Tratar el Dato leido Sacar Dato al PA82 Volver a Leer Dato de PB82 (paso 5) Final del programa En principio el programa parece suficientemente explícito, pero aún queda por aclarar qué significa exactamente “Tratar el dato leído”. Dado que debemos hacer corresponder cada pulsador con su lámpara asociada, es decir, P0 con L0, P1 con L1, ..., P7 con L7, de modo que al accionar un pulsador cualquiera este echo se vea reflejado en la lámpara correspondiente y además la conexión física se realiza de modo que la señal de cada pulsador (P0, P1, ..., P7) corresponde directamente con las líneas PB0, PB1, ..., PB7 del puerto B del 8255 y las lámparas corresponden exactamente igual con las líneas PA0, PA1, ..., PA7 del puerto A del 8255, no tendremos que realizar ningún tratamiento especial. Solo deberemos considerar el hecho de que cuando se detecte un pulsador accionado, en la correspondiente línea de entrada habrá un 0 lógico y para encender la lámpara correspondiente hay que sacar un 1 lógico. Lo contrario sucede con los pulsadores que quedan sin activar. Por tanto el “Dato” leído por el puerto B, debe ser complementado (cambiar los unos por ceros y los ceros por unos) antes de sacarlo por el puerto A.

Page 25: Microprocesador 8085 (7)  INTEL

Teniendo en cuenta todo esto, el programa quedará como sigue:

NOMBRE: PULSAR FUNCION: Control de 8 pulsadores y 8 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones

Punterizar la pila Programar el PPI 8255 Apagar las lámparas Leer Dato de PB82 Dato = Complemento del Dato leido Sacar Dato al PA82 Volver a Leer Dato de PB82 (paso 5) Final del programa Podemos observar que en la penúltima línea, establecemos la acción “Volver a Leer Dato de PB82”, esto provoca que el programa se esté ejecutando permanentemente, en una acción sin fin. Por tanto este programa continuará ejecutándose hasta que la alimentación sea interrumpida. A continuación, en la FIG.75G se muestra el diagrama de flujo del mismo.

INICIO

Prohibir interrupcionesPunterizar la pilaProgramar el PPI 8255

Apagar las lámparas

Leer Dato de PB

Dato=Dato complementado

Sacar Dato por PA

FIG.75G

Page 26: Microprocesador 8085 (7)  INTEL

Para finalizar, no nos queda más que traducir el programa propuesto en pseudocódigo, al lenguaje ensamblador, obteniendo así el programa definitivo que se muestra a continuación. 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : PULSAR.AS M OUTPUT FILENAME : PULSAR.OB J 1 ;------------------- ----------------------- 2 ;NOMBRE : PULSAR 3 ;FUNCION : Control 8 pulsad y 8 lámparas 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ----------------------- 7 8 ;------------------- ----------------------- 9 ;PARAMETROS PARA EL 8255 10 ;------------------- ----------------------- 11 00 B0 PA82 EQU B000 H ;Puerto A del 8255 12 01 B0 PB82 EQU B001 H ;Puerto B del 8255 13 02 B0 PC82 EQU B002 H ;Puerto C del 8255 14 03 B0 REES82 EQU B003 H ;Reg. Estado 8255 15 ;------------------- ----------------------- 16 17 ;------------------- ----------------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ----------------------- 20 FF 87 PPILA EQU 87FF H ;Puntero pila RAM 21 ;------------------- ----------------------- 22 0000 PULSAR: 23 0000 F3 DI 24 0001 21 FF 87 LXI H,87FFH 25 0004 F9 SPHL 26 0005 3E 82 MVI A,82H 27 0007 32 03 B0 STA REES82 28 000A 3E 00 MVI A,00H 29 000C 32 00 B0 STA PA82 30 000F 3A 01 B0 LEER LDA PB82 31 0012 2F CMA 32 0013 32 00 B0 STA PA82 33 0016 C3 0F 00 JMP LEER 34 0019 35 0019 END *********** S Y M B O L I C R E F E R E N C E T A B L E ************* LEER 000F PA82 = B000 PB82 = B001 PC82 = B002 PPILA = 87FF PULSAR 0000 REES82 = B003 LINES ASSEMBLED : 35 ASSEMB LY ERRORS : 0 • Como podemos apreciar, las primeras líneas se emplean para documentar el programa y establecer

los parámetros de programación y acceso a diversos componentes, en este caso el PPI 8255 y la pila (memoria RAM).

• Las primeras líneas de programa, son de inicialización y apagado de lámparas (líneas 23 a 29). • En la línea 30, se lee el valor presentado en el puerto B del 8255, es decir, se carga en el acumulador

del microprocesador, el dato presente en el puerto B (entrada). • La línea 31, se encarga de complementar el dato del acumulador. • La línea 32 saca al exterior, a través del puerto A, el dato que hay en el acumulador. • La línea 33 provoca un salto incondicional a la línea 30 (LEER) para volver a leer el puerto A y

continuar el ciclo de forma indefinida.

Page 27: Microprocesador 8085 (7)  INTEL

EJERCICIO 4 Efectuar un control de 64 lámparas de modo que se iluminen una a una de forma consecutiva. En primer lugar tendremos que realizar un diseño del hardware que nos permita controlar de forma apropiada las 64 unidades de lámparas. Dado que no nos imponen ningún tipo de restricción y claramente podemos observar la insuficiencia de líneas de control en los tres puertos del 8255, podríamos pensar en añadir a nuestro sistema los PPI 8255 necesarios para cubrir la demanda. Sin embargo rechazaremos esta idea inicial, para trabajar sobre la construcción de una “matriz” de lámparas constituida por 8 filas y 8 columnas, que tratadas de modo adecuado puedan ser controladas con dos puertos de 8255. El esquema de principio responde al mostrado en la FIG.75H. En cada nodo de la misma se encontraría situada un lámpara, por lo que controlaríamos en total las 64 lámparas exigidas. Para entrar a tratar la construcción propia de la matriz, fijémonos en primer lugar en una matriz de 2x2 al objeto de comprender su funcionamiento con mayor facilidad. Una matriz de este tamaño responde a la FIG.75I. En ella puede apreciarse como para iluminar una lámpara, por ejemplo la L11, tendremos que cerrar los interruptores de la columna y de la fila correspondientes, es decir C1 y F1. Sin embargo, con el diseño actual, además de iluminarse la lámpara en cuestión, también circularía corriente por las lámparas L21, L22 y L12, que quedarían conectadas en paralelo según se muestra en la FIG.75J iluminándose las mismas de forma más tenue, pues estarían trabajando a 4V la unidad.

PUER

TO

B

PUERTO A

FIG.75H

L21 L22

L11 L12

C1 C2

F1

F2

+12V

+12V

L11

L21

L22

L12

C1

F1

FIG.75IFIG.75J

Page 28: Microprocesador 8085 (7)  INTEL

Por tanto este diseño de matriz no es suficiente para llevar a cabo la tarea pedida. Solucionamos este problema, colocando en serie con cada lámpara, un diodo 1N4001, que obligue a circular la corriente en un único sentido a través de las lámparas, e impidiendo su paso en sentido contrario. Atendiendo a esta última consideración, tendremos una matriz de 8x8 según se muestra en la FIG.75K, en la que podemos apreciar con claridad la disposición de los diodos. Disponemos ahora de una matriz de 8 filas y 8 columnas que deseamos manejar con dos puertos del 8255. Sabemos que no podemos atacar directamente las líneas de la matriz con las salidas de dicho integrado, sino que necesitamos del concurso de algún elemento de potencia que realice esta función. En este caso diseñaremos la etapa final a base de transistores, ocho para las filas y ocho para las columnas. De esta manera, cuando deseemos iluminar una lámpara cualquiera, no tendremos más que excitar el transistor correspondiente a su fila y el de su columna. El esquema final de la matriz junto con su equipo de potencia puede verse en la FIG.75L.

L70

D70

L60

D60

L50

D50

L40

D40

L30

D30

L20

D20

L10

D10

L00

D00

L71

D71

L61

D61

L51

D51

L41

D41

L31

D31

L21

D21

L11

D11

L01

D01

L72

D72

L62

D62

L52

D52

L42

D42

L32

D32

L22

D22

L12

D12

L02

D02

L73

D73

L63

D63

L53

D53

L43

D43

L33

D33

L23

D23

L13

D13

L03

D03

L74

D74

L64

D64

L54

D54

L44

D44

L34

D34

L24

D24

L14

D14

L04

D04

L75

D75

L65

D65

L55

D55

L45

D45

L35

D35

L25

D25

L15

D15

L05

D05

L76

D76

L66

D66

L56

D56

L46

D46

L36

D36

L26

D26

L16

D16

L06

D06

L77

D77

L67

D67

L57

D57

L47

D47

L37

D37

L27

D27

L17

D17

L07

D07

FIG.75K

Page 29: Microprocesador 8085 (7)  INTEL

Como podemos apreciar, los transistores que manejan las filas son los BDX53C, se trata de elementos en montaje Darlington que soportan tensiones entre colector y emisor próximas a los 100 V y son capaces de manejar corrientes de colector de hasta 8 A (evidentemente para soportar estos valores extremos deben ir montados sobre disipadores de aluminio adecuados). Son de tipo NPN, por lo que para conseguir su paso a saturación, tendremos que suministrar un nivel de tensión ALTO en sus bases y para conseguir que permanezcan al corte, basta con colocar un nivel BAJO. Los transistores que gobiernan las columnas son los BDX54C que poseen características similares a los anteriores, aunque en este caso son de tipo PNP, por lo que para hacerlos conducir será necesario colocar un nivel BAJO en sus bases y para mantenerlos al corte hay que situar un nivel ALTO. Por ejemplo, para iluminar la lámpara L34, hay que sacar un 1 lógico por PA3 y un 0 lógico por PB4. Construido ya el hardware, pasaremos inmediatamente a desarrollar el software que realice el control de las lámparas según los requerimientos pedidos. Puesto que nos piden el encendido consecutivo de todas las lámparas, debemos conseguir un programa que las encienda de forma individual y consecutiva de manera que al encenderse una de ellas se apague la anterior. Comenzaremos por la L00 (fila 0, columna 0) y continuaremos hasta completar la columna 0, a continuación se procederá igual con la columna 1 y así sucesivamente hasta completas la columna 7 con la última lámpara L77. El primer pseudocódigo con el que podemos iniciar este programa, puede ser el siguiente:

L70

D70

L60

D60

L50

D50

L40

D40

L30

D30

L20

D20

L10

D10

L00

D00

L71

D71

L61

D61

L51

D51

L41

D41

L31

D31

L21

D21

L11

D11

L01

D01

L72

D72

L62

D62

L52

D52

L42

D42

L32

D32

L22

D22

L12

D12

L02

D02

L73

D73

L63

D63

L53

D53

L43

D43

L33

D33

L23

D23

L13

D13

L03

D03

L74

D74

L64

D64

L54

D54

L44

D44

L34

D34

L24

D24

L14

D14

L04

D04

L75

D75

L65

D65

L55

D55

L45

D45

L35

D35

L25

D25

L15

D15

L05

D05

L76

D76

L66

D66

L56

D56

L46

D46

L36

D36

L26

D26

L16

D16

L06

D06

L77

D77

L67

D67

L57

D57

L47

D47

L37

D37

L27

D27

L17

D17

L07

D07

FIG.75L

T1 R1

PA0

T2 R2

PA1

T3 R3

PA2

T4 R4

PA3

T5 R5

PA4

T6 R6

PA5

T7 R7

PA6

T8 R8

PA7

T9

R

9

T10

R10

T11

R11

T12

R12

T13

R13

T14

R14

T15

R15

T16

R16

+12V

PB0 PB1 PB2 PB3 PB4 PB5 PB6 PB7

Page 30: Microprocesador 8085 (7)  INTEL

NOMBRE: MATRIZ FUNCION: Encendido secuencial de 64 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Iniciar el sistema

Preparar Datos iniciales Contador =0 MIENTRAS Contador<64 Activar lámpara Temporizar Preparar Datos Contador=Contador+1 FIN DE MIENTRAS Fin del programa Procediendo ahora a un estudio más detallado del pseudocódigo como se hizo en los ejemplos anteriores se encontrará:

El proceso “Iniciar sistema” es esencialmente el mismo que en ejercicios anteriores y está siempre enfocado a dejar el sistema electrónico en disposición de comenzar a ejecutar una tarea determinada programando todos los dispositivos del modo adecuado.

Los Datos iniciales son aquellos que sean precisos para comenzar la ejecución. En este caso

como queremos iniciar el encendido por L00, tendremos que preparar los datos que debemos sacar por los puertos A y B para que se ilumine dicha lámpara. Estos datos pueden almacenarse en los registros D y E.

Además necesitamos un Contador para saber cuando se ha finalizado el proceso, es decir, cuando

se ha iluminado la última lámpara (L77). Vamos a asignar esta misión al registro C. El proceso “Activar lámpara”, consistirá en realizar las acciones precisas para sacar los Datos por los puertos A y B del 8255. El proceso “Temporizar” es, como ya supondremos un tiempo de espera que nos permita ver con suficiente detenimiento la lámpara iluminada. Finalmente tendremos que desarrollar los pasos necesarios de preparación de los Datos para activar la lámpara siguiente y repetir este proceso hasta completarlo con el encendido de la lámpara L77. Teniendo en cuenta todo esto obtendremos:

NOMBRE: MATRIZ FUNCION: Encendido secuencial de 64 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones

Punterizar la pila Programar el PPI 8255 Apagar las lámparas D=01H E=FEH C=0 MIENTRAS C<64 Sacar D al puerto A Sacar E al puerto B Temporizar Preparar Datos C=C+1 FIN DE MIENTRAS Fin del programa

Page 31: Microprocesador 8085 (7)  INTEL

Nos detendremos un poco en analizar el proceso “Preparar Datos” que deberemos enunciar de forma más concreta. Sabemos que partimos de los Datos iniciales D=0000 0001 (filas) y E=1111 1110 (columnas) (valores expresados en binario). Al sacar estos datos a los puertos A y B respectivamente se enciende la lámpara L00. A continuación pretendemos encender la lámpara L10 por lo que debemos sacar los datos D=0000 0010 y E=1111 1110. Vemos que el único cambio por el momento ha consistido en rotar el contenido del registro D una posición a la izquierda de forma que el bit de mayor peso pasa a ocupar la posición del bit de menor peso. Continuaremos con este proceso hasta completar las ocho lámparas correspondientes a la columna 0. Los datos a sacar se muestran a continuación:

Registro D Registro E 0000 0001 1111 1110 0000 0010 1111 1110 0000 0100 1111 1110 0000 1000 1111 1110 0001 0000 1111 1110 0010 0000 1111 1110 0100 0000 1111 1110 1000 0000 1111 1110

Completada esta columna, la siguiente rotación nos introduciría otra vez el dato 0000 0001 en el registro D, que sería el dato necesario para encender una lámpara de la fila 0 (es lo que deseamos ahora) por lo que el proceso sería correcto, sin embargo ahora necesitamos activar la columna 1, por lo que en el registro E tendrá que aparecer el dato 1111 1101. Luego en este punto habrá que efectuar una rotación a la izquierda del contenido del registro E. Para detectar el momento en que debemos efectuar la rotación de E podemos utilizar el flag CARRY al efectuar la última rotación de D entrará un 1 en dicho flag y al detectar esta condición es cuando puede efectuarse una rotación de E. Los datos necesarios para controlar las lámparas de la columna 1 se muestran a continuación:

Registro D Registro E 0000 0001 1111 1101 0000 0010 1111 1101 0000 0100 1111 1101 0000 1000 1111 1101 0001 0000 1111 1101 0010 0000 1111 1101 0100 0000 1111 1101 1000 0000 1111 1101

Los pasos a seguir para controlar el resto de las columnas son los mismos que se han mencionado hasta el momento, consistentes como hemos visto en efectuar ocho rotaciones al contenido del registro D y una rotación al registro E, hasta que la variable Contador (registro C) nos marque el final del proceso. Desarrollando ahora el paso “Preparar Datos” tendremos como pseudocódigo:

NOMBRE: MATRIZ FUNCION: Encendido secuencial de 64 lámparas PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones

Punterizar la pila Programar el PPI 8255 Apagar las lámparas D=01H E=FEH C=0 MIENTRAS C<64 Sacar D al puerto A Sacar E al puerto B Temporizar

Page 32: Microprocesador 8085 (7)  INTEL

Poner CARRY=0 Rotar D a izquierda con CARRY SI CARRY=1 Rotar E a izquierda FIN DE SI C=C+1 FIN DE MIENTRAS Fin del programa A continuación se muestra el diagrama de flujo del pseudocódigo (FIG.75M) de forma detallada, para que pueda servir de referencia al estudio y al posterior paso al lenguaje ensamblador.

INICIO

Prohibir Interrupciones Punterizar la Pila Programar el 8255

Apagar lámparas

D=01H E=FEH C=0

C<64

Si

No

Sacar D al puerto A Sacar E al puerto B

Temporizar

CARRY=0 Rotar D a izqda. con CARRY

CARRY=1 No

Si

Rotar E a izqda.

C=C+1

FIN

FIG.75M

SALT2

SALT1

Page 33: Microprocesador 8085 (7)  INTEL

Para finalizar este ejercicio, tendremos que determinar el programa en lenguaje ensamblador, partiendo o teniendo como base el pseudocódigo escrito con anterioridad, obteniendo así el programa fuente definitivo, cuyo listado se muestra a continuación una vez ensamblado. 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : MATRIZ.AS M OUTPUT FILENAME : MATRIZ.OB J 1 ;------------------- ----------------------- 2 ;NOMBRE : MATRIZ 3 ;FUNCION : Encendido secuencial 64 lamparas 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ----------------------- 7 8 ;------------------- ----------------------- 9 ;PARAMETROS PARA EL 8255 10 ;------------------- ----------------------- 11 00 B0 PA82 EQU B000 H ;Puerto A del 8255 12 01 B0 PB82 EQU B001 H ;Puerto B del 8255 13 02 B0 PC82 EQU B002 H ;Puerto C del 8255 14 03 B0 REES82 EQU B003 H ;Reg Estado 8255 15 ;------------------- ----------------------- 16 17 ;------------------- ----------------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ----------------------- 20 FF 87 PPILA EQU 87FF H ;Puntero pila RAM 21 ;------------------- ----------------------- 22 23 0000 MATRIZ: 24 0000 F3 DI 25 0001 21 FF 87 LXI H,PPILA 26 0004 F9 SPHL 27 0005 3E 80 MVI A,80H 28 0007 32 03 B0 STA REES82 29 000A 3E 00 MVI A,00H 30 000C 32 00 B0 STA PA82 31 000F 16 01 MVI D,01H 32 0011 1E FE MVI E,FEH 33 0013 0E 00 MVI C,00H 34 0015 79 SALT2 MOV A,C 35 0016 FE 40 CPI 64 36 0018 CA 34 00 JZ FIN 37 001B 7A MOV A,D 38 001C 32 00 B0 STA PA82 39 001F 7B MOV A,E 40 0020 32 01 B0 STA PB82 41 0023 CD 35 00 CALL TEMPO 42 0026 A7 ANA A 43 0027 7A MOV A,D 44 0028 07 RLC 45 0029 57 MOV D,A 46 002A D2 30 00 JNC SALT1 47 002D 7B MOV A,E 48 002E 07 RLC 49 002F 5F MOV E,A 50 0030 0C SALT1 INR C

Page 34: Microprocesador 8085 (7)  INTEL

51 0031 C3 15 00 JMP SALT2 52 0034 76 FIN HLT 53 54 ;------------------- ----------------------- 55 ;NOMBRE: TEMPO 56 ;FUNCION: Proporcion a un tiempo de espera 57 ;PRECONDICIONES: Nin guna 58 ;POSTCONDICIONES: Ni nguna 59 ;------------------- ----------------------- 60 0035 TEMPO: 61 0035 F5 PUSH PSW 62 0036 D5 PUSH D 63 0037 11 FF 07 LXI D,07FFH 64 003A 1B TE1 DCX D 65 003B 7A MOV A,D 66 003C B3 ORA E 67 003D 00 NOP 68 003E 00 NOP 69 003F 00 NOP 70 0040 C2 3A 00 JNZ TE1 71 0043 D1 POP D 72 0044 F1 POP PSW 73 0045 C9 RET 74 75 0046 END ************ S Y M B O L I C R E F E R E N C E T A B L E ************ FIN 0034 MATRIZ 0000 PA82 = B000 PB82 = B001 PC82 = B002 PPILA = 87FF REES82 = B003 SALT1 0030 SALT2 0015 TE1 003A TEMPO 0035 LINES ASSEMBLED : 75 ASSEMB LY ERRORS : 0 • Las primeras líneas no se comentarán, pues como en programas anteriores, constituyen la

documentación del programa, el establecimiento de parámetros y la inicialización del sistema. • En las líneas 29 y 30, se realiza el bloqueo y apagado de todas las lámparas. • Las líneas 31, 32 y 33, establecen los Datos iniciales y contadores. • Las líneas 34, 35 y 36, realizan la primer toma de decisión (C<64) y en caso de alcanzar la condición

final, se salta al final del programa. • En las líneas 37 y 38, sacamos el dato (D) al puerto A (filas). • En las líneas 39 y 40, sacamos el dato (E) al puerto B (columnas). • En la línea 41 se realiza una llamada a la subrutina de temporización. • La línea 42 pone el CARRY a nivel BAJO, y las líneas 43 y 44 rotan el dato (D) a la izquierda y se

guarda el resultado con la instrucción de la línea 45. • En la línea 46, si no se llega a la última posición de la columna, saltamos a incrementar el contador,

línea 50. Si se ha llegado a la última posición, se pasa a ejecutar las líneas 47, 48 y 49, en las que se rota a la izquierda el dato (E) de las columnas, para luego pasar a incrementar el contador C (línea 50).

• En la línea 51, se produce un salto incondicional a la línea 34 para reiniciar el proceso. • Desde las líneas 54 a 73, se establece la subrutina de temporización, similar a las anteriores.

Page 35: Microprocesador 8085 (7)  INTEL

7.6 EJERCICIOS.

1. ¿En qué consiste la transferencia de datos al exterior? 2. Indicar el nivel lógico que hace activas las siguientes señales del PPI 8255 : A0, RD, CS, RESET. 3. Describir los modos de funcionamiento del PPI 8255. 4. Cual es la misión del grupo funcional Lectura/escritura y Control lógico. 5. Encontrar los códigos correspondientes a los siguientes modos de programación del PPI 8255:

Puerto A Puerto B Puerto C (Alta) Puerto C (Baja) Salida Salida Salida Salida Salida Entrada Salida Salida Entrada Entrada Entrada Entrada Salida Salida Entrada Entrada Entrada Entrada Salida Salida Entrada Salida Salida Entrada

6. Realizar un dibujo de la conexión física del 8255, al bus del microprocesador 8085, empleando para

la selección del mismo, la salida CS6 del sistema básico mostrado en la FIG.24A (tema 2). Expresar las direcciones de acceso definitivas para este caso.

7. Realizar los cambios precisos en el programa INTERMI.ASM para que el tiempo de encendido y

apagado sea el doble. 8. Intentar modificar el programa SECUEN.ASM, de modo que en lugar de utilizar los tres bucles

similares propuestos en el ejemplo, se utilice una única subrutina que sea llamada en tres ocasiones. (Sugerencia: A la subrutina debemos proporcionarle como datos de entrada C=00H, B=8 y el puerto por el que deseamos sacar los datos cada vez que se efectúe una llamada).

9. En el programa MATRIZ.ASM, realizar los siguientes cambios:

• Conseguir que el encendido secuencial se realice de forma mas rápida. • Realizar el encendido secuencial completando en primer lugar la fila 0, a continuación la fila

1, fila 2, ..., fila 7.

Page 36: Microprocesador 8085 (7)  INTEL

2010

EXHIBICIÓN AÉREA CIUDAD GIJÓN

Page 37: Microprocesador 8085 (7)  INTEL
Page 38: Microprocesador 8085 (7)  INTEL
Page 39: Microprocesador 8085 (7)  INTEL
Page 40: Microprocesador 8085 (7)  INTEL
Page 41: Microprocesador 8085 (7)  INTEL
Page 42: Microprocesador 8085 (7)  INTEL

F 18

Page 43: Microprocesador 8085 (7)  INTEL
Page 44: Microprocesador 8085 (7)  INTEL
Page 45: Microprocesador 8085 (7)  INTEL
Page 46: Microprocesador 8085 (7)  INTEL
Page 47: Microprocesador 8085 (7)  INTEL

RAFALE Caza bombardero francés

Page 48: Microprocesador 8085 (7)  INTEL
Page 49: Microprocesador 8085 (7)  INTEL
Page 50: Microprocesador 8085 (7)  INTEL
Page 51: Microprocesador 8085 (7)  INTEL
Page 52: Microprocesador 8085 (7)  INTEL
Page 53: Microprocesador 8085 (7)  INTEL
Page 54: Microprocesador 8085 (7)  INTEL
Page 55: Microprocesador 8085 (7)  INTEL
Page 56: Microprocesador 8085 (7)  INTEL
Page 57: Microprocesador 8085 (7)  INTEL
Page 58: Microprocesador 8085 (7)  INTEL

OBSERVADOR

Page 59: Microprocesador 8085 (7)  INTEL