標(biāo)題: stc15系列STC內(nèi)部EEPROM的讀寫 [打印本頁]

作者: 老麥    時(shí)間: 2016-9-25 22:53
標(biāo)題: stc15系列STC內(nèi)部EEPROM的讀寫
STC單片機(jī)利用IAP技術(shù)實(shí)現(xiàn)了EEPROM功能,相比外置存儲(chǔ)芯片而言,在操作上比較方便。 涉及STC單片機(jī)EEPROM操作的特殊功能寄存器有6個(gè),地址分別是E2HE3H、E4HE5H、E6HE7H。在STC單片機(jī)使用手冊(cè)中,作者分別將它們定義為:
一、IAP_DATA  E2H
二、IAP_ADDRH  E3H
三、IAP_ADDRL  E4H
四、IAP_CMD  E5H
五、IAP_TRIG  E6H
六、IAP_CONTR  E7H
本人認(rèn)為,手冊(cè)中給每個(gè)地址單元定義的英文詞組太長,而且有點(diǎn)哆嗦,占的篇幅又大,感覺對(duì)正常閱讀和理解產(chǎn)生了一定的干擾,反倒不好了解作者的意圖了,還不如讓使用者自己定義為好。我自己對(duì)這些單元分別定義為
DAT  
ADDRH
ADDRL
CMD  
TRIG  
CONTR。
一、DAT(E2H) 從EEPROM中讀取到的數(shù)據(jù)首先進(jìn)入這里。要把數(shù)據(jù)寫入EEPROM中,也要把數(shù)據(jù)放到這個(gè)單元中。也就是說,這個(gè)單元起到了中轉(zhuǎn)站的作用,寫入和讀出都要通過這個(gè)單元。
二、ADDRH、ADDRL分別是EEPROM地址單元高8位和低8位。如要把數(shù)據(jù)存儲(chǔ)到1000H單元中,那么在程序中,ADDRH的數(shù)值為10H,ADDRL的數(shù)值為00H。  
三、CMD表示操作類型。數(shù)值為1是讀,數(shù)值為2是寫,數(shù)值為3是擦除。簡單點(diǎn)說,就是“1讀2寫3擦除”。  
四、CONTR寄存器,說明書上作了好多功能表述,但對(duì)于一般使用者來說,寄存器的前5位可以不作過多了解,只要掌握后3位意義就可以了。一般理解為,選擇好后3位的數(shù)值,為的是確保在不同數(shù)值晶振下正確讀寫擦除EEPROM?紤]到TRIG這個(gè)寄存器的要求,一般使用時(shí),可將前5位設(shè)置為10000,后3位根據(jù)不同晶振頻率來確定(這個(gè)見使用手冊(cè))。五、TRIG這個(gè)寄存器,看了好長時(shí)間手冊(cè)才了解它的一般使用,對(duì)這個(gè)寄存器理解應(yīng)當(dāng)放到最后。說明書是這樣寫的:為isp/iap操作時(shí)的命令模式寄存器。在ispen(isp_contr.7)=1時(shí),對(duì)isp_trig先寫入46h,再寫入b9h,isp/iap命令才會(huì)生效。  其實(shí)也可以這樣理解,當(dāng)選擇好EEPROM地址單元,選擇好操作類型,以及在寫入狀態(tài)時(shí)準(zhǔn)備好寫入數(shù)據(jù)后,先向該寄存器送入46H數(shù)據(jù),之后再向該寄存器送入B9H數(shù)值。EEPROM的讀、寫、擦除就完成了。  以上是本人對(duì)STC單片機(jī)的EEPROM使用的一些心得,若有不當(dāng)或錯(cuò)誤之處,請(qǐng)高手多多批評(píng)指正
本人常用的STC_EEPROM基本操作程序                           
dat     equ     0e2h               
drh     equ     0e3h               
drl      equ     0e4h                    
cmd    equ     0e5h               
trig     equ     0e6h               
contr    equ     0e7h
;---------讀取1個(gè)字節(jié)-------------------     
read:   mov    drh,#10h    ;設(shè)定存儲(chǔ)單元地址高四位 這里設(shè)1000h,也可選用其他單元              mov     drl,#00h     ;設(shè)定存儲(chǔ)單元地址低四位     
mov     cmd,#01h   ;設(shè)定讀操作            
mov     contr,#84h 設(shè)定操作時(shí)間               
mov     trig,#046h  ;準(zhǔn)備觸發(fā)         
mov     trig,#0b9h  ;觸發(fā)                 
mov    r0,dat  ;讀數(shù)據(jù)。r0為讀出的數(shù)據(jù),也可以選用其他單元               nop           
    nop                        
        ret
;---------寫入1個(gè)字節(jié)-------------------                 
write:  mov dat,r0  ;寫數(shù)據(jù)。 r0中為準(zhǔn)備寫入的數(shù)據(jù),也可以選用其他單元                   mov   drh,#10h ;設(shè)定存儲(chǔ)單元地址高四位 這里設(shè)1000h,也可選用其他單元              mov   drl,#00h;設(shè)定存儲(chǔ)單元地址低四位                 
mov     cmd,#02h  ;設(shè)定寫操作         
mov     contr,#84h 設(shè)定操作時(shí)間         
mov     trig,#046h   ;準(zhǔn)備觸發(fā)            
mov     trig,#0b9h   ;觸發(fā)
nop
nop
ret
;---------擦除1個(gè)字節(jié)-------------------                 
clear: mov  drh,#10h  ;設(shè)定存儲(chǔ)單元地址高四位這里設(shè)1000h,也可選用其他單元可組成子程序,進(jìn)行調(diào)用            
mov  drl,#00h   ;設(shè)定存儲(chǔ)單元地址低四位                  
mov  cmd,#03h ;設(shè)定擦除操作                 
mov  contr,#84h 設(shè)定操作時(shí)間            
mov   trig,#046h 準(zhǔn)備觸發(fā)                  
mov trig,#0b9h 觸發(fā)                  
nop                                 
nop                                 
ret
;=========關(guān)閉EEPROM====================               
off:  mov drh,#00h                          
mov   drl,#00h                          
mov    cmd,#00h                           
mov   contr,#00h                           
mov    trig,#00h                  
ret

STC內(nèi)部EEPROM的讀寫.docx

15.62 KB, 下載次數(shù): 68, 下載積分: 黑幣 -5

eeprom


作者: 新鄉(xiāng)家電維修    時(shí)間: 2016-9-26 13:04
好東西,支持啊
作者: 15621048596    時(shí)間: 2019-4-13 17:31
好棒,程序加一段C的會(huì)更好啦
作者: howelee    時(shí)間: 2020-1-16 11:08
好經(jīng)驗(yàn),謝謝分享,網(wǎng)上能找到比較詳細(xì)的了。
作者: jovew    時(shí)間: 2020-1-18 10:42
有沒有C語言的例程?
看不懂
作者: XDDZ1013    時(shí)間: 2020-2-2 18:25
好資料,謝謝分享。
作者: JackyLiu123    時(shí)間: 2020-5-14 19:29
好資料,謝謝分享;如果是C就好了
作者: 踏雪無痕做什么    時(shí)間: 2020-12-4 22:32
太棒了,STC手冊(cè)嚴(yán)謹(jǐn)(生誨難懂),大師一席話,如雷灌耳,抓住重點(diǎn),通俗易懂,通透!。




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1