?? main.c
字號:
#include "msp430x22x4.h"
//用定時器A的CCR2來捕獲內部ACLK信號
//并對ACLK輸入8分頻
//定時器時鐘源選擇SMCLK=8MHZ
//則捕獲一個完整的ACLK信號大約為(8M*8/32768)個SMCLK
//第一個CCR2的捕獲值是不完整的ACLK周期
//應該將第二個CCR2的值減去第一個CCR2的值才是一個完整的ACLK周期
//執行程序觀察R6是否為2048左右
// MSP430F2274
// -----------------
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.0|-->LED
volatile unsigned int cap_value; //存兩次捕值之差
int main( void )
{
volatile unsigned int first_value,second_value,n;
WDTCTL=WDTPW+WDTHOLD; //關看門狗
BCSCTL1 =CALBC1_8MHZ; //設定DCO為1MHZ
DCOCTL =CALBC1_8MHZ;
BCSCTL1 |=DIVA_3; //ACLK輸入八分頻
do //等待晶振穩定
{
IFG1 &=~OFIFG;
for(n=5000;n>0;n--);
} while(OFIFG&IFG1);
TACCTL2=CM1+CCIS_1+CAP; //捕獲模式,捕獲上升沿,捕獲內部ACLK
TACTL=TASSEL_2+MC_2+TACLR; //定時器時鐘源為SMCLK,啟動連續計數,清TAR
TACCTL2 &=~CCIFG; //清CCR2的標志位
while(!(CCIFG&TACCTL2)); //查CCR2標志位
first_value=TACCR2; //第一個捕獲值存入first_value
TACCTL2 &=~CCIFG; //清CCR2的標志位
while(!(CCIFG&TACCTL2)); //查CCR2標志位
second_value=TACCR2; //第二個捕獲值存入second_value
TACCTL2 &=~CCIFG; //清CCR2的標志位
TACCTL2 &=~MC1; //關定時器A
cap_value=(second_value-first_value);
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -