我在练习的时候发现用ADC测量电压的时候写了如下程序然后测量单片机的地。显示的电压总不为零,大约有0.03v左右的偏差。各位大大请问是我程序的问题还是什么问题啊?(头文件比较多我就只把函数复制上来了)
/*******************内部IO初始化函数*******************************************/
void Port_Init()
{
P1DIR &=0x00;
P4SEL = 0x00;
P4DIR = 0xFF;
P5SEL = 0x00;
P5DIR |= BIT0 + BIT1 + BIT3 + BIT5 + BIT6 + BIT7;
P6DIR |= 0xff;
}
/******************ADC初始化***************************************************/
void Adc_Init()
{
P6SEL |= BIT0 + BIT1; //选择AD通道P6.1
ADC12CTL0=ADC12ON+MSC+SHT0_4+REF2_5V+REFON; //采样保持时间:16个ADC12CLK,参考电压2.5V
ADC12CTL1=ADC12SSEL_2 + SHP + CONSEQ_3 + CSTARTADD_0; //序列通道多次转换模式
ADC12MCTL0 =SREF_1+INCH_0;
ADC12MCTL1 =SREF_1+INCH_1+EOS;
ADC12IE = BIT1; // 使能转换中断
ADC12CTL0 |= ENC; // 使能AD转换器
}
/*****************************************电压换算*****************************/
float Voltage_do(uint temp_d)
{
float temp_3;
temp_3=(temp_d)/4095.0; //转换公式,ADC数字量转换为电压大小
return temp_3*2.5;
}
/**************电压转换成数组**************************************************/
void num_trans(float temp_d)
{
A4=(int)temp_d; //分出百,十,和个位
temp_d*=10;
A5=((int)temp_d)%10;
temp_d*=10;
A6=((int)temp_d)%10;
temp_d*=10;
A7=((int)temp_d)%10;
temp_d*=10;
A8=((int)temp_d)%10;
Temp_Value[0]=A4+0x30;
Temp_Value[1]='.';
Temp_Value[2]=A5+0x30;
Temp_Value[3]=A6+0x30;
Temp_Value[4]=A7+0x30;
Temp_Value[5]='V';
Temp_Value[6]=' ';
}
/**************显示数组********************************************************/
void LCD_DisplayV(uchar h)
{
uchar i=0;
for(i=0;i<=6;i++)
LCD_PutChar(8*i,h,Temp_Value[i],White,Black);
}
/********************AD中断函数************************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
num_trans(Voltage_do(ADC12MEM0));//转化成字符输出
LCD_DisplayV(0);
}
/*************************主函数***********************************************/
void main()
{
WDTCTL=WDTPW+WDTHOLD;//关看门狗
Port_Init();
Clock_Init(); //初始化时钟
Device_code=0x9320;
TFT_Initial();
CLR_Screen(Black);
Adc_Init();//初始化串口
//ADC12CTL0&=!ENC;//关闭AD转换
_EINT();
while(1)
{
ADC12CTL0|=ENC; //使能AD转换
ADC12CTL0 |= ADC12SC; // 开启转换
ADC12CTL0&=~ADC12SC;
}
}
此帖出自
小平头技术问答
一周热门 更多>