找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 13874|回复: 8
收起左侧

stc15系列STC内部EEPROM的读写

  [复制链接]
ID:140456 发表于 2016-9-25 22:53 | 显示全部楼层 |阅读模式
STC单片机利用IAP技术实现了EEPROM功能,相比外置存储芯片而言,在操作上比较方便。 涉及STC单片机EEPROM操作的特殊功能寄存器有6个,地址分别是E2HE3HE4HE5HE6HE7H。在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

STC内部EEPROM的读写.docx

15.62 KB, 下载次数: 68, 下载积分: 黑币 -5

eeprom

评分

参与人数 2黑币 +75 收起 理由
豆子十三 + 5 好经验。
admin + 70 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:72088 发表于 2016-9-26 13:04 | 显示全部楼层
好东西,支持啊
回复

使用道具 举报

ID:456306 发表于 2019-4-13 17:31 | 显示全部楼层
好棒,程序加一段C的会更好啦
回复

使用道具 举报

ID:343304 发表于 2020-1-16 11:08 | 显示全部楼层
好经验,谢谢分享,网上能找到比较详细的了。
回复

使用道具 举报

ID:97678 发表于 2020-1-18 10:42 | 显示全部楼层
有没有C语言的例程?
看不懂
回复

使用道具 举报

ID:200118 发表于 2020-2-2 18:25 | 显示全部楼层
好资料,谢谢分享。
回复

使用道具 举报

ID:469264 发表于 2020-5-14 19:29 | 显示全部楼层
好资料,谢谢分享;如果是C就好了
回复

使用道具 举报

ID:638887 发表于 2020-12-4 22:32 | 显示全部楼层
太棒了,STC手册严谨(生诲难懂),大师一席话,如雷灌耳,抓住重点,通俗易懂,通透!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表