Konversi sistem bilangan biner ke BCD

Bilangan biner adalah angka berbasis 2 yang hanya memiliki numerik ‘0’ dan ‘1’. Dalam ilmu komputer satu numerik bilangan biner disebut “bit”, apabila bilangan ini dikelompokkan kedalam 8 bit disebut dengan byte, Satu byte bisa menyimpan kombinasi hingga 2^8 atau 256 kombinasi.

Dalam ilmu komputer juga dikenal bilangan hex (hexadesimal) yaitu angka berbasis 16 dengan numerik 0-9 dan A-F, bilangan ini merepresentasikan 4-bit bilangan biner (binary number).

Bilangan biner atau bilangan hex juga bilangan byte umum digunakan dalam perhitungan digital dan komputer, namun bilangan ini sulit dicerna oleh manusia yang menggunakan bilangan desimal (basis 10),

Bilangan BCD (binary coded decimal) adalah bilangan hex dalam bentuk desimal yang lebih familier dan bisa terbaca oleh manusia dalam bentuk desimal.

byte 8-bit binary ke BCD

//max hex 0x63 / bcd 0x99
uint8_t Convert_IntToBCD(uint8_t DecimalValue)
{
	return DecimalValue + 6 * (DecimalValue / 10);
}

atau

//max hex 0x63 / bcd 0x99
uint8_t Convert_IntToBCD(uint8_t DecimalValue)
{
	uint8_t MSB = 0;
	uint8_t LSB = DecimalValue;

	while (LSB >= 10)
	{
		LSB -= 10;
		MSB += 0x10;
	}
	return MSB + LSB;
}

word 16-bit binary ke BCD

//max hex 0x270F / bcd 0x9999
uint16_t Convert_IntToBCD16(uint16_t DecimalValue)
{
	uint16_t returnValue = 0;
	//uint16_t LSB_L = DecimalValue;

	while (DecimalValue >= 1000)
	{
		DecimalValue -= 1000;
		returnValue += 0x1000;
	}
	while (DecimalValue >= 100)
	{
		DecimalValue -= 100;
		returnValue += 0x0100;
	}
	while (DecimalValue >= 10)
	{
		DecimalValue -= 10;
		returnValue += 0x0010;
	}
	return returnValue + DecimalValue;
}

integer 32-bit binary ke BCD

//max hex 0x5F5E0FF / bcd 0x99999999
uint32_t Convert_IntToBCD32(uint32_t DecimalValue)
{
	uint32_t returnValue = 0;
	//uint32_t LSB_L = DecimalValue;

	while (DecimalValue >= 10000000L)
	{
		DecimalValue -= 10000000L;
		returnValue += 0x10000000;
	}
	while (DecimalValue >= 1000000L)
	{
		DecimalValue -= 1000000L;
		returnValue += 0x01000000;
	}
	while (DecimalValue >= 100000L)
	{
		DecimalValue -= 100000L;
		returnValue += 0x00100000;
	}
	while (DecimalValue >= 10000)
	{
		DecimalValue -= 10000;
		returnValue += 0x00010000;
	}
	while (DecimalValue >= 1000L)
	{
		DecimalValue -= 1000L;
		returnValue += 0x00001000;
	}
	while (DecimalValue >= 100)
	{
		DecimalValue -= 100;
		returnValue += 0x00000100;
	}
	while (DecimalValue >= 10)
	{
		DecimalValue -= 10;
		returnValue += 0x00000010;
	}
	return returnValue + DecimalValue;
}

Leave a Reply

Your email address will not be published. Required fields are marked *