Hola.
Se usan rotaciones generalmente.
Ejemplo:
# DEFINE CLOCK PORTD,4 ;Defini pin usado para clock aqui
# DEFINE DATAS PORTD,5 ;Defini pin usado para data aqui
# DEFINE STROBE PORTD,6 ;Defini pin usado para strobe(si es que lo usas) aqui.
;Pin OE deberia ir a 5v gralmente( no se usa y a 5v está activado siempre)
Rotaciones EQU 0x40 ;reservo posicion RAM para variables
Temp EQU 0x41
;Funcion:
ENVIARBYTESERIAL
movwf Temp
movlw .8
movwf Rotaciones
bcf CLOCK
Otra
rlf Temp,F
bcf DATAS
btfsc STATUS,C
bsf DATAS
bsf CLOCK
bcf CLOCK
decfsz Rotaciones,F
goto Otra
bsf STROBE
bcf STROBE
return
Uso de la funcion:
movlw b'00101010'
call ENVIARBYTESERIAL ;envia 00101010 via serie al registro de desplazamiento.
Algo asi seria. Lo acabo de hacer asi que por ahi hay algo mal.
Saludos