1. 程式人生 > >基於proteus的51微控制器模擬例項十、51微控制器的P0口的工作原理

基於proteus的51微控制器模擬例項十、51微控制器的P0口的工作原理

微控制器系統功能實現的最基本和最主要方式是:檢測I/O埠輸入的各種資料、控制I/O埠輸出各種資料。

微控制器系統的工作過程通常是:外部電路的執行情況通過I/O埠輸入到微控制器,微控制器程式讀取輸入的資料並進行分析後,根據不同情況控制I/O埠輸出不同的資料,從而實現控制相關外圍電路執行相應操作的功能。

所以,學習微控制器的第一步就是學會如何讓微控制器的I/O口實現輸入和輸出功能。

本例實現用微控制器的P0口控制8LED點亮和熄滅,實現流水燈的效果。

通過這個例項,瞭解以下知識:

硬體電路:LED的工作原理及控制電路;

程式設計:編寫程式,控制微控制器I/O口輸出電平的高低。

151微控制器的引腳(埠)

微控制器是通過它的一個個引腳來實現對外部事件的檢測和控制的,所以拿到一個微控制器時,首先應對它的管腳進行分析。只有弄清楚一個微控制器的各個管腳的功能和作用,才能夠實現外圍電路的設計和程式設計。

251微控制器管腳的分類和功能介紹

AT89C51微控制器共有40個引腳,按照各自功能可以分為三類:電源和時鐘引腳、系統控制引腳、輸入/輸出引腳(也即I/O口)。下面分別介紹:

1)電源和時鐘引腳:這些引腳主要為微控制器系統提供工作電源和時鐘訊號,包括電源和地引腳VCC40腳)、GND20腳),時鐘訊號輸入輸出引腳XTAL119腳)、XTAL218腳)

2)系統控制引腳:系統控制改制引腳有:PSEN29腳),EA/VPP31腳), ALE30腳),RST9腳),功能分別是:

PSEN 外部程式儲存器讀選通訊號:在讀外部ROMPSEN低電平有效,以實現外部ROM單元的讀操作。

EA/VPP 

訪問程式序儲存器控制訊號。

ALE 地址鎖存控制訊號。

RST 復位訊號:當輸入的訊號連續2個機器週期以上高電平時即為有效,用以完成微控制器的復位初始化操作。

3)輸入/輸出引腳(I/O口)

AT89S52微控制器有48位的I/O口,分別是P0P0.0~P0.7,引腳39-32),P1P1.0~P1.7,引腳1-8),P2P2.0~P2.7,引腳21-28),P3P3.0~P3.7,引腳10-17)。這4I/O埠的結構功能各不相同,本例中用到的是P0口,我們先講解P0口的工作原理,另外3I/O埠的工作原理將在後面逐步瞭解。

P0口有三個功能:外部擴充套件儲存器時,當做資料匯流排
外部擴充套件儲存器時,當作地址匯流排
不擴充套件時,

可做一般的I/O使用,但內部無上拉電阻,作為輸入或輸出時應在外部接上拉電阻。

在平時的應用中,外擴儲存器的情況不是很多,所以我們這裡著重瞭解P0口作為I/O口時的工作原理。

3、P0口的結構和工作原理

P0口有8位,分別對應P0-P7這8個引腳,下圖是其中一個引腳的內部結構圖。從圖中可以看出,該引腳內部包括1個輸出鎖存器、2個三態緩衝器、1個輸出驅動電路1個輸出控制端。

輸出驅動電路有兩個場效電晶體組成,其工作狀態受輸出端的控制。

輸出控制端由1個與門、一個反相器和一個多路轉換開關組成。


我們先來分析組成P0口的每個單元部份:
輸入緩衝器:在P0口中,有兩個三態的緩衝器,所謂的三態,是指在緩衝器的輸出端可以輸出高電平、低電平、高阻態(禁止狀態)這三種狀態,在上圖中,在讀鎖存器埠,要讀取D鎖存器輸出端Q的資料,必須使使讀鎖存器的這個緩衝器的三態控制端(圖中標號為‘讀鎖存器’端)有效。而在讀引腳埠,要讀取P0.i引腳上的資料,也要使標號為‘讀引腳’的這個三態緩衝器的控制端有效,這樣引腳上的資料才會傳輸到微控制器的內部資料匯流排上。

