PIC Microcontoller Radix Math Method

Binary to ASCII, 16 bit to 3digits (0..999)

by Nikolai Golovchenko

;Binary to decimal conversion (0..999)
;
;Input: NumH:NumL
;Output Hund:Tens:Ones
;
;If Input > 999 Output will roll over, e.g.
;for input=5678 output=678.
;
;
;Size: 34 instructions
;Execution  time  (max) including return:
;22+5*9-1+5*6-1+4*3-1+2 = 108 cycles
;
;5-July-2000 by Nikolai Golovchenko

bin2dec999
        movf NumH, w
        addlw 241
        addwf NumH, w
        movwf Hund      ;b_2 = 2a_2 - 15

        addwf Hund, w
        addwf Hund, w
        addlw 253
        movwf Tens
        swapf NumL, w
        andlw 0x0F
        addwf Tens, f
        addwf Tens, f   ;b_1 = 6a_2 + 2a_1 - 48

        addwf NumH, w
        sublw 251
        movwf Ones
        addwf Ones, f
        addwf Ones, f
        addwf Ones, f
        movf NumL, w
        andlw 0x0F
        addwf Ones, f   ;b_0 = a_0 - 4(a_2 + a_1) - 20

        movlw 10
bin2dec999a                     ;9 cycles max
        addwf Ones, f
        decf Tens, f
        skpc
         goto bin2dec999a

bin2dec999b                     ;6 cycles max
        addwf Tens, f
        decf Hund, f
        skpc
         goto bin2dec999b

bin2dec999c                     ;3 cycles max
        addwf Hund, f
        skpc
         goto bin2dec999c

        return

Comments: