51单片机读取引脚的数据时,要先将IO口输出设置为高电平。为什么?

之前用别的单片机,直接把对应的IO口设置为输入模式就好,也没考虑这个时候应该输出高电平还是低电平。但51没有IO方向寄存器之类的东西,就直接让他输出高电平,看看外设有没有将其拉低。这是因为51的高电平输出电流很小,随便一个低电平就能将其拉低的缘故吗?
有段时间没用51了,有点疑惑

是的, 51单片机作输入时就直接让他输出高电平,看看外设有没有将其拉低。这是因为51的高电平输出电流很小,随便一个低电平就能将其拉低的缘故,但低电平不能被拉高。
温馨提示:内容为网友见解,仅供参考
第1个回答  2021-03-01
51单片机在加电或者复位后都自动把所有的PIO端口置高电平的(相当于设置为输入端口),只要你没有对该端口做过置0操作,那么你做端口的输入操作中,是不必关心该端口是否已经为高电平或者需要先置高电平的;
当然,你也可以在程序运行之初对相应的端口执行一次写1操作,也是可行与安心的;
第2个回答  2021-03-02
51单片机的IO也可以设置的,没有听说这种用法,只有教材那种按键检测回路是这样的,但其扫描的是其他IO.追问

传统的51我记得没有IO口输入输出控制寄存器一说

51单片机读取引脚的数据时,要先将IO口输出设置为高电平。为什么?
是的, 51单片机作输入时就直接让他输出高电平,看看外设有没有将其拉低。这是因为51的高电平输出电流很小,随便一个低电平就能将其拉低的缘故,但低电平不能被拉高。

51单片机在读取数据前为什么要置高?
电路中存在的一个普遍的现象:高电平很容易被低电平拉低,而低电平一般不可能被高电平拉高。所以在读数据之前将单片机IO口拉高才不会影响原来数据线上的数据!

51单片机IO读高电平
因为单片机的I\/O口在读信号时只能读低电平(你看看书上介绍IO口的部分就会明白,他们是集电极开路方式)所以当把某个IO设为低电平时,内部三极管导通相当于直接把外部信号接地了,所以出现你的这个现象,要是外部信号是高电平的话应该加个反向器使起要动作时发低电平,而IO应该设为高电平读取,另外把IO...

51单片机引脚检测高电平输入的问题
在网上看到这样的一句话 “51单片机的I\/O 口检测高低电平是需要首先让该端口置为1的。此时这个引脚才被设置为输入”,--正确。也就是说如果上面的设计可以做到的话,那么就需要一开始的时候给高电平吗?--必须先给端口置一。--你的电路,是做不到的。--你的电路,按键、不按键,送到引脚...

51单片机IO读高电平
因为单片机的I\/O口在读信号时只能读低电平(你看看书上介绍IO口的部分就会明白,他们是集电极开路方式)所以当把某个IO设为低电平时,内部三极管导通相当于直接把外部信号接地了,所以出现你的这个现象,要是外部信号是高电平的话应该加个反向器使起要动作时发低电平,而IO应该设为高电平读取,另外把IO...

51单片机上电后复位IO口输出是高电平?这个高电平是表示单片机内部MOS管...
我推荐一个电子技术导航网站你吧!--- 电子世家网址导航 。它分类收录了很多优秀的电子技术网站,你可以去逛逛的;特别是它里面的那些网站的论坛,有很多大虾分享的资料,希望能对在日后学习、从事电子技术的工作中有帮助 。...

51单片机 我要检查IO外接输入的电平状态,
把引脚设置为输入状态,输出一个1就行。这是单片机的设计者、生产厂家所规定的。在这个前提下,外界,只有输入低电平,才会改变引脚的状态;输入高电平,是没有反应的。如果,外设一定要送来高电平,那就必须加上一个反相器,再连接到单片机的引脚即可。其中的 P0口 为总线式设计 电路形式 为 集电极...

为什么单片机 输出全为高电平
如果是5V单片机系统,高输出2V的情况有:1、IO口外接了较大的负载,拉低了端口的电压(一般单片机的IO为弱上拉),如果你断开负载测量端口电压还是2V的话就有可能是你把单片机的IO口功能配置错了(如AVR单片机等);若为51系列的单片机P0口是需要接上拉电阻的。且一般单片机的输出能力很弱,只能通过...

51单片机4个I\/O口初始化时,分别作为输入输出,置电平高低问题,还有引脚...
可以这么考虑!51单片机的I\/O端口可不象PIC的那样要你人为的去定义输出或输入,可在使用它前你要注意以下情况:如做输出口时你可直接使用,不过我建议你最好在设计硬件时就把外线路中的相关端口控制设计为低有效,高关断,因它在上电复位后的第一状态它们都是高电平,这样你可少很多操作。你在用它做...

51单片机怎么读取P0,P1口的值,是要先给一个高电平才能读取吗?c程序...
为了保险一般需要先给送一个“高”,再读取IO口,这是针对那些没有加上拉电阻的IO口而采取的办法,如果加了上拉电阻,是不用这么麻烦的,可以直接读取IO口的值。uncsigned char dat0,dat1;\/\/P0=0xff;P1=0xff;dat0=P0;dat1=P1;

相似回答