這個簡單,把兩個方波進行異或,用430微控制器的定時器A測量異或後的方波的脈衝寬度,在對測量資料進行簡單的計算就可得到相位差。。。具體程式如下:
P1SEL|=BIT2;//設定P1.2埠為功能模組使用
TACTL|=TACLR;
TACTL=TASSEL_2+TAIE+MC1;//定時器A時鐘訊號選擇SMCLK8M,清計數暫存器,使能中斷,同時設定定時器A計數模式為連續增計模式
CCTL1=CM0+SCS+CAP+CCIE;//輸入上升沿捕獲,同步,capture模式CCI0A為捕獲訊號源,中斷使能
//TACCTL1=~CCIFG;//清CCR2的標誌位
//中斷允許
_EINT();
LPM0;
}
#pragmavector=TIMERA1_VECTOR//定時器A中斷處理
__interruptvoidtimer_a(void)
{
switch(TAIV)//向量查詢
{case2://捕獲中斷
if(CCTL1CM0)//上升沿
CCTL1=(CCTL1(~CM0))|CM1;//更變設定為下降沿觸發
start=TACCR1;//記錄初始時間
overflow=0;//溢位計數變數復位
elseif(CCTL1CM1)//下降沿
CCTL1=(CCTL1(~CM1))|CM0;//更變設定為上升沿觸發
end=TACCR1;//用start,end,overflow計算脈衝寬度
TACTL=~TAIE;//不使能中斷
CCTL1=~CCIE;
P1SEL=~BIT2;
_DINT();
LPM0_EXIT;
break;
case10://定時器溢位中斷
overflow++;
break;//溢位計數加1
default:break;
然後再對得到的start,end,overflow處理計算即可。。。
這個簡單,把兩個方波進行異或,用430微控制器的定時器A測量異或後的方波的脈衝寬度,在對測量資料進行簡單的計算就可得到相位差。。。具體程式如下:
P1SEL|=BIT2;//設定P1.2埠為功能模組使用
TACTL|=TACLR;
TACTL=TASSEL_2+TAIE+MC1;//定時器A時鐘訊號選擇SMCLK8M,清計數暫存器,使能中斷,同時設定定時器A計數模式為連續增計模式
CCTL1=CM0+SCS+CAP+CCIE;//輸入上升沿捕獲,同步,capture模式CCI0A為捕獲訊號源,中斷使能
//TACCTL1=~CCIFG;//清CCR2的標誌位
//中斷允許
_EINT();
LPM0;
}
#pragmavector=TIMERA1_VECTOR//定時器A中斷處理
__interruptvoidtimer_a(void)
{
switch(TAIV)//向量查詢
{case2://捕獲中斷
if(CCTL1CM0)//上升沿
{
CCTL1=(CCTL1(~CM0))|CM1;//更變設定為下降沿觸發
start=TACCR1;//記錄初始時間
overflow=0;//溢位計數變數復位
}
elseif(CCTL1CM1)//下降沿
{
CCTL1=(CCTL1(~CM1))|CM0;//更變設定為上升沿觸發
end=TACCR1;//用start,end,overflow計算脈衝寬度
TACTL=~TAIE;//不使能中斷
CCTL1=~CCIE;
P1SEL=~BIT2;
_DINT();
LPM0_EXIT;
}
break;
case10://定時器溢位中斷
overflow++;
break;//溢位計數加1
default:break;
}
}
然後再對得到的start,end,overflow處理計算即可。。。