找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

STC15单片机的IO口疑问?

查看数: 4529 | 评论数: 17 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-7-6 15:27

正文摘要:

看STC15单片机的规格书IO口相关介绍,STC15的P1口都可以配置成ADC口,也可以配置成普通IO口,配置ADC用P1ASF寄存器来配置;如图1; 配置成普通IO口时有4种工作模式,用P1M1和P1M0寄存器来配置,如图2; 想问 ...

回复

ID:446775 发表于 2021-7-11 22:43
应该是开漏模式吧
ID:401564 发表于 2021-7-11 17:34
忆1709 发表于 2021-7-10 21:59
嗯,浮空状态确实会引入干扰造成单片机误判,因此单片机端口必须有一个稳定状态。
这个问题我重新理一下 ...

10uA弱上拉是一定可以检测外部电平变化的!
你分析那么多,还不如直接实际电路测试一下,8051自诞生到现在,几十年了一直都是这么用,你不知道你的分析原理是从哪里学的
一个IO有10uA的弱上拉,外部是1的时候,它输出1,它读取到的就是1,这不对吗?他得是0才对吗?
当外部电平是低电平的时候,因为10uA的上拉电流并不大,外部低电平会把这个端口的电平拉低,读取到的就是0,这有问题吗?
如果还有问题,把你想要做的电路画好上传,或者自己用实际电路写好程序运行就知道结果了
不要仿真,要实际电路
这本身就是一个很简单的问题
ID:847776 发表于 2021-7-10 21:59
Y_G_G 发表于 2021-7-9 15:47
我知道你的意思,你是想说:A端口我不输出,对外不输出低电平,也不输出高电平,我只管读取外部的电平状态而已 ...

嗯,浮空状态确实会引入干扰造成单片机误判,因此单片机端口必须有一个稳定状态。
这个问题我重新理一下吧,分以下两种情况来看。
第一种情况: 单片机端口设定成弱上拉输出,即上文所述的准双向口模式:
这种情况下,单片机本身是有一个稳定状态的,即1;此时外部电路在未输出时,呈现高阻状态,如果说我选型的这个外部器件,在触发工作时,会输出高电平,这种情况下,单片机端口它是没有办法感知到这个变化的,因为两个1相与还是1,因此必须加反相器,经过反相器输出0将单片机端口拉低,如此方可。
第二种情况:  单片机设定成高阻模式:此时对于单片机来说,输入1就是1,输入0就是0;高电平低电平都没有问题。但如果我这个外部器件在未输出时也对外呈现高阻,那么两端高阻,抗干扰能力就非常弱了,干扰信号很容易给单片机造成误判。
“如果你想A端口只管读取B端口的电平,但又不对外输出高电平,那么,B端口就要有输出的能力,”
-----如果确实两端都呈现高阻状态了,B端口自然是没有输出能力的,这个比较常规的做法是在A端口外加一颗对地的大电阻(如100K),可以稳定端口A的状态。




ID:401564 发表于 2021-7-9 15:47
忆1709 发表于 2021-7-9 09:48
可能是我描述不准确,造成理解上的偏差;
我的意思是“要检测外部器件输入的一个高电平信号变化”,附一 ...

我知道你的意思,你是想说:A端口我不输出,对外不输出低电平,也不输出高电平,我只管读取外部的电平状态而已
但你要知道,为什么会有上拉和下拉,还有强上拉和强下拉,逻辑电路的逻辑是严谨的,它一定是要有个确定的电平状态的,
如果单片机是高阻,那么外部B端口就会有上拉或者下拉
如果外部是不确定的,单片机A端口就会有上拉或者下拉
浮空是不可能浮空的,这辈子都不可能浮空的,单片机关断一个浮空的外部引脚,所读取到的数据是不稳定的
如果你想A端口只管读取B端口的电平,但又不对外输出高电平,那么,B端口就要有输出的能力,设定成传统端口的时候,下拉的任务由B端口来完成
ID:689247 发表于 2021-7-7 17:02
第一个问题:你检测的高电平是一直接入到电路里面的么?你的意思是不是,一旦不接入电路,检测仍然是高电平,就无法判断高电平石否接入电路?
如果一直接入电路,就像大佬说的,I/O不是低电平就是高电平。
如果不是:悬空状态也是高电平,就无法判断了
这样用adc检测高于多少判定高点就ok。
ID:934353 发表于 2021-7-7 16:58
忆1709 发表于 2021-7-7 09:05
关于准双向口这个模式,我是想检测外部的高电平输入,这个模式应该是不行的,内部是弱上拉,本身就是高电 ...

可以的,普通io口本来就可以检测外部的电平变化的
ID:689247 发表于 2021-7-7 16:50
Y_G_G 发表于 2021-7-6 15:47
看图,其它的问题数据手册里有的

通俗易懂,一下就明白了
ID:401564 发表于 2021-7-7 16:32
忆1709 发表于 2021-7-7 09:05
关于准双向口这个模式,我是想检测外部的高电平输入,这个模式应该是不行的,内部是弱上拉,本身就是高电 ...

它怎么就不行了呢?
外部是高平,它本身就是高平,读取到的就是高电平
外部是低电平,它读取到的就是低电平
这模式从8051出生到现在,一直都是这么用的
ID:847776 发表于 2021-7-7 10:14
压着我头发啦 发表于 2021-7-7 09:44
51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查 ...

明白了,谢谢。
ID:716656 发表于 2021-7-7 09:44
忆1709 发表于 2021-7-7 09:11
“对接外部中断引脚时,当变化成高电平,经反相器是变低,触发外部中断。”
------ 请教下,为何这里要 ...

51单片机的外部中断有两种触发方式可选:电平触发和边沿触发。选择电平触发时,单片机在每个机器周期检查中断源口线,检测到低电平,即置位中断请求标志,向CPU请求中断。选择边沿触发方式时,单片机在上一个机器周期检测到中断源口线为高电平,下一个机器周期检测到低电平,即置位中断标志,请求中断。    普通51单片机检测高变低的过程(好像有能检测低到高的),你要检测低到高,需要用反相器或三极管,把状态反一下
ID:847776 发表于 2021-7-7 09:11
压着我头发啦 发表于 2021-7-6 15:44
问题一:设置成高阻模式,可以检测外部电平变化,程序里写成以while循环检测。你说的反相器是对接外部中断 ...

“对接外部中断引脚时,当变化成高电平,经反相器是变低,触发外部中断。”
------ 请教下,为何这里要加反相器呢?
ID:847776 发表于 2021-7-7 09:05
Y_G_G 发表于 2021-7-6 15:47
看图,其它的问题数据手册里有的

关于准双向口这个模式,我是想检测外部的高电平输入,这个模式应该是不行的,内部是弱上拉,本身就是高电平,当外部再输入一个高电平时,它的状态是没有变化的。
ID:272119 发表于 2021-7-6 16:17
普通IO不用设置,默认头文件已经设置好,直接sbit相关IO的名字使用即可。关于第二点我也没有试过。
ID:401564 发表于 2021-7-6 15:47
看图,其它的问题数据手册里有的


ID:716656 发表于 2021-7-6 15:44
问题一:设置成高阻模式,可以检测外部电平变化,程序里写成以while循环检测。你说的反相器是对接外部中断引脚时,当变化成高电平,经反相器是变低,触发外部中断。 问题二:我没接触过,应该是查一下手册,引脚当adc用时要设置成什么模式,把P1M1 P1M0的低5位设置对应就好

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表