This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

关于TM4C123GH6PM差分采样的疑惑

    差分采样时,单片机最小系统板的地和一块断电的电路板的地接一块后,即使没有输入,差分采样显示也有800mv,请问怎么回事儿啊?我设置了当采样数值小于2048时采样值为2048,即保证采样值不为负。下面是我的代码。谢谢指导!

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/debug.h"
#include "driverlib/sysctl.h"
#include "driverlib/adc.h"
#include "driverlib/rom.h"
#include "driverlib/pin_map.h"
#include "driverlib/interrupt.h"

#include "ADC_D.h"
#include "LCD_module.h"

void main()
{
uint32_t pui32ADC0Value[8];
uint32_t voltage[8];
uint32_t ADC_Value;
uint64_t SUM=0;
uint8_t i;
uint32_t Disp[5];
SysCtlClockSet(SYSCTL_SYSDIV_2_5| SYSCTL_USE_PLL | SYSCTL_OSC_MAIN | SYSCTL_XTAL_16MHZ);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC0);
ROM_ADCHardwareOversampleConfigure(ADC0_BASE, 64);
ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOE);
ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_0);
ROM_GPIOPinTypeADC(GPIO_PORTE_BASE, GPIO_PIN_1);

Init_ADC_D();
//初始化
/*
* 初始化代码
ROM_ADCSequenceConfigure(ADC0_BASE, 0, ADC_TRIGGER_PROCESSOR, 0);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 0, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 1, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 2, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 3, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 4, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 5, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 6, ADC_CTL_D|ADC_CTL_CH1);
ROM_ADCSequenceStepConfigure(ADC0_BASE, 0, 7, ADC_CTL_D|ADC_CTL_CH1|ADC_CTL_IE| ADC_CTL_END);
ROM_ADCSequenceEnable(ADC0_BASE, 0);
*/
LCD_pin_init();//液晶初始化
LCD_initialization();//液晶初始化
ADCIntClear(ADC0_BASE, 0);//清楚中断标志位
LCD_clear_screen();//清屏
while(1)
{

ADCProcessorTrigger(ADC0_BASE, 0);//触发过程ADC
while(!ADCIntStatus(ADC0_BASE, 0, false))
{
}
ADCIntClear(ADC0_BASE, 0);
ADCSequenceDataGet(ADC0_BASE, 0, pui32ADC0Value);
for(i=0;i<8;i++)
{
/*if(pui32ADC0Value[i]<=2048)
{
voltage[i]=33055*(2048-pui32ADC0Value[i])/2048;
SUM=SUM-voltage[i];
}
else
{*/if(pui32ADC0Value[i]<2048)//限制采样不为负
pui32ADC0Value[i]=2048;
voltage[i]=33055*(pui32ADC0Value[i]-2048)/2048;

SUM=SUM+voltage[i];
/*}*/
}
ADC_Value=SUM/8;
SUM=0;
Disp[0]=ADC_Value/10000%10;
Disp[1]=ADC_Value/1000%10;
Disp[2]=ADC_Value/100%10;
Disp[3]=ADC_Value/10%10;
Disp[4]=ADC_Value%10;
LCD_char_16x8(2, 5, LCD_ASCII[Disp[0]+'0']);
LCD_char_16x8(2, 6, LCD_ASCII[Disp[1]+'0']);

LCD_char_16x8(2, 7, LCD_ASCII[Disp[2]+'0']);

LCD_char_16x8(2, 8, LCD_ASCII[Disp[3]+'0']);
LCD_char_16x8(2, 9, LCD_ASCII['.']);
LCD_char_16x8(2, 10,LCD_ASCII[Disp[4]+'0']);
LCD_char_16x8(2, 11,LCD_ASCII['m']);
LCD_char_16x8(2, 12,LCD_ASCII['V']);

}


}