Convertidor AD de 10bits
Hola, estoy tratando de utilizar los 10 bits del convertidor ADC del PIC16F874.
El dato de ADRESH, lo paso a ADRESH1
El dato de ADRESL, lo paso a ADRESL1
Luego decremento ADRESH1 hasta llegar a 0x00 y decremento ADRESL1 una unidad, y vuelvo a decrementar ADRESH1 y así sucesivamente; mientras ocurre esto, incremento unidades hasta 9, después incremento decenas y borro unidades y así sucesivamente, supaongamos que en los 10 bits tengo '1111111111', entonces cuando se termine el proceso de conversión debo de tener 1024 en miles, centenas, decenas, unidades, respectivamente.
Aquí presento mi código.
Con_bintoDEC_10
movlw 0x30
movwf MILES
movwf CENTENAS
movwf DECENAS
movwf UNIDADES
P_ADRESH
movf ADRESH1,F
btfsc ESTADO,2
goto P_ADRESL
movf ADRESL1,F
btfsc ESTADO,2
goto DEC_ADRESH1
goto DEC_ADRESH1
P_ADRESL movf ADRESL1,F
btfsc ESTADO,2
return
decf ADRESL1,1
DEC_ADRESH1 decf ADRESH1,1
goto INC_UNI
INC_UNI
incf UNIDADES,1
movlw 0x39
subwf UNIDADES,W
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf UNIDADES
incf DECENAS,1
movlw 0x39
subwf DECENAS,0
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf DECENAS
incf CENTENAS,1
movlw 0x39
subwf CENTENAS,0
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf CENTENAS
return
Bueno, en esta rutina desde el principio las variables CENTENAS, DECENAS y UNIDADES, se trabajan con números hexadecimales para que al pasarlos al LCD se presenten en forma decimal. Pero mi pregunta es, por que en el LCD tarda en visualizarse la conversión y se presenta un pequeño instante y luego presentan puros ceros, y así sucesivamente. He simulado esta rutina y aquí se ve que los datos varían de manera ordenada. Cual sera el problema en mi rutina.
El dato de ADRESH, lo paso a ADRESH1
El dato de ADRESL, lo paso a ADRESL1
Luego decremento ADRESH1 hasta llegar a 0x00 y decremento ADRESL1 una unidad, y vuelvo a decrementar ADRESH1 y así sucesivamente; mientras ocurre esto, incremento unidades hasta 9, después incremento decenas y borro unidades y así sucesivamente, supaongamos que en los 10 bits tengo '1111111111', entonces cuando se termine el proceso de conversión debo de tener 1024 en miles, centenas, decenas, unidades, respectivamente.
Aquí presento mi código.
Con_bintoDEC_10
movlw 0x30
movwf MILES
movwf CENTENAS
movwf DECENAS
movwf UNIDADES
P_ADRESH
movf ADRESH1,F
btfsc ESTADO,2
goto P_ADRESL
movf ADRESL1,F
btfsc ESTADO,2
goto DEC_ADRESH1
goto DEC_ADRESH1
P_ADRESL movf ADRESL1,F
btfsc ESTADO,2
return
decf ADRESL1,1
DEC_ADRESH1 decf ADRESH1,1
goto INC_UNI
INC_UNI
incf UNIDADES,1
movlw 0x39
subwf UNIDADES,W
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf UNIDADES
incf DECENAS,1
movlw 0x39
subwf DECENAS,0
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf DECENAS
incf CENTENAS,1
movlw 0x39
subwf CENTENAS,0
btfss ESTADO,2
goto P_ADRESH
movlw 0x30
movwf CENTENAS
return
Bueno, en esta rutina desde el principio las variables CENTENAS, DECENAS y UNIDADES, se trabajan con números hexadecimales para que al pasarlos al LCD se presenten en forma decimal. Pero mi pregunta es, por que en el LCD tarda en visualizarse la conversión y se presenta un pequeño instante y luego presentan puros ceros, y así sucesivamente. He simulado esta rutina y aquí se ve que los datos varían de manera ordenada. Cual sera el problema en mi rutina.
1 Respuesta
Respuesta de jlcava
1