Expansión a 32 salidas digitales para el puerto paralelo
El puerto paralelo estándar sólo tiene 12 salidas digitales (8 del registro de estado y 4 del registro de control). Algunas aplicaciones pueden necesitar más de las 12 salidas. En este caso es posible expandir el número de salidas (32)mediante un sencillo circuito basado en 4 componentes electrónicos como el buffer (compensador) 74LS244. Se envían los datos (1 byte mediante el registro de datos) a los 4buffers y se selecciona por cual deben salir. Para esto se usan los cuatro bits del registro de control para seleccionar el buffer que se desee.
Descripción del buffer 74LS244
Referencias
Entradas Salidas
1A1 Entrada 1 1V1 Salida 1
1A2 Entrada 2 1V2 Salida 2
1A3 Entrada 3 1V3 Salida 3
1A4 Entrada 4 1V4 Salida 4
2A1 Entrada 5 2V1 Salida 5
2A2 Entrada 6 2V2 Salida 6
2A3 Entrada 7 2V3 Salida 7
2A4 Entrada 8 2V4 Salida 8
Alimentación y operación
1 Selección de nibble 1A. (seleccionar con nivel bajo)
2 Selección de nibble 2A. (seleccionar con nivel bajo)
Vcc 5 voltios
Gnd Tierra
La fuente de 5 voltios para alimentar este circuito se puede obtenerdirectamente de la fuente de poder del PC, o del puerto de juegos (ver fuente dealimentación).
Modo de operación
El 74LS244 está formado por dos grupos de 4 bits. Cuando se seleccionaun grupo, los bits que estén en la entrada serán transferidos a la salida. La seleccióndel componente se realiza a través del registro de control. El pin del registro decontrol debe ser conectado a los dos bits de habilitación para que la transferencia seade 8 en 8 bits. En la figura que está a continuación se muestran las conexiones delcircuito completo.
GUADA LA IMAGEN O PASALE EL RATON POR ENCIMA PARA QUE QUE VEAS LAS CONEXIONESProgramación
El siguiente algoritmo permite colocar en 1 cualquiera de las 32salidas del circuito, sin modificar el resto.
/* Definimos las variables */
Buffer es un arreglo[1..4] de tipo byte
i de tipo entero
dir_base,dir_control de tipo word
procedimiento inicializar
inicio
obtener dir_base del puerto paralelo
calcular: dir_control=dir_base+2
para i=1 hasta 4 hacer buffer[i]=0
fin
función dos_a_la(i de tipo entero) retorna un dato de tipo byte
definimos las variables:
r,ctd de tipo entero
inicio
r=1
para ctd=1 hasta i hacer r=r*2
dos_a_la=r
fin
procedimiento enviar(dir_salida,dato de tipo byte)
dir_salida puede estar entre 0 y 31
dato puede ser 0 o 1
inicio
Si (dir_salida>=0) Y (dir_salida<=7) entonces
inicio
Si dato=1 entonces buffer[1]=buffer[1] Odos_a_la(dir_salida)
sino buffer[1]=buffer[1] Y NO dos_a_la(dir_salida)
/*activar el buffer 1*/
port[dir_control]=7 XOR 11 /* 7=0000 0111 recuerde que el74LS244 se activa
con un valor bajo (bit en 0).
utilizamos la operacion OR con 11
para invertir los bits del registro
de control*/
/*enviar los datos*/
port[dir_base]=buffer[1]
Fin
Si (dir_salida>=
Y (dir_salida<=15) entonces
inicio
Si dato=1 entonces buffer[2]=buffer[2] Odos_a_la(dir_salida-
sino buffer[2]=buffer[2] Y NO dos_a_la(dir_salida-
/*activar buffer 2*/
port[dir_control]=11 XOR 11 /* 11= 0000 1011*/
/*enviar los datos*/
port[dir_base]=buffer[2]
Fin
Si (dir_salida>=16) Y (dir_salida<=23) entonces
inicio
Si dato=1 entonces buffer[3]=buffer[3] Odos_a_la(dir_salida-8*2)
Sino buffer[3]=buffer[3] Y NO dos_a_la(dir_salida-8*2)
/*activar buffer 3*/
port[dir_control]=13 XOR 11 /* 13= 0000 1101*/
/*enviar los datos*/
port[dir_base]=buffer[3]
Fin
Si (dir_salida>=24) Y (dir_salida<=31) entonces
inicio
Si dato=1 entonces buffer[4]=buffer[4] Odos_a_la(dir_salida-8*3)
sino buffer[4]=buffer[4] Y NO dos_a_la(dir_salida-8*3)
/*activar buffer 4*/
port[dir_control]:=14 XOR 11 /*14=0000 1110*/
/*enviar los datos*/
port[dir_base]=buffer[4]
Fin
Fin
/*Utilización*/
primero se debe llamar al procedimiento inicializar
Luego llamar el procedimiento enviar
Ejemplos:
Si se quiere enviar un 1 a la salida 24 la llamada será:
Enviar(24,1)
Si se quiere enviar un 0 a la salida 14 la llamada será:
Enviar(14,0)
Si se quiere enviar un 1 a las salidas 3, 15 y 27 las llamadas serán:
Enviar(3,1)
Enviar(15,1)
Enviar(27,1)
Si se quiere enviar un 0 a las salidas 2, 24 y 16 y enviar un 1 a la salida 25, las llamadas serán:
Enviar(2,0)
Enviar(24,0)
Enviar(16,0)
Enviar(25,1)
/* Fin */