微控制器中 讀引腳 和 讀鎖存器 的區別

2021-08-25 02:42:01 字數 1260 閱讀 4923

要搞清這個問題,就要明白p0口的內部結構。p0口是由鎖存器經兩個驅動場效電晶體和外部引腳相連的。

讀引腳的意思就是直接讀p0外部引腳的電位,而讀埠(鎖存器)讀的是內部與資料匯流排鏈結的鎖存器的電位。

兩者不同。一般來說,讀取p0的資料,都是讀引腳,目的是獲取與p0相連的外部電路的狀態。而讀埠是在執行下述語句時由cpu自行完成的:

inc p0;給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埠(鎖存器)的真實狀態了。

實際上不光是p0口,所有口都需要區分的。

這裡問題的關鍵是:你想讀到什麼?是你事先通過指令寫入口鎖存器中的數,還是由外部電路決定的口線的高低電平。因為這兩個數有可能是不一樣的。

io口的輸出鎖存器是通過控制乙個電晶體是否對地導通連線到口的對外引腳上的,該電晶體的c極通過上拉電阻接vcc(當然p0口的上拉電阻需要外部加上,其它口內部已經有大約40k的弱上拉)。

於是會出現這樣一種情況,例如你向某條口線寫了1,鎖存器的值是就是1,當然此時對應的電晶體截止,由於有上拉電阻,所以口線應該也是1(高電平),但如果你的口線是控制乙個外部npn電晶體的通斷,上拉電阻就相當於那個電晶體的基極電阻,於是它會導通。向口寫0則口線會變低(<0.3v),它會截止,這都很正常。

問題是,當口鎖存器輸出1時,由於外部電晶體be結導通,電壓只有0.7v(也就是口線或者說口的引腳的電壓只有0.7v),此時你讀入鎖存器時得到的是1,但讀引腳時會得到0(至少要大於2.4v才算高電平)。例如你想改變該控制訊號的狀態,通常是先讀入,取反,然後再寫出,此時必須是讀入鎖存器才能實現正確的操作!如果是讀引腳,本來輸出的是1,讀入的(引腳)卻是0,取反後得1,狀態是不會改變的!

關於51微控制器讀鎖存器 讀引腳的問題

80c51微控制器有p0 p3四個p口,以p0為例說明 要搞清這個問題,就要明白p0口的內部結構。p0口是由鎖存器經兩個驅動場效電晶體和外部引腳相連的。讀引腳的意思就是直接讀p0外部引腳的電位,而讀埠 鎖存器 讀的是內部與資料匯流排鏈結的鎖存器的電位。兩者不同。一般來說,讀取p0的資料,都是讀引腳,...

微控制器引腳為什麼有讀鎖存器和讀引腳兩個選項?

要解答這個問題,我們先考慮一種情況,假如我們要對p0.1引腳輸出 賦值 為1,那麼微控制器內部是如何工作的?我的分析如下 我們知道,引腳屬於io裝置,微控制器內部cpu是通過位址匯流排,資料匯流排,控制匯流排對其進行賦值的,也就是說cpu不可能只對p0.1賦值,應該是對整個p0埠整體賦值,但是我們確...

振盪器51微控制器 MCS 51微控制器的引腳

對於微控制器的學習,其內部結構及功能可以從引腳功能開始學習。此處mcs 51採用40只引腳雙列直插封裝。40只引腳按其功能分類,可分為3類 1 電源及時鐘引腳 vcc vss xtal1 xtal2。2 控制引腳 psen ea ale reset rst 3 i o口引腳 p0 p1 p2 p3為...