自制單片機(jī)之十……AT89S51的上拉電阻問(wèn)題
很多網(wǎng)友都問(wèn)我AT89S51的P0口為什么要接一個(gè)上拉電阻。我就用一個(gè)篇幅來(lái)說(shuō)一說(shuō)
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=0 P0_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)通,見(jiàn)中間的等效圖,這時(shí)P1點(diǎn)的電位為0。
當(dāng)發(fā)出P1=1的指令后,三極管D截止,見(jiàn)右邊等效圖,因?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)部的電流最好不超過(guò)15mA,如果發(fā)光管的電壓為2.2V那電阻就是(5-2.2)÷15=0.18K,也就是180歐姆。
當(dāng)P0=0時(shí)P0點(diǎn)為低電位,發(fā)光管亮起,流過(guò)D1的電流約為15mA。
當(dāng)P0=1時(shí),P0點(diǎn)為懸空,但發(fā)光管和180歐電阻都是低阻抗元件,P點(diǎn)電位就為高電位,再說(shuō)也無(wú)任何輸出影響,因此這樣電路是可以的。