Top Banner
Transferencia de datos al exterior Transferencia de datos al exterior Transferencia de datos al exterior Transferencia de datos al exterior Descripción física del PPI 8155 Descripción física del PPI 8155 Descripción física del PPI 8155 Descripción física del PPI 8155 Descripción funcional del PPI 8155 Descripción funcional del PPI 8155 Descripción funcional del PPI 8155 Descripción funcional del PPI 8155 Interconexión del 8155 con el 8085 Interconexión del 8155 con el 8085 Interconexión del 8155 con el 8085 Interconexión del 8155 con el 8085 Ejemplos de E/S con el PPI 8155 Ejemplos de E/S con el PPI 8155 Ejemplos de E/S con el PPI 8155 Ejemplos de E/S con el PPI 8155 Ejercicios Ejercicios Ejercicios Ejercicios Un paseo por Lanzarote Un paseo por Lanzarote Un paseo por Lanzarote Un paseo por Lanzarote
48

Microprocesador 8085 (8) INTEL

Mar 12, 2016

Download

Documents

Entradas y salidas utilizando el PPI 8155. Sus características fundamendamentales, modo de interconexión y ejemplos prácticos
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Microprocesador 8085 (8)  INTEL

Transferencia de datos al exteriorTransferencia de datos al exteriorTransferencia de datos al exteriorTransferencia de datos al exterior Descripción física del PPI 8155Descripción física del PPI 8155Descripción física del PPI 8155Descripción física del PPI 8155

Descripción funcional del PPI 8155Descripción funcional del PPI 8155Descripción funcional del PPI 8155Descripción funcional del PPI 8155 Interconexión del 8155 con el 8085Interconexión del 8155 con el 8085Interconexión del 8155 con el 8085Interconexión del 8155 con el 8085 Ejemplos de E/S con el PPI 8155Ejemplos de E/S con el PPI 8155Ejemplos de E/S con el PPI 8155Ejemplos de E/S con el PPI 8155

EjerciciosEjerciciosEjerciciosEjercicios

Un paseo por LanzaroteUn paseo por LanzaroteUn paseo por LanzaroteUn paseo por Lanzarote

Page 2: Microprocesador 8085 (8)  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

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 (8)  INTEL
Page 4: Microprocesador 8085 (8)  INTEL

8. TRANSFERENCIA DE DATOS AL EXTERIOR.

Ya hemos hablado en el tema anterior sobre la necesidad de disponer en nuestro sistema de un medio de comunicación con el exterior, es decir disponer en nuestra tarjeta de un componente que nos permita intercambiar información. Se ha visto también cómo se realizan distintas operaciones de entrada/salida con un componente especializado en dichas funciones.

En este tema se tratará sobre otro de los componentes de la casa INTEL, específicamente

diseñados para este tipo de comunicaciones y que es de funcionamiento bastante similar al tratado en el tema anterior, aunque con sus características propias.

Se trata en este caso del PPI 8155, un dispositivo diseñado para trabajar con microprocesadores

INTEL, que dispone de tres puertos de comunicaciones entrada/salida y una memoria RAM interna. Todos los puntos que trataremos a continuación tendrán como referencia el diagrama de bloques

representado en la FIG.8A. Como podemos apreciar la fuente de alimentación genera todas las tensiones necesarias para alimentar tanto al sistema básico como al PPI 8155 que pretendemos acoplar y a los distintos elementos que constituirán los elementos a gobernar. El PPI 8155 será controlado directamente por nuestro sistema básico, mediante un conjunto de líneas bidireccionales y las cargas serán manejadas por los puertos de entrada/salida del periférico programable.

En los puntos que siguen, se realizará: • Una descripción física de dicho componente, mediante la cual se dará a conocer la misión de

todos sus terminales. • Un estudio sobre su constitución interna, especificando los bloques en los que se divide y la

función de cada uno de ellos. • La descripción del método de programación y sus modos de trabajo. • Un análisis sobre la forma de conectarlo al microprocesador 8085A. • Un conjunto de ejemplos prácticos de aplicación que nos permitirán iniciarnos en la

programación del 8155 y el manejo tanto de sus puertos de entrada/salida como de sus 256 octetos de memoria RAM interna.

SISTEMA BASICO DEL 8085

FUENTE DE ALIMENTACION

PPI 8155

C1

C2

C3

FIG.8A

Page 5: Microprocesador 8085 (8)  INTEL

8.1 DESCRIPCIÓN FÍSICA DEL PPI 8155. El 8155 es un periférico programable de interface de la familia INTEL diseñado para acoplarse

directamente al bus de datos del microprocesador 8085. Se presenta en un encapsulado (dual in line) de 40 patillas, y emplea una alimentación única de +5V filtrados y estabilizados. Las características eléctricas básicas pueden encontrarse en la bibliografía proporcionada por el fabricante, así como los diagramas de tiempos de ciclos de lectura y escritura.

Debemos destacar además, que existe otro componente de entrada/salida denominado 8156, cuya

constitución es prácticamente similar a la del 8155. La única diferencia funcional entre ambos componentes, consiste en la activación de la señal de selección de chip. Mientras en el 8155 se activa con nivel lógico BAJO, en el 8156 se activa con nivel lógico ALTO. Por consiguiente, todo lo que se expone seguidamente, es válido para ambos componentes.

Disponen de 22 terminales para comunicación de entrada/salida, 8 líneas que constituyen el bus

de datos/direcciones, una línea de entrada de reloj y una línea de salida de un temporizador programable, así como diversas líneas para las necesarias señales de control de los dispositivos.

En la FIG.81A puede verse su configuración física, y a continuación se proporciona una

descripción detallada de la misión de cada una de las patillas. • 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 PC5. Terminales correspondientes a 6 líneas de entrada/salida del puerto C. Constituyen un byte de datos de entrada/salida, siendo PC0 el bit de más bajo orden y PC5 el bit de más alto orden. Como podemos apreciar, este puerto solamente transmite palabras de 6 bits, por lo que cuando saquemos un dato del acumulador hacia el exterior a través del puerto C, saldrán los 6 bits de menor peso, perdiéndose los bits de orden 6 y 7 del acumulador. Un proceso similar ocurre cuando se realice una operación de lectura a través de este puerto.

8155

PC3 1 40 Vcc PC4 2 39 PC2

TIMER IN 3 38 PC1 RESET 4 37 PC0

PC5 5 36 PB7 TIMER OUT 6 35 PB6

IO/M 7 34 PB5 CS 8 33 PB4 RD 9 32 PB3 WR 10 31 PB2

ALE 11 30 PB1 AD0 12 29 PB0 AD1 13 28 PA7

GND 20 21 PA0

AD2 14 27 PA6 AD3 15 26 PA5 AD4 16 25 PA4 AD5 17 24 PA3 AD6 18 23 PA2 AD7 19 22 PA1

FIG.81A

Page 6: Microprocesador 8085 (8)  INTEL

• Patilla Vcc. Terminal de alimentación (+5V). Debe ser una tensión perfectamente filtrada y estabilizada. Es conveniente colocar entre este terminal y masa un condensador de desacoplo.

• Patilla GND. Potencial de referencia o masa de alimentación. • Patilla TIMER IN. Entrada del contador programable interno. Es la entrada de reloj (clock)

que servirá como frecuencia base para el funcionamiento del timer interno. • Patilla TIMER OUT. Salida del contador programable interno. • Patilla RESET. Es la entrada de control mediante la cual podemos reinicializar el dispositivo.

Es activa a nivel ALTO. (Al provocar un RESET, las tres puertas quedan programadas como entradas).

• Patilla IO/M. Se trata de una señal de control que nos permite diferenciar entre un acceso a un puerto de entrada/salida (con 1) o a una dirección de memoria RAM (con 0).

• Patilla CS. Es una entrada de control que permite la selección de chip. Es activa con nivel lógico BAJO para el 8155. (Es activa con nivel lógico ALTO para el 8156).

• Patilla RD. Es una señal de control del 8155 (8156) que será conectada directamente a la señal RD del microprocesador 8085A. Es activa a nivel lógico BAJO y en ese momento produce la lectura de un puerto o de una dirección de memoria RAM del 8155. Cuando efectuemos una operación de lectura sobre el 8155, estaremos transfiriendo al acumulador del microprocesador, el contenido del Registro de Estado o la información presente en alguno de los puertos de entrada/salida o algún dato de la memoria RAM del 8155

• Patilla WR. Es una señal de control del 8155 (8156) que será conectada directamente a la señal WR del microprocesador 8085A. Es activa a nivel lógico BAJO y en ese momento produce la escritura en un puerto o en una dirección de memoria RAM del 8155. Cuando efectuemos una operación de escritura sobre el 8155, estaremos transfiriendo información desde el acumulador del microprocesador, a la memoria RAM del 8155 o a un puerto de entrada/salida o al Registro de Estado del 8155..

