单片机编程思路问题

2019-03-24 15:11发布

  基本定时器0.064ms中断一次,在ISR中将标志位加1,在main()中循环检测该标志位的值,当标志位等于特定的一些值(值1,值2,值3,值4,值5)时去执行不同的函数 #pragma vector=BASICTIMER_VECTOR __interrupt void basic_timer_ISR(void) {   if (bt_flag < 65535)     bt_flag += 1;   if (bt_flag == 65535)     IE2 &= ~BTIE;  }   main() {       while(1)    {      if (bt_flag == 1)                     F_D4 ();       else if (bt_flag == 2,值3,值4)                             F_DA();                else if(bt_flag ==5)                     subnetwork_judgment();                               else ;    } }     那位大侠能指点一下这个思路的可行性,以及注意点! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
12条回答
wangfuchong
1楼-- · 2019-03-25 17:34

原帖由 Goself 于 2011-12-16 19:36 发表 思路倒是没有问题,只不过我认为这并不是一个好的思路。程序比较大的时候,这种思路很容易产生各种混乱。而且,两个值之间的时间间隔不好把握,很容易造成CPU时间的浪费。


请问那能不能提供一个好的思路呢?

wangfuchong
2楼-- · 2019-03-25 22:56

原帖由 鸵鸟蝈蝈 于 2011-12-16 15:29 发表 TI有一篇MSP430的技术文档就是说的你这种思路,只不过它使用switch case来实现标志位的判断


这个可能和编译环境或者CPU的硬件有点关系吧?有些单片机好像是用 switch case的效率比if else低。

哪位能举个例子详细分析对比一下if else 和 switch case的效率性能在msp430和其它公司类型单片机上?



另外楼主的代码是否应该加上volatile?

[ 本帖最后由 wangfuchong 于 2011-12-17 09:45 编辑 ]
辛昕
3楼-- · 2019-03-26 04:20
 精彩回答 2  元偷偷看……
tuzihog
4楼-- · 2019-03-26 07:09
谢谢各位的参与
尤其是九楼的回复和提问,我也想知道有没有更好的思路!
另外给出我同一个帖子在21ic上链接,希望能给大家带来一点启发!
http://bbs.21ic.com/viewthread.p ... p;extra=&page=1
wzjhuohua
5楼-- · 2019-03-26 07:43
常见泽1
6楼-- · 2019-03-26 09:27
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章