找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1057|回复: 10
收起左侧

如何将变量值转字符串形式在上位机显示?

[复制链接]
ID:322939 发表于 2024-12-19 20:54 | 显示全部楼层 |阅读模式
在不使用printf()函数情况下,用SBUF形式将变量值转字符串在上位机显示?第一次使用接触,请各位大佬们指点下:例如:将ADC读取的数字值在串口发上位机显示
     unsigned int  temp=0;
    unsigned char sum=123;
      temp=ADC_read();
     SBUF=sum;
    while(!TI);
    TI=0;
    DelayMs(1000);
这样在上位机显示HEX格式“FB”,而不是123



回复

使用道具 举报

ID:1109793 发表于 2024-12-20 07:30 | 显示全部楼层
直接发个INT,让上位机自己处理不行吗?
回复

使用道具 举报

ID:277550 发表于 2024-12-20 09:02 | 显示全部楼层
上位机是电脑,功能强大,再将hex转换成dec,就是了,,,,每种编程语言都可做到的,如java Integer.parseInt("hex string", 16)
回复

使用道具 举报

ID:192020 发表于 2024-12-20 09:11 | 显示全部楼层
转换一下再打印,例如打印变量是123,转字符串就要串口发3个数值'1''2''3'
    SBUF='1';while(!TI);TI=0;
    SBUF='2';while(!TI);TI=0;
    SBUF='3';while(!TI);TI=0;
也就是写个函数把变量的百位十位个位提取出来转ascii后再依次发送
回复

使用道具 举报

ID:69038 发表于 2024-12-20 10:11 | 显示全部楼层
mcu处理一些本地数据是可以的,但上位机处理数据能力远胜MCU,所以一些数值转换还是放在上位机这边更好。特别是与MCU已经断联的数据。
回复

使用道具 举报

ID:322939 发表于 2024-12-20 14:04 | 显示全部楼层
有的是用sprintf函数转成字符串后再从串口发送,如:unsigned char str[5];
unsigned char sum=123;
sprintf(str,"%d\r\n,sum);
sedstring(str);//从串口发送上位机
回复

使用道具 举报

ID:322939 发表于 2024-12-20 20:40 | 显示全部楼层

void UartSend(char dat)
{
    while (!TI);
    TI = 0;
    SBUF = dat/100;
         while (!TI);
    TI = 0;
        SBUF=dat/10%10;
         while (!TI);
    TI = 0;
        SBUF=dat%10;
}
UartSend(sum);
回复

使用道具 举报

ID:322939 发表于 2024-12-21 08:05 | 显示全部楼层
上位机显示不对
回复

使用道具 举报

ID:401564 发表于 2024-12-21 09:14 | 显示全部楼层
单片机如果片上资源多的话
sprintf是相对好用的函数
对于要发送给上位机的数据,是要处理一下的,要么是用协议,要么是自己加一个起始和结束符,不然,数据容易乱
直接发8位变量值是简单,但如果是浮点型呢?16位数据灯呢?所以,还是用sprintf相对好点
回复

使用道具 举报

ID:322939 发表于 2024-12-21 09:38 | 显示全部楼层
串口助手显示会乱码
回复

使用道具 举报

ID:322939 发表于 2024-12-21 20:29 | 显示全部楼层
已经弄好,多谢各位!
回复

使用道具 举报

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

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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