qq_20261129 2015-07-11 12:23 采纳率: 0%
浏览 1901

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 2015-07-15 15:28
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab用simulink求解一个二阶微分方程
  • ¥30 matlab解优化问题代码
  • ¥15 写论文,需要数据支撑
  • ¥15 identifier of an instance of 类 was altered from xx to xx错误
  • ¥100 反编译微信小游戏求指导
  • ¥15 docker模式webrtc-streamer 无法播放公网rtsp
  • ¥15 学不会递归,理解不了汉诺塔参数变化
  • ¥15 基于图神经网络的COVID-19药物筛选研究
  • ¥30 软件自定义无线电该怎样使用
  • ¥15 R语言mediation包做中介分析,直接效应和间接效应都很小,为什么?