PIC Microcontroller Radix Math Method

Binary to BCD half-packed 8 bit to 3 digit

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