标题: 为什么单片机中断里面并不能加延时? [打印本页]

作者: kyd123456    时间: 2018-10-16 18:01
标题: 为什么单片机中断里面并不能加延时?
加了延时  为什么程序就出不来
一直在延时里面

作者: zha    时间: 2018-10-16 18:16
假设中断加了延时,那当在中断延时子程序里,下个中断来了,那就调到下一个中断,下一个中断延时子程序里又会来下一个中断………如此,这是个死嵌套,而且可以加延时,只要延时短,不过会影响效率
作者: wuxiaojia    时间: 2018-10-16 18:24
中断服务程序可以加延时程序的,你可以只开一个中断来测试一下。
作者: diy1997    时间: 2018-10-16 18:25
在进中断后关了中断,最后出来时再打开。
作者: 1233655556656    时间: 2018-10-16 18:57
延时要加在中断函数里
作者: 文凤轩    时间: 2018-10-16 19:00
那样会影响中断执行的
作者: 1978225338    时间: 2018-10-16 20:33
死循环 楼上说的感觉不错  学习学习
作者: cjm82    时间: 2018-10-16 21:21
中断里最好不要写循环,更不应该写DELAY之类的东西.
其实DELAY这类东西,平时应该注意养成习惯,能不用尽量不要去用.
作者: yzwzfyz    时间: 2018-10-16 22:23
可以加延时!
提出这个问题,说明你对定时器理解的不够。
你需要再定时器原理,并想想楼上网友说的是否正确?
作者: sxhwdz    时间: 2018-10-17 07:20
在一个中断里面使用延时程序占用CPU资源,势必影响新的中断请求,以及中断级别较低的中断请求。
作者: mrhan1992    时间: 2018-10-17 08:53
中断中尽量避免加入延时或者操作比较耗时的操作,因为,中断就是要去执行很要紧的事情,当中断产生时,NVIC便会强行把CPU拉到中断现场去处理,这时候如果加上延时,会独占CPU并且让CPU做没有意义的事情,浪费资源。
作者: phang    时间: 2018-10-17 09:23
想说两点:
1.为什么会进入中断, 因为有中断标志位置位(置1) ,比如 INTFlag = 1 ;
然后进入中断。
void INTHandler(void)
{
    DELAY();//这是添加的延时
}
那么如果没有将“中断标志位 INTFlag”清零,就会一直进入“中断服务函数-void INTHandler(void)”,
那就一直执行里面的操作,延时。。。
2.如果想中断后延时,你可以在中断里面添加一个标志位:
void INTHandler(void)
{
      INTFlag = 0 ;//将中断标志清零
      xxflag = 1;//xxflag是定义的全局变量,指示已经产生中断的标志
}

main函数或者其他函数里面检测 if(xxflag == 1){ xxflag == 0 ; DELAY(); }

这样就行了
作者: sorckey    时间: 2018-10-17 11:24
中断里加延时?那中断的意义就不存在了。
作者: gotofly    时间: 2018-10-17 15:07
为了程序的效率,中断里的函数要尽量简单




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1