|
发表于 2018-2-17 12:06:26
|
显示全部楼层
本帖最后由 zhxzhx 于 2018-2-17 12:18 编辑
在手册的1.18节,后面还有一个部分,在10.7节
void ShowResult(uchar ch)
{
uint adc_res10,//测量设定通道adc值
bandgap, //bandgap预储存校准值,单位毫伏
adc_9gallery_res; //测量第九通道(bandgap)值
float power_voltage, //系统供电电压,单位毫伏
ADC_voltage; //设定通道电压值,单位毫伏
uchar code *cptr; //定义ROM(代码)区指针
//uchar idata *iptr;//定义RAM(内存)区指针
cptr = ID_ADDR_ROM; //从程序区读取BandGap电压值(单位:毫伏mV)
bandgap=*cptr++;
bandgap<<=8;
bandgap+=*cptr;
/*iptr = ID_ADDR_RAM; //从内存区读取BandGap电压值(单位:毫伏mV),貌似不推荐
bandgap=*iptr++; //两种方法结果一样,
//上面的方法需要在下载式勾选"在ID号前添加重要测试参数"选项,才可在程序中获取此参数
bandgap<<=8; //下面的这种方法不需要
bandgap+=*iptr; */
//测量设定通道adc值
ADC_RES = 0; //清除结果寄存器
P1ASF = 0xff; //设置P1口为AD口
GetADCResult(ch); //GetADCResult(ch)函数是从adc处读结果,输入时通道号,P1.0口就是0通道,以此类推
GetADCResult(ch); //读三次获得稳定
adc_res10= GetADCResult(ch);
//测量第九通道(bandgap)值
ADC_RES = 0; //清除结果寄存器
P1ASF = 0x00; //设置读第九通道
GetADCResult(0); //测bandgap时,调用此函数时通道数只能填0
GetADCResult(0); //读三次获得稳定
adc_9gallery_res=GetADCResult(0);
//计算系统供电电压
power_voltage=(float)bandgap*1024/adc_9gallery_res;
//计算ADC通道测得电压值
ADC_voltage=(float)bandgap*adc_res10/adc_9gallery_res;
printf("P1.%d ADC result:%d\n",(uint)ch,adc_res10);
printf("BandGap standard:%d mV\n",bandgap);
printf("BandGap value:%d \n",adc_9gallery_res);
printf("system power voltage:%.0f mV\n",power_voltage);
printf("ADC voltage:%.0f mV\n",ADC_voltage);
} |
|