|

楼主 |
发表于 2021-6-21 14:19:42
|
显示全部楼层
- /*----------------------------
- 读取ADC结果
- ----------------------------*/
- uint_16 GetADCResult(uchar_8 ch)
- {
- uint_16 ADC_10BIT_RES;
- ADC_CONTR = ADC_POWER | ADC_SPEEDLL | ch | ADC_START;
- _nop_(); //等待4个NOP
- _nop_();
- _nop_();
- _nop_();
- while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
- ADC_CONTR &= ~ADC_FLAG; //关闭 ADC
- ADC_10BIT_RES=ADC_RES; //得到高8位
- ADC_10BIT_RES<<=2;
- ADC_10BIT_RES+=ADC_RESL; //得到低2位
- return ADC_10BIT_RES; //返回ADC结果
-
- }
- /*----------------------------
- 读取Bandgap电压值与adc值
- 计算VCC工作电压值
- ----------------------------*/
- uint_16 ShowResult()
- {
-
- uint_16 bandgap, //bandgap预储存校准值,单位毫伏
- adc_9gallery_res; //测量第九通道(bandgap)值
- float power_voltage; //系统供电电压,单位毫伏
- // ADC_voltage; //设定通道电压值,单位毫伏
- uchar_8 code *cptr; //定义ROM(代码)区指针
- cptr = ID_ADDR_ROM; //从程序区读取BandGap电压值(单位:毫伏mV)
- bandgap=*cptr++;
- bandgap<<=8;
- bandgap+=*cptr;
- //测量第九通道(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;
-
- return power_voltage;
- }
复制代码
|
|