关于中断的判断 TMR1IE&&TMR1IF 的疑问

2020-02-08 09:13发布

void interrupt ISR(void)
{
        if(TMR1IE&&TMR1IF)
        {

        }
}

datasheet 上说,溢出后  TIR1IF会置1,要软件清零,为什么不直接判断  TIM1IF  而是把TMR1IE和TMR1IF两个一起判断,这样做有什么好处?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
11条回答
eduhf_123
2020-02-08 17:50
surf_131 发表于 2012-5-11 01:36
正好讲反了。正因为只有一个中断源,万一哪个标志错误标示,你不消除中断标志就会造成反复进入中断的问题 ...

你似乎没有搞清楚“中断源”和“中断服务程序入口”这两个概念的区别。

PIC12/16系列有不止一个的中断源、但却只有一个中断服务程序入口,所以必须在中断服务程序中使用LZ位的方法来判断该执行哪个中断源对应的服务程序。

而在判断的时候,不能只判断中断请求标志,还要判断对应的中断使能位——因为你可以禁止一个中断被使能但却不能禁止外设产生中断请求。
如果只判断中断请求标志却不判断对应的使能位,可能会导致已经关闭了的中断被服务——这正是我们所不希望发生的。

一周热门 更多>