zackwu 发表于 2023-5-24 16:45:40

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-AI 发表于 2023-5-24 17:08:54

本帖最后由 32位8051-STCAI 于 2023-5-24 17:10 编辑

建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。


zackwu 发表于 2023-5-25 12:10:15

本帖最后由 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区,下载程序后,数据丢失。


我重新看一下,好像上传不了视频。



@梁工,能否帮忙看一下。

32位8051-AI 发表于 2023-5-25 14:13:16

上传视频可以参考此帖:如何在本论坛发视频 - 开源广场及教学视频交流 - 国芯论坛-STC全球32位8051爱好者互助交流社区 - STC全球32位8051爱好者互助交流社区https://www.stcaimcu.com/forum.php?mod=viewthread&tid=1815

zackwu 发表于 2023-5-25 14:17:03

貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载用户程序时擦除用户EEPROM区,取消勾选就行了,如果这样真的行的话(反正我测下来是行的),不止到官方为啥默认是勾选的。

梁工 发表于 2023-5-25 15:21:45

zackwu 发表于 2023-5-25 14:17
貌似解决了,待长时间,换不同的板子测试看看。就把下载软件里面,清除EEPROM缓冲区,和硬件选项-下次下载 ...

默认勾选,是考虑批量生产时,保证下载程序后,EEPROM是被清除的状态。同一片IC重复下载学习、研发,则自行去掉勾选。

vb2002 发表于 2025-1-27 19:14:44

32位8051-AI 发表于 2023-5-24 17:08
建议参考STC32G实验箱例程包例程“19-使用LVD低压检测中断保存EEPROM”,在中断里周期性刷新数码管。




找了整整一个半小时,终于在这里找到资料了
页: [1]
查看完整版本: EPROM地址问题