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