📄 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 + -