单片机的引脚,可以用程序来控制,输出高、低电平,这些可算是单片机的输出电压。
但是,程序控制不了单片机的输出电流。 单片机的输出电流,很大程度上是取决于引脚上的外接器件。

单片机输出低电平时,将允许外部器件,向单片机引脚内灌入电流,这个电流,称为“灌电流”,外部电路称为“灌电流负载”;
单片机输出高电平时,则允许外部器件,从单片机的引脚,拉出电流,这个电流,称为“拉电流”,外部电路称为“拉电流负载”。

这些电流一般是多少?最大限度是多少? 这就是常见的单片机输出驱动能力的问题。

早期的 51 系列单片机的带负载能力,是很小的,仅仅用“能带动多少个 TTL 输入端”来说明的。
P1、P2 和 P3口,每个引脚可以都带动 3 个 TTL 输入端,只有 P0 口的能力强,它可以带动 8 个!

分析一下 TTL 的输入特性,就可以发现,51 单片机基本上就没有什么驱动能力。
它的引脚,甚至不能带动当时的 LED 进行正常发光。

记得是在 AT89C51 单片机流行起来之后,做而论道才发现:单片机引脚的能力大为增强,可以直接带动 LED 发光了。
看看下图,图中的 D1、D2 就可以不经其它驱动器件,直接由单片机的引脚控制发光显示。

虽然引脚已经可以直接驱动 LED 发光,但是且慢,先别太高兴,还是看看 AT89C51 单片机引脚的输出能力吧。
从 AT89C51 单片机的 PDF 手册文件中可以看到,稳态输出时,“灌电流”的上限为:

Maximum IOL per port pin: 10 mA;
Maximum IOL per 8-bit port:Port 0: 26 mA,Ports 1, 2, 3: 15 mA;
Maximum total I for all output pins: 71 mA.

这里是说:
每个单个的引脚,输出低电平的时候,允许外部电路,向引脚灌入的最大电流为 10 mA;
每个 8 位的接口(P1、P2 以及 P3),允许向引脚灌入的总电流最大为 15 mA,而 P0 的能力强一些,允许向引脚灌入的最大总电流为 26 mA;
全部的四个接口所允许的灌电流之和,最大为 71 mA。

而当这些引脚“输出高电平”的时候,单片机的“拉电流”能力呢? 可以说是太差了,竟然不到 1 mA。

结论就是:单片机输出低电平的时候,驱动能力尚可,而输出高电平的时候,就没有输出电流的能力。
这个结论是依照手册中给出的数据做出来的。

51 单片机的这些特性,是源于引脚的内部结构,引脚内部结构图这里就不画了,很多书中都有。
在芯片的内部,引脚和地之间,有个三极管,所以引脚具有下拉的能力,输出低电平的时候,允许灌入 10mA 的电流;而引脚和正电源之间,有个几百K的“内部上拉电阻”,所以,引脚在高电平的时候,能够输出的拉电流很小。特别是 P0 口,其内部根本就没有上拉电阻,所以 P0 口根本就没有高电平输出电流的能力。

再看看上面的电路图:
图中的 D1,是接在正电源和引脚之间的,这就属于灌电流负载,D1 在单片机输出低电平的时候发光。这个发光的电流,可以用电阻控制在 10 mA 之内。
图中的 D2,是接在引脚和地之间的,这属于拉电流负载,D2 应该在单片机输出高电平的时候发光。但是单片机此时几乎没有输出能力,必须采用外接“上拉电阻”的方法来提供 D2 所需的电流。

哦,明白了,外接电路如果是“拉电流负载”,要求单片机输出高电平时发挥作用,那就必须用“上拉电阻”来协助,产生负载所需的电流。

下面做而论道就专门说说上拉电阻存在的问题。

从上面的图中可以看到,D2 发光,是由上拉电阻 R2 提供的电流,D2 导通发光的电压约为 2V,那么发光的电流就是:(5 - 2) / 1K,约为 3mA。

而当单片机输出低电平(0V),D2 不发光的时候,R2 这个上拉电阻闲着了吗? 没有!它两端的电压,比 LED 发光的时候还高,现在是 5V 了,其中的电流,是 5mA !
注意到了吗? LED 不发光的时候,上拉电阻给出了更大的电流!并且,这个大于正常发光的电流,全部灌入单片机的引脚了!

如果在一个 8 位的接口,安装了 8 个 1K 的上拉电阻,当单片机都输出低电平的时候,就有 40mA 的电流灌入这个 8 位的接口!
如果四个 8 位接口,都加上 1K 的上拉电阻,最大有可能出现 32 × 5 = 160mA 的电流,都流入到单片机中!
这个数值已经超过了单片机手册上给出的上限。如果此时单片机工作不稳定,就是理所当然的了。
而且这些电流,都是在负载处于无效的状态下出现的,它们都是完全没有用处的电流,只是产生发热、耗电大、电池消耗快...等后果。
呵呵,特别是现在,都在提倡节能减排,低碳...。

那么,把上拉电阻加大些,可以吗? 
回答是:不行的,因为需要它为拉电流负载提供电流。对于 LED,如果加大电阻,将使电流过小,发光暗淡,就失去发光二极管的作用了。

对于 D1,是灌电流负载,单片机输出低电平的时候,R1、D1 通路上会有灌电流;输出高电平的时候,那就什么电流都没有,此时就不产生额外的耗电。

综上所述,灌电流负载,是合理的;而“拉电流负载”和“上拉电阻”会产生很大的无效电流,这种电路不合理。

有些网友对上拉电阻情有独钟,有用没用的,都想在引脚上安装个上拉电阻,甚至还能说出些理由:稳定性啦、速度啦...。
其实,“上拉电阻”和“拉电流负载”电路,是会对单片机系统造成不良后果的。

