以51单片机为例:其存储器分为三块。
1、程序存储器:可寻址空间64K,用于存放用户的程序,CPU取指令只能在此空间。
2、外部分扩展存储器:可寻址空间64K,用于存放数据,CPU无法在此空间取指令。
3、内部分RAM:256字节。这里略去功能介绍。
问题来了:如果用户弄了2K的EEPROM,如何让它能被CPU寻址(访问)到呢?
有两种方案:
1、程序一般用不了64K的全部空间,于是在【程序存储器】中挖出2K的空间,将它做成EEPROM。这是STC一种做法。例如:IAP15Fxxxx型号芯片。
由于程序存储器通常只能在烧录时写入,而EEPROM却需要在程序运行中,由程序读、写或擦除,为此STC又特意开发了一套写、擦它的方式。但读取仍可以用通用的指令进行,如:MOVC A, @A+DPTR。
这种方案好处是:无需单独再做EEPROM,直接利用【程序存储器】的FLASH空间当作EEPROM用,且大小空间比较自由灵活,用不完的FALSH空间可以随便用。
这里有一个风险:比如:0000-11FFH放的是程序,如果你把此区域当作是EEPROM,对它进行写、擦操作,则程序就被破坏掉了。所以这个方案需要你知道程度占多长?哪些区域是程序用不到的地方。
不过风险中,也有一个重要的好处:可以用程序,修改自己的程序!例如,程序在运行中就能进行自我升级:擦除原来的程序重新写入新的程序!这是高级用法,就不在此介绍了。
2、在【外部分扩展存储器】中挖出2K的空间,将它做成EEPROM,这是常用的方式,不多介绍了。
楼主用C语言写程序,两种方式无所谓好坏之分。但必须知道EEPROM的数据是在哪个区域,因为你在定义一个EEPROM中的数据变量时,需要用到。
如果不考虑在线或远程升级程序,建议用第2种方式的EEPROM芯片,需要考虑的问题少,不易出错。
|