- 打卡等级:偶尔看看I
- 打卡总天数:13
- 最近打卡:2025-06-14 08:04:10
已绑定手机
注册会员
- 积分
- 126
|
AI8H1K17 TSSOP20 读取BGV电压没有一个方式是对的是什么原因?CHIPID ROM RAM读出来都不是1.19?? RAM读出是0 ROM读出是65311 CHIPID 读出也是0
#include"ALLC-H.h"
u16 *BGV;
/*******************************************************************************************/
void AdcSetRate(void) //500KSPS@35.000MHz //10位最快500K 12位最快800K
{
ADCCFG &= ~0x0f; //SPEED(0)
ADCTIM = 0x33; //CSSETUP(0), CSHOLD(1), SMPDUTY(19)
ADC_CONTR = 0x8f; //使能ADC模块,并选择第15通道
BGV = (u16 idata *)0xef;
}
/*******************************************************************************************/
u16 Get_ADC12bitResult(u8 xdata channel) //channel = 0~15
{
ADC_RES = 0;
ADC_RESL = 0;
ADC_CONTR = (ADC_CONTR & 0xF0) | 0x40 | channel;//启动 AD 转换
_nop_();
_nop_();
_nop_();
_nop_();
while((ADC_CONTR & 0x20) == 0) ; //wait for ADC finish
ADC_CONTR &= ~0x20; //清除ADC结束标志
return (((u16)ADC_RES << 8) | ADC_RESL);
}
/*******************************************************************************************/
u16 Read_ADC_vref()
{
u8 xdata i;
u16 xdata res;
for(i=0;i<8;i++)
{
res+=Get_ADC12bitResult(15);
}
res>>=3;
res = (int)(1024L * *BGV / res); //(10位ADC算法)计算VREF管脚电压,即电池电压
// res = (int)(4096L * BGV / res); //(12位ADC算法)计算VREF管脚电压,即电池电压
//注意,此电压的单位为毫伏(mV)
return res;
}
u16 time,ADC_verf;
void Delay_printf_vref()
{
if(++time>=50000)
{ time=0;
ADC_verf=Read_ADC_vref();
printf("BGV=%u mV\n",BGV);
printf("ADC_vref=%u mV\n",ADC_verf);
}
}
|
-
-
|