EXPANSION TO 32 DIGITAL OUTPUTS BY THE PARALLEL PORT
Parallel Port

PARALLEL PORT INTERFACING

 

Expansion to 32 digital Outputs for the parallel port

 

Try searching here:  

 

Look our Blog: Parallel Ports Blog
Forum: Parallel Ports forum
PCI Parallel port cards

 

 

The standard parallel port only has 12 digital output (8 status register and 4 of the control register). Some applications can need more of the 12 outputs. In this case it is possible to expand the originator's reference number (32) by means of a simple circuit based on 4 electronic components like the buffer (compensating) 74LS244. The data are sent (1 byte by means of the registry of data) to 4buffers and it is selected by as they must leave. For this the four bits are used control register to select the buffer that is desired.

Description of the buffer 74LS244

The 74LS244 buffer

Fig. The buffer 74LS244

 

References

Entrances Exits

1A1 Entrance 1 1V1 Exit 1

1A2 Entrance 2 1V2 Exit 2

1A3 Entrance 3 1V3 Exit 3

1A4 Entrance 4 1V4 Exit 4

2A1 Entrance 5 2V1 Exit 5

2A2 Entrance 6 2V2 Exit 6

2A3 Entrance 7 2V3 Exit 7

2A4 Entrance 8 2V4 Exit 8

 

Feeding and operation

1 Selection of nibble 1A. (to select with low level)

2 Selection of nibble 2A. (to select with low level)

Vcc 5 volts

Gnd

operation

74LS244 is formed by two groups of 4 bits. When a group is selected, the bits that are in the entrance is transferred when coming out. component selection is made through control register. The pin of control register must both be connected to rating bits so that the transference is  8 in 8 bits. In the figure that is next they show the

complete. circuit connections

Suggested connection for the  74LS244 buffer with the Parallel Port

Fig. Suggested connection for the  74LS244 buffer with the Parallel Port

 

Google
 

 

 

 

Programming

/* 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>=8) Y (dir_salida<=15) entonces

inicio

Si dato=1 entonces buffer[2]=buffer[2] Odos_a_la(dir_salida-8)

sino buffer[2]=buffer[2] Y NO dos_a_la(dir_salida-8)

/*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 */

Google
 

 

 

Home