//============================================================
//传感器数据采集源代码
//============================================================
#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开始转换 } //*================================================================= //======================================================================== //函数: 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]ISR.c:中断服务程序:
『本文转载自网络,版权归原作者所有,如有侵权请联系删除』