|
本帖最后由 ZRH 于 2024-5-13 16:32 编辑
WORD code Vbg_ROM _at_ 0x0ff7;
//WORD idata Vbg_RAM_at_0xef;
#define ADC_POWER 0x80;
#define ADC_FLAG 0x10;
#define ADC_START 0x08;
#define ADC_SPEEDLL 0x00;
#define ADC_SPEEDL 0x20;
#define ADC_SPEEDH 0x40;
#define ADC_SPEEDHH 0x60;
uInt8 tim_t;
/*内部BandGap 参考电压约为1.25V*/
void ADC_Vx(){
uInt16 ADCbg;
uInt16 ADCx;
uInt16 Vx;
uInt8 tmp_ADC;
ADCbg=0;
ADCx=0;
/*t通过ADC的第0通道测试外部输入电压的ADC测量值*/
ADC_RES=0;//清除结果寄存器
P1ASF=0x00; /*不设P1ASF,从的第9通道读取内部Bandgap电压的ADC测量值*/
ADC_CONTR=0x80; // ADC_CONTR=ADC_POWER|ADC_SPEEDLL;
Delay1ms(); //ADC上电后延时
ADC_CONTR=0x88;//ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;
;//_NOP_(); //等待4个NOP
;//_NOP_();
;//_NOP_();
;//_NOP_();
while(!(ADC_CONTR & 0x10));//while(~(ADC_CONTR&ADC_FLAG)){;}//等待ADCZ转换完成
ADC_CONTR&=~ADC_FLAG; //清除ADC标志
ADCbg=ADC_RES;//ADCx=ADC_RES;
//ADCbg = (((uInt16)ADC_RES << 2)|((uInt16)ADC_RESL&3)); //ADCbg=ADC_RES;
/*t通过ADC的第0通道测试外部输入电压的ADC测量值*/
ADC_RES=0;//清除结果寄存器
P1ASF=0x80; /*设P1ASF,从的第7通道读取外部输入电压的ADC测量值*/
ADC_CONTR=0x87;
//Delay1ms(); //ADC上电后延时
ADC_CONTR=0x8f;// ADC_CONTR=ADC_POWER|ADC_SPEEDLL|0|ADC_START;
;//_NOP_(); //等待4个NOP
;//_NOP_();
;//_NOP_();
;//_NOP_();
while(!(ADC_CONTR & 0x10));// while(~(ADC_CONTR & ADC_FLAG));//等待ADCZ转换完成
ADC_CONTR&=~ADC_FLAG; //清除ADC标志
ADCx=ADC_RES;//ADCx= (((uInt16)ADC_RES << 2)|((uInt16)ADC_RESL&3));//ADCx=ADC_RES;
/*t通过公式计算外部输入的实际电压值*/
//Vx=Vbg_RAM*ADCx/ADCbg; // 使用RAM中的Bandgap的电压参数进行计算
// Vx=Vbg_ROM*ADCx/ADCbg; // 使用ROM中的Bandgap的电压参数进行计算
tmp_ADC=Vbg_ROM/ADCbg;
Vx=tmp_ADC*ADCx;
/*处理计算结果
*/
/*-5°~+17°附常温增益值 */
if((Vx>450)&&(Vx<670)){
da_c1=0;
da_c2=1;
}
/*低于-10°附低温增益值 */
if((Vx<400)&&(Vx>100)){
da_c1=1;
da_c2=1;
}
/*高于22°附高温增益值 */
if(Vx>720){
da_c1=0;
da_c2=0;
}
}
|
|