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