应该是开漏模式吧 |
忆1709 发表于 2021-7-10 21:59 10uA弱上拉是一定可以检测外部电平变化的! 你分析那么多,还不如直接实际电路测试一下,8051自诞生到现在,几十年了一直都是这么用,你不知道你的分析原理是从哪里学的 一个IO有10uA的弱上拉,外部是1的时候,它输出1,它读取到的就是1,这不对吗?他得是0才对吗? 当外部电平是低电平的时候,因为10uA的上拉电流并不大,外部低电平会把这个端口的电平拉低,读取到的就是0,这有问题吗? 如果还有问题,把你想要做的电路画好上传,或者自己用实际电路写好程序运行就知道结果了 不要仿真,要实际电路 这本身就是一个很简单的问题 |
Y_G_G 发表于 2021-7-9 15:47 嗯,浮空状态确实会引入干扰造成单片机误判,因此单片机端口必须有一个稳定状态。 这个问题我重新理一下吧,分以下两种情况来看。 第一种情况: 单片机端口设定成弱上拉输出,即上文所述的准双向口模式: 这种情况下,单片机本身是有一个稳定状态的,即1;此时外部电路在未输出时,呈现高阻状态,如果说我选型的这个外部器件,在触发工作时,会输出高电平,这种情况下,单片机端口它是没有办法感知到这个变化的,因为两个1相与还是1,因此必须加反相器,经过反相器输出0将单片机端口拉低,如此方可。 第二种情况: 单片机设定成高阻模式:此时对于单片机来说,输入1就是1,输入0就是0;高电平低电平都没有问题。但如果我这个外部器件在未输出时也对外呈现高阻,那么两端高阻,抗干扰能力就非常弱了,干扰信号很容易给单片机造成误判。 “如果你想A端口只管读取B端口的电平,但又不对外输出高电平,那么,B端口就要有输出的能力,” -----如果确实两端都呈现高阻状态了,B端口自然是没有输出能力的,这个比较常规的做法是在A端口外加一颗对地的大电阻(如100K),可以稳定端口A的状态。 |
忆1709 发表于 2021-7-9 09:48 我知道你的意思,你是想说:A端口我不输出,对外不输出低电平,也不输出高电平,我只管读取外部的电平状态而已 但你要知道,为什么会有上拉和下拉,还有强上拉和强下拉,逻辑电路的逻辑是严谨的,它一定是要有个确定的电平状态的, 如果单片机是高阻,那么外部B端口就会有上拉或者下拉 如果外部是不确定的,单片机A端口就会有上拉或者下拉 浮空是不可能浮空的,这辈子都不可能浮空的,单片机关断一个浮空的外部引脚,所读取到的数据是不稳定的 如果你想A端口只管读取B端口的电平,但又不对外输出高电平,那么,B端口就要有输出的能力,设定成传统端口的时候,下拉的任务由B端口来完成 |
第一个问题:你检测的高电平是一直接入到电路里面的么?你的意思是不是,一旦不接入电路,检测仍然是高电平,就无法判断高电平石否接入电路? 如果一直接入电路,就像大佬说的,I/O不是低电平就是高电平。 如果不是:悬空状态也是高电平,就无法判断了 这样用adc检测高于多少判定高点就ok。 |
忆1709 发表于 2021-7-7 09:05 可以的,普通io口本来就可以检测外部的电平变化的 |
Y_G_G 发表于 2021-7-6 15:47 通俗易懂,一下就明白了 |
忆1709 发表于 2021-7-7 09:05 它怎么就不行了呢? 外部是高平,它本身就是高平,读取到的就是高电平 外部是低电平,它读取到的就是低电平 这模式从8051出生到现在,一直都是这么用的 |
压着我头发啦 发表于 2021-7-7 09:44 明白了,谢谢。 |
忆1709 发表于 2021-7-7 09:11 51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。 普通51单片机检测高变低的过程(好像有能检测低到高的),你要检测低到高,需要用反相器或三极管,把状态反一下 |
压着我头发啦 发表于 2021-7-6 15:44 “对接外部中断引脚时,当变化成高电平,经反相器是变低,触发外部中断。” ------ 请教下,为何这里要加反相器呢? |
Y_G_G 发表于 2021-7-6 15:47 关于准双向口这个模式,我是想检测外部的高电平输入,这个模式应该是不行的,内部是弱上拉,本身就是高电平,当外部再输入一个高电平时,它的状态是没有变化的。 |
普通IO不用设置,默认头文件已经设置好,直接sbit相关IO的名字使用即可。关于第二点我也没有试过。 |
看图,其它的问题数据手册里有的
![]() |
问题一:设置成高阻模式,可以检测外部电平变化,程序里写成以while循环检测。你说的反相器是对接外部中断引脚时,当变化成高电平,经反相器是变低,触发外部中断。 问题二:我没接触过,应该是查一下手册,引脚当adc用时要设置成什么模式,把P1M1 P1M0的低5位设置对应就好 |