PIC Microcontoller Radix Math Method

Unpacked BCD to 16 bit binary conversion

;*******************************************************************************
; Input: unpacked BCD in  tenk:thou:hund:tens:ones
;Output: 16 bit binary in hi:lo
;  Size: 35 instructions
;Timing: 2+34+2=38 instruction cycles
;
; Notes:
;1) if input is higher than 65535 output is meaningless
;2) algorithm synopsis:
;
;> dec2bin([1 10 100 1000 1e4], 16)
;ans = 
;0000000000000001
;0000000000001010
;0000000001100100
;0000001111101000
;0010011100010000
;
;Or coded in three levels ('+' represents +1, '-' represents -1):
;000000000000000+ * ones +
;000000000000+0+0 * tens +
;000000000++00+00 * hund +
;00000+0000-0+000 * thou +
;00+0+00-000+0000 * tenk
;
;bin = (((tens+thou+tenk*256)*2+
;	hund+hund*16+thou*256)*2+
;	tens+hund*16-thou*16+tenk*16*256)*2+
;	ones+tenk*16-tenk*256
;
;January 24, 2001 by Nikolai Golovchenko
;*******************************************************************************

dec2bin16
	movf tens, w
	addwf thou, w
	movwf lo
	addwf lo, f
	rlf tenk, w
	movwf hi

	swapf hund, w
	addwf hund, w
	addwf lo, f
	movf thou, w
	addwf hi, f
	rlf lo, f
	rlf hi, f

	swapf hund, w
	addwf tens, w
	addwf lo, f
	swapf tenk, w
	skpnc
	 iorlw 0x01
	addwf hi, f
	swapf thou, w
	subwf lo, f
	skpc
	 decf hi, f
	clrc
	rlf lo, f
	rlf hi, f

	swapf tenk, w
	addwf ones, w
	addwf lo, f
	movf tenk, w
	skpnc
	 decf tenk, w
	subwf hi, f
	return
;*******************************************************************************