我的程序中每次中断处理都将相应的IFG置为0了,可是过一下这个标识位又自动变成1了,而我的程序根本没有处理过这个IFG位。
我用的是133,不知道这是为什么。盼望高手解答。谢谢!
是这样,我在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(),退出后就一定不会变。