0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

用51单片机体验高阻态的详细步骤讲解

GReq_mcu168 来源:互联网 作者:佚名 2017-11-21 08:20 次阅读

51单片机的P0口工作在普通IO口模式下,为准双向IO口。而工作在第二功能状态下时,则为标准的双向IO口。由于双向IO口的输出,要求能输出高低电平,通常会采用互补推挽电路。

在第二功能状态下,51单片机P0口采用的是互补推挽的输出方式。何为互补推挽呢?下面是它的等效电路图。

当P0第二功能作为输出时,K1和K2两个开关轮流打开。K2闭合K1打开,就会输出高电平,并且其驱动能力很大,因为电子开关的阻值小(不像上拉电阻的值那么大)。反之K2打开,K1闭合,就会输出低电平。

两个开关交替导通,互为补充,“挽”是“拉”的意思,两个电子开关分别负责在IO口输出处“推”和“拉”电流,所以称为互补推挽。

这种IO口结构的优点很明显,驱动能力强,稳定可靠。缺点在于实现起来比较困难。在切换输出电平的过程中,例如从低电平切换到高电平,当K1断开时,要求尽可能快的输出高电平,也就是K2应该立即闭合;同时,如果K1还没断开,K2就提前闭合了,相同于两个开关同时导通,会直接短路,后果又会很严重。所以需要用电路控制好两个开关的协调工作。

双向IO口的输入:高阻态、输入电阻

双向IO口的输出,只要求能输出高低电平,因此并不是必须采用互补推挽电路。而采用互补推挽电路的好处在于,这种电路同时又可以实现高阻态的输入,从而实现标准双向IO口。

当图中的K1和K2同时断开时,IO口就可以工作在高阻态的输入状态下。高阻态到底是什么样的一个概念呢?

当IO口处于高阻态时,也将其称为浮空输入状态,其电平是悬浮不定的,既不是高电平也不是低电平。我们可以想象单片机检测IO口的电平高低时,相当于在CPU里面有一个类似电压表的东西,并且这个电压表内阻很大,例如图中给出的100MΩ。在这里,我们可以把这个电压表的内阻称为P0.0口此时的输入电阻(也可以近似认为是输出阻抗,电阻是对直流电而言,而阻抗是对交流电来说的。这是模拟电路的知识,这里不做细说)。

现在试想,如果我不小心用手碰到了P0.0端口,而由于人体本身就是阻值很大的导体,周围有很多电磁波干扰,手上可能存在一些很微弱的电流,这个时候,电压表的读数就会发生变化,单片机读取的电平高低就会变。高阻态表现出来的结果就是外界很小的干扰,都可能导致读取的电平变化,甚至即使没有碰这个IO口,它每次读取的结果也可能不一样,因为外界的电磁波等可能会干扰到IO口。稍后我们会利用51单片机做个实验,来体验P0口的高阻态。

高阻态的意义、输出电阻

为什么双向IO口输入的时候要求是高阻态呢?

我们假设有一种装置,等效电路如下图。开关上下切换,它就会输出高低电平,通过电压表可以检测出来。但是其驱动能力很弱,连LED也驱动不了。装置里的100kΩ,可以叫做装置的输出电阻(同样也可以近似认为是输出阻抗)。

让这个装置输出低电平,然后连接51单片机的P1.0口。这时,VCC经过10kΩ上拉电阻到达IO口,再到装置内部的100kΩ电阻,通过开关K接到GND。根据分压原理,P1.0上的电压值大概是4.55V,于是单片机读取的是高电平。而事实是,装置想输出低电平告知51单片机。这里单片机管脚作为输入功能,却干扰了外界装置的输出值,相当于单片机的这个IO口也在输出。

当单片机的P0口工作在第二功能的输入状态,或者工作在普通IO口的输入状态,且没有外界上下拉电阻,内部的两个电子开关都是断开的,对外部呈现高阻态。从图中可以看出,装置输出的电平能被准确的读取到单片机中。之所以能准确读取,就是因为装置输出电阻比单片机IO口的输入电阻要小。

有人可能会说,如果把装置中的电阻换成1000MΩ,这个时候这个单片机又不能准确读取电平了。但是一般情况下,我们不需要考虑这么极端。如果是理想的高阻态,其输入阻抗应该是无穷大,而这有点像超导体一样比较特殊。一般情况下认为导线电阻几乎为0,同样也认为高阻态输入电阻是无穷大。

总的来说,就是高阻态情况下,IO口输入电阻很大,而不容易干扰那些输出电阻较大、驱动能力弱的装置输出到IO口上的电平。

用51单片机体验高阻态

编写程序如下:

#include reg52.h

sbit TOUCH = P0^0;

sbit LED = P1^0;

void main()

{

TOUCH = 1;

while(1) {

LED = TOUCH;

}

}

