关于STC单片机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应用相关的寄存器
本文引用地址://m.amcfsurvey.com/article/201612/324568.htm
符号
|
描述
|
地址
|
位地址及符号
|
复位值
|
|||||||
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
|
评论