EEPROM чтение и запись по 5 бит

У меня есть этот код, который пишет и пишет из EEPROM для 4-значного числа. For Ex: 2356

Код;

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 адреса 0000 и 0001. для 2356, 2356%100 равно 56, а 2356/100 равно 23. Итак, по адресу 0000 будет 56, а по адресу 0001 будет 23. При чтении EEPROM_Read(0000) вернет 34, а EEPROM_Read(0001)*100 вернет 2300. 2300 + 56 это 2356.

Но если мне нужно написать 5 цифровое число, например 65238, что мне делать.


person Silver Pearl    schedule 26.03.2016    source источник
comment
Зачем вам так тратить 61% каждого байта?   -  person Ignacio Vazquez-Abrams    schedule 26.03.2016
comment
Зачем использовать десятичную арифметику? Вы знаете, что 16 бит (два байта) целого числа без знака могут содержать значения от 0 до 65535 (включительно).   -  person Some programmer dude    schedule 26.03.2016
comment
Если он хочет хранить такие вещи, как 99999 (для которых 16 бит слишком мало, а 32 слишком много), тогда переходите на 24-бит или что-то в этом роде... Или, может быть, ему приходится иметь дело с каким-то старым дрянным оборудованием/программным обеспечением, BCD?   -  person 3442    schedule 26.03.2016


Ответы (1)


Это увеличится до 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));
}
person Rok Jarc    schedule 26.03.2016