这个问题解决办法还是蛮简单的,我就直接上代码了。使用MSP430G2553捕获时,只需要将定时器设置为捕获模式,并设置相关寄存器即可进行捕获。
方法一:上升沿、下降沿循环触发法计算(自命方法名,勿喷)
简介:使用一个IO口,循环捕获上升沿、下降沿、然后计数计算即可。具体操作看代码后即可明晰。
代码使用CCS V5 编译通过,且完美捕获频率值在(50,350)范围内,峰峰值为2.3V (0,2.3)的脉冲波。
所需变量声明:
unsigned int start,last,end,overflow,h,s;//h-pwm占空比高电平技术 s-pwm总周期计数
定时器初始化:
TACTL=TASSEL_2+TAIE+MC_2;
CCTL1=CM_1+SCS+CAP+CCIE;
P1DIR&=~BIT2;
P1SEL|=BIT2;
TACCR1=0;
TACCR2=0;
定时器中断函数:
#pragma vector=TIMER0_A1_VECTOR
__interrupt void TIMERA1()//捕获上升沿
{
switch(TAIV) //向量查询
{ case 2: //捕获中断
if(CCTL1&CM_1) //上升沿
{
CCTL1=(CCTL1&(~CM_1))|CM_2; //更变设置为下降沿触发
start=TACCR1; //记录初始时间
s=start-last+65536*overflow;
last=start;
overflow=0; //溢出计数变量复位
}
else if(CCTL1&CM_2) //下降沿
{
CCTL1=(CCTL1&(~CM_2))|CM_1; //更变设置为上升沿触发
end=TACCR1; //用start,end,overflow计算脉冲宽度
TACTL &=~CCIFG;
h=end-start+65536*overflow;
}
break;
case 10: //定时器溢出中断
overflow++;
break; //溢出计数加1
default:break;
}
}
main()函数计算方法:
占空比=h/s
