在80C51單片機(jī)中有4個(gè)雙向的8位I/O口P0~P3,在無片外存儲(chǔ)器的系統(tǒng)中,這4個(gè)I/O口的每一位都可以作為準(zhǔn)雙向通用I/O使用。
在具有片外存儲(chǔ)器的系統(tǒng)中,P0口作為地址線的低8位以及雙向數(shù)據(jù)總線,P2口作為高8位的地址線。這4個(gè)I/O口除了可以按字節(jié)尋址外,還可以按位尋址。
P0口
下圖給出了P0口的邏輯結(jié)構(gòu),它由一個(gè)鎖存器,兩個(gè)三態(tài)輸入緩沖器,一個(gè)多路復(fù)用開關(guān),一個(gè)與門,一個(gè)非門以及控制電路和驅(qū)動(dòng)電路組成。
“鎖存器,是數(shù)字電路中的一種具有記憶功能的邏輯元件。鎖存,就是把信號(hào)暫存以維持某種電平狀態(tài),在數(shù)字電路中則可以記錄二進(jìn)制數(shù)字信號(hào)"0"和"1"。
只有在有鎖存信號(hào)時(shí)輸入的狀態(tài)被保存到輸出,直到下一個(gè)鎖存信號(hào)。通常只有0和1兩個(gè)值。
三態(tài)緩沖器(Three-state buffer),又稱為三態(tài)門、三態(tài)驅(qū)動(dòng)器,其三態(tài)輸出受到使能輸出端的控制。
當(dāng)使能輸出有效時(shí),器件實(shí)現(xiàn)正常邏輯狀態(tài)輸出(邏輯0、邏輯1),當(dāng)使能輸入無效時(shí),輸出處于高阻狀態(tài),即等效于與所連的電路斷開?!?/p>
P0口可以作為輸入或輸出口,在實(shí)際應(yīng)用中通常作為地址/數(shù)據(jù)復(fù)用總線。
在訪問外部存儲(chǔ)器時(shí),P0口才是真正的雙向口。
當(dāng)P0口輸出地址/數(shù)據(jù)信息時(shí),此時(shí)控制信號(hào)線為高電平,模擬開關(guān)將地址/數(shù)據(jù)線與場(chǎng)效應(yīng)管VT2接通,同時(shí)與門輸出有效,輸出結(jié)果由地址/數(shù)據(jù)線信號(hào)決定。
與門輸出的地址/數(shù)據(jù)信息去驅(qū)動(dòng)VT1,同時(shí)通過非門反相信號(hào)后驅(qū)動(dòng)VT2。VT1與與VT2為推拉結(jié)構(gòu),同一時(shí)刻,只有一個(gè)管能導(dǎo)通。若地址/數(shù)據(jù)線為1,則VT1導(dǎo)通,VT2截止,P0口輸出高電平;反之輸出低電平。
當(dāng)數(shù)據(jù)從P0口輸入時(shí),讀引腳使三態(tài)緩沖器打開,端口上的數(shù)據(jù)經(jīng)三態(tài)緩沖器后送到內(nèi)部的數(shù)據(jù)總線,完成讀引腳。
當(dāng)P0口作為通用I/O時(shí),CPU向端口輸出數(shù)據(jù),此時(shí)控制信號(hào)為低電平,模擬開關(guān)與鎖存器的反相端連接,寫信號(hào)與鎖存器的控制總線(時(shí)鐘線)相連,于是內(nèi)部數(shù)據(jù)總線上的數(shù)據(jù)經(jīng)反相后出現(xiàn)在VT2端,再經(jīng)VT2反相后輸出到P0端口,輸出的數(shù)據(jù)經(jīng)過兩次反相后相位不變。
由于VT2位漏極開路輸出,為了完成VT2反相功能,此時(shí)需要外接上拉電阻。
當(dāng)P0口作為輸入時(shí),由于信號(hào)加載在VT2上被送入三態(tài)緩沖器,若該接口此前剛鎖存過數(shù)據(jù)0,則VT2是導(dǎo)通的,VT2的輸出被鉗位在0,此時(shí)輸入的1無法讀入,所以當(dāng)P0口作為通用I/O時(shí),在輸入數(shù)據(jù)之前,必須先向端口寫1,使VT2截止。不過當(dāng)在訪問外部程序存儲(chǔ)器時(shí),CPU會(huì)自動(dòng)向P0口寫1。
有時(shí)需要先將端口的數(shù)據(jù)寫入,經(jīng)過修改后再輸出到端口,若此時(shí)P0口的負(fù)載正好是晶體管的基極,并且其輸出為1,這必然導(dǎo)致該引腳為低,若此時(shí)讀取引腳信號(hào),則會(huì)將剛輸出的1誤讀為0,為了避免這類誤讀的錯(cuò)誤,于是單片機(jī)還提供了讀鎖存器的功能。
例如執(zhí)行INC P0時(shí),CPU先讀P0鎖存器中的數(shù)據(jù),然后再執(zhí)行加1操作,最后將結(jié)果送回P0口,這樣單片機(jī)從結(jié)構(gòu)上滿足了讀改寫這類操作的需要。
P1口
P1口是一個(gè)準(zhǔn)雙向口,通常作為通用I/O使用,結(jié)構(gòu)圖如下。
由于在其輸出端接有上拉電阻,故可以直接輸出而不需要外接上拉電阻。
同P0口一樣,當(dāng)做輸出口時(shí),必須先向端口寫1,使場(chǎng)效應(yīng)管截止。同時(shí),它可以被任何數(shù)字邏輯電路驅(qū)動(dòng),包括TTL電路,MOS電路和OC電路。
P2口
P2口位結(jié)構(gòu)圖如下。
P2口作為一個(gè)準(zhǔn)雙向口,其位結(jié)構(gòu)與P0口相似,當(dāng)系統(tǒng)外接片外存儲(chǔ)器時(shí),它輸出高8位地址,此時(shí)開關(guān)在CPU的控制下接通地址信號(hào)。
同時(shí)它還可以作為通用I/O使用,此時(shí)開關(guān)接通鎖存器的Q端。對(duì)于80C51單片機(jī)來說,P2口通常用作地址信號(hào)輸出。
P3口
P3口位結(jié)構(gòu)圖如下。
P3口位雙功能口,當(dāng)P3口作為通用I/O口使用時(shí),它為準(zhǔn)雙向口,且每位都可定義為輸入或輸出,其工作原理與P1口類似。
P3口還有第二功能,其引腳描述如下表:
對(duì)于輸出而言,此時(shí)相應(yīng)位的鎖存器由CPU自動(dòng)輸出1,有效輸出第二功能。
對(duì)于輸入而言,無論該位是作為通用輸入口還是第二功能輸入口,相應(yīng)的鎖存器和選擇輸出功能端都應(yīng)置1,該工作在開機(jī)或復(fù)位時(shí)CPU自動(dòng)完成。
80C51系列單片機(jī)的并行I/O接口有以下應(yīng)用特性:1)P0,P1,P2,P3作為通用雙向I/O口使用時(shí),輸入操作是讀引腳狀態(tài);輸出操作是對(duì)口的鎖存器的寫入操作,鎖存器狀態(tài)立即反映到引腳上;
2)P1,P2,P3作為輸出口時(shí),由于電路內(nèi)部帶上拉電阻,因此無須外接上拉電阻。
3)P0,P1,P2,P3作為通用輸入口時(shí),必須使電路中的鎖存器寫入高電平1。
4)I/O口功能自動(dòng)識(shí)別,無論是P0,P2的總線復(fù)用功能,還是P3口的第二功能復(fù)用,單片機(jī)會(huì)自動(dòng)選擇。
5)兩種讀端口的方式,包括端口鎖存器的讀、改,寫操作和讀引腳操作。在單片機(jī)中,有些指令是讀端口鎖存器的,如一些邏輯運(yùn)算指令,置位/復(fù)位指令,條件轉(zhuǎn)移指令以及將I/O口作為目的地址的操作指令;有些指令是讀引腳的,如以I/O口作為源操作數(shù)的指令MOV A,P1。
6)I/O的驅(qū)動(dòng)特性。由于P1,P2,P3口內(nèi)部帶上拉電阻,其引腳拉出電流能力弱,吸入電流能力強(qiáng),也就是輸出驅(qū)動(dòng)能力弱,可驅(qū)動(dòng)4個(gè)LS TTL輸入;而P0口每個(gè)I/O可以驅(qū)動(dòng)8個(gè)LS TTL輸入。
評(píng)論
查看更多