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点电位就为高电位,再说也无任何输出影响,因此这样电路是可以的。
51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。
简单的说,P0输出高电平时,由于内部结构,只能输出高阻态。所以外接上拉电阻。
从零学51单片机2-什么是上拉电阻?P0口为什么要加上拉电阻?非常详细深入的讲解,不容错过。
单片机的I/O口输出状态有三种:
1、低电平0;
2、高电平1;
3、悬空。
单片机如何控制I/O输出呢?可以简单理解为:
1、当需要输出低电平0时,单片机内部通过控制NPN三极管基极,使三极管导通,三极管C极(I/O输出端)和三极管E极(GND端)导通,所以此时输出为低电平。
2、如果内部有上拉电阻,也就是三极管C极有一电阻连接至VCC端。所以当单片机内部使NPN三极管关断时,三极管C极(I/O输出端)是通过电阻连接至VCC的,所以此时输出为高电平。
3、如果内部没有上拉电阻,所以当单片机内部使NPN三极管关断时,三极管C极(I/O输出端)是悬空的,和VCC、GND都不连接,所以此时为悬空,不确定其状态,具体状态和外部电路有关。
所以当设计的电路和程序,不需要输出高电平时,就不需上拉电阻。需要高电平,就必须在外部接一上拉电阻。
比如采用灌电流驱动一LED时,当输出低电平时,LED发光,当不输出低电平时,LED无法形成回路,就不会发光,此时就不需高电平,也不需上拉电阻。