色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

串行口接收數據,如何對16位INT型數據進行操作?

j4AI_wujianying ? 來源:互聯網 ? 作者:佚名 ? 2017-12-27 06:02 ? 次閱讀

吳鑒鷹單片機開發板地址

在8位單片機中沒有16位數的操作指令,所有的int型數據都要通過兩個字節分開操作,使用的方法不用,生成的代碼也不相同,當然效率也不一樣,通過指針對16位數進行操作可以得到高效的代碼。

比如通過串行口接收數據,或者從串行的EEPROM中讀取的數據,或者從大于8位的A/D讀取的數據,由于8位單片機的數據線是8位的,高于8位的數據都要分成兩個字節分別讀取,然后寫入到RAM中去再進行計算,或者把16位的int型數據從RAM中讀出再分別把高低字節存到EEPROM或者送到D/A,或者通過串行口發送出去,方法有很多種,下面用多種方法進行實現該操作,這里只演示寫入到16位的情況,讀取的情況非常相似,不贅述。

(1)使用聯合 (union)

typedef union{

unsigned int i;

unsigned char c[2];

}u_int;

unsigned char dH = 0x11, dL=0x22;

unsigned int d;

u_int ud;

ud.c[0] = dH;

ud.c[1] = dL;

d = ud.i;

此時d = 0x1122;

(2) 使用移位指令

數據定義與前面相同

d = ((unsigned int)dH)<<8 + dL;

或者

d = dH;

d <<= 8; // or: d = d<<8; 但后者編譯的代碼可能不是最簡的

d |= dL; // or: d = d | dL; 后者編譯的代碼可能不是最簡的

(3)使用指針

unsigned char *cptr;

cptr = (unsigned char*)(&d);

cptr[0] = dH;

cptr[1] = dL;

(4)強制指針類型轉換

*((unsigned char*)(&d)) = dH;

*((unsigned char*)(&d)+1) = dL;

((unsigned char*)(&d))[0] = dH;

((unsigned char*)(&d))[1] = dL;

這兩種方式看似相同但由Keil編譯出的代碼是不用的,前都有一次加法運算,而后者沒有,后者生成的代碼更簡潔,這種方式與用聯合成生的代碼是完全一樣的,

在這幾種方法中第(1)與第(4)的第二種生成的代碼是最乘潔的,是推薦使用的,從軟件工程的角度出發,推薦使用方法(1),這樣沒有強制類型轉換,沒有用到指針,更不容易出錯。從書寫的代碼來講,第(4)的第二種方法是最好的,代碼簡潔而且效率最高,但語法有點兒復雜。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 串口通信
    +關注

    關注

    34

    文章

    1626

    瀏覽量

    55560
  • 數模轉換
    +關注

    關注

    3

    文章

    107

    瀏覽量

    29001

原文標題:8位單片機中如何對16位INT型數據進行操作?

