首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
STC12C4052AD STC单片机ADC采样C程序
来源:本站整理  作者:佚名  2011-02-05 21:43:58



#include "STC12C4052AD.h" 
typedef struct 

BOOL Run; //BOOL量作为定时采样标志,比如每隔3秒,置位一
次该标志 
BYTE Curch; //当前通道 
BYTE tempCvData[6]; //转换结果临时缓冲 
BYTE CvTimes; //采样次数 采样4次,去最大最小,保留4个取平均值 
BYTE ADData[MAX_ADCH]; //MAX_ADCH保存各通道最终采样数据 
}STADC; 
STADC ADC; 
void InitADC() 

Uint16 i; 
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转换器 

void ADCISR() interrupt ADC_VECTOR 

ADC_CONTR &= ADC_STOP; //stop AD 
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 中断标志 

void Proc_ADC() 

Uint16 CvSum = 0,i; 
BYTE MaxCv=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) 
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转换器 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:255,628.90000 毫秒