Está en la página 1de 11

Capítulo 2

Periféricos en paralelo

2.1 Introducción
Para acceder a los recursos de la computadora desde el exterior de la misma se puede hacer de dos
maneras: i) de forma paralela y ii) de forma serial. En este capítulo veremos como acceder a los
recursos de la computadora utilizando comunicaciones en paralelo. Cuando decimos recursos, nos
referimos a la memoria de la computadora, a los registros del µProcesador entre otros.

Intel nos proporciona el PPI (Programable Pararell Interface) para conectar la computadora con el
mundo exterior. El PPI es un chip de 40 patitas que nos permite crear tres puertos de E/S, cada
uno de ocho bits o crear dos puertos de comunicaciones half duplex, cada uno de ocho bits o crear
un puerto de comunicaciones full duplex y otro de comunicaciones half duplex, cada uno de ocho
bits.

2.2 Controlador de Periféricos en Paralelo, PPI 8255


Se utiliza para conectar, a la computadora, dispositivos o periféricos que trabajan en paralelo con
palabras de 8, 16 o 24 bits. En las computadoras que utilizan µProprocesadores Intel, el PPI esta
ubicado en los puertos 60h-63h; Sin embargo para desarrollo de prototipos estas computadoras
reservan las direcciones 0300h - 03FFh.

D7 − D0 P A7 − P A0
PA Grupo A
RD P C7 − P C4
WR PB
A1 PC PPI-8255
A0
Control
Reset P C3 − P C0
7 0 Grupo B
CS P B7 − P B0

Figura 2.1: PPI-8255, Programable Pararell Interface

En la figura 2.1 se ve el esquema del PPI. Consta de 3 puertos de E/S en paralelo, a los que se
denominan PA, PB y PC. Cada una de estos puertos es de 8 bits. Las 8 líneas de la puerta PC se

1
2.3. MODO 0 2

dividen en 2 partes de 4 bits. Estas dos partes permiten formar dos grupos. Un grupo está formado
por PA+PCH y el otro grupo esta formado por PB+PCL. En el grupo PA+PCH, PA es el canal
de datos y PCH es el canal de control. En el grupo PB+PCL, PB es el canal de datos y PCL es el
canal de control.

El 8255 dispone de 4 registros, cada uno de 8 bits. Tres se dedican a almacenar datos que entran o
salen de los puertos PA, PB y PC, el cuarto registro se dedica a funciones de control y programación.
Programando este registro se configuran los puertos para que funcionen en uno de tres modos. El
modo 0 nos permitirá disponer de tres puertos de E/S. En el modo 1 los puertos PA y PB
pueden funcionar con comunicaciones half duplex y en modo 2 el puerto PA puede funcionar con
comunicaciones full duplex. En la figura 2.2 se muestra el detalle de la palabra de control.

D7 D6 D5 D4 D3 D2 D1 D0
1 MPA1 MPA0 PA PCH PB+PCL PB PCL

MPA1 MPA0 PA Programación PCH Programación PB+PCL PB Programación PCL Programación


0 0 0 Modo 0, PA salida 0 Salida 0 0 Modo 0, PB salida 0 Salida
0 0 1 Modo 0, PA entrada 1 Entrada 0 1 Modo 0, PB entrada 1 Entrada
0 1 X PA Modo 1 1 X Modo 1
1 X X PA Modo 2

Figura 2.2: PPI, Palabra de control

La lógica de la palabra de control consiste en que “0” configura como salida y “1” configura como
entrada. Así si el bit PA = 0, significa que estamos configurando PA como salida, si PB = 1,
significa que estamos configurando PB como entrada. Por otro lado podemos seleccionar el modo.
Por ejemplo si PA1 PA0 = 00, estamos configurando PA en modo 0. Si PA1 PA0 = 01, estamos
configurando PA en modo 1. Si PA1 PA0 = 1X, estamos configurando PA en modo 2.

Con base en la figura 2.1 y la figura 2.2 es bueno reforzar el hecho que cuando se programa en modo
1 o en modo 2 entran en acción los grupos A y grupo B. El grupo A esta formado por PA +
PCH y el grupo B esta formado por PB + PCL. Si estudia la figura 2.2 verá que el grupo A
puede trabajar en modo 0; es decir como E/S, también puede trabajar en modo 1; es decir como
canal de comunicaciones half duplex, también puede trabajar en modo 2; es decir como canal de
comunicaciones full duplex.

También verá que el grupo B puede trabajar en modo 0; es decir como E/S, también puede
trabajar en modo 1; es decir como canal de comunicaciones half duplex.

