SX Microcontroller Radix Math Method

8 bit binary to 3 digit ASCII

From: Scott Dattalo

W_to_ascii:

        mov     bin, W                  ;added

        clr     hundreds
        mov     W, <>bin                ;w  = A0*16+A1
        add     W, bin                  ;w  = A0+A1
        and     W, #00001111b           ;w  = A0+A1 % 16

        mov     tens_and_ones, W        ;tens_and_ones = A0+A1 % 16
        mov     W, #$16
        snb     DC                      ;if A0+A1 > 16
        add     tens_and_ones, W        ;  tens_and_ones  += 16
        mov     W, #$06
        snb     DC                      ;if tens_and_ones % 16 > 10
        add     tens_and_ones, W        ;  tens_and_ones  += 6

        add     tens_and_ones, W        ;tens_and_ones  += 6
        sb      DC                      ;if tens_and_ones < 10
        sub     tens_and_ones, W        ;  tens_and_ones  -= 6

        mov     W, #$16 - 1 + $6
        snb     bin.4
        add     tens_and_ones, W
        mov     W, #-$06
        sb      DC
        add     tens_and_ones, W
        mov     W, #$30
        snb     bin.5
        add     tens_and_ones, W

        mov     W, #$20
        snb     bin.7
        add     tens_and_ones, W

        mov     W, #$60
        snb     bin.6
        add     tens_and_ones, W

        add     tens_and_ones, W

        rl      hundreds
        sb      hundreds.0
        sub     tens_and_ones, W

        snb     bin.7
        inc     hundreds

                                        ;added (from here to bottom)
        mov     W, hundreds             ;
        or      W, #$30                 ;convert to ascii
        call    send_lcd                ;hundreds to LCD

        mov     W, <>tens_and_ones
        and     W, #$0f
        or     W, #$30                  ;always less than 0x0A
        call    send_lcd                ;tens to LCD

        mov     W, tens_and_ones
        and     W, #$0f
        or      W, #$30
        add     W, Hack
        call    send_lcd                ;ones to LCD

        ret