本帖最后由 ax6808 于 2022-3-5 23:48 编辑
刚好近日用到STC8G1K08(3.3V)的ADC: 测3.7V锂电池电压,代码今天已最优化,并有最为详细的说明(两通道中之一的代码),供参考:
// ADC设置(查询方式):
ADCCFG = 0x2f; //设置ADC时钟为系统时钟/2/16 ,右对齐;
//P_SW2 |= 0x80; //访问扩展RAM寄存器(ADCTIM)需先将P_SW2的BIT7置1才可正常读写; 后面P_SW2 &= 0x7f释放非必要!
//ADCTIM = 0x30; //用复位默认值0X2A(0010,1010)可去掉这2句;设置ADC时序控制2A~3F,采样时间0A~1F; 低5位不能小于默认值A;
//P32ADC10:测BAT1一半分压值);
ADC_CONTR = 0xCA; //3句合并ok!;复位000x,0000;开ADC电源(B7:1)、启动AD转换(B6:1)、选通道A(P32);
_nop_(),_nop_(); //参考手册这里空操作2次;
while (!(ADC_CONTR & 0x20)); //查询ADC完成标志; 手册:检测工作约耗时1mS;
ADC_CONTR &= ~0x20; //清完成标志;
//ADC_CONTR &= 0x7F; //可选ADC转换完即断电更省电; 20220305;ok
res = (ADC_RES << 8) | ADC_RESL; //读取ADC结果(右对齐:高2位低8位,前面自动补0);
BAT1 = (int)(3300L*res/1024L); //计算监测电压mV;特别注意数据类型后面带L(因I易混淆)!及VDD3.3V参考电压稳定性;
|