You are on page 1of 2

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

END

You might also like