;Este programa saca por pin 1 del PIC 16F84A un dato de un byte hacia un registro
;de desplazamiento SERIE-PARALELO como por ejemplo el 74HC164, XTAL=4Mhz
;una vez visualizado el dato se desplaza desapareciendo y asi termina.
__CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC
LIST P=16F84A
INCLUDE <P16F84A.INC>
CBLOCK 0x0C
ENDC
EEPROM EQU 0x1C
ALMACEN EQU 0x20
CONTADOR EQU 0x21
Dato EQU 0x24
DI EQU 7
DO EQU 6
SDA EQU 1 ;salida datos serie, pin 1 puerta A
SCL EQU 0 ;señal de reloj para el 74HC164, pin 0 puerta A
ORG 0X00 ;Inicio del ensamblado desde 00
goto INICIO ;Salto a la primera instruccion
ORG 0X05 ;Ensamblar desde 05
INICIO movlw b'10101010' ;dato a sacar por un registro de
;desplazamiento serie-paralelo 8 bits
movwf ALMACEN ;registro donde se almacena el dato
call TX
nop
call Retardo_5s
movlw b'00000000'
movwf ALMACEN
call TX
quieto nop
goto quieto
TX movlw .8 ;pone 8 en W
movwf CONTADOR ;carga contador con 8
TXLP bcf EEPROM,DO ;a 0 bit DO
btfsc ALMACEN,0 ;mira el bit 7 de ALMACEN y salta si es 0
bsf EEPROM,DO ;a 1 bit DO
call BITOUT
rrf ALMACEN,F ;rota a izquierda ALMACEN
decfsz CONTADOR,F ;decrementa contador si es 0 salta
goto TXLP
return
BITOUT BSF STATUS,RP0 ;pagina 1
MOVLW 0X00
MOVWF TRISA ;puerta A salida
BCF STATUS,RP0 ;pagina 0
BTFSS EEPROM,DO ;mira el bit DO y salta si vale 1
GOTO BITLOW
BSF PORTA,SDA ;pone a 1 SDA
GOTO CLK_OUT
BITLOW BCF PORTA,SDA ;pone a 0 SDA
CLK_OUT BSF PORTA,SCL ;pone a 1 SCL
NOP
NOP
NOP
NOP
BCF PORTA,SCL ;pone a 0 SCL
NOP
call Retardo_5s
nop
nop
return
INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
END