编了一个AVR的AD采样程序,但始终不能正确采样

编了一个AVR的AD采样程序,但始终不能正确采样,第1张

每次采样完成后 ADIF 需要软件清0,不然第一次采样完成后它就一直是置1的;这样会造成后面每次没有采样完成,你就去读ADC寄存器的值,肯定会不对.

ADIF软件清零的 *** 作为:ADCSRA |= BIT(ADIF)

简单点,建立32位变量A,每采样一次就加到A,采样完8次再除以8就好了,

u16 ADC_ZKB(u8 Channel)

{

u32 value1=0

u16 value

u8 i

for(i=0i<8i++)

{

ADC_CSR = Channel &0x0F // 选择AD转换通道

ADC_CR1 |= 0x01 // 启动AD转换

while(!(ADC_CSR &0x80))// 等待AD转换完成

value = ADC_DRL

value |=((ADC_DRH<<8)&0X0300)

value1+=value

ADC_CSR = 0x00

}

return (value1/8)

}

大概这意思,怎么定义32位数,这个自己去查,因为AD采样时间比较久,估计这样FOR可能不合适,自己可以改改。


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

原文地址: https://outofmemory.cn/yw/7782786.html

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

发表评论

登录后才能评论

评论列表(0条)

保存