请各位大侠给指点一下: 我在用MSP430做一个智能温度控制器,现在P1口连接着一个4X4的键盘,只要一按键就进入中断,我希望在中断里改变一个全局变量的值,可是不知道为什么这个值怎么都带不出来。请各位高人指点一二。
有否原程序啊!!应该是你定义的不是全局变量!!或者是米其它地方改写了
也有可能你的全局变量与中断程序中的局部变量重名,以至在中断程序中不可见。
没有啊,我定义的的确是全局变量,而且也没有跟其他变量重名。我曾经测试了一个很简单的程序,就只是很简单的中断程序,我设置了一个全局变量然后再中断程序里改变了他的值,可是中断结束后我在显示全局变量的值还是没变,不知道到底是哪里出问题了,真是苦恼。
不可能的,我就爱用全局变量。给你个参考
#include "msp430x41x.h"
unsigned int flag;
main()
{
WDTCTL = WDTPW+WDTHOLD;
for(;;)
{ _EINT();
_BIS_SR(LPM3_bits);
_NOP();
_NOP();
if(flag &BIT0)
ACTIVE();
else
low_power();
}
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_inter (void)
{
flag |= BIT3;
_BIC_SR_IRQ(LPM3_bits);
}
P1口的中断没开
中断标志位没清零
#include "msp430x41x.h"
unsigned int flag;
main()
{
WDTCTL = WDTPW+WDTHOLD;
P1DIR = 0X00; //输入
P1IES = 0x00;//上升沿触发中断
P1IE = 0xff;//开p1中断
_EINT();
for(;;)
{
_BIS_SR(LPM3_bits);
_NOP();
_NOP();
if(flag &BIT0)
ACTIVE();
else
low_power();
}
}
#pragma vector=PORT1_VECTOR
__interrupt void PORT1_inter (void)
{
flag |= BIT3;
P1IFG=0x00 ; //清中断寄存器
_BIC_SR_IRQ(LPM3_bits);
}
__________________
各位大虾,我是单片机的初学者,请各位不要见笑阿,我的程序太长了,不好放,我就把我调试中断的一个小程序给大家看看吧,我的目的是想在中断程序执行完以后,让数码管又原来的0变成2,可是2怎么都带不出来,程序如下:
#include <msp430x14x.h>
int key;
unsigned char seg[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F};
void delay(void)
{
int i,j;
for(i=0;i<5000;i++)
for(j=0;j<5000;j++) ;
}
interrupt[PORT1_VECTOR]void putkey(void)
{
key=2;
P4OUT=0xFE;
}
void main(void)
{
BCSCTL1&=~0x80; //Xt2 is on
BCSCTL2 |=0x88; //SMCLK=XT2
WDTCTL=WDTPW+WDTHOLD; //Stop WDT
P1DIR=0x0F;
P1IE|=0xF0;
P1OUT=0x00;
P1IES|=0xF0; //中断触发沿选择为下降沿
//P1IE=0xF0; //中断使能
_EINT();
P5DIR|=0xFF;
P4DIR|=0xFF;
P4OUT=0x00;
P5OUT=0x00;
P5OUT=seg[0];
P4OUT=0xFD;
while(1)
{
delay();
P5OUT=seg[key];
}
}
你的程序在中断程序里出不来。端口中断需要手动清标志寄存器。一般在端口中断开始处就处理 Interrupt_buff = PxIFG;PxIFG = 0;
谢谢版主和各位大虾的帮助,我原来试过在中断里面清标志寄存器没有效果,原来还是版主说的对,需要在中断入口处也需要清零。
不过现在又出现了一个新问题,我现在是用中断程序带出来一个4X4的键盘的值,可是现在为什么就只能带出一行(随机的,先按哪一行就只显示哪一行)的键码值,如果反复输出,过一会儿连着一行的键码都戴不出来了,一点反应都没有了,好像中断不起作用了或者是数值由带不出来了,不知道是怎么回事。
嗯?怎么没人理我了?拜托,各位,再给点意见好不好?这个问题亟待解决!!!!!!!!!!!!!