第10章 STC系列单片机片内EEPROM的应用
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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作为触发信号。
• 汇编语言子程序
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 ;扇区首地址
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 ;延时等待
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命令
11100•对I禁置擦IAAP止1除10011PE后EN对。N允:E、01010E许读PSS用操片对WE果不此述对R、WEWOTP户作机E是得之时E写22222B2EMRB个个个个个E、SP应;内对对前间OPS、进:R时时时时时MRW两用 该 部 内 写 所EO擦O行若钟 钟 钟 钟 钟E单MT位P程位固部入需M1除读对R进元S统将、进,序若化扇的要OW11361使、该行的06360软该MW行CE功的件用(写的区命的05000R能E写位M0个 个 个 个操数的ST件位P读的读清个户入系擦令系IT0AD位时 时 时 时、R写:作据任这复清时P、;、0_O只统除失统1钟 钟 钟 钟。擦。)入F,钟若。需何M三位零A写若写能监,效时清除对0I的则对要单L位,。、该、,写控则。钟:046124;E读是该5元设复23252后位擦E则入程需这周若500620P、选位23012进μ置位为除R是1序要三期46744该s240个 个O写择、的写行等响个 个 个等1选(位数2位M时时,、了10内入任时 时 时待应操择进的 ,Im或钟钟为S表擦钟钟钟单部1何时时Ps作了行值具0时0。)示除编,访、间,失硬决体将在23612对等程表问0MMM20,败件定情产MM。此EHHH操时示,写EHH,自等况生zzz期P作zz间对否入须R动待如系间O是。则由上表M,成如在软 0 0 1 10-2个3所时钟示。1320个时钟 504288个时钟 24MHz
MOV IAP_ADDRL,# SECTOR _ADDR_LOW ;送扇区起始地 址的低8位
MOV IAP_CONTR,#10000010B ;设置等待时间且允许对 EEPROM进行读、写、擦除等操作
MOV IAP_CMD,#00000011B;送扇区擦除指令
MOV IAP_TRIG,#5AH;启动擦除进程
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 <STC12C5A.h> #include<intrins.h>//声明本征函数库 #define uchar unsigned char #define uint unsigned int #define SECTION_ADDR 0x0000 //定义扇区的首地址 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; //延时函数
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 ;设置等待时间且允许
第一扇区
第二扇区
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 控制寄存器
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 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对应的单元
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进 行操作
第10章STC系列单片机片内 EEPROM的应用
10.1 EEPROM模块所属特殊功能寄存器 10.2 EEPROM读、写、擦除
第10章STC系列单片机片内 EEPROM的应用
• STC系列单片机内部不仅集成了用于存储程序的EEPROM, 还集成了用于存储数据的EEPROM,不同的型号容量不同, 从1KB-45KB不等。
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位
• EEPROM分为若干个扇区,每个扇区的大小为512B,数据 存储器的擦除操作是按扇区进行的,可以擦写的次数在10 万次以上。
• 使用时,同一次修改的数据应该存放于同一个扇区,不是 同一次修改的数据最好存放在不同的扇区,不一定要存满。 内部EEPROM的扇区地址如表10-1所示。
起始地址 结束地址 起始地址 结束地址
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 ;若擦除失败,须重新进行擦除
操作时须重新送地址。
(3)如果在某扇区中已向部分单元写入了数据,要想再改 写数据,需对该扇区的所有单元进行全部擦除,即改写数 据前先对整个扇区进行擦除,对扇区擦除的程序如下(假 设系统时钟频率为20MHz):
MOV IAP_ADDRH,#SECTOR _ADDR_HIGH ;送扇区起始地 址的高8位
0000x000B
STC11/10Fxx、STC12C5A60S2等单片机的6个特殊功能寄存器的地址分别 为C2-C7H;而STC12C56xx、STC12C54xx、STC89/90C51xx等系列单片 机的地址为E2-E7H。
1.命令寄存器IAP_CMD
Βιβλιοθήκη Baidu
MS1、MS0决定EEPROM的工作方式
MS1 MS0
操作任务的选择
0
0
待机模式,不操作
0
1
对EEPROM进行读操作
1
0
对EEPROM进行写操作
1
1 对EEPROM进行擦除操作
2.控制寄存器IAP_CONTR
WT2 WT1 WT0 读 ( 2 个 写(55us) 时钟)
1 1 1 2个时钟 55个时钟
扇 区 擦 除 对应fosc (21ms) 21012个时钟 1MHz
(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_55µs ;调用延时55μs的子程序,等待编程结束 • 完成读、写操作后,地址不会自动加1,每次执行读、写
• EEPROM主要用于保存在掉电时不允许丢失的数据,在应 用过程中所采集、运算或通过键盘输入等得到的一些修正 参数。
• STC系列单片机内部集成的用于存储数据的EEPROM和用于 存储程序的EEPROM地址重叠,但属于不同的物理空间。 用户程序指令代码是通过串口直接下载至程序存储器,而 用于存储数据的EEPROM则通过用户程序进行读写操作。
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作为触发信号。
• 汇编语言子程序
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 ;扇区首地址
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 ;延时等待
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命令
11100•对I禁置擦IAAP止1除10011PE后EN对。N允:E、01010E许读PSS用操片对WE果不此述对R、WEWOTP户作机E是得之时E写22222B2EMRB个个个个个E、SP应;内对对前间OPS、进:R时时时时时MRW两用 该 部 内 写 所EO擦O行若钟 钟 钟 钟 钟E单MT位P程位固部入需M1除读对R进元S统将、进,序若化扇的要OW11361使、该行的06360软该MW行CE功的件用(写的区命的05000R能E写位M0个 个 个 个操数的ST件位P读的读清个户入系擦令系IT0AD位时 时 时 时、R写:作据任这复清时P、;、0_O只统除失统1钟 钟 钟 钟。擦。)入F,钟若。需何M三位零A写若写能监,效时清除对0I的则对要单L位,。、该、,写控则。钟:046124;E读是该5元设复23252后位擦E则入程需这周若500620P、选位23012进μ置位为除R是1序要三期46744该s240个 个O写择、的写行等响个 个 个等1选(位数2位M时时,、了10内入任时 时 时待应操择进的 ,Im或钟钟为S表擦钟钟钟单部1何时时Ps作了行值具0时0。)示除编,访、间,失硬决体将在23612对等程表问0MMM20,败件定情产MM。此EHHH操时示,写EHH,自等况生zzz期P作zz间对否入须R动待如系间O是。则由上表M,成如在软 0 0 1 10-2个3所时钟示。1320个时钟 504288个时钟 24MHz
MOV IAP_ADDRL,# SECTOR _ADDR_LOW ;送扇区起始地 址的低8位
MOV IAP_CONTR,#10000010B ;设置等待时间且允许对 EEPROM进行读、写、擦除等操作
MOV IAP_CMD,#00000011B;送扇区擦除指令
MOV IAP_TRIG,#5AH;启动擦除进程
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 <STC12C5A.h> #include<intrins.h>//声明本征函数库 #define uchar unsigned char #define uint unsigned int #define SECTION_ADDR 0x0000 //定义扇区的首地址 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; //延时函数
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 ;设置等待时间且允许
第一扇区
第二扇区
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 控制寄存器
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 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对应的单元
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进 行操作
第10章STC系列单片机片内 EEPROM的应用
10.1 EEPROM模块所属特殊功能寄存器 10.2 EEPROM读、写、擦除
第10章STC系列单片机片内 EEPROM的应用
• STC系列单片机内部不仅集成了用于存储程序的EEPROM, 还集成了用于存储数据的EEPROM,不同的型号容量不同, 从1KB-45KB不等。
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位
• EEPROM分为若干个扇区,每个扇区的大小为512B,数据 存储器的擦除操作是按扇区进行的,可以擦写的次数在10 万次以上。
• 使用时,同一次修改的数据应该存放于同一个扇区,不是 同一次修改的数据最好存放在不同的扇区,不一定要存满。 内部EEPROM的扇区地址如表10-1所示。
起始地址 结束地址 起始地址 结束地址
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 ;若擦除失败,须重新进行擦除
操作时须重新送地址。
(3)如果在某扇区中已向部分单元写入了数据,要想再改 写数据,需对该扇区的所有单元进行全部擦除,即改写数 据前先对整个扇区进行擦除,对扇区擦除的程序如下(假 设系统时钟频率为20MHz):
MOV IAP_ADDRH,#SECTOR _ADDR_HIGH ;送扇区起始地 址的高8位
0000x000B
STC11/10Fxx、STC12C5A60S2等单片机的6个特殊功能寄存器的地址分别 为C2-C7H;而STC12C56xx、STC12C54xx、STC89/90C51xx等系列单片 机的地址为E2-E7H。
1.命令寄存器IAP_CMD
Βιβλιοθήκη Baidu
MS1、MS0决定EEPROM的工作方式
MS1 MS0
操作任务的选择
0
0
待机模式,不操作
0
1
对EEPROM进行读操作
1
0
对EEPROM进行写操作
1
1 对EEPROM进行擦除操作
2.控制寄存器IAP_CONTR
WT2 WT1 WT0 读 ( 2 个 写(55us) 时钟)
1 1 1 2个时钟 55个时钟
扇 区 擦 除 对应fosc (21ms) 21012个时钟 1MHz
(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_55µs ;调用延时55μs的子程序,等待编程结束 • 完成读、写操作后,地址不会自动加1,每次执行读、写
• EEPROM主要用于保存在掉电时不允许丢失的数据,在应 用过程中所采集、运算或通过键盘输入等得到的一些修正 参数。
• STC系列单片机内部集成的用于存储数据的EEPROM和用于 存储程序的EEPROM地址重叠,但属于不同的物理空间。 用户程序指令代码是通过串口直接下载至程序存储器,而 用于存储数据的EEPROM则通过用户程序进行读写操作。