MSP430单片机无法进入外部中断!紧急求助!

#include"MSP430x14x.h"voiddelay(void);voidmain(){P1DIR&=~BIT0;P1IE|=BIT0;P1IES&=~BIT0... #include"MSP430x14x.h"
void delay(void);
void main(){
P1DIR &=~BIT0;
P1IE |= BIT0;
P1IES &=~ BIT0; //将中断设置为上升中断
P2DIR = 0xff; //P2端口设置为输出
P2OUT = 0xff; //初始状态,全灭
P3DIR = 0xff;
P3OUT = 0Xff;
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
_EINT(); //中断使能
while(1){

P2OUT&=~BIT6;
unsigned int i;
i=4000;
do{
i--;
delay();
}
while(i!=0);
}

}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
P2OUT|=BIT6; //LED灯进行指示
if(P1IFG&BIT0){

P1IFG&=~0XFF;
unsigned int i;
i=4000; // 延时8s
do{
i--;
delay();
}
while(i!=0);
}
}
//延时程序,延时十毫秒
void delay(){
unsigned int a ;
a= 4000;
do(a--);
while(a!=0);
}

用P1.0作为中断输入源,P2.6作为LED指示,如果进入中断,P2.6应该灭掉。。
但是在实验过程中,P1.0无论怎么变,P2.6的LED灯始终亮着。。
已经换过多个板子都是一样的结果。。应该是代码问题!!!
求助
展开
 我来答
匿名用户
2013-03-31
展开全部
不知道你能不能仿真,要是能仿真其实很简单就解决了啊。(我用的不是149,不是很确定是不是一样的)
放个断点在进中断第一句话,如果能进,说明初始化没问题,如果不能进,说明初始化有问题(大概看了下你程序,初始化加一句P1IFG &= ~BIT0;吧,也不一定是这个问题)。
上一步没问题了,再放个断点在标志位判断那个括弧里,就是if(P1IFG & BIT0)这句后边。如果进不了,那就是这里的问题,我一般是这样写的(芯片不一样哦):
//*****************************************************************************
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_RST(void)
{
__delay_cycles(2000);
switch(__even_in_range(P1IV, 16))
{
case 0: break;
case 2:// P1.0 IFG
{
…………刚删除掉的
}
break;
…………刚删除掉的
case 12: break; // P1.5 IFG
case 14: break; // P1.6 IFG
case 16: break; // P1.7 IFG
default: break;
}
P1IFG = 0x00;
}

另外while(1)里边那个延时还是去掉吧,你这样问题很大,按键按快了的话一直都执行不到P2OUT&=~BIT6;吧,执行到的话灯也亮了8至16秒的任一时间了。
mc_wangbo
2013-04-01 · TA获得超过1368个赞
知道小有建树答主
回答量:825
采纳率:0%
帮助的人:256万
展开全部
在线仿真看一下吧。
中断里设断点,看看有没有进中断。
同时,看反汇编,看看delay函数有没有给优化掉。
IAR优化级别设成high,你这样的delay函数常会给优化掉,便会出现看不到灯灭的现象。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式