51单片机EEPROM的读写_第1页
51单片机EEPROM的读写_第2页
51单片机EEPROM的读写_第3页
51单片机EEPROM的读写_第4页
51单片机EEPROM的读写_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

STC 单片机的内部 EEPROM 是用 DATAFLASH 模拟出来的 不是真正的 EEPROM 存储 器 不能用普通的方法来操作 下面是一些注意点 1 字节写之前要先将这个字节所在扇区的其它有效数据读取到 RAM 暂存 这步不是必须的 2 暂存完之后再对整个扇区 512 字节 进行擦除操作 擦拭完后 整个扇区每个地址中数据 都变成 0 xFF 3 将欲写入的 N 个字节数据 用字节写函数写入 EEPROM 4 将暂存到 RAM 的其它有用的 EEPROM 值再用字节写函数写回 EEPROM 5 STC 用 FLASH 模拟出来的 EEPROM 的字节写功能只能将 1 变成 0 而不能将 0 变成 1 只有扇区擦除后数据才是全 1 例如 在地址 0 x21f0 处第 1 次写 11010110 第 2 次写 111010 读出结果是这 2 个值的相 与 10010 所以如果一个地址处的值不是 0 xff 时写入新的数据是不对的 要先执行扇区擦除 变为 0 xff 对于单个字节的写入 我们可以先检查该地址处的数据是否为 0 xff 是的话就不用擦除 扇区了 STC89C52 单片机内部 EEPROM 的读写过程 1 配置 ISP CONTR 寄存器 使能第 7 位 ISPEN 让 ISP IAP 功能生效 并配置低 3 位的等 待时间 2 写指令 读 写 擦除扇区 这 3 个命令 3 赋值 ISP ADDRH 和 ISP ADDRL 的地址值 4 关闭总中断 EA 因为下面要写的 2 个触发指令必须是连续操作的 不能被中断 5 执行公用的 ISP IAP 触发指令 触发后读写操作才能进行 6 打开中断 EA 关闭 ISP IAP 功能 清相关寄存器 include my51 h 定义命令字节 define read cmd 0 x01 字节读数据命令 define wirte cmd 0 x02 字节编程数据命令 define erase cmd 0 x03 扇区擦除数据命令 特殊功能寄存器声明 sfr ISP DATA 0 xe2 sfr ISP ADDRH 0 xe3 sfr ISP ADDRL 0 xe4 sfr ISP CMD 0 xe5 sfr ISP TRIG 0 xe6 sfr ISP CONTR 0 xe7 定义 Flash 操作等待时间及允许 IAP ISP EEPROM 操作的常数 define enable waitTime 0 x80 系统工作时钟 30MHz 时 对 IAP CONTR 寄存器设置此 值 define enable waitTime 0 x81 系统工作时钟 24MHz 时 对 IAP CONTR 寄存器设置此 值 define enable waitTime 0 x82 系统工作时钟 20MHz 时 对 IAP CONTR 寄存器设置此 值 define enable waitTime 0 x83 系统工作时钟 12MHz 时 对 IAP CONTR 寄存器设置此值 define enable waitTime 0 x84 系统工作时钟 8 送地址高字节 ISP ADDRL u8 beginAddr 送地址低字节 ISP IAP trigger 触发 beginAddr 地址 pBuf ISP DATA 将数据保存到接收缓冲区 ISP IAP disable 关闭 ISP IAP 功能 void ISP IAP writeData u16 beginAddr u8 pDat u16 dataSize 写数据 ISP CONTR enable waitTime 开启 ISP IAP 并送等待时间 ISP CMD wirte cmd 送字节编程命令字 while dataSize ISP ADDRH u8 beginAddr 8 送地址高字节 ISP ADDRL u8 beginAddr 送地址低字节 ISP DATA pDat 送数据 beginAddr ISP IAP trigger 触发 ISP IAP disable 关闭 void ISP IAP sectorErase u16 sectorAddr 扇区擦除 ISP CONTR enable waitTime 开启 ISP IAP 并送等待时间 ISP CMD erase cmd 送扇区擦除命令字 ISP ADDRH u8 sectorAddr 8 送地址高字节 ISP ADDRL u8 sectorAddr 送地址低字节 ISP IAP trigger 触发 ISP IAP disable 关闭 ISP IAP 功能 void main 测试 u8 buf 3 0 接收数据缓冲区 u8 dat 5 b 111010 b 1001 b 1 b 1011 b 1110 我写成二进制是为观察 led 灯 ISP IAP sectorErase 0 x2000 扇区擦除 一块 512 字节 ISP IAP writeData 0 x21f0 dat sizeof dat 写 EEPROM ISP IAP readData 0 x21f0 buf sizeof buf 读取 P1 buf 2 在地址 0 x21f0 处第 1 次写 11010110 第 2 次写 111010 读出结果是这 2 个值 的相与 10010 while 1 所以如果一个地址处的值不是 0 xff 时写入新的数据是不对的 要先擦除为 0 xff ifndef MY51 H define MY51 H include include include include include mytype h 二进制输入宏 ifndef LongToBin define LongToBin define LongToBin n n 21 8 个 led 灯 阴极送低电平点亮 sbit led1 P1 1 sbit led2 P1 2 sbit led3 P1 3 sbit led4 P1 4 sbit led5 P1 5 sbit led6 P1 6 sbit led7 P1 7

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论