Page 7: Microprocesador 8085 (8)  INTEL

• Patilla ALE. Es una entrada de control que debe ser conectada directamente a la señal ALE del microprocesador 8085A. Mediante un impulso en esta patilla, el 8155 diferencia o discrimina la dirección del dato, ya que ambos llegan por el mismo bus (el mismo conjunto de líneas). En otras palabras separa direcciones de datos.

• Patillas AD0 a AD7. Conjunto de 8 líneas que forman el bus multiplexado de datos y direcciones. A través de este bus pasamos los datos entre el microprocesador y el PPI 8155. El flujo de información es en ambos sentidos.

8.2 DESCRIPCIÓN FUNCIONAL DEL PPI 8155.

La constitución interna del 8155 puede dividirse en una serie de bloques que nos permitan una más fácil asimilación de los conceptos básicos que nos posibiliten comprender su funcionamiento de una forma rápida.

Esta serie de bloques funcionales, que pueden apreciarse en la FIG.82A, son básicamente: • Un bloque de entrada/salida compuesto por tres registros tampones o puertos de E/S, que permiten

intercambiar datos con el exterior en paralelo. Dispone de dos puertos de 8 bits (puerto A y puerto B) y un puerto de 6 bits (puerto C). Estos puertos son accesibles cuando la pastilla está seleccionada (CS=0) y cuando IO/M = 1. Pueden ser programados como entradas, como salidas o según procedimiento de intercambio. (Más adelante veremos su modo de programación).

• Un bloque de memoria RAM organizada en 256 palabras de 8 bits (octetos) que será seleccionada

cuando IO/M=0 y CS=0. • Una unidad de contador o timer integrado de 14 bits programable según cuatro modos distintos de

trabajo. • Un bloque de control de estado y mando que sincroniza todas las operaciones que puede realizar el

8155 mediante la programación adecuada por software.

CONTROL DE MANDO Y ESTADO

PUERTA A

PUERTA B

PUERTA C

PA0 PA7

PB0 PB7

PC0 PC5

DATOS

RAM

CONTADOR TEMPORIZADOR PROGRAMABLE

TIMER OUT TIMER IN

FIG.82A

ALE

RD

WR

AD0-AD7

CS

IO/M

RESET

REGISTRO DIRECCIO- NES

DIREC- CIONES

Page 8: Microprocesador 8085 (8)  INTEL

La utilización de las puertas se hace directamente a partir del microprocesador, utilizando la instrucción OUT addr, o la instrucción STA addr o cualquier otra de almacenamiento, siempre que "addr" seleccione el registro del puerto adecuado. Para efectuar la selección del puerto A, B o C adecuado en cada momento, la parte baja del bus de direcciones del microprocesador, debe presentar los siguientes valores:

Puerto A XXXX X001 Puerto B XXXX X010 Puerto C XXXX X011 (Los bits marcados con X, son valores indiferentes):

Si tenemos en cuenta que el puerto C solamente dispone de 6 bits, podremos concluir que serán extraídos del acumulador los 6 bits menos significativos.

Cada puerto del 8155 puede ser programado como entrada, para transferir datos desde el exterior hacia el microprocesador, o como salida, para enviar datos desde el microprocesador hacia el exterior del sistema. Como podemos apreciar, no existe la posibilidad de programar los bits de cada puerto de forma individual como entrada o salida, sino que serán todos entradas o todos salidas (para cada puerto).

Para programar los puertos del 8155 como entrada o como salida con o sin procedimiento de intercambio, es necesario especificar en qué “modo” se pretende utilizar. Esto se logra mediante la programación de un registro especializado denominado "Registro de Mando de Estado (C/E)". Este registro posee 8 bits y en virtud de los unos o ceros que coloquemos en él, los puertos quedarán programados de una forma u otra. Para introducir una determinada combinación en este registro debemos direccionarlo, siendo su código de acceso:

Page 9: Microprocesador 8085 (8)  INTEL

Registro Estado XXXX X000

Por tanto, antes de empezar a trabajar con él, debemos indicarle el modo de trabajo que vamos a emplear. El formato de instrucción de dicho registro es:

TM2 TM1 IEB IEA PC2 PC1 PB PA

A continuación se describe la función de cada bit:

Bit 0 (PA): Este bit programa el puerto A. Si PA=1 el puerto se utiliza como salida y si PA=0 el puerto se utiliza como entrada.

Bit 1 (PB): Este bit programa el puerto B. Si PB=1 el puerto se utiliza como salida y si PB=0

entonces se utiliza como entrada.

Bits 2 y 3 (PC1 y PC2): Estos dos bits programan el puerto C atendiendo a las combinaciones que se resumirán en la tabla siguiente:

PC2 PC1 MODO DE PUERTA C 0 0 MOD1 0 1 MOD3 1 0 MOD4 1 1 MOD2

La función de cada pin de la puerta C en cada uno de estos cuatro modos de trabajo enunciados es como se muestra en la siguiente tabla:

Pin MOD1 MOD2 MOD3 MOD4

PC0 entrada salida A INTR A INTR PC1 entrada salida A BF A BF PC2 entrada salida A STB A STB PC3 entrada salida salida B INTR PC4 entrada salida salida B BF PC5 entrada salida salida B STB siendo:

• INTR : Bit de mando cuya función es de requerimiento de interrupción. Nivel BAJO si está como entrada y nivel ALTO si está como salida.

• BF : Bit de mando cuya función es ser indicador de buffer completo, es decir, indica

si el dato a recibir está presente ya en el puerto para ser leido o si el dato ha sido sacado hacia el exterior por el puerto. Nivel ALTO tanto en entrada como en salida.

• STB : Bit de mando cuya función es de “entrada de control” tanto en modo entrada

como en modo salida.

Bit 4 (IEA): Si tenemos IEA=0 estamos ante una interrupción no autorizada para el puerto A. Si tenemos IEA=1, estamos ante una interrupción autorizada para el puerto A.

Bit 5 (IEB): Si tenemos IEB=0, estamos ante una interrupción no autorizada para el puerto B. Si tenemos IEB=1, estamos ante una interrupción autorizada para el puerto B.

Bits 6 y 7 (TM1 y TM2): Estos dos bits permiten la programación de un contador interno de 14 bits del 8155 (TIMER). Este contador posee cuatro modos o posibilidades de programación. Si colocamos

Page 10: Microprocesador 8085 (8)  INTEL

el valor 00 el contador no efectúa ninguna operación. Para cargar el valor de los 14 bits de este contador se dispone de dos registros a los cuales se accede con las direcciones:

Timer Low XXXX X100 Timer High XXXX X101

Su modo de operación puede ser programado en cualquier momento que se desee. Como base de tiempos puede emplearse cualquier señal de nivel TTL conectándola a la entrada de tiempos (TIMER IN). La salida del contador se obtiene en TIMER OUT.

Como se sabe, el control del Timer es conformado en el Comando de Estado (C/E) según los bits

TM1 y TM2 durante su programación de acuerdo a la siguiente tabla:

TM2 TM1 MODO DEL CONTADOR 0 0 No afecta al contador o timer 0 1 Alto a la cuenta del timer 1 0 Para la cuenta después de TC 1 1 Inicia la operación timer

Una vez programado C/E, el modo de operación es definido como sigue mediante la escritura de

dos palabras de 8 bits en Timer Low y Timer High:

Timer Low : T7 T6 T5 T4 T3 T2 T1 T0 Timer High: M2 M1 T13 T12 T11 T10 T9 T8

Los dos bits de más alto orden (M2 y M1) se utilizan para definir el modo definitivo de operación según la tabla siguiente:

M2 M1 OPERACION 0 0 ALTO al inicio y BAJO en la 2ª mitad de la cuenta 0 1 Onda cuadrada. Periodo = Duración de la cuenta. 1 0 Pulso simple de TC 1 1 Pulso simple de TC con autorrecarga.

El microcircuito 8155, para comunicarse con el exterior precisa también conocer el estado del

registro C/E, para lo cual deberá procederse a la lectura del mismo. Los 8 bits leídos son de hecho diferentes de los 8 bits definidos precedentemente, siendo por tanto C/E un registro doble. El formato de instrucción es como sigue:

XX TIMER INTE B B BF INTR B INTE A A BF INTR A

Para cada puerta se accede a los bits siguientes:

• Bit 7 (X): Bit de estado indiferente. • Bit 6 (TIMER): Define una interrupción del timer. Con un nivel ALTO bloquea el contador

y después de leído el registro resetea o inicia una nueva cuenta. • Bit5 (INTE B): Determina si el puerto B tiene una interrupción autorizada. Está autorizada

