官术网_书友最值得收藏!

2.5 80C51單片機(jī)的并行I/O口

80C51單片機(jī)有4個(gè)8位的并行I/O口P0、P1、P2和P3。各口均由口鎖存器、輸出驅(qū)動(dòng)器和輸入緩沖器組成。4個(gè)并行口既有字節(jié)地址又有位地址。對(duì)各個(gè)并行口鎖存器的讀寫(xiě),就可以實(shí)現(xiàn)口的輸入/輸出操作。4個(gè)并行口的功能有所不同,結(jié)構(gòu)也存在一些差異,但每個(gè)口的位結(jié)構(gòu)是相同的。所以,口結(jié)構(gòu)的介紹均以其位結(jié)構(gòu)進(jìn)行說(shuō)明。

2.5.1 P0、P2口的結(jié)構(gòu)

80C51單片機(jī)中,使用內(nèi)部含有程序存儲(chǔ)器的單片機(jī),基本上不需要外部擴(kuò)展程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,這時(shí)P0、P2口可用作通用的輸入/輸出口。若使用內(nèi)部無(wú)程序存儲(chǔ)器型號(hào)的單片機(jī),就需要通過(guò)外部電路擴(kuò)展程序存儲(chǔ)器和數(shù)據(jù)存儲(chǔ)器,此時(shí),P0、P2口作為總線(xiàn)接口使用,即P0口為分時(shí)復(fù)用的低8位地址/數(shù)據(jù)總線(xiàn),P2口作為高8位地址總線(xiàn)。

1.P0口的結(jié)構(gòu)

P0口的位結(jié)構(gòu)如圖2-5所示。P0.X位由一個(gè)輸出鎖存器、一個(gè)轉(zhuǎn)換開(kāi)關(guān)MUX、兩個(gè)三態(tài)輸入緩沖器1、2、輸出驅(qū)動(dòng)電路(T1、T2)和一個(gè)與門(mén)4及一個(gè)反相器3組成,圖中控制信號(hào)C的狀態(tài)決定轉(zhuǎn)換開(kāi)關(guān)的位置。當(dāng)C=0時(shí),開(kāi)關(guān)處于圖中所示位置;當(dāng)C=1時(shí),開(kāi)關(guān)撥向反相器輸出端位置。

(1)P0作為通用I/O口使用

當(dāng)單片機(jī)系統(tǒng)沒(méi)有外部擴(kuò)展ROM/RAM時(shí),P0用作通用I/O口使用。在這種情況下,單片機(jī)硬件邏輯自動(dòng)控制C=0,MUX開(kāi)關(guān)處于當(dāng)前位置。另外,C=0,與門(mén)4的輸出為“0”,使輸出驅(qū)動(dòng)器的上拉場(chǎng)效應(yīng)晶體管T1處于截止?fàn)顟B(tài)。因此,輸出驅(qū)動(dòng)級(jí)工作在需要外接上拉電阻的漏極開(kāi)路方式。

作輸出口時(shí),CPU執(zhí)行口的輸出指令,內(nèi)部數(shù)據(jù)總線(xiàn)上的數(shù)據(jù)在“寫(xiě)鎖存器”信號(hào)的作用下由D端進(jìn)入鎖存器,經(jīng)鎖存器的Q端送至場(chǎng)效應(yīng)晶體管T2,再經(jīng)T2反相,在P0.X引腳出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線(xiàn)的數(shù)據(jù)。

作輸入口時(shí),數(shù)據(jù)可以讀自口的鎖存器,也可以讀自口的引腳。這要根據(jù)輸入操作采用的是“讀鎖存器”指令,還是“讀引腳”指令來(lái)決定。

CPU在執(zhí)行“讀—修改—寫(xiě)”類(lèi)輸入指令時(shí)(如ANL P0,A),內(nèi)部產(chǎn)生的“讀鎖存器”操作信號(hào),使鎖存器Q端數(shù)據(jù)進(jìn)入內(nèi)部數(shù)據(jù)總線(xiàn),在與累加器A進(jìn)行邏輯運(yùn)算之后,結(jié)果又送回P0口鎖存器并出現(xiàn)在引腳上。讀端口鎖存器可以避免因外部電路原因造成的誤讀。

