版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章STC系列单片机片内EEPROM的应用
10.1EEPROM模块所属特殊功能寄存器10.2EEPROM读、写、擦除第10章STC系列单片机片内EEPROM的应用STC系列单片机内部不仅集成了用于存储程序的EEPROM,还集成了用于存储数据的EEPROM,不同的型号容量不同,从1KB-45KB不等。EEPROM主要用于保存在掉电时不允许丢失的数据,在应用过程中所采集、运算或通过键盘输入等得到的一些修正参数。STC系列单片机内部集成的用于存储数据的EEPROM和用于存储程序的EEPROM地址重叠,但属于不同的物理空间。用户程序指令代码是通过串口直接下载至程序存储器,而用于存储数据的EEPROM则通过用户程序进行读写操作。10.1EEPROM模块所属特殊功能寄存器对存储数据的EEPROM读、写、擦除等操作要用到6个特殊功能寄存器特殊功能寄存器名称地址描述复位初值IAP_DATAC2H/E2H数据寄存器11111111BIAP_ADDRHC3H/E3H地址寄存器高8位00000000BIAP_ADDRLC4H/E4H地址寄存器低8位00000000BIAP_CMDC5H/E5H命令寄存器xxxxxx00BIAP_TRIGC6H/E6H命令触发寄存器xxxxxxxxBIAP_CONTRC7H/E7H控制寄存器0000x000BSTC11/10Fxx、STC12C5A60S2等单片机的6个特殊功能寄存器的地址分别为C2-C7H;而STC12C56xx、STC12C54xx、STC89/90C51xx等系列单片机的地址为E2-E7H。1.命令寄存器IAP_CMD
MS1、MS0决定EEPROM的工作方式MS1MS0操作任务的选择00待机模式,不操作01对EEPROM进行读操作10对EEPROM进行写操作11对EEPROM进行擦除操作2.控制寄存器IAP_CONTR
对IAPEN、SWBS两位,用户只能写入1、0或0、0。IAPEN:读、写、擦除使能位。清0后禁止对EEPROM进行读、写、擦除;置1后允许对EEPROM进行读、写、擦除。SWBS:若对该位写入0,则是选择了用户应用程序(IAP)对EEPROM进行操作;该位若写入1,则是选择了单片机内部固化的系统监控程序(ISP)对EEPROM进行操作。SWRST:若对该位写入1时将产生系统软件复位,复位响应时,硬件自动将该位清零。CMD_FAIL:若该位为0,表示对EEPROM的读、写、擦除等操作是成功的;若该位为1,表示对EEPROM的读、写、擦除等操作失败,须由软件清0。WT2、WT1、WT0这三位设置等待时间,写入EEPROM单元的数据需要55μs的内部编程时间。如果是对内部扇区擦除,则需要21ms。在此期间,不得对EEPROM的任何单元进行任何访问,否则在此之前写入的命令失效。这三位的值决定等待上述时间所需要的系统时钟周期数,具体情况如表10-3所示。WT2WT1WT0读(2个时钟)写(55us)扇区擦除(21ms)对应fosc
1112个时钟55个时钟21012个时钟1MHz1102个时钟100个时钟42024个时钟2MHz1012个时钟165个时钟63036个时钟3MHz1002个时钟330个时钟126072个时钟6MHz0112个时钟660个时钟252144个时钟12MHz0102个时钟1000个时钟420240个时钟20MHz0012个时钟1320个时钟504288个时钟24MHz0002个时钟1760个时钟672384个时钟30MHz10.2EEPROM读、写、擦除EEPROM进行读写时,必须按一个字节一个字节地操作。通过以下程序了解对EEPROM的读、写、擦除的过程。(1)从STC12C5A60S2单片机片内EEPROM中某单元读取数据(假设系统时钟频率为20MHz) MOVIAP_ADDRH,#BYTE_ADDRH;送单元地址的高8位 MOVIAP_ADDRL,#BYTE_ADDRL;送单元地址的低8位 MOVIAP_CONTR,#10000010B;设置等待时间且允许 EEPROM进行读、写、擦除操作 MOVIAP_CMD,#00000001B;送字节读指令 MOVIAP_TRIG,#5AH;启动内部读取工作 MOVIAP_TRIG,#0A5H NOP;等待2个时钟周期的时间 NOP MOVA,ISP_DATA;将读出的数据存入A寄存器(2)向STC12C5A60S2单片机片内EEPROM中某单元写入数据(假设系统时钟频率为20MHz):MOVIAP_DATA,#DATA;先将要写入的数据送至IAP_DATA寄存器MOVIAP_ADDRH,#BYTE_ADDRH;送单元地址的高8位MOVIAP_ADDRL,#BYTE_ADDRL;送单元地址的低8位MOVIAP_CONTR,#10000010B;设置等待时间且允许对EEPROM进行读、写、擦除操作MOVIAP_CMD,#00000010B;送字节写命令MOVIAP_TRIG,#5AH;启动内部编程工作MOVIAP_TRIG,#0A5HLCALLDELAY_55µs;调用延时55μs的子程序,等待编程结束完成读、写操作后,地址不会自动加1,每次执行读、写操作时须重新送地址。(3)如果在某扇区中已向部分单元写入了数据,要想再改写数据,需对该扇区的所有单元进行全部擦除,即改写数据前先对整个扇区进行擦除,对扇区擦除的程序如下(假设系统时钟频率为20MHz): MOVIAP_ADDRH,#SECTOR_ADDR_HIGH;送扇区起始地址的高8位 MOVIAP_ADDRL,#SECTOR_ADDR_LOW;送扇区起始地址的低8位 MOVIAP_CONTR,#10000010B;设置等待时间且允许对EEPROM进行读、写、擦除等操作 MOVIAP_CMD,#00000011B;送扇区擦除指令 MOVIAP_TRIG,#5AH;启动擦除进程 MOVIAP_TRIG,#0A5H LCALLDELAY_21ms;延时21ms,等待擦除结束IAP_DATAEQU0C2H;数据寄存器IAP_ADDRHEQU0C3H;高8位地址寄存器IAP_ADDRLEQU0C4H;低8位地址寄存器IAP_CMDEQU0C5H;命令寄存器IAP_TRIGEQU0C6H;触发寄存器IAP_CONTREQU0C7H;控制寄存器SECTION_ADDREQU0000H;扇区首地址ORG0000HLJMPMAINORG0100HMAIN:MOVSP,#0BFH;初始化堆栈指针START0:MOVDPTR,#SECTION_ADDR;第一扇区的首地址送DPTRLCALLSECTION_ERASE;调用扇区擦除子程序MOVA,IAP_CONTR;读控制寄存控制器JNBACC.4,START;若此位为0,表示擦除成功,可进行编程LJMPSTART0;若擦除失败,须重新进行擦除START:MOVDPTR,#SECTION_ADDR;第一扇区的首地址送DPTRMOVR0,#50H;R0作为片内RAM的指针MOVR2,#16;R2作为写16个字节的计数器LOOP: LCALLBYTE_PROGRAM;调用向EEPROM写数据的子程序LCALLBYTE_READ;调用读EEPROM子程序MOVA,@R0CJNEA,IAP_DATA,START0;如果读到的数据与原数据不等,则重新开始INCDPTR;EEPROM地址加1 INCR0;片内RAM地址加1DJNZR2,LOOP;计数不为0,跳转至LOOPSJMP$SECTION_ERASE:;擦除 MOVIAP_CONTR,#82H;设置等待时间且允许对EEPROM进行操作MOVIAP_CMD,#03H;对EEPROM进行扇区擦除命令MOVIAP_ADDRL,DPL;送入扇区首地址的低8位MOVIAP_ADDRH,DPH;送入扇区首地址的高8位MOVIAP_TRIG,#5AH;启动擦除操作MOVIAP_TRIG,#0A5H LCALLDELAY_21ms;延时等待 RETBYTE_READ:;读 MOVIAP_CONTR,#82HMOVIAP_CMD,#01H;读EEPROM命令MOVIAP_ADDRL,DPL;送入地址的低8位 MOVIAP_ADDRH,DPH;送入地址的高8位 MOVIAP_TRIG,#5AH;启动读操作 MOVIAP_TRIG,#0A5H NOP NOP RETDELAY_55μs:;略DELAY_21ms:;略ENDC51程序:#include<STC12C5A.h>#include<intrins.h>//声明本征函数库#defineucharunsignedchar#defineuintunsignedint#defineSECTION_ADDR0x0000//定义扇区的首地址uchardata*dp;//定义指针ucharTemp;uinti,xdat;longy;voidSECTION_ERASE(uintSECTION_ADDR);//扇区擦除函数voidBYTE_PROGRAM(uintbyte_addr);//扇区编程函数ucharBYTE_READ(uintbyte_addr);//读扇区内容函数voidDelay_μs()reentrant;//延时函数voidmain(){ ucharflag=0; //定义扇区擦除失败的标记位 dp=0x50;//dp指针指向50H
while(flag==0)//若扇区擦除失败,则再次循环擦出{ SECTION_ERASE(SECTION_ADDR);//对整个扇区进行擦除
for(i=0;i<16;i++) { flag=0xFF; //先预置擦除成功标记 dp=dp+i;//指向片内RAM单元的下一字节 BYTE_PROGRAM(i+SECTION_ADDR);
if(BYTE_READ(i+SECTION_ADDR)!=*dp) {flag=0;//写失败
break; } }}
while(1);}voidBYTE_PROGRAM(uintbyte_addr){IAP_CONTR=0x82;//设置等待时间且允许对EEPROM进行操作IAP_CMD=0x02;//对EEPROM进行写操作IAP_ADDRL=byte_addr;//送入扇区地址的低8位IAP_ADDRH=(byte_addr>>8);//送入扇区地址的高8位IAP_DATA=*dp;//将数据送至数据寄存器IAP_TRIG=0x5A;//启动触发IAP_TRIG=0xA5;Delay_μs(0x0445);延时55μs}ucharBYTE_READ(uintbyte_addr){IAP_CONTR=0x82;//设置等待时间且允许对EEPROM进行操作IAP_CMD=0x01;//对EEPROM进行读操作IAP_ADDRL=byte_addr;//送入扇区地址的低8位IAP_ADD
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2023年山西省忻州市部分学校高考语文三模试卷
- 医疗废物管理课件
- 医患沟通内容5篇范文
- 高二上学期生物学浙科版(2019)期末模拟测试卷B卷(含解析)
- 临期产品协议书最简单三个步骤
- 2025届安徽省濉溪县高考冲刺数学模拟试题含解析
- 离职协议书的效力
- 合同收货确认书范本
- 石灰吟课件教学课件
- 《储罐的安装讲义图》课件
- 2024年移动解决方案经理认证考试题库大全-中(多选题)
- 破碎锤项目营销计划书
- DB11T 715-2018 公共汽电车场站功能设计要求
- 挖掘机技术培训
- 2024秋期国家开放大学专科《管理学基础》一平台在线形考(形考任务一至四)试题及答案
- LED电子显示屏投标书三篇
- 森林康养 课件
- 全国网络与信息安全管理职业技能大赛备赛试题及答案
- 湖北省黄石市2024-2025学年八年级上学期10月月考语文题
- 独家代理权的合同
- 我是小交警(教学设计)-2024-2025 学年六年级上册综合实践活动蒙沪版
评论
0/150
提交评论