【问题标题】:EEPROM read and write for 5 bitsEEPROM读写5位
【发布时间】:2016-03-28 20:20:21
【问题描述】:

我有这段代码可以从 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 个地址 00000001。对于23562356%100562356/10023。因此,在地址0000 将是 56,在地址0001 它将是23。 在阅读EEPROM_Read(0000) 时将返回34EEPROM_Read(0001)*100 将返回23002300 + 562356

但是如果我需要写5 数字号码,例如65238,我应该怎么做。

【问题讨论】:

  • 为什么要这样浪费每个字节的 61%?
  • 为什么使用十进制算术?您确实知道 16 位(两个字节)作为无符号整数可以包含 065535(含)之间的值。
  • 如果他想存储99999之类的东西(16位太少,32位太多),那就去24位什么的……或者他必须处理使用一些可与 BCD 配合使用的旧硬件/软件?

标签: c avr eeprom


【解决方案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));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多