全是0 是连续转换模式。就是 转换率 125/13 大约9.15
如果连续模式 就是转换结束 立即进入中断 然后中断又立即启动下次转换。所以转换ADC转换频率等于进入中断的频率。
模拟比较器 就设计到自带的模拟比较器的功能 外部中断0 来一个外部中断 触发一次转换 下面都是定时器、计数器的中断。 最常用的就是连续转换模式。 adc.h key.h 是自己编写的头文件 先将
ADC采样到的数据缓冲起来 8个结果都暂存起来
均值滤波 read_adc()
返回read_BUF
voltile 每次都从寄存器读数据不是从缓存读 STATIC这个变量尽在本文件有效 static voltile unsigned int adc_buffer[MAX_ADC_BUFFER] MAX_ADC_BUFFER 是宏 9
void int_adc(void) {
ADUMX |= (1 ) //是参考电压源 2.56V
ADCSRA |= (1
// ADC使能 ADC 考试转换 连续转换128分频(最后3个置1) }
unsigned int read_adc(void){
return adc_buff(0); }
中断使能 //ADC 转换完成中断 SIGNAL(SIG_ADC){ unsigned char i;
unsigned
int temp sum =0; temp =ADC
;//ADC数据给了temp 注意这个结果是右对齐的因为我们没有置位 左对齐
for(i=1;i
//这里是一个求和操作 adc_fuffer=
adc_buffer[i+1];//顺序的将元素向前移动一个位置 sum
+= ADC_BUFFER[i]; //累加起来 }
// 将本次转换的结果的值
保存在最末的位置
adc_buffer() = temp;
sum + = adc_buffer(maxacdbuffer -1);//本次的结果 8次的求和
下面这个是除以8 相当于 右移动3位 adc_buffer[[0] = adcbuffer >;>; 3
//这样就完成对ADC 转换的结果进行了 }
平滑滤波