新手请教一个问题,关于51单片机IO口检测下降沿的。检测下降沿是检测是1跳变到0的那个时段,看过一
答案:2 悬赏:10 手机版
解决时间 2021-12-02 05:10
- 提问者网友:伴风望海
- 2021-12-02 00:07
新手请教一个问题,关于51单片机IO口检测下降沿的。检测下降沿是检测是1跳变到0的那个时段,看过一
最佳答案
- 五星知识达人网友:野味小生
- 2021-12-02 00:43
下降沿检测,说白了就是满足这样一个逻辑,上次检测是1,这次检测是0,就是下降沿。
从这个条件可知,要确保能够正确检测到一个下降沿,负脉冲的宽度,必须大于一个检测周期,当负脉冲宽度小于一个检测周期,就有可能产生漏检。另一方面,要正确检测逻辑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,同样要求高电平持续时间大于一个检测周期。
如果检测是硬件的,比如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楼网友:行路难
- 2021-12-02 02:12
数字电路中,数字电平从高电平(数字“1”)变为低电平(数字“0”)的那一瞬间叫作下降沿。下降沿触发是当信号有下降沿时的开关动作,当电位由高变低而触发输出变化的就叫下降沿触发。也就是当测到的信号电位是从高到低也就是下降时就触发,叫做下降沿触发。
这个在按键触发中断时常用到,你看到按键的动作是很快的,但对单片机来说每次的按键都会被解读好几次。因为按键是机械结构,按下去都会产生弹跳,这个弹跳瞬间就会被单片机捕获,从而造成被读到好几次。
这个在按键触发中断时常用到,你看到按键的动作是很快的,但对单片机来说每次的按键都会被解读好几次。因为按键是机械结构,按下去都会产生弹跳,这个弹跳瞬间就会被单片机捕获,从而造成被读到好几次。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