單片機(jī)P0端口的結(jié)構(gòu)及工作原理
P0端口8位中的一位結(jié)構(gòu)圖見下圖:
由上圖可見,P0端口由鎖存器、輸入緩沖器、切換開關(guān)、一個(gè)與非門、一個(gè)與門及場(chǎng)效應(yīng)管驅(qū)動(dòng)電路構(gòu)成。再看圖的右邊,標(biāo)號(hào)為P0.X引腳的圖標(biāo),也就是說(shuō)P0.X引腳可以是P0.0到P0.7的任何一位,即在P0口有8個(gè)與上圖相同的電路組成。
單片機(jī)端口上拉電阻的作用
顧名思義,上拉就是把電平拉高(一般到電源),下拉就是拉低(一般到地)。上拉主要是為了提高灌電流驅(qū)動(dòng)能力,相當(dāng)于從電源借點(diǎn)兒功率到IO口,下拉主要是在IO口功率足夠的情況下,為了保護(hù)IO口,靜態(tài)時(shí)為0電平。
對(duì)于不同的單片機(jī)和端口,上拉電阻的作用不同,最常見的由于內(nèi)部結(jié)構(gòu)的問題,不能處于懸空狀態(tài)。我就以51單片機(jī)進(jìn)行敘述,以其P0口為例,P0口是集電極開路輸出,也就是OC門,這種結(jié)構(gòu)沒有輸出高電平的能力就相當(dāng)于一個(gè)一端接地的開關(guān), 按下去就輸出低電平0V,斷開就沒有電壓,是懸空狀態(tài)。至于用不用上拉電阻,取決于外部電路,如果要輸出高電平控制一個(gè)器件,而這個(gè)器件本身又沒有內(nèi)置上拉,就必須自己接一個(gè)上拉電阻,如果要用低電平控制一個(gè)器件,則可以不用加上拉。一般來(lái)講,做板子時(shí)都會(huì)在P0口放一個(gè)排阻,10Kohm就可以了。
P0口作為I/O口輸出的時(shí)候時(shí),輸出低電平為0 輸出高電平為高組態(tài)(并非5V,相當(dāng)于懸空狀態(tài),也就是說(shuō)P0 口不能真正的輸出高電平)。給所接的負(fù)載提供電流,因此必須接上拉電阻(一電阻連接到VCC),由電源通過這個(gè)上拉電阻給負(fù)載提供電流。P0作輸入時(shí)不需要上拉電阻,但要先置1。因?yàn)镻0口作一般I/O口時(shí)上拉場(chǎng)效應(yīng)管一直截止,所以如果不置1,下拉場(chǎng)效應(yīng)管會(huì)導(dǎo)通,永遠(yuǎn)只能讀到0。因此在輸入前置1,使下拉場(chǎng)效應(yīng)管截止,端口會(huì)處于高阻浮空狀態(tài),才可以正確讀入數(shù)據(jù)。
單片機(jī)p0口為什么要加上拉電阻
P0口內(nèi)部沒有上拉電阻,是開漏的,不管它的驅(qū)動(dòng)能力多大,相當(dāng)于它是沒有電源的,需要外部的電路提供,絕大多數(shù)情況下P0口是必需加上拉電阻的。
P0口和其它三個(gè)口的內(nèi)部電路是不同的,如下圖:
P0口是接在兩個(gè)三極管D0和D1之間的,而P1-P3口的上部是接一個(gè)電阻的。P0口的上面那個(gè)三極管D0是在進(jìn)擴(kuò)展存儲(chǔ)器或擴(kuò)展總線時(shí)使用MOVX指令時(shí)才會(huì)控制它的導(dǎo)通和截止,在不用此指令時(shí)都是截止的。在平常我們使用如:P0_1=0P0_1=1這些語(yǔ)句時(shí)控制的都是下面那個(gè)三極管D1。
我們先假設(shè)P1口接一個(gè)74HC373,來(lái)看一看它的等效圖
當(dāng)AT89S51的P1口上接了74HC373后就等于接了一個(gè)負(fù)載,如上圖右邊。一般來(lái)說(shuō)這些數(shù)字電路的輸入阻抗都很大,都在幾百K到上兆歐姆,而P1口內(nèi)的電阻R一般在幾十K以內(nèi)。
如上圖,當(dāng)我們發(fā)出指令P1=0時(shí),三極管D導(dǎo)通,見中間的等效圖,這時(shí)P1點(diǎn)的電位為0。
當(dāng)發(fā)出P1=1的指令后,三極管D截止,見右邊等效圖,因?yàn)镽x的阻值要比R的阻值大得多,因此P1點(diǎn)的電位是接近電源電壓的。即高電平。
我們?cè)賮?lái)看看P0口接負(fù)載時(shí)的圖
當(dāng)P0=0時(shí),等效圖是中間的,三極管D1導(dǎo)通,P0點(diǎn)的電位為0。
而當(dāng)P0=1時(shí),等效圖是右邊的,三極管D1截止,而上面的三極管D0始終是截止的,這樣P0點(diǎn)就等效于懸空了,它處在不穩(wěn)定狀態(tài),P0點(diǎn)又是RX的高阻抗輸入點(diǎn),很容易受到外界和周圍電路的干擾從而直接影響到74HC373的輸出狀態(tài)。因此就得加上個(gè)電阻。如下圖
加上電阻Rc后,電路的狀態(tài)就和P1口一樣了,這個(gè)電阻Rc就是上拉電阻。
但你如果只是為了讓P0口驅(qū)動(dòng)個(gè)發(fā)光管,那電路可以直接簡(jiǎn)化成下圖那樣。S51內(nèi)部的電流最好不超過15mA,如果發(fā)光管的電壓為2.2V那電阻就是(5-2.2)÷15=0.18K,也就是180歐姆。
當(dāng)P0=0時(shí)P0點(diǎn)為低電位,發(fā)光管亮起,流過D1的電流約為15mA。
當(dāng)P0=1時(shí),P0點(diǎn)為懸空,但發(fā)光管和180歐電阻都是低阻抗元件,P點(diǎn)電位就為高電位,再說(shuō)也無(wú)任何輸出影響,因此這樣電路是可以的
-
單片機(jī)
+關(guān)注
關(guān)注
6026文章
44455瀏覽量
630875 -
上拉電阻
+關(guān)注
關(guān)注
5文章
356瀏覽量
30515
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論