关于msp430外部中断的问题,程序只能中断一次,然后就不能中断了。请高手解答

#include <msp430x24x.h>
void main()
{WDTCTL = WDTPW + WDTHOLD;
_DINT();
P4DIR=0XFF;
P4SEL=0X00;
P4OUT=0xFF;
P1SEL=0x00;
P1DIR=0x00;
P1IES=0x00;
P1IE=0xff;
P1IFG=0X00;
_EINT();
while(1);
}

#pragma vector=PORT1_VECTOR
__interrupt void port_1(void)
{P1IE=0x00;
P4OUT=~P4OUT;
P1OUT=0x00;
P1IE=0xff;
P1IFG=0x00;
}
_DINT();
次句去掉。

传一个例程给你看看
/***************************************************
程序功能:用中断方式读取四个独立式按键的键值,同时将
按键的键值在数码管上显示出来
----------------------------------------------------
测试说明:按动K1~k4四个按键,观察数码管显示
***************************************************/
#include <msp430x14x.h>
#include "BoardConfig.h"

#define keyin (P1IN & 0x0f)

//数码管7位段码:0--f
uchar scandata[16] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71};

uchar KeyVal = 0; // 按键的键值

void delay(void);

/********************主函数********************/
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; //关闭看门狗
BoardConfig(0x88); //打开数码管,关闭流水灯和电平转换

P1IES = 0x0f; // P1.0~P1.3选择下降沿中断,按键按下时为低电平
P1IE = 0x0f; // 打开中断使能
P1DIR = BIT7; //设置P1.0~P.3为输入状态,P.7为输出
P1OUT = 0;
P4DIR = 0xff;
P5DIR = 0xff;
P4OUT = 0x3f;
P5OUT = 0xf7;
_EINT(); //打开全局中断控制位
while(1)
{
LPM1;
P4OUT = scandata[KeyVal];
}
}
/*******************************************
函数名称:delay
功 能:用于消抖的延时
参 数:无
返回值 :无
********************************************/
void delay(void)
{
uint tmp;

for(tmp = 12000;tmp > 0;tmp--);
}
/*******************************************
函数名称:PORT1_ISR
功 能:P1端口的中断服务函数
参 数:无
返回值 :无
********************************************/
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_ISR(void)
{
if(P1IFG & 0x0f)
{
switch(P1IFG)
{
case 0x01:
if(keyin == 0x0e) //如果是第一个按键被按下
{
delay();
if(keyin == 0x0e)
{
while(keyin != 0x0f); //等待按键放开
KeyVal = 1;
LPM1_EXIT;
P1IFG = 0;
return;
}
}
case 0x02:
if(keyin == 0x0d) //如果是第二个按键被按下
{
delay();
if(keyin == 0x0d)
{
while(keyin != 0x0f); //等待按键放开
KeyVal = 2;
LPM1_EXIT;
P1IFG = 0;
return;
}
}
case 0x04:
if(keyin == 0x0b) //如果是第三个按键被按下
{
delay();
if(keyin == 0x0b)
{
while(keyin != 0x0f); //等待按键放开
KeyVal = 3;
LPM1_EXIT;
P1IFG = 0;
return;
}
}
case 0x08:
if(keyin == 0x07) //如果是第四个按键被按下
{
delay();
if(keyin == 0x07)
{
while(keyin != 0x0f); //等待按键放开
KeyVal = 4;
LPM1_EXIT;
P1IFG = 0;
return;
}
}
default:
while(keyin != 0x0f); //等待按键放开
//KeyVal = 0;
//LPM1_EXIT;
P1IFG = 0;
return;
}
}
}
//例程来自LT-1B的程序例子追问

能把BoardConfig.h这个文件也发上来吗?最好还有图

追答

BoardConfig.h 这个文件只是开发板的一些设置 完全不需要的。对这个程序没有影响。LT-1B的图的话,网上有很多。百度能插图吗?不知道哦

温馨提示:内容为网友见解,仅供参考
第1个回答  2012-05-05
多源中断不能硬件自动开中断,得软件开中断,在中断服务函数最后加个_DINT();就行了
第2个回答  2011-08-29
程序好像没什么问题,是不是仿真有问题……

