+ Reply to Thread
Results 1 to 11 of 11

Thread: Convert BCD to Binary

  1. #1
    apricot_star Newbie
    Join Date
    Aug 2008
    Posts
    29

    Convert BCD to Binary

    Hi anyone knows how to Convert BCD to Binary in PIC18F2620 using c language?


  2. #2
    ESchemainda Newbie
    Join Date
    Mar 2008
    Posts
    21

    Convert BCD to Binary

    I do it by hand.
    Supposing you have an array of BCD numbers.

    int BCD_numbers[] = {3, 2, 7, 6, 8};
    int result, i;

    result = 0;
    for(i=0;i<5;i++)
    result *= 10 + BCD_numbers[i];

    result now should contain 0x7FFF.

  3. #3
    Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent
    Join Date
    Mar 2005
    Location
    Brisbane Australia
    Posts
    6,696

    Assuming it's packed BCD in an integer then the following should work,
    Code:
    unsigned int BCDtoI(unsigned int BCD){
    unsigned int result;
        result=(BCD>>12)*1000;
        result+=((BCD>>8)&0x0f)*100;
        result+=((BCD>>4)&0x0f)*10;
        result+=((BCD)&0x0f);
        return result;
    }
    
    Mike.

  4. #4
    apricot_star Newbie
    Join Date
    Aug 2008
    Posts
    29

    is it okie to write in this way:

    int BCD2BINARY(int x)
    {
    int binary;
    binary = ((x & 0xF0 )>>4 ) * 10 + (x & 0x0F);
    return (binary);
    }

  5. #5
    Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent
    Join Date
    Mar 2005
    Location
    Brisbane Australia
    Posts
    6,696

    Doing it that way is fine as long as your number is only 2 digits.

    Edit, if it's only a 2 digit number then you can do,
    bcd-=((bcd&0xf0)>>3)*3;

    Mike.
    Last edited by Pommie; 28th August 2008 at 09:37 AM.

  6. #6
    poppy2008 Newbie
    Join Date
    Aug 2008
    Posts
    25

    Quote Originally Posted by Pommie View Post
    Assuming it's packed BCD in an integer then the following should work,
    Code:
    unsigned int BCDtoI(unsigned int BCD){
    unsigned int result;
        result=(BCD>>12)*1000;
        result+=((BCD>>8)&0x0f)*100;
        result+=((BCD>>4)&0x0f)*10;
        result+=((BCD)&0x0f);
        return result;
    }
    
    Mike.
    hi pommie can u explain ur coding,i am new in c,but i am very much interested to learn,please

  7. #7
    Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent
    Join Date
    Mar 2005
    Location
    Brisbane Australia
    Posts
    6,696

    All the code is doing is getting the relevant digit and multiplying by the decimal value. So, BCD>>12 will get the thousands digit which is then multiplied by 1000.

    Mike.

  8. #8
    apricot_star Newbie
    Join Date
    Aug 2008
    Posts
    29

    Hi pommie,

    Thanks for the reply, however i was wondering why must it shift by 3 and times 3?

  9. #9
    Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent Pommie Excellent
    Join Date
    Mar 2005
    Location
    Brisbane Australia
    Posts
    6,696

    Quote Originally Posted by apricot_star View Post
    Hi pommie,

    Thanks for the reply, however i was wondering why must it shift by 3 and times 3?
    The way to convert a BCD number to it's binary equivalent is to divide the high digit by 16 and then multiply by 10. Another way to do the same thing is to subtract the high digit * 6 (16-10). To do this in code you do BCD>>4 to get the high digit and then multiply by 6. As 6 is 3*2 then you can reduce the number of shifts by 1 and multiply by 3. This is just the same as saying that BCD/16*6 is the same as BCD/8*3.

    The less efficient (but more logical) way to write the same thing is,
    bcd-=((bcd&0xf0)>>4)*6;

    Mike.

  10. #10
    vietbk Newbie
    Join Date
    Jan 2009
    Posts
    1

    Convert BCD to Binary
    Hi anyone knows how to Convert BCD to Binary in Psoc using assembly language?

  11. #11
    nickelflippr Good nickelflippr Good nickelflippr Good nickelflippr Good
    Join Date
    Oct 2006
    Location
    Oregon, USA
    Posts
    472

    Ha, was just looking at the 18F data sheet instructions. The assembler instruction, DAW, looks custom fit for the BCD to BIN decode. Would this do the trick?

    Code:
    ;Decode say a DS1307 minutes from BCD to binary
    ;minutes = 0x27 BCD
    	call	FN_READ8BIT
    	movff	   READ8BIT,MIN
    	movf	   MIN,W,BANKED
    	daw
    	movwf  MIN,BANKED 
    ;MIN is now 27 minutes in binary?
    

+ Reply to Thread

Similar Threads

  1. how to convert rs 232 tx/rx to binary
    By elmediel in forum Robotics Chat
    Replies: 5
    Latest: 12th January 2008, 07:28 AM
  2. Convert binary to BCD code
    By genetica in forum General Electronics Chat
    Replies: 7
    Latest: 16th September 2007, 03:37 PM
  3. binary to bcd
    By jimbob jones in forum General Electronics Chat
    Replies: 6
    Latest: 9th November 2005, 07:57 PM
  4. Trying to convert binary to ascii
    By ChriX in forum Micro Controllers
    Replies: 9
    Latest: 7th May 2005, 01:30 PM
  5. Algorithm to convert 64 bit Binary to BCD
    By ljcox in forum Micro Controllers
    Replies: 6
    Latest: 21st November 2004, 04:34 AM

Tags for this Thread