在AT89S51單片機(jī)應(yīng)用系統(tǒng)中,有些場合需要降低成本、縮小體積,這時采用TTL電路、CMOS電路鎖存器或三態(tài)門電路也可構(gòu)成各種類型的簡單輸入/輸出口。通常這種I/O都是通過PO口擴(kuò)展。由于PO口只能分時復(fù)用,故構(gòu)成輸出口時,接丑一芯片應(yīng)具有鎖存功能;構(gòu)成輸入口時,要求接口芯片應(yīng)能三態(tài)緩沖或鎖存選通,數(shù)據(jù)的輸入、輸出由單片機(jī)的讀/寫信號控制。
下圖所示為一個利用74LS244和74LS273芯片,將PO口擴(kuò)展成簡單的輸入/輸出口的電路。74LS244和74LS273的工作受AT89S51單片機(jī)的P2.O、RD、WR 3條控制線控制。74LS244是緩沖驅(qū)動器,作為擴(kuò)展輸入口,它的8個輸入端分別接8個按鈕開關(guān)。74LS273是8D鎖存器擴(kuò)展輸出口,輸出端接8個LED發(fā)光二極管,以顯示8個按鈕開關(guān)狀態(tài)。當(dāng)某條輸人口線的按鈕開關(guān)按下時,該輸入口線為低電平,讀入單片機(jī)后,其相應(yīng)位為0,然后再將口線的狀態(tài)經(jīng)74LS273輸出,某位低電平時二極管發(fā)光,從而顯示出按下的按鈕開關(guān)的位置。
該電路的工作原理如下:
當(dāng)P2.0=0,RD(的反)=0(WR(的反)=l)時,選中74LS244芯片,此時若無按鈕開關(guān)按下,輸入全為高電平。當(dāng)某開關(guān)按下時則對應(yīng)位輸入為0,74LS244的輸入端不全為1,其輸入狀態(tài)通過Po口數(shù)據(jù)線被讀入AT89S51單片機(jī)片內(nèi)。
當(dāng)P2.0=0,WR(的反)=0(RD(的反)=1)時,選中74LS273芯片,CPU通過PO口輸出數(shù)據(jù)鎖存到74LS273,74LS273的輸出端低電平位對應(yīng)的LED發(fā)光二極管點(diǎn)亮。
總之,在圖9-20中只要保證P2.0為0,其他地址位或0或1即可。如地址用FEFFH(無效位全為1),或用0000H(無效位全為0)都可。
例1:編寫程序把按鈕開關(guān)狀態(tài)通過上圖中的發(fā)光二極管顯示出來。程序如下:
由以上程序可以看出,對于所擴(kuò)展接口的輸入/輸出就像從外部RAM讀/寫數(shù)據(jù)一樣方便。上圖僅僅擴(kuò)展了兩片,如果仍不夠用,還可擴(kuò)展多片74LS244、74LS273之類的芯片。但作為輸入口時,一定要求有三態(tài)功能,否則將影響總線的正常工作。