找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3944|回复: 12
打印 上一主题 下一主题
收起左侧

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

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



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
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?
回复

使用道具 举报

板凳
ID:748788 发表于 2021-9-5 22:08 | 只看该作者
将24个数放进一个数组,然后想取哪个数随你
回复

使用道具 举报

地板
ID:960726 发表于 2021-9-5 22:18 | 只看该作者
最好是得到传感器的资料,协议解析好,发出的十进制数也要处理,方便应用。24个HEX,取第14个HEX,转换成10进制发。字面的处理,并不难:1、合法的24个字符的帧判断,取出第14个;2、计算这个HEX转换成十进制数的三位数(百位、十位、个位);3、连续发出这三个字符,建议额外增加字符信息,不然接收方也是晕的
回复

使用道具 举报

5#
ID:883242 发表于 2021-9-5 23:36 | 只看该作者
你的数据到底是什么,你想发送的十进制数据又是什么?
假设原始数据是00 09 00,你想发送“1”还是发送2304?
回复

使用道具 举报

6#
ID:964131 发表于 2021-9-6 10:45 来自手机 | 只看该作者
wwh2382 发表于 2021-9-5 22:08
将24个数放进一个数组,然后想取哪个数随你

24个组是数 都是随机变换不是固定的
回复

使用道具 举报

7#
ID:964131 发表于 2021-9-6 10:48 来自手机 | 只看该作者
Hephaestus 发表于 2021-9-5 23:36
你的数据到底是什么,你想发送的十进制数据又是什么?
假设原始数据是00 09 00,你想发送“1”还是发送230 ...

传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他组的数据不需要,将14组的数据转化为十进制 在通过串口发送给电脑
回复

使用道具 举报

8#
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 里的话,你前面一大堆描述就不用了。不能得话,你得描述你现在能做到什么程度。你现在的终点,将会是我们给你想办法的起点。你明白吗?
回复

使用道具 举报

9#
ID:964429 发表于 2021-9-6 18:22 | 只看该作者
这个确实有点让人摸不着头脑呀,,哎,,,难过
回复

使用道具 举报

10#
ID:883242 发表于 2021-9-6 23:12 | 只看该作者
yyou588 发表于 2021-9-6 10:48
传感器发送24组十六进制的数据 但是要转化成十进制,才能得出真实的数据,但是我只要第14组的数据,其他 ...

算了吧,你的描述能力太有限,你把24组数据写出来,指出第14组数据是什么,然后想输出什么样的结果,都具体的说出来。
回复

使用道具 举报

11#
ID:964131 发表于 2021-9-7 11:01 来自手机 | 只看该作者
Hephaestus 发表于 2021-9-6 23:12
算了吧,你的描述能力太有限,你把24组数据写出来,指出第14组数据是什么,然后想输出什么样的结果,都具 ...

这么清楚的描述 还好意思怪别人描述不清楚 我一说别人就懂了
回复

使用道具 举报

12#
ID:964308 发表于 2021-9-7 11:12 来自手机 | 只看该作者
用一个for循环把串口接受到的内容全部存放进字符数组里,单独拿出09那个位的,定义一个整形变量强制转换就好了
回复

使用道具 举报

13#
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两个字符。
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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