978-7-111-44921-8-Chapter02-33.jpg

圖2-5 P0口的位結(jié)構(gòu)

CPU在執(zhí)行“MOV”類(lèi)輸入指令時(shí)(如MOV A,P0),內(nèi)部產(chǎn)生的操作信號(hào)是“讀引腳”。注意,在執(zhí)行該類(lèi)輸入指令前要先給鎖存器寫(xiě)入“1”,目的是使場(chǎng)效應(yīng)晶體管T2截止,從而使引腳處于懸浮狀態(tài),可以作為高阻抗輸入。否則,在作為輸入方式之前曾向鎖存器輸出過(guò)“0”,T2導(dǎo)通會(huì)使引腳鉗位在“0”電平,使輸入高電平“1”無(wú)法讀入。所以,P0口在作為通用I/O口時(shí),屬于準(zhǔn)雙向口。

(2)P0作為地址/數(shù)據(jù)總線(xiàn)口使用

當(dāng)系統(tǒng)擴(kuò)展片外ROM/RAM時(shí),P0作為地址/數(shù)據(jù)總線(xiàn)使用。在這種情況下,單片機(jī)內(nèi)硬件邏輯自動(dòng)使MUX開(kāi)關(guān)控制端C=1,則MUX開(kāi)關(guān)接到反相器3的輸出端,這時(shí)與門(mén)4的輸出由地址/數(shù)據(jù)線(xiàn)的狀態(tài)決定。

CPU在執(zhí)行輸出指令時(shí),低8位地址和數(shù)據(jù)信息分時(shí)地出現(xiàn)在地址/數(shù)據(jù)總線(xiàn)上。若地址/數(shù)據(jù)總線(xiàn)的狀態(tài)為“1”,則場(chǎng)效應(yīng)晶體管T1導(dǎo)通、T2截止,引腳狀態(tài)為“1”;若地址/數(shù)據(jù)總線(xiàn)的狀態(tài)為“0”,則場(chǎng)效應(yīng)晶體管T1截止、T2導(dǎo)通,引腳狀態(tài)為“0”。可見(jiàn)P0.X引腳的狀態(tài)正好與地址/數(shù)據(jù)線(xiàn)的信息相同。

CPU在執(zhí)行輸入指令時(shí),首先低8位地址信息出現(xiàn)在地址/數(shù)據(jù)總線(xiàn)上,P0.X引腳的狀態(tài)與地址/數(shù)據(jù)總線(xiàn)的地址信息相同。然后,CPU自動(dòng)地使轉(zhuǎn)換開(kāi)關(guān)MUX撥向鎖存器,并向P0口寫(xiě)入FFH,同時(shí)“讀引腳”信號(hào)有效,數(shù)據(jù)經(jīng)緩沖器進(jìn)入內(nèi)部數(shù)據(jù)總線(xiàn)。

由此可見(jiàn),P0口作為地址/數(shù)據(jù)總線(xiàn)使用時(shí)是一個(gè)真正的雙向口。

2.P2口的結(jié)構(gòu)

P2口的位結(jié)構(gòu)如圖2-6所示,P2.X位由一個(gè)輸出鎖存器、一個(gè)轉(zhuǎn)換開(kāi)關(guān)MUX、兩個(gè)三態(tài)輸入緩沖器、輸出驅(qū)動(dòng)電路和一個(gè)反相器組成。圖中控制信號(hào)的狀態(tài)決定轉(zhuǎn)換開(kāi)關(guān)的位置。當(dāng)控制信號(hào)為0時(shí),開(kāi)關(guān)處于圖中所示位置;當(dāng)控制信號(hào)為1時(shí),開(kāi)關(guān)撥向地址線(xiàn)位置。

由圖可見(jiàn),P2口的輸出驅(qū)動(dòng)電路與P0口不同,只使用一個(gè)場(chǎng)效應(yīng)晶體管,其內(nèi)部設(shè)有上拉電阻。

978-7-111-44921-8-Chapter02-34.jpg