con un nivel lógico ALTO. • Bit 4 (B BF): Este bit nos indica si el puerto B tiene el buffer de entrada o salida completo.

Nos indica si el dato a recibir está presente ya en el puerto para ser leído, o bien si el dato ha sido sacado hacia el exterior por el puerto B.

• Bit 3 (INTR B): Es el bit de requerimiento de interrupción del puerto B. Está activo con nivel lógico ALTO.

Page 11: Microprocesador 8085 (8)  INTEL

• Bit 2 (INTE A): Idem al bit 5, pero referido al puerto A. • Bit 1 (A BF): Idem al bit 4, pero aplicado al puerto A. • Bit 0 (INTR A): Idem al bit 3, pero aplicado al puerto A.

Además de los tres puertos de entrada/salida y el Timer interno, sabemos que el 8155 (8156)

posee una capacidad de memoria RAM interna de 256 octetos (256X8 bits). A esta memoria podemos acceder en el momento que deseemos, sin más condición que la de seleccionar correctamente el dispositivo mediante su pin de selección CS y tener adecuadamente conectada la señal IO/M a la correspondiente del microprocesador. El acceso se conseguirá con una instrucción como STA, para escribir un dato por ejemplo.

8.3 INTERCONEXIÓN DEL 8155 CON EL 8085.

Es claro, por todo lo estudiado hasta el momento, que el PPI 8155 es un periférico programable cuya estructura permite su utilización directa con el microprocesador 8085.

El 8155 dispone de ciertas características que hacen posible su conexión al microprocesador de

dos formas claramente diferenciadas que veremos a continuación:

• POSIBILIDAD 1

Dada la estructura del 8155, no tendremos más que: - Unir las patillas AD0, AD1, AD2, AD3, AD4, AD5, AD6 y AD7 a las patillas

correspondientes del bus de datos/direcciones del microprocesador. - Unir la patilla de RESET del 8155 a la patilla RESET OUT del microprocesador, colocando

un condensador a masa de 15 pF.

- Conectar los terminales de masa (GND) y alimentación (Vcc) a la masa y alimentación del microprocesador (+5V). Es conveniente colocar un condensador a masa de 100 nF en el terminal de alimentación.

- Conectar las señales ALE, RD y WR del 8155 directamente a las patillas ALE, RD y WR

del microprocesador.

- La patilla TIMER IN del 8155 se conectará a la salida CLK OUT del microprocesador.

- La patilla CS (selección de chip) será controlada mediante una de las salidas libres del decodificador de direcciones. En este caso elegiremos la salida CS4.

- El terminal IO/M del 8155 se conecta directamente a la señal de control IO/M de idéntica

denominación del microprocesador.

- Finalmente dispondremos de 22 líneas para comunicarse con el exterior que forman los tres puertos de entrada/salida del 8155 y de una línea de salida de un contador o temporizador denominada TIMER OUT.

De esta forma tendremos perfectamente acoplado este nuevo componente a nuestro sistema.

En la FIG.83A puede verse el esquema de esta conexión. No nos queda ahora más que estudiar la forma de acceso al mismo, o lo que es igual, encontrar las direcciones de sus registros internos y puertos de entrada/salida. Para ello debemos darnos cuenta que para efectuar la selección del dispositivo hay que hacer activa la salida CS4 del decodificador de direcciones, es decir, hay que colocar en la parte alta del bus de direcciones (A15, A14, A13 y A12) el valor binario 1100, por lo que dicha combinación es obligatoria. Por tener conectada la señal IO/M del

Page 12: Microprocesador 8085 (8)  INTEL

microprocesador, para acceder a los puertos de E/S será necesario emplear las instrucciones OUT PORT e IN PORT para sacar o leer datos del exterior y como sabemos por el tema 4, (al emplear estas instrucciones el microprocesador entiende que deseamos tener acceso a una entrada/salida y automáticamente coloca un 1 lógico en la señal IO/M ) el operando PORT representa el puerto seleccionado. Tendremos por tanto que situar en los bits de dirección más bajos (A0, A1 y A2) los códigos correspondientes a los puertos A, B, C y el código correspondiente del registro de estado, según el elemento al que deseemos tener acceso. Ambas instrucciones (OUT e IN) tienen el mismo efecto sobre el bus de direcciones, duplican el valor asignado a PORT en dicho bus. Por ejemplo con la instrucción OUT B1H, sacaríamos hacia el exterior el contenido del acumulador, y en el bus de direcciones tendríamos el valor B1B1H. De modo similar con la instrucción IN B3H, cargaríamos un dato del exterior en el acumulador y tendríamos en el bus de direcciones el valor B3B3H.

Por tanto en nuestro caso, para acceder a los puertos y registro de estado del 8155

tendríamos que colocar como valor de PORT:

Puerto A PORT = C1H Puerto B PORT = C2H Puerto C PORT = C3H Timer Low PORT = C4H Timer High PORT = C5H Registro de estado PORT = C0H

Cuando deseemos trabajar con la memoria interna del 8155, no podremos utilizar la

instrucciones especiales OUT e IN, sino que habrá que emplear instrucciones normales como LDA o bien STA, según sea el caso, seguidas de la dirección de memoria a la que deseemos acceder, que en el caso que estamos tratando, serán los 256 octetos comprendidos entre las direcciones siguientes:

RAM 8155 C000H hasta C0FFH

21 PA0

22 PA1

23 PA2

24 PA3

27 PA4

25 PA5

26 PA6

28 PA7

PC0 37

PC1 38

PC2 39

PC3 1

PC4 2

PC5 5

AD0 12

AD1 13

AD2 14

AD3 15

AD4 16

AD5 17

AD6 18

AD7 19

29 PB0

30 PB1

31 PB2

32 PB3

33 PB4

34 PB5

35 PB6

36 PB7

6 TIMER OUT

4 RESET

ALE 11

WR 10

RD 9

IO/M 7

CS 8

TIMER IN 3

+5V 100 nF

40 20

FIG.83A

D0

D1

D2

D3

D4

D5

D6

D7

ALE

WR

RD

IO/M

CS4

CLK OUT

RESET OUT

15pF

PUERTO C PUERTO A

PUERTO B

BUS 8085 8155

Page 13: Microprocesador 8085 (8)  INTEL

• POSIBILIDAD 2.

La segunda posibilidad de conectar este integrado, es en todo similar a la anterior, la única diferencia radica en que la señal IO/M del 8155 no se conecta a la equivalente IO/M del microprocesador, sino que se controla mediante una línea del bus de direcciones. Nosotros elegiremos este método y conectaremos a dicha señal la línea de direcciones A10 (podríamos haber elegido otra). Para acceder a los puertos de entrada/salida o al registro de estado no podremos utilizar ahora las instrucciones OUT e IN puesto que no usamos la salida IO/M del microprocesador. En este caso, tanto para los puertos y registro de estado, como para las direcciones de RAM interna, se utilizarán instrucciones como STA o bien LDA seguidas de la dirección correspondiente.

Al igual que en el caso anterior, para seleccionar el chip debemos colocar en la parte

alta del bus de direcciones (A15, A14, A13, A12) el dato binario 1100. Además hay que colocar en la parte baja (A0, A1, A2) el código correspondiente al elemento que deseemos utilizar. Y finalmente, tendremos que colocar la línea de direcciones A10 a nivel lógico 1 para acceder a los puertos y registro de estado y a nivel lógico 0 para tener acceso a las posiciones de memoria RAM interna.

Por tanto las direcciones a considerar en nuestro caso serán: Puerto A C401H Puerto B C402H Puerto C C403H Timer Low C404H Timer High C405H Registro de estado C/E C400H RAM 8155 C000H hasta C0FFH En la FIG.83B puede verse la representación esquemática de esta conexión, que será la

que finalmente utilizaremos en nuestro sistema.

21 PA0

22 PA1

23 PA2

24 PA3

27 PA4

25 PA5

26 PA6

28 PA7

PC0 37

PC1 38

PC2 39

PC3 1

PC4 2

PC5 5

AD0 12

AD1 13

AD2 14

AD3 15

AD4 16

AD5 17

AD6 18

AD7 19

29 PB0

30 PB1

31 PB2

32 PB3

33 PB4

34 PB5

35 PB6

36 PB7

6 TIMER OUT

4 RESET

ALE 11

WR 10

RD 9

IO/M 7

CS 8

TIMER IN 3

+5V 100 nF

40 20

FIG.83B

D0

D1

D2

D3

D4

D5

D6

D7

ALE

WR

RD

A10

CS4

CLK OUT

RESET OUT

15pF

BUS 8085

PUERTO C

PUERTO A

PUERTO B

8155