2.3 Modo 0
En el modo 0 las puertas PA, PB y PC pueden trabajar como canales de entrada salida; es decir,
el usuario puede sacar o introducir datos a la computadora a voluntad. En la figura 2.3 se muestra
la palabra de control que nos permitirá configurar la puerta PA como salida, la puerta PB como
entrada y la puerta PC como salida. Vea que para que la puerta PA sea salida, debe ser programada
en modo 0. Para que la puerta PB sea entrada, debe ser programada en modo 0. Para que la puerta
PC sea salida, los bits PCL y PCH deben programados a “cero”.
2.4. MODO 1 3

D7 D6 D5 D4 D3 D2 D1 D0
1 MPA1 MPA0 PA PCH PB+PCL PB PCL
1 0 0 0 0 0 1 0 82h

D7 − D0 P A7 − P A0
RD
µProcesador WR PPI P B7 − P B0
Reset
P C7 − P C0
A19 − A0 ALE CS A1 A0

Decoder

Figura 2.3: PPI, Modo 0, PA salida„ PB entrada y PC Salida

Para programar el PPI, vamos a suponer que conectaremos en las direcciones destinadas para
desarrollo de prototipos; es decir 0300h hasta 031Fh. En estas condiciones el decodificador de la
figura 2.3 decodificará lo siguiente:

A19 -A16 A15 -A12 A11 -A8 A7 -A4 A3 A2 A1 A0 Registro


0 0 3 0 0 0 0 0 Puerta PA
0 0 3 0 0 0 0 1 Puerta PB
0 0 3 0 0 0 1 0 Puerta PC
0 0 3 0 0 0 1 1 Control

Y el programa de inicialización quedaría así


mov dx ,0303 h ; Registro de control
mov al ,82 h ; PA salida , PB entrada , PC salida
out dx , al

Y, para sacar datos o meter datos a la computadora el código sería


mov dx ,0300 h ; Un dato mov dx ,0301 h ; Se lee un dato
mov al , dato ; sale por in al , dx ; de la puerta PB
out dx , al ; la puerta PA mov dato , al

a) Sacar datos por la puerta PA b) Meter datos por la puerta PB

2.4 Modo 1
En el modo 1 las puerta PA y PB pueden trabajar en half duplex, es decir permiten comunicación
bidireccional pero no al mismo tiempo. En este modo disponemos dos canales de comunicaciones
half duplex. Un canal esta formado por PA+PCH y el otro canal esta formado por PB+PCL.

Como hemos visto en el modo 0, en todos los casos si el bit Di = 0, el puerto correspondiente
se configura como salida y si el bit Di = 1, el puerto correspondiente se configura como entrada.
Pero en el modo 1, cuando el bit D2 = 1, el grupo PB+PCL funciona en modo 1. De la misma
manera cuando los bits D6 D5 = 01, el grupo PA+PCH funciona en modo 1.
2.4. MODO 1 4

En este punto tenga cuidado y observe que cuando el bit D2 = 1 no tiene sentido configurar el
puerto PB como salida (D1 = 0) o como entrada (D1 = 1). De la misma manera tampoco tiene
sentido configurar el puerto PA como salida (D4 = 0) o como entrada (D4 = 1)
D7 D6 D5 D4 D3 D2 D1 D0
1 MPA1 MPA0 PA PCH PB+PCL PB PCL
1 0 1 X X X X X 0A0h

P A7 − P A0
D7 − D0
RD P C4 ST B
µProcesador WR PPI P C5 IBF
Reset P C6 ACK
P C7 OBF
A19 − A0 ALE CS A1 A0

Decoder

Figura 2.4: PPI modo 1. PA half duplex

Para el circuito de la figura 2.4, si suponemos que la dirección del puerto PA es 0300h, PB estaría
en 0301h, PC estaría en 0302h y el registro de control estaría en 0303h. Entonces al momento de
configurar el PPI, para la figura 2.4 programamos como en la figura 2.5.

mov dx ,0303 h ; PPI


PA Modo1 mov al ,0 A0h ; Modo 1
out dx , al ; PA half duplex
otro:
dx ← 0302h mov Quit ,0
otro :
mov dx ,0302 h ; Leer
al ⇐ dx in dx , al ; canal de control
and al ,10100000 b ; Aislamos PC5 = IBF y PC7 =/ OBF
al ← al and 10100000 cmp al ,20 h ; Ve si es IBF
je lePA ; Lee de PA
yes cmp al ,0 ; Ve si es / OBF
al = IBF readPA je esPA ; Escribe en PA
mov al , Quit ; Si Quit = 1
cmp al ,1
yes jne otro
al = OBF writePA ret ; Termina
lePA :
no
call readPA
no jmp otro
Quit? esPA :
no
call writePA
jmp otro
ret

