×
嵌入式 > 技术百科 > 详情

SPCE061A单片机采集脉搏数据

发布时间:2021-08-19 发布时间:
|

这里所用的脉搏传感器是HK-2000B,模拟信号,可以采集脉搏波形,建议采用500HZ定时器来定时采集,因为市面上一些心电模块也是500HZ,因此,在一个定时器中断服务程序程序中,可以同时处理两组数据!!!以下代码有点乱,因为是在我现有项目中复制过来的。

以下为ADConvert.c

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

//传感器数据采集源代码

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

#include "SPCE 061A .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

{

adc_value += Get_One_AD()/N;

*P_Watchdog_Clear=0x0001;

}

adc_value+=N;

return (adc_value);*/

//

unsignedint count,i,j,temp;

unsignedint value_buf[N];

for (count=0;count

{

value_buf[count] = Get_One_AD();

}

for (j=0;j

{

for (i=0;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]=500)//如果采集的数据数量足够,则显示出来{FilterCMDSign(cardNpulse_data,500);SendPackage(mcu_id,patient_id,check_type,cardNpulse_data);cardNpulse_i=0;} }



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
Semtech的LoRa技术携手Chipsafer将牧场连接至云端