历史上的今天
今天是:2025年01月18日(星期六)
2020年01月18日 | stc15系列STC内部EEPROM的读写
2020-01-18 来源:51hei
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
上一篇:单片机红外发射程序与原理详解
下一篇:4位数码管流水灯时钟程序
史海拾趣
|
用verilog写可综合代码,综合后发现功能不对了。想请教一下: 1 可综合的verilog代码中,可以有不同的敏感信号吗?比如可以有多个always语句,有的敏感列表里是时钟上升沿有的是时钟下降沿吗?可以这样吗: always @(posedge clk) & ...… 查看全部问答> |
|
vxworks下socket connect时出现ENOTSUP 是何缘故? 本机是客户端通过socket周期发送数据包,一包也就1K左右 ,一个周期内发的少的话都正常,发多了就会导致连接断开,再重连的时候就出现ENOTSUP 错误,错误号35。然后就再也无法连上server了。 也做过一些setsockopt操作,但之前都没有问题。 网上 ...… 查看全部问答> |
|
同样的数据包! PC和LED屏通讯正常! mini2440串口和LED屏通讯没反应! 然后把mini2440和PC对接,看串口数据,没有问题是这个数据包。 难道mini2440的串口输出的信号和PC的不一样??????… 查看全部问答> |
|
WINCE中编写了一个基于SIP的输入法该如何调整软键盘界面的大小 WINCE中编写了一个基于SIP的输入法,SIP默认的输入法面板太小,该如何调整软键盘界面的大小?谢谢啊,第一次写书法呵呵。… 查看全部问答> |
|
电子信息工程专业就业形势分析近几年来,IT、信息与电子类的毕业生在市场供求关系上普遍还是保持稳定的状况,社会需求量相对乐观。按照2005年毕业生就业情况统计,信息产业、IT、电子类的毕业生在各理工类中就业率比较靠前。在今后的一段时间内,对 ...… 查看全部问答> |




