Post on 28-Jul-2020
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
GUIAS ÚNICAS DE LABORATORIO
SISTEMA DIGITAL BASADO EN MICROPROCESADOR
AUTOR: ALBERTO CUERVO
SANTIAGO DE CALI UNIVERSIDAD SANTIAGO DE CALI
DEPARTAMENTO DE LABORATORIOS
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
SISTEMA DIGITAL BASADO EN MICROPROCESADOR
Introducción El artículo presente tiene como objetivo describir el diseño de un sistema digital basado en el microprocesador de 8 bits 8085 de Intel. Este sería el último de los microprocesadores de 8 bits de propósito general desarrollado por la firma Intel Corporation y consiste de una versión mejorada de su microprocesador 8080. Se seleccionó el microprocesador 8085 por las ventajas que éste ofrece entre los microprocesadores de 8 bits, entre las cuales se pueden nombrar su generador interno de reloj, su controlador interno del sistema, su bajo costo y su amplio repertorio de chips de soporte que lo hacen atractivo en aplicaciones de control. El sistema descrito consiste, además del microprocesador, de una memoria RAM de 2 Kbytes, una memoria EPROM de 8 Kbytes en la cual residirá el programa, 3 puertos de entrada/salida programables y un convertidor analógico/digital el cual es utilizado para obtener el valor de la temperatura de un líquido contenido en un recipiente. El sistema digital diseñado es apropiado para ser implementado como proyecto de curso de un semestre de duración por estudiantes relacionados con el tema de microprocesadores. El microprocesador La distribución de terminales del circuito integrado del microprocesador 8085 se muestra en la figura 1. Como se puede observar en la figura, este microprocesador opera con una sola fuente de alimentación de + 5 voltios conectada entre los terminales 20 y 40. Las líneas TRAP, RST 7.5, RST 6.5, RST 5.5 e INTR (Interrupt Request) son entradas de interrupción por donde los dispositivos periféricos pueden solicitar atención del microprocesador . Presentan distintos niveles de prioridad, siendo TRAP la línea más prioritaria e INTR la de menor prioridad. A una solicitud de interrupción por la línea INTR, el microprocesador contesta con un pulso negativo INTA´ (Interrupt Acknowledge) si acepta la interrupción. Durante el pulso INTA´, el dispositivo periférico deberá colocar en el bus de datos del microprocesador el vector de interrupción el cual consiste de un código de 8 bits que tiene la información de la dirección de memoria donde está ubicada la subrutina de servicio del dispositivo.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
El código de este vector de interrupción o RSTn es igual a 11NNN111, donde n es un número de 3 bits igual a NNN. Introduciendo este código con el pulso INTA´ el microprocesador guarda la dirección de memoria de retorno en la pila y salta a la dirección 8 * n. Se debe destacar que el microprocesador genera automáticamente en su interior los distintos vectores de interrupción a solicitudes efectuadas por las otras entradas de interrupción, por lo que se producirá una bifurcación de forma automática a las direcciones de memoria donde deberán estar ubicadas las subrutinas de atención correspondientes o un salto a las mismas como se muestra en la tabla 1.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
40
39
38
37
36
35
34
33
32
31
30
29
28
27
26
25
24
23
22
21
X1
X2
RESET OUTSODSID
TRAP
RST 7.5RST 6.5RST 5.5
INTR
INTAAD0
AD1AD2
AD3AD4
AD5AD6AD7
8085
Vcc (+5v.)
HOLD
HLDA(CLK) OUT
RESET INREADY
IO/MS1
RDWR
ALES0
A15A14
A13A12
A11A10
A9A8
MICROPROCESADOR
Figura 1. Distribución de terminales
Bifurca a la dirección: Solicitud por:
decimal binario hexadecimal TRAP 36 0000000000100100 0024 RST 7.5 60 0000000000111100 003C RST 6.5 52 0000000000110100 0034 RST 5.5 44 0000000000101100 002C
Tabla 1. Direcciones de bifurcación.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
La línea RST 7.5 tiene una característica distinta a las otras. El flip-flop de solicitud de interrupción asociado al dispositivo se encuentra internamente en el microprocesador, lo que hace que esta línea sea sensible al flanco de subida de un pulso aplicado a la misma por el hardware del dispositivo. En cualquier otra línea (INTR, RST 6.5 Y RST 5.5) debe permanecer un nivel de 1 fijo hasta que la interrupción sea reconocida por el microprocesador. El flip-flop interno de solicitud de interrupción asociado a la línea RST 7.5 se resetea con una de las siguientes acciones:
1. Reseteando al microprocesador, esto es, colocando un 0 en la entrada (Reset In)´.
2. Mediante el software con una instrucción SIM (Set Interrupt Mask) con el bit 4 del acumulador en 1.
3. Automáticamente con un reconocimiento del microprocesador a una solicitud de interrupción por la línea RST 7.5.
La línea TRAP es sensible tanto a un flanco como a un nivel aplicado. Esta entrada debe ir a 1 y permanecer en 1 hasta que sea reconocida la solicitud de interrupción. Una nueva interrupción no será reconocida hasta que esta línea vaya a 0 y después nuevamente a 1. Las líneas de interrupción excepto TRAP pueden ser enmascaradas o inhabilitadas mediante una instrucción DI (Disable Interrupt) lo cual coloca al flip-flop interno INTE en el estado 0. Este flip-flop es el responsable de habilitar o inhabilitar las líneas de interrupción excepto TRAP que es una línea no-enmascarable. Con la instrucción EI (Enable Interrupt) se coloca al flip-flop INTE en 1 habilitando todas las líneas de interrupción. Cuando el microprocesador reconoce una interrupción, automáticamente coloca INTE=0 inhabilitando todas las líneas enmascarables, por lo que en el software habrá que ejecutar la instrucción EI para permitir futuras interrupciones por estas líneas. Si INTE=1, las líneas RST 7.5, RST 6.5 y RST 5.5 pueden ser inhabilitadas individualmente colocando un código apropiado en un registro interno del microprocesador denominado registro de máscaras como se muestra en la figura 2.
M7.5 M6.5 M5.5MSER7.5XSOESOD
01234567
Figura 2. Reg. de máscaras del microprocesador
Las funciones de los distintos bits colocados en el registro de máscaras se describen a continuación.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Bits 0, 1 y 2. Un 1 colocado en estos bits del registro inhabilita la línea respectiva. Un 0 la habilita. Bit 3 MSE (Mask Set Enable). La instrucción SIM mueve el contenido del acumulador al registro de máscaras. El bit 3 debe estar en 1 cuando se ejecute la instrucción SIM para poder alterar los bits 0, 1 y 2 anteriores. Bit 4 R7.5. Un 1 colocado en el bit 4 resetea el flip-flop interno de solicitud de interrupción asociado a la línea RST 7.5. Bit 7 SOD = Serial Output Data. El terminal 4 del microprocesador por el cual se transmiten datos en forma serial es una réplica de este bit del registro de máscaras el cual puede ser colocado en un determinado nivel lógico mediante la instrucción SIM. Con esta instrucción, el bit 7 del acumulador es colocado en el bit 7 del registro de máscaras si el bit 6 (SOE= Serial Output Enable) es colocado en 1. La instrucción RIM (Read Interrupt Mask) almacena en el acumulador del microprocesador el estado de las máscaras de interrupción, las interrupciones pendientes y el nivel del terminal 5 SID (Serial Input Data) utilizado para recibir datos en forma serial. De esta forma el estado de las interrupciones puede ser monitoreado bajo el control del programa. Cuando las interrupciones están inhabilitadas pero pendientes, el programa puede de forma selectiva habilitar una línea en particular para atender una solicitud de interrupción en cuestión. El contenido del acumulador después de una instrucción RIM se muestra en la figura 3.
M6.5 M5.5M7.5I EI 5.5I 6.5I 7.5SID
Máscaras deinterrupción
INTE
Interrupciones pendientes
Serial Input Data
Figura 3. Contenido del acumulador después de RIM
Terminales 1 y 2. (X1) y (X2). Estos terminales son utilizados para fijar la frecuencia interna de los pulsos de reloj. En estos terminales se puede colocar un cristal de cuarzo o una resistencia cuando la estabilidad de la frecuencia del reloj no es un factor determinante. En el sistema digital descrito se utiliza una resistencia de 10 Kohmios que fija la frecuencia de los pulsos de reloj ≈ 1.5 MHz. Terminal 36 (Reset In)´.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Colocando esta entrada en 0 se resetea el microprocesador provocando las siguientes acciones.
1. Se limpia el contador de programa, por lo que el microprocesador comenzará ejecutando la instrucción que se encuentre en la dirección 0000H cuando (Reset In)´ regrese a 1.
2. Las líneas de datos y direcciones, así como las líneas de control se colocan en el estado de alta impedancia mientras (Reset In)´ = 0.
3. Coloca al flip-flop INTE en 0 inhabilitando las interrupciones. Igualmente se resetea el flip-flop interno de solicitud de interrupción asociado con la línea RST 7.5 y se colocan en 1 las máscaras de interrupción.
Mientras (Reset In)´ = 0, el microprocesador se encuentra en el estado de Reset en el cual la línea de salida Reset Out, terminal 3, se activa con un 1. Se utiliza generalmente como señal general de reset del sistema y está sincronizada con los pulsos de reloj del microprocesador los cuales pueden ser obtenidos del terminal 37 identificado como CLK OUT. La señal HOLD, terminal 39, le indica al microprocesador que un dispositivo externo solicita tener acceso directo a memoria (DMA : Direct Memory Access). Cuando el microprocesador acepta o reconoce la solicitud, responde colocando en 1 la señal HLDA (Hold Acknowledge), terminal 38. Esto último le indica al dispositivo que el microprocesador libera los buses de datos y direcciones, las señales de RD´, WR´ e IO/M´ colocando todas estas líneas en el estado de alta impedancia. Esto permite al dispositivo externo tomar el control de los buses del sistema para efectuar una transferencia de datos directamente con la memoria sin la intervención del microprocesador. Las señales de RD´ y WR´ son pulsos negativos generados por el microprocesador por los terminales 32 y 31 respectivamente cuando va a efectuar una operación de lectura o escritura en la memoria o en un puerto de entrada/salida. Las señales S1, S0 e IO/M´ son señales de estado del microprocesador obtenidas en los terminales 33, 29 y 34 respectivamente que identifican el ciclo de máquina en curso en el microprocesador, esto es, si se trata de un ciclo de búsqueda, de un ciclo de lectura de memoria, de un ciclo de escritura de memoria, etc. De estas, la más utilizada es IO/M´ que indica si la operación de lectura o escritura se realiza en memoria o en un puerto de entrada/salida. IO/M´ = 0 indica que la operación se realiza en la memoria e IO/M´= 1 indica que la operación se efectúa en un puerto. De la misma forma, S1S0=00 indica que el microprocesador se encuentra detenido en el estado de ALTO, 01 que se encuentra realizando una operación de lectura, 10 una operación de escritura y 11 que se encuentra en el ciclo de máquina de búsqueda en el cual lee de la memoria el código de operación de una instrucción.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
La duración de un estado en el microprocesador se identifica con un período de los pulsos de reloj. Todos los ciclos de máquina tienen 3 estados, excepto el ciclo de búsqueda que puede tener 4 ó 6 estados dependiendo de la instrucción. Todo un ciclo de instrucción consta de uno o más ciclos de máquina, entendiéndose que se produce un nuevo ciclo de máquina cada vez que el microprocesador hace referencia a memoria o a un dispositivo de entrada/salida. Así por ejemplo, la instrucción STA 2382H (Store Accumulator) que almacena el contenido del acumulador en la dirección de memoria especificada consta de 4 ciclos de máquina. Un primer ciclo de búsqueda donde se lee de la memoria el código de operación de la instrucción el cual le indica al microprocesador las actividades que debe realizar a continuación, 2 ciclos de lectura de memoria (Memory Read) en los cuales se lee la dirección de 16 bits especificada por la instrucción y un último ciclo de escritura de memoria (Memory Write) en donde el microprocesador saca por el bus de direcciones la dirección leída anteriormente para almacenar en esta localización de memoria el contenido del acumulador que está sacando por el bus de datos. La señal de READY (terminal 35) es utilizada por un dispositivo de entrada/salida o la memoria para poder solicitar al microprocesador uno o más estados de espera intercalados entre los estados T2 y T3 de un ciclo de máquina. Así por ejemplo, durante un ciclo de lectura de memoria en el estado T1 al comienzo del ciclo de máquina el microprocesador coloca la dirección de la localización de memoria que va a leer en el bus de direcciones y en el estado T3 almacena internamente el contenido del bus de datos. Si el tiempo de acceso de la memoria es tal que no le da tiempo a la misma a colocar el dato en el bus de datos tendrá que solicitar espera intercalando estados del mismo nombre entre los estados T2 y T3 mientras la señal READY=0. El microprocesador consta de un bus de datos de 8 bits y un bus de direcciones de 16 bits, pudiendo direccionar por tanto 216 = 64 Kbytes de memoria. A8 a A15 (terminales 21-28) constituyen los bits de mayor orden de la dirección y los bits AD0 a AD7 (terminales 12-19) son líneas compartidas por el bus de datos y los 8 bits de menor orden de la dirección. Esto es, las líneas AD0-AD7 constituyen un bus multiplexado. Al comienzo de un ciclo de máquina estas líneas son unidireccionales y contienen los 8 bits de menor orden A0-A7 de la dirección de memoria o de un puerto de entrada/salida seleccionado. Posteriormente en el ciclo de máquina estas líneas son bidireccionales y se convierten en el bus de datos del sistema. El pulso ALE (Address Latch Enable) es generado por el microprocesador por el terminal 30 al comienzo de un ciclo de máquina para indicar que la parte baja de una dirección se encuentra en las líneas AD0-AD7 como se ilustra en la figura 4.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
parte alta de la dirección
parte baja de ladirección
Datoválido
Ciclo de lectura de memoria (Memory Read)
T1 T2 T3 T1
Reloj
A8-A15
ALE
RD
AD0-AD7
dato
Figura 4. Señales durante un ciclo de lectura de memoria
En esta figura se han representado las señales que ocurren durante un ciclo de lectura de memoria. Al comienzo del estado T1 del ciclo de máquina el microprocesador coloca el byte de mayor orden de la dirección en las líneas A8-A15 y permanece constante hasta el final del estado T3 y el byte de menor orden de la dirección lo coloca en las líneas AD0-AD7. Este byte sin embargo permanece en estas líneas solamente hasta el comienzo del estado T2 en cuyo momento las líneas AD0-AD7 se convierten en líneas de datos. Observe que el pulso ALE es generado mientras la parte baja de la dirección se encuentra en las líneas AD0-AD7. Durante el estado T2 el pulso de lectura RD´ va a 0 habilitando la salida de memoria y colocando ésta con su demora inevitable su dato en las líneas AD0-AD7. Con el flanco positivo del reloj en el estado T3 el microprocesador almacena internamente el dato que le llega por estas líneas. Durante todo el ciclo, la señal IO/M´ = 0 indicando que la operación de lectura se efectúa en la memoria. De acuerdo con la descripción anterior se hace necesario demultiplexar o retener la parte baja de la dirección como se muestra en la figura 5.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
A15A14A13A12A11A10A9A8
ALE C ocLatch
74LS373
10 Kohmios
20picofaradios
X1
X2
8085
A15A14A13A12A11A10A9A8A7A6A5A4A3A2A1A0
D7D6D5D4D3D2D1D0
AD7AD6AD5AD4AD3AD2AD1AD0
+
+5V.
R
C
Reset
Bus deDirecciones
Bus deDatos
R : 47 KohmiosC : 10 microfaradios
Figura 5. El microprocesador con el bus de direcciones demultiplexado
RESET IN
En esta figura se ha utilizado el latch de 8 bits con salidas de 3 estados 74LS373 para retener el byte de menor orden de la dirección. Las salidas se encuentran permanentemente habilitadas al estar conectada su entrada OC´ (Output Control) a tierra ó 0 voltios. El pulso ALE del microprocesador alimenta la entrada C del latch, por tanto, cuando ALE se hace 1 las salidas del latch toman los valores de sus entradas y cuando ALE regresa a 0 estos valores son retenidos en el latch. La red RC de 47 Kohmios y 10 microfaradios es utilizada para resetear al microprocesador en el instante inicial que se conecte la energía eléctrica. El diodo es de señal de silicio para proteger la entrada (Reset In)´ de cualquier posible oscilación. El switch de Reset se utiliza para resetear al microprocesador manualmente. Entre los terminales X1 y X2 se ha conectado una resistencia de 10 Kohmios para fijar la frecuencia de los pulsos de reloj a un valor aproximado de 1.5 MHz. Interface con memoria. Se debe proveer al sistema digital de una memoria EPROM de 8 Kbytes y una memoria RAM de 2 Kbytes. Para cumplir con estos requerimientos se utilizará el circuito integrado de una EPROM de 8 Kbytes 27C64. Las direcciones de la EPROM deben comenzar en la dirección 0000H.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Como la EPROM tiene 13 líneas de dirección, las localizaciones de la misma se podrán acceder con las direcciones que van de 0000H hasta 1FFFH. Para la RAM se utiliza el circuito integrado TMS4016. La RAM debe comenzar a continuación de la EPROM. Como la RAM tiene 11 líneas de dirección, las direcciones en la misma irán desde 2000H hasta 27FFH como se muestra en la figura 6.
EPROM
0000 0000 0000 0000
0001 1111 1111 11110010 0000 0000 0000
0010 0111 1111 1111
8 Kbytes
2 Kbytes
64 Kbytes
A15 A0. . . . . . .
RAM
Direcciones
Figura 6. Mapa de memoria
bit 13bit 14
Como se puede observar, A14A13 = 00 en las direcciones de EPROM y A14A13 = 01 en la RAM, por lo que se utilizará un decodificador 2 a 4 para seleccionar estas pastillas como se muestra en la figura 7. En la misma se muestra al microprocesador con su sistema de memoria. A la línea de READY se le ha colocado un 1 fijo ya que los tiempos de acceso de las pastillas de memoria utilizadas son adecuados para la frecuencia de los pulsos de reloj fijada con la resistencia de 10 Kohmios. Igualmente se ha colocado un 0 fijo a la línea de HOLD y a todas las entradas de interrupción que no se utilicen. En la tabla 2 se muestran las funciones de las líneas de las pastillas utilizadas.
Decodificador Memoria RAM Memoria EPROM G´ : entrada de habilitación G´: habilitación de salida CE´: entrada de selección BA:entradas, B mayor orden S´: entrada de selección OE´: habilitación de salida Y0-Y3: salidas W´: habilitación de
escritura A0-A12: líneas de dirección
A0-A10: líneas de dirección DQ0-DQ7: salida de datos DQ1-DQ8: entrada/salida
Tabla 2. Funciones de las líneas.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
A15ALE
A14
A13
A12
A11
A10 A9
A8
AD
0A
D1
AD
2
AD
3
AD
4
AD
5A
D6
AD
7
EPROM 27C64
74LS
373
C OC
B AG
Y3 Y2 Y1 Y0
1/2 74LS139A
DEC
IO/M
Figura 7. Memoria
X1
X210 Kohmios
20 picofaradios
Reset In
Reset Out
Reset 10 microfaradios
47 Kohmios on/off
A la alimentaciónde los CIs
+5v.
Rea
dy
TR
AP
RS
T 5
.5R
ST
7.5
INT
RH
OLD
INT
AH
LDA S1
S0
SID
SO
D
microprocesador
CLK OUT
RD
WR
RS
T 6
.5
CEOE A12 A0.....VccVppPGM´ DQ7 DQ0.....
alimentación+5v.
4.7K
A10 A0
SGW
RAM TMS4016.....
DQ8 DQ1....
D7
A15
A0
Convertidor analógico/digital El convertidor analógico/digital seleccionado consiste del circuito integrado ADC0801 o similar el cual tiene una resolución de 8 bits. Tiene salida de 3 estados por lo que se puede acoplar directamente al bus de datos del microprocesador como un puerto de entrada. Tiene un generador de reloj interno para el proceso de conversión, aunque se puede utilizar con el reloj del microprocesador aplicado a su terminal CLK IN si la frecuencia estuviese comprendida entre 100 y 1460 KHz. Utiliza una simple fuente de alimentación de + 5 voltios. Este convertidor responde a un voltaje diferencial analógico [Vin(+) – Vin(-)] aplicado en sus entradas. La distribución de terminales se muestra en la figura 8.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
1
2
3
4
5
6
7
8
9
10 11
12
13
14
15
16
17
18
19
20
Figura 8. Distribución de terminales del A/D
Vcc
CLK R
DB0
DB1
DB2
DB3
DB4
DB5
DB6
DB7
CS
RD
WR
CLK IN
INTR
VIN(+)
VIN(-)
A GND
D GND
VREF/2
A/D
ADC0801
Comienzo de la conversión. La orden de comenzar la conversión de la señal analógica aplicada a la entrada del convertidor se efectúa cuando van a 0 las señales CS´ y WR´ como se muestra en la figura 9a. Cuando se completa la conversión y el dato digital está disponible, el convertidor responde colocando INTR´ en 0. Por tanto esta última señal puede ser utilizada como “Fín de Conversión” pudiendo ser monitoreada bajo el control del programa o utilizada para solicitar interrupción del microprocesador.
Inicie conversión
Conversiónterminada
CS
WR
INTR
INTR
CS
RD
Dato3er estado 3er estado
Figura 9 Señales en el Convertidor A/D
(a) (b)
Lectura del dato. Para leer el dato digital convertido se hacen 0 CS´ y RD´. El convertidor responde quitando la solicitud de interrupción (INTR´ va a 1) y coloca el dato digital con su demora intrínseca en sus líneas DB7-DB0 como se muestra en la figura 9b. Voltaje de Referencia.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
El voltaje de referencia del Conv. A/D determina el rango dinámico de la señal diferencial de entrada VIN = VIN(+) – VIN(-). VREF = Vcc si no se aplica ningún voltaje al terminal marcado como VREF/2. Si se aplica un voltaje externo a este terminal, por ejemplo 2 voltios, entonces VREF = 4 voltios y éste será el rango de variación de VIN. En esta situación, los escalones en VIN (variación en VIN en que no cambia la salida digital) será igual a 4/28 = 15.625 milivoltios como se muestra en la figura 10. Se cumple que VIN = escalón x (valor digital). Por ejemplo, si la salida digital es 00000101 = 5dec, entonces VIN = 5 x 15.625 mV = 78.125 mV, correspondiendo este valor al centro del escalón.
00000000
00000001
00000010
00000011
00000100
00000101
entradaanalógica
VIN
11111111
......
salidadigital
15.625 mV
15.6
25 m
V
31.2
5 m
V
46.8
75 m
V
62.5
mV
78.1
25 m
V
3.98
4 v
Figura 10. Función transferencial
escalón
0 v.
Reloj. La frecuencia de los pulsos de reloj debe estar en el rango comprendido entre 100 y 1460 KHz. Como la frecuencia del reloj del microprocesador ≈ 1.5 MHz, no puede ser utilizada para alimentar la entrada CLK IN del convertidor. La frecuencia de reloj del A/D puede ser fijada con una red RC externa como se muestra en la figura 11. Con R = 10 Kohmios y C = 150 picofaradios se obtiene una frecuencia del reloj del A/D ≈ 606 KHz, valor próximo a 640 KHz recomendado por el fabricante para obtener garantizada la exactitud del Conv. A/D.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
R
C
CLK IN
CLK R
CLK
Frec =1.1RC
1
A/D
Figura 11. Ajuste de la frecuencia Sensor de temperatura El sensor de temperatura seleccionado consiste del circuito integrado LM335 el cual tiene un coeficiente de temperatura de 10 mV/ ºC. A la temperatura ambiente de 25 ºC tiene un voltaje ≈ 2.98 voltios según especificación del fabricante. Su distribución de terminales se muestra en la figura 12. Por lo anterior a 0ºC su voltaje será 2980mV – 10x25= 2.73v y a 100ºC el voltaje en el sensor será igual a 2730mV + 10 x 100 = 3.73v.
1
2
3
4 5
6
7
8
LM335
ajuste
+
-
NC
NC
NC
NC
NC
V+
salida
10 mv/ºC
circuito básico
salida
10 mv/ºC
RR
10K
sensor calibrado
2.98v a 25ºC
V+
Figura 12. Sensor de temperatura LM335
El potenciómetro de 10 K se utiliza para ajustar el voltaje de salida exactamente en 2.982 voltios a 25ºC y obtener mayor exactitud del dispositivo. Rango de temperaturas Se desea medir temperaturas comprendidas en el rango 0ºC ≤ T < 100 ºC. Como el coeficiente de temperaturas del sensor es de 10 mV/ºC, se utilizará un VREF/2 en el convertidor analógico/digital igual a 1.28 voltios. Esto produce un rango dinámico en el mismo de 2.56 voltios y un escalón en VIN igual a 2.56/28 v = 10 mV. Es decir entonces que para cada grado centígrado de aumento en la temperatura, la salida digital se incrementa en la unidad.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Por otro lado, como el sensor produce un voltaje de 2.73 voltios a 0ºC, se colocará este valor en VIN(-). Así cuando la temperatura sea de 0ºC, VIN(+) (salida del sensor) = 2.73v y VIN = VIN(+) – VIN(-) = 0 voltios produciendo el convertidor analógico/digital una salida igual a 00000000. El circuito para efectuar lo anteriormente expuesto se muestra en la figura 13.
LM4050-4.1diodo de precisión
de referencia
al busde datos
alimentaciónde +5 v.
+
VREF/2VIN(-)
VIN(+)
A GND
D GND
10microfaradios
tantalio
7.5K5%
1K
330ohmios
1.28v
2.73v
Figura 13 Sensor de Temperatura y Convertidor A/D
A/D
1K
R1R2sensor de
temperatura
+5v.LM335
1.2K10 mV/ºC
WR
RDCS
selección
0.01microfaradios
1
2
3
LM4050-4.1
VR
T= 20 ppm/ºC
DB0DB1DB2DB3DB4DB5DB6DB7
CLK R
CLK IN
Vcc
10K150
picofaradios
INTR
3.3K / 5%3.9K / 5%9.1K / 5%
Los pequeños potenciómetros R1 y R2 se utilizan para ajustar los voltajes en VREF/2 y VIN(-) en 1.28 y 2.73v respectivamente. El potenciómetro R2 ajusta la salida del conv. A/D a 00hex cuando la temperatura sea de 0ºC y R1 a que tenga una resolución (escalón) de 10 mV. R1 varía el voltaje entre 1.14 y 1.43v y R2 entre 2.66 y 2.95v aproximadamente. El LM4050-4.1 es un diodo de precisión de referencia utilizado para obtener un voltaje estabilizado de 4.1 voltios con un coeficiente de temperatura muy pequeño. Este voltaje solamente varía con la temperatura a razón de 20 ppm (partes por millón) por cada ºC. El capacitor de 10 microfaradios conectado a la alimentación de +5v. del A/D debe ser de tantalio para eliminar los impulsos de ruido que puedan venir por la línea de alimentación de +5v. y estar físicamente conectado lo más próximo posible al terminal de Vcc del convertidor analógico/digital.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
El cable de conexión del sensor de temperatura debe ser trenzado para evitar ruido inducido y conectado a tierra lo más cerca posible del terminal marcado como AGND (analog ground : tierra analógica) del A/D. El sensor de temperatura LM335 debe ir encerrado en un tubo metálico o de vidrio para construir la sonda que se introduce en el líquido. Debe estar embebido en grasa de silicona para garantizar una buena transferencia de calor y el extremo abierto del tubo debe ir sellado con sellante de silicona de alta temperatura para evitar la entrada de líquido. Puertos Programables Se plantea como requerimiento la implementación del sistema digital con tres puertos programables, por lo que se utiliza la interface periférica programable 82C55 de la compañía Intel Corporation. Este circuito integrado goza de gran aceptación al ser utilizadas sus funciones en la implementación de computadores personales recientes basados en el Pentium II y empleado para implementar una interface con el teclado y el puerto paralelo de la impresora en muchos computadores personales. En la figura 14a se muestra la distribución de terminales del 82C55, así como las direcciones internas para seleccionar los distintos registros del mismo. Consta de 3 puertos A, B y C de entrada/salida los cuales son programados como grupos como se muestra en la figura 14b. Es programado por medio de 2 bytes de comando, donde el bit 7 selecciona el byte de comando A o el B. El byte de comando A programa la función de los grupos A y B mientras que el byte de comando B coloca en 1 ó 0 en forma individual bits del puerto C del 82C55. Los grupos pueden ser programados en tres modos diferentes. El grupo B puede ser programado en el modo 0 ó 1 y el grupo A en los modos 0, 1 ó 2. Ambos grupos pueden ser programados como entrada o como salida. Modo 0. La operación en el modo 0 ocasiona que las líneas del grupo funcionen como líneas de entradas con buffer de 3 estados o como líneas de salida con registro. Constituye el modo básico de operación. Modo 1. En el modo 1 de operación, se efectúa una transferencia controlada por pulsos por los puertos A o B, mientras que el puerto C proporciona las señales de diálogo o “handshaking” requeridas para estos puertos. Ya esté configurado el puerto como entrada o salida, el dato es almacenado en el mismo como en un registro.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
PA0PA1PA2PA3PA4PA5PA6PA7
PB0PB1PB2PB3PB4PB5PB6PB7
PC0PC1PC2PC3PC4PC5PC6PC7
D0D1D2D3D4D5D6D7
RDWRA0A1
CSRESET
82C55
Pue
rto
AP
uert
o B
Pue
rto
C
Bus
de
dato
s
1415161713121110
2524232221201918
37383940123434
33323130292827
53698156
Vcc: 26GND : 7
A1 A0 Selección 0 0 Puerto A 0 1 Puerto B 1 0 Puerto C 1 1 Registro de comando
(a)
Figura 14. Interface periférica programable (a) distribución de terminales y (b) bytes de comando
Puerto C : PC3-PC01=entrada0=salida
Puerto B1=entrada0 = salida
Modo0=Modo 01=Modo 1
Grupo B
Grupo A
byte de comando A
Puerto C : PC7-PC41=entrada0 = salida
Puerto A1=entrada0 = salida
Modo00 = modo 001 = modo 11X = modo 2
1
7 6 5 4 3 2 1 0
0 X X X
7 6 5 4 3 2 1 0byte de comando B
selección de 1 bit Bit Set/Reset1 = Set
0 = Reset
(b)
Modo 2. El modo 2 de operación sólo es permitido para el grupo A. El puerto A se convierte en bidireccional pudiéndose efectuar una transmisión y recepción de datos a través de las mismas líneas. Puerto de entrada en modo 1. En este modo de operación, el puerto funciona como un registro con almacenamiento del dato. Esto permite que el dato permanezca en el puerto hasta que el microprocesador se encuentre listo para leerlo. La figura 15 muestra las señales en este modo de operación, en donde las líneas PC3, PC4 y PC5 del puerto C no manejan datos,
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
sino señales de diálogo del puerto A. En la figura 15 se ha supuesto que el puerto A está programado como entrada y el puerto B como salida. El significado de estas señales es el siguiente.
1. STBA´: Entrada de pulso que almacena el dato en el puerto A. 2. IBFA (Input Buffer Full) : Salida que indica que el puerto A contiene un dato 3. INTRA : (Interrupt Request) : Salida de solicitud de interrupción del puerto A. Un
1 en esta salida puede ser utilizado para interrumpir al microprocesador. Esta solicitud de interrupción puede ser in/habilitada con el flip-flop INTEA interno al 82C55. Este flip-flop puede ser colocado en 1 ó 0 con el bit PC4 mediante el byte de comando B para el caso del puerto A programado como entrada.
puer
to A
al dispositivo
puer
to B
STBA
IBFA
INTRA
PC4
PC5
PC3
PC6,PC7
PC0
PC2
PC1OBFB
ACKB
INTRB
dato
dato almacenadoen el puerto
dato leído porel microprocesador
STBA
IBFA
INTRA
RD
PA0-PA7
RD
WRWR
OBFB
INTRB
ACKB
dato enviadoal puerto
82C55 PB0-PB7
Figura 15. Señales de diálogo
BufferA lleno
Solicitud de interrupción
BufferB lleno
dato leídodel puerto
2
dato del dispositivo
El dispositivo coloca un dato en sus líneas de salida y lo almacena en el puerto A al generar un pulso STBA´ si el buffer del puerto A está vacío. Este pulso activa las señales IBFA (buffer de entrada lleno) e INTRA (solicitud de interrupción). Una vez que el microprocesador reconoce por medio del software (IBFA) o hardware (INTRA) que un dato está almacenado en el puerto A, lo lee enviando un pulso de lectura RD´. Al leerse el dato del puerto A por el microprocesador, se resttituyen las señales IBFA e INTRA a
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
sus estados inactivos hasta que el siguiente dato sea escrito de nuevo en el puerto A por el dispositivo. Puerto de salida en modo 1. En este modo de operación, el puerto funciona como un registro que almacena el dato enviado por el microprocesador por el bus de datos con el pulso WR´. El significado de las señales asociadas al puerto B operando como salida en el modo 1 se describe a continuación.
1. OBF´B: (Output Buffer Full: Buffer lleno). Esta salida se coloca en 0 para indicar que hay un dato escrito o almacenado en el puerto. Regresa a 1 para indicar que el dato fue leído del puerto por un dispositivo externo.
2. ACK´B: (Acknowledge: Reconocimiento). Esta señal es una respuesta del dispositivo externo que indica que ha recibido el dato del puerto. Ocasiona que OBF´B regrese a 1 para indicar que el puerto está vacío. También ocasiona que INTRB regrese a 1 para solicitar una nueva interrupción.
3. INTRB : (Interrupt request: solicitud de interrupción). Señal utilizada normalmente para interrumpir al microprocesador. Puede ser inhabilitada colocando un 0 en INTEB. Esto último puede ser efectuado colocando un 0 en el bit PC2 con el byte de comando B siempre que el puerto B sea programado como salida.
Los bits del puerto C no utilizados por señales de diálogo quedan como líneas de entrada/salida de propósito general. En el ejemplo de la figura 15 serían los bits PC6 y PC7, los cuales quedan programados o como entrada o salida en dependencia de cómo se haya programado el puerto C del grupo A con el byte de comando A. Lectura del puerto C. Modo 1. En el modo 1 el puerto C genera o acepta señales de diálogo con el dispositivo periférico como se ha visto. La lectura del contenido del puerto C permite al programador monitorear y comprobar el “estado” de cada dispositivo periférico y en concordancia tomar la decisión requerida. En la figura 16a se muestra un resumen de las señales de diálogo en el modo 1 y en b se muestran los distintos bits cuando se efectúa una lectura del puerto C. Señales en el modo 2. Solamente el grupo A se puede programar en el modo 2, convirtiéndose el puerto A en bidireccional. Esto permite la transmisión y recepción de datos a través de las mismas ocho líneas. Las señales de diálogo en este modo de operación se muestran en la figura 17.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
STBB
Modo 1
entrada salida
INTRB
IBFB
INTRA
STBA
IBFA
E/S
E/S
PC0
PC1
PC2
PC3
PC4
PC5
PC6
PC7
INTRB
OBFB
ACKB
INTRA
E/S
E/S
ACKA
OBFA
E/S E/S IBFA INTEA INTRA INTEB IBFB INTRB
OBFA E/S E/S INTRA OBFB INTRBINTEA INTEB
D7 D6 D5 D4 D3 D2 D1 D0
Programación como entrada
Grupo A Grupo B
D7 D6 D5 D4 D3 D2 D1 D0Programación como salida
Grupo A Grupo B
(a) (b)
Figura 16. Bits del puerto C, (a) resumen modo 1 y (b) lectura del puerto C
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Figura 17. Señales en el modo 2
dato delperiféricoal 82C55
dato del 82C55al periférico
dato del 82C55al microprocesador
dato del microprocesadoral 82C55
WR
OBFA
INTRA
ACKA
STBA
IBFA
busperiférico
RD
Observación: cualquier secuencia donde WR´ ocurra antes que ACK´,y STB´ ocurra antes que RD´ es permitida
bus periférico
RD
WR
PA0-PA7
INTRA
OBFA
ACKA
STBA
IBFA
PC3
PC7
PC6
PC4
PC5
82C55
3PC0-PC2
E/S
INTE1: INTE asociado con OBF´: controlado por la acciónde set o reset de PC6
INTE2: INTE asociado con IBF´: controlado por la acciónde set o reset de PC4
INTR= INTE2.IBF.STB.RD + INTE1.OBF.ACK.WR
La entrada de RESET del 82C55 ocasiona que todos los puertos sean inicializados como puertos de entrada en el modo 0. Interface del 82C55 y el Conv A/D a los buses. En la figura 18 se ilustra la conexión del 82C55 y el convertidor A/D al sistema de buses del microprocesador 8085. Se han utilizado los bits A3 y A2 para seleccionar a estos 2 circuitos integrados. Observe que el decodificador queda habilitado con IO/M´= 1. De acuerdo con la conexión efectuada las direcciones de los distintos puertos, el registro de comando del 82C55 y el Conv A/D serán como se muestra en la tabla 3.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
Puerto A Puerto C Puerto B
DB
7
DB
0
DB
6D
B5
DB
4D
B3
DB
2D
B1
del sensorde temperatura
bus
de d
atos
RDWRIO/M
CS RD WR
Reset Out
RST 6.5
Res
etC
S
A0A1A2A3
del bus de direcciones
A1 A0G B A
Y0Y1Y2Y31/2 74LS139A
Dec
D7
D0
VIN (+)
A/D ADC0801
RD WRD7
D6
D5
D4
D3
D2
D1
D0
INTR
74LS04
Figura 18. Conexión de los puertos y el convertidor a los buses
82C55
74LS04
D6D5D4D3D2D1
PA7.....PA0 PC7.....PC0PB7.....PB0
Dirección Dispositivo
Binario Hexadecimal Convertidor A/D 00000000 00H
Puerto A 00000100 04H Puerto B 00000101 05H Puerto C 00000110 06H
Registro de comando 00000111 07H
Tabla 3. Direcciones de los dispositivos En la figura 18 se pueden observar los siguientes aspectos:
1. A3A2 = 00 selecciona el convertidor y 01 selecciona el 82C55 2. Con A3A2 = 01, los bits A1A0 seleccionan los distintos elementos del 82C55
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
3. La señal IO/M´ = 1, habilita el decodificador, por lo que tanto el convertidor como los elementos del 82C55 se pueden acceder con las instrucciones IN o OUT del microprocesador
4. El convertidor solicita interrupción por la línea RST 6.5 del microprocesador. 5. Todos los puertos son inicialmente colocados como entradas en el modo 0 al ser
reseteado el 82C55 con la señal Reset Out proveniente del microprocesador. Dispositivos periféricos. Además del convertidor A/D, el sistema digital debe constar de un display de dos dígitos para colocar el valor de la temperatura leída , una alarma luminosa cuando la temperatura sobrepase un valor preestablecido y un teclado de 4 switches para fijar este valor. Por tanto, la conexión de estos elementos se ilustra en la figura 19. Todos los puertos deben estar configurados en el modo 0. El display está conectado a través de decodificadores BCD/7 segmentos al puerto B el cual debe ser programado como un puerto de salida donde se almacenará el valor de la temperatura leída. La entrada RBI´ de las decenas está conectada a tierra para que el cero no se ilumine. El teclado de 4 switches tiene como misión establecer un valor de temperatura sobre el cual debe activarse la alarma. Este valor debe ser colocado en binario, así si se coloca el 0011, la alarma debe iluminarse si la temperatura es mayor de 30ºC, etc. Un switch cerrado coloca un 0 y abierto un 1. Los switches están conectados a las líneas PA4-PA7 del puerto A el cual debe ser programado como entrada. El bit PC0 del puerto C es utilizado como señal para hacer iluminar la alarma. Así, cuando este bit sea 1 hace conducir al diodo emisor de luz infraroja del aislador óptico cerrando al TRIAC NTE5641 e iluminándose la lámpara. Por tanto, el puerto C debe ser programado como un puerto de salida. El opto-aislador tiene como misión aislar eléctricamente las señales débiles de la alta corriente alterna de 60 HZ que circula por la lámpara de 40 vatios cuando ésta se encuentre iluminada y de las líneas de alimentación de 110 voltios. La resistencia de 33 ohmios en serie con el condensador de 0.01 microfaradios tiene como objetivo minimizar la interferencia de radiofrecuencias cuando se conmuta una alta corriente con el TRIAC NTE5641 como la de la lámpara.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
PB7PB6PB5PB4PB3PB2PB1PB0
PC0
display
+5V
PA7PA6PA5PA4
+5v.
4.7K
8 4 2 1
220ohmios
C C
+5V
74LS04
110v60 Hz
Figura 19. Display, switches y alarma
Opto-aislador
lámpara40 vatios
0.01microfaradios
200 voltios
TRIAC
220ohmios
33ohmios
MOC3020
switches
NTE5641
470ohmios
MT1
G
MT2
a b c d e f g
alarma
a b c d e f g
D C B A D C B ALT
RBORBI
LTRBORBI
agfedc
b
74LS47A 74LS47Agfedc
ba
4.7K
+5v.
NTE3050ánodo común
NTE3050ánodo común
decenas
unidades
74LS47A : decodificador BCD/7 segmentos
Software El programa requerido debe inicializar los puertos del 82C55, ordenar el inicio de la conversión al convertidor analógico/digital y esperar a que éste produzca una solicitud de interrupción por la línea RST 6.5 para leer su dato digital de salida.
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
La lectura del dato se hará en la rutina de servicio. Igualmente se hace una conversión de binario a BCD para llevar en este formato el dato al puerto B y alimentar los decodificadores BCD/7 segmentos. De forma similar se analiza el código colocado en los switches para la toma de la decisión de iluminar la alarma. En la tabla 4 se muestra el programa.
Programa para leer la temperatura de un líquido,actualizar alarma, visualizar la temperatura en un display y leer una temperatura establecida mediante switches
CONV EQU 00H ; Dirección del convertidor PTOA EQU 04H ;Dirección del puerto A PTOB EQU 05H ;Dirección del puerto B PTOC EQU 06H ;Dirección del puerto C COMAN EQU 07H ;Dirección reg de comando 82C55 ORG 0000H 0000 C3 40 00 JMP INICIO ORG 0034H ;Dirección del salto por
interrupción 0034 C3 55 00 JMP SERV ORG 0040H ;Dirección de comienzo 0040 3E 90 INICIO : MVI A,90H ;Programa los puertos y se lleva 0042 D3 07 OUT COMAN ;al registro de comando del 82C55 0044 3E 00 MVI A,00H ;Para desactivar la alarma y 0046 D3 06 OUT PTOC ;se lleva al puerto C PC0=0 0048 31 FF 20 OTRA : LXI SP,20FFH ;Inicializa puntero de la pila en
RAM 004B 3E 0D MVI A,0DH ;Para habilitar la línea RST 6.5 y 004D 30 SIM ;se lleva al registro de máscaras 004E D3 00 OUT CONV ;Inicie conversión 0050 FB EI ;Habilita interrupción 0051 00 LAZO : NOP ;Se queda esperando hasta que el 0052 C3 51 00 JMP LAZO ;convertidor A/D interrumpa ;Lectura del dato del convertidor analógico/digital cuando interrumpe al microprocesador 0055 DB 00 SERV: IN CONV ;Se lee el dato del convertidor 0057 CD 63 00 CALL DMRA ;Tiempo para próxima lectura 005A CD 73 00 CALL BIBCD ;Transforma dato binario en BCD 005D CD 91 00 CALL DSPLY ;Actualiza display y alarma 0060 C3 48 00 JMP OTRA ;Realizar siguiente lectura ;Subrutina de demora para producir un intervalo de tiempo adecuado entre lecturas 0063 F5 DMRA: PUSH PSW ;Guarda el dato en la pila 0064 3E FF MVI A,FFH 0066 06 FF EXT: MVI B,FFH ;Lazo exterior 0068 05 INT: DCR B ;Lazo interior 0069 00 NOP 006A C2 68 00 JNZ INT
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
006D 3D DCR A 006E C2 66 00 JNZ EXT 0071 F1 POP PSW ;Restituye el dato en el acumulador 0072 C9 RET ;Retorna ;Subrutina para efectuar la conversión de binario a BCD del dato del convertidor 0073 06 00 BIBCD: MVI B,00H ;Limpia registro B 0075 48 MOV C,B ;Limpia registro C 0076 D6 0A DIEZ: SUI 0AH ;Resta 10 dec al dato 0078 DA 7F 00 JC SUMA ;Si acarreo se hallaron las decenas 007B 04 INR B ;En B quedan las decenas 007C C3 76 00 JMP DIEZ 007F C6 0A SUMA: ADI 0AH ;La última resta no es válida 0081 D6 01 UNO: SUI 01H ;Para colocar unidades en el reg C 0083 DA 8A 00 JC ACOM ;Si acarreo se hallaron las unidades 0086 0C INR C 0087 C3 81 00 JMP UNO 008A 78 ACOM: MOV A,B ;Las decenas al acumulador 008B 07 RLC ;Se reubica o acomoda en su sitio 008C 07 RLC 008D 07 RLC 008E 07 RLC 008F B1 ORA C ;Se colocan las unidades en A 0090 C9 RET ;A quedó con el dato en BCD ;Subrutina para actualizar el display y activar alarma de acuerdo a la posición de los Sw. 0091 D3 05 DSPLY: OUT PTOB ;Dato al display 0093 47 MOV B,A ;Se guarda el dato en el reg B 0094 DB 04 IN PTOA ;se lee la posición de los switches 0096 E6 F0 ANI F0H ;Cero a los bits de menor orden 0098 B8 CMP B ;Compara switches con el dato 0099 DA A3 00 JC SET ;Si acarreo activar alarma 009C 3E 00 MVI A,00H ;Para desactivar la alarma 009E D3 06 OUT PTOC ;Se coloca PC0 en 0 00A0 C3 A7 00 JMP FIN 00A3 3E FF SET: MVI A,FFH 00A5 D3 06 OUT PTOC ;Se coloca PC0 en 1 00A7 C9 FIN: RET END
Tabla 4. Programa
Consideraciones finales El sistema digital descrito puede ser fácilmente utilizado en otras muchas aplicaciones pués constituye un pequeño microcomputador con puertos programables y 10 Kbytes de memoria, 8 Kbytes de EPROM y 2 Kbytes de RAM. El programa ilustrado en la tabla 4
DDDEEEPPPAAARRRTTTAAAMMMEEENNNTTTOOO DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOOSSS
GGGUUUIIIAAASSS DDDEEE LLLAAABBBOOORRRAAATTTOOORRRIIIOOO DDDEEE SSSIIISSSTTTEEEMMMAAA DDDIIIGGGIIITTTAAALLL BBBAAASSSAAADDDOOO EEENNN MMMIIICCCRRROOOPPPRRROOOCCCEEESSSAAADDDOOORRR
puede ser grabado en la EPROM con el programador universal del laboratorio de la universidad. Si el estudiante encuentra alguna dificultad en conseguir en el mercado de Cali el diodo de precisión LM4050, éste puede reemplazarse por un pequeño diodo zener de 3.9 voltios, ½ vatio, (por ejemplo, el NTE5007A) aunque no se obtenga la misma exactitud en la medición. Igualmente el ADC0801 puede ser reemplazado por el ADC0804, el cual tiene las mismas características diferenciándose solamente en la precisión. El diseño anteriormente descrito ya ha sido montado y debidamente comprobado su funcionamiento con resultados completamente satisfactorios, por lo que no contiene el más mínimo error, tanto en el hardware como en el software desarrollado. Bibliografía 1.- www.intel.com 2.- www.national.com 3.- www.ti.com 4.- Barry B. Brey, “Los Microprocesadores Intel”, 5ª ed, Prentice-Hall, 2001 5.- Intel, “Microsystem Components Handbook” , Volúmenes 1 y 2, 1985