1. 程式人生 > >8051微控制器I/O引腳工作原理(P2埠修改指明)

8051微控制器I/O引腳工作原理(P2埠修改指明)

8051微控制器I/O引腳工作原理


一、P0埠的結構及工作原理

P08位中的一位結構圖見下圖:

點選看大圖


由上圖可見,P0埠由鎖存器、輸入緩衝器、切換開關、一個與非門、一個與門及場效電晶體驅動電路構成。再看圖的右邊,標號為P0.X引腳的圖示,也就是說P0.X引腳可以是P0.0P0.7的任何一位,即在P0口有8個與上圖相同的電路組成。

下面,我們先就組成P0口的每個單元部份跟大家介紹一下:先看輸入緩衝器:P0口中,有兩個三態的緩衝器,在學數位電路時,我們已知道,三態門有三個狀態,即在其的輸出端可以是高電平、低電平,同時還有一種就是高阻狀態(或稱為禁止狀態),大家看上圖,上面一個是讀鎖存器的緩衝器,也就是說,要讀取D鎖存器輸出端

Q的資料,那就得使讀鎖存器的這個緩衝器的三態控制端(上圖中標號為讀鎖存器端)有效。下面一個是讀引腳的緩衝器,要讀取P0.X引腳上的資料,也要使標號為讀引腳的這個三態緩衝器的控制端有效,引腳上的資料才會傳輸到我們微控制器的內部資料匯流排上。

D鎖存器:構成一個鎖存器,通常要用一個時序電路,時序的單元電路在學數位電路時我們已知道,一個觸發器可以儲存一位的二進位制數(即具有保持功能),在51微控制器的32I/O口線中都是用一個D觸發器來構成鎖存器的。大家看上圖中的D鎖存器,D端是資料輸入端,CP是控制端(也就是時序控制訊號輸入端),Q是輸出端,Q非是反向輸出端。對於D觸發器來講,當D輸入端有一個輸入訊號,如果這時控制端

CP沒有訊號(也就是時序脈衝沒有到來),這時輸入端D的資料是無法傳輸到輸出端Q及反向輸出端Q非的。如果時序控制端CP的時序脈衝一旦到了,這時D端輸入的資料就會傳輸到QQ非端。資料傳送過來後,當CP時序控制端的時序訊號消失了,這時,輸出端還會保持著上次輸入端D的資料(即把上次的資料鎖存起來了)。如果下一個時序控制脈衝訊號來了,這時D端的資料才再次傳送到Q端,從而改變Q端的狀態。

多路開關:51微控制器中,當內部的儲存器夠用(也就是不需要外擴充套件儲存器時,這裡講的儲存器包括資料儲存器及程式儲存器)時,P0口可以作為通用的輸入輸出埠(即I/O)使用,對於8031(內部沒有ROM)的微控制器或者編寫的程式超過了微控制器內部的儲存器容量,需要外擴儲存器時,

P0口就作為地址/資料匯流排使用。那麼這個多路選擇開關就是用於選擇是做為普通I/O口使用還是作為資料/地址匯流排使用的選擇開關了。大家看上圖,當多路開關與下面接通時,P0口是作為普通的I/O口使用的,當多路開關是與上面接通時,P0口是作為地址/資料匯流排使用的。

輸出驅動部份:從上圖中我們已看出,P0口的輸出是由兩個MOS管組成的推拉式結構,也就是說,這兩個MOS管一次只能導通一個,當V1導通時,V2就截止,當V2導通時,V1截止。

與門、與非門:這兩個單元電路的邏輯原理我們在第四課數字及常用邏輯電路時已做過介紹,不明白的同學請回到第四節去看看。

前面我們已將P0口的各單元部件進行了一個詳細的講解,下面我們就來研究一下P0口做為I/O口及地址/資料匯流排使用時的具體工作過程。

1、作為I/O埠使用時的工作原理
    P0
