2016-03-26 15 views
0

このコードは、EEPROMから4桁の番号を書き込み書き込みできます。 For Ex: 23565ビットのEEPROM読み取りと書き込み

コード;

void WritePassToEEPROM(uint16_t pass) 
{ 
    EEPROMWrite(0000,(pass%100)); 
    EEPROMWrite(0001,(pass/100)); 
} 

uint16_t ReadPassFromEEPROM() 
{ 
    return (EEPROMRead(0001)*100 + EEPROMRead(0000)); 
} 

Write_Pass_To_EEPROM()関数は2つのアドレス00000001に書き込みます。 2356の場合、2356%10056であり、2356/10023である。だから、アドレス0000でそれは56になり、アドレス0001でそれは23になります。 EEPROM_Read(0000)を読むと、34EEPROM_Read(0001)*100が返され、2300が返されます。 2300 + 562356です。

しかし、私は65238のように5の数字を書く必要があります。どうすればいいですか?

+2

なぜ、各バイトの61%をそんなに浪費しますか? –

+1

なぜ* decimal *算術を使うのですか?符号なし整数としての16ビット(2バイト)は、 '0'と '65535'(両端を含む)の間の値を含むことができます。 –

+0

もし彼が '99999'(16ビットが小さすぎる、32が大きすぎる)などのものを保存したいなら、24ビットか何かに行ってください...もしかすると、古いかっこいいハードウェア/ソフトウェアそれはBCDで動作しますか? – 3442

答えて

0

これは0xffff(65535)まで上がります。

void WritePassToEEPROM(uint16_t pass) 
{ 
    EEPROMWrite(0000,(pass & 0x00ff)); 
    EEPROMWrite(0001,(pass & 0xff00) >> 8); 
} 

uint16_t ReadPassFromEEPROM() 
{ 
    return ((uint16_t)(EEPROMRead(0001) << 8) + (uint16_t)EEPROMRead(0000)); 
} 
関連する問題