Buenas tardes amigos de todo pic
Les muestro la manera de usar un pic 16f84 y un CI 4094.
El programa que incluyo a continuación esta realizado en PIC BASIC PRO, lo realice puesto que no he encontrado en la red algo parecido, con comentarios y funciona que es lo mejor
TRISA=0;PUERTO DE SALIDA
TRISB=0;PUERTO DE SALIDA
PORTA=0;LIMPIO PUERTO
PORTB=0;LIMPIO PUERTO
DAT VAR PORTA.0;SALIDA PARA PIN DATA DEL 4094
CLK VAR PORTA.1;SALIDA PARA CLOCK DEL 4094
STTR VAR PORTA.2;SALIDA PARA STR DEL 4094
CONTADOR var word;CONTADOR A ESTE LE INSERTAMOS LOS 8 BITS A ENVIAR
DATOS VAR WORD; AQUI PONEMOS LOS DATOS QUE SE QUIEREN ENVIAR
;;;;;;;;;RUTINA PRINCIPAL;;;;;
INICIO:
PAUSEUS 40; RETARDO DE 40 MICROSEGS
DATOS=%01010101;LOS DATOS A ENVIAR Y CARGAR EN 4094
CONTADOR=8;LA CANTIDAD DE BITS A ENVIAR
STTR=0;ASEGURAMOS EL CERO PARA DECIRLE A 4094 QUE SE ESTA ENVIANDO LA CADENA
GOSUB ENVIO;LLAMAMOS LA RUTINA DE ENVIO HACIA EL 4094
PAUSEUS 40; RETARDO DE 40 MICROSEGS
DATOS=%00000000;EL SEGUNDO DATO A ENVIAR
CONTADOR=8;LA CANTIDAD DE BITS A ENVIAR
STTR=0;ASEGURAMOS EL CERO PARA DECIRLE A 4094 QUE SE ESTA ENVIANDO LA CADENA
GOSUB ENVIO;LLAMAMOS LA RUTINA DE ENVIO HACIA EL 4094
GOTO INICIO; LO HACEMOS INFINITAMENTE
;;;;;;;;;;;RUTINA DE ENVIO;;;
ENVIO:
IF CONTADOR<=0 THEN; AQUI ASEGURAMOS QUE CUANDO SE TRANSMISTAN LOS 8 RETORNE DE DONDE FUE LLAMADO
STTR=1; SE LE DICE QUE HA ACABADO LA CADENA AL 4094
RETURN;RETORNE
ELSE;SI AUN ESTA EN PROCESO REALIZA ESTA RUTINA
DATOS=DATOS>>1;CORRIMIENTO HACIA LA DERECHA DEL REGISTRO.. PARA GENERAR UN CARRY :D
IF STATUS.0==0 THEN; SE COMPARA SI EL CARRY ES 0
DAT=0; DE SER CERO EL CARRY NUESTRO DATO EN ESE BIT ES 0
PAUSEUS 40; RETARDO
CLK=1;DAMOS SEÑAL DE CLOCK
PAUSEUS 40;RETARDO
CLK=0;YA HA PASADO LA INFO ASI QUE APAGAMOS EL CLOCK
CONTADOR= CONTADOR-1; LE DECIMOS AL CONTADOR QUE YA ENVIE 1
goto ENVIO; VUELVE A LA COMPARACIÓN PARA SABER SI YA SE ENVIARON LOS 8
ELSE; SI EL CARRY ES 1
DAT=1;DE SER UNO EL CARRY NUESTRO DATO EN ESE BIT ES 1
PAUSEUS 40;RETARDO
CLK=1; DAMOS SEÑAL DE CLOCK
PAUSEUS 40;RETARDO
CLK=0;SEÑAL DE CLOCK QUE LE DICE QUE YA PASO LA INFO
CONTADOR= CONTADOR-1;LE DECIMOS AL CONTADOR QUE YA ENVIE 1
GOTO ENVIO;VUELVE A LA COMPARACIÓN PARA SABER SI YA SE ENVIARON LOS 8
ENDIF;TERMINO EL IF
ENDIF;TERMINO EL OTRO IF
END; FIN DEL PROG
La manera de conectar el circuito es la siguiente, lo probe en proteus.
aqui dejo los archivos