|
求解答!有关外部中断的PxIFG的问题,为虾米老是不确定呢。。。。
[复制链接]
我用Lanchpad上的两个LED灯做外部中断实验的时候,PxIFG明明已经置0了,但还是会变。。。
#include
#define LED1 BIT0 //红灯
#define LED2 BIT6 //绿灯
unsigned int a=0;
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR |= LED1+LED2;
P1DIR &=~BIT3; //外部中断位P1.3
P1OUT &=~(LED1+LED2); //红,绿灯置暗
P1IFG &=~BIT3;
P1IE |= BIT3;
_EINT();
while(1)
{
if(a)
{
P1OUT ^=LED1; //红灯变
if(P1IFG&BIT3) //检查IFG是否变化
{
P1OUT ^=LED2;
}
_delay_cycles(2000000);
if(P1IFG&BIT3) //检查IFG是否变化
{
P1OUT ^=LED2;
_delay_cycles(2000000);
}
a=0;
P1IE |= BIT3;
if(P1IFG&BIT3)
{
P1OUT ^=LED2; //绿灯变
}
}
}
}
#pragma vector=PORT1_VECTOR
__interrupt void test(void)
{
P1IE &=~BIT3;
P1IFG&=~BIT3;
a=1;
}
上面是我的代码。我在第一个_delay_cycles()前后检测IFG的变化,LED显示红灯亮了2秒后绿灯亮起,再2秒后红灯灭,绿灯保持。说明IFG在第一个_delay_cycles期间发生了反转,被置1了。然后在开了IE后立马进中断把a置1,再返回main执行。
我就很郁闷,IFG什么时候被置1了?我没动过啊,就在第一个_delay_cycles()期间发生的。哪位大神可以帮忙解释一下啊~~
|
|