在STC系列的51单片机中,有5个数要存进EEPROM,如何存储占用空间最小?

有5个正整数,m1、m2的范围是0~99999,m3的范围是0~9999999999,m4的范围是0~9,m5的范围是0~1

为了程序好写一下,可以这么用:创一个字节k 1,k1的0和1位有m3的最高两位,m1,m2的最高位用3和4位。m4只需要4位,m5只需要1位,所以也可以合在一起得到k2,k2的低4位为m4,第五位为m5,
这样分配也只有10个字节,程序的控制上相对容易,这的所说的位为二进制位.追问

我设想的方法是:在字节K1的D4、D5位存m3的最高两位,m1、m2的最高位以及m5的值分别存在K1的D3、D2、D1位,m4单独用一个字节,这样恢复数据的时候,if(K1&0x08)、if(K1&0x04)、if(K1&0x02)就可以判定m1、m2的最高位以及m5的值,K1右移4位后的值就是m3最高两位的值

我想得到的答案是有没有比这更优秀的分配方案

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-09-21
如果希望占用空间最小,则可以将这几个数值按照位序列的方式拼接。
m1、m2占用17位、m3占用34位、m4占用4位、m5占用1位,总计需要占用73位。因此至少需要占用10个字节。
第2个回答  2013-09-20
99999得用17bit,9999999999用34bit,9用4bit,1用1bit,总共用17*2+34+4+1=73bit,9个字节外加一位追问

具体怎样操作? 你这只是理论分析。
首先,存储的目的是为了以后使用,所以,不仅要考虑存储的简单可操作性还要考虑还原的简单可操作性,还要考虑STC系列的51单片机EEPROM的寿命问题

在STC系列的51单片机中,有5个数要存进EEPROM,如何存储占用空间最小?
为了程序好写一下,可以这么用:创一个字节k 1,k1的0和1位有m3的最高两位,m1,m2的最高位用3和4位。m4只需要4位,m5只需要1位,所以也可以合在一起得到k2,k2的低4位为m4,第五位为m5,这样分配也只有10个字节,程序的控制上相对容易,这的所说的位为二进制位....

STC单片机EEPROM怎么存入多组数据
stc-isp只能将整个数据文件写入eeprom,不能指定某个地址写入数据。有个办法或许可以解决你提出的问题,不妨试试:单片机复位启动后,先从你要指定的地址读取数据,然后判断数据是不是你预先设定的,如果是就继续你的程序,如果不是就将你需要数据写入该地址,之后单片机再复位启动时,从那个地址读出的就是...

STC单片机EEPROM怎么存入多组数据
在EEPROM中不同的地址来存放时、分、秒数据,然后编写程序从EEPROM中读取出来。比如:时放在EEPROM的0x0180中,分放在0x0181中,秒放在0x0182中,然后找到存放这些数据的地址,读取出来,在数码管显示出来即可!

51单片机如果要断电储存一个小数据该怎么做
在RST端外接一3.6V锂电池,掉电保存单片机内部RAM所有数据;来电通过外中断将单片机强行拉到0000H开始运行。

你好STC单片机的数据如何存储?
FLASH程序存储器存程序,单片机上电后会自动从这里读代码开始运行。而EEPROM是掉电也不丢数据的存储器,一般都用来存设置的。你可以一字节一字节的把每字节的8位1任意编写成0。但这片一般是按扇区为单位,一擦除就是全成1。一般来说应该是存放在FLASH里的吧,如果CODE区域用完了才会去找EEPROM写代码...

51单片机怎么使用内部EEPROM,上电次数、断电记忆,怎么实现计到最大...
STC 很多都有内部EEPROM,如11或12系列的STC单片机,读写内部EEPROM有一定限制,比如写,必须先擦除再写,而且一次必须擦除一个扇区,所以还是很麻烦的,只能覆盖。要实现你的功能,一点问题没有,上电后先读取上次的计数值,再加1重新写进去就可以了。以下是EEPROM读写子程序供参考:;--- ;读一字节...

STC单片机EEPROM大小问题
STC12C5A32S2 程序存储器是32K, EEPROM是28K, 相互是独立的。STC系列有几款 程序存储器 就是 EEPROM 。 数据手册上有特别注明的。

...中程序一半存储在FLASH中, 一半存储在EEPROM中?为什么不都存储在FL...
一般来说应该是存放在FLASH里的吧,如果CODE区域用完了才会去找EEPROM写代码。我觉得就好像STC说他们的芯片有ISP系统升级功能一样,其实没有,ISP区是有的,但是没有向外开放给用户(我记得以前的STC芯片好像是开放的),所以想用ISP功能实现系统代码升级维护只能用STC自己的编程器。楼主问的联系要是说的...

STC单片机的EEPROM用坏之后是什么样子?
这就跟低级格式化硬盘相似 全部数据置0 要测试那个位损坏可以先全部数据置0 然后擦除恢复1 哪个位不能恢复成1就是坏了 也就是全部字节写00H 然后擦除恢复为FFH 哪个擦除之后不是FF就是那个字节的位有损坏 STC单片机的EEPROM一般都有很多个扇区 可以通过检测扇区损坏 使用另外一个扇区 ...

stc单片机的数据eeprom可以当作程序区执行么?
STC的芯片比较特殊,理论上它的EEPROM实际就是程序存储器,而使用的IAP实现的EEPROM。类似与NXP的89LPC系列,不过STC烧写软件有限制不主动将程序写到这个空间去,而且还不排除它本身的ISP程序做了某写配置来限制用户这么使用。所以理论上是可以实现的,但实际操作可能有些不便。

相似回答