圖2-6 P2口的位結(jié)構(gòu)

(1)P2作為通用I/O口使用

當(dāng)單片機(jī)系統(tǒng)沒(méi)有外部擴(kuò)展ROM/RAM時(shí),P2可以作為通用I/O口使用。

CPU在執(zhí)行輸出指令時(shí),內(nèi)部數(shù)據(jù)總線(xiàn)的數(shù)據(jù)在“寫(xiě)鎖存器”信號(hào)的作用下由D端進(jìn)入鎖存器,經(jīng)反相器反相后送至場(chǎng)效應(yīng)晶體管T2,再經(jīng)T2反相,在P2.X引腳出現(xiàn)的數(shù)據(jù)正好是內(nèi)部總線(xiàn)的數(shù)據(jù)。

P2口用作輸入時(shí),數(shù)據(jù)可以讀自口的鎖存器,也可以讀自口的引腳。這要根據(jù)輸入操作采用的是“讀鎖存器”指令還是“讀引腳”指令來(lái)決定。

CPU在執(zhí)行“讀一修改一寫(xiě)”類(lèi)輸入指令時(shí)(如ANL P2,A),內(nèi)部產(chǎn)生的“讀鎖存器”操作信號(hào),使鎖存器Q端數(shù)據(jù)進(jìn)入內(nèi)部數(shù)據(jù)總線(xiàn),在與累加器A進(jìn)行邏輯運(yùn)算之后,結(jié)果又送回P2口的鎖存器并出現(xiàn)在引腳。

CPU在執(zhí)行“MOV”類(lèi)輸入指令時(shí)(如MOV A,P2),內(nèi)部產(chǎn)生的操作信號(hào)是“讀引腳”。應(yīng)在執(zhí)行輸入指令前對(duì)鎖存器寫(xiě)入“1”,目的是使場(chǎng)效應(yīng)晶體管T2截止,從而使引腳處于高阻抗輸入狀態(tài)。所以,P2口在作為通用I/O口時(shí),屬于準(zhǔn)雙向口。

(2)P2口作為地址總線(xiàn)接口使用

當(dāng)需要在單片機(jī)外部擴(kuò)展程序存儲(chǔ)器或數(shù)據(jù)存儲(chǔ)器時(shí),單片機(jī)內(nèi)部硬件邏輯自動(dòng)控制MUX開(kāi)關(guān)接向地址線(xiàn),這時(shí)P2.X引腳的狀態(tài)正好與地址線(xiàn)輸出的信息相同。

2.5.2 P1、P3口的結(jié)構(gòu)

P1口是80C51單片機(jī)唯一的單功能口,僅能用作通用的數(shù)據(jù)輸入/輸出口。P3口是雙功能口,除具有數(shù)據(jù)輸入/輸出功能外,還具有特殊的第二功能。

1.P1口的結(jié)構(gòu)

P1口的位結(jié)構(gòu)如圖2-7所示。由圖可見(jiàn),P1口由一個(gè)輸出鎖存器、兩個(gè)三態(tài)輸入緩沖器和輸出驅(qū)動(dòng)電路組成。其輸出驅(qū)動(dòng)電路與P2口相同,內(nèi)部設(shè)有上拉電阻。P1口是通用的準(zhǔn)雙向I/O口。輸出高電平時(shí),能向外提供拉電流負(fù)載。用作輸入口使用時(shí),在讀入數(shù)據(jù)前必須向口鎖存器寫(xiě)入“1”。

2.P3口的結(jié)構(gòu)

P3口的位結(jié)構(gòu)如圖2-8所示。P3口由一個(gè)輸出鎖存器、三個(gè)輸入緩沖器(1、2、4),其中緩沖器1、2為三態(tài)門(mén),場(chǎng)效應(yīng)晶體管輸出驅(qū)動(dòng)電路和一個(gè)與非門(mén)(3)組成。輸出驅(qū)動(dòng)電路內(nèi)部設(shè)有上拉電阻。

978-7-111-44921-8-Chapter02-35.jpg

圖2-7 P1口的位結(jié)構(gòu)

978-7-111-44921-8-Chapter02-36.jpg