文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機精講吳鑒鷹】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    為什么ADS1x9x在接收數據后會舍棄高4和低4

    不知道為什么ADS1x9x在接收數據后會舍棄高4和低4,這個數據繪制的圖形沒有心電圖形。難道只是單純的將long
    發表于 12-25 07:28

    AIC23采集到的數據是應該用什么數據類型來接收int還是unsigned int

    AIC23采集到的數據是應該用什么數據類型來接收int還是unsigned int? 這個采集到的數字是什么含義呢?代表的是聲音信號的幅
    發表于 10-18 06:56

    串行口的四種工作方式各有什么特點

    串行通信是計算機硬件和外設之間常用的通信方式之一。串行口(Serial Port)是實現串行通信的硬件接口。在計算機系統中,串行口通常用于連接鼠標、調制解調器、打印機等設備。
    的頭像 發表于 08-22 17:37 ?1885次閱讀

    DAC7731 16電壓輸出串行輸入數模轉換器數據

    電子發燒友網站提供《DAC7731 16電壓輸出串行輸入數模轉換器數據表.pdf》資料免費下載
    發表于 07-23 09:48 ?0次下載
    DAC7731 <b class='flag-5'>16</b><b class='flag-5'>位</b>電壓輸出<b class='flag-5'>串行</b>輸入數模轉換器<b class='flag-5'>數據</b>表

    DAC716帶串行數據接口的16數模轉換器數據

    電子發燒友網站提供《DAC716帶串行數據接口的16數模轉換器數據表.pdf》資料免費下載
    發表于 07-23 09:15 ?0次下載
    DAC716帶<b class='flag-5'>串行數據</b>接口的<b class='flag-5'>16</b><b class='flag-5'>位</b>數模轉換器<b class='flag-5'>數據</b>表

    SN74LVC16373 16透明D鎖存器數據

    電子發燒友網站提供《SN74LVC16373 16透明D鎖存器數據表.pdf》資料免費下載
    發表于 06-04 10:58 ?0次下載
    SN74LVC16373 <b class='flag-5'>16</b><b class='flag-5'>位</b>透明D<b class='flag-5'>型</b>鎖存器<b class='flag-5'>數據</b>表

    具有3態輸出的16邊緣放大D觸發器數據

    電子發燒友網站提供《具有3態輸出的16邊緣放大D觸發器數據表.pdf》資料免費下載
    發表于 05-22 11:10 ?0次下載
    具有3態輸出的<b class='flag-5'>16</b><b class='flag-5'>位</b>邊緣放大D<b class='flag-5'>型</b>觸發器<b class='flag-5'>數據</b>表

    具有3態輸出的16透明D鎖存器數據

    電子發燒友網站提供《具有3態輸出的16透明D鎖存器數據表.pdf》資料免費下載
    發表于 05-22 11:09 ?0次下載
    具有3態輸出的<b class='flag-5'>16</b><b class='flag-5'>位</b>透明D<b class='flag-5'>型</b>鎖存器<b class='flag-5'>數據</b>表

    具有3態輸出的16邊緣放大D觸發器數據

    電子發燒友網站提供《具有3態輸出的16邊緣放大D觸發器數據表.pdf》資料免費下載
    發表于 05-22 10:44 ?0次下載
    具有3態輸出的<b class='flag-5'>16</b><b class='flag-5'>位</b>邊緣放大D<b class='flag-5'>型</b>觸發器<b class='flag-5'>數據</b>表

    16恒流LED接收驅動器MBI5026數據手冊

    電子發燒友網站提供《16恒流LED接收驅動器MBI5026數據手冊.pdf》資料免費下載
    發表于 04-18 17:13 ?5次下載

    STM32L162與ADS8320進行16數據轉換,如何讀取ADS的轉換數據

    求助:STM32L162與ADS8320進行16數據轉換,fAHB = 16M, IO方式
    發表于 04-18 08:19

    STM32WLE5JC SPI數據長度設置為8,但接收數據緩存卻是16,為什么?

    在STM32WLE5JC單片機中SPI數據長度設置了8,并且相應的接收FIFO也設成了8,但最后收發數據是卻是
    發表于 04-07 07:32

    16恒流LED接收器驅動器MBI5026數據手冊

    電子發燒友網站提供《16恒流LED接收器驅動器MBI5026數據手冊.pdf》資料免費下載
    發表于 03-11 17:08 ?0次下載

    嵌入式操作教程:2-12 RS232串通信實驗(查詢方式)

    一、實驗目的 了解UART 的功能和結構,學習RS232串通信協議,并實現通過查詢方式進行 RS232 串口通信收發。 二、實驗原理 RS232 RS232接口是現在主流的串行通信接口之一,被廣泛
    發表于 02-07 14:37

    xc2000同步串行口發送和接收數據錯誤怎么解決?

    接收兩次就會陷入接收函數里的while死循環。主函數里有好幾條發數的指令,我在每一個主發從收函數后面都寫上從發主收函數,在示波表里看發送的數據沒錯,但最后主機接收到的
    發表于 02-06 07:35
    主站蜘蛛池模板: 日日摸夜夜添无码AVA片| 国产AV天堂一区二区三区| 蜜桃色欲AV久久无码精品| 工口肉肉彩色不遮挡| 中文字幕亚洲视频| 脱女学小内内摸出水网站免费| 91免费永久在线地址| 女人夜夜春| 精品国产品在线18年| 俄罗斯极品hd| 97精品国偷拍自产在线| 亚洲精品无码专区在线播放| 日本人娇小hd| 蜜芽在线播放免费人成日韩视频| 国内九一激情白浆发布| 钉钉女老师| CHINA中国东北GURMA| 中文在线观看永久免费| 亚洲免费福利在线视频| 特污兔午夜影视院| 日本美国群交P片内射捆绑| 嗯啊好爽视频| 两个人的视频日本在线观看完整| 黄色aa大片| 国产又粗又猛又爽黄老大爷| 国产A级毛片久久久久久久| old老男人野外树林tv| 91精品国产91热久久p| 在线观看亚洲AV无码每日更新| 亚洲国产成人私人影院| 午夜国产视频| 午夜日韩久久影院| 婷婷四房播客五月天| 色婷婷综合激情中文在线| 青草视频久久| 青草国产在线视频免费| 欧美人成人亚洲专区中文字幕| 免费毛片试看| 免费视频国产| 千禧金瓶梅快播| 欧美做真爱欧免费看|