新手请教一个问题,关于51单片机IO口检测下降沿的。检测下降沿是检测是1跳变到0的那个时段,看过一
新手请教一个问题,关于51单片机IO口检测下降沿的。检测下降沿是检测是1跳变到0的那个时段,看过一些资料也请教过一些人,可还是不明白,太笨了!希望可以举一个事例,详细说明...
新手请教一个问题,关于51单片机IO口检测下降沿的。检测下降沿是检测是1跳变到0的那个时段,看过一些资料也请教过一些人,可还是不明白,太笨了!希望可以举一个事例,详细说明下
展开
2个回答
展开全部
下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿。
从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有可能产生漏检。另一方面,要正确检测逻辑1,同样要求高电平持续时间大于一个检测周期。
如果检测是硬件的,比如INT0中断,一个检测周期是一个机器周期,比如1us,那么脉冲信号的宽度就必须保证高电平、低电平都大于1us,所以说,检测上限是500K。
如果检测是软件的,比如每1mS检测一次,检测上限就浊500Hz。
从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有可能产生漏检。另一方面,要正确检测逻辑1,同样要求高电平持续时间大于一个检测周期。
如果检测是硬件的,比如INT0中断,一个检测周期是一个机器周期,比如1us,那么脉冲信号的宽度就必须保证高电平、低电平都大于1us,所以说,检测上限是500K。
如果检测是软件的,比如每1mS检测一次,检测上限就浊500Hz。
追问
嗯,那可不可以用一个小程序讲解一下,谢谢
追答
sbit inputPin = P1^0;
void main(void )
{
bit savePinState = inputPin;
while(1)
{
delay_1T(); // 检测间隔
bit nowPinState = inputPin;
if (( savePinState == 1 ) && ( nowPinState == 0 ))
{
// 检测到下降沿
}
savePinState = nowPinState; // 这句是重点,保存当前的状态,下次再检测这就是"上次状态"
}
}
展开全部
数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。下降沿触发是当信号有下降沿时的开关动作,当电位由高变低而触发输出变化的就叫下降沿触发。也就是当测到的信号电位是从高到低也就是下降时就触发,叫做下降沿触发。
这个在按键触发中断时常用到,你看到按键的动作是很快的,但对单片机来说每次的按键都会被解读好几次。因为按键是机械结构,按下去都会产生弹跳,这个弹跳瞬间就会被单片机捕获,从而造成被读到好几次。
这个在按键触发中断时常用到,你看到按键的动作是很快的,但对单片机来说每次的按键都会被解读好几次。因为按键是机械结构,按下去都会产生弹跳,这个弹跳瞬间就会被单片机捕获,从而造成被读到好几次。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询