您现在的位置: 主页 > MCU > 单片机技术应用 > STC12C4052AD STC单片机ADC采样C程序 -
本文所属标签:
为本文创立个标签吧:

STC12C4052AD STC单片机ADC采样C程序 -

来源: 网络用户发布,如有版权联系网管删除 2018-09-06 

[导读]
#include"STC12C4052AD.h"typedefstruct{BOOLRun;//BOOL量作为定时采样标志,比如每隔3秒,置位一次该标志BYTECurch;//当前通道BYTEtempCvData[6];//转换结果临时缓冲 BYTECvTimes;//采样次数采样4次,

#include"STC12C4052AD.h"
typedefstruct
{
BOOLRun;//BOOL量作为定时采样标志,比如每隔3秒,置位一
次该标志
BYTECurch;//当前通道
BYTEtempCvData[6];//转换结果临时缓冲

本文引用地址: http://www.21ic.com/app/mcu/201806/764886.htm

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转换器
}




              查看评论 回复



嵌入式交流网主页 > MCU > 单片机技术应用 > STC12C4052AD STC单片机ADC采样C程序 -
 

"STC12C4052AD STC单片机ADC采样C程序 -"的相关文章

网站地图

围观()