woshigeshuai 发表于 2023-8-2 21:53:36

STC8内部EEPROM保存数据的问题





u8 UseTimeDec(void)
{
        UseTime= IapRead(0x0000);         // 读出使用次数
       

        if(UseTime==0)                // 次数是0 显示故障
        {

                OLED_Clear();
                OLED_ShowChinese(0,0,20,16);//系统故障
                OLED_ShowChinese(18,0,21,16);//
                OLED_ShowChinese(36,0,22,16);//
                OLED_ShowChinese(54,0,23,16);//               
               
                return 0;
        }
        UseTime--;                        // 使用次数减1
        EA=0;
        IapErase(0x0000);                                                        // 页擦除 是不是必须的?
        IapProgram(0x0000, UseTime);        // 保存数据
        delay_ms(1);
        EA=1;
        return 1;
}


函数如上
使用次数记录,次数到了0后,显示故障。
每次保存使用次数的时候,IapErase(0x0000);是不是必须的?

电子DIY小家 发表于 2023-8-3 08:48:30

FLASH 存储器里的1可以被写为0,但是0不能写为1 假设需要写入的 数据是0x7f(0111 1111b),意思就是说这个地址里的数据二进制表示的话低七位必须得为1,否则就会写入失败,所以当不为0xff的时候最好给他执行擦除,变成0xff才能保证写入成功
页: [1]
查看完整版本: STC8内部EEPROM保存数据的问题