口作為I/O埠使用時,多路開關的控制訊號為0(低電平),看上圖中的線線部份,多路開關的控制訊號同時與與門的一個輸入端是相接的,我們知道與門的邏輯特點是11,有00”那麼控制訊號是0的話,這時與門輸出的也是一個0(低電平),與讓的輸出是0V1管就截止,在多路控制開關的控制訊號是0(低電平)時,多路開關是與鎖存器的Q非端相接的(即P0口作為I/O口線使用)。P0口用作I/O口線,其由資料匯流排向引腳輸出(即輸出狀態Output)的工作過程:當寫鎖存器訊號CP    有效,資料匯流排的訊號鎖存器的輸入端D→鎖存器的反向輸出Q非端多路開關→V2管的柵極→V2的漏極到輸出端P0.X。前面我們已講了,當多路開關的控制訊號為低電平0時,與門輸出為低電平,V1管是截止的,所以作為輸出口時,P0是漏極開路輸出,類似於OC門,當驅動上接電流負載時,需要外接上拉電阻。下圖就是由內部資料匯流排向P0口輸出資料的流程圖(紅色箭頭)。

     點選看大圖

P0口用作I/O口線,其由引腳向內部資料匯流排輸入(即輸入狀態Input)的工作過程:資料輸入時(讀P0口)有兩種情況
1
、讀引腳讀晶片引腳上的資料,讀引腳數時,讀引腳緩衝器開啟(即三態緩衝器的控制端要有效),通過內部資料匯流排輸入,請看下圖(紅色簡頭)。 


點選看大圖


2、讀鎖存器通過開啟讀鎖存器三態緩衝器讀取鎖存器輸出端Q的狀態,請看下圖(紅色箭頭):


點選看大圖


 在輸入狀態下,從鎖存器和從引腳上讀來的訊號一般是一致的,但也有例外。例如,當從內部匯流排輸出低電平後,鎖存器Q0Q非=1,場效電晶體T2開通,埠線呈低電平狀態。此時無論埠線上外接的訊號是低電乎還是高電平,從引腳讀入微控制器的訊號都是低電平,因而不能正確地讀入埠引腳上的訊號。又如,當從內部匯流排輸出高電平後,鎖存器Q1Q非=0,場效電晶體T2截止。如外接引腳訊號為低電平,從引腳上讀入的訊號就與從鎖存器讀入的訊號不同。為此,8031微控制器在對埠P0P3的輸入操作上,有如下約定:為此,8051微控制器在對埠P0P3的輸入操作上,有如下約定:凡屬於讀-修改-寫方式的指令,從鎖存器讀入訊號,其它指令則從埠引腳線上讀入訊號。-修改-寫指令的特點是,從埠輸入()訊號,在微控制器內加以運算(修改)後,再輸出()到該埠上。下面是幾條讀--修改-寫指令的例子。



ANL P0,#立即數


;P0→立即數P0 


ORL P0,A 


;P0→AP0 


INC P1


;P1+1→P1 


DEC P3 


;P3-1→P3 


CPL P2


;P2→P2 


這樣安排的原因在於讀-修改-寫指令需要得到埠原輸出的狀態,修改後再輸出,讀鎖存器而不是讀引腳,可以避免因外部電路的原因而使原埠的狀態被讀錯。P0埠是8031微控制器的匯流排口,分時出現數據D7D0、低8位地址A7AO,以及三態,用來介面儲存器、外部電路與外部裝置。P0埠是使用最廣泛的IO埠。

2、作為地址/資料複用口使用時的工作原理在訪問外部儲存器時P0口作為地址/資料複用口使用。這時多路開關控制訊號為‘1’與門解鎖,與門輸出訊號電平由地址/資料線訊號決定;多路開關與反相器的輸出端相連,地址訊號經地址/資料反相器→V2場效電晶體柵極→V2漏極輸出。例如:控制訊號為1,地址訊號為“0”時,與門輸出低電平,V1管截止;反相器輸出高電平,V2管導通,輸出引腳的地址訊號為低電平。請看下圖(蘭色字型為電平):

點選看大圖



反之,控制訊號為“1”、地址訊號為“1”與門輸出為高電平,V1管導通;反相器輸出低電平,V2管截止,輸出引腳的地址訊號為高電平。請看下圖(蘭色字型為電平):

點選看大圖


