2 qq 20261129 qq_20261129 于 2015.07.11 20:23 提问

msp430F5529A中断程序运行卡顿

菜鸟写了一段程序如下,希望实现电子秤的功能。中断的话是两个按键触发的,首次按下S1,清零;第二次按下S1进行称重;按下S2则关机。

真正运行起来卡的不行甚至动不起来,请问是不是我的主函数设计有问题?

还有求多个触发中断的例程,感觉自己写的结构确实很不合理。

谢谢啦

void main(void)

{

P1DIR = 0X00;//调零,按下S1+开始称重,按下S1:设置P1.7为输入状态

P1IE = 0X80;//设置P1.7开中断

P1IES = 0X00;//设置P1.7中断为上升沿中断

P1IFG = 0;//清除P1的中断标志,无所谓,因为不用这个标志判断进入何种中断程序

 _EINT();//开全局中断

P2DIR = 0X00;//关机,按下S2(P2.2),设为输入状态

P2IE = 0X04;//设置P2.2开中断

P2IES = 0X00;//设置P2中断为上升沿中断

 _EINT();//开全局中断





  welcome(); 

  LPM3;

}

具体的中断响应是这样的:
#pragma vector = PORT1_VECTOR
__interrupt void P1_ISR(void)
{
switch(m) //m为全局变量,初始值为1
{
case 1:
{
m = 0;
ADC();
zero[0] = results[0];
display0();
LPM3;
} //实现清零功能
case 0: //实现称重功能
{

ADC(); //称量程序
char q[4];
results[0] = results[0] - zero[0];
for(int i=3 ; i>=0; --i)
{
q[i] = results[0]%10+48;
results[0]=results[0]/10;
}
display(q);
LPM3;
}
}

}

#pragma vector = PORT2_VECTOR
__interrupt void P2_ISR(void)
{
switch(k)
{
case 1:
{
k = 0;
display2();
LPM3;
}
case 0:
{
k =1;
welcome();
}
}
}

拜谢

1个回答

devmiao
devmiao   Ds   Rxr 2015.07.15 23:28
Csdn user default icon
上传中...
上传图片
插入图片