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