Page 14: Microprocesador 8085 (8)  INTEL

8.4 EJEMPLOS DE E/S CON EL PPI 8155. A continuación se desarrollaran una serie de ejemplos prácticos que nos permitan tener una idea

clara de la forma de operar del PPI 8155. Como veremos se tratará de comenzar con las operaciones más simples para, poco a poco, aumentar su nivel de complejidad.

EJEMPLO 1. Realizar el control de 8 lámparas de 100 w, conectadas a tensión alterna de 220 V.

Con este ejercicio se pretende desarrollar un control (sin especificar el proceso de encendido y

apagado) sobre 8 elementos de carga (lámparas) que manejaremos mediante el puerto A (también lo podríamos hacer con el puerto B).

Como es lógico, debemos pensar en realizar el diseño del equipo necesario para controlar las lámparas a 220 V de c.a. Es decir, hay que disponer del hardware adecuado de potencia, que nos posibilite manejar las cargas finales. Una vez lo tengamos dispuesto, lo conectaremos al 8155 y se procederá a desarrollar el programa de control. En primer lugar, como elemento final de control en potencia, se empleará el triac TXAL228, que manejará directamente el encendido y apagado de las lámparas. Este triac, que se presenta en encapsulado TO 220 AB plástico, soporta una tensión entre ánodos de 400 V y un pico de corriente máxima de 90 A durante 20 ms como máximo. La corriente máxima a la que debe ser sometido el terminal de puerta está alrededor de los 50 mA y la temperatura que aguanta la juntura estará próxima a los 100 ºC Al tratarse de una carga resistiva y de relativamente baja

Page 15: Microprocesador 8085 (8)  INTEL

potencia, no necesitaremos circuitos de control y protección añadidos. Por supuesto, el triac irá montado sobre un disipador de calor que le permita refrigerar su estado térmico interno. El terminal de control del triac será gobernado mediante un acoplador óptico denominado MOC3041, que se presenta en un encapsulado dual in line con 6 terminales de conexión o patillas. Su distribución y esquema equivalente podemos verlo en la FIG.84A. Como podemos apreciar las patillas 3 y 5 son inactivas, ya que no tienen conexión y por tanto carecen de función alguna. Los terminales 1 y 2 son el ánodo y cátodo del foto-diodo emisor interno, mientras que los terminales 6 y 4, son los terminales accesibles del receptor, en este caso constituido por un triac fotosensible. Cuando se hace pasar una corriente por el emisor, éste emite una señal que incide sobre el receptor, haciendo que pase al estado de conducción. Si el emisor está en reposo, el receptor se comporta como un circuito abierto. La misión fundamental del optoacoplador es separar la tensión alterna de 220 V que se emplea para las lámparas, de la tensión de alimentación de las tarjetas que constituyen el equipo. Además reducen al mínimo las interferencias por ruidos eléctricos que se puedan producir en los procesos de conmutación de los triacs.

La FIG.84B, nos muestra la forma de conectar el acoplador óptico al triac (elemento de potencia). Como podemos apreciar, entre los terminales de salida del triac se sitúa una red RC cuya misión es proteger al semiconductor de potencia, de las posibles sobrecargas que se puedan producir por las corrientes inductivas de la carga. Sin embargo debemos recordar que en nuestro caso, serán mínimas, debido a que la carga es fundamentalmente resistiva. En esta figura podemos además observar cómo están perfectamente separadas las partes de alta tensión de las de baja tensión. El terminal de control será llevado directamente a una línea de salida del puerto A del 8155. Cuando en esta línea de control se presente un uno lógico o nivel ALTO, se establecerá una circulación de corriente a través del diodo fotoemisor , que provocará la excitación del receptor (triac fotosensible) que se hará conductor permitiendo el paso de la corriente y provocando con ello la excitación del triac de potencia, que a su vez, permitirá el paso de corriente, haciendo que se encienda la lámpara que lleve conectada como carga. (Debemos recordar que el triac se desactiva automáticamente cada vez que la corriente pasa por cero, es decir, en cada semiciclo, por lo que es necesario redisparar el triac en cada semionda o bien mantenerlo con la señal de control activada durante el tiempo que consideremos oportuno).

K1 C2

SC C1

A1 MOC3041 SC

FIG.84A

1 6

2 4

220V

+5V MOC3041

FIG.84B

R1 220

R2 56

R3 1K2

LAMPARA

R4 100

C1 0’1uF 250V

TXAL228

CONTROL

ULN2803

Page 16: Microprocesador 8085 (8)  INTEL

Finalmente, si deseamos controlar ocho unidades u ocho lámparas, deberemos contar con ocho bloques como el anterior, obteniendo de este modo el esquema definitivo de la FIG.84C. En ella puede verse cómo todas las líneas de control son gobernadas por las líneas del puerto A del 8155, de tal forma que la línea PA0 controla la lámpara L0, PA1 controla L1, PA2 controla L2, etc. Por tanto, según este esquema final, si deseamos encender una lámpara cualquiera, por ejemplo L3, tendremos que sacar por la línea PA3 del 8155 un uno lógico, es decir, un nivel ALTO. Si deseamos tener iluminadas las lámparas L1, L3 y L5, tendremos que sacar los correspondientes unos lógicos por las líneas PA1, PA3 y PA5 (por el resto de las líneas del puerto A sacaremos niveles BAJOS). Finalmente, insistir en la necesidad de dotar a los triacs de refrigeradores que permitan evacuar de la forma más apropiada y rápida las pérdidas de potencia producidas por calor durante su funcionamiento. Dichos refrigeradores serán construidos de aluminio, material de muy baja resistencia térmica. El contacto entre el disipador y el propio triac debe ser lo más perfecto posible, por lo que, para mejorarlo, puede emplearse una “pasta” de unión especialmente fabricada para este propósito. Al trabajar directamente con la alimentación de red, es muy importante fijarse en que no queden cables descubiertos de modo que puedan producirse contactos no deseados. Las partes metálicas de los chasis deben conectarse sólidamente a tierra. Debe tenerse sumo cuidado en el manejo de estos circuitos de potencia ya que al margen de los posibles accidentes personales nunca deseados, pueden producirse daños irreparables en los circuitos de nuestro sistema de control.

+5V

MOC3041

220

TXAL228

1K2

56 0’1uF

100

1

2

3

BLOQUE A

1 3 2 L0 220V

3 2 L1 220V

3 2 L2 220V

3 2 L3 220V

3 2 L4 220V

3 2 L5 220V

3 2 L6 220V

3 2 L7 220V

1

1

1

1

1

1

1

A

A

A

A

A

A

A

A

220

220

220

220

220

220

220

ULN2803

PA0 1 E0 S0 18

PA1 2 E1 S1 17

PA2 3 E2 S2 16

PA3 4 E3 S3 15

PA4 5 E4 S4 14

PA5 6 E5 S5 13

PA6 7 E6 S6 12

PA7 8 E7 S7 11

9 10

+5V

FIG.84C

Page 17: Microprocesador 8085 (8)  INTEL

Finalizado el proceso de diseño del hardware de control, pasamos a realizar el diseño del software que nos permitirá, mediante nuestro sistema basado en el microprocesador 8085 y apoyándonos en el PPI 8155, manejar el encendido y apagado de las ocho lámparas.

En el enunciado no se nos indica el proceso o secuencia de control de las lámparas, por tanto podrá ser aquella que nosotros deseemos. Iniciaremos el diseño del programa de control, con el siguiente pseudocódigo: NOMBRE: LAMPARA FUNCION: Controla 8 lámparas PRECONDICIONES: Ninguna POSTCONDICIONES: Ninguna Iniciar el sistema Apagar lámparas B=10 MIENTRAS B>0 Activar solo lámparas pares Temporizar Activar solo lámparas impares Temporizar B=B-1 FIN DE MIENTRAS B=20 MIENTRAS B>0 Apagar todas las lámparas Temporizar Activar todas las lámparas Temporizar B=B-1 FIN DE MIENTRAS B=8 MIENTRAS B>0 Encendido secuencial B=B-1 FIN DE MIENTRAS FIN del programa Como podemos ver, nuestro programa consistirá básicamente en la realización de tres procesos claramente diferenciados o separados en tres bucles.

El primero consiste en realizar un encendido y apagado alternativo de las lámparas, de forma que en un instante dado estén encendidas L0, L2, L4 y L6, mientras el resto permanecen apagadas. Un tiempo más tarde (tiempo determinado por una subrutina de temporización) estarán encendidas L1, L3, L5 y L7, permaneciendo apagadas el resto durante el mismo intervalo de tiempo. Este proceso se repetirá un número determinado de veces que viene impuesto por el valor que se de al contador B (en este caso B=10).

El segundo proceso o bucle consiste en el encendido y apagado de todas las lámparas de forma

