1樓:貊蕊泥丁
要搞清這個問題,就要明白p0口的內部結構。p0口是由鎖存器。
經兩個驅動場效電晶體。
和外部引腳相連的。
讀引腳的意思就是直接讀p0外部引腳的電位,而讀埠(鎖存器)讀的是內部與資料匯流排。
鏈結的鎖存器的電位。
兩者不同。一般來說,讀取p0的資料,都是讀引腳,目的是獲取與p0相連的外部電路的狀態。而讀埠是在執行下述語句時由cpu自行完成的:
incp0;給p0加1
執行這個語句時。
採用「讀-改-寫」的過程,先讀取p0的埠資料,再加1,然後送到p0鎖存器裡。注意這個埠資料跟p0的引腳狀態不一樣,比如你事先給p0寫進69h,p0裡資料就是69h,而引腳上的狀態因為你沒有執行mov
a,p0之類的指令,它是不會進到p0的鎖存器裡去的。由此可見,所謂的讀埠,不是讀取p0的狀態,而是在執行inc之類的指令時由cpu自行完成的,讀引腳就是讀取p0口狀態了。讀引腳時要注意:
先要給p0寫ffh,使它的場效電晶體t2和地斷開。
因為p0口的場效電晶體t2一端接地,一端與外部引腳相連,由p0的鎖存器控制,當給鎖存器寫1時,它和地斷開,寫0時和地相連,所以寫零時讀到的總是低電平。
試想你現在要讀p0引腳,按理說p0與外部電路相連,外部電路的是什麼狀態,就應該讀到什麼,但如果p0口的場效電晶體t2一端接地的話,它會把p0口電位拉低,你讀到的總是低電平0,所以要先給p0寫ffh,把p0的場效電晶體t2和地斷開,再讀數時就是真實狀態了。當外部電路斷開,再讀時讀到的就是p0埠(鎖存器)的真實狀態了。
還不明白給hychyc_2008發訊息,或給hychyc_發郵件。
2樓:盧望亭牢卿
是p0口的8位雙向口線。第一功能為基本輸入輸出;第二功能是在系統擴充套件時,分時做為資料總路線和低8位位址匯流排。
它由乙個輸出鎖存器、兩個三態鎖存器)、輸出控制電路(乙個非門(3)、乙個與門(4)、乙個多路控制開關(mux))、輸出驅動電路(兩隻場效電晶體q1、q2)組成。
功能1:做基本i/o口使用。
cpu發出的控制訊號為低電平,使多路控制開關mux接通b端,即與輸出鎖存器的「!q」連線,同時使與門輸出為低電平,場效電晶體q1截止。
當p0輸出資料時,寫訊號加在鎖存器的r引腳上,內部匯流排上的資料通過s腳由鎖存器的「!q」端反相輸出到q2的柵極。若內部匯流排上資料為1,則q2柵極上為0,此時q2截止,q2處於漏極開路的開漏狀態,因此為了保證輸出高電平,必須外接上拉電阻,否則p0埠不能正常工作!
若內部匯流排上資料為0,則q2柵極為1,此時q2導通,輸出低電平。
當p0輸入資料時,分為讀引腳和讀鎖存器兩種方式,分別用到兩個輸入緩衝器。
讀引腳操作,即微控制器執行埠輸入指令(如mov
a,p0)時的操作。這時由「讀引腳」訊號將三態緩衝器2開啟,引腳上的資料經三態緩衝器2輸入到內部匯流排。
讀鎖存器操作,即微控制器執行「讀—修改—寫」類指令(如anl
a,p0)時的操作。在執行這類指令時,由「讀鎖存器」訊號使三態鎖存器1開啟,讀入p0口在鎖存器中的資料,然後與累加器a中的資料進行邏輯運算,再反結果寫回到p0口。這類操作不直接從p0口引腳上讀入資料,而是從鎖存器q端讀資料,其目的是為了防止出錯,確保得到正確結果。
關於51微控制器P0管腳的電平問題
純粹是忽悠人。微控制器的p0口是沒有上拉的。所以就算是賦值高電平也不會輸出高電平。除非外接上拉電阻。還有,p0 p3口的暫存器都是帶鎖存的。即使程式只跑一遍,只要不修改鎖存器的值,輸出就不會發生變化。你確定你正確的燒寫進去了?還有,你的硬體電路中,p0口是不是外接有排阻?我想肯定有。就算你燒進去了,...
51微控制器P0口不用上拉電阻也能工作嗎 比如說驅動數碼管等
傳統的51微控制器p0口的電流驅動能力較弱。如果用來驅動數碼管 多段的led 建回議增加外部的驅動器 用51微控制器答的p0口驅動外部驅動器,再由外部驅動器驅動數碼管。這時p0口可以不用上拉電阻。外部驅動器可以是三極體或積體電路 糾正!p0口做輸出時,需要加上拉電阻,否則不能輸出高電平,不能輸出高就...
微控制器P0口作為三極體的基極時可以不加上拉電阻嗎電
只有一個三極體的話,完全可以可以。微控制器p0口作為三極體的基極時可以不加上拉電阻嗎電阻嗎?為什麼51微控制器p0口要接上拉電阻?從零學51微控制器2 什麼是上拉電阻?p0口為什麼要加上拉電阻?非常詳細深入的講解,不容錯過。簡單的說,p0輸出高電平時,由於內部結構,只能輸出高阻態。所以外接上拉電阻。...