單片機IO口結構及上拉電阻

2020-11-25 電子產品世界

MCS-51有4組8位I/O口:P0、P1、P2和P3口,P1、P2和P3為準雙向口,P0口則為雙向三態輸入輸出口,下面我們分別介紹這幾個口線。

本文引用地址:

http://www.eepw.com.cn/article/201611/320593.htm

一、P0口和P2口

圖1和圖2為P0口和P2口其中一位的電路圖。由圖可見,電路中包含一個數據輸出鎖存器(D觸發器)和兩個三態數據輸入緩衝器,另外還有一個數據輸出的驅動(T1和T2)和控制電路。這兩組口線用來作為CPU與外部數據存儲器、外部程序存儲器和I/O擴展口,而不能象P1、P3直接用作輸出口。它們一起可以作為外部地址總線,P0口身兼兩職,既可作為地址總線,也可作為數據總線。

圖1 單片機P0口內部一位結構圖

圖2 單片機P0口內部一位結構圖

P2口作為外部數據存儲器或程序存儲器的地址總線的高8位輸出口AB8-AB15,P0口由ALE選通作為地址總線的低8位輸出口AB0-AB7。外部的程序存儲器由PSEN信號選通,數據存儲器則由WR和RD讀寫信號選通,因為2^16=64k,所以MCS-51最大可外接64kB的程序存儲器和數據存儲器。

二、P1口

圖3為P1口其中一位的電路圖,P1口為8位準雙向口,每一位均可單獨定義為輸入或輸出口,當作為輸入口時,1寫入鎖存器,Q(非)=0,T2截止,內上拉電阻將電位拉至"1",此時該口輸出為1,當0寫入鎖存器,Q(非)=1,T2導通,輸出則為0。

圖3 單片機P2口內部一位結構圖

作為輸入口時,鎖存器置1,Q(非)=0,T2截止,此時該位既可以把外部電路拉成低電平,也可由內部上拉電阻拉成高電平,正因為這個原因,所以P1口常稱為準雙向口。

需要說明的是,作為輸入口使用時,有兩種情況:

1.首先是讀鎖存器的內容,進行處理後再寫到鎖存器中,這種操作即讀—修改—寫操作,象JBC(邏輯判斷)、CPL(取反)、INC(遞增)、DEC(遞減)、ANL(與邏輯)和ORL(邏輯或)指令均屬於這類操作。

2.讀P1口線狀態時,打開三態門G2,將外部狀態讀入CPU。


三、P3口

P3口的電路如圖4所示,P3口為準雙向口,為適應引腳的第二功能的需要,增加了第二功能控制邏輯,在真正的應用電路中,第二功能顯得更為重要。由於第二功能信號有輸入輸出兩種情況,我們分別加以說明。

圖4 單片機P0口內部一位結構圖

P3口的輸入輸出及P3口鎖存器、中斷、定時/計數器、串行口和特殊功能寄存器有關,P3口的第一功能和P1口一樣可作為輸入輸出埠,同樣具有字節操作和位操作兩種方式,在位操作模式下,每一位均可定義為輸入或輸出。

我們著重討論P3口的第二功能,P3口的第二功能各管腳定義如下:

·P3.0 串行輸入口(RXD)
·P3.1 串行輸出口(TXD)
·P3.2 外中斷0(INT0)
·P3.3 外中斷1(INT1)
·P3.4 定時/計數器0的外部輸入口(T0)
·P3.5 定時/計數器1的外部輸入口(T1)
·P3.6 外部數據存儲器寫選通(WR)
·P3.7 外部數據存儲器讀選通(RD)

對於第二功能為輸出引腳,當作I/O口使用時,第二功能信號線應保持高電平,與非門開通,以維持從鎖存器到輸出口數據輸出通路暢通無阻。而當作第二功能口線使用時,該位的鎖存器置高電平,使與非門對第二功能信號的輸出是暢通的,從而實現第二功能信號的輸出。對於第二功能為輸入的信號引腳,在口線上的輸入通路增設了一個緩衝器,輸入的第二功能信號即從這個緩衝器的輸出端取得。而作為I/O口線輸入端時,取自三態緩衝器的輸出端。這樣,不管是作為輸入口使用還是第二功能信號輸入,輸出電路中的鎖存器輸出和第二功能輸出信號線均應置「1」。

四、IO口工作原理


