Quantcast
Channel: MSP 低功耗微控制器论坛 - 最近的话题
Viewing all articles
Browse latest Browse all 3634

msp430测量方波频率

$
0
0

我的思路是计算两次上升沿捕获到的定时器值的差,小于0就加上65536。通过这个差值,再乘以定时器时钟周期就是所测得的方波周期。

我的代码测试出来结果有问题。我实在是没看出来。还麻烦大家帮我看看哪有问题。备注都很清楚。谢谢大家!

#include <msp430.h>
#define uint unsigned int
#define uchar unsigned char
uint new_cap=0;
uint old_cap=0;
uint cap_diff=0;
uint cap_diff2=0;
uint j=0;
uint i;
int main(void)
{
WDTCTL = WDTPW + WDTHOLD;
for(i=0;i<20000;i++);//等晶振稳定震荡
P1DIR=0x41;//P1.0输出ACLK,P1.6为LED设置为输出
P1SEL=0X03;//P1.0输出ACLK信号,为第二功能。P1.1引脚作输入接受捕获信号,为第二功能。
CCTL0=CM_1+CCIS_0+SCS+CAP+CCIE;//上升沿捕获+P1.1捕捉CCI0A 输入+同步+捕获模式+开始中断
TACTL=TASSEL_2+MC_2;//SMCLK时钟+连续模式
_BIS_SR(LPM0_bits+GIE);
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A(void)
{
P1OUT^=0x40;//led翻转
j++;
if(j%2>=1)
old_cap=TACCR0;//第一次捕获上升沿时,定时器的值
if(j%2==0)
{
new_cap=TACCR0;//第二次捕获上升沿时,定时器的值
if(new_cap<old_cap)
cap_diff=65536+new_cap-old_cap;//两次相减得到一个周期内定时器的计数
else
cap_diff=new_cap-old_cap;//两次相减得到一个周期内定时器的计数
CCTL0&=~CCIE;//两次捕获完成之后关中断。方便调试
}
}


Viewing all articles
Browse latest Browse all 3634

Trending Articles