我用C8051F350,利用其自带的差分AD采样外部压力传感器传递过来的差分信号。
其中AD0-AD1,对应传感器A,其中AD2-AD3,对应传感器B.
要求是实时采样A\B两个传感器的信号,所以我采样一次A传感器,便切换到B传感器采样一次,再切换到A传感器采样一次,周而复始。
遇到的问题如下:
单独采样A或者B传感器均正确。
循环切换采样A\B两个传感器时,A传感器信号变大,B传感器信号不变,采样的结果是A\B两个传感器信号均变大;
同样,B传感器信号变大,A传感器信号不变,采样结果也是A\B同时变大。
信号变小,情况也是这样。
费解啊,现将采样部分代码和通道切换代码贴到下面,求指教。
void ADC0_ISR (void) interrupt 10
{
static LONGDATA rawValue;
unsigned long mV;
while(!AD0INT); // Wait till conversion complete
AD0INT = 0; // Clear ADC0 conversion complete flag
// Copy the output value of the ADC
rawValue.Byte[Byte3] = 0x00;
rawValue.Byte[Byte2] = (unsigned char)ADC0H;
rawValue.Byte[Byte1] = (unsigned char)ADC0M;
rawValue.Byte[Byte0] = (unsigned char)ADC0L;
mV = 0;
mV = rawValue.result / 690; // mV = rawValue.result *10 / 6710;放大10倍 16776802 16738484
ADC0MD &= ~0x70; //使AD空闲
if(ADC0MUX == 0x01 ) //切换通道
{
ADC0MUX = 0x32 ;
printf("RIGHT:AA55%5ld55AA",mV);
}
else if(ADC0MUX == 0x32 )//切换通道
{
ADC0MUX = 0x01;
printf(" LEFT:AA55%5ld55AA\r\n",mV);
}
ADC0MD = 0x83; //使能AD
} |