社区导航

 
查看: 2622|回复: 12

[LaunchPad] 求解答!有关外部中断的PxIFG的问题,为虾米老是不确定呢。。。。

[复制链接]

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-12-2 23:25:08 | 显示全部楼层 |阅读模式
我用Lanchpad上的两个LED灯做外部中断实验的时候,PxIFG明明已经置0了,但还是会变。。。
#include <msp430g2553.h>
#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()期间发生的。哪位大神可以帮忙解释一下啊~~


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-2 23:26:10 | 显示全部楼层
求解释!!


回复

使用道具 举报

5459

TA的帖子

185

TA的资源

版主

Rank: 6Rank: 6

发表于 2012-12-3 09:31:30 | 显示全部楼层
IFG是与IO实时联系的,与IE无关,IE只是控制IFG被置位后是否进入中断程序。

点评

您是说,我改动了PxOUT导致IFG变化是吗? 但是我改变的是其他端口啊,而且我用P2的端口做中断,p1的LED,还是会出现这种情况啊!  详情 回复 发表于 2012-12-4 18:42


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-4 18:42:59 | 显示全部楼层

回复 板凳 lcofjp 的帖子

您是说,我改动了PxOUT导致IFG变化是吗? 但是我改变的是其他端口啊,而且我用P2的端口做中断,p1的LED,还是会出现这种情况啊!


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-4 18:44:18 | 显示全部楼层
求解释啊~


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-4 23:08:23 | 显示全部楼层
再顶~~~~~~~~~~~~~~~~


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-6 21:56:11 | 显示全部楼层
顶顶!!!!!!!


回复

使用道具 举报

6039

TA的帖子

13

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2012-12-7 14:14:42 | 显示全部楼层
单步执行到 P1OUT ^=LED1; 这一句再往下走,
可能有误触发,只要有误触发标志位就会置位。

点评

不大明白,您说的误触发是指什么呢?  详情 回复 发表于 2012-12-8 22:43


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-8 22:43:17 | 显示全部楼层

回复 8楼 wstt 的帖子

不大明白,您说的误触发是指什么呢?

点评

中断管脚上有电平抖动,被单片机误认为是中断信号  详情 回复 发表于 2012-12-9 13:47


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-8 22:43:29 | 显示全部楼层
继续顶~


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-9 13:15:15 | 显示全部楼层
dng~~~~~~~~~~~~~~~~~


回复

使用道具 举报

6039

TA的帖子

13

TA的资源

裸片初长成(初级)

Rank: 10Rank: 10Rank: 10

荣誉会员勋章

发表于 2012-12-9 13:47:27 | 显示全部楼层

回复 9楼 zdldcyy 的帖子

中断管脚上有电平抖动,被单片机误认为是中断信号

点评

但这应该是偶然现象吧,可是我每次运行都是一样的情况啊。。。  详情 回复 发表于 2012-12-13 23:27


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

 楼主| 发表于 2012-12-13 23:27:42 | 显示全部楼层

回复 12楼 wstt 的帖子

但这应该是偶然现象吧,可是我每次运行都是一样的情况啊。。。


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2018-12-16 02:59 , Processed in 0.343448 second(s), 17 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表