Stc单片机eeprom使用心得

合集下载

STC89C52内部EEPROM

STC89C52内部EEPROM

STC89C52内部EEPROM单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM 中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM 或FLASHROM 等存储器来实现。

在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC 或SPI 等接口来进行数据通信。

这样不光会增加开发成本,同时在程序开发上也要花更多的心思。

在STC 单片机中内置了EEPROM(其实是采用IAP 技术读写内部FLASH 来实现EEPROM),这样就节省了片外资源,使用起来也更加方便。

下面就详细介绍STC 单片机内置EEPROM 及其使用方法。

STC 各型号单片机内置的EEPROM 的容量各有不同,见下表:(内部EEPROM 可以擦写100000 次以上)上面提到了IAP,它的意思是“在应用编程”,即在程序运行时程序存储器可由程序自身进行擦写。

正是是因为有了IAP,从而可以使单片机可以将数据写入到程序存储器中,使得数据如同烧入的程序一样,掉电不丢失。

当然写入数据的区域与程序存储区要分开来,以使程序不会遭到破坏。

要使用IAP 功能,与以下几个特殊功能寄存器相关:ISP_DA T A: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_DA TA 0xE2 ISP/IAP闪存数据寄存器11111111ISP_ADDRH 0xE3 ISP/IAP 闪存地址高位00000000ISP_ADDRL 0xE4 ISP/IAP 闪存地址低位00000000ISP_CMD 0xE5 ISP/IAP闪存命令寄存器MS2MS1 MS0 xxxxx000ISP_TRIG 0xE6 ISP/IAP 闪存命令触发xxxxxxxxISP_CONTR 0xE7 ISP/IAP 控制寄存器ISPEN SWBS SWRST WT2WT1 WT0 00xx000B7 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 控制寄存器。

stc单片机内部eeprom的应用(转)

stc单片机内部eeprom的应用(转)

STC单片机内部EEPROM的应用(转)STC单片机内部EEPROM的应用(转)2008-05-18 02:47:27| 分类:AVR与C51单片机技| 标签:|字号大中小订阅STC单片机内部EEPROM的应用单片机运行时的数据都存在于RAM(随机存储器)中,在掉电后RAM中的数据是无法保留的,那么怎样使数据在掉电后不丢失呢?这就需要使用EEPROM或FLASHROM 等存储器来实现。

在传统的单片机系统中,一般是在片外扩展存储器,单片机与存储器之间通过IIC或SPI等接口来进行数据通信。

这样不光会增加开发成本,同时在程序开发上也要花更多的心思。

在STC单片机中内置了EEPROM(其实是采用IAP技术读写内部FLASH来实现EEPROM),这样就节省了片外资源,使用起来也更加方便。

下面就详细介绍STC单片机内置EEPROM及其使用方法。

STC各型号单片机内置的EEPROM的容量各有不同,见下表: 单片机芯片型号 起始地址 内置EEPROM容量(每扇区512字节)  STC89C51RC,STC89LE51RC 0x2000 共八个扇区 STC89C52RC,STC89LE52RC 0x2000 共八个扇区  STC89C54RD+,STC89LE54RD+ 0x8000 共五十八个扇区  STC89C55RD+,STC89LE55RD+ 0x8000 共五十八个扇区  STC89C58RD+,STC89LE58RD+ 0x8000 共五十八个扇区。

STC单片机AD转换及EEPROM使用_杨峰

STC单片机AD转换及EEPROM使用_杨峰

杨峰 胡彬 罗青青 (安徽师范大学物理与电子信息学院 安徽芜湖 241000)
摘 要:本文总结介绍了S T C单片机A D 转换及E E P R O M 功能的使用,它以设计“自适应L E D 背光模块”为基础,结合实际制作中的问题
及体会,参考相关文献,对A D 转换、E E P R O M 的原理、结构及使用方法作了深入的总结和分析,旨在为后续研究设计提供参考。
关键词:STC单片机 AD转换 EEPROM
中图分类号: TP316.2 文献标识码:A
文章编号:1007-9416(2011)09-0169-03
The use of AD converter and EEPROM
on STC MCU
Yang Feng; Hu Bin; Luo Qingqing (College of Physics and Electronic Information AnHui WuHu 241000)
III. void Get_AD_Result()//AD转换 {? unsigned i="1"; ADC_CONTR=ADC_CONTR|0x08;//启动 AD 转换 00001000B do{;} while((ADC_CONTR&0x10)==0);// 判断 AD 转换是否 完成00010000B? ADC_CONTR=ADC_CONTR&0xE7;? //清0 ADC_FLAG, ADC_START 位, 停止A/D 转换 ADC_Channel_X_Result=ADC_DATA;//保存 AD 转换 结果高8位 ADC_Channel_X_Result=ADC_LOW2;//保存 AD 转换 结果低2位 } 通过这个函数进行AD 转换,获取AD 转换结果,保存在寄存器 ADC_Channel_X_Result中。 将以上几个函数模块有机组合就能方便地使用单片机自带的 AD 转换功能了,如果还需要对AD 转换性能作进一步的要求,还可 以设置其他相关的寄存器。 2.3 STC12C5624AD单片机的EEPROM使用 STC12C5624AD单片机的EEPROM功能是基于IAP/ISP技术,

