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