历史上的今天
今天是:2025年01月17日(星期五)
2021年01月17日 | SPCE061A单片机采集脉搏数据
2021-01-17 来源:eefocus
这里所用的脉搏传感器是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);*/ // unsigned int count,i,j,temp; unsigned int 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:中断服务程序:
史海拾趣
|
SD卡或是U盘的物理扇区为什么有时前四个字节会被系统写成RRaA? 我通过我写的过滤驱动程序向U盘的物理扇区写入一个标识,是从第一位开始写的,例如“asdd12344”但是有时侯不知道什么原因,这个标识前四位会变成\"RRaA12344\",我可以肯定这个不是我写进去的。 请问这是怎么回事?… 查看全部问答> |
|
我需要写一个PCI接口的视频采集卡驱动程序,一个多月过去了,可是仍没有思路, 在DDK的src目录下有一个testcap的mini驱动,它可以产生图像在graphedit中 可以预览显示,但是不知道如何将它与我的PCI卡关联起来,请各位高手指点一下, 先谢谢了!… 查看全部问答> |
|
如题 wince下打印机驱动程序由谁加载? GWES OR DEVICE ? 怎么加载?开机自动加载还是动态加载? 谢谢 答者有分 … 查看全部问答> |
|
前几天看了一位大佬的帖子,是关于KEIL和PROTUES结合使用的问题,但我根据帖子上介绍的方法却怎样也结合不了,主要是PROTUES文件里找不到帖子上说的那个文件,所以没办法去做,请高手告诉我怎样去做啊,最好是用截图的方式贴出来,我这个菜鸟好跟着一步一 ...… 查看全部问答> |
|
现在很多ASIC外围都用到了DDR(II) SDRAM(SRAM),由于数据传输速率太快,数据信号基本都是采用的源同步,很多关于时序的资料都认为源同步的信号在PCB上布线是没有长度限制的(假设不考虑损耗),在对SRAM进行写入数据的时候倒还可以理解,但是在读 ...… 查看全部问答> |
|
我这两天在用FPGA作个数字钟,用六个数码管显示。我用20M的晶振经过分频得到1KHZ的信号,用这个信号去扫描数码管的位选择端。可是在显示时出了点问题,我想请教各位下能不能支个招让显示小时的那个数码管清楚点,我本来是想显示“02.01.00”,可是 ...… 查看全部问答> |
|
如您用过,那用下来感觉怎么样,我司测试了几片,目前还不错,但是不知道长期下来的稳定性和可靠性如何? 以前用过别家的(名字就不报了),通信距离可以,就是传输丢包率太高,误码也比较严重,所以这次换了家试用。由于项目比较急,没那么长时间 ...… 查看全部问答> |




