这个问题解决办法还是蛮简单的,我就直接上代码了。使用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