想用430 g2553 TimerA测输入方波的周期,用了下面的代码不成功,请求帮助!
[复制链接]
利用MSP430单片机定时器A和捕获/比较功能模块结合使用,实现脉冲宽度的测量。 本例程用到了定时器A的CCI1A端口(例如MSP430F14X的P1.2引脚)作捕获外部输入的脉冲电平跳变,同时结合简单的软件算法就能实现脉冲宽度的测量。在实际应用中可根据例程中的start,end,overflow三个变量来计算脉冲宽度。此功能模块在实际产品应用中体现出有较高的应用价值。 2-例程 #include unsigned int start,end; unsigned char overflow; void main (void) { WDTCTL = WDTPW+WDTHOLD; //关闭看门狗定时器 P1DIR = BIT0+BIT4; //设置P1.0方向为输出 P1SEL = BIT2; //设置P1.2端口为功能模块使用 TACTL = TASSEL0+TACLR+TAIE+MC1; //定时器A时钟信号选择ACLK,同时设置定时器A计数模式为连续增计模式 CCTL1 = MC0+SCS+CAP+CCIE; //输入上升沿捕获,CCI0A为捕获信号源 _EINT(); //中断允许 while(1); //LOOP } #pragma vector=TIMERA1_VECTOR //定时器A中断处理 __interrupt void timer_a(void) { switch(TAIV) //向量查询 { case 2: //捕获中断 if(CCTL1&CM0) //上升沿 { CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发 start=TAR; //记录初始时间 overflow=0; //溢出计数变量复位 } else if (CCTL1&CM1) //下降沿 { CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发 end=TAR; //用start,end,overflow计算脉冲宽度 } break; case 10: //定时器溢出中断 overflow++; break; //溢出计数加1 default:break; } } //例程结束
|