Figura 2.5: Protocolo de comunicaciones, PA half duplex

Fíjese que si IBF = 1 quiere decir que llego un dato al puerto PA y el µProcesador tiene que leer.
Cuando OBF = 0 quiere decir que el µProcesador puede escribir un dato en el puerto PA. También
hay que evidenciar que las rutinas readPA y writePA son las que cambian el estado de la bandera
2.4. MODO 1 5

Quit = 1. Esta bandera normalmente está en Quit = 0. Es decir después que el µProcesador lee o
escribe un dato en el puerto PA, puede cambiar el estado de la bandera Quit, de cero a uno. Las
rutinas para leer y escribir del puerto PA son como sigue:

readPA proc writePA proc


mov dx ,0300 h mov al , dato
in al , dx mov dx ,0300 h
mov dato , al out dx , al
; Aqui cambiar estado de Quit = 1 ; Aqui cambiar estado de Quit = 1
ret ret
readPA endp writePA endp

a) Leer un dato de PA b) Escribir un dato en PA

El cambio de estado de la bandera Quit puede ser, por ejemplo, desde el teclado (servicio 0Bh de
la int 21h) o con un click del ratón (servicio 03h de la int 33h). Estas interrupciones no detienen
la ejecución del programa y por tanto no detienen el prococolo de comunicaciones half duplex, a no
ser por voluntad del usuario. Para utilizar el puerto PB en modo half duplex, toda la explicación
realizada para el puerto PA, será la misma.

D7 D6 D5 D4 D3 D2 D1 D0
1 MPA1 MPA0 PA PCH PB+PCL PB PCL
1 0 0 X X 1 X X 84h

P B7 − P B0
D7 − D0
RD P C0

µProcesador WR PPI P C1 IBF/OBF


Reset P C2 ACK/ST B
P C3
A19 − A0 ALE CS A1 A0

Decoder

Figura 2.6: PPI modo 1. PB half duplex

Simplemente vea en las figuras 2.4 y 2.6. En la figura 2.4 las señales IBF y OBF están en los bits
PC5 y PC7 respectivamente y en la figura 2.6 las señales IBF y OBF están en el bit PC1. Por tanto
en la figura 2.5, codificamos and al, 10100000b mientras que en la figura 2.7 codificamos and
al,00000110b. Las rutinas para leer y escribir en el puerto PB son como sigue:

readPB proc writePB proc


mov dx ,0301 h mov al , dato
in al , dx mov dx ,0301 h
mov dato , al out dx , al
; Aqui cambiar estado de Quit = 1 ; Aqui cambiar estado de Quit = 1
ret ret
readPB endp writePB endp

a) Leer un dato de PB b) Escribir un dato en PB


2.5. MODO 2 6

mov dx ,0303 h ; PPI


PB Modo1 mov al ,84 h ; Modo 1
otro: out dx , al ; PB half duplex
dx ← 0302h mov Quit ,0
otro :
dx ⇐ al mov dx ,0302 h ; Leer
in al , dx ; canal de control
and al ,00000110 b ; Aislamos PC1
al ← al and 00000110 cmp al ,02 h ; Ve si es IBF
je lePB ; Si IBF lee de PB
yes call writePB ; Si OBF escribe en PB
PC1 = 1 readPB fin :
no
mov al , Quit ; Si Quit = 1
cmp al ,1
writePB jne otro
fin: ret ; Termina
lePB :
call readPB
no
Quit=1 jmp fin
yes

ret

Figura 2.7: Protocolo de comunicaciones, PB half duplex

2.5 Modo 2
En el modo 2 el puerto A puede trabajar en full duplex, es decir permite comunicación bidireccional
al mismo tiempo. En este modo disponemos de un canal de comunicaciones full duplex. El canal
esta formado por PA+PCH.

Como hemos visto en el modo 0, en todos los casos si el bit Di = 0, el puerto correspondiente se
configura como salida y si el bit Di = 1, el puerto correspondiente se configura como entrada. Pero
en el modo 2, cuando los bits D6 D5 = 10, el grupo PA+PCH funciona en modo 2.

En este punto tenga cuidado y observe que cuando D6 D5 = 10, no tiene sentido configurar el
puerto PA como salida (D4 = 0) o como entrada (D4 = 1).

