MSP430F149定时器计数

2019-03-24 11:39发布

输入信号为占空比50%的方波,怎么使用芯片的定时器A/B对脉冲进行计数 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
小呸
1楼-- · 2019-03-24 16:40
本来毫无头绪,现在在百度上了找了个说发,还不错
1.一开始让430的内部定时器跑起来,你要做的就是设置定时器的时钟,是否分频,是否中断,计数模式这些。要是用到捕获模式测频率就要选择成捕获模式,还有上升沿或者下降沿捕获这些。
2.之后的过程是这样的,当单片机的特殊引脚检测到你设定的触发信号之后就会立刻把当前时刻的TAR(定时器的16位计数器)中的数据记录到CCR中(也是一个16位计数器)。然后就跳进一个中断,如果你要测频的话就记录下此刻的CCR值,挑出中断,随后在下一个触发信号到来时再记录一次CCR的值,两次数据之差就是再除以定时器时钟频率就得到了被测信号一个方波的时间了。
3.关于特殊引脚,就是一个复用的脚,可以作为一般IO口,也可以作为捕获信号入口,就像msp430F449中P2.0还可以作为定时器A,CCR2的信号捕获口。
4.如果你要测的信号频率太低还需要一个溢出中断,溢出的话就是一个62256,最后溢出了几个就加上几个62256即可。
自己看了看说明书,有了比较大的进步,欢迎讨论
狗蛋蛋他爹
2楼-- · 2019-03-24 18:26
< :TI_MSP430_内容页_SA7 --> 我在前面找的一个例子,讲的是捕获
  P1DIR &= ~BIT2; // P1.2 = (InputDirection + TA0.1) = CCIxA.1 --> CCR1
  P1SEL|=BIT2;
  TACCTL1 = CAP + CCIS_0 + CM_3 + CCIE; // Capture CCIxA, both edge, interrupt enable.
  TACTL = TASSEL_1 + MC_2; // ACLK, continuous mode.
_EINT();

volatile unsigned int CCRx = 0;
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TAIV_ISR(void)
{
  unsigned int interval;
  if(TACCTL1 & CCIFG)
  {
    TACCTL1 &=~ CCIFG;
    P1OUT ^= BIT0;
    interval=CCR1-CCRx;
    CCRx=CCR1;
  }
}

一周热门 更多>

相关问题

    相关文章