51单片机使用共同体实现数据拆分

项目背景

该项目基础是使用STC15W4k48S4单片机与温控器通过modbus 485实现设置温控的设定温度、定时读取温度值、温控启动工作、温控停止工作等操作。

在该通信过程中所使用的通信协议涉及到将整型数据变量拆分成字节数据,并通过modbus 485协议(实际在硬件电路设计时,使用到了TTL转485的电路)将字节数据传送出去,目前有两种方法提供给大家。

使用共用体

使用共用体

在C语言中,共用体是一种复合的数据结构。该数据结构拥有一个特殊的功能,就是其在计算中所申请的内存大小永远取决于该数据结构中内存大小最大的数据,其他数据与其共用该内存空间。在数据拆分与整合的过程中便想到该复合数据类型了。

  1. 定义的共用体为 ,该共用体数据一共包括两方面,一个是整型、一个是字节。因为在51架构的单片机中,整型为16位,即两字节的数据。
typedef union int_and_byte{
   int x;
   char y[2];
}data_type;
  1. 拆分功能 使用该功能函数可以将整型的数据拆分为两个字节数据,该处定义的函数为
    e
void convert_byte(int m)
{
  data_type e;
  char i[2];
  e.x=m;
  i[0] =e.y[0];
  i[1] =e.y[1];
}

3.合并功能 合并功能也是定义一个函数

int convert_int(char h,char l)
{
  data_type e;
  int t;
  e.y[0]=h;
  e.y[1]=l;
  t=e.x;
  return t;
}`

测试。

  1. 拆分功能 在实际测试中,是使用keil c51跑仿真得出的,数据拆分使用convert_byte(int m)函数,在这里将形参修改为300即可,由此可知在计算中其二进制值为0x012C,运行过程中的结果为0x010x2C。结果如下图所示;
    在这里插入图片描述

  2. 合并功能 数据合并使用convert_int(char h,char l)函数,在这里将形参修改为convert_int(0x01,0x2c)即可,由此可知在计算中表示数据为300,运行过程中的结果为300。结果如下图所示;
    在这里插入图片描述

此方法已经验证,大家可放心使用。只是需要注意不同平台下,其int的位数可能不一致,需要根据实际运行的平台确定定义的字节数量

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值