En realidad la figura 2.8 es la misma que la figura 2.4, es decir desde el punto de vista del hardware
el modo 1 y el modo 2 son lo mismo para la puerta PA; sin embargo desde el punto de vista del
software no son iguales del todo, cambia la programación del registro de control. Vea las figuras 2.6
y 2.7 el registro de control se programa con 84h, mientras que en la figuras 2.8 y 2.9 el registro
de control se programa con 0C0h.

Como hemos visto en los párrafos anteriores, el protocolo de comunicaciones simplemente se basa en
el hecho de que cambian las señales IBF y OBF. Entonces la pregunta es ¿Debido a que cambian
estas señales?

Para entender el protocolo de comunicaciones que utiliza el PPI, vamos a analizar las señales STB,
IBF, ACK y OBF. Vamos a suponer qué un periférico se conecta a la computadora utilizando el
PPI y vamos a analizar las señales desde el lado de la computadora.
2.5. MODO 2 7

D7 D6 D5 D4 D3 D2 D1 D0
1 MPA1 MPA0 PA PCH PB+PCL PB PCL
1 1 0 X X X X X 0C0h

P A7 − P A0
D7 − D0
RD P C4 ST B
µProcesador WR PPI P C5 IBF
Reset P C6 ACK
P C7 OBF
A19 − A0 ALE CS A1 A0

Decoder

Figura 2.8: PPI modo 1. PA full duplex

mov dx ,0303 h ; PPI


mov al ,0 C0h ; Modo 2
PA Modo2 out dx , al ; PA half duplex
mov Quit ,0
otro: otro :
dx ← 0302h mov dx ,0302 h ; Leer
in al , dx ; canal de control
al ⇐ dx and al ,10100000 b ; Aislamos PC5 = IBF y PC7 =/ OBF
cmp al ,20 h ; Ve si es IBF
je lePA
al ← al and 10100000 cmp al ,0 ; Ve si es / OBF
je esPA
yes
mov al , Quit ; Si Quit = 1
al = IBF readPA cmp al ,1
jne otro
yes
ret ; Termina
al = OBF writePA lePA :
call readPA
no jmp otro
esPA :
no
Quit? call writePA
jmp otro
no

ret

Figura 2.9: Protocolo de comunicaciones, PA full duplex

En recepción, un periférico envía un dato a la computadora generando la señal STB, esta carga
el dato en cuestión, en los flip-flops internos del PPI. Cuando el dato esta cargado se activa la
señal IBF = 1, avisando que el buffer de entrada de datos esta lleno, Entonces podríamos decir
que la señal STB activa la señal IBF de forma automática. Por su parte el µProcesador examina
periódicamente las señales IBF, si alguna de ellas esta activa (IBF = 1), reconoce que en el buffer
de entrada hay un dato. En el momento que el µProcesador lee el dato (in al,dx) se desactivan las
señales IBF = 0 y STB = 1.
2.6. DISEÑO DE UNA FUENTE DIGITAL REGULADA-REGULABLE 8

En transmisión, el µProcesador examina periódicamente las señales OBF. Si OBF = 0, quiere


decir que el buffer de salida del PPI esta vacío y por tanto el µProcesador puede escribir en el
puerto. Cuando el µProcesador escribe en el puerto (out dx,al) se activa STB = 0 para cargar el
dato en el periférico, por su parte el periférico confirma que le llego el dato enviando al µProcesador
ACK=0. Cuando llega la señal ACK al PPI se desactivan las señales OBF = 1 y ACK = 1.
Ahora que sabemos como trabajan las señales STB, IBF, ACK y OBF del PPI, vuelva a analizar
las figuras 2.5, 2.7 y 2.9 y podrá convencerse que para implementar el protocolo de comunicaciones,
lo único que interesa es examinar el estado de las señales IBF y OBF.

2.6 Diseño de una fuente digital regulada-regulable

vi LM317 vo
0.1µF
R2

10µF

Rj R1

T1
Ri
T2

D7 − D0 T3
 
T4 R2
RD vo = 1.25 1 + R1
T5
µProcesador WR PPI T6  
R2
Reset T7 vo = 1.25 1 + R1 ||Rj
T8
A19 − A0 ALE CS A1 A0

Decoder

Figura 2.10: Hardware de una fuente digital utilizando el PPI

D7 D6 D5 D4 D3 D2 D1 D0 SI→ ←BX
1 MPA1 MPA0 PA PCH PB+PCL PB PCL
1 0 0 0 X X X X 80h

