SPCE061A單片機採集脈搏資料

來源:互聯網
上載者:User
本文來自http://blog.csdn.net/hellogv/這裡所用的脈搏感應器是HK-2000B,類比訊號,可以採集脈搏波形,建議採用500HZ定時器來定時採集,因為市面上一些心電模組也是500HZ,因此,在一個定時器中斷服務程式程式中,可以同時處理兩組資料!!!以下代碼有點亂,因為是在我現有項目中複製過來的。以下為ADConvert.c

//============================================================

//感應器資料擷取原始碼

//============================================================

#include "SPCE061A.h"

#define AD_END_FLAG        *P_ADC_MUX_Ctrl&0x8000                                                                                     //誤差調整

//=====================================================================

// 函數: unsigned int Get_One_AD(void)

// 描述: 取得一次AD轉換的值

// 參數: 無

// 返回: 轉換值

//=====================================================================

unsigned int Get_One_AD(void)

{

   unsigned int uiData;

   while(!AD_END_FLAG);                             //等待ADC轉換結束            

     uiData=*P_ADC_LINEIN_Data;

   return(uiData&0xffc0);

}

//=====================================================================

// 函數: unsigned long int Get_AD(void)

// 描述: 使用平均法,取得AD轉換的平均值

// 參數: 無

// 返回: 轉換值

//========================================================================

#define N 4 //必須在2~4

unsigned long int Get_AD(void)

{        

/*  unsigned int adc_value=0;

   int i;                  

   for(i=0;i<N;i++)

   {

      adc_value += Get_One_AD()/N;

      *P_Watchdog_Clear=0x0001;

   }

     adc_value+=N;

   return (adc_value);*/

//////////////////

  unsigned  int count,i,j,temp;

  unsigned  int value_buf[N];

 

  for (count=0;count<N;count++)

  {

    value_buf[count] = Get_One_AD();

  }

 

  for (j=0;j<N-1;j++)

  {

    for (i=0;i<N-j;i++)

    {

      if ( value_buf[i]>value_buf[i+1] )

      {

        temp = value_buf[i];

        value_buf[i] = value_buf[i+1];

        value_buf[i+1] = temp;

      }

    }

  }

  return value_buf[(N)];

}

//=====================================================================

// 函數: void AD_Initial(void)

// 描述: 初始化AD轉換

// 參數: 無

// 返回: 無

//=====================================================================

void Init_AD(void)

{

         unsigned int Read_Start;

         *P_ADC_MUX_Ctrl=C_ADC_CH1;         //選擇LINE_IN1通道,從IOA0輸入

         *P_ADC_Ctrl= C_ADCE;                 //AD使能開啟        

         Read_Start=*P_ADC_LINEIN_Data;             //AD開始轉換

}

//*=================================================================

ISR.c:中斷服務程式:

//======================================================================== // 函數: void IRQ6(void) // 描述: 512Hz中斷服務程式,用於取得脈搏,心電資料 // 參數: 無 // 返回: 無 //======================================================================== int cardNpulse_data[500];//脈搏,心電資料,一秒採集500次unsigned int int cardNpulse_i=0; int tmp_max=0; int tmp_min=10; void IRQ6(void) __attribute__ ((ISR)); void IRQ6(void) {     if((*P_INT_Ctrl&C_IRQ6_TMB2))     {         sensor_data  =Get_AD();               cardNpulse_data[cardNpulse_i]=abs((sensor_data)/129);//縮小或放大資料         //----------------測試代碼--------------         if(cardNpulse_data[cardNpulse_i]>tmp_max)             tmp_max=cardNpulse_data[cardNpulse_i];         if(cardNpulse_data[cardNpulse_i]<tmp_min)             tmp_min=cardNpulse_data[cardNpulse_i];        //-----------------測試代碼-------------                cardNpulse_i++;        /* for(delay=0;delay<1;delay++)//加入少少延時        {         *P_Watchdog_Clear=0x0001;         *P_INT_Clear=C_IRQ6_TMB2;//清中斷        }*/        *P_Watchdog_Clear=0x0001;         *P_INT_Clear=C_IRQ6_TMB2;//清中斷     }     if(cardNpulse_i>=500)//如果採集的資料數量足夠,則顯示出來     {         FilterCMDSign(cardNpulse_data,500);         SendPackage(mcu_id,patient_id,check_type,cardNpulse_data);         cardNpulse_i=0;             } }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.