这个简单,把两个方波进行
异或,用430
单片机的定时器A测量异或后的方波的脉冲宽度,在对测量数据进行简单的计算就可得到
相位差。。。具体程序如下:
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;
}
#pragma
vector=TIMERA1_VECTOR
//定时器A中断处理
__interrupt
void
timer_a(void)
{
switch(TAIV)
//向量查询
{
case
2:
//捕获中断
if(CCTL1CM0)
//上升沿
{
CCTL1=(CCTL1(~CM0))|CM1;
//更变设置为下降沿触发
start=TACCR1;
//记录初始时间
overflow=0;
//溢出计数变量复位
}
else
if(CCTL1CM1)
//下降沿
{
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处理计算即可。。。