求检查msp430f5438捕获测频率哪里错了!如果能给分我全给你!

2019-03-24 15:52发布

#include <msp430x54x.h>
#include "LCD_12864.h"
#include "CLOCK.h"
unsigned int start,end;
unsigned char overflow,flag;
unsigned long gao,di;
int main( void )
{
  // Stop watchdog timer to prevent time out reset
  WDTCTL = WDTPW + WDTHOLD;
  InitSysCLKXT2();
  INI_LCD();
  P2SEL|=BIT2;
  flag=0;
  TA1CTL=TAIE+TASSEL__SMCLK+TACLR+MC__UP;//选择计时器时钟为SMCLK打 分频比为1 UP增模式
  TA1CCTL1=CCIE+CAP+CM0+SCS;//打开中断 打开捕获 上升沿捕获 同步捕获   
  TA1CCR0=60000;
  __bis_SR_register(GIE);
  while(1)
  {
  }
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void TIMER1_A1_ISR(void)
{
  switch(__even_in_range(TA1IV,14))
  {
    case  0: break;                          // No interrupt
    case  2:                                 // Add Offset to CCR1
      {  
        if(TA1CCTL1&CM0)
        {  
          start=TA1CCR1;
          TA1CCTL1=(TA1CCTL1&(~CM0))|CM1; //改为下降沿触发
          start=TA1CCR1;
          gao=overflow*60000+start;
          overflow=0;
        }
        else if(TA1CCTL1&CM1)
        {
          TA1CCTL1=(TA1CCTL1&(~CM1))|CM0;
          end=TA1CCR1;
          di=overflow*60000+end;
        }
      }
      break;                           
    case  4: break;                          // CCR2 not used
    case  6: break;                          // CCR3 not used
    case  8: break;                          // CCR4 not used
    case 10: break;                          // CCR5 not used
    case 12: break;                          // Reserved not used
    case 14:                                 // 溢出数加1
             overflow++;
             break;
    default: break;
  }
  
}
高电平时间在gao,低电平时间在di,仿真发现这两个数一直在加,很是不懂!求解释,告诉我怎么给分,然后100多分全给你! 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
3条回答
3g465
1楼-- · 2019-03-24 19:15
< 我稍微看了下
你这个定时器用的是增模式吧,增模式是计时到CCR0的值,你设的60000,
但是CCR0有自己独立的中断向量,TIMEA1的中断向量是CCR1-CCR6的,case 14的溢出,应该是0xffff寄存器计时满的溢出,不是你设的CCR0的溢出,你应该再写个CCR0的中断程序,在这里面overflow++。
还有,你这个gao 跟 di 你想求的是什么?
如果你想求高电平的时间,不应该是上升沿触发后的 CCR1,下降沿的触发后的CCR1,两者相减+overflow*(60000+1)吗?
水货老手
2楼-- · 2019-03-24 23:13
 精彩回答 2  元偷偷看……
3g465
3楼-- · 2019-03-25 01:00
刚才看到你说你的芯片烧了。。。默哀一下。
你说100K很准,频率降低就不准了
我的建议是,仿真的时候设好断点,在watch观察各个变量,一步一步执行,你把watch里看到的变量的值算一下,和实际中的比较一下,看看到底是哪个步骤得出的结果影响了精度~

一周热门 更多>

相关问题

    相关文章