stc15系列STC内部EEPROM的读写

2020-01-18来源: 51hei关键字:stc15系列  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)


本人认为,手册中给每个地址单元定义的英文词组太长,而且有点哆嗦,占的篇幅又大,感觉对正常阅读和理解产生了一定的干扰,反倒不好了解作者的意图了,还不如让使用者自己定义为好。我自己对这些单元分别定义为

DAT  

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

关键字:stc15系列  STC  内部EEPROM  读写 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic486053.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:单片机红外发射程序与原理详解
下一篇:4位数码管流水灯时钟程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

基于STC15w单片机系列 自带的AD转换程序
15W系列是目前51单片机里面可用资源较多的处理器。一般的设计都可以用,本次分享下利用单片机自带的AD转换座一个数字电压表。显示用的LCD1602单片机源程序如下:#include<15w.H>#include<math.h>#include <string.h>#include <stdio.h>#include<intrins.h>#define uchar unsigned char#define uint unsigned inttypedef unsigned int WORD;#define ADC_POWER   0x80  &n
发表于 2020-02-17
STC15系列单片机ADC函数库的20200208优化版
参考:STC官网函数库优点:初始化P1任何端口后,main函数只需要循环调用ADC_Convert()函数即可循环完成所有配置的ADC端口模拟量采集。ADC转换结果放置在Dpj_ZongCunChu[]数组中,用于其他功能取用。目的:免费共享,互相提升。先在ADC.c文件中写入以下内容:#define _ADC_C_                //预定义名称用于ADC.h中#include        "all.h"         
发表于 2020-02-11
STC15系列电压测试+LCD12864显示
最近使用15做电压测试,顺便使用下12864显示,程序如下:    #include <STC15F2K60S2.H>    #include <intrins.h>    #include <stdio.h>        #define uchar unsigned char    #define uint  unsigned int    #define ulint unsigned long int 
发表于 2020-01-29
(51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动
最近又看了一下关于stc单片机的知识,感觉在使用中EEPROM是个经常用到的东西,特地学习了一下,给大家分享一下心得,如有不足,多多包涵,废话不多说,一图解千言,先上图:/*--------------------------------------------------------------分界线-----------------------------------------------------------------------------------*/main_eepprom.c 1 #include <STC89C5xRC.H> 2  3 #ifdef
发表于 2020-01-07
(51基础篇) - 021 STC89C51系列单片机 内部EEPROM 驱动
STC15F2系列单片机UART1使用定时器1做波特率发生器
;        AUXR |= AUXR_T2x12        AUXR |= AUXR_S1ST2;//使用定时器2 作为串口1的波特率发生器        ES = 1;    EA = 1;        uart1_SendString("rn stc15f2k08s uart1 test rn");        while
发表于 2019-10-30
STC单片机内置EEPROM读取与保存 函数调用 .c和.h文件
);Save_Flash_Message(ks_Addr,Temp_Buf, 3);//保存    函数是 :void Save_Flash_Message(unsigned int Addr,unsigned char *Buf,unsigned int Len);现在是  无法保存  调取的也不对//以下为.h文件//使用单片机内部的Flash,模拟EEPROM使用//STC15W4K48S4 单片机,可以使用IAP命令擦写内部Flash//起始地址 0X0000 结束 0X27FF  其中,512Byte一个扇区//一共20个扇区  一个扇区可以存储一组参数
发表于 2020-02-16
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved