参考:http://m.elecfans.com/article/581431.html
@[TOP]

第二功能

单片机有4组IO口,内部结构各不同,有些IO口具有第二功能

上面除了P1外,其他接口都有第二功能。

IO口等效电路

作为普通IO口使用时,4个IO口的工作原理基本一致。
下面的图是P1电路图

右边P1.X是P1的一个IO口,如P1.0;PULL-UP*是内部上拉电阻的意思,之所以叫上拉,是因为电阻一端接在VCC上。下面的三角形表示接地,相当于GND。
最关键的器件是下面这个

这个器件的本质是晶体管,起到电子开关的作用。
上面的电路大致等效成下图。

图中的R是上拉电阻,S是前面晶体管等效的电子开关。蓝色框中的部分在单片机内部。
S的开关状态由CPU控制。当用程序设置P1.0管脚为低时,电子开关S闭合。实际S闭合时,两端还有很小的电阻。根据分压原理,P1.0上还有一个很低的电压,近似为0V,可视为低电平。当设置管脚为高电平时,S断开,P1.0通过10K欧电阻接到VCC上。如果用电压表测量,因为电压表内阻很大,所以可得出其电压值为高电平。
备注1:“输入”绿色箭头,这部分电路只有在读取管脚输入时才会导通,并且是单向的,可以想象成内阻较大的电压表输入端。
备注2:51单片机IO口工作在普通IO口状态下,电子开关使用晶体管实现的(包括三极管和MOS管两种)。下图中实现的这种电平输出结构,如果是MOS管实现,则被称为漏极开路输出(OD=Open Drain,或简称(“开漏”)),漏极是MOS管的一个管脚,对应与图中S和R的节点处。如果是三极管实现,则称为集电极开路输出(OC=Open Collector),两者原理基本一致。

IO口输出:点亮LED

#include<reg51.h>sbit LED = P1^0;void main()
{LED = 0;while(1);
}


电路关键部分,将VCC通过1K欧电阻接到LED正极,LED负极接到P1.0口。
单片机执行LED = 0的时候,电子开关S由CPU控制闭合,P1.0上输出低电平。电流流过1K电阻和LED流入P1.0,在经过S流入GND,LED两端有合适电压,于是被点亮。

灌电流与拉电流

在上面例子中,P1.0输出低电平点亮LED。能否反过来,P1.0输出高电平,点亮LED呢?将电路连接成下面这样,并程序中编写LED = 1。

执行LED = 1时,S断开,电流通过10K欧上拉电阻从P1.0流出,并进入LED。由于上拉电阻阻值很大,电流过小,LED不亮。
这两种方法,前者电流从单片机外部流入单片机内部,称为灌电流接法;后者电流由单片机内部留到外部,称为拉电流接法。对51单片机,灌电流接法,电流比拉电流接法电流大。
实际中,灌电流的最大电流也是有限的,因为电子开关S中能通过的电流有限。STC官方手册中,建议单个IO口灌电流不超过20mA,所有IO口灌电流之和不超过55mA,否则容易烧坏IO口。而拉电流大小只有230UA左右。

上拉电阻/下拉电阻/高阻态

拉电力是从上拉电阻流出来的,能否提高拉电流大小呢?可以。只需要在单片机外部加一个上拉电阻,就可以增大电流,并能成功点亮LED。如下图所示。

但是当单片机输出低电平时,S闭合,电流从VCC通过上拉电阻和S流入GND,造成电流浪费。上拉电阻过大,会导致驱动力不足,过小,输出低电平时浪费电能。
上拉电阻的作用是什么呢?使IO口输出高电平。如果没有上拉电阻时,开关闭合时能输出高电平,但是开关断开时,P1.0悬空,什么也没连接,这时IO口的电压就是不确定的,这种状态无法判断它是高电平还是低电平,叫做高阻态

IO口的输入:开关控制

IO口(Input/Output),意味着可以作输入或输出。

图中S0是一个单刀双掷开关,往上切换,可将P1.0连接到VCC,往下切换可以接到GND。读取时CPU会通过特定电路获取上图中橙色导线的电平。我们要实现的效果是,让CPU读取P1.0端口的电平,从而获得开关S0的状态。
设置输出高电平时,S断开,CPU通过获取P1.0上的电平,知道外部开关S0的状态。
设置处处低电平时,S闭合,S0往下切换,P1.0低电平,S0往上切换,P1.0仍是低电平。于是CPU无法判断外部开关S0的状态。
总结就是,在读取IO电平时,应先设置输出高电平(即断开S),再读取数据

