Autor Tema: pasar de BCD a binario  (Leído 6854 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado teve

  • PIC12
  • **
  • Mensajes: 65
pasar de BCD a binario
« en: 22 de Enero de 2005, 13:09:00 »
Hola compañeros del foro, necesito pasar de bcd a binario, ejemplo ---  1024 (depositado en sus respectivos registros) = 00000001   00000000 (binario). No se si os ha surgido esta necesidad, voy a trabajar en ello, si alguien lo tiene echo ya
 y me lo puede pasa le estaria eternamente agradecido. Un saludo picmaniacos.

Desconectado Meybel

  • Colaborador
  • PIC12
  • *****
  • Mensajes: 60
RE: pasar de BCD a binario
« Respuesta #1 en: 31 de Enero de 2005, 06:26:00 »
A lo mejor te sirve esto. sirva. Lo he copiado de www.pic16f84a.com, donde también he encontrado ejercicios de aplicación que tal vez te puedan servir de ayuda.

Codigo:
; Subrutinas "Arit_BCD_Bin_16Bit" ------------------------------------------------------
;
; Realiza la conversión de un número decimal de 5 digitos a binario natural de 16 bits.
; El máximo número a convertir será pues el b"1111111111111111"=0xFFFF=d"65535"
;
; El metodo usado para la conversión de un número BCD a binario natural, se basa en que
; cada dígito de un número codificado en BCD tiene un peso igual a la potencia de diez
; asociada a su posición. Para convertir el número BCD a su equivalente binario sólo es
; necesario multiplicar cada dígito BCD por su peso correspondiente y luego sumar todos
; los productos parciales obtenidos, el resultado es el número binario natural buscado.
; Es decir el valor de un número BCD de 5 dígitos se puede expresar como:
;
; 10^4 DecenasMillar + 10^3 Millares + 10^2 Centenas + 10 Decenas + Unidades =
; 10*10*10*10 DecenasMillar + 10*10*10 Millares + 10*10 Centenas + 10 Decenas + Unidades
;
; Finalmente la subrutina aplica el siguiente algoritmo:
; 10(10(10(10 DecenasMillar + Millares) + Centenas) + Decenas) + Unidades = Resultado
;
; El resultado se obtiene en 16 bits, es decir en 2 registros de 8 bits, que son:
; (Arit_Resultado_1H, Arit_Resultado_1L). Esta subrutina no tiene sistema alguno para
; detectar desbordamiento que debe preveerse en el programa que la llame.

; Previo a la llamada de esta subrutinas, cada digito del número decimal a convertir se
; almacenan en registros independientes, que son:

   CBLOCK
   Arit_Unidades
   Arit_Decenas
   Arit_Centenas
   Arit_Millares
   Arit_DecenasMillar
   ENDC

Arit_BCD_Bin_16Bit
   clrf   Arit_Resultado_1H   ; Realiza la carga inicial de los registros.
   movf   Arit_DecenasMillar,W
   movwf   Arit_Resultado_1L   ; (Resultado Parcial) = (DecenasMillar)
;
   movf   Arit_Millares,W      
   call   Arit_BCD_Operacion   ; (10*DecenasMillar+Millares)
   movf   Arit_Centenas,W
   call   Arit_BCD_Operacion   ; (10(10*DecenasMillar+Millares)+Centenas)
   movf   Arit_Decenas,W
   call   Arit_BCD_Operacion   ; (10(10(10*DecenasMillar+Millares)+Centenas)+Decenas)
   movf   Arit_Unidades,W
   call   Arit_BCD_Operacion   ; Resultado final.
   return
   
Arit_BCD_Operacion         ; Realiza la operacion:   (10 * Resultado Anterior + W)
   movwf   Arit_Auxiliar      ; Guarda la variable de entrada.
   movf   Arit_Resultado_1L,W
   movwf   Arit_Multiplicando_L   ; (Resultado Anterior) --> (Multiplicando)
   movf   Arit_Resultado_1H,W
   movwf   Arit_Multiplicando_H
   clrf   Arit_Multiplicador_H   ; Carga el multiplicador con 10.
   movlw   .10
   movwf   Arit_Multiplicador_L
   call   Arit_Multiplica_16Bit   ; (10 * Resultado Anterior)
   movf   Arit_Auxiliar,W
   addwf   Arit_Resultado_1L,F
   btfsc   STATUS,C
   incf   Arit_Resultado_1H,F   ; (10 * Resultado Anterior + W)
   return

Desconectado teve

  • PIC12
  • **
  • Mensajes: 65
RE: pasar de BCD a binario
« Respuesta #2 en: 13 de Febrero de 2005, 12:37:00 »
Muchisimas gracias compeñera, un saludo.Flash


 

anything