當單片機內(nèi)部程序存儲器容量不足時,就需要進行程序存儲器的擴展。單片機的程序存儲器擴展使用只讀存儲器芯片。只讀存儲器rom中的信息一旦寫入之后就不能隨意更改,即不能在程序運行過程中寫入新的內(nèi)容,而只能讀存儲單元內(nèi)容。因為掉電后rom中存放的數(shù)據(jù)不會丟失,所以rom適宜存放程序、常數(shù)、表格等。存儲器擴展的核心問題是存儲器的編址問題。所謂編址就是給存儲單元分配地址。由于存儲器通常由多片芯片組成,因此存儲器的編址分為兩個層次,即存儲器芯片的選擇和存儲器芯片內(nèi)部存儲單元的選擇。
一、存儲器編址技術(shù)
編址就是給存儲單元分配地址。使用系統(tǒng)提供的地址線,通過適當?shù)倪B接,使得一個地址唯一對應存儲器中一個存儲單元。存儲器芯片的選擇有兩種方法:
1.線選法----直接以系統(tǒng)的地址作為存儲芯片的片選信號。優(yōu)點是簡單不需增加額外電路,適用于小規(guī)模單片機系統(tǒng)的存儲器擴展;缺點是存儲空間不連續(xù)。
2.譯碼法---使用譯碼器對系統(tǒng)的高位地址進行譯碼,以其譯碼輸出作為存儲芯片的片選信號。優(yōu)點是存儲空間連續(xù),適用于大容量多芯片存儲器擴展;缺點是硬件設計需要增加譯碼器。
3.譯碼器
譯碼法時需要采用譯碼芯片,常見譯碼芯片有:74ls139(雙2-4譯碼器)和74ls138(3-8譯碼器)等,它們的cmos型芯片分別是74hc139和74hc138。74ls138如圖1所示。
圖1 74ls138芯片
74ls138的真值表說明了其輸入輸出以及控制信號的關系,如圖2所示。
圖2 74ls138的真值表
二、eeprom接口設計
以2764為例來說明存儲器的擴展接口設計方法。2764是一種8k×8位的紫外線擦除電可編程只讀存儲器,單一+5v供電,工作電流為100ma,維持電流為50ma,讀出時間最大為250ns。2764為雙列直插式28引腳的標準芯片,容量為8k×8位。其引腳見圖3。
2764在使用時,只能將其所存儲的內(nèi)容讀出。即首先送出要讀出的單元地址,然后使和均有效(低電平),則在芯片的d0~d7數(shù)據(jù)線上就可以輸出要讀出的內(nèi)容。其過程的時序關系如圖4所示。
圖3 2764引腳圖 圖4 2764時序圖
以下兩個例子均采用2764,分別采用線選法和譯碼法來進行程序存儲器擴展。
例1.采用線選法,使用兩片2764,一共構(gòu)成8k×2=16k的有效地址。
解:2764有13根地址線,分別由p0.0~p0.7、p2.0~p2.4提供,系統(tǒng)的p2.5~p2.7沒有用,采用2片2764構(gòu)成系統(tǒng),則可以使用p2.5~p2.7中的任何2根作為線選線,在本設計中采用p2.5和p2.6作為線選線,則可分析得到這2塊芯片的基本地址范圍。
假設未用地址線取0,則2764(1)的基本地址范圍:4000h~5fffh。
假設未用地址線取0,則2764(2)的基本地址范圍:2000h~3fffh。
圖5 線選法擴展
例2.用eprom2764擴展生成24kb的程序連續(xù)存儲空間,采用74ls138譯碼,要求該24kb的地址空間從8000h開始編碼。
解:由于1塊2764芯片是8kb,所以要生成24kb的程序存儲空間需要3塊2764芯片;由于生成的是連續(xù)的存儲空間,所以采用譯碼法。地址空間要求從8000h開始編碼,則
2764(1)的基本地址范圍:8000h~9fffh:
2764(2)的基本地址范圍:a000h~bfffh:
2764(3)的基本地址范圍:c000h~dfffh:
觀察3塊芯片的高位地址線a15~a13,并考慮74ls138譯碼器的輸入與輸出之間的關系(見圖2)可知,3塊2764芯片應依次接y4、y5、y6輸出端。擴展電路圖見圖6。
圖6 譯碼法擴展