PIC中断写法

2020-02-09 09:35发布

单片机PIC16F877A
void interrupt  INT()
{
        GIE=0;
        {中断代码}
        GIE=1;
}

这个中断写法,导致程序堆栈溢出,程序跑飞。

void interrupt  INT()
{
        {中断代码}
}
这个中断写法,程序才正常。

这个问题搞了我好久啊。
一直以为是8级堆栈用完了。。。。。。。。。。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
12条回答
shenme
2020-02-10 03:34
同意3楼的说法
C语言会自动插入中断保护和中断保护恢复,并且中断服务程序返回用retie,这个已经包括将GIE位置1的了
所以不要再多加一句GIE=1的命令,加了就等于未离开中断服务程序就允许中断,在有其他中断请求下,立刻重新调用中断服务程序,造成堆栈溢出
中断服务程序返回前一定要将现在处理的中断的标志位清零,否则一返回又立即进入中断,程序就死在那里
顺便说一句,进入中断服务程序时,芯片自动将GIE清零,所以不必加GIE=0的命令,虽然这个加了也不会有什么影响
建议LZ看一下汇编语言,看一下编译器编译出来的汇编语言,那么就一清二楚了

一周热门 更多>