

;------Subrutina para convetir BCD a binario de 16 bits----------
;El resultado se guarda en los registros Resultado_H y Resultado_L definidos en la biblioteca numeros_16b
;Esta subrutina no detecta desbordamiento
;Esta subrutina puede ser distribuida y/o modificada libremente.
;Autor: Carlos E. Villanueva Ojeda
;
;Datos acerca del rendimiento
;	Pruebas: convertir el número 65535 a hex de 16 bits
;	con crital de 4Mhz: 	900 us Aprox
;	con crital de 8Mhz: 	450 us Aprox
;	con crital de 12Mhz:	300 us Aprox
;	con crital de 20Mhz:	190 us Aprox
;Memoria de programa usada 56
;Memoria Ram reservada 6 bytes

	cblock
	BB_unidades
	BB_decenas
	BB_centenas
	BB_millares
	BB_decenas_millar
	
	endc
	
bcd_bin
		movf		BB_decenas_millar,w	;Se cargan las decenas a uno de los operandos definidos en numeros_16b
		movwf		Dato_B_L
		clrf		Dato_B_H
		movlw		.10				;Carga del multiplicador en el otro operando
		movwf		Dato_A_L
		clrf		Dato_A_H
		call		Multiply			;Se realiza la multiplicación
		movf		Resultado_L,w		;El resultado siempre es un número menor que 90
		addwf		BB_millares,w		;Se hace una suma mediante hardware
		movwf		Dato_B_L			;El resultado se carga en uno de los operandos
		clrf		Dato_B_H
		movlw		.10				;Se carga el multiplicador en el otro operando
		movwf		Dato_A_L
		clrf		Dato_A_H
		call		Multiply			;Multiplicación
		movf		BB_centenas,w		;Carga de la centenas
		movwf		Dato_A_L
		clrf		Dato_A_H
		movf		Resultado_L,w		;Carga del resultado anterior que puede ser mas de 8 bits
		movwf		Dato_B_L
		movf		Resultado_H,w
		movwf		Dato_B_H
		call		suma_16_bits		;Se realiza la suma
		movf		Resultado_L,w		;Se repite el mismo proceso
		movwf		Dato_A_L
		movf		Resultado_H,w
		movwf		Dato_A_H
		movlw		.10
		movwf		Dato_B_L
		clrf		Dato_B_H
		call		Multiply
		movf		BB_decenas,w
		movwf		Dato_A_L
		clrf		Dato_A_H
		movf		Resultado_L,w
		movwf		Dato_B_L
		movf		Resultado_H,w
		movwf		Dato_B_H
		call		suma_16_bits
		movlw		.10
		movwf		Dato_A_L
		clrf		Dato_A_H
		movf		Resultado_L,w
		movwf		Dato_B_L
		movf		Resultado_H,w
		movwf		Dato_B_H
		call		Multiply
		movf		BB_unidades,w
		movwf		Dato_A_L
		clrf		Dato_A_H
		movf		Resultado_L,w
		movwf		Dato_B_L
		movf		Resultado_H,w
		movwf		Dato_B_H
		call		suma_16_bits
		return



