muchas gracias por su ayuda amigos del foro y la verdad me salio queria compartilos gracia a ustedes.
LIST P=16F877
__config 3f32 ; para 20MHZ
;__config 3f31 ; para 4MHZ
INCLUDE <P16F877.INC>
INCLUDE <MACROPIC.INC>
;*************************************************************
CBLOCK 0x20
VAR1
VAR2
ENDC
ORG 0x00
;**************************************************************
banco 1
mov ADCON1, b'00001110' ;Justificamos el resultado de los registros
;ADRES a la izquierda (ADMF=0). Solo el pin RA0 será canal analógico
;y las tensiones de referencia para el ADC serán VREF+=VDD y VREF-= VSS
bsf TRISA,0 ;Canal AN0 como entrada
bcf TRISC,6 ;RC6/TX salida, pin de transmisión
mov SPBRG,.129 ; Vtx = 9600bps
mov TXSTA,b'00100100' ; TX-ON / 8 bits /BRGH=1
banco 0
;**************************************************************
movlw B'01000001' ; Tad = 1.6us /CH-0 /ON/FOSC/8
movwf ADCON0
bsf RCSTA,SPEN ; SPEN = 1
INICIO
bsf ADCON0,GO ; Inicio de conversión
btfsc ADCON0,GO ;pregunto si la conversion termino
goto $-1 ; ¿Fin?
movf ADRESH,W ;Si, W=ADRESH
GUARDA movwf VAR1 ;cargo el dato convertido en esta variable
call TX_DATO ;llamo para enviar
NUEVO
bsf ADCON0,GO ; Inicio la nueva conversión
btfsc ADCON0,GO ;pregunto si la conversion termino
goto $-1 ; ¿Fin?
movf ADRESH,W ;Si, llevo a W=ADRESH
movwf VAR2 ;guardo la nueva conversion
subwf VAR1,W ;comparo si el dato enviado es igual a la nueva conversion
btfss STATUS,Z ;pregunto por el flag
goto Z_0 ;la comparacion es diferente ?
goto Z_1 ;la comparacion es igual ?
Z_0 movf VAR2,W ;si es diferente saco el nuevo dato a W
goto GUARDA ;me voy pra enviar
Z_1 bcf STATUS,Z ;si es igual borro el flag inicio la nueva conversion
goto NUEVO
;**************************************************************
TX_DATO
banco 1
btfss TXSTA,TRMT ;pregunto si la linea de transmision esta libre
goto $-1
banco 0
movwf TXREG ;el dato que esta en W es enviado
btfss PIR1,TXIF ;Espera hasta que transmisión culminó
goto $-1
return
END