This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

how to conventer unsigned long to BCD code faster?

just as titleï¼
now i'am use this method:
a=value%1000/100;
b=value%100/10;
c=value%10;
but it's slow,any faster methods?
thanksï¼

Parents
  • i'am try you code,but it can't build success.
    Build target 'Target 1'
    compiling u32tobcd.c...
    U32TOBCD.C(23): warning C206: 'DIM': missing function-prototype
    U32TOBCD.C(23): error C267: 'DIM': requires ANSI-style prototype
    Target not created

    my test code:

    #include <reg52.h>
    #include <math.h>
    unsigned char bcdt[10]={0,0,0,0,0,0,0,0,0,0};
    unsigned char *bcd;
    void bin2bcd(unsigned long bin, unsigned char *bcd)
    { static const unsigned long pow_ten_tbl[] = { 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1 }; unsigned long pow_ten; unsigned char digit; unsigned char i;

    for (i = 0; i != DIM(pow_ten_tbl); i++) { digit = 0; pow_ten = pow_ten_tbl[i];

    while (bin >= pow_ten) { bin -= pow_ten; digit++; } *bcd++ = digit; }
    }

    void main(void) { while(1) { bin2bcd(1234567,*bcd); } }

Reply
  • i'am try you code,but it can't build success.
    Build target 'Target 1'
    compiling u32tobcd.c...
    U32TOBCD.C(23): warning C206: 'DIM': missing function-prototype
    U32TOBCD.C(23): error C267: 'DIM': requires ANSI-style prototype
    Target not created

    my test code:

    #include <reg52.h>
    #include <math.h>
    unsigned char bcdt[10]={0,0,0,0,0,0,0,0,0,0};
    unsigned char *bcd;
    void bin2bcd(unsigned long bin, unsigned char *bcd)
    { static const unsigned long pow_ten_tbl[] = { 1000000000, 100000000, 10000000, 1000000, 100000, 10000, 1000, 100, 10, 1 }; unsigned long pow_ten; unsigned char digit; unsigned char i;

    for (i = 0; i != DIM(pow_ten_tbl); i++) { digit = 0; pow_ten = pow_ten_tbl[i];

    while (bin >= pow_ten) { bin -= pow_ten; digit++; } *bcd++ = digit; }
    }

    void main(void) { while(1) { bin2bcd(1234567,*bcd); } }

Children
No data