关于adc_stc.c中16次ADC采集的平均值问题
本帖最后由 Q289466080 于 2024-1-10 15:57 编辑uint16 GetADC_CHX(uint8 chx)
{
uint16 ADCx;
uint8 i;
ADCInit(0); //ADC 初始化
//通过ADC的chx通道读取Bandgap电压的ADC测量值
ADCRead(chx); //前两个数据丢弃
ADCRead(chx);
ADCx = ADCRead(chx);
for (i = 0; i < 16; i++)
{
ADCx += ADCRead(chx);
}
ADCx >>= 4; //取平均值
return ADCx;
}代码中(代码是adc_stc.c中的),FOR循环前有一次采样,FOR循环里有16次,一共17次。>>4是16次平均值
范例代码:1-老刘爱捣鼓示波器,使用I2C OLED屏显示或者通过USB-CDC虚拟串口送STC-ISP虚拟OLED接口显示
诶 好像看起来是有问题的0.0emm 这不应该测不出来问题把。。
等大佬们的回复看看 本帖最后由 社区闲人 于 2024-1-10 17:10 编辑
楼主有心了,确实是代码不严谨。第12行应改为:ADCx = 0; 社区闲人 发表于 2024-1-10 17:07
楼主有心了,确实是代码不严谨。应该删除第12行。
直接删除会有问题把,,如果工程配置在large模式,这个ADCx变量应该会被定义到xdata区 由于xdata区中的数据不会被清除的原因,如果不加入对变量的初始化代码。直接进行运算操作应该会导致数据错误把。
我感觉 要么在定义变量的时候直接对变量进行初始化操作,或者在这个变量使用前进行初始化操作。
可以把11行代码 改为ADCx = 0; 应该就可以了。
不知道我上面的理解是正确的么。。我记得会有问题{:4_167:}
页:
[1]