圖2-8 P3口的位結(jié)構(gòu)

(1)P3作為通用I/O口使用(第一功能)

單片機(jī)內(nèi)部的硬件自動(dòng)將第二功能輸出線(xiàn)的W置1。這時(shí),對(duì)應(yīng)的口線(xiàn)為通用I/O口方式。作為輸出時(shí),鎖存器的狀態(tài)(Q端)與輸出引腳的狀態(tài)相同;作為輸入時(shí),也要先向口鎖存器寫(xiě)入1,使引腳處于高阻輸入狀態(tài)。輸入的數(shù)據(jù)在“讀引腳”信號(hào)的作用下,進(jìn)入內(nèi)部數(shù)據(jù)總線(xiàn)。所以,P3口在作為通用I/O口時(shí),也屬于準(zhǔn)雙向口。

(2)P3口的第二功能

當(dāng)CPU不對(duì)P3口進(jìn)行字節(jié)或位尋址時(shí),單片機(jī)內(nèi)部硬件自動(dòng)將口鎖存器的Q端置1。這時(shí),可以使用P3口的第二功能。P3口第二功能的各引腳的定義如下:

P3.0:串行口輸入信號(hào)引腳(RXD)。

P3.1:串行口輸出信號(hào)引腳(TXD)。

P3.2:外部中斷0輸入信號(hào)引腳(978-7-111-44921-8-Chapter02-37.jpg)。

P3.3:外部中斷1輸入信號(hào)引腳(978-7-111-44921-8-Chapter02-38.jpg)。

P3.4:定時(shí)/計(jì)數(shù)器0的外部輸入信號(hào)引腳(T0)。

P3.5:定時(shí)/計(jì)數(shù)器1的外部輸入信號(hào)引腳(T1)。

P3.6:片外數(shù)據(jù)存儲(chǔ)器“寫(xiě)”選通輸出信號(hào)引腳(978-7-111-44921-8-Chapter02-39.jpg)。

P3.7:片外數(shù)據(jù)存儲(chǔ)器“讀”選通輸出信號(hào)引腳(978-7-111-44921-8-Chapter02-40.jpg)。

有些應(yīng)用場(chǎng)合若把其中的幾條口線(xiàn)設(shè)為第二功能,另外幾條口線(xiàn)設(shè)為第一功能使用。這時(shí)宜采用位尋址方式。

2.5.3 并行口的負(fù)載能力

P0、P1、P2、P3口的輸入和輸出電平與CMOS電平和TTL電平均兼容。

P0口的每一位口線(xiàn)可以驅(qū)動(dòng)8個(gè)LSTTL負(fù)載。在作為通用I/O口時(shí),由于輸出驅(qū)動(dòng)電路是開(kāi)漏方式,驅(qū)動(dòng)時(shí)需外接上拉電阻;當(dāng)作為地址/數(shù)據(jù)總線(xiàn)使用時(shí),接口線(xiàn)輸出不是開(kāi)漏方式,無(wú)需外接上拉電阻。

P1、P2、P3口的每一位能驅(qū)動(dòng)4個(gè)LSTTL負(fù)載。它們的輸出驅(qū)動(dòng)電路內(nèi)部設(shè)有上拉電阻,所以可以方便地由集電極開(kāi)路(OC門(mén))電路或漏極開(kāi)路電路所驅(qū)動(dòng),而無(wú)需外接上拉電阻。

由于單片機(jī)口線(xiàn)僅能提供幾毫安的電流,當(dāng)作為輸出驅(qū)動(dòng)一般晶體管的基極時(shí),應(yīng)在口與晶體管的基極之間串接限流電阻。

2.5.4 并行口的應(yīng)用舉例

1.并口作為輸出口的應(yīng)用

978-7-111-44921-8-Chapter02-41.jpg

圖2-9 P1口輸出控制LED電路

