P0口作為I/O口輸出的時候時,輸出低電平為0 輸出高電平為高組態(tài)(并非5V,相當(dāng)于懸空狀態(tài),也就是說P0 口不能真正的輸出高電平)。給所接的負載提供電流,因此必須接上拉電阻(一電阻連接到VCC),由電源通過這個上拉電阻給負載提供電流?! 0作輸入時不需要上拉電阻,但要先置1。因為P0口作一般I/O口時上拉場效應(yīng)管一直截止,所以如果不置1,下拉場效應(yīng)管會導(dǎo)通,永遠只能讀到0。因此在輸入前置1,使下拉場效應(yīng)管截止,端口會處于高阻浮空狀態(tài),才可以正確讀入數(shù)據(jù)。
由于P0口內(nèi)部沒有上拉電阻,是開漏的,不管它的驅(qū)動能力多大,相當(dāng)于它是沒有電源的,需要外部的電路提供,絕大多數(shù)情況下P0口是必需加上拉電阻的。
1.一般51單片機的P0口在作為地址/數(shù)據(jù)復(fù)用時不接上拉電阻。
2.作為一般的I/O口時用時,由于內(nèi)部沒有上拉電阻,故要接上上拉電阻!!
3.當(dāng)p0口用來驅(qū)動PNP管子的時候,就不需要上拉電阻,因為此時的低電平有效;
4.當(dāng)P0口用來驅(qū)動NPN管子的時候,就需要上拉電阻的,因為此時只有當(dāng)P0為1時候,才能夠使后級端導(dǎo)通。 簡單一點說就是它要驅(qū)動LCD顯示屏顯示就必須要有電源驅(qū)動,否則亮不了,而恰好P0口沒有電源,所以就要外接電源,接上電阻是起到限流的作用;如果接P1、P2、P3端口就不用外接電源和電阻了。
P0口是開漏的,不管它的驅(qū)動能力多大,相當(dāng)于它是沒有電源的,需要外部的電路提供,絕大多數(shù)情況下P0口是必需加上拉電阻的;5、51單片機的P0口用作數(shù)據(jù)和地址總線時不必加上拉電阻。
有些IC的驅(qū)動能力并不強,如果P0口作為輸入而加了不必要的上拉,有可能驅(qū)動IC無法將其拉回到低電平,從而使輸入失敗!
如果是驅(qū)動led,那么用1K左右的就行了。如果希望亮度大一些,電阻可減小,最小不要小于200歐姆,否則電流太大;如果希望亮度小一些,電阻可增大,增加到多少呢,主要看亮度情況,以亮度合適為準(zhǔn),一般來說超過3K以上時,亮度就很弱了,但是對于超高亮度的LED,有時候電阻為10K時覺得亮度還能夠用。通常就用1k的。對于驅(qū)動光耦合器,如果是高電位有效,即耦合器輸入端接端口和地之間,那么和LED的情況是一樣的;如果是低電位有效,即耦合器輸入端接端口和VCC之間,那么除了要串接一個1——4.7k之間的電阻以外,同時上拉電阻的阻值就可以用的特別大,用100k——500K之間的都行,當(dāng)然用10K的也可以,但是考慮到省電問題,沒有必要用那么小的。
對于驅(qū)動晶體管,又分為PNP和NPN管兩種情況:對于NPN,毫無疑問NPN管是高電平有效的,因此上拉電阻的阻值用2K——20K之間的,具體的大小還要看晶體管的集電極接的是什么負載,對于LED類負載,由于發(fā)管電流很小,因此上拉電阻的阻值可以用20k的,但是對于管子的集電極為繼電器負載時,由于集電極電流大,因此上拉電阻的阻值最好不要大于4.7K,有時候甚至用2K的。對于PNP管,毫無疑問PNP管是低電平有效的,因此上拉電阻的阻值用100K以上的就行了,且管子的基極必須串接一個1——10K的電阻,阻值的大小要看管子集電極的負載是什么,對于LED類負載,由于發(fā)光電流很小,因此基極串接的電阻的阻值可以用20k的,但是對于管子的集電極為繼電器負載時,由于集電極電流大,因此基極電阻的阻值最好不要大于4.7K。
對于驅(qū)動TTL集成電路,上拉電阻的阻值要用1——10K之間的,有時候電阻太大的話是拉不起來的,因此用的阻值較小。但是對于CMOS集成電路,上拉電阻的阻值就可以用的很大,一般不小于20K,我通常用100K的,實際上對于CMOS電路,上拉電阻的阻值用1M的也是可以的,但是要注意上拉電阻的阻值太大的時候,容易產(chǎn)生干擾,尤其是線路板的線條很長的時候,這種干擾更嚴(yán)重,這種情況下上拉電阻不宜過大,一般要小于100K,有時候甚至小于10K。
根據(jù)以上分析,上拉電阻的阻值的選取是有很多講究的,不能亂用。