2016-03-26 77 views
0

我有这样的代码,从写入和写入EEPROM为4位数字。 For Ex: 2356EEPROM读取和写入5位

代码;

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%100562356/10023。所以,在地址0000它将是56并且在地址0001它将是23。 虽然阅读EEPROM_Read(0000)将返回34EEPROM_Read(0001)*100将返回23002300 + 562356

但是,如果我需要写5数字号码像65238我该怎么办。

+2

为什么要浪费每个字节的61%? –

+1

为什么使用* decimal *算术?您知道,16位(两个字节)作为无符号整数可以包含'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)); 
}