MSP430的CCRx中断在连续计数模式下怎么产生中断的
首先,如果你只是用连续计数模式,哪么CCTLx(比较捕获寄存器)根本可以不设置,其次,CCR0的初值没有设置,中断只会在定时器溢出时才能发生。然后,第二个中断,你是想用CCR1,CCR2吧,,也是因为你没设置初值,TAIV的值只会是10,也就是溢出中断产生才会进中断。case中的2,4是计数值到CCR1,2而...

msp430如何让定时器计数器重新开始计数。使它重复不断的产生中断
1、你的GIE没开,也许压根没产生过中断。2、也许你开GIE了。TI_CC_LED1在异或下能亮,说明你的LED1的控制位应该是0吧?既下拉点亮LED1,但你要知道0^0永远都是0,你的LED1永远也都是亮着的。3、你打算LED2闪烁,可你用或语句它只能保持一个状态(恰恰这个状态是1吧?LED2就这么灭着不亮)...

msp430有点困惑啊,跪求高手指导,,,求救求救
MSP430单片机最大的特点就是低功耗,所以可以应用到一些消费电子上面,应用电池解决方案的场合。我个人认为,430单片机相比51单片机,内部的资源比较强大,不管是时钟系统、中断资源、IO口资源、定时器、AD、UART还有其他的等,都集成到单片机内部了,这样使用起来就不需要外接硬件电路。用户使用方便了,随之而...

为什么在连续模式下CCR0的值对中断的间隔没有影响(MSP430),求高手...
连续模式中定时器从0计数到0FFFFh,然后再重新从0开始计数,如此循环;当定时器充0FFFFh变回0时,TAIFG中断标志位置位。上述过程与CCRx值无关吧。

外部中断标志位清除不了
IO 功能并设为输出。(3 )中断标志需要软件清除!可以用软件置位产生中断。MSP430 的 IO 中断由 P1 口和 P2 口输入变化的电平触发,P1 和 P2 各 有八个输入 IO ,P1 的八个 IO 共用一个中断向量,P2 的八个 IO 共用 另一个中断向量。在中断服务程序中判断到底是哪个 IO 口触发中断。

__even_in_range函数在MSP430里是实现什么功能的,,求高手解答
like TAIV.\/ 原型为:__intrinsic unsigned short __even_in_range(unsigned short __value,unsigned short __bound);在msp430里经常被用在多源中断的查询中,如 switch( __even_in_range(TAIV,10)只有在TAIV的值是在0--10内的偶数时才会执行switch函数内的语句 其作用是提高switch语句的效率 ...

新手关于430单片机g2553的问题
2.在这个程序中根本就用不到delay这个程序 是别人后加的 就算有 也不是系统编好的 需要自己编写 3.那句低功耗的程序没有错 应该是仿真操作问题 我也遇到过 我自己瞎整 有个方法 我也不知道原理 你在中断程序第一句设个切换断点再试试 至于程序的意义 我认为:P1.1是输入的不是输...

...msp430g2553 flash掉电保存数据,flash能读能写,就是不能掉电后保存...
在Flash erase 栏目中,有三个选项,分别是1. 只擦除主存储区2. 擦除主存储区和信息区3. 保留未改变的存储区。选择第一项 然后只烧写写入Flash程序,单步调试,调出FLASH窗口,可以看到写入后的数据;如果写入数据不对,请试试在写入之前配置好FNx(分频,257K~476K)或关其它中断 ...

请教一个关于430单片机TA定时器与CCR0的问题
1、你用的是连续计数模式(MC_2),TAR到50000后继续计数至65535,然后溢出归0,继续计数。2、TAR不用也不能清零,CCR0已加 50000,不冲突。

MSP430F149怎么利用TimerB的七个捕获\/比较器输出频率相同但脉冲不是同时...
这是在1ms内的设置,其他类似。具体程序怎么写你自己理解吧。第二种:跟第一种类似,就是在其中TBX输出脉冲期间,设置暂时关闭其它两个输出(即将引进设置为非OUTPUT模式),等待脉冲输出结束是在中断函数中进行一次寄存器配置,以使其中一个输出脉冲,另外两个输出为低。另外: 如果你只需要完成这个功能...

相似回答