为什么IFG(中断标识位)会自动置1

fuhognquan   2004-11-10 13:37 楼主
我的程序中每次中断处理都将相应的IFG置为0了,可是过一下这个标识位又自动变成1了,而我的程序根本没有处理过这个IFG位。

我用的是133,不知道这是为什么。盼望高手解答。谢谢!

回复评论 (5)

你说的是哪个IFG
点赞  2004-11-10 17:04
是啊,你说的太含糊,不明白。说仔细点/
点赞  2004-11-10 19:21
是这样,我在P2.1端口的中断处理程序中接收了外部数据后,将P2.1的中断屏蔽,然后将其IFG置0,接着退回到主程序,进入休眠状态。

但是在测试中,我在数据传输完毕后(也就是休眠状态中),查看P2端口的Register,发现P2.0、P2.1、P2.2的IFG位都变成1了。

而事实上,我在主程序初始化的时候已经将P2端口的所有IFG位全部置为0了,P2.0和P2.2的IE、IFG从来就没有修改过,P2.1的IFG如前所述,在中断处理程序中也已经置为0了。

我已经把P2.1的中断关掉,因此IFG的自动改变不会产生新的中断,但是如果P2端口的其它引脚产生中断,那么我在判断中断源的时候就会出错。

中断处理程序:
{
……
if (A)
ProcessA();
else
ProcessB();

P2IFG &= ~BIT1;
}

我都快要疯了,好长时间都没有解决这个问题,而别人的程序(运行在别的133芯片上)就没有这个问题。难道这片133是次品?可是从程序测试来看,这种IFG的自动变化好像很有规律,运行了ProcessA(),退出后就一定会自动变化,而运行了ProcessB(),退出后就一定不会变。
点赞  2004-11-11 01:51
你的端口方向啉了??
点赞  2004-11-11 09:44
选择端口方向时,IFG有可能置位的,所以你看看呢
点赞  2004-11-13 13:37
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复