PIC Microcontoller Radix Math Method

10bit to BCD unpacked 3 digit in 25 inst 28 cycles (for PIC's with hardware multiplier only)

by Djula Djarmati

;**********************************************************************************************
;CONVERT 10-BIT BINARY TO THREE DECIMAL DIGITS (28 cycles, 25 program 
memory)
;Input word:    Digits+1:Digits
;Output digits: Digits+2:Digits+1:Digits
;Trashes:       PRODH, PRODL
;**********************************************************************************************
Bin_To_Dec_999  movlw   d'41'                   ;Multiply by 0.01 (41/4096)
                mulwf   Digits+1                ;
                movff   PRODL, Digits+2         ;
                mulwf   Digits                  ;
                movf    PRODH, w                ;
                addwf   Digits+2, w             ;
                mullw   0x10                    ;Lose the lower 8 bits 
and shift
                movf    PRODH, w                ;result 4 bits left 
(divide by 4096)
                movwf   Digits+2                ;Save result
                mullw   d'100'                  ;and then multiply it 
by 100
                movf    PRODL, w                ;
                subwf   Digits, f               ;Subtract from original
                movf    PRODH, w                ;to get
                subwfb  Digits+1, f             ;remainder
                movf    Digits, w               ;Split remainder (0-99) 
to two decimals
                mullw   D'205'                  ;
                movlw   D'32'                   ;Multiply by 0.1
                mulwf   PRODH                   ;(205/256 * 32/256)
                movf    PRODH, w                ;
                movwf   Digits+1                ;Save result
                mullw   D'10'                   ;and then multiply it by 10
                movf    PRODL, w                ;Subtract from original
                subwf   Digits, f               ;Save remainder
                return                          ;Done

Comments: