Hola amigos son de mucha ayuda y tal vez algun dia me vuelva experto en esto pero ahora necesito mucho su colaboracion les explico:
No he podido hacer la tabla, podria aprovechar los 10 bits del resultado de la conversion para que me entregue los decimales o seria mas facil utilizar un pic de 16 bits, para lograr hacer la cuenta en el circuito tengo lo siguiente:
1.908 v = 190
1.235v = 123
1.028v =102
yo necesito me presentara 190.1 como minimo si fuera 190.15 seria ideal.
te muestro el codigo en que estoy fallando?
CICLO bsf ADGO ;Inicia la conversión A/D
btfsc ADGO ;ADGO=?0 si=sig. instrucion, si no brinca, Espera que termine de ;convertir
goto $ -1 ;espera para terminar de escribir
bsf RP0 ;Pasa a página 1 (para acceder a los ocho bits bajos del resultado)
movf adres, 0 ;Resultado de conversión -> W
bcf RP0 ;Pasa a página 1
movwf buffer ;Guarda el dato obtenido de ADRESL en el buffer temporal
bcf CARRY ;Limpia el CARRY
btfsc adres, 0 ;Mira el bit menos significativo de ADRESH (Bit
bsf CARRY ;Si está en 1 pone en uno el carry
rrf buffer, 1 ;Rota un bit de (buffer) a la der. a traves del carry,--->(buffer) ;hace desaparecer el bit 0 de ADRESL, mete el bit 0 de ADRESH por ;el 7 de ADRESL
;-----------Termina conversion analogica a digital--------------<
movf buffer, 0
call DECIMAL ;Obtiene UNI,DEC y CEN con el agregado de 30h(1101) para la tabla ASCII
movlw 0x88 ;Coloca el cursor en la posición 9 de la pantalla.(8D=141)
call CONTROL ;Llamada a subrutina del LCD, envia dato
movf cen, 0 ;Coloca en el LCD las centenas
call DATO ;Coloca el dato o control a enviar en el bus del LCD, pone en alto la ;línea de modo del LCD (Dato)
movf dec, 0 ;Coloca las decenas
call DATO ;Coloca el dato o control a enviar en el bus del LCD, pone en alto la ;línea de modo del LCD (Dato)
movf uni, 0 ;Coloca las unidades
call DATO ;Coloca el dato o control a enviar en el bus del LCD, pone en alto la ;línea de modo del LCD (Dato)
goto CICLO ;Vuelve a medir y mostrar
;Termina ciclo de conversion analogica a digital mostrando lectura-<
;------------Subrutina para conversion de datos a decimal------------------------------->
DECIMAL movwf uni ;Convierte el dato presente en W en UNI, DEC y CEN
clrf dec
clrf cen
;clrf deci
movlw d'100' ;Determina la cant. de centenas
CENTENA subwf uni, 1 ;(uni-1)-->(uni)
btfss CARRY ;(CARRY)=?1, si=sig. instruccion, si no brinca
goto CIEN
incf cen, 1 ;(cen+1)--->cen
goto CENTENA
CIEN addwf uni, 1 ;(uni+W)-->uni
movlw d'10' ;Determina la cant. de decenas
DECENA subwf uni, 1 ;(uni-1)-->(uni)
btfss CARRY ;(CARRY)=?1, si=sig. instruccion, si no brinca
goto DIEZ
incf dec, 1 ;(dec+1)--->dec
goto DECENA
DIEZ addwf uni, 1 ;Uni queda con la cant. de unidades (sin decenas ni centenas)
movlw 0x30 ;Le suma 30h a los valores de UNI, DEC y CEN ---> ASCII
addwf uni, 1
addwf dec, 1
addwf cen, 1
return