From: Scott Dattalo, notes
;********************************
;binary_to_bcd - 8-bits
;
;Input
; bin - 8-bit binary number
; A1*16+A0
;Outputs
; hundreds - the hundreds digit of the BCD conversion
; tens_and_ones - the tens and ones digits of the BCD conversion
binary_to_bcd:
CLRF hundreds
SWAPF bin, W ;w = A0*16+A1
ADDWF bin, W ;w = A0+A1
ANDLW 00001111b ;w = A0+A1 % 16
SKPNDC ;if A0+A1 > 16
ADDLW 0x16 ; w += 16
SKPNDC ;if w % 16 > 10
ADDLW 0x06 ; w += 6
ADDLW 0x06 ;w += 6
SKPDC ;if w < 10
ADDLW -0x06 ; w -= 6
BTFSC bin,4
ADDLW 0x16 - 1 + 0x6
SKPDC
ADDLW -0x06
BTFSC bin, 5
ADDLW 0x30
BTFSC bin, 6
ADDLW 0x60
BTFSC bin, 7
ADDLW 0x20
ADDLW 0x60
RLF hundreds, F
BTFSS hundreds, 0
ADDLW -0x60
MOVWF tens_and_ones
BTFSC bin,7
INCF hundreds, F