movlw 0xF0 ;Muevo 0xF0 a W
movwf DatoAEnviar ;Muevo W en DatoAEnviar
call EnviaDato
...
...
EnviaDato
bsf STATUS,C ;Pongo en alto STATUS,C para "ensuciar" DatoAEnviar
rrf DatoAEnviar,F ;Roto a la derecha DatoAEnviar
ProximoBit
bsf DATA ;Supongo que el bit a enviar es un alto
btfss STATUS,C ;¿El bit a enviar es realmente un alto?
bcf DATA ;No. Entonces DATA en bajo
bcf STATUS,C ;Pongo en bajo STATUS,C
rrf DatoAEnviar,F ;y roto a la derecha el registro
movf DatoAEnviar,F ;Muevo el registro sobre si mísmo(recuerden que esto setea el flag STATUS,Z)
btfss STATUS,Z ;¿Registro=0?
goto ProximoBit ;No. Seguir
return ;Si. volver