simultánea. Proceso que será realizado un número de veces determinado por el nuevo valor dado al contador B (en este caso B=20). El tiempo que las lámparas deben permanecer encendidas y apagadas, viene marcado por la subrutina de temporización.

Finalmente, el tercer bucle, pretende realizar el encendido secuencial de las ocho lámparas, es

decir, partiendo del estado inicial en que todas las lámparas están apagadas, se iluminará en primer lugar L0, a continuación se iluminarán L0 y L1, luego L0, L1 y L2, y así sucesivamente hasta tener encendidas todas las lámparas. El ritmo de encendido vendrá marcado por la subrutina de temporización. Este proceso se repetirá el número de veces que nos marque el valor asignado al contador B (en este caso B=8).

Page 18: Microprocesador 8085 (8)  INTEL

Se procederá ahora a expresar con más detalle todos los pasos mostrados en el pseudocódigo

anterior mediante un refinado del mismo. NOMBRE: LAMPARA FUNCION: Controla 8 lámparas PRECONDICIONES: Ninguna POSTCONDICIONES: Ninguna Prohibir Interrupciones

Punterizar la Pila Programar PPI 8155

Apagar lámparas B=10 MIENTRAS B>0 Sacar al puerto A el dato 55H Temporizar Sacar al puerto A el dato AAH Temporizar B=B-1 FIN DE MIENTRAS B=20 MIENTRAS B>0 Sacar al puerto A el dato 00H Temporizar Sacar al puerto A el dato FFH Temporizar B=B-1 FIN DE MIENTRAS B=8 MIENTRAS B>0 Dato=0

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

El tercer bucle ha sido construido con otro bucle interno. Es este último, el que nos permite llevar a cabo el encendido secuencial, mientras que el bucle exterior nos sirve para realizar el encendido secuencial un determinado número de veces marcado por el contador B. El desarrollo del bucle interno es similar al bucle mostrado en el ejercicio 2 del tema anterior. A continuación, en la FIG.84D, se muestra el diagrama de flujo correspondiente a este pseudocódigo.

Page 19: Microprocesador 8085 (8)  INTEL

INICIO

Prohibir interrupciones Punterizar la pila Programar el PPI 8155

Apagar lámparas

B=10

B>0

PA=55H

Temporizar

PA=AAH

Temporizar

B=B-1

B=20

NO

SI

B>0 NO

SI

PA=00H

Temporizar

PA=FFH

Temporizar

B=B-1

B=8

B>0

SI

NO

FIN Dato=0 C=8

C>0

SI

NO

CARRY=1 Rotar Dato izquierda PA=Dato

Temporizar

C=C-1 B=B-1

FIG.84D

SALT1

SALT2

SALT3

SALT4

SALT5

SALT6

SALT7

Page 20: Microprocesador 8085 (8)  INTEL

A continuación pasamos a desarrollar el paso a ensamblador del pseudocódigo preparado, obteniendo el programa definitivo de control. 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : LAMPARA.A SM OUTPUT FILENAME : LAMPARA.O BJ 1 ;------------------- ------------- 2 ;NOMBRE : LAMPARA 3 ;FUNCION : Control d e 8 lámparas 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ------------- 7 ;------------------- ------------- 8 ;PARAMETROS PARA EL 8155 9 ;------------------- ------------- 10 01 C4 PA81 EQU C401 H 11 02 C4 PB81 EQU C402 H 12 03 C4 PC81 EQU C403 H 13 00 C4 REES81 EQU C400 H 14 ;------------------- ------------- 15 ;------------------- ------------- 16 ;PARAMETROS PUNTERO DE PILA 17 ;------------------- ------------- 18 FF 87 PPILA EQU 87FF H 19 ;------------------- ------------- 20 0000 LAMPARA: 21 0000 F3 DI 22 0001 21 FF 87 LXI H,PPILA 23 0004 F9 SPHL 24 0005 3E 0F MVI A,0FH 25 0007 32 00 C4 STA REES81 26 000A 3E 00 MVI A,00H 27 000C 32 01 C4 STA PA81 28 000F 06 0A BUC1 MVI B,10 29 0011 78 SALT1 MOV A,B 30 0012 A7 ANA A 31 0013 CA 2A 00 JZ BUC2 32 0016 3E 55 MVI A,55H 33 0018 32 01 C4 STA PA81 34 001B CD 68 00 CALL TEMPO 35 001E 3E AA MVI A,AAH 36 0020 32 01 C4 STA PA81 37 0023 CD 68 00 CALL TEMPO 38 0026 05 DCR B 39 0027 C3 11 00 JMP SALT1 40 002A 06 14 BUC2 MVI B,20 41 002C 78 SALT2 MOV A,B 42 002D A7 ANA A 43 002E CA 45 00 JZ BUC3 44 0031 3E 00 MVI A,00H 45 0033 32 01 C4 STA PA81 46 0036 CD 68 00 CALL TEMPO 47 0039 3E FF MVI A,FFH 48 003B 32 01 C4 STA PA81

Page 21: Microprocesador 8085 (8)  INTEL

49 003E CD 68 00 CALL TEMPO 50 0041 05 DCR B 51 0042 C3 2C 00 JMP SALT2 52 0045 06 08 BUC3 MVI B,8 53 0047 78 SALT3 MOV A,B 54 0048 A7 ANA A 55 0049 CA 67 00 JZ FIN 56 004C 0E 08 MVI C,8 57 004E 16 00 MVI D,00H 58 0050 79 SALT5 MOV A,C 59 0051 A7 ANA A 60 0052 CA 63 00 JZ SALT4 61 0055 37 STC 62 0056 7A MOV A,D 63 0057 17 RAL 64 0058 32 01 C4 STA PA81 65 005B CD 68 00 CALL TEMPO 66 005E 57 MOV D,A 67 005F 0D DCR C 68 0060 C3 50 00 JMP SALT5 69 0063 05 SALT4 DCR B 70 0064 C3 47 00 JMP SALT3 71 0067 76 FIN HLT 72 73 ;------------------- ------------- 74 ;NOMBRE: TEMPO 75 ;FUNCION: Temporizac ión 76 ;PRECONDICIONES: Nin guna 77 ;POSTCONDICIONES: Ni nguna 78 ;------------------- ------------- 79 0068 TEMPO: 80 0068 F5 PUSH PSW 81 0069 D5 PUSH D 82 006A C5 PUSH B 83 006B 11 FF 0F LXI D,0FFFH 84 006E 1B TE1 DCX D 85 006F 7A MOV A,D 86 0070 B3 ORA E 87 0071 00 NOP 88 0072 00 NOP 89 0073 C2 6E 00 JNZ TE1 90 0076 C1 POP B 91 0077 D1 POP D 92 0078 F1 POP PSW 93 0079 C9 RET 94 95 96 007A END ******* C R O S S R E F E R E N C E T A B L E ********* BUC1 000F : BUC2 002A : 31 BUC3 0045 : 43 FIN 0067 : 55 LAMPARA 0000 : PA81 = C401 : 27 33 36 45 48 64 PB81 = C402 : PC81 = C403 : PPILA = 87FF : 22

Page 22: Microprocesador 8085 (8)  INTEL

REES81 = C400 : 25 SALT1 0011 : 39 SALT2 002C : 51 SALT3 0047 : 70 SALT4 0063 : 60 SALT5 0050 : 68 TE1 006E : 89 TEMPO 0068 : 34 37 46 49 65 LINES ASSEMBLED : 96 ASSEMB LY ERRORS : 0

En el desarrollo de este programa podemos apreciar en las primeras líneas la definición del proceso (NOMBRE, FUNCION, ...) son líneas de comentarios que no intervienen para nada en el programa. En las líneas 10, 11, 12 y 13 se definen los parámetros de acceso al periférico programable PPI

Page 23: Microprocesador 8085 (8)  INTEL

