菜鸟写了一段程序如下,希望实现电子秤的功能。中断的话是两个按键触发的,首次按下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();
}
}
}
拜谢