-
关于
EEPROM
的应用总结
< br>
关于
EEPROM
的应用总结
当在程序运行的过程中你希望修改某个变量并且此变量的值在
掉电以后不丢失,那么你
就可以采用将变量数据写入
EEPRO
M
的方式来实现。
什么是
EEPROM
,
即
Ele
ctrically Erasable ProgrammableRead_Only Memory
首先它是一
种存储器,
并且可以通过高电压来
进行反复擦写的存储器。
具有掉电数据不丢失的特点。
比如常用
的
24C
系列,
93C
系列的器件。一般这种器件采用
I2C
的方式与单片机
进行通
讯,对于这种通讯方式及器件的应用另作总结。这里主要总结一下,
STC12C5204AD
芯
片内部包含的
EEPROM
的应用方法。
< br>STC12C5201AD
系列单片机内部集成了
EEP
ROM
是与程序空间分开的,
利用
IS
P/IAP
技
术可将内部
data f
lash
当
EEPROM
,擦写
10
万次以上。
E
EPROM
可分为若干个扇区,每个扇区包含
512
字节。
使用时建议同一次修改的数据放在同一个
扇区,
不是同一次修改的数据放在不同的扇区,
不一定要用满。
数据存储器的擦除操作是按扇区进行的。
在程序中可对
EEPROM
进行字节读写
/
字节编程
/
扇区擦除操作。
在
工作电压
Vcc
偏低时,
建议不要进行
EEPROM/IAP
操作。以免发生数据错误。
应用的步骤
1
、
p>
声明与
EEPROM
相关的寄存器
2
、
编写
EEPROM
< br>初始化函数
3
、
编写字节擦除函数
4
、
编写字节编程函数
5
、
编写字节读取函数
6
、
p>
在需要读取
EEPROM
字节内容时直接调
用字节读取函数即可
7
、
p>
在需要进行写
EEPROM
字节时,先调用
字节擦除函数,将字节内容擦除成
FFH
后,
< br>在调用字节编程函数,将数据写入到
EEPROM
的地址
单元中。
与
EEPROM
应用相关的寄存器
符号
描述
地
址
位地址及符号
复位值
IAP_DAT
A
ISP/IAP
flash data
register
C
< br>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
M
S
M
p>
S
0
5
H
1
xxx
xxx
xxxB
IAP_TRI
G
p>
ISP/IAP flash
command
trigger
C
6
H
p>
I
A
SWBS
IA
P_CO
NTR
ISP/IAP control
register
C
7
H
S
W
R
p>
S
C
M
D
_
W
T
2
W
T
< br>1
W
T
0
0000X0
00B
P
E
N
T
F
A
p>
I
L
G
F
1
G
F
P
D
I
001100
00B
PCON
Power control
87<
/p>
H
S
O
M
D
SMOD0
L<
/p>
V
D
F
P
O
F
D
L
0
1
、
p>
IAP_DATA
:
ISP/IAP
数据寄存器
ISP/IAP
操作时的数据寄存器。
ISP/IAP
从
FlASH
读出的数据存放此处,向
flash
写的数据也
需要放在此处。
2
、
p>
IAP_ADDRH
和
IAP_ADDRL
:
IAP/ISP
地址寄存器
3
、
IAP_CMD
:
< br>ISP/IAP
命令寄存器
M
S
1
0
0
1
1
M
S
0
0
1
0
1
命令
/
操作
模式选择
Standby
待机模式,无
ISP
操作
从用户程序区对“
data flash
/EEprom
区”进行字节读
从用户的应用程序区对“
data
flash/eeprom
区”进行字节编写
从用户的应用程序区对“
data
flash/eeprom
区”进行扇区擦除
4
、
IAP_TRIG
:
p>
ISP/IAP
命令触发寄存器
在
IAPEN(IAP_CONTR.7)=1
时,对
IAP
——
trig
先写入
5AH
,在写入
A
5H,ISPIAP
命令
才会生效
<
/p>
ISPIAP
操作完成后,
IAP
地址高
8
位寄存器
I
AP_ADDRH
、
IAP
地址低
p>
8
位寄存器
IAP_ADDRL
和
IAP
命令寄存器
I
AP_CMD
的内容不变。
如果接下来要对下一个地址的数
p>
据进行
IAP/ISP
操作,需手动将该地
址的高
8
位和低
8
位分别写入
IAP_ADDRH
和
IAP_ADDRL
寄存器。
每次<
/p>
IAP
操作时,都要对
IAP_TRIG
先写入
5AH
,再写入
A5H
,
ISP/IAP
命令
才会生效。
5
、
IAP_CONTR
:
ISPIAP
控制寄存器
SFR name
<
/p>
Ad
dre
ss
Bit
B7
B6
B5
B4
B3
B2
B1
B0
N
a
m
e
IA
P
E
N
S
W
B
S <
/p>
S
W
R
S
T
C
M
D
_
F
A
I
L
_
W
T
2
W
T
1
W
T
0
IAP_C
ONTR
C
7
H
IA
PEN:ISP/IAP
功能允许位:
0
:禁止
IAP
读
/
< br>写
/
擦除
data flash /eeprom
1:
允许
IAP
读
/
写
/
擦除
data flash /eeprom
SWBW:
软件选择从用户应用程序区启动(送
0
)
,还是从系统
ISP
监控程序启动(送
1
)
。
要与
SW
RST
直接配合使用才可以实现
SW
RST
:
0
:不操作;
1
:产生软件系统复位,硬件自动复位。
CMD_FAIL
:如果送了
ISP/IAP
p>
命令,并对
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
(软复位)
< br>
在系统
ISP
监控程序区软件
复位并从用户应用程序区(
AP
区)开始执行程序
MOV IAP_CONTR,#00100000B;SWBS=0(<
/p>
选择
AP
区
)S
WRST=1(
软复位
)
在系统
p>
ISP
监控程序区软件复位并从系统
ISP
监控程序区开始执行程序。
MOV
IAP_CONTR,#01100000B
;
SWBS=1(
选择
ISP
区
)
,
SWRST=1(
软复位
)
设置等待时间
设置等待时间
W
T
0
CPU
等待时间(多少个
p>
CPU
工作时钟)
Sector
Recommended
system clock
W
T
2
W
T
1
Read/
读
Progra
m/
< br>编
程
erase
(
2
个时钟)
扇区擦除
跟等待参数对应的推
荐系统时钟
(
=5
5u
s
)
=21us
1
1
1
2
个时钟
5
5
个
时
钟
21
012
个时
钟
<=1MHz
<=2MHz
1
1
0
2
个时钟
1
10
个时
钟
42024
个时
钟
<=3MHz
1
0
1
2
个时钟
1
65
个时
钟
63036
个时
钟
<=6MHz
1
0
0
2
个时钟
3
30
个时
钟
126072
个
时钟
<=12MHz
0
1
1
2
个时钟
6
60
个时
252144
个
钟
时钟
<=20MHz
0
1
0
2
个时钟
1
100
个
时钟
420240
个
时钟
<=24MHz
0
0
1
2
个时钟
1
320
个
时钟
504288
个
时钟
<=30MHz
0
0
0
2
个时钟
1
760
个
时钟
672348
个
时钟
12c
系列单片机内部
EEPROM
选型一览
表
型号
字
节
数
(
eep
rom
)
2K
扇区数
起
始
扇
区
首地址
0000h
结
束
扇
区
末尾地址
07ffh
STC12C5201AD/
PWM
STC12C5202AD/
PWM
STC12C5203AD/
PWM
STC12C5204AD/
PWM
STC12C5205AD/
PWM
大建议:
4
2k
4
0000h
07ffh
2k
4
0000h
07ffh
1k
2
0000h
03ffh
1k
2
0000h
03ffh
1
、
p>
同一次修改的数据放在同一个扇区中不是同一次修改的数据放在另外的扇区就不
须读出保护。
2
、
p>
如果一个扇区只用一个字节,那就是真正的
EEPROM
,
STC
单片机的
Dat
a
flash
比外部
EEPROM
要快很多读一个字节
/
编程一个字节大
概是
2
个时钟
/55
< br>微秒。
3
、
p>
如果在一个扇区中存放了大量的数据,某次只需要修改其中的一个字节或一部分
字节时,则另外的不需要修改的数据须先读出放在
STC
单片机的
RAM
中,然后擦
除整个
扇区,再将需要保留的数据和需修改的数据按字节逐字节写回该扇区中(只
有字节写命令
,
无连续字节写命令)
。
这时每个扇区
使用的字节数是使用的越少越方
便(不需要读出一大堆需保留数据)
。
常见问题:
1
、
p>
IAP
指令完成后,地址是否会自动
”
p>
加
1
”
或“减
1
”?
不会
2
、
p>
送
5A
和
A5
p>
触发之后下一次
IAP
命令是否还需要送<
/p>
5A
和
A5
触发
?
是,一定要。
< br>STC12C5201AD/PWM
单片机内部
EEPR
OM
地址表
第一扇区
第二扇区
第三扇区
第四扇区
起
结
起
结
起始地址
结
起
结
始
束
始
束
束
p>
始
束
地
地
地
地
地
地
地
址
址
址
址
址
址
址
p>
000
1FF
200
3FF
400H
5FF
600
7FF
0h
H
H
H
H
H
H
第五扇区
第六扇区
第七扇区
第八扇区
起
结
起
结
起始地址
结
起
结
始
束
始
束
束
p>
始
束
地
地
地
地
地
地
地
址
址
址
址
址
址
址
p>
800
9FF
A00
BFF
C00H
DFF
E00
FFF
H
H
H
H
H
H
H
第九扇区
第十扇区
第十一扇区
第十二扇区
起
结
起
结
起始地址
结
起
结
始
束
始
束
束<
/p>
始
束
地
地
地
地
地
地
地
址
址
址
址
址
址
址
p>
100
11F
120
13F
1400H
15F
160
17F
0H
FH
0H
FH
FH
0H
FH
下面就举一个例子来说明一下
p>
EEPROM
的应用
每个扇区
512
字节
建议同一次修改
的数据放在同一
个扇区,不是同
一次修改的数据
放
在
不
同
的
扇
区,不必用满
,
当
然
也
可<
/p>
以
用
满。
程序功能:
三个按键分别是,开关、
增大、减小。通过
7
段数码管将键值显示出来(
1-9
)
。
并将开关键关闭前的键值保存在
EEPROM
中,
p>
系统再次上电时显示上次关闭前的键
值。
p>
#include
头文件
< br>
#include
”
intr
ins.h
”
/******
宏定义
*************/
#define uintunsigned
int//
用
unsigned int
代替
unsigned int
#define ucharunsigned
char//
用
uchar
替代
unsigned char
/
*********
位定义
**************/
sbit SW=P3^2;//
开关
sbit
INC=P3^3;//
增大按键
sbit
DEC=P3^4;//
减小按键
s
bitDATA=P1^5;//595
数据流
sbitSHIFT=P1^6;//595
移位寄存器
sbitSTORAGE=P1^7;//595
存储寄
存器
sbitBEEP=P1^4;//
蜂鸣器
/
数码管显示代码
uchar codenum[]={0x01,0xf3,0x89,0xa1,0x
b2,0xa4,0x84,0xf1,0x80,0x20}
//0-9
代码
//
变量声明
bit kai=0,biaozhi=0;
uchar
MA,dat;
/*
定义与
EEPR
OM
相关的特殊功能寄存器
*/
sfrIAP_DATA=0XC2;//FLASH data register
sfrIAP_ADDRH=0XC3;//FLASH address high
-
-
-
-
-
-
-
-
-
上一篇:门铃报警器电路设计
下一篇:系统解剖学名词解释(含大题)