[求助] 单片机编程思路问题

tuzihog   2011-12-16 14:07 楼主

 

基本定时器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)

TI有一篇MSP430的技术文档就是说的你这种思路,只不过它使用switch case来实现标志位的判断
点赞  2011-12-16 15:29
麻烦楼上给出那个文档的链接好不?
我用的mcu就是430系列的!
点赞  2011-12-16 19:30
思路倒是没有问题,只不过我认为这并不是一个好的思路。程序比较大的时候,这种思路很容易产生各种混乱。而且,两个值之间的时间间隔不好把握,很容易造成CPU时间的浪费。
点赞  2011-12-16 19:36
楼上的说的很到位,明天我把自己的需求整理出来,看看大家能不能有好的思路
点赞  2011-12-16 21:29
to tuzihog
http://www.ti.com/mcu/docs/litabsmultiplefilelist.tsp?sectionId=96&tabId=1502&literatureNumber=slaa294a&docCategoryId=1&familyId=342
就是这个文档。可能会给你一些思路!
点赞  2011-12-16 21:39
谢谢鸵鸟
我去下了看看
点赞  2011-12-17 08:17

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


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

点赞  2011-12-17 09:16

引用: 原帖由 鸵鸟蝈蝈 于 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 编辑 ]
点赞  2011-12-17 09:18
这玩意有点像状态机了。
有时候挺好用,关键还是看原始题目。
强者为尊,弱者,死无葬身之地
点赞  2011-12-17 09:24
谢谢各位的参与
尤其是九楼的回复和提问,我也想知道有没有更好的思路!
另外给出我同一个帖子在21ic上链接,希望能给大家带来一点启发!
http://bbs.21ic.com/viewthread.php?tid=295653&extra=&page=1
点赞  2011-12-17 15:46

这个思路是可以用的

点赞  2011-12-17 19:54

回复 10楼 辛昕 的帖子

用以下 同意
点赞  2011-12-17 20:59
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复