AT89S51單片機共有4個雙向的8位并行I/O口,分別記為PO、Pl、P2和P3,其中輸出鎖存器屬于特殊功能寄存器。端口的每一位均由輸出鎖存器、輸出驅(qū)動器和輸入緩沖器組成,這4個端口除了按字節(jié)輸入/輸出外,還可以按位尋址,便于位控功能的實現(xiàn)。
PO口
PO口是一個雙功能的8位并行口,字節(jié)地址為80H,位地址為80H~87H。端口的各位具有完全相同但又相互獨立的電路結(jié)構(gòu),PO口某一位的位電路結(jié)構(gòu)如圖2-8所示。
1.位電路結(jié)構(gòu)
PO口某一位的電路包括:
(1)一個數(shù)據(jù)輸出的鎖存器,用于數(shù)據(jù)位的鎖存。
(2)兩個三態(tài)的數(shù)據(jù)輸入緩沖器,分別是用于讀鎖存器數(shù)據(jù)的輸入緩沖器BUF1和讀引腳數(shù)據(jù)的輸入緩沖器BUF2。
(3)一個多路轉(zhuǎn)接開關(guān)MUX,它的一個輸入來自鎖存器的Q(的反)端,另一個輸入為地址/數(shù)據(jù)信號的反相輸出。MUX由“控制”信號控制,實現(xiàn)鎖存器的輸出和地址/數(shù)據(jù)信號之間的轉(zhuǎn)接。
(4)數(shù)據(jù)輸出的控制和驅(qū)動電路,由兩個場效應(yīng)管(FET)組成。
2.工作過程分析
(1) PO口用作地址/數(shù)據(jù)總線 當AT89S51外擴存儲器或I/O時,PO口作為單片機系統(tǒng)復(fù)用的地址/數(shù)據(jù)總線使用。
當作為地址或數(shù)據(jù)輸出時,“控制”信號為1,硬件自動使轉(zhuǎn)接開關(guān)MUX打向上面,接通反相器的輸出,同時使與門處于開啟狀態(tài)。當輸出的地址/數(shù)據(jù)信息為l時,與門輸出為1,上方的場效應(yīng)管導(dǎo)通,下方的場效應(yīng)管截止,PO.x引腳輸出為l;當輸出的地址/數(shù)據(jù)信息為O時,上方的場效應(yīng)管截止,下方的場效應(yīng)管導(dǎo)通,PO.x引腳輸出為0。這說明PO.x引腳的輸出狀態(tài)隨地址/數(shù)據(jù)狀態(tài)的變化而變化。輸出電路是上、下兩個場效應(yīng)管形成的推拉式結(jié)構(gòu),大大提高了負載能力,上方的場效應(yīng)管這時起到內(nèi)部上拉電阻的作用。
當PO口作為地址/數(shù)據(jù)輸入時,僅從外部存儲器(或外部I/O)讀入信息,對應(yīng)的“控制”信號為0,MUX接通鎖存器的Q(的反)端。由于PO口作為地址/數(shù)據(jù)復(fù)用方式訪問外部存儲器時,CPU自動向PO口寫入FFH,使下方的場效應(yīng)管截止,上方的場效應(yīng)管由于控制信號為O也截止,從而保證數(shù)據(jù)信息的高阻抗輸入,從外部存儲器輸入的數(shù)據(jù)信息直接由PO.x引腳通過輸入緩沖器BUF2進入內(nèi)部總線。
具有高阻抗輸入的I/O口如果是真正的雙向口,它應(yīng)是具有高電平、低電平和高阻抗3種狀態(tài)的端口。因此,PO口作為地址/數(shù)據(jù)總線使用時是一個真正的雙向端口,簡稱雙向口。
(2) PO口用作通用I/O口 當PO口不作為系統(tǒng)的地址/數(shù)據(jù)總線使用時,此時PO口也可作為通用的I/O口使用。
當用作通用的I/O時,對應(yīng)的“控制”信號為0,MUX打向下面,接通鎖存器的Q(的反)端,與門輸出為0,上方的場效應(yīng)管截止,形成的PO口輸出電路為漏極開路輸出。
PO口用作輸出口時,來自CPU的“寫”脈沖加在D鎖存器的CP端,內(nèi)部總線上的數(shù)據(jù)寫入D鎖存器,并由引腳PO.x輸出。當D鎖存器為1時,Q端為0,下方場效應(yīng)管截止,輸出為漏極開路,此時,必須外接上拉電阻才能有高電平輸出;當D鎖存器為0時,下方場效應(yīng)管導(dǎo)通,PO口輸出為低電平。
PO口作為輸入口使用時,有兩種讀入方式:“讀鎖存器”和“讀引腳”。當CPU發(fā)出“讀鎖存器”指令時,鎖存器的狀態(tài)由Q端經(jīng)上方的三態(tài)緩沖器BUF1進入內(nèi)部總線;當CPU發(fā)出“讀引腳”指令時,鎖存器的輸出狀態(tài)=1(即Q(的反)端為0),從而使下方場效應(yīng)管截止,引腳的狀態(tài)經(jīng)下方的三態(tài)緩沖器BUF2進入內(nèi)部總線。
3.PO口的特點
綜上所述,PO口具有如下特點:PO口為雙功能口——地址/數(shù)據(jù)復(fù)用口和通用I/O口。
(1)當PO口用作地址/數(shù)據(jù)復(fù)用口時,是一個真正的雙向口,用作與外部存儲器的連接,輸出低8位地址和輸出/輸入8位數(shù)據(jù)。
(2)當PO口用作通用I/O口時,由于需要在片外接上拉電阻,端口不存在高阻抗(懸浮)狀態(tài),因此是一個準雙向口。為保證引腳信號的正確讀入,應(yīng)首先向鎖存器寫l。單片機復(fù)位后,鎖存器自動被置1;當PO口由原來的輸出狀態(tài)轉(zhuǎn)變?yōu)檩斎霠顟B(tài)時,應(yīng)首先置鎖存器為1,方可執(zhí)行輸入操作。
一般情況下,PO口大多作為地址/數(shù)據(jù)復(fù)用口使用,這時就不能再作為通用I/O口使用。
Pl口
Pl口是單功能的I/O口,字節(jié)地址為90H,位地址為90H~97H。Pl口某一位的位電路結(jié)構(gòu)如圖2-9所示。
1.位電路結(jié)構(gòu)
P1口位電路結(jié)構(gòu)由以下三部分組成:
(1)一個數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)位的鎖存。
(2)兩個三態(tài)的數(shù)據(jù)輸入緩沖器BUF1和BUF2,分別用于讀鎖存器數(shù)據(jù)和讀引腳數(shù)據(jù)的輸入緩沖。
(3)數(shù)據(jù)輸出驅(qū)動電路,由一個場效應(yīng)管(FET)和一個片內(nèi)上拉電阻組成。
2.工作過程分析
P1口只能作為通用的I/O口使用。
(1) P1口作為輸出口時,若CPU輸出1,Q=1, Q(的反)=0,場效應(yīng)管截止,Pl口引腳的輸出為1;若CPU輸出Q=0,Q(的反)=1,場效應(yīng)管導(dǎo)通,P1口引腳的輸出為0。
(2) P1口作為輸入口時,分為“讀鎖存器”和“讀引腳”兩種方式。“讀鎖存器”時,鎖存器的輸出端Q的狀態(tài)經(jīng)輸入緩沖器BUF1進入內(nèi)部總線;“讀引腳”時,先向鎖存器寫1,使場效應(yīng)管截止,Pl.x引腳上的電平經(jīng)輸入緩沖器BUF2進入內(nèi)部總線。
3.P1口的特點
P1口由于有內(nèi)部上拉電阻,沒有高阻抗輸入狀態(tài),故為準雙向口。作為輸出口時,不需要在片外接上拉電阻。
P1口“讀引腳”輸入時,必須先向鎖存器寫入1。
P2口
P2口是一個雙功能口,字節(jié)地址為AOH,位地址為AOH~A7H。P2口某一位的位電路結(jié)構(gòu)如圖2-10所示
。
1.位電路結(jié)構(gòu)
P2口某一位的電路包括:
(1)一個數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)位的鎖存。
(2)兩個三態(tài)數(shù)據(jù)輸入緩沖器BUF1和BUF2,分別用于讀鎖存器數(shù)據(jù)和讀引腳數(shù)據(jù)的輸入緩沖。
(3)一個多路轉(zhuǎn)接開關(guān)MUX,它的一個輸入是鎖存器的Q端,另一個輸入是地址的高8位。
(4)輸出驅(qū)動電路,由場效應(yīng)管(FET)和內(nèi)部上拉電阻組成。
2.工作過程分析
(1) P2口用作地址總線 在內(nèi)部控制信號作用下,MUX與“地址”接通。當“地址”線為O時,場效應(yīng)管導(dǎo)通,P2口引腳輸出0;當“地址”線為1時,場效應(yīng)管截止,P2口引腳輸出1。(2) P2口用作通用I/O口 在內(nèi)部控制信號作用下,MUX與鎖存器的Q端接通。
CPU輸出1時,Q=1,場效應(yīng)管截止,P2.x引腳輸出1;CPU輸出0時,Q=0,場效應(yīng)管導(dǎo)通,P2.x引腳輸出0。
輸入時,分為“讀鎖存器”和“讀引腳”兩種方式。“讀鎖存器”時,Q端信號經(jīng)輸入緩沖器BUF1進入內(nèi)部總線;“讀引腳”時,先向鎖存器寫1,使場效應(yīng)管截止,P2.x引腳上的電平經(jīng)輸入緩沖器BUF2進入內(nèi)部總線。
3.P2口的特點
作為地址輸出線使用時,P2口可以輸出外部存儲器的高8位地址,與PO口輸出的低8位地址一起構(gòu)成16位地址,可以尋址64 KB的地址空間。當P2口作為高8位地址輸出口時,輸出鎖存器的內(nèi)容保持不變。
作為通用I/O口使用時,P2口為一個準雙向口。功能與Pl口一樣。
一般情況下,P2口大多作為高8位地址總線口使用,這時就不能再作為通用I/O口使用。
P3口
由于AT89S51的引腳數(shù)目有限,因此在P3口電路中增加了引腳的第二功能。P3口的每一位都可以分別定義為第二輸入功能或第二輸出功能。P3口的字節(jié)地址為BOH,位地址為BOH~B7H。P3口某一位的位電路結(jié)構(gòu)如圖2-11所示
。
1.位電路結(jié)構(gòu)
P3口某一位的電路包括:
(1)一個數(shù)據(jù)輸出鎖存器,用于輸出數(shù)據(jù)位的鎖存。
(2)3個三態(tài)數(shù)據(jù)輸入緩沖器BUF1、BUF2和BUF3,分別用于讀鎖存器、讀引腳數(shù)據(jù)和第二功能數(shù)據(jù)的輸入緩沖。
(3)輸出驅(qū)動電路,由與非門、場效應(yīng)管(FET)和內(nèi)部上拉電阻組成。
2.工作過程分析
(1) P3日用作第二輸入/輸出功能 當選擇第二輸出功能時,該位的鎖存器需要置1,使與非門為開啟狀態(tài)。當?shù)诙敵鰹?時,場效應(yīng)管截止,P3.x引腳輸出為1;當?shù)诙敵鰹?時,場效應(yīng)管導(dǎo)通,P3.x引腳輸出為0。
當選擇第二輸出功能時,該位的鎖存器和第二輸出功能端均應(yīng)置1,保證場效應(yīng)管截止,P3.x引腳的信息由輸入緩沖器BUF3的輸出獲得。
(2) P3口用作第一功能——通用I/O口 當P3口用作第一功能通用輸出時,第二輸出功能端應(yīng)保持高電平,與非門為開啟狀態(tài)。CPU輸出1時,Q=l,場效應(yīng)管截止,P3.x引腳輸出為l;CPU輸出0時,Q=0,場效應(yīng)管導(dǎo)通,P3.x引腳輸出為0。
當P3口用作第一功能通用輸入時,P3.x位的輸出鎖存器和第二輸出功能均應(yīng)置1,場效應(yīng)管截止,P3.x引腳信息通過輸入BUF3和BUF2進入內(nèi)部總線,完成“讀引腳”操作。
當P3口實現(xiàn)第一功能通用輸入時,也可以執(zhí)行“讀鎖存器”操作,此時Q端信息經(jīng)過緩沖器BUF1進入內(nèi)部總線。
3.P3口的特點
P3口內(nèi)部有上拉電阻,不存在高阻抗輸入狀態(tài),為準雙向口。
P3口作為第二功能的輸出/輸入或第一功能通用輸入,均需將相應(yīng)位的鎖存器置1。實際應(yīng)用中,由于復(fù)位后P3口鎖存器自動置l,滿足第二功能所需的條件,所以不需要任何設(shè)置工作,就可以進入第二功能操作。
當某位不作為第二功能使用時,可作為第一功能通用I/O口使用。
引腳輸入部分有兩個緩沖器,第二功能的輸入信號取自緩沖器BUF3的輸出端,第一功能的輸入信號取自緩沖器BUF2的輸出端。
P3口的第二功能定義見表2-1。
P1~P3口驅(qū)動LED發(fā)光二極管
下面以常見的P1~P3口驅(qū)動LED發(fā)光二極管問題為例,來討論P1~P3口與LED發(fā)光二極管的驅(qū)動連接問題。
PO口與Pl、P2、P3口相比,PO口的驅(qū)動能力較大,每位可驅(qū)動8個LSTTL輸入,而Pl、P2、P3口的每一位的驅(qū)動能力,只有PO口的一半。當PO口的某位為高電平時,可提供400 μA的電流;當PO口的某位為低電平(0.45 V)時,可提供3.2 mA的灌電流,如低電平允許提高,灌電流可相應(yīng)加大。所以,任何一個口要想獲得較大的驅(qū)動能力,只能用低電平輸出。例如,使用單片機的并行口P1~P3直接驅(qū)動發(fā)光二極管,電路如圖2-12所示。由于P1~P3口內(nèi)部有30 kΩ左右的上拉電阻,如果高電平輸出,則強行從Pl、P2和P3口輸出的電流Id會造成單片機端口的損壞,如圖2-12(a)所示。
如果端口引腳為低電平,能使電流Id從單片機的外部流入內(nèi)部,則將大大增加流過的電流值,如圖2-12(b)所示。所以,當P1~P3口驅(qū)動LED發(fā)光二極管時,應(yīng)該采用低電平驅(qū)動。