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