您的位置 首页 编程

STC单片机ADC采样程序设计

STC单片机ADC采样程序设计-BOOLRun;//BOOL量作为定时采样标志,比如每隔3秒,置位一

次该标志

BYTECurch;//当前通道

BYTEtempCvData[6];//转换结果临时缓冲

BYTECvTimes;//采样次数采样4次,去最大最小,保留4个取平均值

BYTEADData[MAX_ADCH];//MAX_ADCH保存各通道最终采样数据

#include“STC12C4052AD.h”

typedefstruct

{

BOOLRun;//BOOL量作为守时采样标志,比方每隔3秒,置位一

次该标志

BYTECurch;//当时通道

BYTEtempCvData[6];//转化成果暂时缓冲

BYTECvTImes;//采样次数采样4次,去最大最小,保存4个取平均值

BYTEADData[MAX_ADCH];//MAX_ADCH保存各通道终究采样数据

}STADC;

STADCADC;

voidInitADC()

{

Uint16i;

ADC_CONTR=0xC0;//ADC模块加电,420周期转化一次

for(i=0;i《20000;i++);//ADC电源敞开后,延时

//设置P口外AD形式

P1M0=0x03;//ADC0/1高阻输入

P1M1=0x00;

EADC_SPI=1;//敞开ADCSPI总中止

ADC_DATA=0;

AUXR=EADCI;//敞开ADC中止

MEMSet(&ADC,0,sizeof(STADC));

//发动0号通道

ADC.Curch=0;

ADC_CONTR|=ADC.Curch;//设置下一通道

ADC.Run=TRUE;//标志ADC正在转化

ADC_CONTR|=ADC_START;//发动AD转化器

}

voidADCISR()interruptADC_VECTOR

{

ADC_CONTR&=ADC_STOP;//stopAD

ADC.Run=FALSE;

ADC.tempCvData[ADC.CvTImes]=ADC_DATA;//取转化值

ADC_DATA=0;

ADC.CvTImes++;

ADC.CvTImes%=6;

if(ADC.CvTimes!=0)

{

ADC_CONTR|=ADC_START;//发动AD转化器

ADC.Run=TRUE;

}

ADC_CONTR&=ADC_FLAG;//铲除ADC_FLAG中止标志

}

voidProc_ADC()

{

Uint16CvSum=0,i;

BYTEMaxCv=0,MinCv=0;

if(ADC.Run||ADC.CvTimes!=0)//AD还在进行,等候

return;

for(i=0;i《6;i++)

{

if(ADC.tempCvData[i]》MaxCv)

MaxCv=ADC.tempCvData[i];

if(ADC.tempCvData[i]MinCv=ADC.tempCvData[i];

}

for(i=0;i《4;i++)

CvSum+=ADC.tempCvData[i];

CvSum=CvSum-MaxCv-MinCv;

ADC.ADData[ADC.Curch]=(CvSum》》2);

ADC.Curch++;

ADC.Curch%=MAX_ADCH

ADC_CONTR&=0xF8;//先铲除当时通道值

ADC_CONTR|=ADC.Curch;//设置下一通道

ADC.Run=TRUE;//标志ADC正在转化

for(i=0;i《500;i++);//通道切换延时100us左右

ADC_CONTR|=ADC_START;//发动AD转化器

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/fangan/biancheng/345109.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部