• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

关于通过串口发送一个五位数的方法

万里追牛 2020-10-20 浏览量:732
各位大佬,求教我要通过串口发送一个小于65535的五位数,目前是把每一位数拆开来,分别放到了一个数组里,然后依次发送,但是这样的话,相当于一个数就占了5个字节
而一个小于65535的5位数,实际上只需要2个字节,有没有什么办法是可以通过2个字节就把这个5位数发出去的吗?



0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 可以这样,例如 uint16_t send_dat=2020

                           send_reg=send_dat>>8;  //send_rge为串口的数据寄存器,将send_dat的高八位先给串口数据寄存器

                          send_reg=send_dat;         //再把send_dat的低八位赋值给串口数据寄存器


    这只是一个伪代码,说明一个思路。当然,你这么发送的话,串口接收把拆分的两个八位数据合成成十六位数据也必须按照这样合成,先接收的是高八位,最后接收的是低八位。

                     uint16_t rec_dat;  //待接收的数据

                     rec_dat=send_reg; //接收第一个数据(源数据的高八位,第一个字节)

                     rec_dat<<=8;       

                     rec_dat|=send_reg; //将高低八位组成一个完成的16位数据


    完整的发送接收的框架思路就是这样,伪代码仅供参考。 可以得话可以设置最佳答案。

    • 发布于 2020-10-20
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:6
  • 直接发对应16bit的数据就好,解析出这个数据是协商的解析协议问题,通信通道上只要允许这样处理就好。

    串口是按char发生数据,但这些char如何解析是自定协议的。

    • 发布于2020-10-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 直接用16进制发送,但是如果一直连续发送2个字节,时间久了会有可能出现错位现象,所以建议在发送2个字节后停顿几个ms,让接收端知道这2个字节是一组数据不会和前后数据错位
    • 发布于2020-10-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 那就统一使用16位进行发送吧,收与发的两边,使用同样的解析方式进行解析就可以了,你这种方式,要发40位的数据,太浪费了
    • 发布于2020-10-20
    • 举报
    • 评论 0
    • 0
    • 0

  • 这不就是个16位数据,分高低字节发送就可以了。

    比如放到一个缓存里a[4],a[0]放高位,a[1]放低字节,然后发送这2个不就可以了。

    • 发布于2020-10-21
    • 举报
    • 评论 0
    • 0
    • 0

  • 实现一下putc函数,然后可以用printf,这样就只需要两个字节了
    • 发布于2020-10-23
    • 举报
    • 评论 0
    • 0
    • 0

  • 利用十六进制就可以,存为uint16_t的类型,然后第一位/0XFF第二位%0XFF

    • 发布于2020-10-26
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

关于通过串口发送一个五位数的方法