定时中断里面加延迟,为什么程序就挂掉了

2019-03-25 20:05发布

        extern void delayMs(unsigned int delayInMs);
      void delayMs(unsigned int delayInMs)
        {
                T2TCR = 0x02;                /* reset timer 计数器复位*/
                T2PR  = 0x00;                /* set prescaler to zero 设置预分频的值为0 */
                T2MR0 = delayInMs * (FPCLK-1);//匹配寄存器0   FPCLK等于24000000
                T2IR  = 1;                /* reset all interrrupts 设置全部中断寄存器*/
                T2MCR = 0x03;                /* stop timer on match */
                T2TCR = 0x01;                /* start timer 开启定时/计数器 */
          
                /* wait until delay time has elapsed */
                while (T2TCR & 0x01);
        }   
void TIMER1_IRQHandler (void)里面加了一个延迟
{
    delayMs(10); //定时时间10秒钟

}
程序只是示意表达我的意思,就是在定时器1中断的情况下,做个延迟

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
残雪
1楼-- · 2019-03-26 20:23
 精彩回答 2  元偷偷看……
ienglgge
2楼-- · 2019-03-26 21:21
中断里加延时,这是很忌讳的一种做法。进入中断,10秒内,不能执行主循环的内容。极大的降低效率。影响主循环时序。中断里改变一个变量的值。主循环里去判断这个值,再执行对应动作。多看看别人的程序。
柠檬酸钠
3楼-- · 2019-03-27 01:04
一般中断里面都是置标志位,然后主循环写函数
yunhai14
4楼-- · 2019-03-27 02:56
ienglgge 发表于 2017-4-24 13:06
中断里加延时,这是很忌讳的一种做法。进入中断,10秒内,不能执行主循环的内容。极大的降低效率。影响主循 ...

中断延迟了,主程序循环不能执行?主程序循环不应该受中断影响把
ienglgge
5楼-- · 2019-03-27 05:43
yunhai14 发表于 2017-4-24 17:53
中断延迟了,主程序循环不能执行?主程序循环不应该受中断影响把

怎么不受,中断执行完成之前,主循环不能运行。处于暂停状态。好好看看单片机基础。
okwh
6楼-- · 2019-03-27 09:39
本帖最后由 okwh 于 2017-4-28 09:14 编辑

可能是因为延时实质上也是一种中断,你却以为是查询等待。
结果是两个中断互相等待对付触发或退出,就死了。
通常在中断内的等待使用代码循环实现(微秒级的),不要用涉及中断的方式。如果是长时间等待,不应在中断内,可在主程序内。

一周热门 更多>