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

发布时间:2023-09-05  

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>