📄 zhao.c
字号:
#include <msp430x14x.h>
#include <stdio.h>
unsigned int now_value=0;
//long int pwm_pos;
static unsigned int before_value=0;
long int frequency=0;
void main(void)
{
WDTCTL = WDTPW +WDTHOLD; // Stop WDT
TACTL = TASSEL_1 + TACLR; // ACLK, Clear Tar
CCR0 = 64-1; // PWM Period
CCTL1 = OUTMOD_7; // CCR1 reset/set
CCR1 = 32; // CCR1 PWM duty cycle
//CCTL2 = OUTMOD_7; // CCR2 reset/set
//CCR2 = 32; // CCR2 PWM duty cycle
P1DIR |= BIT2; // P1.2 output
P1SEL |= BIT2; // P1.2 TA1/2 otions
TACTL |= MC_1; // Start Timer_A in up mode
/*
for (;;)
{
_BIS_SR(CPUOFF); // Enter LPM0
_NOP(); // Required only for C-spy
}
*/
/*
WDTCTL = WDTPW + WDTHOLD; // Stop WDT
//timeA做初始化
TACTL = TASSEL_1 + TACLR; // ACLK, clear TAR
TACTL=MC_1;
TACCR0 = 16384; //产生定时周期是7.8125ms
TACCTL1=OUTMOD_7; // CCR0 interrupt enabled
TACCR1=8192;
*/
//P1DIR |= 0x01; // P1.0 output
//P4DIR&=~BIT0; //定义P4.0口为CCI0A 是TIMERB的捕获时钟源
/***************用作测试DCO的实际发生频率*************************************
P1DIR|=BIT4;
P1SEL|=BIT4;
经直接测量知道SMCLK的频率为0.76-0.78MHz,可通过此频率与程序所得相比较,验证是否正确
*****************************************************************************/
P4SEL|=BIT0; //选择设备输入
//TACTL |= MC1; // Start Timer_A in continuous mode
/***以上部分证明了引入CCIA0的输入波形是没有问题的.下一步要做的工作就是完成TIMERB的捕获功能*****/
TBCCTL0 =CM_1+SCS+CCIS_0+CCIE; //捕获模式,上升沿都捕获,选择CCI0A,同步,捕获中断开
TBCCTL0|=CAP;
TBCTL=TBSSEL_2+TBCLR+MC_2+ID_0; //选择SMCLK时钟源引入计数器B 1分频
_EINT(); //开总中断
while(1)
{
// frequency=pwm_pos;
printf("Fre = %ld\n",frequency);
}
//_BIS_SR(LAM0_bits+GIE);
/*
for (;;)
{
_BIS_SR(CPUOFF); // CPU off
_NOP(); // Required only for C-spy
}
*/
}
// Timer A0 interrupt service routine
//#pragma vector=TIMERA0_VECTOR
//__interrupt void Timer_A0 (void)
//{
// P1OUT ^= 0x01; // Toggle P1.1
//TACCR0 += 64; // 用于产生2秒的脉冲门信号
//}
//TimerB的中断服务程序
#pragma vector=TIMERB0_VECTOR
__interrupt void Timer_B0(void) //定时器中断函数
{
//unsigned int pwm_pos,pwm_neg;
//unsigned int now_value=0;
//unsigned int now_value1=0;
//static unsigned int before_value=0;
static int flag=0;
now_value=TBCCR0; //记录上升沿数据
//printf("now = %ld\n",now_value);
//now_value = now_value;
if(flag)
{
frequency=now_value-before_value;
}
before_value=now_value;
flag=1;
// now_value=TBCCR0;
//frequency=now_value-before_value;
//before_value=now_value;
//value=pwm_pos;
// frequency=pwm_pos;
//frequency=(pwm_neg-pwm_pos)*512/1000000;
//TBCCTL0&=~CCIFG;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -