本人写了个程序,想看看捕获功能的计数值,即每次捕获时TA1CCR1的值是多少,还没写测频函数。.程序的功能是用TA0定时模块产生pwm的输出信号,然后用TA1模块进行捕获,但是很奇怪,程序运行时只进入了一次中断,而且TA1CCR1的值为0,不知为何,按照逻辑不应该是不断的产生捕获终端,计数值应该是1000才对吧,请各位大神帮忙看看程序出了什么问题,可能注释也有不对,欢迎更正。
//P1.6 pwm输出,P2.1捕获
int flag=0;
unsigned int temp;
char data[15] = {0x00};
void main()
{
WDTCTL = WDTPW+WDTHOLD; //stop WDT
TA0CTL = TASSEL_2+MC_1+TACLR; //选择smclk,up to ccr0
TA0CCTL1 |= OUTMOD_7;
CCR0 = 2000; //pwm 周期,频率1000000/2000=500HZ
CCR1 = 1000; //占空比50%
TA1CTL = TASSEL_2+MC_1+TACLR; //选择smclk,up to ccr0
TA1CCTL1 |= CM_3+SCS+CAP+CCIE;//捕获设置,上升沿下降捕获,同步,中断使能
P1SEL |= BIT6;
P1DIR = BIT6; //P1.6 output,pwm的输出pin
P2SEL |= BIT1; //P2.1作为捕获输入脚
//_BIS_SR(GIE);
_EINT();
while(1)
{
while(flag)
{
_DINT();
flag=0;
temp = TA1CCR1; //保存计数值
/*sprintf(data,"%u",temp1);
SendString(data);
SendString("\r\n");
注释部分为串口打印到电脑端查看TA1CCR1的值*/
_EINT();
}
}
}
#pragma vector=TIMER1_A1_VECTOR
__interrupt void Timer_A1(void)
{
TA1CTL &= ~CCIFG;
switch(TA1IV)
{
case 2:flag = 1;break;
case 4:break;
case 10:break;
}
return;
}