标题: 15W408单片机片内EEPROM往不同扇区读写操作 [打印本页]

作者: samxon    时间: 2024-4-13 16:26
标题: 15W408单片机片内EEPROM往不同扇区读写操作
15W408片内EEPROM读写数据时IAP_ADDRESS+1的+1, +2,+3是什么意思。如果要往不同的扇区写数据应该怎么切换扇区。

                   set1=IapReadByte(IAP_ADDRESS+0);
                set2=IapReadByte(IAP_ADDRESS+1);
                set3=IapReadByte(IAP_ADDRESS+2);
                set4=IapReadByte(IAP_ADDRESS+3);


void save()
{
        IapEraseSector(IAP_ADDRESS);    //扇区擦除
        IapProgramByte(IAP_ADDRESS+0, set1);        
        IapProgramByte(IAP_ADDRESS+1, set2);        
        IapProgramByte(IAP_ADDRESS+2, set3);        
        IapProgramByte(IAP_ADDRESS+3, set4);        
}


作者: wulin    时间: 2024-4-13 19:25
STC15W408单片机的EEPROM有5K,分10个扇区,每个扇区容量512字节。各扇区首地址为0x0000、0x0200、0x0400、0x0600......。可以指定任意扇区首地址IAP_ADDRESS+n读写字节。
作者: samxon    时间: 2024-4-13 19:42
可以指定任意扇区首地址IAP_ADDRESS+n读写字节。这句话不明白。能详细一点吗,另外,如果我要在一个扇区写多个字节,该如何改写save代码,或者不同扇区写字节怎么写代码。谢谢你。
作者: yzw846562238    时间: 2024-4-13 20:40
samxon 发表于 2024-4-13 19:42
可以指定任意扇区首地址IAP_ADDRESS+n读写字节。这句话不明白。能详细一点吗,另外,如果我要在一个扇区写 ...

1、要写到哪个扇区就调用这个函数擦除对应扇区,IapEraseSector(IAP_ADDRESS);    //扇区擦除
2、要写多个字节的话就用
for(int i=0; i<len; i++)
{
    IapProgramByte(IAP_ADDRESS+i, data[ i]);
}
IAP_ADDRESS为你要写的扇区首地址。data为你要写入的数据存放的数组;
注意事项:跨扇区写数据的话,两个扇区都要擦除才可以
作者: wulin    时间: 2024-4-14 07:41
samxon 发表于 2024-4-13 19:42
可以指定任意扇区首地址IAP_ADDRESS+n读写字节。这句话不明白。能详细一点吗,另外,如果我要在一个扇区写 ...

STC片内EEPROM容量随不同型号大小有所不同,除IAP外每个扇区的首地址是固定的。读/写EEPROM的代码要明确指定扇区地址。例如读取第3扇区的第10个字节的地址:IapReadByte(0x0409); 或 IapReadByte(0x0400+9);写EEPROM也同理。在你的代码中IAP_ADDRESS是宏定义地址常量。
作者: samxon    时间: 2024-4-14 14:07
wulin 发表于 2024-4-14 07:41
STC片内EEPROM容量随不同型号大小有所不同,除IAP外每个扇区的首地址是固定的。读/写EEPROM的代码要明确 ...

谢谢您,明白了。
作者: npn    时间: 2024-4-16 08:36
由于楼主的程序不完整,缺乏  IapEraseSector、 IapReadByte 函数内的程序以及参数情况。
无法确定 IAP_ADDRESS 是常量还是变量,以及 set1, set2, set3, set4的数据类型,请提供完整的程序才能解答。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1