读内部1.19V的ADC电压值,但是没有输出不正确 | 已解决
主函数main.c中int main()
{
uint32 system_tick = 0; // C语言定义必须放在最前面
uint8 recv_buff;
uint16 adc;
uint16 recv_len;
uint16 vref1v19;
float ftest;
sys_init();
// 启动提示
LED_STA = LED_ON;
delay_ms(500);
LED_STA = LED_OFF;
delay_ms(500);
LED_STA = LED_ON;
delay_ms(500);
LED_STA = LED_OFF;
delay_ms(500);
buf = 0xAA;
buf = 0x5A;
// 启动提示
printf("system initialized\r\n");
while (1)
{
LED_STA = LED_ON;
delay_ms(500);
LED_STA = LED_OFF;
delay_ms(500);
debug_uart_send(buf, 2); // 调试串口发送数据
// adc = adc_read(15);
vref1v19 = adc_readref1v19(); // 读取内部1.19V参考电压的实际值
printf("system tick = %d, vref=%d.%dV\r\n", system_tick++, (int)vref1v19 / 1000, vref1v19 % (uint16)1000); // 调试串口打, 是不支持除法运算还是取千位方法不对??
printf("system tick = %d, vref=%dmV, %dmV,\r\n", system_tick++, vref1v19, vref1v19); // 调试串口打印
recv_len = debug_uart_getbuff(recv_buff);
if (recv_len > 0)
{
printf("recv message:\r\n");
debug_uart_send(recv_buff, recv_len);
}
}
return 0;
}
读取内部1.19V代码
/// @brief 获取内部1.19V参考电压的值, 单位是mV
/// @return 1.19V参考电压的实际值
uint16 adc_readref1v19()
{
uint16 vref = (CHIPID7 << 8) + CHIPID8;
return vref;
}
实际打印结果
为什么用/和%运算没有结果,更无语的是同样打印vref1v19的值(在没有重新取值的条件下),第一次打印的是0,第二次是1180mV 可以直接使用printf打印浮点数数据。
具体参考开天斧,屠龙刀例程包:09-ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果
vADC = ((float)j * 2.5 / 4096);//计算NTC电压, Vref=2.5V
printf("P13=%fV",vADC);
C51/C251编译器使用printf函数的注意事项参考帖子:
printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6864
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
CHIPID属于特殊寄存器,读取前需要使能访问XFR
P_SW2 |= 0x80; 已经解决了,stc重定向的printf支持flaot输出, 主要还是printf以及格式输出的问题, 另外尽量不要在printf参数中放计算 乘风飞扬 发表于 2024-3-3 19:11
可以直接使用printf打印浮点数数据。
具体参考开天斧,屠龙刀例程包:09-ADC采样NTC数据-软件防抖-过采样使 ...
感谢,现在理解了
页:
[1]