STC 单片机的内部 EEPROM 是用 DATAFLASH 模拟出来的,不是真正的 EEPROM 存储器,
不能用普通的方法来操作
下面是一些注意点:
1.字节写之前要先将这个字节所在扇区的其它有效数据读取到 RAM 暂存(这步不是必须的)
2.暂存完之后再对整个扇区(512 字节)进行擦除操作,擦拭完后,整个扇区每个地址中数据
都变成 0xFF
3.将欲写入的 N 个字节数据,用字节写函数写入 EEPROM
4.将暂存到 RAM 的其它有用的 EEPROM 值再用字节写函数写回 EEPROM
5.STC 用 FLASH 模拟出来的 EEPROM 的字节写功能只能将 1 变成 0,而不能将 0 变成 1,
只有扇区擦除后数据才是全 1,
例如:在地址 0x21f0 处第 1 次写 11010110,第 2 次写 111010,读出结果是这 2 个值的相与
10010
所以如果一个地址处的值不是 0xff 时写入新的数据是不对的,要先执行扇区擦除,变为
0xff,
对于单个字节的写入,我们可以先检查该地址处的数据是否为 0xff,是的话就不用擦除
扇区了
----------------------------------------------------------------------
STC89C52 单片机内部 EEPROM 的读写过程s
1 配置 ISP_CONTR 寄存器,使能第 7 位 ISPEN,让 ISP_IAP 功能生效,并配置低 3 位的等待
时间
2 写指令: 读/写/擦除扇区s这 3 个命令
3 赋值: ISP_ADDRH 和 ISP_ADDRL 的地址值
4 关闭总中断 EA,因为下面要写的 2 个触发指令必须是连续操作的,不能被中断
5 执行公用的ssISP_IAP 触发指令,触发后读写操作才能进行
6 打开中断sEA,关闭 ISP_IAP 功能:清相关寄存器
定义命令字节
字节读数据命令sssss
字节编程数据命令sssss