📄 pulse_caculate.c
字号:
// Pulse caculate variable
unsigned int Cap_num=20;
unsigned int Cap_cnt;
unsigned int Compare, Newcapture, Oldcapture = 0;
float Cap_sum;
float Cap_n;
float f_cap;
char Pulse_caculate_flag;
//Pulse caculate function
void TimerA_init(void);
float Pulse_caculate(void);
float Pulse_caculate(void)
{
/*
WDTCTL = WDT_ADLY_1000; // Set Watchdog Timer interval to 1s
IE1 |= WDTIE; // Enable WDT interrupt
TimerA_init(); //定时器设置初始化
for(i=0;i<=Cap_num;i++)
{
dat[i]=0;
}
Cap_cnt = 0;
Cap_sum = 0;
Pulse_caculate_flag=1;
while(Pulse_caculate_flag)
{
LPM1;
dat[Cap_cnt]=Compare;
Cap_cnt++;
if(Cap_cnt>Cap_num)
{
CCTL1 = 0;
TACTL = 0;
Pulse_caculate_flag = 0;
for(i=1;i<=Cap_num;i++) // calculate average f
{
Cap_sum+=dat[i];
}
Cap_n=Cap_sum/Cap_num;
f_cap = 32768.0/Cap_n;
/////////////////////////////////////
if(f_cap>=100) // change cap number
{
Cap_num = 100;
}
else if(f_cap>=50)
{
Cap_num = 50;
}
else
{
Cap_num = 20;
}
}
}
LPM1; // Enter LPM1
return f_cap;
}
void TimerA_init(void)
{
P1SEL |= BIT2; // P1.2 option select
P1DIR &=~BIT2; // P1.2 vortex pulse signal input
CCTL1 = CM_1 + CCIS_0 + CAP + CCIE; // Capture on rising edge, CCI1A, CAP
TACTL = TASSEL_1 + ID_0 + MC_2 + TACLR; // ACLK, Continuous mode, clear
}
#pragma vector=TIMERA1_VECTOR
__interrupt void Timer_A (void)
{
CCTL1&=~CCIFG; // clear CCI1A interrupt flag
Newcapture = TACCR1; // Get current captured Pulse
Compare = Newcapture - Oldcapture; // Pulse difference
Oldcapture = TACCR1; // Save current captured Pulse
LPM1_EXIT; // Exit LPM1
}
// Watchdog Timer interrupt service routine
#pragma vector=WDT_VECTOR
__interrupt void watchdog_timer(void)
{
time++;
if(time>=2)
{
time=0;
LPM1_EXIT;
}
*/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -