求修改单片机AD口多次采样求平均值的程序
u16ADC_ZKB(u8Channel){u16value;ADC_CSR=Channel&0x0F;//选择AD转换通道ADC_CR1|=0x01;//启动AD转换w...
u16 ADC_ZKB(u8 Channel)
{
u16 value;
ADC_CSR = Channel & 0x0F; // 选择AD转换通道
ADC_CR1 |= 0x01; // 启动AD转换
while(!(ADC_CSR & 0x80)); // 等待AD转换完成
value = ADC_DRL;
value |=((ADC_DRH<<8)&0X0300);
ADC_CSR = 0x00;
return value;
}
这个是采样一次的例子,请在这个函数里面添加采样8次,然后求平均值赋值给value。如果满意后会再给分的。 展开
{
u16 value;
ADC_CSR = Channel & 0x0F; // 选择AD转换通道
ADC_CR1 |= 0x01; // 启动AD转换
while(!(ADC_CSR & 0x80)); // 等待AD转换完成
value = ADC_DRL;
value |=((ADC_DRH<<8)&0X0300);
ADC_CSR = 0x00;
return value;
}
这个是采样一次的例子,请在这个函数里面添加采样8次,然后求平均值赋值给value。如果满意后会再给分的。 展开
3个回答
展开全部
简单点,建立32位变量A,每采样一次就加到A,采样完8次再除以8就好了,
u16 ADC_ZKB(u8 Channel)
{
u32 value1=0;
u16 value;
u8 i;
for(i=0;i<8;i++)
{
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可能不合适,自己可以改改。
u16 ADC_ZKB(u8 Channel)
{
u32 value1=0;
u16 value;
u8 i;
for(i=0;i<8;i++)
{
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可能不合适,自己可以改改。
迪凯特科技(北京)有限公司
2023-07-28 广告
2023-07-28 广告
单片机的UART口通信速度通常取决于以下几个因素:1. 硬件规格:不同的单片机UART接口具有不同的最大传输速率,通常在数百Kbps到数Mbps的范围内。例如,某些常见的单片机,如STM32F103C8T6,其UART接口的最大传输速率可达...
点击进入详情页
本回答由迪凯特科技(北京)有限公司提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询