MCS-51 單片機(jī)并行 I/O 端口的引腳特性是什么
掃描二維碼
隨時(shí)隨地手機(jī)看文章
MCS-51單片機(jī)4個(gè)并行I/O端口引腳的內(nèi)部結(jié)構(gòu)如圖2-10所示,每個(gè)端口有8個(gè)相互獨(dú)立且內(nèi)部結(jié)構(gòu)完全相同的引腳。圖2-10中的字母X代表引腳序號(hào),是0~7的整數(shù)。接下來將分別介紹P0、P1、P2和P3口的引腳特性。
圖2-10 MCS-51單片機(jī)4個(gè)并行口的引腳電路結(jié)構(gòu)
a)P0口的引腳結(jié)構(gòu)b)P1口的引腳結(jié)構(gòu)c)P2口的引腳結(jié)構(gòu)d)P3口的引腳結(jié)構(gòu)
2.4.1 P0口的引腳特性
P0口的字節(jié)地址是80H,可以按位尋址,引腳P0.1~P0.7的位地址為80H~87H。如圖2-10a所示,P0口每個(gè)引腳電路均由鎖存器、三態(tài)緩沖器(三態(tài)門1和三態(tài)門2)、多路選擇器MUX、“與”門、“非”門和場(chǎng)效應(yīng)晶體管(VF1和VF2)構(gòu)成。P0口既可以作普通I/O口(GeneralPurpose I/O Port,GPIO)使用,也可作為地址/數(shù)據(jù)總線分時(shí)復(fù)用。
1.P0口作為普通I/O口
P0口作為普通I/O口時(shí),“控制”信號(hào)必須為低電平?!翱刂啤毙盘?hào)為0,一方面使得柵極連接至“與”門輸出端的場(chǎng)效應(yīng)晶體管VF1截止;另一方面使得多路選擇器MUX將鎖存器反向輸出端Q與場(chǎng)效應(yīng)晶體管VF2的柵極相連。
(1)輸出功能
P0口引腳輸出數(shù)據(jù)0時(shí),CPU向內(nèi)部總線寫低電平,使鎖存器的Q端和Q端分別為0和1;Q端的1使得場(chǎng)效應(yīng)晶體管VF2導(dǎo)通,從而使P0.X引腳接地、輸出低電平。P0口輸出數(shù)據(jù)1時(shí),CPU向內(nèi)部總線寫高電平,使鎖存器的Q端和Q端分別為1和0;Q端的0使得場(chǎng)效應(yīng)晶體管VF2截止,同時(shí)由于VF1也截止,所以P0.X引腳為高阻態(tài),因此為了使P0.X引腳輸出高電平必須在該引腳外接上拉電阻,即:使該引腳通過上拉電阻連接至電源Vcc。
(2)輸入功能
從P0口引腳讀取數(shù)據(jù)時(shí),必須先向該引腳的鎖存器寫1,使場(chǎng)效應(yīng)晶體管VF2截止,使P0.X引腳處于高阻態(tài),否則將無法正確讀取引腳信號(hào)。因?yàn)?,如果恰好在讀引腳信號(hào)之前,剛剛向該引腳的鎖存器寫過低電平,則VF2導(dǎo)通,使得P0.X引腳接地,無論P(yáng)0.X引腳外接信號(hào)電平是高電平還是低電平,都將被當(dāng)作低電平讀取。
因?yàn)?,在讀P0口引腳信號(hào)之前,必須先向該引腳寫1,所以,P0口不是真正的雙向I/O端口,而被稱為準(zhǔn)雙向I/O端口。
P0口的讀操作有兩種,一種是通過緩沖器2“讀引腳”,另一種是通過緩沖器1“讀鎖存器”。當(dāng)單片機(jī)執(zhí)行“讀-修改-寫”這類指令時(shí),將產(chǎn)生“讀鎖存器”操作,否則將直接“讀引腳”。下面將通過實(shí)際例子,解釋“讀-修改-寫”的含義。
指令“ANL P0,A”就是一條典型的“讀-修改-寫”P0口的指令。該指令執(zhí)行時(shí),單片機(jī)首先發(fā)出“讀鎖存器”信號(hào),讀取P0口的鎖存器,然后將讀取的數(shù)據(jù)與累加器A中的數(shù)據(jù)進(jìn)行“與”運(yùn)算,之后將運(yùn)算結(jié)果寫入P0口鎖存器,并最終送到P0口的引腳上。在“讀-修改-寫”過程中,讀取鎖存器而非引腳的目的是,避免之前輸出到引腳的數(shù)據(jù)被外部操作改變而影響處理結(jié)果。
指令“MOV A,P0”不是“讀-修改-寫”指令,該指令執(zhí)行時(shí)發(fā)出“讀引腳”信號(hào),直接將P0口的引腳狀態(tài)通過緩沖器2送入累加器A。
2.P0口地址/數(shù)據(jù)分時(shí)復(fù)用
單片機(jī)訪問片外RAM、片外ROM和片外輸入/輸出(I/O)接口時(shí),需要傳輸?shù)刂泛蛿?shù)據(jù)。此時(shí),P0口和P2口作為地址總線,分別傳送地址的低8位和高8位;另外,P0口還分時(shí)復(fù)用為數(shù)據(jù)總線,用于數(shù)據(jù)傳輸。
(1)輸出地址/數(shù)據(jù)功能
P0口輸出地址/數(shù)據(jù)時(shí),“控制”信號(hào)必須為高電平。如圖2-10a所示,當(dāng)“控制”信號(hào)為1時(shí),被“非”門取反的“地址/數(shù)據(jù)”信號(hào)經(jīng)多路選擇器MUX與VF2的柵極相連;此時(shí)VF1柵極的電平狀態(tài)完全由“地址/數(shù)據(jù)”信號(hào)決定。
若輸出“地址/數(shù)據(jù)”為1,則VF2截止、VF1導(dǎo)通,從而使P0.X輸出高電平;反之,若輸出的“地址/數(shù)據(jù)”為0,則VF2導(dǎo)通,VF1截止,使P0.X為低電平。
需要強(qiáng)調(diào)的是,作為地址總線時(shí),P0是單向引腳,只能輸出。另外,在地址/數(shù)據(jù)分時(shí)復(fù)用模式下,P0口輸出高電平時(shí),不需要外接上拉電阻。
(2)輸入數(shù)據(jù)功能
在地址/數(shù)據(jù)分時(shí)復(fù)用模式下,作數(shù)據(jù)輸入口時(shí),引腳內(nèi)的“控制”信號(hào)為低電平,使VF1截止、鎖存器的Q端與VF2的柵極相連。在讀取數(shù)據(jù)之前,CPU會(huì)自動(dòng)向P0口的鎖存器寫入0FFH,以使VF2截止,P0.X引腳處于高阻態(tài)。同時(shí),來自于片外數(shù)據(jù)存儲(chǔ)器、程序存儲(chǔ)器或I/O接口的數(shù)據(jù),通過緩沖器2讀入內(nèi)部總線。
可見,在地址/數(shù)據(jù)分時(shí)復(fù)用時(shí),P0口輸入數(shù)據(jù)前CPU自動(dòng)向鎖存器寫高電平使VF2截止,并且輸出高電平“地址/數(shù)據(jù)”時(shí)也不需要外接上拉電阻。因此,此時(shí)的P0口才是真正的雙向I/O口。
P1口的引腳特性
P1口的字節(jié)地址是90H,可以按位尋址,引腳P1.1~P1.7的位地址為90H~97H。P1口電路由鎖存器、三態(tài)緩沖器1和2、場(chǎng)效應(yīng)晶體管VF和內(nèi)部上拉電阻組成,如圖2-10b所示。P1口只能作為普通I/O口使用,并且是準(zhǔn)雙向I/O口。
1.輸出功能
在P1口輸出低電平時(shí),CPU通過內(nèi)部總線向鎖存器寫低電平,鎖存器Q端為高電平,與Q端相連的場(chǎng)效應(yīng)晶體管VF導(dǎo)通,從而使P1口引腳接地、為低電平。輸出高電平時(shí),CPU向P1鎖存器寫高電平,鎖存器Q端為低電平,使得VF截止、處于高阻態(tài),因?yàn)镻1口通過內(nèi)部上拉電阻與電源相連,所以輸出高電平。
2.輸入功能
與作為“普通I/O口”的P0引腳相似,P1.X引腳作為輸入引腳時(shí),也需要預(yù)先通過指令向P1.X引腳寫高電平,使場(chǎng)效應(yīng)晶體管VF截止;然后,再執(zhí)行讀取指令,令“讀引腳”信號(hào)為高電平,P1.X引腳的電平信號(hào)通過三態(tài)緩沖器2進(jìn)入內(nèi)部總線。
因?yàn)?,讀P1口引腳之前需要預(yù)先通過指令向引腳鎖存器寫高電平,所以P1口不是真正的雙向I/O口,而是準(zhǔn)雙向I/O口。
P2口的引腳特性
P2口的引腳電路結(jié)構(gòu)如圖2-10c所示,由鎖存器、三態(tài)緩沖器1和2、多路選擇器MUX、“非”門、場(chǎng)效應(yīng)晶體管VF和內(nèi)部上拉電阻組成。P2口可以作為普通I/O口使用,也可以在擴(kuò)展外部數(shù)據(jù)存儲(chǔ)器、程序存儲(chǔ)器或I/O接口時(shí),作為地址總線傳輸高8位地址。
1.P2口作為普通I/O口
P2口作普通I/O口時(shí),“控制”信號(hào)必須為低電平,使得多路選擇器MUX切換至鎖存器的Q端。
(1)輸出功能
輸出低電平時(shí),通過內(nèi)部總線向鎖存器寫低電平,鎖存器Q端的低電平通過MUX后被“非”門取反,取反后的高電平使VF導(dǎo)通,進(jìn)而使P2.X引腳接地并輸出低電平。輸出高電平時(shí),向鎖存器寫高電平,鎖存器Q端的高電平經(jīng)MUX過后被“非”門取反,并使VF截止,從而使經(jīng)內(nèi)部上拉電阻與電源相連的P2.X引腳輸出高電平。
(2)輸入功能
與P0口和P1口類似,P2口作為普通I/O口輸入端時(shí),首先,需要通過指令向鎖存器寫入1,使場(chǎng)效應(yīng)晶體管VF截止;然后,執(zhí)行讀指令,CPU使“讀引腳”信號(hào)為高電平,打開三態(tài)緩沖器2,使P2.X引腳信號(hào)進(jìn)入內(nèi)部總線。
2.P2口作為地址總線
P2口作為地址總線時(shí),“控制”信號(hào)必須為高電平,使多路選擇器MUX切換到“地址”信號(hào)端。作為地址總線,P2口只能輸出,不能輸入。當(dāng)輸出地址時(shí),若地址是1,則“地址”信號(hào)端為高電平,該高電平被“非”門取反后成為低電平,從而使VF截止,P2.X引腳經(jīng)內(nèi)部上拉電阻與Vcc相連,輸出高電平;若地址是0,則“地址”信號(hào)端為低電平,使得VF導(dǎo)通,從而使P2.X引腳接地,輸出低電平。
P3口的引腳特性
P3口的引腳電路結(jié)構(gòu)如圖2-10d所示,由鎖存器、三態(tài)緩沖器1和2、“與非”門、場(chǎng)效應(yīng)晶體管VF和內(nèi)部上拉電阻組成。P3口是準(zhǔn)雙向I/O口,除了可以作為普通I/O口使用,還有第二功能。
1.P3口作為普通I/O口
(1)輸出功能
P3口作為普通I/O口進(jìn)行輸出時(shí),“第二輸出功能”信號(hào)必須為1,鎖存器Q端被“與非”門取反后,連接至場(chǎng)效應(yīng)晶體管VF的柵極。若輸出1,則1經(jīng)內(nèi)部總線寫入鎖存器,鎖存器Q端輸出的高電平經(jīng)“與非”門取反后,使得VF截止,進(jìn)而使經(jīng)過內(nèi)部上拉電阻連接至Vcc的P3.X引腳輸出高電平;若輸出0,則0寫入鎖存器后,經(jīng)“與非”門取反,使得場(chǎng)效應(yīng)晶體管VF導(dǎo)通,從而使P3.X引腳接地、輸出低電平。
(2)輸入功能
P3口作為普通I/O口進(jìn)行輸入時(shí),首先,必須通過指令向P3.X鎖存器寫1,使鎖存器Q端為高電平,“與非”門輸出的低電平使VF截止,在內(nèi)部上拉電阻作用下,P3.X引腳處于高電平狀態(tài);然后,執(zhí)行指令讀P3.X引腳,CPU使“讀引腳”信號(hào)為高電平,P3.X引腳信號(hào)先后經(jīng)過緩沖3和2進(jìn)入內(nèi)部總線。
2.P3口作為第二功能
(1)輸出功能
在第二功能輸出狀態(tài)下,CPU會(huì)自動(dòng)向P3.X的鎖存器寫1,使Q端為高電平,此時(shí)“與非”門對(duì)于“第二輸出功能”信號(hào)來說相當(dāng)于一個(gè)非門。而第二功能信號(hào),如RD、WR和TXD信號(hào)等,將從P3.X引腳輸出。若“第二輸出功能”信號(hào)為高電平,則“與非”門輸出為低電平,使VF截止,使得P3.X經(jīng)上拉電阻接至Vcc,從而輸出高電平;反之,則“與非”門輸出高電平,使VF導(dǎo)通,P3.X引腳接地、輸出低電平。
(2)輸入功能
在第二功能輸入時(shí),CPU會(huì)自動(dòng)向P3.X的鎖存器寫1,使Q端為高電平,同時(shí)令“第二輸出功能”信號(hào)為高電平,使得“與非”門輸出為低電平,將VF截止。此時(shí),讀取的P3.X引腳信號(hào)將通過緩沖器3,并由“第二輸入功能”線進(jìn)入單片機(jī)內(nèi)部的功能模塊,如定時(shí)/計(jì)數(shù)器模塊、串口模塊和外部中斷模塊等。因?yàn)?,第二功能的輸入信?hào)僅與單片機(jī)內(nèi)部功能模塊的硬件電路有關(guān),與CPU無關(guān),所以不會(huì)通過三態(tài)緩沖器2進(jìn)入內(nèi)部總線。