边沿触发和电平触发的区别
当然不一样了
电平触发是在高或低电平保持的时间内触发,
而边沿触发是由高到低或由低到高这一瞬间触发
追问:
我总觉得都是在电平为某一值是而触发的。那边沿触发到底解决了电平触发哪点没有解决的问题呢?
追答:
边沿触发一般时间短,边沿触发一般时间都是us级的,响应要快的,而电平触发只须是高和低就可以了,没时间要求,比如10s 时间内总是低电平,那么它也是触发的,
比如中断计时或计数,最好用边沿触发,用电平触发误差会很大,电平触发一般用于简单报警,开关一类(时间要求不高的)
分类:
电平触发,就是只有高电平的时候才做指定的事,
边沿触发,就是有高电平向低电平转换,或者翻过来转换,这个转换过程触发一个动作。
上升沿,顾名思义,就是低电平向高电平转换的瞬间,比如
_______
____/ ,这个图中,/部分就是上升沿,
______
\_____ ,这个图中,\部分就是下降沿
电平就是电压,高电平就是高电压,低电平就是低电压
高电平触发就是当电压为高就触发
边沿触发就是当电压由高变低或由低变高时触发
上升沿触发 就是当电压从低变高时触发
下降沿触发 就是当电压从高变低时触发
边沿触发:上升沿和下降沿,这个在学数电时都学过的,简单说就是电平变化那一瞬间。
电平触发:一般是指低电平,就是电平变为低了之后的全部时间里。
如果是下降沿触发,当从高至低电平转变时,触发产生。低电平保持多久都只产生一次。
如果是低电平触发,那么在低电平时间内中断一直有效。如果在电平没有恢复之前就退出中断程序,那么会在退出后又再次进入中断。只要不退出是不会重复触发的。我的做法是在退出前关闭中断,等后面有空时再打开。、
如:外部中断1中断中来检测按键。
void ISR_INT1(void) interrupt 2 { if(!INT1) //INT1为外部中断1,INT1=P3^3. { DelayMs(10);//在此处可以添加动程序,防止按键抖动造成错误 if(!INT1) while(!INT1);//等待按键释放 { L1=!L1; } }
来在外部中断中来检测按键。虽有一丢丢效果。
但不建议用外部中断来检测按键。
当你按下S2或S3时已经执行中断服务子程序去了,延时消抖是不可行的,只有采用硬件消抖。在实际应用中INT1和INT0接的应该是稳定数字数字信号,而不是按键产生有干扰的数字信号,有条件的话就用硬件消抖。
外部中断是用来检测要求响应速度高(微秒级)的外设的,而按键的动作时间都大于40毫秒,你可以测试一下。
虽然还是有很多做开发板的把按键做在中断上,但那只是验证是否好用,产品上尽量不要这样做。
按键消抖也不要用延时10ms再检测一次的办法,延时的这10ms实在是浪费控制器的资源,要知道时间对微控制器来说是非常宝贵的。
在做按键检测时,建议设置一个10ms的定时器中断作为时钟节拍,并在中断中设置标志。
程序的主循环中检测时钟节拍标志,检测到标志后清除标志并扫描按键,记录当前按键状态并和上次检测的结果做比较,并记录相同的次数,连续三次检测到同一个按键按下,则确认按键按下。
这样既可以消抖保证按键的准确,又较少的占用了微控制器的时间资源,稍微增加了点程序的空间,在单片机做的人机界面的系统中,应该是最合算的。
转载于:https://www.cnblogs.com/isAndyWu/p/9917570.html