muchas gracias por su ayuda amigos del foro y la verdad me salio queria compart
ilos 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 r esultado de los registros
;ADRES a la izquierda (ADMF=0). Solo el pin RA0 ser canal analgico
;y las tensiones de referencia para el ADC sern VREF+=VDD y VREF-= VSS bsf TRISA,0 ;Canal AN0 como entrada bcf TRISC,6 ;RC6/TX sa lida, pin de transmisin 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 conversin btfsc ADCON0,GO ;pregunto si la conversion termino goto $-1 ; Fin? movf ADRESH,W ;Si, W=ADRESH GUARDA movwf VAR1 ;cargo el dato conve rtido en esta variable call TX_DATO ;llamo para enviar
NUEVO bsf ADCON0,GO ; Inicio la nueva conversin 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 transmisi on esta libre goto $-1 banco 0 movwf TXREG ;el dato que esta en W es enviado btfss PIR1,TXIF ;Espera hasta que tra nsmisin culmin goto $-1 return