D鎖存器:構成一個鎖存器,通常要用一個時序電路,我們知道,一個觸發器可以儲存一位的二進位制數(即具有保持功能),在51微控制器的32根I/O口線中都是用一個D觸發器來構成鎖存器的。上圖中的D鎖存器,D端是資料輸入端,CL是控制端(即時序控制訊號輸入端),Q是輸出端,/Q是反向輸出端。 
對於D觸發器來講,當D輸入端有一個輸入訊號,如果這時控制端CL沒有訊號(也就是時序脈衝沒有到來),這時輸入端D的資料是無法傳輸到輸出端Q及反向輸出端Q非的。一旦時序控制端CL的時序脈衝到了,D端輸入的資料就會傳輸到Q及Q非端。資料傳送過來後,當CL時序控制端的時序訊號消失了,輸出端還會保持著上次輸入端D的資料(即把上次的資料鎖存起來了)。如果下一個時序控制脈衝訊號來了,這時D端的資料才再次傳送到Q端,從而改變Q端的狀態。
多路開關:在51微控制器中,當內部的儲存器夠用(不需要外擴充套件儲存器時,這裡說的儲存器包括資料儲存器及程式儲存器)時,P0口可以作為通用的輸入輸出埠(即I/O口)使用,當需要外擴儲存器時,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(低電平,即多路開關向下閉合),在上圖中,多路開關的控制訊號同時與與門的一個輸入端相連,與門的邏輯特點是“全1出1,有0出0”,那麼如果控制訊號是0的話,這時與門輸出的也是一個0(低電平),由於該與門的輸出是0,V1管就截止,在多路控制開關的控制訊號是0(低電平)時,多路開關是與鎖存器的/Q端相接的(即P0口作為I/O口線使用)。 
P0口用作I/O口線時,由資料匯流排向引腳輸出(即輸出狀態Output)的工作過程是:當寫鎖存器訊號CL有效,資料匯流排的訊號→鎖存器的輸入端D→鎖存器的反向輸出端/Q→多路開關→V2管的柵極→V2的漏極到輸出埠P0.i。前面已經介紹,當多路開關的控制訊號為低電平0時,與門輸出為低電平,V1管截止,所以作為輸出口時,P0是漏極開路輸出,類似於OC門,也就是說,當資料匯流排輸出0時,V2導通,則引腳直接接到地,輸出的電平自然就是低電平了,但是當資料匯流排輸出1時,V2截止,由於這時V也截止了,這時引腳既沒有接高電平VCC,也沒有接低電平GND,相當於處在一個懸空狀態。但是我們的目的是要輸出高電平,這時就需要在引腳上外接上拉電阻,確保資料匯流排輸出1時,引腳也輸出高電平(這就是我們平時說P0口需要接上拉電阻的原因)。

下圖就是由內部資料匯流排向P0口輸出資料的資料流向圖(黑色加粗箭頭指示)。

 

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

P0口做輸入埠時,輸入訊號將被送到讀引腳的三態緩衝器和V2的漏極,如果鎖存器之前鎖存的是訊號“0”,那麼VT2導通,這時無論引腳上的電平訊號是高電平還是低電平,由於引腳直接與地相連,都只能讀到“0”。所以,在讀取引腳的輸入訊號之前,需要先通過內部資料匯流排向鎖存器寫入“1”訊號,使V2截止,這時才能爭取讀取到引腳上的輸入訊號(這就是常說的在讀P0引腳輸入訊號前,先要向該引腳輸出訊號”1“的原因

 

2、讀鎖存器
通過開啟讀鎖存器三態緩衝器讀取鎖存器輸出端Q的狀態,如下圖所示(黑色加粗箭頭指示):


    在輸入狀態下,從鎖存器和從引腳上讀來的訊號一般是一致的,但也有例外。例如,當從內部匯流排輸出低電平後,鎖存器Q=0,/Q=1,場效電晶體T2開通,埠呈低電平狀態。此時無論埠線上外接的訊號是低電乎還是高電平,從引腳讀入微控制器的訊號都是低電平,因而不能正確地讀入埠引腳上的訊號。又如,當從內部匯流排輸出高電平後,鎖存器Q=1,Q非=0,場效電晶體T2截止。如外接引腳訊號為低電平,從引腳上讀入的訊號就與從鎖存器讀入的訊號不同。因此,51微控制器在對埠P0一P3的輸入操作上,需要注意:凡屬於讀-修改-寫方式的指令,從鎖存器讀入訊號,其它指令則從埠引腳線上讀入訊號。 
讀-修改-寫指令的特點是,從埠輸入(讀)訊號,在微控制器內加以運算(修改)後,再輸出(寫)到該埠上。這樣安排的原因在於讀-修改-寫指令需要得到埠原輸出的狀態,修改後再輸出,讀鎖存器而不是讀引腳,可以避免因外部電路的原因而使原埠的狀態被讀錯。