|
以51單片機(jī)為例:其存儲器分為三塊。
1、程序存儲器:可尋址空間64K,用于存放用戶的程序,CPU取指令只能在此空間。
2、外部分?jǐn)U展存儲器:可尋址空間64K,用于存放數(shù)據(jù),CPU無法在此空間取指令。
3、內(nèi)部分RAM:256字節(jié)。這里略去功能介紹。
問題來了:如果用戶弄了2K的EEPROM,如何讓它能被CPU尋址(訪問)到呢?
有兩種方案:
1、程序一般用不了64K的全部空間,于是在【程序存儲器】中挖出2K的空間,將它做成EEPROM。這是STC一種做法。例如:IAP15Fxxxx型號芯片。
由于程序存儲器通常只能在燒錄時寫入,而EEPROM卻需要在程序運(yùn)行中,由程序讀、寫或擦除,為此STC又特意開發(fā)了一套寫、擦它的方式。但讀取仍可以用通用的指令進(jìn)行,如:MOVC A, @A+DPTR。
這種方案好處是:無需單獨(dú)再做EEPROM,直接利用【程序存儲器】的FLASH空間當(dāng)作EEPROM用,且大小空間比較自由靈活,用不完的FALSH空間可以隨便用。
這里有一個風(fēng)險:比如:0000-11FFH放的是程序,如果你把此區(qū)域當(dāng)作是EEPROM,對它進(jìn)行寫、擦操作,則程序就被破壞掉了。所以這個方案需要你知道程度占多長?哪些區(qū)域是程序用不到的地方。
不過風(fēng)險中,也有一個重要的好處:可以用程序,修改自己的程序!例如,程序在運(yùn)行中就能進(jìn)行自我升級:擦除原來的程序重新寫入新的程序!這是高級用法,就不在此介紹了。
2、在【外部分?jǐn)U展存儲器】中挖出2K的空間,將它做成EEPROM,這是常用的方式,不多介紹了。
樓主用C語言寫程序,兩種方式無所謂好壞之分。但必須知道EEPROM的數(shù)據(jù)是在哪個區(qū)域,因?yàn)槟阍诙x一個EEPROM中的數(shù)據(jù)變量時,需要用到。
如果不考慮在線或遠(yuǎn)程升級程序,建議用第2種方式的EEPROM芯片,需要考慮的問題少,不易出錯。
|
|