当在程序运转的过程中你期望修正某个变量而且此变量的值在掉电今后不丢掉,那么你就能够选用将变量数据写入EEPROM的办法来完成。
什么是EEPROM,即Electrically Erasable ProgrammableRead_Only Memory首要它是一种存储器,而且能够通过高电压来进行重复擦写的存储器。具有掉电数据不丢掉的特色。比方常用的24C系列,93C系列的器材。一般这种器材选用I2C的办法与单片机进行通讯,关于这种通讯办法及器材的运用另作总结。这儿首要总结一下,STC12C5204AD芯片内部包括的EEPROM的运用办法。
STC12C5201AD系列单片机内部集成了EEPROM是与程序空间分隔的,运用ISP/IAP技能可将内部dataflash当EEPROM,擦写10万次以上。
EEPROM可分为若干个扇区,每个扇区包括512字节。
运用时主张同一次修正的数据放在同一个扇区,不是同一次修正的数据放在不同的扇区,不一定要用满。数据存储器的擦除操作是按扇区进行的。
在程序中可对EEPROM进行字节读写/字节编程/扇区擦除操作。在作业电压Vcc偏低时,主张不要进行EEPROM/IAP操作。避免发生数据过错。
运用的过程
1、声明与EEPROM相关的寄存器
2、编写EEPROM初始化函数
3、编写字节擦除函数
4、编写字节编程函数
5、编写字节读取函数
6、在需求读取EEPROM字节内容时直接调用字节读取函数即可
7、在需求进行写EEPROM字节时,先调用字节擦除函数,将字节内容擦除成FFH后,在调用字节编程函数,将数据写入到EEPROM的地址单元中。
与EEPROM运用相关的寄存器
符号
|
描绘
|
地址
|
位地址及符号
|
复位值
|
|||||||
IAP_DATA
|
ISP/IAP flash data register
|
C2H
|
1111 1111B
|
||||||||
IAP_ADDRH
|
ISP/IAPflashaddress high
|
C3H
|
0000 0000B
|
||||||||
IAP_ADDRL
|
ISP/IAP flash address low
|
C4H
|
|||||||||
IAP_CMD
|
ISP/IAP flash command register
|
C5H
|
MS1
|
MS0
|
|||||||
IAP_TRIG
|
ISP/IAP flash command trigger
|
C6H
|
xxxxxxxxxB
|
||||||||
IAP_CONTR
|
ISP/IAP control register
|
C7H
|
IAPEN
|
SWBS
|
SWRST
|
CMD_FAIL
|
WT2
|
WT1
|
WT0
|
0000X000B
|
|
PCON
|
Power control
|
87H
|
SOMD
|
SMOD0
|
LVDF
|
POF
|
GF1
|
GF0
|
PD
|
IDL
|
00110000B
|
1、IAP_DATA:ISP/IAP数据寄存器
ISP/IAP操作时的数据寄存器。
ISP/IAP从FlASH读出的数据寄存此处,向flash写的数据也需求放在此处。
2、IAP_ADDRH和IAP_ADDRL :IAP/ISP地址寄存器
3、IAP_CMD:ISP/IAP指令寄存器
MS1
|
MS0
|
指令/操作形式挑选
|
0
|
0
|
Standby 待机形式,无ISP操作
|
0
|
1
|
从用户程序区对“data flash /EEprom区”进行字节读
|
1
|
0
|
从用户的运用程序区对“data flash/eeprom区”进行字节编写
|
1
|
1
|
从用户的运用程序区对“dataflash/eeprom区”进行扇区擦除
|
4、IAP_TRIG:ISP/IAP指令触发寄存器
在IAPEN(IAP_CONTR.7)=1时,对IAP——trig先写入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
|
Address
|
Bit
|
B7
|
B6
|
B5
|
B4
|
B3
|
B2
|
B1
|
B0
|
IAP_CONTR
|
C7H
|
Name
|
IAPEN
|
SWBS
|
SWRST
|
CMD_FAIL
|
_
|
WT2
|
WT1
|
WT0
|
IAPEN:ISP/IAP功用答应位:0:制止IAP读/写/擦除 data flash /eeprom
1:答应IAP读/写/擦除 dataflash/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作业时钟)
|
||||||
WT2
|
WT1
|
WT0
|
Read/读
(2个时钟)
|
Program/编程(=55us)
|
Sector erase
扇区擦除
=21us
|
Recommended system clock
跟等候参数对应的引荐体系时钟
|
|
1
|
1
|
1
|
2个时钟
|
55个时钟
|
21012个时钟
|
<=1MHz
|
|
1
|
1
|
0
|
2个时钟
|
110个时钟
|
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个时钟
|
1100个时钟
|
420240个时钟
|
<=20MHz
|
|
0
|
0
|
1
|
2个时钟
|
1320个时钟
|
504288个时钟
|
<=24MHz
|
|
0
|
0
|
0
|
2个时钟
|
1760个时钟
|
672348个时钟
|
<=30MHz
|
12c系列单片机内部EEPROM选型一览表
类型
|
字节数(eeprom)
|
扇区数
|
开始扇区首地址
|
完毕扇区结尾地址
|
STC12C5201AD/PWM
|
2K
|
4
|
0000h
|
07ffh
|
STC12C5202AD/PWM
|
2k
|
4
|
0000h
|
07ffh
|
STC12C5203AD/PWM
|
2k
|
4
|
0000h
|
07ffh
|
STC12C5204AD/PWM
|
1k
|
2
|
0000h
|
03ffh
|
STC12C5205AD/PWM
|
1k
|
2
|
0000h
|
03ffh
|