STC系列单片机片内EEPROM的应用

STC系列单片机片内EEPROM的应用

(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;设置等待时间且允许对
MS1 MS0 • 操作任务旳选择
0
0
待机模式,不操作
0
1
对EEPROM进行读操作
1
0
对EEPROM进行写操作
1
1 对EEPROM进行擦除操作
2.控制寄存器IAP_CONTR
WT2 WT1 WT0 读(2个 时钟)
1 1 1 2个时钟
写(55us) 55个时钟
扇区擦除( 21ms) 21012个时钟
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命令
• EEPROM分为若干个扇区,每个扇区旳大小为512B,数据 存储器旳擦除操作是按扇区进行旳,能够擦写旳次数在10 万次以上。
• 使用时,同一次修改旳数据应该存储于同一种扇区,不是 同一次修改旳数据最佳存储在不同旳扇区,不一定要存满 。内部EEPROM旳扇区地址如表10-1所示。
起始地址 结束地址 起始地址 结束地址

STC单片机AD转换及EEPROM使用

STC单片机AD转换及EEPROM使用

STC单片机AD转换及EEPROM使用STC单片机AD转换及EEPROM使用随着各种电子设备的普及,信号处理的重要性日益凸显。

而一款好的ADC (Analog to Digital Convertor) 和一个高效的存储平台EEPROM (Electrically Erasable Programmable Read-Only Memory) 就成为建立可靠稳定的信号处理系统的重要组成部分。

本文将讨论STC单片机如何进行AD转换及EEPROM的使用。

首先,AD转换是将模拟信号转换成数字量的过程,是建立信号处理系统的关键步骤之一。

STC单片机内置了一个12位的AD转换器,也就是说,它可以将模拟信号转换成一个12位的数字信号,这是非常精确的。

下面我们来看看如何在代码中使用AD转换。

AD转换的原理很简单,即将待转换的模拟信号输入到AD口,接着启动AD转换。

当转换结束后,检测转换结束标志位,然后将转换结果读出。

这里具体介绍一下代码的实现方法。

首先,需要定义AD口的引脚、参考电压及转换效率等参数。

代码如下:#define ADC_PIN 0x01 //定义AD口所连接的引脚为P1.1#define ADC_REF 0x80 //定义参考电压为内部参考电压#define ADC_MODE 0xC0 //定义转换效率为最快接着,需要配置AD口所连接的引脚,使其成为输入口。

代码如下:P1ASF = 0x02; //定义P1.1为AD口输入接下来,启动AD转换,等待转换结束标志位的出现。

代码如下:ADC_CONTR = ADC_REF | ADC_MODE | ADC_PIN; //配置AD口ADC_CONTR |= 0x08; //启动AD转换while (!(ADC_CONTR & 0x20)); //等待转换结束标志位最后,将AD转换结果读出。

代码如下:uint16_t value;value = ADC_RES;value |= ADC_RESL << 8;我们可以看到,在STC单片机中使用AD转换非常方便,只需要简单的几行代码就可以完成。

STC89C52内部EEPROM

STC89C52内部EEPROM
或一部分字节时
则另外不需要修改的数据须先读出放在STC单片机的RAM当中,然后
擦除整个扇区,再
将需要保留的数据一并写回该扇区中。这时每个扇区使用的字节数据越少
越方便。
EEPROMStart(); //EEPROM启动
DelayNus(10);//读取一个字节要10us
EEPROMDisable(); //禁止EEPROM
return (ISP_DATA); //返回读取到的数据
}
void EEPROMWriteByte(UINT16 addr,UINT8 byte)
STC89C52内部EEPROM
STC89C52RC 2KEEPROM
传统的EEPROM是电可擦可编程只读存储一种掉电后数据不丢失的存储
芯片。
STC89C52RC的EEPROM是通过ISP/IAP技术读写内部FLASH来实现
EEPROM。
STC89C52RC的EEPROM起始地址为0x2000,以512字节为一个扇
typedef char INT8;
typedef int INT16;
typedef long INT32;
#define NOP() _nop_()
#define EEPROM_START_ADDRESS 0x2000
#define LED_PORTP2
void DelayNus(UINT16 t)
void EEPROMDisable(void)
{
ISP_CONTR=0x00; //禁止EEPROM
ISP_CMD=0x00; //无ISP操作
ISP_TRIG=0x00; //清零
ISP_ADDRH=0x00; //清零
ISP_ADDRL=0x00; //清零

eeprom使用经验

eeprom使用经验

3. 查证件:在写EEPROM 的底层驱动程序中,在执行写动作时,判断一下某些标志,有良名证的才能通过,否则,只好打回原籍(跳到复位地址)
4. 多买保险(3份最佳)以自救:对于重要的数据(如通信密码、参数设置等,这些部分信息量不大,我们要采用三次备份的手段。这些信息存放在三个不同的PAGE 内,最好PAGE 内的地址也不一样。在我们写这些数据时,要针对不同的地址写三次,而读时,对于三处读来的数据,如果全相同,没什么可说的了,如果有两个相同,一个不同,则使用大数判决,使用相同的那个值,并将这个数值写到不同的那个地址去。当然,如果三个值全不同,只好随便取一个(如第一个),再将其写入另两个地址中去。这种方法非常有效,因为一般误擦除不会是全部数据,而只是某一处而已,我们可以允许EEPROM 某单元被误擦除,只要读了一次,就恢复了。
串行EEPROM 应该是一种很可靠的设备,但在我的使用中,经常会出现数据出错的情况,毛主席老人家说:知己知比,方能百战不败!是什么原因呢?其实这种情况多发生在插拔电的情况下。让2. 是在掉电时,在电压降低到一定程度后到完全没电之间的一段时间内,在MCU与EEPROM 的读写信号线上出现非控制的快速随机电平,这些电平可能会组合出一些被EEPROM 认为合法的写命令,结果将EEPROM 中的值修改掉了;
对待敌人可不能手软,怎样扼杀他们在萌芽状态!看我的绝招:
1. 摆阔气:按Datasheet 上的时序,发现多数时候读写正确,但有时偶尔不对,这时可以降低读写的速度,多几个NOP,不要太小气吗?咱们度量(ROM)还是能容的下的!
2. 避风头:为防止读EEPROM 的过程中出现复位,我们可以在MCU 复位后200ms 内禁止读写EEPROM,因充电引起的复位抖动,一般在数十毫秒内,过了这段时间,再出现复位的可能性不大,

STC单片机EEPROM读写程序

STC单片机EEPROM读写程序

STC单片机EEPROM读写程序在单片机中,EEPROM(Electrically Erasable Programmable Read-Only Memory)是一种非易失性存储器,可以用于存储数据,即使在断电情况下,数据也会被保留。

因此,掌握STC单片机的EEPROM读写程序对于开发嵌入式系统非常重要。

一、EEPROM简介EEPROM是一种可重复擦写的存储器,可用于存储小量数据。

与Flash存储器相比,EEPROM具有更快的写入和擦除速度。

在STC单片机中,EEPROM的存储容量通常较小,一般在几个字节到几千字节之间。

二、EEPROM读操作在STC单片机中,进行EEPROM读操作需要按照以下步骤进行:1. 初始化I2C总线:STC单片机使用I2C总线进行EEPROM读写操作,因此需要先初始化I2C总线。

通过设置相关寄存器,设置I2C 总线的速度和地址。

2. 发送设备地址:确定要读取的EEPROM设备的地址,并发送到I2C总线。

3. 发送寄存器地址:确定要读取的EEPROM寄存器地址,并将其发送到I2C总线。

4. 发送读命令:向EEPROM发送读命令,以启动读操作。

5. 读取数据:从EEPROM中读取数据,并保存到变量中。

6. 结束读操作:完成读操作后,关闭I2C总线。

三、EEPROM写操作类似于读操作,进行EEPROM写操作也需要按照一定的步骤进行:1. 初始化I2C总线:同样地,首先需要初始化I2C总线。

2. 发送设备地址:确定要写入的EEPROM设备的地址,并发送到I2C总线。

3. 发送寄存器地址:确定要写入的EEPROM寄存器地址,并将其发送到I2C总线。

4. 发送写命令:向EEPROM发送写命令,以启动写操作。

5. 写入数据:将要写入EEPROM的数据发送到I2C总线。

6. 结束写操作:完成写操作后,关闭I2C总线。

四、注意事项在进行EEPROM读写操作时,需要注意以下几点:1. 确保正确的设备地址:要与EEPROM的地址匹配,否则无法进行有效的读写操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Stc单片机eeprom使用心得
STC单片机利用IAP技术实现了EEPROM功能,相比外置存储芯片而言,在操作上比较方便。

涉及STC单片机EEPROM操作的特殊功能寄存器有6个,地址分别是E2H、E3H、E4H、E5H、E6H和E7H。

在STC单片机使用手册中,作者分别将它们定义为:
一、IAP_DATA(E2H)
二、IAP_ADDRH(E3H)
三、IAP_ADDRL(E4H)
四、IAP_CMD(E5H)
五、IAP_TRIG(E6H)
六、IAP_CONTR(E7H)
本人认为,手册中给每个地址单元定义的英文词组太长,而且有点哆嗦,占的篇幅又大,感觉对正常阅读和理解产生了一定的干扰,反倒不好了解作者的意图了,还不如让使用者自己定义为好。

我自己对这些单元分别定义为DA T ADDRH ADDRL CMD TRIG CONTR。

一、DAT(E2H)从EEPROM中读取到的数据首先进入这里。

要把数据写入EEPROM中,也要把数据放到这个单元中。

也就是说,这个单元起到了中转站的作用,写入和读出都要通过这个单元。

二、ADDRH、ADDRL分别是EEPROM地址单元高8位和低8位。

如要把数据存储到1000H 单元中,那么在程序中,ADDRH的数值为10H,ADDRL的数值为00H。

三、CMD表示操作类型。

数值为1是读,数值为2是写,数值为3是擦除。

简单点说,就是“1读2写3擦除”。

四、CONTR寄存器,说明书上作了好多功能表述,但对于一般使用者来说,寄存器的前5位可以不作过多了解,只要掌握后3位意义就可以了。

一般理解为,选择好后3位的数值,为的是确保在不同数值晶振下正确读写擦除EEPROM。

考虑到TRIG这个寄存器的要求,一般使用时,可将前5位设置为10000,后3位根据不同晶振频率来确定(这个见使用手册)。

五、TRIG这个寄存器,看了好长时间手册才了解它的一般使用,对这个寄存器理解应当放到最后。

说明书是这样写的:为isp/iap操作时的命令模式寄存器。

在ispen(isp_contr.7)=1时,对isp_trig先写入46h,再写入b9h,isp/iap命令才会生效。

其实也可以这样理解,当选择好EEPROM地址单元,选择好操作类型,以及在写入状态时准备好写入数据后,先向该寄存器送入46H数据,之后再向该寄存器送入B9H数值。

EEPROM的读、写、擦除就完成了。

以上是本人对STC单片机的EEPROM使用的一些心得,若有不当或错误之处,请高手多多批评指正。

本人常用的STC_EEPROM基本操作程序
dat equ 0e2h
drh equ 0e3h
drl equ 0e4h
cmd equ 0e5h
trig equ 0e6h
contr equ 0e7h
;---------读取1个字节-------------------
read: mov drh,#10h ;设定存储单元地址高四位这里设1000h,也可选用其他单元
mov drl,#00h ;设定存储单元地址低四位
mov cmd,#01h ;设定读操作
mov contr,#84h ;设定操作时间
mov trig,#046h ;准备触发
mov trig,#0b9h ;触发
mov r0,dat ;读数据。

r0为读出的数据,也可以选用其他单元
nop
nop
ret
;---------写入1个字节-------------------
write: mov dat,r0 ;写数据。

r0中为准备写入的数据,也可以选用其他单元
mov drh,#10h ;设定存储单元地址高四位这里设1000h,也可选用其他单元
mov drl,#00h ;设定存储单元地址低四位
mov cmd,#02h ;设定写操作
mov contr,#84h ;设定操作时间
mov trig,#046h ;准备触发
mov trig,#0b9h ;触发
nop
nop
ret
;---------擦除1个字节-------------------
clear: mov drh,#10h ;设定存储单元地址高四位这里设1000h,也可选用其他单元可组成子程序,进行调用
mov drl,#00h ;设定存储单元地址低四位
mov cmd,#03h ;设定擦除操作
mov contr,#84h ;设定操作时间
mov trig,#046h ;准备触发
mov trig,#0b9h ;触发
nop
nop
ret
;=========关闭EEPROM====================
off: mov drh,#00h
mov drl,#00h
mov cmd,#00h
mov contr,#00h
mov trig,#00h
ret。

相关文档
最新文档