单片机ADC采样检测温度的算法_第1页
单片机ADC采样检测温度的算法_第2页
单片机ADC采样检测温度的算法_第3页
单片机ADC采样检测温度的算法_第4页
单片机ADC采样检测温度的算法_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

^♦♦^****************^*****ADCDriverSTCITSeriesMCU(c)Copyright2011,DengHaiAllRightsReservedFilename:ADC.CProgrammer:DengHai^♦♦^****************^********************************^***********************^*^♦♦^****************^******/^♦♦^****************^********************************************************^*^♦♦^****************^*****INCLUDES^♦♦^****************^********************************************************^*^♦♦^****************^******/#include"includes.h"^♦♦^****************^********************************************************^*^♦♦^****************^*****CONSTANTS^♦♦^****************^********************************************************^*^♦♦^****************^******/#defineADC_POWER0x80#defineADC_FLAG0x10#defineADC_START0x08#defineADC_SPEEDLL0x00#defineADC_SPEEDL0x20#defineADC_SPEEDH0x40#defineADCSPEEDHH0x60//ADCpowercontrolbit//ADCcompleteflag//ADCstartcontrolbit//540clocks//360clocks//180clocks//90clocks^♦♦^****************^********************************************************^*****穴****)«(*穴****穴*穴****穴*穴LOCALFUNCTIONPROTOTYPESLOCALFUNCTIONPROTOTYPES****穴**)«(*穴*穴**4(*穴*穴****穴***/staticvoidADCDummy(void);ADCINITIALIZATIONDescription:ADCinitializationfunction.ADCInit()mustbecalledbeforecallinganyotherof*theuseraccessiblefunctions.ArgumentsReturns:none:none****穴**)«(*穴*穴**4(*穴*穴****穴****)«(*穴******穴4(***4(*穴)«(*穴*穴****穴*穴4(***穴******穴**4(*穴*穴****///关闭ADC中断//关闭ADC中断//P1设置为输入模拟端//ADRJ=1:右对齐,高//清除之前的ADC转换//打开ADC电源,设//ADC上电延时10msEADC=0;P1M1=OxFF;P1M0=0x00;P1ASF=OxFF;AUXR1|=0x04;2位转换结果在ADC_RES中,低8位在ADC_RESL中ADC_RES=0;结果ADC_RESL=0;ADC_CONTR=ADC_POWER|ADC_SPEEDLL;置为540个时钟周期转换一次(约30us)Delay(ADC_POWERON_DLY);等待内部模拟电源稳定}/*$PAGE*//*READADCINPUTS

Description:ThisfunctioniscalledtoreadaphysicalADCchannel.Thefunctionisassumedto*alsocontrolamultiplexerifmorethanoneanaloginputisconnectedtotheADC.ArgumentsReturns:chistheADClogicalchannelnumber(O..ADC_MAX_CH-1).:TherawADCcountsfromthephysicalADCdevice・*/unsignedintADCRead(unsignedcharch){TOC\o"1-5"\h\zunsignedchari;unsignedintval;unsignedinttemp;unsignedintmax;unsignedintmin;////考虑到可靠性,每次ADC转换前都重新配置ADC相关的寄存器//关闭ADC中断//关闭ADC中断//P1设置为输入模拟端//ADRJ=1:右对齐,高//清除之前的ADC转换EADC=0;P1M1=OxFF;口P1M0=0x00;P1ASF=OxFF;AUXR1|=0x04;2位转换结果在ADC_RES中,低8位在ADC_RESL中ADC_RES=0;结果ADC_RESL=0;//〃多次AD采样数字滤波得到温度传感器电压值//《防脉冲干扰平均滤波法》//在脉冲干扰比较严重的情况下,如果采用一般平均值算法,则干扰将会“平均”到结果中,//因此一般平均值算法不易消除由于脉冲干扰引起的误差。〃为此,可以先去掉N个数据中的最大值和最小值,然后计算N-2个数据的平均值。//这种方法可以很好的去除脉冲干扰!//

val=0;max=0;min=1024;//选择//选择ADC转换通道,并启动转换ADC_CONTR=ADC_P0WER|ADC_SPEEDLL|ADC_START|(ch&0x07);ADCDummy();//延时至少4个时钟周期,才能读取转换完成标志while(!(ADC_CONTR&ADC_FLAG));//等待转换完成ADC_CONTR&=~ADC_FLAG;//软件清除转换结束标志位temp=ADC_RESL;temp+=(unsignedint)(ADC_RES&0x03)«8;if(temp>max){//找到最大值max=temp;}if(temp<min){//找到最小值min=temp;}val+=temp;}val=(val-min-max)/(ADC_SAMPLE_TIMES-2);//去除最人值和最小值后求平均值return(val);}^******************************************************************************^*************************DUMMYFUNCTIONDescription:Thisfunctiondoesn'tdoanything・Itisusedto

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论