找回密码
 立即注册

QQ登录

只需一步,快速开始

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

单片机C语言如何把高低位整合在一起?

[复制链接]
跳转到指定楼层
楼主
ID:447439 发表于 2022-5-23 08:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
U8RH_data_H_temp=U8comdata;    COM();    U8RH_data_L_temp=U8comdata;    COM();    U8T_data_H_temp=U8comdata;    COM();    U8T_data_L_temp=U8comdata;    COM();
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:161164 发表于 2022-5-23 11:40 | 只看该作者
U16RH_data_temp = U8RH_data_H_temp;
U16RH_data_temp <<= 8;
U16RH_data_temp |= U8RH_data_L_temp;
回复

使用道具 举报

板凳
ID:685462 发表于 2022-5-23 13:35 | 只看该作者

c习惯这么写,也可以
#include <stdint.h>
uint16_t temp = (uint16_t)(U8RH_data_H_temp<<8) + (uint16_t) U8RH_data_L_temp;
回复

使用道具 举报

地板
ID:891041 发表于 2022-5-24 09:58 | 只看该作者
用union
回复

使用道具 举报

5#
ID:447439 发表于 2022-5-24 11:25 | 只看该作者
lose2836 发表于 2022-5-23 13:35
c习惯这么写,也可以
#include
uint16_t temp = (uint16_t)(U8RH_data_H_temp

写的仔细,学习了。谢谢
回复

使用道具 举报

6#
ID:883242 发表于 2022-5-24 11:36 | 只看该作者
移位太浪费时间了,用union或者指针操作。
回复

使用道具 举报

7#
ID:161164 发表于 2022-5-24 14:12 | 只看该作者
Hephaestus 发表于 2022-5-24 11:36
移位太浪费时间了,用union或者指针操作。

我想到的指针用法是这样,请指教
  1. #include <reg52.h>

  2. typedef         unsigned char        u8;  //0 to 255
  3. typedef         unsigned int        u16;  //0 to 65535
  4. typedef         unsigned long        u32;  //0 to 4294967295

  5. u8 U8RH_data_temp[2] = {0x12, 0x23};//{High Byte, Low Byte}
  6. u16 *U16RH_data_temp;

  7. void main()
  8. {
  9.                 U16RH_data_temp = (u16*)U8RH_data_temp;
  10.     while (1)
  11.     {
  12.     }
  13. }
复制代码



回复

使用道具 举报

8#
ID:844772 发表于 2022-5-24 14:35 | 只看该作者
union U16_union
{
unsigned int U16RH_data_temp;
unsigned char U8RH_H,U8RH_L;
} U16_data;
U16_data.U8RH_H= U8RH_data_H_temp;
U16_data.U8RH_L= U8RH_data_L_temp;
U16_data.U16RH_data_temp     //你要的合并的值,但这个用法跟芯片大小数有关,51没问题
回复

使用道具 举报

9#
ID:624769 发表于 2022-5-24 14:53 | 只看该作者
sfr  DPL = 0x82;
sfr  DPH = 0x83;
sfr16 DPTR = 0x82;
unsigned char testbyte_H = 0x12;   //8位
unsigned char testbyte_L = 0x34;   //8位
unsigned short testword;        //16位

void main()
{
            DPL = testbyte_L;          //存入低8位字节
            DPH = testbyte_H;        //存入高8位字节

            testword = DPTR;    //读出 16位 字
            while(1);
}
回复

使用道具 举报

10#
ID:883242 发表于 2022-5-24 17:08 | 只看该作者
lkc8210 发表于 2022-5-24 14:12
我想到的指针用法是这样,请指教

可以用,但是要注意大小端问题。8位单片机本身不存在大小端问题,但是编译器会给超过1个字节的数据按大端和小端来分配地址。
回复

使用道具 举报

11#
ID:1026496 发表于 2022-5-24 20:49 | 只看该作者
可以使用共用体
回复

使用道具 举报

12#
ID:161164 发表于 2022-5-24 21:37 | 只看该作者
Hephaestus 发表于 2022-5-24 17:08
可以用,但是要注意大小端问题。8位单片机本身不存在大小端问题,但是编译器会给超过1个字节的数据按大端 ...

受教了~
回复

使用道具 举报

13#
ID:1012735 发表于 2022-5-25 00:24 | 只看该作者
U16 data_Value = u8_HIGH * 0x100 + u8_LOW
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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