memoria Vout

DI→ VoutF
a) Palabra de control b) Modelo de memoria

Figura 2.11: Palabra de control y modelo de la memoria para una fuente digital
2.6. DISEÑO DE UNA FUENTE DIGITAL REGULADA-REGULABLE 9

Fuente digital
mov dx ,0303 h
mov al ,80 h
dx ← 0303h out dx , al
al ← 80h lea si , Vout
dx ⇐ al lea bx , Vout
lea di , VoutF
dec di
si = Vout otro : call tecla
cmp al ,1 Bh ; Salir
bx = Vout
je fin
di = VoutF cmp ah ,48 h ; Arriba
di ← di - 1 je bajar
cmp ah ,50 h ; Abajo
otro: otro: je subir
LeTecla jmp otro
fin: bajar : cmp si , bx
si je alerta
al = 27 ret mov al ,[ bx ]
no bajar: mov dx ,0300 h
alarma: out dx , al
si si dec bx
ah = “↑” si = bx Beep
jmp otro
subir: no subir : cmp di , bx
alarma: no
je alerta
Beep di = bx ah = “↓” al ← [bx] mov al ,[ bx ]
si si mov dx ,0300 h
dx ← 0300h
out dx , al
no dx ⇐ al
inc bx
al ← [bx] no bx ← bx - 1 jmp otro
dx ← 0300h alarma : call beep
dx ⇐ al jmp otro
fin : ret
bx ← bx + 1

a) Diagrama de flujo b) Código ensamblador

Figura 2.12: Diagrama de flujo y código para una fuente digital utilizando el PPI

LeTecla proc
mov ah ,0 bh ; estado del teclado
int 21 h
cmp al ,0
je fin
mov ah ,10 h ; lee codigos
int 16 h ; de rastreo
fin : ret
LeTecla endp
;
; El servicio 10 h de la int 16 h devuelve en AX
; + - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+
; | Tecla en | AH | AL |
; + - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+
; | Tecla normal | Codigo de rastreo | Caracter ASCII |
; | Tecla extendida | Codigo de rastreo | 00 h o E0h |
; + - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - - - - -+ - - - - - - - - - - - - - - - -+

Figura 2.13: Lee el teclado utilizando código de rastreo

En la figura 2.12, la rutina LeTecla es como en la figura 2.13. El servicio 10h de la int 16h
devuelve en AX la tecla, bajo el siguiente formato. En AH está el código de rastreo. Por ejemplo
2.7. COMUNICACIÓN ENTRE COMPUTADORAS A TRAVÉS DEL PPI 10

para Esc, AH = 01 y, en AL está código ASCII del caracter, para Esc, AL = 1Bh. Para la tecla
flecha arriba, AH = 48h y AL = E0h. Para la flecha abajo AH = 50h y AL = E0h. En este
punto vea que AL = E0 debido a que las teclas arriba y abajo son duplicadas.

2.7 Comunicación entre computadoras a través del PPI

Ejemplo 2.1 Diseñar un sistema de computación utilizando el PPI que permita conectar dos com-
putadoras. La computadora-1 envía datos a la computadora-2. Los datos son cadenas de caracteres
que contienen letras y números. La computadora-2 recibe las cadenas de caracteres y cuando cuenta
diez dígitos termina la comunicación. Por otro lado las cadenas de caracteres que envía la PC1
terminan con “$”, de modo que si las cadenas de caracteres no tienen ningún dígito termina la
comunicación, debido al caracter “$”.

Figura 2.14: Comunicación entre dos computadoras a través del puerto PA del PPI

Computadora 1, puerto A, salida de datos

Figura 2.15: Protocolo de comunicaciones utilizando PPI, puerto PA salida


2.8. ESTÁNDAR RS232 11

Computadora 2, puerto A, entrada de datos

Figura 2.16: Protocolo de comunicaciones utilizando PPI, puerto PA entrada

Ejemplo 2.2 Diseñar un sistema de computación para conectar dos computadoras utilizando el PPI.
La computadora-1 envía a la computadora-2 un archivo de texto que termina con el ascii EOF.
El texto está formado por párrafos y cada párrafo esta formado por palabras y números. En la
computadora-2, cada que llega una palabra, la cuenta e informa a la computadora-1, de igual manera
informa cada que ha recibido un párrafo. Un párrafo termina con la secuencia ascii CR y LF.

Figura 2.17: Comunicación entre dos computadoras a través del puerto PB del PPI

2.8 Estándar RS232

También podría gustarte