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 de jlcava
1
1
jlcava, Más de 10 añosdesarrollando equipos electrónicos con...
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.