8155 y en la línea 18 se define el puntero de la pila (memoria RAM donde se almacenaran datos temporalmente). El programa comenzará efectivamente en la línea 21, donde se inicializa el sistema. En la línea 25 vemos como se carga el dato 0FH en el registro de estado del 8155 al objeto de programar sus tres puertos como salidas. Desde la línea 28 a la 39 se ejecuta el primer bucle del programa, de la 40 hasta la 51 el segundo bucle y desde la 52 hasta la 70 el tercer bucle. Si examinamos el primero de ellos nos daremos cuenta que es en las líneas 29, 30 y 31 cuando se analiza la condición del bucle y en caso de que el flag consultado este accionado saltaremos a ejecutar el bucle siguiente (BUC2) en la dirección 002AH. Se procede de modo idéntico en los otros dos bucles. La subrutina TEMPO (que nos proporciona una temporización o tiempo de espera) no precisa ningún dato de entrada y vemos que una vez ejecutada no modifica ningún registro ni dirección de memoria (de lo contrario vendría especificado en las PRECONDICIONES y en las POSTCONDICIONES). Se limita a ejecutar un bucle un determinado número de veces que vendrá impuesto por el valor cargado en el registro par DE (en este caso DE=0FFFH). En esta subrutina guardamos en la pila varios registros pares mediante las instrucciones PUSH y volvemos a recuperar sus contenidos mediante las correspondientes instrucciones POP siempre ejecutadas en orden inverso. EJEMPLO 2 Realizar el diseño de software y hardware necesarios para controlar 8 lámparas de 12 V y 8 sensores de efecto Hall, de modo que mientras permanezca activado un sensor cualquiera, se ilumine su lámpara correspondiente. Es decir, si se activa S2 se iluminará L2. Este ejercicio es similar al desarrollado en el tema anterior (ejercicio 3). En este caso emplearemos como elementos de entrada, detectores magnéticos de efecto Hall. En primer lugar hablaremos de forma sucinta sobre este tipo de sensores para tener una pequeña idea de su forma de trabajo. El efecto hall fue descubierto por Edwin Hall y se apoya en la fuerza de Lorentz, por medio de la cual sabemos que si aplicamos en campo eléctrico E a un material semiconductor y al mismo tiempo hacemos incidir sobre él de forma perpendicular un campo electromagnético, actuará sobre las cargas en movimiento una fuerza F que las desplaza en el interior del semiconductor produciéndose una concentración de portadores que nos generará un nuevo campo eléctrico transversal Ez. Este campo eléctrico alcanza un valor tal que compensa la fuerza F. La intensidad del campo eléctrico transversal da lugar a una tensión llamada tensión de hall. Este efecto aparece en cualquier conductor, pero su efecto no resultó aprovechable hasta que no se descubrió la movilidad de los electrones en determinadas uniones semiconductoras, en las que el flujo de corriente es creado por pocos electrones muy rápidos. Por tanto podemos decir que el efecto de un campo electromagnético (producido por ejemplo por un imán) sobre una corriente eléctrica da lugar a una tensión. Estamos por tanto en presencia de un pequeño generador.

Los generadores hall, pueden construirse de dos modos diferentes, teniendo en cuenta además que, según la aplicación prevista, las placas semiconductoras tendrán formas diversas: 1. Obteniendo la capa semiconductora de barras fundidas, pulidas y grabadas al ácido, con un espesor

aproximado de 5 a 100 micras y colocándola después sobre una placa portadora mediante una resina epoxi de 1 micra.

2. Depositando la placa semiconductora sobre la placa portadora mediante un procedimiento de evaporación metálica.

Page 24: Microprocesador 8085 (8)  INTEL

En este tipo de semiconductores suele definirse la constante del material, como dependiente de la

temperatura, y se llama coeficiente de hall “Rh”.

El campo magnético necesario para generar una tensión proporcional está limitado a un intervalo determinado y aunque se sobrepase dicho intervalo el semiconductor no resulta dañado, mientras que la corriente de excitación será aquella que no sobrepase la máxima temperatura admisible para el semiconductor (unos 110ºC).

En las hojas de datos de los fabricantes se indica la tensión de hall en vacío como aquella que se genera cuando el semiconductor esta descargado, para una corriente nominal de excitación y un campo magnético de excitación indicados.

Entre la gran variedad de elementos fabricados con este tipo de dispositivos encontramos los

sensores UGN 3140, elementos que convenientemente polarizados al ser excitados por un imán producen una tensión positiva. En la FIG.84F vemos la forma de conectarlos en nuestro sistema de prueba.

Establecido de este modo el Hardware a emplear, pasamos a desarrollar el software de control.

Procedemos en primer lugar a trabajar con el pseudocódigo proponiendo el siguiente proceso: NOMBRE: Hall FUNCION: Detectar sensores hall PRECONDICION: Ninguna POSTCONDICION: Ninguna Iniciar sistema Leer sensores Preparar dato de lámparas Sacar dato de lámparas Volver a leer sensores (paso 2) Fin de programa Como podemos apreciar este ejemplo es en todo similar al desarrollado en el ejercicio 3 del tema

anterior.

B

Vhall

i

semiconductor Campo magnético

Corriente excitación

Page 25: Microprocesador 8085 (8)  INTEL

Un nuevo paso de refinado nos dará la siguiente propuesta: NOMBRE: Hall FUNCION: Detectar sensores Hall PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna.

Prohibir interrupciones Punterizar la pila Programar el PPI 8155 Apagar las lámparas Leer Dato de PB81 Tratar el Dato leído Sacar Dato al PA81 Volver a Leer Dato de PB81 (paso 5) Final del programa

8155

21 PA0 E0 1 18 S0 L0

22 PA1 E1 2 17 S1 L1

23 PA2 E2 3 16 S2 L2

24 PA3 E3 4 15 S3 L3

25 PA4 E4 5 14 S4 L4

26 PA5 E5 6 13 S5 L5

27 PA6 E6 7 12 S6 L6

28 PA7 E7 8 11 S7 L7

+12V

+5V

29 PB0 UGN 3140

30 PB1 UGN 3140

32 PB2 UGN 3140

33 PB3 UGN 3140

34 PB4 UGN 3140

35 PB5 UGN 3140

36 PB6 UGN 3140

37 PB7 UGN 3140

FIG.84F

Page 26: Microprocesador 8085 (8)  INTEL

Finalmente el programa resultante en pseudocódigo, realizando un nuevo paso de refinado será: NOMBRE: Hall FUNCION: Detectar sensores Hall PRECONDICIONES: Ninguna. POSTCONDICIONES: Ninguna. Prohibir interrupciones

Punterizar la pila Programar el PPI 8155 Apagar las lámparas Leer Dato de PB81 Sacar Dato al PA81 Volver a Leer Dato de PB81 (paso 5) Final del programa En este caso no representaremos el diagrama de flujo correspondiente, aunque como puede verse por el desarrollo realizado hasta el momento será similar al presentado en el ejercicio 3 del tema 7. El programa en ensamblador resultante será: 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : HALL.ASM OUTPUT FILENAME : HALL.OBJ 1 ;------------------- ----------------------- 2 ;NOMBRE : HALL 3 ;FUNCION : Detectar sensores Hall 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ----------------------- 7 8 ;------------------- ----------------------- 9 ;PARAMETROS PARA EL 8155 10 ;------------------- ----------------------- 11 00 B0 PA81 EQU C401 H ;Puerto A del 8155 12 01 B0 PB81 EQU C402 H ;Puerto B del 8155 13 02 B0 PC81 EQU C403 H ;Puerto C del 8155 14 03 B0 REES81 EQU C400 H ;Reg. Estado 8155 15 ;------------------- ----------------------- 16 17 ;------------------- ----------------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ----------------------- 20 FF 87 PPILA EQU 87FF H ;Puntero pila RAM 21 ;------------------- ----------------------- 22 0000 HALL: 23 0000 F3 DI 24 0001 21 FF 87 LXI H,PPILA 25 0004 F9 SPHL 26 0005 3E 82 MVI A,0DH 27 0007 32 03 B0 STA REES81 28 000A 3E 00 MVI A,00H 29 000C 32 00 B0 STA PA81 30 000F 3A 01 B0 LEER LDA PB81 31 0012 00 NOP 32 0013 32 00 B0 STA PA81 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 PA81 = C401 PB81 = C402 PC81 = C403 PPILA = 87FF HALL 0000 REES81 = C 400 LINES ASSEMBLED : 35 ASSEMB LY ERRORS : 0

Page 27: Microprocesador 8085 (8)  INTEL

Como podemos apreciar, en este caso no se ha utilizado la pila para guardar ningún dato, aunque se ha punterizado. También podíamos haber empleado la RAM del 8155 y punterizar la pila a la dirección C0FFH.

EJEMPLO 3

Realizar el control de un grupo de cuatro displays de siete segmentos, de modo que se representen en ellos los números del 0000 al 9999. Se trata en este caso de desarrollar un trabajo de diseño del hardware de control de los cuatro elementos pedidos y posteriormente, después de conectarlo a nuestro sistema a través del 8155, realizar el software que lleve a cabo el control pedido. En primer lugar realizaremos una breve descripción de los elementos o componentes que vamos a utilizar para construir la tarjeta de aplicación mostrada en la FIG.84G. Los elementos finales a controlar, es decir, los displays de siete segmentos serán los modelos LTS7751R. Se trata de unos sencillos indicadores luminosos construidos a base de diodos luminiscentes de color rojo que nos servirán para visualizar un valor en el sistema decimal. Están formados por siete segmentos individuales (SA, SB, SC, SD, SE, SF, SG) con los que se pueden construir todos los dígitos del 0 al 9. Como elemento básico, transformador de código binario al código necesario para excitar los displays, se utilizará el circuito integrado 74LS47. Se trata de un decodificador/excitador BCD a 7 segmentos con salida en colector abierto. El circuito tiene como entradas las cuatro líneas A, B, C y D que aceptan código BCD que es decodificado y tratado para excitar convenientemente con sus salidas un display de siete segmentos. Situaremos en serie con cada salida una resistencia de 470 ohmios para limitar la corriente que circula por los leds de los displays.

SA 1

SB 13

SC 10

SD 8

SE 5

SF 2

SG 11

DP 6

3 14

ANODO

SA 1

SB 13

SC 10

SD 8

SE 5

SF 2

SG 11

DP 6

3 14

ANODO

SA 1

SB 13

SC 10

SD 8

SE 5

SF 2

SG 11

DP 6

3 14

ANODO

SA 1

SB 13

SC 10

SD 8

SE 5

SF 2

DP 6

3 14

ANODO

DIG4 DIG1 DIG2 DIG3

IN1 1 18 DIG1

IN2 2 17 DIG2

IN3 3 16 DIG3

IN4 4 15 DIG4

IN5 5 14 DIG5

IN6 6 13 DIG6

IN7 7 12 DIG7

IN8 8 11 DIG8

UDN 2580 A

+5V

SA 13 7 A PA0

SB 12 1 B PA1

SC 11 2 C PA2

SD 10 6 D PA3

SE 9 3 LT

SF 15 5 RBI

SG 14 4 BI

470R SERIE

74LS47

+5V

FIG.84G

+5V

PB0

PB1

PB2

PB3

PB4

PB5

PB6

PB7

Page 28: Microprocesador 8085 (8)  INTEL

Como podemos observar en la FIG.84G, las salidas del decodificador atacan a los cuatro displays al mismo tiempo, por lo que tendremos que realizar un proceso de selección para indicar a cual de los cuatro displays se dirige la información en cada instante. Con este objetivo intercalamos el UDN2580A que dispone de ocho líneas inversoras individuales, aunque en este caso solamente emplearemos cuatro (una para cada display).

Esta tarjeta será controlada mediante el 8155, con los puertos A (PA0, Pa1, PA2, PA3) y B (PB0,

PB1, PB2, PB3). El proceso a seguir para sacar información hacia los displays será el siguiente: Se saca a través del puerto A el dato en BCD que deseemos situar en el display de las unidades y por el puerto B seleccionamos mediante un 0 lógico la línea del display que ocupa el lugar de las unidades (DIG1). Se mantiene esta situación unos instantes y a continuación retiramos la selección del dígito de unidades, colocamos en el puerto A la información para el dígito de las decenas y seleccionamos dicho dígito a través del puerto B mediante un 0 lógico (DIG2). Se procede así con los cuatro dígitos a controlar.

Teniendo en cuenta estas consideraciones, pasaremos a esbozar el pseudocódigo que nos llevará

a la confección del programa de control de los cuatro dígitos. NOMBRE: Dígitos FUNCION: Control 7 segmentos PRECONDICION: Ninguna POSTCONDICION: Ninguna Iniciar sistema Apagar displays Iniciar la cuenta Fin de programa

Como vemos, se precisa un mayor refinamiento en todas las operaciones de modo que quede más claro qué funciones se ejecutan en cada paso. Para ello analizaremos, como siempre, cada uno de los pasos descritos anteriormente. Iniciar el sistema consiste en efectuar las operaciones típicas consistentes en "prohibir interrupciones", "punterizar la pila" y programar de modo adecuado el PPI 8155, en este caso, como emplearemos sus puertos para sacar datos hacia el exterior tendremos que programarlos como salidas (por el PA sacaremos los datos a representar y por el PB seleccionaremos el dígito en el que aparecerá escrito el dato). Apagar displays no es más que un paso que nos asegura que al conectar el sistema a la tensión y producirse el arranque, los displays permanecerán apagados. Para ello no tendremos más que asegurar que a través del PB queden los cuatro dígitos bloqueados (sin tensión positiva en el ánodo). Iniciar la cuenta es esencialmente empezar a contar desde 0000 hasta 9999 y sacar todos los números en los displays. Este es sin duda el paso más complejo de los tres iniciales planteados y habrá que dividirlo en operaciones más sencillas para llegar a una mejor comprensión. Tendremos que "iniciar los datos" en algún lugar de la RAM con el valor 0000 (para después sacarlo hacia los displays). Tendremos que incrementar de 1 en 1 el valor de los datos. Como el microprocesador trabaja con el sistema binario y nosotros veremos los dígitos en BCD, hay que desarrollar un proceso para "preparar los datos". Tendremos que "sacar los datos" hacia nuestra pantalla de displays de siete segmentos. El número así mostrado debe permanecer unos segundos en pantalla por lo que hay que prever una temporización.

Page 29: Microprocesador 8085 (8)  INTEL
Page 30: Microprocesador 8085 (8)  INTEL

Considerando los pasos de este refinamiento tendremos:

NOMBRE: Dígitos FUNCION: Control 7 segmentos PRECONDICION: Ninguna POSTCONDICION: Ninguna Prohibir interrupciones Punterizar la pila Programar el 8155 Apagar displays Iniciar datos en RAM Sacar datos Temporizar unos segundos Incrementar datos en 1 Preparar datos Volver a Sacar datos Fin de programa

Parece obvio que "iniciar datos en RAM" consistirá en seleccionar unas posiciones de memoria RAM en las que quedarán almacenados los datos y dado que nuestro proceso de cuenta comenzará desde 0000 hasta 9999, el primer dato que necesitaremos en dichas posiciones será el 0000. Como tenemos que controlar cuatro dígitos y necesitamos cuatro bits por cada dígito en representación binaria, necesitaremos 2 bytes para manejar la información a tratar. Por consiguiente podremos reservar en RAM dos posiciones de memoria para este proceso. Como sabemos, nuestro PPI 8155 dispone de memoria RAM interna entre las posiciones C000H y C0FFH, por lo que en este caso emplearemos dos posiciones de este elemento para dicha tarea. Sean estas posiciones C010H y C011H por ejemplo, a las que apuntaremos con un puntero que llamaremos DATOS. El proceso "sacar datos" requerirá como precondición, que los datos se encuentren previamente almacenados en la RAM, y tratados de forma adecuada para su representación correcta en los displays de siete segmentos. Este proceso es totalmente independiente por lo que será construido según una subrutina que podemos esbozar del modo siguiente:

NOMBRE: SACADATO FUNCION: Saca datos a displays PRECONDICION: Datos en RAM POSTCONDICION: Ninguna

Iniciar contador temporización CONT MIENTRAS CONT>0 Apuntar a DATOS Leer información (dos dígitos) Separar VALOR dígito 1 Enviar VALOR a PA Seleccionar DIG1 con PB Separar VALOR dígito 2 Enviar VALOR a PA Seleccionar DIG2 con PB Apuntar a DATOS+1 Leer información (dos dígitos) Separar VALOR dígito 3 Enviar VALOR a PA Seleccionar DIG3 con PB Separar VALOR dígito 4 Enviar VALOR a PA Seleccionar DIG4 con PB CONT = CONT - 1 FIN de MIENTRAS Fin de subrutina

Page 31: Microprocesador 8085 (8)  INTEL

Como vemos el proceso de sacar la información hacia displays es repetitivo y debe hacerse de forma continua. Debemos tener en cuenta que en cada instante solo tendremos un display activo mientras los otros tres están apagados. El proceso es tan rápido que el ojo humano no lo percibe así, siendo la sensación de que están todos activos al mismo tiempo. La temporización se ha incluido dentro de esta subrutina, ya que es precisamente este proceso el que debe repetirse durante unos segundos. El proceso "incrementar datos en 1" consiste en sumar 1 al valor que tengamos almacenado en la RAM. Además el dato resultante debe ser tratado para obtener el decimal correcto, es decir se debe realizar un ajuste decimal. Este proceso puede ser el siguiente: Tomar dato de RAM (DATOS) Sumar 1 Ajuste decimal Almacenar resultado en RAM (DATOS) Tomar dato de RAM (DATOS+1) Sumar 0 con acarreo Almacenar resultado en RAM (DATOS+1) Tendremos por tanto el siguiente pseudocódigo, que nos permitirá afrontar el paso definitivo al programa en ensamblador:

NOMBRE: Dígitos FUNCION: Control 7 segmentos PRECONDICION: Ninguna POSTCONDICION: Ninguna Prohibir interrupciones Punterizar la pila Programar el 8155 Apagar displays Iniciar datos en RAM Saltar a SACADATO con retorno Tomar dato de RAM (DATOS)

