We are running a survey to help us improve the experience for all of our members. If you see the survey appear, please take the time to tell us about your experience if you can.
I am trying to use the following code to convert 2 digit ASCII numbers to BCD number, for setting RTC Clock DS1307.
unsigned char ASCII_TO_BCD(unsigned char ascii_text[2]) { unsigned char bcd_value; ascii_text[0] &= 0x0F; // set high nibble(3) to 0 (may not be needed) ascii_text[0] <<= 4; // shift lower nibble to higher ascii_text[1] &= 0x0F; // set high nibble(3) to 0 (may not be needed) bcd_value = ascii_text[0] | ascii_text[1]; // mix both to get BCD return bcd_value; }
When I pass '12' to the function, 0x33 is returned instead of 0x12. Is something wrong in this code? Thanks.
I am also not getting why my code(which I posted) was not working. Anyway, THANK YOU VERY MUCH.
Try some other arguments besides "12", and maybe you'll notice a pattern...
It fails because of the difference between what you think an array-type function argument as in
void func(int in[2])
does, and what actually happens. You believe this behaves vaguely like
void func(int in1, int in2)
while it really is equivalent to
void func(int *in)
I'll also venture an educated guess that in the actuall call of your function, which you didn't show, the argument is a string literal, i.e. it looks like this:
result = asciitobcd("12");
, and that changing the call to
{ unsigned char tempstr[] = "12"; result = asciitobcd(temp);}
magically cures it.
A note to the experts in here: please don't spoil the OP's a-ha! experience. Let him figure this one out for himself.