2016-03-26 114 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)); 
}