找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

关于51单片机接收十六进制串口发送十进制程序

查看数: 5179 | 评论数: 12 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2021-9-5 08:35

正文摘要:

做一个粉尘传感器,但是粉尘传感器接收的是十六进制的24位的数据,想知道如何让单片机只读取24位中第 14位的数据,图片中画红圈圈的09,让单片机只读取09,并转换成10进制 以串口的形式发送,请问程序怎么写,谢谢! ...

回复

ID:213173 发表于 2021-9-7 11:43
粉尘传感器是根据制造商选定通讯协议输出一帧24字节数据,楼主只需望要选取第14字节当做有效数据。楼主必须编程把一帧24字节数据全部完整的接收保存并判断是否正确。然后才能根据需要选取第14字节当做有效数据做后续处理。单片机只懂二进制,十六进制、十进制都是给人看的。一个字节数据范围是0~255。楼主要根据选取的字节预判可能在多大范围变化来确定转换方式,假设该数据<100,可以这样处理:a=0x09/10+'0'; b=0x09%10+'0'; ,用串口发送a和b,上位机就得到ASCII码0 9两个字符。
ID:964308 发表于 2021-9-7 11:12
用一个for循环把串口接受到的内容全部存放进字符数组里,单独拿出09那个位的,定义一个整形变量强制转换就好了
ID:964131 发表于 2021-9-7 11:01
Hephaestus 发表于 2021-9-6 23:12
算了吧,你的描述能力太有限,你把24组数据写出来,指出第14组数据是什么,然后想输出什么样的结果,都具 ...

这么清楚的描述 还好意思怪别人描述不清楚 我一说别人就懂了
ID:883242 发表于 2021-9-6 23:12
yyou588 发表于 2021-9-6 10:48
传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他 ...

算了吧,你的描述能力太有限,你把24组数据写出来,指出第14组数据是什么,然后想输出什么样的结果,都具体的说出来。
ID:964429 发表于 2021-9-6 18:22
这个确实有点让人摸不着头脑呀,,哎,,,难过
ID:624769 发表于 2021-9-6 16:10
yyou588 发表于 2021-9-6 10:48
传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他 ...

你的描述中,有很多不明白的地方。
比如,你说的10进制是什么? 09 可以认为是 16进制0x09 也可以认为是10进制 9,他是符合 BCD(十进制)标准的一种格式。
在计算机领域中(包含单片机),10进制的表示有多种,常用的有 8421码(即BCD码)和 余三码 以及 2421码,另外还有不太常用的,5211码,7321码。 同时BCD码 还分全码和半码。
所以,所谓要10进制其实就是转码,那么,问题是你要转哪个码?

然后,你说将第14组数据转为10进制,那么 第14组数据你会拿了么?你能把 第14组数据 保存到 变量 Temp 里的话,你前面一大堆描述就不用了。不能得话,你得描述你现在能做到什么程度。你现在的终点,将会是我们给你想办法的起点。你明白吗?
ID:964131 发表于 2021-9-6 10:48
Hephaestus 发表于 2021-9-5 23:36
你的数据到底是什么,你想发送的十进制数据又是什么?
假设原始数据是00 09 00,你想发送“1”还是发送230 ...

传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他组的数据不需要,将14组的数据转化为十进制 在通过串口发送给电脑
ID:964131 发表于 2021-9-6 10:45
wwh2382 发表于 2021-9-5 22:08
将24个数放进一个数组,然后想取哪个数随你

24个组是数 都是随机变换不是固定的
ID:883242 发表于 2021-9-5 23:36
你的数据到底是什么,你想发送的十进制数据又是什么?
假设原始数据是00 09 00,你想发送“1”还是发送2304?
ID:960726 发表于 2021-9-5 22:18
最好是得到传感器的资料,协议解析好,发出的十进制数也要处理,方便应用。24个HEX,取第14个HEX,转换成10进制发。字面的处理,并不难:1、合法的24个字符的帧判断,取出第14个;2、计算这个HEX转换成十进制数的三位数(百位、十位、个位);3、连续发出这三个字符,建议额外增加字符信息,不然接收方也是晕的
ID:748788 发表于 2021-9-5 22:08
将24个数放进一个数组,然后想取哪个数随你
ID:624769 发表于 2021-9-5 18:33
一个双16进制  0xff  是8位数据,一个字节。
你说的24位数据, 到底是 3个字节数据,还是24个字节?
你要取得第14位数据,到底是第14个字节还是第2字节的第5位的 0或1?

然后,你要让别人告诉你如何只读取 某个东西 至少要把 你用来读取的函数拿出来看吧? 如果是直接在Eeprom 的 直接一个 MOVC 不就出来了?如果是在 Flash 里 可能需要 SPI 可能需要 IIC 都不好说啊。空对空跟你说,都读出来,取第14?

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

Powered by 单片机教程网

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