EPROM地址问题
你好版主,如题问题如下,while(1)
{
if (TIME_10ms == 1)
{
TIME_10ms = 0;
//在10MS执行一次的框架内,
u8 xdata EEPROM_BUF_U1={0}; //两个扇区的EEPROM数据,U1参数
u8 xdata EEPROM_BUF_U2={0}; //两个扇区的EEPROM数据,U2参数
u8 xdata EEPROM_BUF_U3={0}; //两个扇区的EEPROM数据,U3参数
u8 xdata EEPROM_BUF_U4={0}; //两个扇区的EEPROM数据,U4参数
新建变量用来保存零时数据
EEPROM_read_n(0,EEPROM_BUF_P,1024); //读取掉电数据,将地址0开始的1024个字节的数据读出来保存到EEPROM_BUF数组
EEPROM_read_n(1024,EEPROM_BUF_U1,1024); //读取掉电数据,将地址1024开始的1024个字节的数据读出来保存到EEPROM_BUF_U1数组
EEPROM_read_n(2048,EEPROM_BUF_U2,1024); //读取掉电数据,将地址2048开始的1024个字节的数据读出来保存到EEPROM_BUF_U2数组
EEPROM_read_n(3072,EEPROM_BUF_U3,1024); //读取掉电数据,将地址3072开始的1024个字节的数据读出来保存到EEPROM_BUF_U3数组
EEPROM_read_n(4096,EEPROM_BUF_U4,1024); //读取掉电数据,将地址4096开始的1024个字节的数据读出来保存到EEPROM_BUF_U4数组
while循环之前读取数据,//如果不加读取这一行,那么数码管就可以显示0000,加了这4行就不能显示数据,直接黑屏,数码管使用TM1650控制,以下是数码管显示函数,
Seg_Show_Bit1(0,EEPROM_BUF_U1); //数码管第一位显示数组U1对应的参数
Seg_Show_Bit1(1,EEPROM_BUF_U2); //数码管第二位显示数组U2对应的参数
Seg_Show_Bit1(2,EEPROM_BUF_U3); //数码管第三位显示数组U3对应的参数
Seg_Show_Bit1(3,EEPROM_BUF_U4); //数码管第四位显示数组U4对应的参数
以下是零时数组变量写入EPROM
if( KEY_ReadState(Btn_Set)==KEY_LONGPRESS ) //如果长按Btn_Set,则进入P参数二级分类值的设定
{
EEPROM_SectorErase(1024); //擦除从1024开始的512字节的一个扇区
EEPROM_SectorErase(1536); //擦除从1536开始的512字节的一个扇区
EEPROM_SectorErase(2048); //擦除从2048开始的512字节的一个扇区
EEPROM_SectorErase(2560); //擦除从2056开始的512字节的一个扇区
EEPROM_SectorErase(3072); //擦除从3072开始的512字节的一个扇区
EEPROM_SectorErase(3584); //擦除从3584开始的512字节的一个扇区
EEPROM_SectorErase(4096); //擦除从4096开始的512字节的一个扇区
EEPROM_SectorErase(4608); //擦除从4608开始的512字节的一个扇区
EEPROM_write_n(1024,EEPROM_BUF_U1,1024); //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
EEPROM_write_n(2048,EEPROM_BUF_U2,1024); //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
EEPROM_write_n(3072,EEPROM_BUF_U3,1024); //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
EEPROM_write_n(4096,EEPROM_BUF_U4,1024); //重新写入掉电数据,将4096个数据重新写入地址0,方便下一次读取
PARM_Flow = 23;
}
以上是写入EPROM保存区,
现在遇到的问题是,添加读取函数,数码管直接黑屏,不显示任何数据,不添加读取函数,数码管即可以显示0000,
请问这个是怎么回事?是10MS时间不够用吗?硬件是STC32G12K128
本帖最后由 32位8051-STCAI 于 2023-5-24 17:10 编辑
建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。
本帖最后由 zackwu 于 2023-5-25 14:14 编辑
32位8051-STCAI 发表于 2023-5-24 17:08
建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。
谢谢,
还有一个问题是,已经下载了程序,设置了数据在EEPROM地址里面,此时再下载程序的话,EEPROM里面的数据回丢失,请问这个怎么处理?
在下载软件STC-ISP里面,硬件选项-旋转FLASH空白区域的填充值,这个是不是就可以理解为,我新建一个临时数组变量,u8 xdata EEPROM_BUF_J,那么这个时候EEPROM_BUF_J的值为FF,是这个意思吗?
如附件操作视频,我取消了,硬件选项-下次下载用户程序时擦除用户EEPROM区,下载程序后,数据丢失。
我重新看一下,好像上传不了视频。
@梁工,能否帮忙看一下。
上传视频可以参考此帖:如何在本论坛发视频 - 开源广场及教学视频交流 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1815 貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载用户程序时擦除用户EEPROM区,取消勾选就行了,如果这样真的行的话(反正我测下来是行的),不止到官方为啥默认是勾选的。 zackwu 发表于 2023-5-25 14:17
貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载 ...
默认勾选,是考虑批量生产时,保证下载程序后,EEPROM是被清除的状态。同一片IC重复下载学习、研发,则自行去掉勾选。 32位8051-AI 发表于 2023-5-24 17:08
建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。
找了整整一个半小时,终于在这里找到资料了
页:
[1]