的P0口在作为地址/数据复用时不接上拉电阻。
51单片机的P0口在输出1(高电平)时其实是高阻态,也就是输出电阻无穷大,相当于断开。高阻态显然不能向外提供电流,所以加一个上拉电阻从Vcc取电流,此时单片不给led提供电流,全部电流由Vcc提供。由于P0口输出1时是高阻态,IO口的电位不会被钳位(你可以把它理解成LED与IO没有连接)。P0口输出0时,Vcc通过上拉电阻往单片机灌电流,在电阻上有5V的压降,与输出的逻辑电平0没有矛盾。

51单片机除P0外的其他IO口一般不需要接上拉电阻,但一定要在IO口和LED间接一个几百欧到1k左右的限流电阻,在LED导通时,由于有电流流经电阻,电阻上有压降,LED导通后压降一般在1.6V到3V不等(不会是0.7V),加上电阻上的压降,IO口上电压就可以达到5V,这与单片机输出的高电平没有矛盾。(事实上限流电阻的大小就是这么确定的,LED电流一般是几mA)
如果是其它单片机,如AVR或者PIC,IO口的结构可能不同,具体电路也就不同。但不管什么单片机,一般是不用IO直接驱动功率器件的,而是另外加一个驱动芯片,由单片机提供逻辑电平(几乎没有电流),驱动芯片提供功率(较大电流)。
总的来说,你图上画的用于51单片机的P0口是没有问题的。如果接的是51单片机的其他IO口,没有限流电阻是不合理的,一定要在这种情况下分析你提的问题的话,LED导通后的电流是由Vcc通过外接的上拉电阻和这个端口内部的上拉电阻并联提供的,此时端口的电位被钳位在低电平,但单片机输出是往锁存器里写0或1的逻辑,因为写1指令使内部锁存器始终为高,所以认为单片机输出高电平。但如果执行一条读指令,判断的是引脚的状态,因为被led嵌位那就是输入为低了,那么读到的就是0。也就是说,输出为高,输入为低。
1.P1、P2、P3不需要上拉电阻,片内已有。
2.P0口作为扩展总线的数据/地址复用线时,也不需要上拉电阻,这种情况下,P0口内部是两个MOS管推拉输出,可以同时驱动8个TTL电路。
3.P0口作为普通I/O口使用时,由于上面的MOS管截止,只有下面一个管子工作,处于开漏状态,此时需要外接上拉电阻,才能输出高电平。
希望对你有所帮助!!!!
51单片机P0口做输入口时需要先写1即可,外部不需要上拉电阻。其实,单片机上电复位时,P0已全部为置1状态,就可以直接读输入状态了。只有输出过低电平,再读输入状态时需先写1。否则,P0口从未输出过低电平,也不需要先写1就可以读。即便是先写1,对读输入状态没有影响。
我可以肯定的告诉您,第一种接法是正确的!!
方法:P0口接上拉电阻比较方便的方法是买一片10K的排阻(八路的,模样是九个管脚,价格在几毛钱)将排阻标记有这个符号“◆”的那个管脚接VCC,其余各管脚与单片机IO口直接相连即可!
也不会怎样额额,要看你实现什么功能了。
如果你要驱动数码管,或者让二极管亮,需要的电流是5~10MA
,但是P0口输出电流不到1个毫安,是无法点亮发光二极管的。酱紫数码管二极管之类的就永远亮不起来了
上拉电阻接法如上图,如果接上上拉电阻,阻值为1k,然后数码管下端如果是低电平,5-0=5v
5v除以1k=0.5mA,正好可以点亮灯