社区导航

 
快捷导航
  • 首页
  • 论坛
  • 查看新帖
  • 最新回复
  • 社区活动
  • 联系管理员
  • 消灭零回复
  • E金币兑换
  • 干货
搜索
查看: 2364|回复: 12

求解答!有关外部中断的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()期间发生的。哪位大神可以帮忙解释一下啊~~
此帖出自MSP430论坛


回复

使用道具 举报

11

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

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


回复

使用道具 举报

5166

TA的帖子

74

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 | 显示全部楼层
顶顶!!!!!!!


回复

使用道具 举报

6057

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~~~~~~~~~~~~~~~~~


回复

使用道具 举报

6057

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 的帖子

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


回复

使用道具 举报

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

本版积分规则

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

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

GMT+8, 2017-12-18 20:49 , Processed in 0.526328 second(s), 17 queries , Redis On.

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