收藏 分销(赏)

第10章 STC系列单片机片内EEPROM的应用.ppt

上传人:xrp****65 文档编号:14015097 上传时间:2026-05-27 格式:PPT 页数:22 大小:1.57MB 下载积分:10 金币
下载 相关
第10章 STC系列单片机片内EEPROM的应用.ppt_第1页
第1页 / 共22页
第10章 STC系列单片机片内EEPROM的应用.ppt_第2页
第2页 / 共22页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,10,章,STC,系列单片机片内,EEPROM,的应用,10.1 EEPROM,模块所属特殊功能寄存器,10.2 EEPROM,读、写、擦除,第,10,章,STC,系列单片机片内,EEPROM,的应用,STC,系列单片机内部不仅集成了,用于存储程序的,EEPROM,,还集成了,用于存储数据的,EEPROM,,不同的型号容量不同,从,1KB,45KB,不等,。,EEPROM,主要用于保存在掉电时不允许丢失的数据,在应用过程中所采集、运算或通过键盘输入等得到的一些修正参数。,STC,系列单片机内部集成的用于存储数据的,EEPROM,和用于存储程序的,EEPROM,地址重叠,但属于不同的物理空间,。用户程序指令代码是通过串口直接下载至程序存储器,而用于存储数据的,EEPROM,则通过用户程序进行读写操作。,EEPROM,分为若干个扇区,,每个扇区的大小为,512B,,数据存储器的,擦除操作是按扇区进行,的,可以擦写的次数在,10,万次以上,。,使用时,同一次修改的数据应该存放于同一个扇区,不是同一次修改的数据最好存放在不同的扇区,不一定要存满。内部,EEPROM,的扇区地址如表,10,1,所示。,起始地址,结束地址,起始地址,结束地址,第一扇区,第二扇区,0000H,01FFH,0200H,03FFH,第三扇区,第四扇区,0400H,05FFH,0600H,07FFH,10.1 EEPROM,模块所属特殊功能寄存器,对存储数据的,EEPROM,读、写、擦除等操作要用到,6,个特殊功能寄存器,特殊功能寄存器名称,地址,描述,复位初值,IAP_DATA,C2H/E2H,数据寄存器,11111111B,IAP_ADDRH,C3H/E3H,地址寄存器高,8,位,00000000B,IAP_ADDRL,C4H/E4H,地址寄存器低,8,位,00000000B,IAP_CMD,C5H/E5H,命令寄存器,xxxxxx00B,IAP_TRIG,C6H/E6H,命令触发寄存器,xxxxxxxxB,IAP_CONTR,C7H/E7H,控制寄存器,0000 x000B,STC11/10Fxx,、,STC12C5A60S2,等单片机的,6,个特殊功能寄存器的地址分别,为,C2,C7H,;而,STC12C56xx,、,STC12C54xx,、,STC89/90C51xx,等系列单片,机的地址为,E2,E7H,。,1.,命令寄存器,IAP_CMD,MS1,、,MS0,决定,EEPROM,的工作方式,MS1,MS0,操作任务的选择,0,0,待机模式,不操作,0,1,对,EEPROM,进行读操作,1,0,对,EEPROM,进行写操作,1,1,对,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,所示。,WT2,WT1,WT0,读(,2,个时钟),写(,55us,),扇区擦除(,21ms,),对应,f,osc,1,1,1,2,个时钟,55,个时钟,21012,个时钟,1MHz,1,1,0,2,个时钟,100,个时钟,42024,个时钟,2MHz,1,0,1,2,个时钟,165,个时钟,63036,个时钟,3MHz,1,0,0,2,个时钟,330,个时钟,126072,个时钟,6MHz,0,1,1,2,个时钟,660,个时钟,252144,个时钟,12MHz,0,1,0,2,个时钟,1000,个时钟,420240,个时钟,20MHz,0,0,1,2,个时钟,1320,个时钟,504288,个时钟,24MHz,0,0,0,2,个时钟,1760,个时钟,672384,个时钟,30MHz,10.2 EEPROM,读、写、擦除,EEPROM,进行读写时,,,必须按一个字节一个字节,地操作。,通过以下程序了解对,EEPROM,的读、写、擦除的过程。,(,1,)从,STC12C5A60S2,单片机片内,EEPROM,中某单元读取数据,(假设系统时钟频率为,20MHz,),MOV IAP_ADDRH,#BYTE_ADDRH,;送单元地址的高,8,位,MOV IAP_ADDRL,#BYTE_ADDRL,;送单元地址的低,8,位,MOV IAP_CONTR,#10000010B,;设置等待时间且允许,EEPROM,进行读、写、擦除操作,MOV IAP_CMD,#00000001B,;送字节读指令,MOV IAP_TRIG,#5AH,;启动内部读取工作,MOV IAP_TRIG,#0A5H,NOP,;等待,2,个时钟周期的时间,NOP,MOV A,ISP_DATA,;将读出的数据存入,A,寄存器,对,STC10/10Fxx,、,STC12C5Axx,等系列,单片机启动读、写、擦除工作时,,先给,IAP_TRIG,寄存器送立即数,5AH,再送,A5H,作为触发信号,;而对,STC12C56xx,、,STC12C54xx,、,STC89/90C51xx,等系列单片机需先送,46H,,再送,B9H,作为触发信号。,(,2,)向,STC12C5A60S2,单片机片内,EEPROM,中某单元写入数据,(假设系统时钟频率为,20MHz,):,MOV IAP_DATA,#DATA,;先将要写入的数据送至,IAP_DATA,寄存器,MOV IAP_ADDRH,#BYTE_ADDRH,;送单元地址的高,8,位,MOV IAP_ADDRL,#BYTE_ADDRL,;送单元地址的低,8,位,MOV IAP_CONTR,#10000010B,;设置等待时间且允许对,EEPROM,进行读、写、擦除操作,MOV IAP_CMD,#00000010B,;送字节写命令,MOV IAP_TRIG,#5AH,;启动内部编程工作,MOV IAP_TRIG,#0A5H,LCALL DELAY_55s,;调用延时,55,s,的子程序,等待编程结束,完成读、写操作后,地址不会自动加,1,,每次执行读、写操作时须重新送地址。,(,3,)如果在某扇区中已向部分单元写入了数据,要想再改写数据,需对该扇区的所有单元进行全部擦除,即改写数据前先对整个扇区进行擦除,对扇区擦除的程序如下(假设系统时钟频率为,20MHz,):,MOV IAP_ADDRH,#SECTOR _ADDR_HIGH,;送扇区起始地址的高,8,位,MOV IAP_ADDRL,#SECTOR _ADDR_LOW,;送扇区起始地址的低,8,位,MOV IAP_CONTR,#10000010B,;设置等待时间且允许对,EEPROM,进行读、写、擦除等操作,MOV IAP_CMD,#00000011B,;送扇区擦除指令,MOV IAP_TRIG,#5AH,;启动擦除进程,MOV IAP_TRIG,#0A5H,LCALL DELAY_21ms;,延时,21ms,,等待擦除结束,【例,10,1,】,将,STC12C5A60S2,单片机片内,RAM,的,50H,5FH,单元的数据依次写入,EEPROM,的第一扇区的,0000H,000FH,单元。,分析:,如果在读、写、擦除的过程中,没有对,EEPROM,相关的寄存器进行访问,读、写、擦除一般是成功的。为了防止在读、写、擦除的过程中电源发生波动,在读、写、擦除后需要判断操作是否成功。设系统的时钟频率为,20MHz,,用,R0,作为指针指向片内,RAM,的,50H,5FH,单元,,DPTR,指向,EEPROM,的,0000H,000FH,地址,要将数据写入,EEPROM,,首先对整个扇区进行擦除。若擦除不成功,需要重新擦除;若擦除成功,可将片内,RAM 50H,5FH,单元的数据写进,EEPROM,的,0000H,000FH,单元,然后再读出,EEPROM,的数据与片内,RAM,的,50H,5FH,单元的数据比较,若相同,表示写操作成功,若不同,表示写操作失败,需重新擦除后,将数据再次写进,EEPROM,对应的单元,汇编语言子程序,IAP_DATA EQU 0C2H,;数据寄存器,IAP_ADDRH EQU 0C3H,;高,8,位地址寄存器,IAP_ADDRL EQU 0C4H,;低,8,位地址寄存器,IAP_CMD EQU 0C5H,;命令寄存器,IAP_TRIG EQU 0C6H,;触发寄存器,IAP_CONTR EQU 0C7H,;控制寄存器,SECTION_ADDR EQU 0000H,;扇区首地址,ORG 0000H,LJMP MAIN,ORG 0100H,MAIN,:,MOV SP,#0BFH,;初始化堆栈指针,START0,:,MOV DPTR,#SECTION_ADDR,;第一扇区的首地址送,DPTR,LCALL SECTION_ERASE,;调用扇区擦除子程序,MOV A,IAP_CONTR,;读控制寄存控制器,JNB ACC.4,START,;若此位为,0,,表示擦除成功,可进行编程,LJMP START0,;若擦除失败,须重新进行擦除,START,:,MOV DPTR,#SECTION_ADDR,;第一扇区的首地址送,DPTR,MOV R0,#50H,;,R0,作为片内,RAM,的指针,MOV R2,#16,;,R2,作为写,16,个字节的计数器,LOOP,:,LCALL BYTE_PROGRAM,;调用向,EEPROM,写数据的子程序,LCALL BYTE_READ,;调用读,EEPROM,子程序,MOV A,R0,CJNE A,IAP_DATA,START0,;如果读到的数据与原数据不等,则重新开始,INC DPTR,;,EEPROM,地址加,1,INC R0,;片内,RAM,地址加,1,DJNZ R2,LOOP,;计数不为,0,,跳转至,LOOP,SJMP$,SECTION_ERASE,:,;擦除,MOV IAP_CONTR,#82H,;设置等待时间且允许对,EEPROM,进行操作,MOV IAP_CMD,#03H,;对,EEPROM,进行扇区擦除命令,MOV IAP_ADDRL,DPL,;送入扇区首地址的低,8,位,MOV IAP_ADDRH,DPH,;送入扇区首地址的高,8,位,MOV IAP_TRIG,#5AH,;启动擦除操作,MOV IAP_TRIG,#0A5H,LCALL DELAY_21ms,;延时等待,RET,BYTE_PROGRAM,:,;写,MOV A,R0,;读取片内,RAM,单元,50H,5FH,的内容,MOV IAP_DATA,A,;将数据送至数据寄存器,MOV IAP_CONTR,#82H,;允许对,EERPOM,操作并设置等待时间,MOV IAP_CMD,#02H,;对,EEPROM,进行写操作指令,MOV IAP_ADDRL,DPL,;送地址的低,8,位,MOV IAP_ADDRH,DPH,;送地址的高,8,位,MOV IAP_TRIG,#5AH,;启动写操作,MOV IAP_TRIG,#0A5H,LCALL DELAY_55,s,;延时等待,RET,BYTE_READ,:,;读,MOV IAP_CONTR,#82H,MOV IAP_CMD,#01H,;读,EEPROM,命令,MOV IAP_ADDRL,DPL,;送入地址的低,8,位,MOV IAP_ADDRH,DPH,;送入地址的高,8,位,MOV IAP_TRIG,#5AH;,启动读操作,MOV IAP_TRIG,#0A5H,NOP,NOP,RET,DELAY_55,s,:;略,DELAY_21ms,:,;略,END,C51,程序:,#include,#include/,声明本征函数库,#define uchar unsigned char,#define uint unsigned int,#define SECTION_ADDR 0 x0000 /,定义扇区的首地址,uchar data*dp;/,定义指针,uchar Temp;,uint i,xdat;,long y;,void SECTION_ERASE(uint SECTION_ADDR);/,扇区擦除函数,void BYTE_PROGRAM(uint byte_addr);/,扇区编程函数,uchar BYTE_READ(uint byte_addr);/,读扇区内容函数,void Delay_,s()reentrant;/,延时函数,void main(),uchar flag=0;/,定义扇区擦除失败的标记位,dp=0 x50;/dp,指针指向,50H,while,(flag=0)/,若扇区擦除失败,则再次循环擦出,SECTION_ERASE(SECTION_ADDR);/,对整个扇区进行擦除,for,(i=0;i8);/,送入扇区地址的高,8,位,IAP_TRIG=0 x5A;/,启动触发,IAP_TRIG=0 xA5;,for,(int i=0;i8);/,送入扇区地址的高,8,位,IAP_DATA=*dp;/,将数据送至数据寄存器,IAP_TRIG=0 x5A;/,启动触发,IAP_TRIG=0 xA5;,Delay_,s,(,0 x0445,);延时,55,s,uchar BYTE_READ,(uint byte_addr),IAP_CONTR=0 x82;/,设置等待时间且允许对,EEPROM,进行操作,IAP_CMD=0 x01;/,对,EEPROM,进行读操作,IAP_ADDRL=byte_addr;/,送入扇区地址的低,8,位,IAP_ADDRH=(byte_addr 8);/,送入扇区地址的高,8,位,IAP_TRIG=0 x5A;/,启动触发,IAP_TRIG=0 xA5;,Temp=IAP_DATA;/,读出扇区单元的内容,_nop_();_nop_();,return,(Temp);,void Delay_,s(uint x)reentrant,/,延时函数,利用,R6,和,R7,传递参数,#pragma asm,MOV A,R7,DL0,:,MOV R7,A,DJNZ R7,$,DJNZ R6,DL0,#pragma endasm,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服