可見,在輸出地址/資料資訊時,V1V2管是交替導通的,負載能力很強,可以直接與外設儲存器相連,無須增加匯流排驅動器。

      P0口又作為資料匯流排使用。在訪問外部程式儲存器時,P0口輸出低8位地址資訊後,將變為資料匯流排,以便讀指令碼(輸入)。在取指令期間,控制訊號為“0”V1管截止,多路開關也跟著轉向鎖存器反相輸出端Q非;CPU自動將0FFH11111111,即向D鎖存器寫入一個高電平‘1’)寫入P0口鎖存器,使V2管截止,在讀引腳訊號控制下,通過讀引腳三態閘電路將指令碼讀到內部匯流排。請看下圖


點選看大圖


 如果該指令是輸出資料,如MOVX  @DPTRA(將累加器的內容通過P0口資料匯流排傳送到外部RAM中),則多路開關控制訊號為‘1’與門解鎖,與輸出地址訊號的工作流程類似,資料據由地址/資料反相器→V2場效電晶體柵極→V2漏極輸出。

如果該指令是輸入資料(讀外部資料儲存器或程式儲存器),如MOVX A@DPTR(將外部RAM某一儲存單元內容通過P0口資料匯流排輸入到累加器A中),則輸入的資料仍通過讀引腳三態緩衝器到內部匯流排,其過程類似於上圖中的讀取指令碼流程圖。

通過以上的分析可以看出,當P0作為地址/資料匯流排使用時,在讀指令碼或輸入資料前,CPU自動向P0口鎖存器寫入0FFH,破壞了P0口原來的狀態。因此,不能再作為通用的I/O埠。大家以後在系統設計時務必注意,即程式中不能再含有以P0口作為運算元(包含源運算元和目的運算元)的指令。

二、P1埠的結構及工作原理

P1口的結構最簡單,用途也單一,僅作為資料輸入/輸出埠使用。輸出的資訊有鎖存,輸入有讀引腳和讀鎖存器之分。P1埠的一位結構見下圖.


由圖可見,P1埠與P0埠的主要差別在於,P1埠用內部上拉電阻R代替了P0埠的場效電晶體T1,並且輸出的資訊僅來自內部匯流排。由內部匯流排輸出的資料經鎖存器反相和場效電晶體反相後,鎖存在埠線上,所以,P1埠是具有輸出鎖存的靜態口。

由上圖可見,要正確地從引腳上讀入外部資訊,必須先使場效電晶體關斷,以便由外部輸入的資訊確定引腳的狀態。為此,在作引腳讀入前,必須先對該埠寫入l。具有這種操作特點的輸入/輸出埠,稱為準雙向I/O口。8051微控制器的P1P2P3都是準雙向口。P0埠由於輸出有三態功能,輸入前,埠線已處於高阻態,無需先寫入l後再作讀操作。 P1口的結構相對簡單,前面我們已詳細的分析了P0口,只要大家認真的分析了P0口的工作原理,P1口我想大家都有能力去分析,這裡我就不多論述了。 微控制器復位後,各個埠已自動地被寫入了1,此時,可直接作輸入操作。如果在應用埠的過程中,已向P1P3埠線輸出過0,則再要輸入時,必須先寫1後再讀引腳,才能得到正確的資訊。此外,隨輸入指令的不同,H埠也有讀鎖存器與讀引腳之分。三、P2埠的結構及工作原理:

P2埠的一位結構見下圖:

點選看大圖


 PS:與門需要更換成非門,讀引腳的輸入端應連線到P0.X上

 由圖可見,P2埠在片內既有上拉電阻,又有切換開關MUX,所以P2埠在功能上兼有P0埠和P1埠的特點。這主要表現在輸出功能上,當切換開關向下接通時,從內部匯流排輸出的一位資料經反相器和場效電晶體反相後,輸出在埠引腳線上;當多路開關向上時,輸出的一位地址訊號也經反相器和場效電晶體反相後,輸出在埠引腳線上。

對於8031微控制器必須外接程式儲存器才能構成應用電路(或者我們的應用電路擴充套件了外部儲存器),而P2埠就是用來週期性地輸出從外存中取指令的地址(8位地址),因此,P2埠的多路開關總是在進行切換,分時地輸出從內部匯流排來的資料和從地址訊號線上來的地址。因此P2埠是動態的I/O埠。輸出資料雖被鎖存,但不是穩定地出現在埠線上。其實,這裡輸出的資料往往也是一種地址,只不過是外部RAM的高8位地址。在輸入功能方面,P2埠與P0H埠相同,有讀引腳和讀鎖存器之分,並且P2埠也是準雙向口。可見,P2埠的主要特點包括:不能輸出靜態的資料;自身輸出外部程式儲存器的高8位地址;執行MOVX指令時,還輸出外部RAM的高位地址,故稱P2埠為動態地址埠。

