首页 论坛 原厂专区 TI MCU msp430单片机用定时器A测量方波相位差的程序如何编写?

发帖 回复

[原创] msp430单片机用定时器A测量方波相位差的程序如何编写?
1780 查看
6 回复
 楼主 | 发布于 2018-07-10 | 只看楼主
分享到:

msp430单片机用定时器A测量方波相位差的程序如何编写?

(0 ) (0 )
回复 举报

楼主 | 回复于 2018-07-10 沙发

把两个方波进行异或,用430单片机定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到相位差。。。具体程序如下:
(0 )
评论 (0) 举报

楼主 | 回复于 2018-07-10 2#

P1SEL |= BIT2; //设置P1.2端口为功能模块使用
 TACTL |=TACLR; 
 TACTL = TASSEL_2+TAIE+MC1; //定时器A时钟信号选择SMCLK 8M,清计数寄存器,使能中断,同时设置定时器A计数模式为连续增计模式
 CCTL1 =CM0+SCS+CAP+CCIE; //输入上升沿捕获,同步,capture模式 CCI0A为捕获信号源,中断使能 
 //TACCTL1 &=~CCIFG; //清CCR2 的标志位
 //中断允许
 _EINT();
 LPM0;
} 
(0 )
评论 (0) 举报

楼主 | 回复于 2018-07-10 3#

#pragma vector=TIMERA1_VECTOR //定时器A中断处理
__interrupt void timer_a(void)
{
 switch(TAIV) //向量查询
 { case 2: //捕获中断
 if(CCTL1&CM0) //上升沿
 { 
 CCTL1=(CCTL1&(~CM0))|CM1; //更变设置为下降沿触发
 start=TACCR1; //记录初始时间
 overflow=0; //溢出计数变量复位
 }
 else if(CCTL1&CM1) //下降沿
 { 
 CCTL1=(CCTL1&(~CM1))|CM0; //更变设置为上升沿触发 
 end=TACCR1; //用start,end,overflow计算脉冲宽度
 TACTL &=~TAIE; //不使能中断
 CCTL1 &=~CCIE;
 P1SEL &=~BIT2;
 _DINT();
 LPM0_EXIT;
 } 
 break;
 case 10: //定时器溢出中断
 overflow++;
 break; //溢出计数加1
 default:break;
 } 
} 

然后再对得到的start,end,overflow处理计算即可。。
(0 )
评论 (0) 举报

回复于 2018-07-10 4#

感谢分享
(0 )
评论 (0) 举报

回复于 2018-07-13 5#

感谢分享。
(0 )
评论 (0) 举报

回复于 2018-07-14 6#

多谢分享!
(0 )
评论 (0) 举报
  • 发表回复
    0/3000





    举报

    请选择举报类别

    • 广告垃圾
    • 违规内容
    • 恶意灌水
    • 重复发帖

    全部板块

    返回顶部