在项目设计中测量频率!如何才能不陷入死循环!

2019-03-24 15:33发布

另外,在一个项目中设计捕获信号的频率,想法就是捕获相邻两个脉冲的下降沿,计算出频率,加上while语句是为了防止执行其他程序时有漏掉一个或几个脉冲的情况,但是现在的问题就是如果正好在捕获两个脉冲中间,信号消失,就在陷入wihle中出不来,请问有什么好方法测这个频率么!    if((CCIFG&TACCTL1))   // Wait for first signal from photodiode
  {
    for(i=0;i<Num_of_result;i++)
    {
      testloop=0;
      while(!(CCIFG&TACCTL1));// Exit after capture 8 times
      frequencyWidth[index]=CCR1;
      index=(index+1)%Num_of_result;
      if((TAIFG&TACTL))
      {
        overflow++;
        TACTL &=~ TAIFG;
      }
      TACCTL1 &=~ CCIFG;
    }
    _NOP();
  } 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
Main函数
1楼-- · 2019-03-24 23:15
可以使用捕获中断。每次捕获了一个下降沿中断以后记下时间,重新开始等待捕获并设置为下降沿,等到下一次捕获发生时记下时间。两者做减法就可以。
或者IO中断也可以。
零晨
2楼-- · 2019-03-24 23:55
< :TI_MSP430_内容页_SA7 --> 如果用捕获的方式,如何从中断中跳出呢,这样说吧,假设中断是测8个数据,求平均得出频率,那么写程序等待这段时间,因为之后的程序需要用到频率。
cat3902982
3楼-- · 2019-03-25 05:03
 精彩回答 2  元偷偷看……
wstt
4楼-- · 2019-03-25 10:00
建议使用IO中断或者捕获中断,中断的时延是确定的,所以可以比较准确的测量频率
零晨
5楼-- · 2019-03-25 12:26
我现在设计的项目测量频率只是一个子程序,有一个很关键的问题就是,如果在量测过程中信号源离开了,程序就会一直死在while(!(CCIFG&TACCTL1));这条语句上,但是如果不加,就担心中间会有漏测脉冲。请指点!

  if((CCIFG&TACCTL1))   // Wait for first signal from photodiode
  {
    for(i=0;i<Num_of_result;i++)
    {
      testloop=0;
      while(!(CCIFG&TACCTL1));// Exit after capture 8 times
      frequencyWidth[index]=CCR1;
      index=(index+1)%Num_of_result;
      if((TAIFG&TACTL))
      {
        overflow++;
        TACTL &=~ TAIFG;
      }
      TACCTL1 &=~ CCIFG;
    }
    _NOP();
  }
   
  averageFrequency = ((overflow*65536)+frequencyWidth[Num_of_result-1]-frequencyWidth[0])/(Num_of_result-1);
零晨
6楼-- · 2019-03-25 14:12
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章