Sumar 1 Ajuste decimal Almacenar resultado en RAM (DATOS) Tomar dato de RAM (DATOS+1) Sumar 0 con acarreo Almacenar resultado en RAM (DATOS+1)

Volver a SACADATO Fin de programa

NOMBRE: SACADATO FUNCION: Saca datos a displays PRECONDICION: Datos en RAM POSTCONDICION: Ninguna

Iniciar contador temporización CONT MIENTRAS CONT>0 Apuntar a DATOS Leer información (dos dígitos) Separar VALOR dígito 1 Enviar VALOR a PA Seleccionar DIG1 con PB Separar VALOR dígito 2 Enviar VALOR a PA Seleccionar DIG2 con PB Apuntar a DATOS+1 Leer información (dos dígitos)

Page 32: Microprocesador 8085 (8)  INTEL

Separar VALOR dígito 3 Enviar VALOR a PA Seleccionar DIG3 con PB Separar VALOR dígito 4 Enviar VALOR a PA Seleccionar DIG4 con PB CONT = CONT - 1 FIN de MIENTRAS Fin de subrutina Con toda esta información procederemos a la concreción de nuestro programa de control, empleando lenguaje ensamblador, del modo siguiente: 2500 A.D. 8085 CROSS ASSEMBLER - VERSION 3.41a ------------------------------------- ------------- INPUT FILENAME : DIGITOS7. ASM OUTPUT FILENAME : DIGITOS7. OBJ 1 ;------------------- ------------- 2 ;NOMBRE : DIGITOS 3 ;FUNCION : Control 7 segmentos 4 ;PRECONDICION : Ning una 5 ;POSTCONDICION : Nin guna 6 ;------------------- ------------- 7 8 ;------------------- ------------- 9 ;PARAMETROS PARA EL 8155 10 ;------------------- ------------- 11 01 C4 PA81 EQU C401 H 12 02 C4 PB81 EQU C402 H 13 03 C4 PC81 EQU C403 H 14 00 C4 REES81 EQU C400 H 15 ;------------------- ------------- 16 17 ;------------------- ------------- 18 ;PARAMETROS PUNTERO DE PILA 19 ;------------------- ------------- 20 FF 87 PPILA EQU 87FF H 21 ;------------------- ------------- 22 23 ;------------------- ------------- 24 ;PARAMETROS DATOS RA M 8155 25 ;------------------- ------------- 26 10 C0 DATOS EQU C010 H 27 ;------------------- ------------- 28 29 0000 DIGITOS: 30 0000 F3 DI 31 0001 21 FF 87 LXI H,PPILA 32 0004 F9 SPHL 33 0005 3E 0F MVI A,0FH 34 0007 32 00 C4 STA REES81 35 000A 3E FF MVI A,FFH 36 000C 32 02 C4 STA PB81 37 000F 21 10 C0 LXI H,DATOS 38 0012 36 00 MVI M,00H

Page 33: Microprocesador 8085 (8)  INTEL

39 0014 23 INX H 40 0015 36 00 MVI M,00H 41 0017 CD 2C 00 S1 CALL SACADAT O 42 001A A7 ANA A 43 001B 21 10 C0 LXI H,DATOS 44 001E 3E 01 MVI A,01H 45 0020 8E ADC M 46 0021 27 DAA 47 0022 77 MOV M,A 48 0023 23 INX H 49 0024 3E 00 MVI A,00H 50 0026 8E ADC M 51 0027 27 DAA 52 0028 77 MOV M,A 53 0029 C3 17 00 JMP S1 54 55 ;------------------- ------------- 56 ;NOMBRE: SACADATO 57 ;FUNCION: Sacar dato s a display 58 ;PRECONDICION: Datos RAM (DATOS) 59 ;POSTCONDICION: Ning una 60 ;------------------- ------------- 61 62 002C SACADATO: 63 002C F5 PUSH PSW 64 002D E5 PUSH H 65 002E D5 PUSH D 66 002F C5 PUSH B 67 0030 11 FF 1F LXI D,1FFFH 68 0033 06 FE S2 MVI B,FEH 69 0035 0E 02 MVI C,02H 70 0037 21 10 C0 LXI H,DATOS 71 003A 7E S3 MOV A,M 72 003B 32 01 C4 STA PA81 73 003E 78 MOV A,B 74 003F 32 02 C4 STA PB81 75 0042 00 NOP 76 0043 00 NOP 77 0044 00 NOP 78 0045 3E FF MVI A,FFH 79 0047 32 02 C4 STA PB81 80 004A 7E MOV A,M 81 004B 0F RRC 82 004C 0F RRC 83 004D 0F RRC 84 004E 0F RRC 85 004F 32 01 C4 STA PA81 86 0052 78 MOV A,B 87 0053 07 RLC 88 0054 47 MOV B,A 89 0055 32 02 C4 STA PB81 90 0058 00 NOP 91 0059 00 NOP 92 005A 00 NOP 93 005B 3E FF MVI A,FFH 94 005D 32 02 C4 STA PB81 95 0060 23 INX H 96 0061 78 MOV A,B 97 0062 07 RLC 98 0063 47 MOV B,A 99 0064 0D DCR C

Page 34: Microprocesador 8085 (8)  INTEL

100 0065 C2 3A 00 JNZ S3 101 0068 1B DCX D 102 0069 7A MOV A,D 103 006A B3 ORA E 104 006B C2 33 00 JNZ S2 105 006E C1 POP B 106 006F D1 POP D 107 0070 E1 POP H 108 0071 F1 POP PSW 109 0072 C9 RET 110 111 0073 END ******** C R O S S R E F E R E N C E T A B L E ******** DATOS = C010 : 37 43 70 DIGITOS 0000 : PA81 = C401 : 72 85 PB81 = C402 : 36 74 79 89 94 PC81 = C403 : PPILA = 87FF : 31 REES81 = C400 : 34 S1 0017 : 53 S2 0033 : 104 S3 003A : 100 SACADATO 002C : 41 LINES ASSEMBLED : 111 ASSEMB LY ERRORS : 0 Como podemos apreciar, en este caso no se ha realizado el diagrama de flujo del programa. Esta tarea puede desarrollarla el lector si la considera interesante.

8.5 EJERCICIOS. 1. Desarrollar una breve descripción funcional del PPI 8155. 2. Definir los modos de programación del PPI 8155. 3. Explicar el modo de conexión del PPI 8155 al bus del 8085, empleando la señal IO/M del

microprocesador. 4. En el programa desarrollado en el ejemplo 1, denominado LAMPARAS, qué cambios habría que

realizar para: a) Emplear como pila la RAM del 8155. b) Controlar las lámparas con el puerto B. c) Aumentar el tiempo de la temporización.

5. En el ejemplo 3 ¿cómo aumentaríamos el tiempo de permanencia en pantalla de las cifras a

representar?

Page 35: Microprocesador 8085 (8)  INTEL

Un paseo por Lanzarote

Page 36: Microprocesador 8085 (8)  INTEL

ArrecifeArrecifeArrecifeArrecife

Page 37: Microprocesador 8085 (8)  INTEL

Cueva de los verdesCueva de los verdesCueva de los verdesCueva de los verdes

Page 38: Microprocesador 8085 (8)  INTEL

Fundación Cesar ManriqueFundación Cesar ManriqueFundación Cesar ManriqueFundación Cesar Manrique

Page 39: Microprocesador 8085 (8)  INTEL

GolfoGolfoGolfoGolfo

Page 40: Microprocesador 8085 (8)  INTEL

HerviderosHerviderosHerviderosHervideros

Page 41: Microprocesador 8085 (8)  INTEL

Jameos del aguaJameos del aguaJameos del aguaJameos del agua

Page 42: Microprocesador 8085 (8)  INTEL

Jardín de cactusJardín de cactusJardín de cactusJardín de cactus

Page 43: Microprocesador 8085 (8)  INTEL

Jardín de cactusJardín de cactusJardín de cactusJardín de cactus

Page 44: Microprocesador 8085 (8)  INTEL

Mirador del ríoMirador del ríoMirador del ríoMirador del río

Page 45: Microprocesador 8085 (8)  INTEL

Playa BlancaPlaya BlancaPlaya BlancaPlaya Blanca

Page 46: Microprocesador 8085 (8)  INTEL

Salinas de JanubioSalinas de JanubioSalinas de JanubioSalinas de Janubio

Page 47: Microprocesador 8085 (8)  INTEL

TimanfayaTimanfayaTimanfayaTimanfaya

Page 48: Microprocesador 8085 (8)  INTEL

TimanfayaTimanfayaTimanfayaTimanfaya