找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2154|回復(fù): 12
收起左側(cè)

單片機C語言如何把高低位整合在一起?

[復(fù)制鏈接]
ID:447439 發(fā)表于 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();
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2022-5-23 11:40 | 顯示全部樓層
U16RH_data_temp = U8RH_data_H_temp;
U16RH_data_temp <<= 8;
U16RH_data_temp |= U8RH_data_L_temp;
回復(fù)

使用道具 舉報

ID:685462 發(fā)表于 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;
回復(fù)

使用道具 舉報

ID:891041 發(fā)表于 2022-5-24 09:58 | 顯示全部樓層
用union
回復(fù)

使用道具 舉報

ID:447439 發(fā)表于 2022-5-24 11:25 | 顯示全部樓層
lose2836 發(fā)表于 2022-5-23 13:35
c習慣這么寫,也可以
#include
uint16_t temp = (uint16_t)(U8RH_data_H_temp

寫的仔細,學習了。謝謝
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2022-5-24 11:36 | 顯示全部樓層
移位太浪費時間了,用union或者指針操作。
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2022-5-24 14:12 | 顯示全部樓層
Hephaestus 發(fā)表于 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. }
復(fù)制代碼



回復(fù)

使用道具 舉報

ID:844772 發(fā)表于 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     //你要的合并的值,但這個用法跟芯片大小數(shù)有關(guān),51沒問題
回復(fù)

使用道具 舉報

ID:624769 發(fā)表于 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位字節(jié)
            DPH = testbyte_H;        //存入高8位字節(jié)

            testword = DPTR;    //讀出 16位 字
            while(1);
}
回復(fù)

使用道具 舉報

ID:883242 發(fā)表于 2022-5-24 17:08 | 顯示全部樓層
lkc8210 發(fā)表于 2022-5-24 14:12
我想到的指針用法是這樣,請指教

可以用,但是要注意大小端問題。8位單片機本身不存在大小端問題,但是編譯器會給超過1個字節(jié)的數(shù)據(jù)按大端和小端來分配地址。
回復(fù)

使用道具 舉報

ID:1026496 發(fā)表于 2022-5-24 20:49 | 顯示全部樓層
可以使用共用體
回復(fù)

使用道具 舉報

ID:161164 發(fā)表于 2022-5-24 21:37 | 顯示全部樓層
Hephaestus 發(fā)表于 2022-5-24 17:08
可以用,但是要注意大小端問題。8位單片機本身不存在大小端問題,但是編譯器會給超過1個字節(jié)的數(shù)據(jù)按大端 ...

受教了~
回復(fù)

使用道具 舉報

ID:1012735 發(fā)表于 2022-5-25 00:24 | 顯示全部樓層
U16 data_Value = u8_HIGH * 0x100 + u8_LOW
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表