|
|
串口發(fā)送BGV5的值為0x04D9, 換算為電壓為1242mv,與芯片讀取的電壓一致。看起來(lái)應(yīng)該沒(méi)有問(wèn)題,
但芯片5V vcc供電,但實(shí)際串口發(fā)送的是4238mv, ADC采集vcc供電的電壓也是4238mv, 請(qǐng)?jiān)賻兔忉屢幌隆?br />
uint idata BGV5 _at_ 0xef;
void main()
{
uchar i;
P1M0 = 0x00;P1M1 = 0x80; //P1.7高阻用作ADC輸入
P3M0 = 0x00;P3M1 = 0x00;
P5M0 = 0x00;P5M1 = 0x00;
InitUart(); //初始化串口
InitADC(); //初始化ADC
//BGV5=IapReadByte(IAP_ADDRESS)<<8|IapReadByte(IAP_ADDRESS+1);//程序開(kāi)始時(shí)讀取EEPROM中保存的BandGap數(shù)據(jù)
//BGV5=0x04D9;
/*if(BGV5==0xffff) //如果EEPROM中沒(méi)有有效數(shù)據(jù)
{
BGV5=0x0100; //內(nèi)部BandGap參考電壓在標(biāo)準(zhǔn)5V VCC的ADC轉(zhuǎn)換值
IapEraseSector(IAP_ADDRESS); //擦除EEPROM
IapProgramByte(IAP_ADDRESS, BGV5>>8);//寫(xiě)高8位
IapProgramByte(IAP_ADDRESS+1, BGV5);//寫(xiě)低8位
}*/
while (1)
{
P1ASF = 0x00; //不設(shè)置P1口為模擬口,開(kāi)通ADC內(nèi)部第9通道
Delay_ms(1);
BGVx=GetADCResult(0); //讀ADC的內(nèi)部第9通道
// 當(dāng)前VCC_mV = 標(biāo)準(zhǔn)電壓mV * 標(biāo)準(zhǔn)電壓BandGap轉(zhuǎn)換值 / 當(dāng)前電壓BandGap轉(zhuǎn)換值
VCC = 5000*(long)BGV5/BGVx; //計(jì)算當(dāng)前VCC電壓
dis_buf[0]=VCC/1000%10+'0';
dis_buf[1]=VCC/100%10+'0';
dis_buf[2]=VCC/10%10+'0';
dis_buf[3]=VCC%10+'0';
dis_buf[4]=' ';
P1ASF = 0x80; //設(shè)置P1.7為模擬口,開(kāi)通ADC第8通道
Delay_ms(1);
VINx=GetADCResult(7); //讀ADC的第8通道
VIN=VCC*(long)VINx/1023; //計(jì)算第8通道當(dāng)前輸入電壓
dis_buf[5]=VIN/1000%10+'0';
dis_buf[6]=VIN/100%10+'0';
dis_buf[7]=VIN/10%10+'0';
dis_buf[8]=VIN%10+'0';
dis_buf[9]='\n';
for(i=0;i<10;i++)
SendData(dis_buf[i ]); //串口發(fā)送當(dāng)前VCC電壓和當(dāng)前輸入電壓
// SendData((BGV5>>8)&0xff);
// SendData(BGV5&0xff);
Delay_ms(1000);
}
}
|
|