这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 单片机EEPROM的使用

共2条 1/1 1 跳转至

单片机EEPROM的使用

助工
2014-10-10 15:04:34     打赏

EEPROM(Electrically Erasable PRogrammable Read Only Memory)叫做可电改写只读存储器,可用电的方法写入和清除其内容,其编程电压和清除电压均与计算机CPU的工作电压相同,无须另加电压。

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 

院士
2014-10-10 15:57:15     打赏
2楼
   楼主介绍的这个,只STC单片机中使用的吗,在51单片机中可以借鉴吗?因我刚学51单片机不久,对这个还不是很清楚。

共2条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]