1、51单片机的p0口为了实现准3态,采用了oc输出,也就是集电极悬空输出,也有叫图腾柱输出的。这种电路结构,只有下拉能力,高电平输出没有电流,在高电平时表现为高阻态;加上上拉电阻,就会失去高阻态,变成 1、0 两态。
2、p0口上拉电阻的选择,应遵循基本的电路设计原则,不能盲目套用,要看后级情况而定:
例如,后级驱动的是1只npn三极管,这个三极管的放大倍数(β)=100倍,三极管的负载电流(ic)要求100ma,当电源为5v时:
a、三极管的ib=ic/β=1ma;
b、上拉电阻大约=r=5v/ib=5kω;
c、为了使三极管注入ib后就迅速进入导通(开)状态,r应再小一些,如4k3;
3、由上面计算可见,三极管的负载大小、放大倍数直接影响到前级上拉电阻的选取;上拉电阻选择的不合理,要么后级驱动无力或根本驱动不了;要么单片机端口功耗过大,尤其是电池供电的设备更应注意!
更要注意的是,上拉电阻绝对不能小于250ω!否则会损坏端口!
4、上述的电路设计应该说是不合理的;我们经常能见到这样的电路设计:
单片机端口通过 上拉电阻 > npn三极管 > 来控制继电器,这种设计在上电时继电器总要先吸合,这时就要在程序启动后立即将端口清0,使继电器释放;但每次上电短暂的吸合还是无法克服。
比较好的用法是采用负逻辑设计,例如端口驱动led灯,应采用 端口 > led > 电阻 > 电源,避免采用 端口 > led > 电阻 > 地 + 上拉电阻;再例如单片机输出去驱动的三极管,最好采用pnp型!这样就没有上拉的麻烦(基极电阻不能少!);在后级为ic时,即或是要上拉,也是象征意义上的,使用5~10k完全可以。
5、除了p0口外,其他口不是特殊设计,没必要考虑上拉!