电路方面,LED接在P1.0端口,仍然是采用灌电流的方式,低电平有效。P0.0什么都不要接。特别注意,这个实验必须在P0.0什么都没接的情况下才能进行。很多成品开发板上,P0.0都连接了外部上拉电阻,没法做这个实验,建议自己搭建面包板。

程序烧写好之后,理论上来说,TOUCH管脚作为高阻态输入,电平是不确定的,因此LED的亮灭也是不定的。我在实际实验时,P0.0悬空的情况下,LED是一直点亮的,这可能是因为51单片机的高阻态和理想的高阻态还有一点差距,读取P0.0的电平为低。

当把手指或很大的电阻放在P0.0和VCC之间,就会发现LED熄灭了,或者变暗了(变暗了说明LED在闪烁,只是闪烁的很快所以看不出来,就像交流电驱动的白炽灯一样)。手指的电阻很大,如果是P1.0口,或者在P0.0上外接了上拉或下拉电阻,这时通过手指很难改变其电平状态。而由于是高阻态,所以P0.0原先的低电平,通过手指从VCC传过来的很微弱的电流就变成了高电平。

备注1:考虑到不同人的皮肤电阻不一样,不能保证用手指接触都能实现LED亮灭变化。如果没有效果,可以尝试用较大电阻(例如100kΩ)代替手指进行实验。

备注2:如果你通电的时候发现LED原先是熄灭的,说明P0.0读取到的是高电平,则应该用两个手指分别放在P0.0和GND上,使得电平变化,LED点亮。当然LED不亮还有一种可能是,你的程序没有被执行,可能是单片机最小系统电路出现了问题,或者程序写错了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 51单片机
    +关注

    关注

    269

    文章

    5648

    浏览量

    120649

原文标题:单片机小白(19)IO口原理知识补充:双向IO口、互补推挽、高阻态

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    数字电路中的和不定的区别

    请各位大侠么讲解一下与不定的区别?单片机的接口如何设置成
    发表于 08-26 16:52

    PIC怎么实现输出

    PIC16F877A实现输出,就像89C51的P0端口一样,输出"1"时候,电压较低???
    发表于 11-06 14:29

    单片机IO口悬空,究竟是什么意思?

    问一个菜鸟问题,单片机IO口悬空和究竟是什么?IO口具体设置成什么?(输出不接外部器件?输入不上拉?)我查了下百度都没说清楚,复制粘贴的就算了!!另外想问一下,LCD驱动时IO口
    发表于 06-28 08:47

    单片如何控制输出

    本帖最后由 hy658 于 2015-12-23 21:58 编辑 我们可以给单片机0或1.控制高电平或者低电平输出,能不能控制输出
    发表于 12-23 21:35

    关于单片机输出引脚的问题

    单片机引脚什么时候表现为?切断芯片的电源是否就使得芯片的引脚呈现
    发表于 03-11 12:12

    与三门的电路原理分析

    单片机I/O使用时都可以设置为输入,如凌阳,AVR等等。输入可以认为输入电阻是无穷大的,认为I/O对前级影响极小,而且不产生电流(不
    发表于 01-08 11:03

    【微信精选】单片机中的

    `在我们刚一开始接触到51单片机的时候对P0口必须加上上拉电阻,否则P0就是。对这个问题可能感到疑惑,为什么是
    发表于 07-29 07:00

    单片机中的到底什么意思?

    单片机中的到底什么意思?在我们刚一开始接触到51单片机的时候对P0口必须加上上拉电阻,否则
    发表于 12-31 08:00

    简析单片机中的

    在我们刚一开始接触到51单片机的时候对P0口必须加上上拉电阻,否则P0就是。对这个问题可能感到疑惑,为什么是
    发表于 07-24 07:32

    单片机中的到底什么意思?

    单片机中的是什么
    发表于 12-28 07:59

    单片机中的解析

      在我们刚一开始接触到51单片机的时候对P0口必须加上上拉电阻,否则P0就是。  对这个问题可能感到疑惑,为什么是
    发表于 01-13 16:56

    的相关资料下载

    悬空,顾名思义,就是不接任何器件啦:无上拉和无下拉,对外表现出电平不确定性不是所有的单片机都支持三输出。三
    发表于 11-24 08:19

    单片机IO的三是指什么

    一、三单片机IO的三是指:高电平(1)、低电平(0)、组态(Z)。二、
    发表于 11-25 06:42

    请问HC32F003的单片机IO口怎么配置成

    HC32F003的单片机IO口怎么配置成
    发表于 09-27 07:29

    Linux(Ubuntu)下51单片机的开发环境的配置及详细的操作步骤

    Linux(Ubuntu)下51单片机的开发环境的配置及详细的操作步骤视频讲解视频详细
    发表于 11-13 13:21 13次下载
    Linux(Ubuntu)下<b class='flag-5'>51</b><b class='flag-5'>单片机</b>的开发环境的配置及<b class='flag-5'>详细</b>的操作<b class='flag-5'>步骤</b>