hi everyone...
i am facing a problem in my college project...
i have a 16bit unsigned integer variable and i need to store it in the 24C02 EEPROM, but that saves 8bit variable at a time...
the number i need to save is in the form of a decimal integer, how do i split it into 2 unsigned char variables..
i am using the following method
unsigned int val; unsigned char a,b; a= (val & 0xFF00)>>8; b=(val * 0x00FF);
is this code right?
and when i read it back i read it like this
unsigned int val; val= (((a & 0x00FF)<<8) | (b & 0x00FF));
is this code right? or is there any other way?
note: i obtain val initially from the user input by using this routine
unsigned int Temp2=0; Temp2*=10; Temp2+=Keypress-'0';
Keypress is the input obtained from the keyboard which is ASCII and in the range '0' to '9' and Temp2 is stored in the EEPROM using the Routine i tried
Error:
i tried saving 1234 and when i read it back i got 1024 6666 was read back as 6656 5555 was read back as 5376 1600 was read back as 1536
And have we then learned to not type code when only a copy from your source code editor will guarantee that you get exactly the code you are using?
1234 -> 1024 0000 0100 1101 0010 -> 0000 0100 0000 0000 6666 -> 6656 0001 1010 0000 1010 -> 0001 1010 0000 0000 5555 -> 5376 0001 0101 1011 0011 -> 0001 0101 0000 0000 1600 -> 1536 0000 0110 0100 0000 -> 0000 0110 0000 0000
See a pattern?
Where is your low byte?
What happens if you shift an 8-bit variable more than 8 bits? Where will the data go if you haven't first made sure there is room for 16 bits?