Yo para transmitir esto lo haria asi:
EnviaDato
movlw d'8' ; Número de bits a transmitir.
movwf ContBits
EnviaBit ; Comienza a enviar datos.
btfss DataEnviar,0 ; ¿Es un "1" el bit a transmitir?
bcf PORTB,BData ; No, pues envía un "0".
btfsc DataEnviar,0 ; ¿Es un "1" el bit a transmitir?
bsf PORTB,BData ; Si, Transmite un "1".
bcf PORTB,BClock ; Clock=0.-
nop
bsf PORTB,BClock ; Clock=1.-
rrf DataEnviar,1 ; Rota para envia siguiente bit.-
decfsz ContBits,1 ; Comprueba si es el último bit.
goto EnviaBit ; No es el último bit repite la operación.
return ; Retornamos.-
;.................................................................................
end
Solo tienes que cargar el Byte a transmitir en "DataEnviar" llamas a esa subrutina "call EnviaDato" y listo.
Sacado, como no, de este tutorial de Suki:
http://www.todopic.com.ar/foros/index.php?topic=24720.msg213264#msg213264