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