不过,像我们一直写的程序的话,都是先读ADCL,再读ADCH,芯片手册里面有对这一过程的详细解释。
后面那几句,是对数据进行一个移位求平均值的过程。上面几句是把数据整体向后移一个字节位置,空出一判渗个新的位置,然后把此次的AD值放进去,组成一组新的数据。
下面几句是对并卖新的数据求平均值。
确实,STC11F-10FXX系列不提供ADC中断功能,如果你用STC12C系列就培察举支持ADC中断了,手册里有详细的方法.void InitADC()
{
Uint16 i
ADC_CONTR = 0xC0 //ADC模块加电,420周期转换一配碧次
for(i=0i<20000i++) //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 中断标志
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)