Hola. Me puse un ratito con hoja y lapiz y programe este codigo...
Cabe destacar que lo programe exclusivamente para TU PROPOSITO. SIEMPRE multiplica por 1537 y divide por 1024.(Te equivocaste, en realidad habia que dividir por 1023 pero ya es demasiado tarde(me di cuenta cuando ya habia terminado), y modificarlo...lindo rollo...
. Lo hice para 1024...lo que produce un pequeño desfasaje de 0.2Volts MAXIMO)
DESTACO: LA ALINEACION DEL RESULTADO DE LA CONVERSION DEBE SER A LA DERECHA.(CREO QUE YA LA ESTABAS USANDO ASI)
NECESITAS DECLARAR ESTOS REGISTROS:
AUX1,AUX2,AUX3,TMP1,TMP2,OUTL,OUTM,OUTH,RESTOL,RESTOH
LA FUNCION REGLA3
RECIBE: ADRESL : LECTURA 8 BITS BAJO PESO CONVERSOR AD
ADRESH : LECTURA 2 BITS ALTO PESO CONVERSOR AD
DEVUELVE:
OUTL: BYTE BAJO PESO RESULTADO
OUTM: BYTE MEDIANO PESO RESULTADO
OUTH: BYTE ALTO PESO RESULTADO
RESTOL:RESTO BAJO PESO RESULTADO
RESTOH:RESTO ALTO PESO RESULTADO
DESTACO:
EL RESTO OBVIAMENTE ESTA DENTRO DEL INTERVALO CERRADO [0;1023]. ESTO SIRVE POR SI QUERES SEGUIR SACANDO MAS DECIMALES DE PRECISION, PODES HACERLO.(SINO PREGUNTAME QUE TE EXPLICO
EL RESULTADO SE ENTREGA EN OUTL Y OUTM Y COMO MAXIMO VA A VALER 0X5FF(SI LA CONVERSION AD ES 0X3FF). POR LO TANTO EL RESULTADO ES MAXIMO 12 BITS, ES DECIR:
PARA MOSTRARLO EN LOS 4 DISPLAYS, VAS A NECESITAR UN CODIGO QUE TE CONVIERTA ESTE RESULTADO A DECIMAS, UNIDADES,DECENAS Y CENTENAS.
UN EJEMPLO:
ADRESL = 0XAA
ADRESH=0X01
DEVUELVE:
OUTL=0X7F
OUTM=0X02
OUTH = SIEMPRE CERO. RECORDALO, PARA DESCARTARLO DIRECTAMENTE...
RESTOL=0XAA
RESTOH=0X00
ENTONCES TENEMOS COMO RESULTADO: 0X27F (ENCADENANDO LOS 2 BYTES)
0X27F = 639
COMO MULTIPLIQUE POR 1537 EN LUGAR DE HACERLO POR 153,7 AHORA TENGO QUE DESPLAZAR LA COMA UN LUGAR PARA LA IZQ. EL RESULTADO QUE DEBE APARECER EN LOS DISPLAYS ES:
0 6 3 9
O LO QUE ES LO MISMO: 63,9
EL CODIGO:
REGLA3 CLRF AUX3
CLRF OUTH
MOVF ADRESH,W
MOVWF AUX2
MOVWF OUTM
BSF STATUS,RP0
MOVF ADRESL,W
BCF STATUS,RP0
MOVWF AUX1
MOVWF OUTL
MOVLW .9
MOVWF TMP1
SIGUEROT CALL ROTAIZQ
DECFSZ TMP1,F
GOTO SIGUEROT
CALL SUMA24
CALL ROTAIZQ
CALL SUMA24
MOVF OUTL,W ;INICIO DIVISION (/1024)
MOVWF RESTOL
CLRF OUTL
MOVF OUTM,W
MOVWF TMP1
CLRF OUTM
MOVF OUTH,W
MOVWF TMP2
CLRF OUTH
;CLRF AUX1
CLRF AUX2
CLRF AUX3
MOVF TMP2,W
BTFSC STATUS,Z
GOTO NOALTO
MOVLW .64
MOVWF AUX1
CALL SUMA24
DECFSZ TMP2,F
GOTO $-2
NOALTO MOVF TMP1,W
BTFSC STATUS,Z
GOTO NOHAYRESTO
OTROM MOVLW .4
MOVWF AUX1
SUBWF TMP1,F
BTFSS STATUS,C
GOTO FILLRESTO
MOVLW .1
MOVWF AUX1
CALL SUMA24
MOVF TMP1,F
BTFSS STATUS,Z
GOTO OTROM
CLRF RESTOH
RETURN
NOHAYRESTO CLRF RESTOH
RETURN
FILLRESTO COMF TMP1,F
INCF TMP1,F
RETURN
ROTAIZQ BCF STATUS,C
RLF AUX1,F
RLF AUX2,F
RLF AUX3,F
RETURN
SUMA24 MOVF AUX1,W
ADDWF OUTL,F
BTFSS STATUS,C
GOTO OKM
INCFSZ OUTM,F
GOTO OKM
INCF OUTH,F
OKM MOVF AUX2,W
ADDWF OUTM,F
BTFSC STATUS,C
INCF OUTH,F
MOVF AUX3,W
ADDWF OUTH,F
RETURN
Ya voy a tener que comenzar a pantentar algoritmos si sigo asi
EXITOS!