关于eeprom的应用总结_第1页
关于eeprom的应用总结_第2页
关于eeprom的应用总结_第3页
关于eeprom的应用总结_第4页
关于eeprom的应用总结_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

关于 EEPROM的应用总结 关于 EEPROM 的应用总结 当在程序运行的过程中你希望修改某个变量并且此变量的值在掉电以后不丢失,那么你 就可以采用将变量数据写入 EEPROM 的方式来实现。 什么是 EEPROM,即 Electrically Erasable ProgrammableRead_Only Memory 首先它是 一种存储器,并且可以通过高电压来进行反复擦写的存储器。具有掉电数据不丢失的特 点。比如常用的24C 系列,93C 系列的器件。一般这种器件采用 I2C 的方式与单片机进 行通讯,对于这种通讯方式及器件的应用另作总结。这里主要总结一下, STC12C5204AD 芯片内部包含的 EEPROM 的应用方法。 STC12C5201AD 系列单片机内部集成了 EEPROM 是与程序空间分开的,利用 ISP/IAP 技术可将内部 data flash 当 EEPROM,擦写10万次以上。 EEPROM 可分为若干个扇区,每个扇区包含512字节。 使用时建议同一次修改的数据放在同一个扇区,不是同一次修改的数据放在不同的扇区, 不一定要用满。数据存储器的擦除操作是按扇区进行的。 在程序中可对 EEPROM 进行字节读写/字节编程/扇区擦除操作。在工作电压 Vcc 偏低时, 建议不要进行 EEPROM/IAP 操作。以免发生数据错误。 应用的步骤 1、 声明与 EEPROM 相关的寄存器 2、 编写 EEPROM 初始化函数 3、 编写字节擦除函数 4、 编写字节编程函数 5、 编写字节读取函数 6、 在需要读取 EEPROM 字节内容时直接调用字节读取函数即可 7、 在需要进行写 EEPROM 字节时,先调用字节擦除函数,将字节内容擦除成 FFH 后, 在调用字节编程函数,将数据写入到 EEPROM 的地址单元中。 与 EEPROM 应用相关的寄存器 符号 描述 地 址 位地址及符号 复位值 IAP_DA TA ISP/IAP flash data register C 2 H 1111 1111B IAP_AD DRH ISP/IAP flash address high C 3 H 0000 0000B IAP_AD DRL ISP/IAP flash address low C 4 H IAP_CM D ISP/IAP flash command register C 5 H M S 1 M S 0 IAP_TRI G ISP/IAP flash command trigger C 6 H xxxxxx xxxB IAP_CO NTR ISP/IAP control register C 7 H I A P E N SWBS S W R S T C M D _ F A I L W T 2 W T 1 W T 0 0000X0 00B PCON Power control 87 H S O M D SMOD0 L V D F P O F G F 1 G F 0 P D I D L 001100 00B 1、IAP_DATA :ISP/IAP 数据寄存器 ISP/IAP 操作时的数据寄存器。 ISP/IAP 从 FlASH 读出的数据存放此处,向 flash 写的数据也需要放在此处。 2、 IAP_ADDRH 和 IAP_ADDRL :IAP/ISP 地址寄存器 3、 IAP_CMD:ISP/IAP 命令寄存器 M S 1 M S 0 命令/操作 模式选择 0 0 Standby 待机模式,无 ISP 操作 0 1 从用户程序区对“data flash /EEprom 区”进行字节读 1 0 从用户的应用程序区对“data flash/eeprom 区”进行字节编写 1 1 从用户的应用程序区对“data flash/eeprom 区”进行扇区擦除 4、IAP_TRIG:ISP/IAP 命令触发寄存器 在 IAPEN(IAP_CONTR.7)=1时,对 IAPtrig 先写入5AH,在写入 A5H,ISPIAP 命令 才会生效 ISPIAP 操作完成后,IAP 地址高 8位寄存器 IAP_ADDRH、IAP 地址低8位寄存器 IAP_ADDRL 和 IAP 命令寄存器 IAP_CMD 的内容不变。如果接下来要对下一个地址的 数据进行 IAP/ISP 操作,需手动将该地址的高8位和低8 位分别写入 IAP_ADDRH 和 IAP_ADDRL 寄存器。 每次 IAP 操作时,都要对 IAP_TRIG 先写入5AH,再写入 A5H,ISP/IAP 命令才会生效。 5、IAP_CONTR:ISPIAP 控制寄存器 SFR name Ad dre ss Bit B7 B6 B5 B4 B3 B2 B1 B0 IAP_C ONTR C 7 H N a m e IA P E N S W B S S W R S T C M D _ F A I L _ W T 2 W T 1 W T 0 IAPEN:ISP/IAP 功能允许位:0:禁止 IAP 读/写/擦除 data flash /eeprom 1:允许 IAP 读/ 写/ 擦除 data flash /eeprom SWBW:软件选择从用户应用程序区启动(送0 ) ,还是从系统 ISP 监控程序启动(送1) 。 要与 SWRST 直接配合使用才可以实现 SWRST:0:不操作; 1:产生软件系统复位,硬件自动复位。 CMD_FAIL:如果送了 ISP/IAP 命令,并对 IAP_TRIG 送5AH/A5H 触发失败,则为1, 需由软件清零。 在用户应用程序区(AP 区)软件复位并从用户应用程序区( AP 区)开始执行程序。 MOV IAP_CONTR,#00100000B;SWBS=0(选择 AP 区),SWRST=1(软复位) 在用户应用程序区(AP 区)软件复位并从系统 ISP 监控程序区开始执行程序 MOV IAP_CONTR,#01100000B;SWBS=1(选择 ISP 区),SWRST=1(软复位) 在系统 ISP 监控程序区软件复位并从用户应用程序区(AP 区)开始执行程序 MOV IAP_CONTR,#00100000B;SWBS=0(选择 AP 区)SWRST=1(软复位) 在系统 ISP 监控程序区软件复位并从系统 ISP 监控程序区开始执行程序。 MOV IAP_CONTR,#01100000B;SWBS=1(选择 ISP 区),SWRST=1(软复位) 设置等待时间 设置等待时间 CPU 等待时间(多少个 CPU 工作时钟) W T 2 W T 1 W T 0 Read/读 ( 2个时钟) Progra m/编程 ( =55u s) Sector erase 扇区擦除 =21us Recommended system clock 跟等待参数对应的推 荐系统时钟 1 1 1 2个时钟 55个时 钟 21012个时 钟 /头文件 #include”intrins.h” /*宏定义*/ #define uintunsigned int/用 unsigned int 代替 unsigned int #define ucharunsigned char/用 uchar 替代 unsigned char /*位定义 */ sbit SW=P32;/开关 sbit INC=P33;/增大按键 sbit DEC=P34;/减小按键 sbitDATA=P15;/595数据流 sbitSHIFT=P16;/595移位寄存器 sbitSTORAGE=P17;/595存储寄存器 sbitBEEP=P14;/蜂鸣器 /数码管显示代码 uchar codenum=0x01,0xf3,0x89,0xa1,0xb2,0xa4,0x84,0xf1,0x80,0x20 ; /0-9 代码 /变量声明 bit kai=0,biaozhi=0; uchar MA,dat; /*定义与 EEPROM 相关的特殊功能寄存器 */ sfrIAP_DATA=0XC2;/FLASH data register sfrIAP_ADDRH=0XC3;/FLASH address high sfrIAP_ADDRL=0XC4;/FLASH address low sfrIAP_CMD=0XC5;/FLASH command register sfrIAP_TRIG=0XC6;/FLSH command trigger sfrIAP_CONTR=0XC7;/flash control register /*定义 IAP/ISP/EEPROM 命令*/ #define CMD_IDLE0/stand_by #define CMD_READ1/byte_read #defineCMD_PROGRAM 2/byte_program #defineCMD_ERASE 3/sector_erase /*定义与 EEPROM 相关的寄存器 */ /#defineENABLE_IAP 0X80 /if sysclk8; IAP_TRIG=0X5A; IAP_TRIG=0XA5; _nop_(); dat=IAP_DATA; iapidle(); return dat; /*写一个字节的 IAP/ISP/EEPROM 空间 输入: 字节地址 要写入的数据 Void iapprogrambyte(uint addr,uchar dat) IAP_CONTR=ENABLE_IAP;/打开 IAP 功能并设置等待时间 IAP_CMD=CMD_PROGRAM;/设置写命令 IAP_ADDRL=addr;/设置字节地址低 8位 IAP_ADDRH=addr8;/设置字节地址的高 8位 IAP_DATA=dat;/写内容 IAP_TRIG=0X5A;/发送触发命令 1 IAP_TRIG=0XA5;/发送触发命令 2 _nop_();/等待直到写操作完成 Iapidle(); /*扇区擦除 输入:地址 Void iaperasesector(uint addr) IAP_CONTR=ENABLE_IAP;/开 IAP 功能并设置等待时间 IAP_CMD=CMD_ERASE;/设置擦除命令 IAP_ADDRL=addr; IAP_ADDRH=addr8; IAP_TRIG=0x5a; IAP_TRIG=0XA5; _nop_(); Iapidle(); /*写595 函数*/ void write_595(uchar x) uchar j; for(j=0;j1) delay(10); if(DEC=0 while(!DEC) BEEP=1; BEEP=0; if(kai=1) /如果电源打开了,则将电源开的状态标志置1 biaozhi=1; if(biaozhi=1 iaperasesector(0x00); programbyte(0x00,MA); / 执行 EEPROM 写程 /主函数 Void main(voi

温馨提示

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

评论

0/150

提交评论