Table of Contents
Simple Decimal to BCD conversion function
Converts a decimal number to its BCD equivalent.
e.g. 27 is returned as &h27 (39 decimal)
This is useful for writing to device registers that require BCD to hold a value rather than binary. An example here is the registers inside popular Real Time Clock chips (DS3231, etc). Consider the day-of-month register. The bottom nibble holds the units and the top nibble holds the tens. A value of 31 decimal cannot be written directly into the register as this would result in the value &h1F being written - which is illegal.
The following function takes a decimal value and returns the same positional digits as a hex number, so in the example above, 31 decimal would be returned as 31 hex (49 decimal). this would result in the legal values of 3 being written to the top nibble of the register and 1 written to the bottom nibble.
Example
Option default integer \\ For n=1 To 20 Print n, BCD(n),Hex$(BCD(n)) Next
The Code
Function BCD(x As integer) As integer BCD=val("&h"+Str$(x)) End Function
There are no checks that the number you pass will fit, use your skill and judgement