P0口和其它三個口的內部電路是不同的,如下圖P0口是接在兩個三極體D0和D1之間的,而P1-P3口的上部是接一個電阻的。P0口的上面那個三極體D0是在進擴充套件儲存器或擴充套件匯流排時使用MOVX指令時才會控制它的導通和截止,在不用此指令時都是截止的。在平常我們使用如:P0_1=0 P0_1=1這些語句時控制的都是下面那個三極體D1。我們先假設P1口接一個74HC373,來看一看它的等效圖當AT89S51的P1口上接了74HC373後就等於接了一個負載,如上圖右邊。一般來說這些數位電路的輸入阻抗都很大,都在幾百K到上兆歐姆,而P1口內的電阻R一般在幾十K以內。如上圖,當我們發出指令P1=0時,三極體D導通,見中間的等效圖,這時P1點的電位為0。當發出P1=1的指令後,三極體D截止,見右邊等效圖,因為Rx的阻值要比R的阻值大得多,因此P1點的電位是接近電源電壓的。即高電平。我們再來看看P0口接負載時的圖當P0=0時,等效圖是中間的,三極體D1導通,P0點的電位為0。而當P0=1時,等效圖是右邊的,三極體D1截止,而上面的三極體D0始終是截止的,這樣P0點就等效於懸空了,它處在不穩定狀態,P0點又是RX的高阻抗輸入點,很容易受到外界和周圍電路的干擾從而直接影響到74HC373的輸出狀態。因此就得加上個電阻。如下圖加上電阻Rc後,電路的狀態就和P1口一樣了,這個電阻Rc就是上拉電阻。但你如果只是為了讓P0口驅動個發光管,那電路可以直接簡化成下圖那樣。S51內部的電流最好不超過15mA,如果發光管的電壓為2.2V那電阻就是(5-2.2)÷15=0.18K,也就是180歐姆。當P0=0時P0點為低電位,發光管亮起,流過D1的電流約為15mA。當P0=1時,P0點為懸空,但發光管和180歐電阻都是低阻抗元件,P點電位就為高電位,再說也無任何輸出影響,因此這樣電路是可以的。
P0口和其它三個口的內部電路是不同的,如下圖P0口是接在兩個三極體D0和D1之間的,而P1-P3口的上部是接一個電阻的。P0口的上面那個三極體D0是在進擴充套件儲存器或擴充套件匯流排時使用MOVX指令時才會控制它的導通和截止,在不用此指令時都是截止的。在平常我們使用如:P0_1=0 P0_1=1這些語句時控制的都是下面那個三極體D1。我們先假設P1口接一個74HC373,來看一看它的等效圖當AT89S51的P1口上接了74HC373後就等於接了一個負載,如上圖右邊。一般來說這些數位電路的輸入阻抗都很大,都在幾百K到上兆歐姆,而P1口內的電阻R一般在幾十K以內。如上圖,當我們發出指令P1=0時,三極體D導通,見中間的等效圖,這時P1點的電位為0。當發出P1=1的指令後,三極體D截止,見右邊等效圖,因為Rx的阻值要比R的阻值大得多,因此P1點的電位是接近電源電壓的。即高電平。我們再來看看P0口接負載時的圖當P0=0時,等效圖是中間的,三極體D1導通,P0點的電位為0。而當P0=1時,等效圖是右邊的,三極體D1截止,而上面的三極體D0始終是截止的,這樣P0點就等效於懸空了,它處在不穩定狀態,P0點又是RX的高阻抗輸入點,很容易受到外界和周圍電路的干擾從而直接影響到74HC373的輸出狀態。因此就得加上個電阻。如下圖加上電阻Rc後,電路的狀態就和P1口一樣了,這個電阻Rc就是上拉電阻。但你如果只是為了讓P0口驅動個發光管,那電路可以直接簡化成下圖那樣。S51內部的電流最好不超過15mA,如果發光管的電壓為2.2V那電阻就是(5-2.2)÷15=0.18K,也就是180歐姆。當P0=0時P0點為低電位,發光管亮起,流過D1的電流約為15mA。當P0=1時,P0點為懸空,但發光管和180歐電阻都是低阻抗元件,P點電位就為高電位,再說也無任何輸出影響,因此這樣電路是可以的。