51單片機訪問大容量存儲器的實現(xiàn)
1 引言
MCS-51系列單片機有著優(yōu)越的性價比,因此應(yīng)用面寬,使用量也非常大;然而它只有16位地址線,最大能訪問的存儲空間為64K,且擴展接口與存儲器統(tǒng)一編址,擴展接口會占用大量的地址空間,致使該系列單片機在數(shù)據(jù)量大的數(shù)據(jù)采集系統(tǒng)中,存儲空間明顯不足。
筆者最近在開發(fā)一數(shù)據(jù)采集系統(tǒng)時,經(jīng)分析、探索,找到了解決的辦法。
2 使用大容量存儲器的原理
2.1 使擴展接口不占用單片機的存儲地址空間
由于MCS-51單片機的擴展接口與存儲器統(tǒng)一編址,采用常規(guī)的方法擴展接口時會占用大量的地址空間,而多數(shù)應(yīng)用系統(tǒng)均會要求擴展接口(本例有七段LED的段輸出口、位輸出口、鍵盤口各一個),為此,使擴展接口不占用單片機的存儲地址空間對于要求大容量數(shù)據(jù)存儲器的系統(tǒng)是必要的。
如圖1,用P1口的一位,只要確保寫數(shù)據(jù)到顯示的段口時,使用一空余(或?qū)iT預(yù)留)的地址(如0000H),即可使擴展接口不占用單片機的存儲地址空間且不會相互干擾、發(fā)生沖突,同時還可保證有足夠的響應(yīng)速度。
2.2 外部數(shù)據(jù)存儲采用大容量存貯芯片,分段使用
如圖示,MCS-51的16位地址線作為存儲芯片的低位地址,可訪問64K的存儲空間(作為一段);再用P1口的D1、D0位作為存儲芯片的高位地址(段地址),則可把存儲器分為4段,最大訪問能力可達256K(見下表),若使用更多的位,則訪問能力可更大。編程時只要確保高位地址(A16~A19)在訪問存儲芯片的指令執(zhí)行前確定,即可實現(xiàn)存儲芯片全部空間的訪問。
3 編程實現(xiàn)
3.1 訪問擴展接口
...
CLR P1.7
MOV DPTR,#0000H ?。粚iT預(yù)留的一個地址MOV A,?。ATA1
MOVX ?。繢PTR,A ;數(shù)據(jù)輸出到顯示的段口SETB P1.7
MOV A,#DATA2MOVX@DPTR,A ??;數(shù)據(jù)輸出到顯示的位口
...
SETB P1.7
MOV DPTR,#0000H ??;專門預(yù)留的一個單 元地址
MOVX A,@DPTR ?。蛔x鍵盤口數(shù)據(jù)到ACC
...
3.2 訪問存儲器
程序中要訪問存儲器時,只需按如下順序編寫程序即可:設(shè)定片選(CLR P1.7);設(shè)定存儲器的段位置;用MOVX讀寫存儲器
例:
...
CLR P3.0 ?。皇勾鎯π酒钠x有效CLR P1.0
CLR P1.1 ??;選取0FFFFH~00000H存儲區(qū)間MO DPTR,#ADDR1
MOV A,#DATA1 ??;數(shù)據(jù)寫到ADDR1單元MOVX@DPTR,AMOV DPTR,#ADDR2
MOVX A,@DPTR ;讀ADDR2單元的數(shù)據(jù)到A
4 結(jié)束語
使用本方法可輕易地為MCS-51單片機擴展大容量的數(shù)據(jù)存儲器,這對于數(shù)據(jù)量大的數(shù)據(jù)采集系統(tǒng)有著非常大的意義。
評論