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