利用P1口作為輸出口控制發(fā)光二極管的應(yīng)用電路,如圖2-9所示。將8個(gè)發(fā)光二極管(LED)的陽(yáng)極接在一起,并將它們接在+5V電源端,這種接法也稱(chēng)為共陽(yáng)極接法。發(fā)光二極管的陰極通過(guò)一個(gè)限流電阻分別接到P1口的8個(gè)引腳上。由此可見(jiàn),若要控制8個(gè)發(fā)光二極管的點(diǎn)亮與熄滅,只要控制P1口8個(gè)引腳的輸出電平即可達(dá)到目的。當(dāng)P1口的每個(gè)引腳輸出高電平時(shí),發(fā)光二極管均不導(dǎo)通,此時(shí)的發(fā)光二極管不亮。而當(dāng)P1口的每個(gè)引腳輸出低電平時(shí),發(fā)光二極管導(dǎo)通,發(fā)光二極管被點(diǎn)亮。

2.并口作為輸入、輸出口的應(yīng)用

并口作為輸入、輸出口的應(yīng)用如圖2-10所示。由圖可見(jiàn),P1口分別連接了4個(gè)開(kāi)關(guān)和4個(gè)發(fā)光二極管,組成輸入/輸出應(yīng)用電路。4個(gè)開(kāi)關(guān)S1~S4的一端連在一起并接低電平(接電源地),另一端分別接在P1口的P1.4~P1.7引腳上,同時(shí)通過(guò)4個(gè)上拉電阻接到高電平(+5V)。當(dāng)對(duì)P1口進(jìn)行讀操作時(shí),可以讀入開(kāi)關(guān)的當(dāng)前狀態(tài),開(kāi)關(guān)狀態(tài)與P1口讀入的數(shù)字量關(guān)系如下:

若開(kāi)關(guān)均處于打開(kāi)狀態(tài),從+5V電源→電阻R→開(kāi)關(guān)S→電源地端,由于開(kāi)關(guān)S是打開(kāi)的不能形成電流回路,電阻R上無(wú)壓降產(chǎn)生,所以P1.4~P1.7引腳的電平值為+5V(高電平),此時(shí)從P1.4~P1.7引腳讀入的數(shù)字量值為“1111B”。

978-7-111-44921-8-Chapter02-42.jpg

圖2-10 P1口輸入、輸出控制電路

當(dāng)開(kāi)關(guān)均處于閉合狀態(tài),從+5V電源→電阻R→開(kāi)關(guān)S→電源地端,由于開(kāi)關(guān)S是閉合的能夠形成電流回路,電阻R上產(chǎn)生壓降(壓降為+5V),開(kāi)關(guān)S是閉合后將P1.4~P1.7引腳的與電源地連接(低電平),此時(shí)從P1.4~P1.7引腳讀入的數(shù)字量值為“0000B”。

P1.0~P1.3引腳連接4個(gè)LED,組成輸出控制電路,4個(gè)LED的點(diǎn)亮與熄滅控制如前例所述。在此例中,將讀入的開(kāi)關(guān)狀態(tài),直接從P1.0~P1.3引腳輸出,可以控制LED點(diǎn)亮與熄滅。即改變開(kāi)關(guān)的狀態(tài),就可以控制LED的狀態(tài),通過(guò)編程可以實(shí)現(xiàn)控制的目的。

在本例中,要注意在讀入開(kāi)關(guān)狀態(tài)之前,要對(duì)P1口寫(xiě)“1”(使輸出端的場(chǎng)效應(yīng)晶體管截止),然后再讀入開(kāi)關(guān)狀態(tài)。關(guān)于并行口的編程參考本書(shū)第3章內(nèi)容。

主站蜘蛛池模板: 五河县| 昭觉县| 边坝县| 安远县| 长海县| 南开区| 巴楚县| 高安市| 西藏| 尤溪县| 稻城县| 淳安县| 民乐县| 鱼台县| 镇康县| 玉山县| 满洲里市| 讷河市| 涪陵区| 丹棱县| 渝北区| 朝阳市| 甘谷县| 沈阳市| 安吉县| 云和县| 瓮安县| 仪征市| 郑州市| 嘉兴市| 丹东市| 大方县| 武鸣县| 宜良县| 濉溪县| 龙岩市| 思南县| 宜兰县| 九龙县| 贞丰县| 红河县|