用单片机控制adc,多次adc转换求平均值代码?怎么写?

用单片机控制adc,多次adc转换求平均值代码?怎么写?,第1张

定义一个计数器,每次读完ADC转化的值以后,链凳累加,然后计数银唤早到一定值以后,求平均。下面是示例:

void get_adc() //获取ADC采锋雀样值求平均

{

static int cnt = 0//用于计数

static int sum = 0

if(cnt==SET_CNT)

{

ADC_value = sum/cnt;

sum = 0

cnt = 0

}

else

{

start_ADC();//开始转换

tmp = read_ADC()//读取ADC采样值

tmp = tmp +tmp

cnt++

}

}

AMX0SL是一个寄存器,用尺慧槐来选择ADC转换的通道,而channel是函数传过来的通道号,ADC0INT是ADC0中断标志位,因为下边要用软件查询的方式进行判断转换完成,所以这里要清0。ADC0的软件启动方式有定时器启动和向ADC0BUSY位写1等方式启动,下边的就是等待ADC0转换结束,因为转换结束后ADC0INT会由硬件置1,当为0时,说明未完成转换,程序会一直执行while,直到转换结束后跳出,然后就是读取转换的结果了,c8051的ADC0是12位ad,所以转换的结果陵友会存到两个寄存器里边ADC0H存放高4位,ADC0L存放低8位。高4位乘碧蚂256加上低8位就是最终的转换结果,最后再把结果返回。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12465816.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存