找回密码
 立即注册
查看: 1097|回复: 4

读内部1.19V的ADC电压值,但是没有输出不正确 | 已解决

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-19 16:32:42

5

主题

6

回帖

59

积分

注册会员

积分
59
发表于 2024-3-3 10:58:29 | 显示全部楼层 |阅读模式
主函数main.c中
int main()
{
    uint32 system_tick = 0; // C语言定义必须放在最前面
    uint8 recv_buff[DEBUG_UART_RX_BUF_LENGTH];
    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[0] = 0xAA;
    buf[1] = 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;
}


实际打印结果
截图202403031056558971.jpg

为什么用/和%运算没有结果,更无语的是同样打印vref1v19的值(在没有重新取值的条件下),第一次打印的是0,第二次是1180mV
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:445
  • 最近打卡:2025-06-17 12:12:21
已绑定手机

40

主题

2060

回帖

7079

积分

论坛元老

积分
7079
发表于 2024-3-3 19:11:44 | 显示全部楼层
可以直接使用printf打印浮点数数据。
具体参考开天斧,屠龙刀例程包:09-ADC采样NTC数据-软件防抖-过采样使用-串口1返回结果
  1.     vADC = ((float)j * 2.5 / 4096);  //计算NTC电压, Vref=2.5V
  2.     printf("P13=%fV  ",vADC);
复制代码


C51/C251编译器使用printf函数的注意事项参考帖子:
printf函数 的 格式参数; USB接口 使用 printf 打印数据
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=6864
(出处: 国芯论坛-STC全球32位8051爱好者互助交流社区)
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:460
  • 最近打卡:2025-06-17 15:17:55
已绑定手机

37

主题

2221

回帖

2662

积分

荣誉版主

积分
2662
发表于 2024-3-3 19:31:21 | 显示全部楼层
CHIPID属于特殊寄存器,读取前需要使能访问XFR
P_SW2 |= 0x80;
睁开眼睛做场梦~~~
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-19 16:32:42

5

主题

6

回帖

59

积分

注册会员

积分
59
发表于 2024-3-3 22:52:37 | 显示全部楼层
已经解决了,stc重定向的printf支持flaot输出, 主要还是printf以及格式输出的问题, 另外尽量不要在printf参数中放计算
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:2
  • 最近打卡:2024-01-19 16:32:42

5

主题

6

回帖

59

积分

注册会员

积分
59
发表于 2024-3-4 10:58:31 | 显示全部楼层
乘风*** 发表于 2024-3-3 19:11
可以直接使用printf打印浮点数数据。
具体参考开天斧,屠龙刀例程包:09-ADC采样NTC数据-软件防抖-过采样使 ...

感谢,现在理解了
回复 支持 反对

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-6-17 15:22 , Processed in 0.126200 second(s), 73 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表