实验C8051F410的ADC,使用串口输出电压值,但是输出与实际的误差随实际电压增大而增大,达到参考电压时串口发送出去的值与实际电压相差0.3V;
相关程序:
*******************************************
void ADC0_ISR (void) interrupt 10
{
static unsigned long accumulator = 0; // accumulator for averaging
static unsigned int measurements = 2048; // measurement counter
unsigned long result=0;
unsigned long mV; // measured voltage in mV
static unsigned int RH;
AD0INT = 0; // clear ADC0 conv. complete flag
accumulator += ADC0;
measurements--;
m=1;
if(measurements == 0)
{
measurements = 2048;
result = accumulator / 2048;
accumulator=0;
mV = result * 220 / 4095;
RI0=0;
TI0=0;
SBUF0=mV;
}
}
void UART0_Interrupt (void) interrupt 4
{
Delay_ms (2);
if (TI0==!0)
{
TI0=0;
}
else if(RI0==!0)
{
RI0=0;
}
}
********************************************
主程序是死循环;参考电压是2.2V,因为串口输出只能显示16位二进制,最大255,所以在计算时乘的220而不是2200。有没有大佬帮忙看一下?
|