STC单片机EEPROM的应用和程序
单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无
法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等
存储器来实现。在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通
过IIC 或SPI 等接口来进行数据通信。这样不光会增加开发成本,同时在程序开发上也要花
更多的心思。在STC 单片机中内置了EEPROM(其实是采用IAP 技术读写内部FLASH 来
实现EEPROM),这样就节省了片外资源,使用起来也更加方便。下面就详细介绍STC 单
片机内置EEPROM 及其使用方法。
STC 各型号单片机内置的EEPROM 的容量各有不同,见下表:
(内部EEPROM 可以擦写100000 次以上)
上面提到了IAP,它的意思是“在应用编程”,即在程序运行时程序存储器可由程序自
身进行擦写。正是是因为有了IAP,从而可以使单片机可以将数据写入到程序存储器中,使
得数据如同烧入的程序一样,掉电不丢失。当然写入数据的区域与程序存储区要分开来,以
使程序不会遭到破坏。
要使用IAP 功能,与以下几个特殊功能寄存器相关:
ISP_DATA: ISP/IAP 操作时的数据寄存器。
ISP/IAP 从Flash 读出的数据放在此处,向Flash 写的数据也需放在此处
ISP_ADDRH:ISP/IAP 操作时的地址寄存器高八位。
ISP_ADDRL:ISP/IAP 操作时的地址寄存器低八位。
ISP_CMD: ISP/IAP 操作时的命令模式寄存器,须命令触发寄存器触发方可生效。
ISP_TRIG:ISP/IAP 操作时的命令触发寄存器。
当ISPEN(ISP_CONTR.7)=1 时,对ISP_TRIG 先写入0x46,再写入0xb9,ISP/IAP
命令才会生效。
单片机芯片型号起始地址内置EEPROM 容量(每扇区512 字节)
STC89C51RC,STC89LE51RC 0x2000 共八个扇区
STC89C52RC,STC89LE52RC 0x2000 共八个扇区
STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区
STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区
STC89C58RD+,STC89LE58RD+ 0x8000 共五十八个扇区
寄存器标识地址名称7 6 5 4 3 2 1 0 初始值
ISP_DATA 0xE2 ISP/IAP闪存数据寄存器11111111
ISP_ADDRH 0xE3 ISP/IAP 闪存地址高位00000000
ISP_ADDRL 0xE4 ISP/IAP 闪存地址低位00000000
ISP_CMD 0xE5 ISP/IAP闪存命令寄存器MS2
MS1 MS0 xxxxx000
ISP_TRIG 0xE6 ISP/IAP 闪存命令触发xxxxxxxx
ISP_CONTR 0xE7 ISP/IAP 控制寄存器ISPEN SWBS SWRST WT2
WT1 WT0 00xx000
B7 B6 B5 B4 B3 B2 B1 B0 命令/操作模式选择
保留命令选择
- - - - - 0 0 0 待机模式,无ISP/IAP 操作
- - - - - 0 0 1 对用户的应用程序Flash 区及数据Flash 区字节读
- - - - - 0 1 0 对用户的应用程序Flash 区及数据Flash 区字节编程
- - - - - 0 1 1 对用户的应用程序Flash 区及数据Flash 区扇区擦除
ISP_CONTR:ISP/IAP 控制寄存器。
ISPEN:ISP/IAP 功能允许位。0:禁止ISP/IAP 编程改变Flash,1:允许编程改变Flash
SWBS:软件选择从用户主程序区启动(0),还是从ISP 程序区启动(1)。
SWRST:0:不操作,1:产生软件系统复位,硬件自动清零。
ISP_CONTR 中的SWBS 与SWRST 这两个功能位,可以实现单片机的软件启动,并
启动到ISP 区或用户程序区,这在“STC 单片机自动下载”一节,亦有所应用。
如:
ISP_CONTR=0x60? 则可以实现从用户应用程序区软件复位到ISP 程序区开始运行
程序。
ISP_CONTR=0x20? 则可以实现从ISP 程序区软件复位到用户应用程序区开始运行
程序。
用IAP 向Flash 中读写数据,是需要一定的读写时间的,读写数据命令发出后,要等待
一段时间才可以读写成功。这个等待时间就是由WT2、WT1、WT0 与晶体振荡器频率决定
的。
(以上的建议时钟是(WT2、WT1、WT0)取不同的值时的标称时钟,用户系统中的时钟
不要过高,否则可能使操作不稳定。)
#include "reg52.h"
#include "eeprom.h"
//****************** 关闭 ISP,IAP 功能 **************
void ISP_IAP_Disable(void)
{
}
//*******************字节读***************************
uchar
{
}
STC单片机EEPRO 相关文章:
- STC单片机 EEPROM/IAP 功能测试程序演示(12-01)
- 关于STC单片机EEPROM的应用总结(12-01)
- STC单片机EEPROM功能模块(11-23)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)