list P=16C84, R=HEX, C=9 include p16cxx.inc tempW equ 0C Tuner0 equ 14 Tuner1 equ 15 Tuner2 equ 16 ;====== Programa principal Start bsf STATUS,RP0 movlw b'11111000' ; Bits 0, 1, 2 son salidas movwf TRISB bcf STATUS,RP0 movlw b'00001011' movwf Tuner0 Lazo call Sinton goto Lazo ;====== Rutina SINTON ; Espera en Tuner0, Tuner1, Tuner2 los datos a enviar Sinton bsf PORTB,2 ; Enable = 1 ; Ojo, aqui tenemos que perder 10us movlw Tuner0 movwf FSR movlw b'00001000' call EnvReg movlw Tuner1 movwf FSR movlw b'00100000' call EnvReg movlw Tuner2 movwf FSR movlw b'10000000' call EnvReg bcf PORTB,2 ; Fin del enable return EnvReg movwf tempW ; Guardar W EnvReg0 movfw INDF ; Buscar dato a enviar andwf tempW,0 ; Filtrar el bit a enviar bcf PORTB,0 ; Asegurar que el bit este en 0 btfss STATUS,Z bsf PORTB,0 ; Si necesario, ponerlo en 1 bsf PORTB,1 ; Clock en 1 nop bcf PORTB,1 ; Clock en 0 rrf tempW,1 ; Rotar la mascara btfss STATUS,C ; Fin de la transmision? goto EnvReg0 ; Todavia no... return end