- 打卡等级:偶尔看看III
- 打卡总天数:38
- 最近打卡:2024-02-22 09:29:24
中级会员
- 积分
- 285
|
发表于 2024-1-15 17:12:59
|
显示全部楼层
void main(void)
{
// 初始化
int res;
int vcc;
int i;
Io_Init();
BGV = (int idata *)0xef;
ADCInit(); //ADC初始化
UartInit(); //串口初始化
ES = 1;
EA = 1;
res = 0;
for (i=0; i<8; i++)
{
res += ADCRead(); //读取8次数据
}
res >>= 3; //取平均值
vcc = (int)(1024L * *BGV / res); //(10位ADC算法)计算VREF管脚电压,即电池电压
// vcc = (int)(4096L * *BGV / res); //(12位ADC算法)计算VREF管脚电压,即电池电压
//注意,此电压的单位为毫伏(mV)
// UartSend(vcc >> 8); //输出电压值到串口
// UartSend(vcc);
Delay10ms();
while (1)
{
UartSend(vcc >> 8); //输出电压值到串口
UartSend(vcc);
Delay500ms();
}
}
这是做了一点小修改 然后再串口得到了下面的数据,这数据是不是不太正确的?
读15通道计算VCC电压不需要外部硬件配合,直接读取就可以计算了。
另外,ADC初始化后至少要延时1ms让模拟电路稳定后,才能进行ADC转换。 |
|