回覆列表
  • 1 # 疏星淡月歲月一院丁

    這個簡單,把兩個方波進行異或,用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處理計算即可。。。

  • 中秋節和大豐收的關聯?
  • 百合花能吃嗎?怎麼吃呢?