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