做而论道看过很多关于单片机引脚以及上拉电阻方面的书籍、参考资料,基本上它们对于使用上拉电阻的弊病都没有进行仔细的讨论。

在此,做而论道郑重向大家提出建议:设计单片机的负载电路,应该采用“灌电流负载”的电路形式,以避免无谓的电流消耗。

上拉电阻,仅仅是在 P0 口才考虑加不加的问题:当用 P0 口做为输入口的时候,需要加上、当用 P0 口输出高电平驱动 MOS 型负载的时候,也需要加上,其它的时候,P0 口也不用加入上拉电阻。

在其它接口(P1、P2 和 P3),都不应该加上拉电阻,特别是输出低电平有效的时候,外接器件就有上拉的作用。

转载于:https://www.cnblogs.com/my-life/archive/2012/11/04/2754324.html

51的IO口和上拉电阻驱动相关推荐

  1. 上拉电阻和下拉电阻_硬件基础:下拉电阻和上拉电阻如何工作

    上拉电阻和下拉电阻 by Taron Foxworth 通过塔伦·福克斯沃思(Taron Foxworth) 硬件基础:下拉电阻和上拉电阻如何工作 (Hardware fundamentals: ho ...

  2. 推挽输出和开漏输出_关于51单片机IO口的输出模式结构

    单片机种类繁多今天主要谈谈51单片机,在stm32单片机中IO(GPIO)输出模式有很多种.如 模拟输入 .浮空输入.下拉输入.上拉输入.开漏输出.推挽输出等很多种,不同的输入输出有不同的功能,实现不 ...

  3. 学习笔记之-51单片机IO口详解

    前言 对单片机的控制,其实就是对I/O口的控制,无论单片机对外界进行何种控制,或接受外部的何种控制,都是通过I/O口进行的.51单片机每个IO端口结构都有差异,都各有各的特点.在平时的应用中,特别是设 ...

  4. 51单片机---IO口 (准双向口和双向口的区别)

    MCS-51有4个双向并行IO口:P0.P1.P2.P3;其中,P0为三态双向口,其驱动能力比较大,可驱动高达8个TTL电路;P1.P2.P3为准双向口(作为输入时,口线需要被拉成高电平,故称准双向口 ...

  5. 51单片机IO口输入输出方式

    传统51单片机IO接口只可以作为标准双向IO接口,如果用其来驱动LED只能用灌电流的方式或是用三极管外扩驱动电路. 灌电流方式:LED正极接VCC,负极接IO口.IO为高电平是LED两极电平相同,没有 ...

  6. 32接上拉5v_51单片机P0口上拉电阻的选择

    作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平).给所接的负载提供电流,因此必须接(一电阻连接到VCC),由电源通过这个上 ...

  7. I2C串联保护电阻和上拉电阻的选择

    中断,GPIO,I2C等一般都是OC或者OD门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平.一般I/O端的驱动能力在2-4mA量级,OC或者OD门的导通电压为0.4V左右,手机中加在上拉 ...

  8. B-1.23 协议分析--I2C串联保护电阻和上拉电阻的选择

    中断,GPIO,I2C等一般都是OC或者OD门,芯片内部无上拉电阻时,则外部必须加上拉电阻才能输出高电平.一般I/O端的驱动能力在2-4mA量级,OC或者OD门的导通电压为0.4V左右,手机中加在上拉 ...

  9. 51单片机——IO口

    IO口分类 此单片机有39个IO口,P0到P3每个8个口,P4有7个口 一般用P1,P2,P3,P4口与外部模块通信,这4个口是准双向口,具备弱上拉电阻的:P0口重新上电后是开漏输出,若总线扩展用,不 ...

最新文章

  1. 策略模式优化过多的IF ELSE
  2. C/C++中的指针变量可以相互赋值,使得它们指向同一块地址空间
  3. C和指针之auto和内存栈和register关键字
  4. git revert 后再次merge_git如何回滚错误合并的分支
  5. java 解析xml字符串的_java 解析xml字符串
  6. 删除列表重复元素 python_在Python中删除列表列表中的重复元素
  7. mysql添加 分隔_分割字符串并插入表---mysql
  8. vue的table组件
  9. Instrumentation 功能介绍(javaagent)
  10. varnish在Debian9.4安装和配置
  11. Multisim破解教程
  12. sketch up rbs/rbz/rb插件安装方法
  13. Ae 效果快速参考:音频
  14. How to solve javadoc Chinese garbled in IntelliJ Idea
  15. 关闭iTunes iPhone自动备份(Windows+Mac)及删除过期备份
  16. python初体验——单/双/三引号的用法
  17. 微软软件工程 第一周博客作业
  18. Revo Uninstaller Pro(软件卸载工具)官方中文版V4.4.2.0 | 万能卸载软件下载 | 软件卸载工具哪个好?
  19. 查看UiPath许可证状态
  20. 挖掘企业数据矿产,袋鼠云数栈(DTinsight)助力企业搭建数据中台

热门文章

  1. 【maven插件】maven-resources-plugin
  2. 数据结构(一)--稀疏数组
  3. 手动抽油机_察雅县抽油机钢丝绳橡胶皮带生产厂家
  4. Linux下oracle全库导出,Oracle数据库导出导入
  5. 设计费收费标准2002修订_酒店装修设计费收费标准,酒店装修设计效果图
  6. 陈百强原来这么帅_外套假两件,原来这么帅。
  7. docker 安装 minio
  8. oracle存储过程无效字符_Oracle存储过程基础+ 错误代码
  9. python读excel 包含格式_python里读写excel等数据文件的几种常用方式
  10. 从零开始学习docker(一)