Asesoria con PIC16F874

Hola, Como le hago para utilizar los 10 bits del convertidor se que 8 bits están en ADRESH y 2 bits en ADRESL dependiendo de donde los seleccione, pero como le ago para concatenar y tener los 10 bits en un solo registro y pasarlos a un proceso de conversión de binario a decimal. Saludos

1 Respuesta

Respuesta
1
Sucede que estás utilizandoi una rutina de 8 bits, en ningún momento te refieres al otro byte resultado de la conversión.
Estás simplemente agarrando un byte y separándolo en unidades, decenas y centenas.
Hay que trabajar a 16 bits. Estas rutinas hechas las hallarás en www.piclist.com
en la parte de rutinas matemáticas.
Ese es todo el problema. Suerte-
Hola, Mira eso que me escribiste ya lo había hecho a continuación te presento mi rutina de conversión de binario a decimal.
bsf ADCON0,2 ;Iniciamos conversión.
US210 btfsc ADCON0,2 ;checamos si es 0
goto US210 ;si no seguimos en us210
movf ADRESH,W
Con_BiToDec movwf AUXRET1 ;**cargamos un valor a AUXRET1
clrf AUXRET0 ;**Pone en ceros AUXRET0
clrf CON_B_2 ;**Pone en ceros CON_B_2
clrf CON_B_1 ;**Pone en ceros CON_B_1
clrf CON_B_0 ;**Pone en ceros CON_B_0
et_con_b_02 movfw AUXRET0 ;**Cargamos un valor en AUXRET0
subwf AUXRET1,W ;restamos lo que tenga W con AUXRET1
btfsc ESTADO,2 ;checamos el bit2 del registro ESTADO
goto et_con_01 ; Se sale cuando sean iguales
incf AUXRET0,F ; Incrementa La cuenta
movlw 0x02 ; cargamos a W con 02h
addwf CON_B_0,F ; Incrementa Unidades
movlw 0x0A ; cargamos a W con 0Ah
subwf CON_B_0,W ; Restamos W con CON_B_0
btfss ESTADO,2 ; Las unidades sobrepasaron
goto et_con_b_02 ; no
; Si se sobrepasaron
incf CON_B_1,F ; Aumentan decenas
clrf CON_B_0 ; borran Unidades
movlw 0x0A ; cargamos a W con 0x0A
subwf CON_B_1,W ; Restamos W con decenas
; Las decenas Overflow
btfss ESTADO,2 ; Se sobrepasaron las decenas
goto et_con_b_02 ; no se sobrepasaron
; Si
incf CON_B_2,F ; Incrementan Centenas
clrf CON_B_1 ; borran Decenas
clrf CON_B_0 ; borran Unidades
goto et_con_b_02
et_con_01 movlw 0x30 ;cargamos a W con 30h
addwf CON_B_0,F ;sumamos 30h con CON_B_0
addwf CON_B_1,F ;sumamos 30h con CON_B_1
addwf CON_B_2,F ;sumamos 30h con CON_B_2
return ;retorno de las tres tablas
Ahora el valor de ADRESL como lo meto en esta rutina.
Se puede elegir que el resultado quede todo rotado sobre la derecha o sobre la izquierda. Esto depende el bit ADFM del ADCON1.
Yo siempre lo pongo en 1 y me quedan los 8 bits de la parte baja en ADRESL y 2 bits de la parte alta ADRESH (los 2 más bajos 0 y 1).
Como hablamos de micros de 8 bits no existen registros de más bits.
Hay que tratarlos como 2 registros, la parte alta y la parte baja.
Todas las operaciones a más de 8 bits poseen el ingreso de datos como parte baja y parte alta.
Todas las rutinas que encuentres a 16 bits serán válidas para BCD.
El proceso de tomar los datos luego de la conversión es el siguiente:
Bank1
Movf adresl, w
Bank0
movwf resultado_bajo
movf adresh,w
movwf resultado_alto.
Suerte.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas