⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pulse_caculate.c

📁 基于430单片机的涡街流量计设计程序。可以使用
💻 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 + -