51 單片機的數(shù)據總線為(wèi)P0 口,P0 口為(wèi)雙向數(shù)據通(tōng)道(dào),CPU 從P0 口送出和(hé)讀回數(shù)據。
為(wèi)了節約芯片引腳,采用P0 口複用方式,除了作(zuò)為(wèi)數(shù)據總線外,在ALE 信号時(shí)序匹配下,通(tōng)過外置的數(shù)據鎖存器(qì),在總線訪問前半周期從P0口送出低(dī)8位地址,後半周期從P0 口送出8 位數(shù)據。
51 系列單片機的控制(zhì)總線包括讀控制(zhì)信号P3.7 和(hé)寫控制(zhì)信号P3.6 等,二者分别作(zuò)為(wèi)總線模式下數(shù)據讀和(hé)數(shù)據寫的使能信号。
從圖2 中可(kě)以看出,完成一次總線( 讀寫) 操作(zuò)周期為(wèi)T,P0 口分時(shí)複用,在T0 期間(jiān),P0 口送出低(dī)8 位地址,在ALE 的下降沿完成數(shù)據鎖存,送出低(dī)8位地址信号。在T1 期間(jiān),P0 口作(zuò)為(wèi)數(shù)據總線使用,送出或讀入數(shù)據,數(shù)據的讀寫操作(zuò)在讀、寫控制(zhì)信号的低(dī)電(diàn)平期間(jiān)完成。
需要注意的是,在控制(zhì)信号( 讀、寫信号) 有(yǒu)效期間(jiān),P2 口送出高(gāo)8位地址,配合數(shù)據鎖存器(qì)輸出的低(dī)8 位地址,實現16 位地址總線,即64kB 範圍的內(nèi)的尋址。
由于CPU不可(kě)能同時(shí)執行(xíng)讀和(hé)寫操作(zuò),所以讀、寫信号不可(kě)能同時(shí)有(yǒu)效。
四、常見單片機編址電(diàn)路
1、簡單地址擴展
51 單片機的P2 口可(kě)以直接作(zuò)為(wèi)高(gāo)8位地址總線使用,在一些(xiē)簡單系統電(diàn)路中,常使用P2口直接編址驅動。
下面以使用數(shù)據緩沖器(qì)74LS273 驅動數(shù)碼顯示為(wèi)例,分析P2 口編址驅動的靜态數(shù)碼顯示電(diàn)路的設計(jì)。
一位LED 數(shù)碼顯示單元電(diàn)路如圖3 所示。
WR 與A8( P2.0) 相或提供74LS273的時(shí)鍾信号,當執行(xíng)“MOVX @DPTR,A”指令時(shí),地址信息由DPTR 寄存器(qì)确定,會(huì)出現有(yǒu)效的寫信号WR,隻有(yǒu)當地址A8 為(wèi)滿足“0”時(shí),寫信号才可(kě)以作(zuò)為(wèi)74LS273 的時(shí)鍾信号輸入,完成數(shù)據鎖存。
P2 口為(wèi)A8~A15 的8 位地址線,很(hěn)容易擴展到8 隻LED 數(shù)碼管,WR 信号分别與A8~A15 按或關系連接,每位地址線均為(wèi)低(dī)電(diàn)平有(yǒu)效,即可(kě)實現8 個(gè)有(yǒu)效地址。
該方案電(diàn)路簡單,但(dàn)有(yǒu)效地址數(shù)太少(shǎo),不适用于複雜系統設計(jì)。
2、低(dī)8 位地址鎖存
通(tōng)常的設計(jì)電(diàn)路是使用8D 鎖存器(qì)74LS373 實現地址鎖存,74HC573 與之邏輯功能相同,隻是引腳布局不一樣,使用74HC573 布線更容易。
74LS373 真值表如圖4所示。
在輸出允許OE 為(wèi)L、控制(zhì)使能LE 為(wèi)H 時(shí),輸出為(wèi)跟随狀态;
OE 為(wèi)L、LE 為(wèi)L 時(shí),輸出為(wèi)保持狀态。
地址鎖存電(diàn)路如圖5 所示。OE 接地,LE 接單片機的ALE腳将産生(shēng)滿足時(shí)序的低(dī)8 位地址信号。
執行(xíng)以下三條指令會(huì)得(de)到如圖6所示的時(shí)序圖。
MOV DPTR,# 0FF55H; 低(dī)8 位地址為(wèi)55H
MOV A,# 0AAH; 待發送數(shù)據0AAH→A( 55H 取反)
MOVX,@DPTR,A; A 中的0AAH送地址為(wèi)0FF55H 的對象中會(huì)。
從圖6 中可(kě)以看出,P0 口先送55H,在ALE 下降沿實現地址鎖存,随後送出數(shù)據0AAH,在WR 有(yǒu)效( 低(dī)電(diàn)平) 期間(jiān)鎖存器(qì)輸出低(dī)8 位地址55H,P0 口送出數(shù)據0AAH。
3、帶譯碼器(qì)的複雜地址接口電(diàn)路
理(lǐ)論上(shàng)高(gāo)8 位地址線可(kě)以産生(shēng)256 個(gè)有(yǒu)效地址,如何實現地址“擴展”呢? 地址擴展準确描述是地址譯碼,例如3 根地址線可(kě)以譯碼成8 個(gè)地址,4根譯碼成16 個(gè)有(yǒu)效地址。這裏選擇3-8 譯碼器(qì)實現地址譯碼,電(diàn)路圖以及對應的編址如表1 所示。
五、單片機總線編址電(diàn)路實例
帶總線擴展接口的單片機系統,包括外部32k RAM 擴展、LCD1602 接口、輸入輸出口。
帶編址擴展的單片機最小(xiǎo)系統電(diàn)路如圖7 所示。
使用74HC573 鎖存低(dī)8 位地址;74138 實現8 個(gè)地址擴展,74138 的A、B、C 接A8 ~A10,E1 接A15, E2、E3 接地常有(yǒu)效,得(de)到0F8FFH 到0FFFFH8 個(gè)地址( 無關位用1 表示) 或者8000H 到8700H( 無關位用0 表示) 。
32k RAM 接口如圖8 所示。
D0~D7 接數(shù)據總線P0 口,地址線A0~A14接單片機地址總線低(dī)15 位,單片機地址線A15 接RAM 片選信号,低(dī)電(diàn)平有(yǒu)效,這樣RAM 地址分配從0000H 到7FFFH,與74138 譯碼地址不沖突。
LCD1602 接口電(diàn)路如圖9 所示。
RS、RW 分别接A12、A13,使能信号編址為(wèi)Y7,這樣LCD 的四個(gè)驅動地址( 數(shù)據讀寫和(hé)命令讀寫) 為(wèi)0CFFFH 到0FFFFH ( 無關位為(wèi)1) 或者8700H 到0B700H( 無關位為(wèi)0)。
有(yǒu)些(xiē)時(shí)候單片機引腳不夠用,還(hái)要進行(xíng)擴展,輸入口擴展電(diàn)路如圖10 所示。
利用74HC573( 74LS373) 的高(gāo)阻态功能,将其輸出Q0~Q7 接P0 口,在滿足總線地址讀操作(zuò)中,可(kě)以把輸入InPORT的數(shù)據讀入單片機的累加器(qì),地址為(wèi)0F8FFH 或8000H。
輸出口擴展電(diàn)路如圖11 所示。
利用74LS273 數(shù)據鎖存功能,在滿足總線地址寫操作(zuò)中,可(kě)以把單片機累加器(qì)裏的數(shù)據寫入273 鎖存輸出,地址為(wèi)0F8FFH 或8000H。由于所用控制(zhì)總線不同,可(kě)以和(hé)輸入共用地址。
六、結束語
總線擴展是設計(jì)單片機控制(zhì)電(diàn)路必須掌握的技(jì)術(shù),大(dà)量的特殊功能IC都支持總線接口, 如ADC0809,TLC7528,DDS 器(qì)件AD9851 等。
總線接口的要點就是在嚴格的控制(zhì)時(shí)序下,總線被分時(shí)複用,以實現複雜系統設計(jì)。