ADC0809的信号经过RMS算法得到有效值代码
时间: 2023-10-12 20:17:13 浏览: 105
ADC0809参考代码
以下是将ADC0809芯片输入的信号经过RMS算法计算得到有效值的代码:
```
#include <reg51.h>
sbit CS_ADC = P1^0; // ADC0809芯片片选
sbit CLK_ADC = P1^1; // ADC0809芯片时钟
sbit DOUT_ADC = P1^2; // ADC0809芯片数据输出
unsigned int rms(unsigned int *data, unsigned int len) // RMS算法计算有效值
{
unsigned int i;
unsigned long sum = 0;
for (i=0; i<len; i++)
{
sum += data[i] * data[i];
}
return (unsigned int)(sqrt((double)sum / len));
}
void delay(unsigned int time) // 延时函数
{
unsigned int i, j;
for (i=0; i<time; i++)
{
for (j=0; j<127; j++);
}
}
void ADC0809_Read(unsigned char *adc_data) // 读取ADC0809芯片数据
{
unsigned char i;
*adc_data = 0;
CS_ADC = 0;
CLK_ADC = 0;
delay(1);
CLK_ADC = 1;
delay(1);
CLK_ADC = 0;
for (i=0; i<8; i++)
{
CLK_ADC = 1;
delay(1);
*adc_data <<= 1;
*adc_data |= DOUT_ADC;
CLK_ADC = 0;
delay(1);
}
CS_ADC = 1;
}
void main()
{
unsigned int data[100], i, len;
unsigned int rms_val;
for (i=0; i<100; i++)
{
ADC0809_Read((unsigned char *)&data[i]); // 读取ADC0809芯片数据并存储到数组中
delay(10); // 延时等待信号稳定
}
len = sizeof(data) / sizeof(unsigned int);
rms_val = rms(data, len); // 通过RMS算法计算得到信号的有效值
}
```
上述代码中,ADC0809_Read函数用于读取ADC0809芯片的数据,并将其存储到数组data中。主函数中,通过RMS算法计算得到信号的有效值rms_val。该RMS算法计算有效值的代码适用于任何信号的处理。
阅读全文