单片机IO口原理解析相关推荐

  1. 单片机小白学步系列(二十三) IO口原理知识补充:双向IO口、互补推挽、高阻态

    由于之前考虑不周,本篇在IO口原理知识的基础上,进一步补充一些知识. ================================================= 双向IO口的输出:互补推挽 在 ...

  2. 单片机小白学步系列(二十) IO口原理

    IO口操作是单片机实践中最基本最重要的一个知识,本篇花了比较长的篇幅介绍IO口的原理.也是查阅了不少资料,确保内容正确无误,花了很长时间写的.IO口原理原本需要涉及很多深入的知识,而这里尽最大可能做了 ...

  3. 【自学51单片机】9 -- 步进电机原理、蜂鸣器原理,单片机IO口的结构,上下拉电阻

    目录 1.单片机IO口的结构 2.上下拉电阻 3.电机 3.1 电机分类 3.2 28BYJ-48型步进电机 3.2 28BYJ-48电机转动原理 3.3 28BYJ-48电机工作模式 3.4 步进电 ...

  4. IO口多路查理复用:三个单片机IO口控制六个LED

    简 介: 本文介绍了单片机的IO控制 LED 中的复用技术,特别查理复用基本原理和特点进行了介绍.使用一款IS31FL3731可以构成16×9的PWM亮度可控的 LED 矩阵. 关键词: 查理复用,C ...

  5. 测量ATMEGA8单片机IO口的输入输出内阻

    ➤ 01背景 在 电子小帮手电路中电源开关电路分析 中介绍测量模块电路实验原理的时候,对于ATmega系列的 单片机的输出端口进行了内部描述 .特别是对于端口做为IO输出口的时候,它可以等效为通过电阻 ...

  6. 如何利用单片机IO口产生两倍的电源电压

    简介 在很多情况下,电子系统中需要获得比工作电源高的电压电源,或者负电源.比如在一些功率器件(MOS)的基极驱动信号.扩展运算放大器的动态范围.一些通信信号(UART232). 现在有很多专门的芯片, ...

  7. 52单片机IO口输出-蜂鸣器(硬核)

    52单片机IO口输出-蜂鸣器 什么是蜂鸣器 三极管的工作原理 蜂鸣器驱动电路分析 参考代码 欢迎你的到来!这里是我的单片机学习笔记,希望我的笔记可以在你学习的道路上对你有所帮助! 什么是蜂鸣器 蜂鸣器 ...

  8. 国产单片机IO口模拟IrDA1.0协议

    单片机IO口模拟IrDA1.0协议 IrDA1.0协议是一种利用红外通信的无线传输协议,可以很好的解决一些便携式设备与主机之间通信的问题,具有携带方便,低功耗,成本低,传输可靠等特点,缺点是传输距离较 ...

  9. m0单片机io口_51单片机蜂鸣器

    蜂鸣器实验 * 蜂鸣器 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机.打印机.复印机.报警器.电子玩具.汽车电子设备.电话机.定时器等电子产品中作发声器件.蜂鸣器主要分为压电 ...

最新文章

  1. 北京大学崔斌教授组招收图机器学习、AutoML等方向科研实习生
  2. Java开发主流框架是什么?
  3. 【Java】多线程相关复习—— 线程的创建、名字、运行情况以及顺序控制(join方法) 【一】...
  4. redis sorted_set数据类型常用命令及跳表skip_list原理
  5. php如何连接wsdl,PHP如何调用wsdl
  6. 实现哈希表 java,如何实现Java的哈希表?
  7. 2条电信宽带 并线_理想更新“货车并线预警”遭用户吐槽 李想:目前功能偏保守 仍在优化...
  8. Learn Python—表达式、数据类型、流程控制
  9. 题目1335:闯迷宫( BFS在求解最短路径或者最短步数上有很多的应用)
  10. jfinal poi
  11. 小米集团国际总部落地深圳;国美电器创始人黄光裕出狱;TiKV 4.0 发布 | 极客头条...
  12. Order By后产生NULL的问题
  13. Java实习生的标准是什么
  14. JS监听安卓软键盘删除键
  15. sql语句中大于号小于号的处理
  16. 关于 range.autofilter 和 VBA的 filter
  17. 移动端处理输入法表情
  18. 2022中科院分区表即将公布,多方官宣:或将弃用影响因子
  19. 路由器和三层交换机的搞笑文章
  20. Python基础知识回顾

热门文章

  1. Hexo + github搭建个人博客(2022年7月)
  2. Mermaid从入门到入土
  3. 金仓kingbase数据库设置自增长
  4. urv中保研碰撞测试结果_中保研碰撞测试 成绩最好的前十 没想到你是这样的丰田...
  5. 牛逼!这款国产软件神器!程序员接私活必备!
  6. 【拜小白opencv】14-只去除RGB的某一颜色通道
  7. 开普勒sql注入靶场学习
  8. 北京石景山中央空调维保,写字楼中央空调维保注意要点
  9. 互联网协会与IDGVC发布Web2.0 100(附名单) 1
  10. linux内核 设备列表,Linux 设备树(Device Tree)(转载)