1. P0作為地址數據總線時,T1和T2是一起工作的,構成推挽結構。高電平時,T1打開,T2截止;低電平時,T1截止,T2打開。這種情況下不用外接上拉電阻.而且,當T1打開,T2截止,輸出高電平的時候,因為內部電源直接通過T1輸出到P0口線上,因此驅動能力(電流)可以很大,這就是為什麼教科書上說可以"驅動8個TTL負載"的原因。

2. P0作為一般埠時,T1就永遠的截止,T2根據輸出數據0導通和1截止,導通時拉地,當然是輸出低電平;要輸出高電平,T2就截止,P0口就沒有輸出了,(注意,這種情況就是所謂的高阻浮空狀態),如果加上外部上拉電阻,輸出就變成了高電平1。

3. 其他埠P1、P2和P3,在內部直接將P1口中的T1換成了上拉電阻,所以不用外接,但內部上拉電阻太大,電流太小,有時因為電流不夠,也會再並一個上拉電阻。

4. 在某個時刻,P0口上輸出的是作為總線的地址數據信號還是作為普通I/O口的電平信號,是依靠多路開關MUX來切換的。而MUX的切換,又是根據單片機指令來區分的。當指令為外部存儲器/IO口讀/寫時,比如 MOVX A,@DPTR ,MUX是切換到地址/數據總線上;而當普通MOV傳送指令操作P0口時,MUX是切換到內部總線上的。

5. P0、P1、P2、P3口用於輸入時,需要寫1使IO下拉的MOS管截止,以免MOS管導通將輸入拉底為0,當一直用於輸入時不用置1(先使用該IO輸出,該IO鎖存器裡可能是0,再用該IO輸入則會使MOS管導通),將IO寫1後,該IO鎖存器不會變了,所以再一直用於輸入不用置1。p0用於地址數據線時輸入不用寫1,因為MUX沒和鎖存器相連。

PS:
Because Ports 1, 2, and 3 have fixed internal pullups, they are sometimes called 「quasi- bidirectional」 ports.

因為埠1、2、3有固定的內部上拉,所以有時候他們被稱為"準雙向"口。

Port 0, on the other hand, is considered 「true」 bidirectional, because when configured as an input it floats.

埠0, 從另外一方面來說,就被 認為是"真正的"雙向,因為當它被設置為輸入的時候是浮空(高阻態)的。

五、P0口上拉電阻選擇

如果是驅動led,那麼用1K左右的就行了。如果希望亮度大一些,電阻可減小,最小不要小於200歐姆,否則電流太大;如果希望亮度小一些,電阻可增大,增加到多少呢,主要看亮度情況,以亮度合適為準,一般來說超過3K以上時,亮度就很弱了,但是對於超高亮度的LED,有時候電阻為10K時覺得亮度還能夠用。我通常就用1k的。

對於驅動光耦合器,如果是高電位有效,即耦合器輸入端接埠和地之間,那麼和LED的情況是一樣的;如果是低電位有效,即耦合器輸入端接埠和VCC之間,那麼除了要串接一個1——4.7k之間的電阻以外,同時上拉電阻的阻值就可以用的特別大,用100k~500K之間的都行,當然用10K的也可以,但是考慮到省電問題,沒有必要用那麼小的。

對於驅動電晶體,又分為PNP和NPN管兩種情況:對於NPN,毫無疑問NPN管是高電平有效的,因此上拉電阻的阻值用2K~20K之間的,具體的大小還要看電晶體的集電極接的是什麼負載,對於LED類負載,由於發管電流很小,因此上拉電阻的阻值可以用20k的,但是對於管子的集電極為繼電器負載時,由於集電極電流大,因此上拉電阻的阻值最好不要大於4.7K,有時候甚至用2K的。對於PNP管,毫無疑問PNP管是低電平有效的,因此上拉電阻的阻值用100K以上的就行了,且管子的基極必須串接一個1~10K的電阻,阻值的大小要看管子集電極的負載是什麼,對於LED類負載,由於發光電流很小,因此基極串接的電阻的阻值可以用20k的,但是對於管子的集電極為繼電器負載時,由於集電極電流大,因此基極電阻的阻值最好不要大於4.7K。

對於驅動TTL集成電路,上拉電阻的阻值要用1~10K之間的,有時候電阻太大的話是拉不起來的,因此用的阻值較小。但是對於CMOS集成電路上拉電阻的阻值就可以用的很大,一般不小於20K,我通常用100K的,實際上對於CMOS電路,上拉電阻的阻值用1M的也是可以的,但是要注意上拉電阻的阻值太大的時候,容易產生幹擾,尤其是線路板的線條很長的時候,這種幹擾更嚴重,這種情況下上拉電阻不宜過大,一般要小於100K,有時候甚至小於10K。

