**
一、p0埠的結構及工作原理
p0埠8位中的一位結構圖見下圖:
由上圖可見,p0埠由鎖存器、輸入緩衝器、切換開關、乙個與非門、乙個與門及場效電晶體驅動電路構成。再看圖的右邊,標號為p0.x引腳的圖示,也就是說p0.x引腳可以是p0.0到p0.7的任何一位,即在p0口有8個與上圖相同的電路組成。
下面,我們先就組成p0口的每個單元部份跟大家介紹一下:
先看輸入緩衝器:在p0口中,有兩個三態的緩衝器,在學數位電路時,我們已知道,三態門有三個狀態,即在其的輸出端可以是高電平、低電平,同時還有一種就是高阻狀態(或稱為禁止狀態),大家看上圖,上面乙個是讀鎖存器的緩衝器,也就是說,要讀取d鎖存器輸出端q的資料,那就得使讀鎖存器的這個緩衝器的三態控制端(上圖中標號為『讀鎖存器』端)有效。下面乙個是讀引腳的緩衝器,要讀取p0.x引腳上的資料,也要使標號為『讀引腳』的這個三態緩衝器的控制端有效,引腳上的資料才會傳輸到我們微控制器的內部資料匯流排上。
d鎖存器:構成乙個鎖存器,通常要用乙個時序電路,時序的單元電路在學數位電路時我們已知道,乙個觸發器可以儲存一位的二進位制數(即具有保持功能),在51微控制器的32根i/o口線中都是用乙個d觸發器來構成鎖存器的。大家看上圖中的d鎖存器,d端是資料輸入端,cp是控制端(也就是時序控制訊號輸入端),q是輸出端,q非是反向輸出端。
對於d觸發器來講,當d輸入端有乙個輸入訊號,如果這時控制端cp沒有訊號(也就是時序脈衝沒有到來),這時輸入端d的資料是無法傳輸到輸出端q及反向輸出端q非的。如果時序控制端cp的時序脈衝一旦到了,這時d端輸入的資料就會傳輸到q及q非端。資料傳送過來後,當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(低電平),看上圖中的線線部份,多路開關的控制訊號同時與與門的乙個輸入端是相接的,我們知道與門的邏輯特點是「全1出1,有0出<?xml:namespace prefix = st1 />0」
那麼控制訊號是0的話,這時與門輸出的也是乙個0(低電平),與讓的輸出是0,v1管就截止,在多路控制開關的控制訊號是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的狀態,請看下圖(紅色箭頭):
在輸入狀態下,從鎖存器和從引腳上讀來的訊號一般是一致的,但也有例外。例如,當從內部匯流排輸出低電平後,鎖存器q=0,q非=1,場效電晶體t2開通,埠線呈低電平狀態。此時無論埠線上外接的訊號是低電乎還是高電平,從引腳讀入微控制器的訊號都是低電平,因而不能正確地讀入埠引腳上的訊號。又如,當從內部匯流排輸出高電平後,鎖存器q=1,q非=0,場效電晶體t2截止。如外接引腳訊號為低電平,從引腳上讀入的訊號就與從鎖存器讀入的訊號不同。為此,8031微控制器在對埠p0一p3的輸入操作上,有如下約定:為此,8051微控制器在對埠p0一p3的輸入操作上,有如下約定:凡屬於讀-修改-寫方式的指令,從鎖存器讀入訊號,其它指令則從埠引腳線上讀入訊號。
讀-修改-寫指令的特點是,從埠輸入(讀)訊號,在微控制器內加以運算(修改)後,再輸出(寫)到該埠上。下面是幾條讀--修改-寫指令的例子。
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微控制器的匯流排口,分時出現資料d7一d0、低8位位址a7一ao,以及三態,用來介面儲存器、外部電路與外部裝置。p0埠是使用最廣泛的i/o埠。
2、作為位址/資料復用口使用時的工作原理
在訪問外部儲存器時p0口作為位址/資料復用口使用。
這時多路開關『控制』訊號為『1』,『與門』解鎖,『與門』輸出訊號電平由「位址/資料」線訊號決定;多路開關與反相器的輸出端相連,位址訊號經「位址/資料」線→反相器→v2場效電晶體柵極→v2漏極輸出。
例如:控制訊號為1,位址訊號為「0」時,與門輸出低電平,v1管截止;反相器輸出高電平,v2管導通,輸出引腳的位址訊號為低電平。請看下圖(蘭色字型為電平):
反之,控制訊號為「1」、位址訊號為「1」,「與門」輸出為高電平,v1管導通;反相器輸出低電平,v2管截止,輸出引腳的位址訊號為高電平。請看下圖(蘭色字型為電平):
可見,在輸出「位址/資料」資訊時,v1、v2管是交替導通的,負載能力很強,可以直接與外設儲存器相連,無須增加匯流排驅動器。
p0口又作為資料匯流排使用。在訪問外部程式儲存器時,p0口輸出低8位位址資訊後,將變為資料匯流排,以便讀指令碼(輸入)。
在取指令期間,「控制」訊號為「0」,v1管截止,多路開關也跟著轉向鎖存器反相輸出端q非;cpu自動將0ffh(11111111,即向d鎖存器寫入乙個高電平『1』)寫入p0口鎖存器,使v2管截止,在讀引腳訊號控制下,通過讀引腳三態閘電路將指令碼讀到內部匯流排。請看下圖
如果該指令是輸出資料,如movx @dptr,a(將累加器的內容通過p0口資料匯流排傳送到外部ram中),則多路開關「控制」訊號為『1』,「與門」解鎖,與輸出位址訊號的工作流程類似,資料據由「位址/資料」線→反相器→v2場效電晶體柵極→v2漏極輸出。
如果該指令是輸入資料(讀外部資料儲存器或程式儲存器),如movx a,@dptr(將外部ram某一儲存單元內容通過p0口資料匯流排輸入到累加器a中),則輸入的資料仍通過讀引腳三態緩衝器到內部匯流排,其過程類似於上圖中的讀取指令碼流程圖。
通過以上的分析可以看出,當p0作為位址/資料匯流排使用時,在讀指令碼或輸入資料前,cpu自動向p0口鎖存器寫入0ffh,破壞了p0口原來的狀態。因此,不能再作為通用的i/o埠。大家以後在系統設計時務必注意,即程式中不能再含有以p0口作為運算元(包含源運算元和目的運算元)的指令。
UART序列口工作原理
通過非同步收發器 uart 用來傳輸序列資料。uart之間以全雙工方式傳輸資料,最精簡的連線方法只有三條連線 txd用於傳送資料,rxd用於接收資料,gnd給雙方提供參考電平。uart使用標準的cmos邏輯電平 0 5v 0 3.3v 0 2.5v或0 1.8v四種 來表示資料,高電平為1,低電平為...
高阻態與I 0口工作狀態
首先要明確一點,電路中無論是高還是低的 阻 態,都是相對於某個參考點而言的,明確了這一點i o口的工作狀態理解起來就簡單了。上一張atmel的8051硬體手冊裡面的圖。上圖中可以很明顯地看到,沒有 上拉電阻 的p0口相比有 上拉電阻 internal pull up 的p1口在i o口引腳 p0.x...
安全 P 5 1 CSRF原理介紹
csrf cross site request forery,跨站請求偽造 也被稱為one click attack或者session riding,通常縮寫為csrf或者xsrf。xss與csrf區別 1 xss利用站點內的信任使用者,盜取cookie 2 csrf通過偽裝成受信任使用者請求受信任...