|
本帖最后由 ax6808 于 2022-3-5 23:48 編輯
剛好近日用到STC8G1K08(3.3V)的ADC: 測3.7V鋰電池電壓,代碼今天已最優(yōu)化,并有最為詳細(xì)的說明(兩通道中之一的代碼),供參考:
// ADC設(shè)置(查詢方式):
ADCCFG = 0x2f; //設(shè)置ADC時鐘為系統(tǒng)時鐘/2/16 ,右對齊;
//P_SW2 |= 0x80; //訪問擴(kuò)展RAM寄存器(ADCTIM)需先將P_SW2的BIT7置1才可正常讀寫; 后面P_SW2 &= 0x7f釋放非必要!
//ADCTIM = 0x30; //用復(fù)位默認(rèn)值0X2A(0010,1010)可去掉這2句;設(shè)置ADC時序控制2A~3F,采樣時間0A~1F; 低5位不能小于默認(rèn)值A(chǔ);
//P32ADC10:測BAT1一半分壓值);
ADC_CONTR = 0xCA; //3句合并ok!;復(fù)位000x,0000;開ADC電源(B7:1)、啟動AD轉(zhuǎn)換(B6:1)、選通道A(P32);
_nop_(),_nop_(); //參考手冊這里空操作2次;
while (!(ADC_CONTR & 0x20)); //查詢ADC完成標(biāo)志; 手冊:檢測工作約耗時1mS;
ADC_CONTR &= ~0x20; //清完成標(biāo)志;
//ADC_CONTR &= 0x7F; //可選ADC轉(zhuǎn)換完即斷電更省電; 20220305;ok
res = (ADC_RES << 8) | ADC_RESL; //讀取ADC結(jié)果(右對齊:高2位低8位,前面自動補(bǔ)0);
BAT1 = (int)(3300L*res/1024L); //計算監(jiān)測電壓mV;特別注意數(shù)據(jù)類型后面帶L(因I易混淆)!及VDD3.3V參考電壓穩(wěn)定性;
|
|