相關焦點

  • AVR單片機IO口結構和上拉和下拉電阻的作用
    為搞清IO結構,首先看看上拉和下拉電阻的作用。)  3、為加大輸出管腳的驅動能力,單片機的引腳常接入上拉電阻,(AVR單片機可配置是否接上拉,51單片機P1 P2 P3均帶上拉,P0口不帶,所以用P0口做按鍵,液晶等應用時要自己加上上拉電阻,否則無法使用切記)  4、CMOS晶片上為防止靜電破壞,不用的管腳不能懸空,需要接上拉電阻降低輸入阻抗,提供洩荷通路。
  • 什麼是上拉電阻?51單片機P0口上的上拉電阻有什麼用?
    這次簡單說說上拉電阻,那問題來了,什麼是上拉電阻?上拉電阻從概念上理解就是一個電阻一端接到電源正極,一端接到輸出端。下圖就是一個簡單的上拉電阻,如果沒有這個電阻R,則I/O口和VCC就沒有直接連接關係,如果用電阻連接起來就是一個上拉電阻。
  • 關於單片機上拉電阻
    由於P0口內部沒有上拉電阻,是開漏的,不管它的驅動能力多大,相當於它是沒有電源的,需要外部的電路提供,絕大多數情況下P0口是必需加上拉電阻的。
  • 51單片機總結——上拉電阻
    這個跟單片機P0口加上拉電阻的原理一樣。  (2)提高高電平電位:  單片機P1口外接4×4矩陣鍵盤。另外復用P1.0~P1.3外接ULN2003控制驅動步進電機。  實驗中遇到的問題:當接入ULN2003時鍵盤無法工作,去掉ULN2003後鍵盤工作正常。ULN2003工作正常。
  • 單片機 | P0口什麼時候使用上拉電阻?
    由於P0口內部沒有上拉電阻,是開漏的,不管它的驅動能力多大,相當於它是沒有電源的,需要外部的電路提供。絕大多數情況下,P0口是必須加上拉電阻的。一般51單片機的P0口在作為地址/數據復用時不接上拉電阻。
  • 怎麼解決引腳單片機的上拉電阻問題?
    而當這些引腳「輸出高電平」的時候,單片機的「拉電流」能力呢?可以說是太差了,竟然不到 1 mA。結論就是:單片機輸出低電平的時候,驅動能力尚可,而輸出高電平的時候,就沒有輸出電流的能力。這個結論是依照手冊中給出的數據做出來的。51 單片機的這些特性,是源於引腳的內部結構,引腳內部結構圖這裡就不畫了,很多書中都有。
  • 51單片機驅動能力(拉電流_灌電流)及上拉電阻
    51 單片機的這些特性,是源於引腳的內部結構,引腳內部結構圖這裡就不畫了,很多書中都有。在晶片的內部,引腳和地之間,有個三極體,所以引腳具有下拉的能力,輸出低電平的時候,允許灌入 10mA 的電流;而引腳和正電源之間,有個幾百K的「內部上拉電阻」,所以,引腳在高電平的時候,能夠輸出的拉電流很小。
  • stc單片機IO口輸入輸出方式
    IO口的四種使用方法從I/O口的特性上看,標準51的P0口在作為I/O口使用時,是開漏結構,在實際應用中通常要添加上拉電阻;P1、P2、P3都是準雙向I/O,內部有上拉電阻,既可作為輸入又可以作為輸出。
  • 單片機IO口科普:推輓輸出、開漏輸出詳解
    什麼是開漏輸出  開漏輸出只能輸出低電平,如果要輸出高電平必須通過上拉電阻才能實現。就類似於三極體的集電極輸出。  4. IO口其實是沒有驅動能力的,需要外部連接上拉電阻才能輸出高電平,才能驅動數字器件;  內部輸出0時MOS管導通,輸出低電平,所以開漏能輸出低電平;  5.
  • 單片機小白學步(23) IO口原理知識補充:雙向IO口 互補推挽
    K2閉合K1打開,就會輸出高電平,並且其驅動能力很大,因為電子開關的阻值小(不像上拉電阻的值那麼大)。反之K2打開,K1閉合,就會輸出低電平。兩個開關交替導通,互為補充,「挽」是「拉」的意思,兩個電子開關分別負責在IO口輸出處「推」和「拉」電流,所以稱為互補推挽。這種IO口結構的優點很明顯,驅動能力強,穩定可靠。
  • 單片機驅動LED中上拉電阻的問題
    ——LED——限流電阻——P口,P口為低電位發光管滅的時候沒有電流流過,P口為高電位或高阻狀態共陰接法,LED負端接地,正端直接P口,這時候要接上拉電阻,這個上拉電阻是提供LED發光用的,發光管亮的時候電流是從電源正——上拉電阻——LED——地。
  • 如何將單片機的上拉電阻配置為上拉輸入模式
    1.什麼是上拉電阻 在學習單片機的時候,我們經常遇到一組名詞:上拉電阻和下拉電阻,通過學習我們知道上下拉電阻不僅能使當前電平穩定避免受到幹擾,同時上拉電阻還能提高單片機的驅動能力。 閱讀擴展:什麼是單片機的上拉電阻?點擊閱讀。 2.
  • 什麼是上拉電阻,下拉電阻?
    上拉電阻下面我先說說最為常見的上拉電阻,我們所說的上拉電阻其實就是將不確定的信號通過一個電阻拉到高電平,有時這個電阻也能起到一個限流作用。比如我們常見的單片電路中,我記得在以51為內核的單片機中有一組P0口,在使用這組P0口時它的外面就需要加一排10K的電阻,我們就稱為這些電阻叫上拉電阻。
  • 單片機上拉電阻應用及阻值選擇原則
    2、OC門電路「必須加上拉電阻,才能使用」。 3、為加大輸出引腳的驅動能力,有的單片機管腳上也常使用上拉電阻。 4、在COMS晶片上,為了防止靜電造成損壞,不用的管腳不能懸空,一般接上拉電阻產生降低輸入阻抗,提供洩荷通路。
  • 51單片機IO埠基礎知識及應用
    本文就來說下89C51單片機的引腳IO埠及應用,學習單片機的IO口的應用也是入門單片機的第一步。上圖是89C51單片機的封裝引腳圖,89C51單片機有4個IO埠為P0~P3,每個埠有8個引腳,分別對應8個位0~7,每個埠的引腳都可以作為輸入輸出使用。
  • 單片機上拉電阻、下拉電阻詳解
    是不是經常聽別人講,加個上拉電阻試試看,加個下拉電阻試試看,是不是還在疑惑上下拉電阻是什麼,該怎麼用,什麼時候用,有什麼用途?
  • 一文讓你讀懂上拉電阻與下拉電阻
    一文讓你讀懂上拉電阻與下拉電阻 玩轉單片機 發表於 2021-01-02 17:01:00   上拉(Pull Up )或下拉(Pull Down)電阻(兩者統稱為「拉電阻」)最基本的作用是:將狀態不確定的信號線通過一個電阻將其箝位至高電平
  • 深入了解上拉電阻和下拉電阻
    上拉電阻和下拉電阻是經常提到也是經常用到的電阻。在每個系統的設計中都用到了大量的上拉電阻和下拉電阻。在節點與+5V之間接10K歐或4.7K歐的上拉電阻,能夠把這個節點的電位拉上來,往往這個節點要求應用單片機或其它控制器來控制它(及這個節點與I/O連接)為高電平或低電平。如果單純的想要使這個節點成為高電平,並且輸出阻抗非常大,則直接接電源也無妨,但是如果單片機要使這個節點拉低,即單片機內部使節點接地,這樣5V電源和地之間就短路了。
  • 單片機的外部結構-引腳功能
    內部不帶上拉電阻,當外接上拉電阻時,P0口能以吸收電流的方式驅動八個LSTTL負載電路。通常在使用時外接上拉電阻,用來驅動多個數碼管。在訪問外部程序和外部數據存儲器時,P0口是分時轉換的地址(低8位)/數據總線,不需要外接上拉電阻。
  • 單片機小白學步(22) IO口:蜂鳴器的使用/三極體的工作原理
    前面我們說了,單片機IO口能通過的電流是有限的,過大的電流可能會燒壞管腳,或者不能正常工作。蜂鳴器和LED相比最主要的區別,就是蜂鳴器比LED需要的電流大很多,電壓一般也會高一些。為了讓單片機驅動蜂鳴器,也就是控制蜂鳴器工作,我們需要使用一些特別的電路。不知道大家是否了解繼電器,繼電器的特點就是用小電流低電壓,控制大電流高電壓電路。