alp 发表于 2024-3-3 10:58:29

读内部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

乘风飞扬 发表于 2024-3-3 19:11:44

可以直接使用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爱好者互助交流社区)

晓飛飛 发表于 2024-3-3 19:31:21

CHIPID属于特殊寄存器,读取前需要使能访问XFR
P_SW2 |= 0x80;

alp 发表于 2024-3-3 22:52:37

已经解决了,stc重定向的printf支持flaot输出, 主要还是printf以及格式输出的问题, 另外尽量不要在printf参数中放计算

alp 发表于 2024-3-4 10:58:31

乘风飞扬 发表于 2024-3-3 19:11
可以直接使用printf打印浮点数数据。
具体参考开天斧,屠龙刀例程包:09-ADC采样NTC数据-软件防抖-过采样使 ...

感谢,现在理解了
页: [1]
查看完整版本: 读内部1.19V的ADC电压值,但是没有输出不正确 | 已解决