即然P2口可以作為I/O口使用,也可以作為地址匯流排使用,下面我們就不分析下它的兩種工作狀態。

1、作為I/O埠使用時的工作過程當沒有外部程式儲存器或雖然有外部資料儲存器,但容易不大於256B,即不需要高8位地址時(在這種情況下,不能通過資料地址暫存器DPTR讀寫外部資料儲存器),P2口可以I/O口使用。這時,控制訊號為“0”,多路開關轉向鎖存器同相輸出端Q,輸出訊號經內部匯流排鎖存器同相輸出端Q→反相器→V2管柵極→V29漏極輸出。由於V2漏極帶有上拉電阻,可以提供一定的上拉電流,負載能力約為8TTL與非門;作為輸出口前,同樣需要向鎖存器寫入“1”,使反相器輸出低電平,V2管截止,即引腳懸空時為高電平,防止引腳被鉗位在低電平。讀引腳有效後,輸入資訊經讀引腳三態閘電路到內部資料匯流排。

2、作為地址匯流排使用時的工作過程P2口作為地址匯流排時,控制訊號為‘1’,多路開關車向地址線(即向上接通),地址資訊經反相器→V2管柵極漏極輸出。由於P2口輸出高8位地址,與P0口不同,無須分時使用,因此P2口上的地址資訊(程式儲存器上的A15~A8)功資料地址暫存器高8DPH儲存時間長,無須鎖存。

四、P3埠的結構及工作原理

P3口是一個多功能口,它除了可以作為I/O口外,還具有第二功能,P3埠的一位結構見下圖。


點選看大圖


  由上圖可見,P3埠和Pl埠的結構相似,區別僅在於P3埠的各埠線有兩種功能選擇。當處於第一功能時,第二輸出功能線為1,此時,內部匯流排訊號經鎖存器和場效電晶體輸入/輸出,其作用與P1埠作用相同,也是靜態準雙向I/O埠。當處於第二功能時,鎖存器輸出1,通過第二輸出功能線輸出特定的內含訊號,在輸入方面,即可以通過緩衝器讀入引腳訊號,還可以通過替代輸入功能讀入片內的特定第二功能訊號。由於輸出訊號鎖存並且有雙重功能,故P3埠為靜態雙功能埠。

P3口的特殊功能(即第二功能):


口線


第二功能


訊號名稱


P3.0 


RXD 


序列資料接收


P3.1


TXD 


序列資料傳送


P3.2


INT0


外部中斷0申請


P3.3


INT1 


外部中斷1申請


P3.4


T0 


定時器/計數器0計數輸入


P3.5


T1 


定時器/計數器1計數輸入


P3.6


WR 


外部RAM寫選通


P3.7


RD


外部RAM讀選通

使P3端品各線處於第二功能的條件是:


1、序列I/O處於執行狀態(RXD,TXD);


2、打開了處部中斷(INT0,INT1);


3、定時器/計數器處於外部計數狀態(T0,T1)


4、執行讀寫外部RAM的指令(RD,WR)


在應用中,如不設定P3埠各位的第二功能(WR,RD信叼的產生不用設定),P3埠線自動處於第一功能狀態,也就是靜態IO埠的工作狀態。在更多的場合是根據應用的需要,把幾條埠線設定為第二功能,而另外幾條埠線處於第一功能執行狀態。在這種情況下,不宜對P3埠作位元組操作,需採用位操作的形式。


埠的負載能力和輸入/輸出操作:


P0埠能驅動8LSTTL負載。如需增加負載能力,可在P0總線上增加匯流排驅動器。P1P2P3埠各能驅動4LSTTL負載。前已述及,由於P0-P3埠已對映成特殊功能暫存器中的P0P3埠暫存器,所以對這些埠暫存器的讀/寫就實現了資訊從相應埠的輸入/輸出。例如:
MOV A
 P1 ;把Pl埠線上的資訊輸入到A
MoV P1
 A ;把A的內容由P1埠輸出
MOV P3
 #0FFH ;使P3埠線各位置

點選看大圖