内部参考电压我用程序测试结果是1.37v-1.38v,这款芯片16通道是参考电压通道吧?
void InitADC()
{
P1M0=0X00;
P1M1=0XFF;
ADCCFG=0x2F;
ADC_RES = 0; //清除结果寄存器
ADC_CONTR = 0x8F ;
}
/*----------------------------
读取ADC结果
----------------------------*/
uint GetADCResult()
{
uint H_RES;
uchar L_RES;
ADC_CONTR |= 0x40;
_nop_(); //等待4个NOP
_nop_();
_nop_();
_nop_(); _nop_();
_nop_();
while (!(ADC_CONTR & ADC_FLAG));//等待ADC转换完成
ADC_CONTR &= ~ADC_FLAG; //关闭 ADC
H_RES=ADC_RES; //得到高8位
H_RES<<=8;
L_RES = ADC_RESL; // 低4位。
//L_RES &= 0x0f; // 屏蔽无关位
H_RES |= L_RES; // 高低字节拼接成一个12位数。
return H_RES; //返回ADC结果
}
/*----------------------------
发送ADC结果
----------------------------*/
void ShowResult()
{ uint i,vcc,res;
GetADCResult();
GetADCResult();
res=0;
for(i=0;i<256;i++)
{
res+=GetADCResult();
}
res>>=8;
//vcc=(int)(4095L * *BGV/res);
//NTC_R=vcc;
//vcc=*BGV >> 8; //读取Bandgap电压的高字节
//vcc=vcc|*BGV; //读取Bandgap电压的低字节
NTC_R=res;
}
void main()
{
P0M0=0XFF;
P0M1=0X00;
BGV = (int idata *)0xef;
P2M0=0XFF;
P2M1=0X00;
InitADC();
P1=0xff;
while(1)
{
ShowResult();
show(NTC_R/100,1);
show(NTC_R/10%10,2);
show(NTC_R%10,3);
delay_ms(20);
}
} |