|
发表于 2012-9-24 09:23:45
|
显示全部楼层
- #include <MSP430X42X.h>
- #include <math.h>
- #include "lcd.h"
- #include "SD16.H"
- #include "flash.h"
- #include "bastimer.h"
- #include "key.h"
- #include "adjust.h"
- #include "measure.h"
- #include "TIME_A.H"
- #include "set.h"
- #include "shutdown.h"
- #include "key.h"
- #include "tmp275.h"
- /*************************************************************************/
- /* design by 杨焕刚 */
- /* 2009年6月于创威电子科技有限公司 */
- /*************************************************************************/
- //以下设置方法可以得到24位的AD数据
- //读取数据前 不能停止转换
-
- char SD16_2=0;//通道2转换完成标志
-
- void sd16_init(void)
- {
- SD16CTL =SD16DIV_0+SD16SSEL_0; //1分频,MCLK,外部参考源
- SD16INCTL2 = SD16GAIN_1 + SD16INCH_1;// 1倍增益, 通道1,第4次采样后引发中断
- SD16CCTL2 =SD16IE+SD16OSR_256; // 高速速电流缓冲,连续转换,256过采样,实现24位AD
- SD16CCTL2 |=SD16DF;//双极二的补码
- }
-
- #pragma vector = SD16_VECTOR
- __interrupt void SD16_ISR(void)
- { IE2 &= ~BITE; //关闭基本定时器中断
- //判断通道转换完成,并将自定义的标志位置1
- if ((SD16CCTL2 & SD16IFG)) SD16_2=1;
- SD16CCTL2 &=~ SD16IFG;
- SD16CCTL2 &=~ SD16OVIFG;
- IE2 |= BITE; //开启基本定时器中断
- }
-
-
- //中位值滤波法
- //* 31 次值取中值
- //排序采用冒泡法
- long filter0()
- { unsigned long VAR2=0;//SD16_2的转换数据
- unsigned long value_buf[31];
- unsigned long temp=0;
- char count,i,j;
- SD16CCTL2 |= SD16SC;//开始转换
- for ( count=0;count<31;count++)
- {
- do{ }
- while(SD16_2==0);
- SD16_2=0;
- //读转换结果
- //24位AD
- SD16CCTL2 &= ~SD16LSBACC;
- VAR2 = (long)SD16MEM2 < 8;
- SD16CCTL2 |= SD16LSBACC;
- VAR2 |= ((long)SD16MEM2 & 0xff00) >> 8;
- value_buf[count] = VAR2;
- }
- SD16CCTL2 &=~SD16SC; //关闭转换VAR0;
- for (j=0;j<31-1;j++)
- {
- for (i=0;i<31-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[(31-1)/2];
- }
-
- //算术平均滤波法
- //80次平均滤波
- long filter()
- {
- char i;
- unsigned long long sum = 0;
- for (i=0;i<80;i++)
- {
- sum += filter0();
- }
- return (unsigned long)(sum/80);
- }
复制代码 能预览的何必要下文件呢? |
|