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

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

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 。 数据手册上有特别注明的。

51单片机内部EEPROM使用求教
不知道你用的是哪款单片机,你可以看单片机的数据手册,应该会有详细到操作时序的介绍 针对STC15F4K系列单片机EEPROM使用实例如下:单字节操作,串口发送 include "reg51.h"#include "intrins.h"typedef unsigned char BYTE;typedef unsigned int WORD;\/\/---sfr P1M1 = 0x91; \/\/PxM1.n,PxM0.n...

52单片机如何对PC串口发送来的数据进行存储,存储在哪?RAM还是ROM中?
STC内部有256字节的ram,还有1024bytes的扩展RAM,请查看数据手册,但这显然不能满足你的要求,所以建议你使用外部扩展Ram,选择6264(8K)的RAM就可以了,怎么接请参看C51外部RAM扩展相关文档,另外不建议使用FlashRom存取,因为首先有写入次数限制,在写入时需要擦出整个扇区,不知道这样说你清楚不?定义你...

51单片机内部eeprom存储4位数码管数据
void write_51eeprom_1byte(uint eeprom_addr,uchar w_data)调用写入一个数据 write_51eeprom_1byte(0x1000,0xaa);要写4个数据 调用4次不就可以了。

相似回答