您的位置 首页 5G

单片机小白学步(23) 常识弥补:双向IO口、互补推挽、高阻态

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

咱们之前考虑不周,本篇在IO口原理常识的基础上,进一步弥补一些常识。

=================================================

双向IO口的输出:互补推挽

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不亮还有一种或许是,你的程序没有被执行,或许是单片机最小体系电路呈现了问题,或许程序写错了。

=======================================================

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/yingyong/5g/265866.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部