一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

單片機(jī)開發(fā)設(shè)計(jì),如何通過指針對16位數(shù)進(jìn)行操作

貿(mào)澤電子設(shè)計(jì)圈 ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-09-27 15:21 ? 次閱讀

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

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

(1)使用聯(lián)合 (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) 使用移位指令

數(shù)據(jù)定義與前面相同d = ((unsigned int)dH) 或者d = dH;d d |= dL; // or: d = d | dL; 后者編譯的代碼可能不是最簡的

(3)使用指針

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

(4)強(qiáng)制指針類型轉(zhuǎn)換

*((unsigned char*)(&d)) = dH;*((unsigned char*)(&d)+1) = dL;或((unsigned char*)(&d))[0] = dH;((unsigned char*)(&d))[1] = dL;

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

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6059

    文章

    44828

    瀏覽量

    645037
  • 串行接口
    +關(guān)注

    關(guān)注

    3

    文章

    373

    瀏覽量

    43074
  • 數(shù)據(jù)轉(zhuǎn)換

    關(guān)注

    0

    文章

    89

    瀏覽量

    18191
  • 指針
    +關(guān)注

    關(guān)注

    1

    文章

    484

    瀏覽量

    70924

原文標(biāo)題:8位單片機(jī)操作16位INT型數(shù)據(jù)的方法你想到了幾種?

文章出處:【微信號:Mouser-Community,微信公眾號:貿(mào)澤電子設(shè)計(jì)圈】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    51單片機(jī)編寫的6位數(shù)顯頻率計(jì)數(shù)器

    本帖最后由 eehome 于 2013-1-5 10:10 編輯 51單片機(jī)編寫的6位數(shù)顯頻率51單片機(jī)編寫的6位數(shù)顯頻率計(jì)數(shù)器計(jì)數(shù)器
    發(fā)表于 08-06 16:36

    如何在KEIL單片機(jī)編程環(huán)境下實(shí)現(xiàn)隨機(jī)的6位數(shù)驗(yàn)證碼?

    比如:單片機(jī)如何給GSM短信模塊發(fā)送一個隨機(jī)的6位數(shù),手機(jī)收到這6位數(shù)后,通過單片機(jī)的矩陣鍵盤輸入,點(diǎn)亮
    發(fā)表于 10-22 22:20

    單片機(jī)IO口進(jìn)行定義

    本文將提到以下內(nèi)容:操作中斷printf重定向隨機(jī)數(shù)發(fā)生器RNGAD/DADMA高性能計(jì)算能力加密ART加速一、操作  在學(xué)習(xí)51
    發(fā)表于 07-27 07:49

    基于單片機(jī)的單通道16位數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)

    基于單片機(jī)的單通道16位數(shù)據(jù)采集系統(tǒng)設(shè)計(jì)
    發(fā)表于 11-10 10:53 ?12次下載

    6位數(shù)顯頻率計(jì)數(shù)器

    6位數(shù)顯頻率計(jì)數(shù)器,單片機(jī)源代碼分享,下來看看。
    發(fā)表于 05-20 15:07 ?22次下載

    [轉(zhuǎn)載]Freescalenbsp;16單片機(jī)

    的原因吧。通常開始學(xué)單片機(jī),都是寫一些比較小的程序,如果不做項(xiàng)目開發(fā)之類的,以飛思卡爾 16 單片機(jī)的資源
    發(fā)表于 11-23 17:52 ?751次閱讀

    16單片機(jī)有哪些

    在實(shí)際運(yùn)用中,很多人使用16單片機(jī),16單片機(jī)有哪些呢?本文給大家?guī)?/div>
    發(fā)表于 12-20 11:41 ?4.4w次閱讀

    89C51單片機(jī)16位數(shù)據(jù)傳送指令的執(zhí)行過程

    這是89C51單片機(jī)唯一的一條16立即數(shù)傳遞指令,其功能是將一個16的立即
    發(fā)表于 01-09 15:13 ?5569次閱讀
    89C51<b class='flag-5'>單片機(jī)</b><b class='flag-5'>16</b><b class='flag-5'>位數(shù)</b>據(jù)傳送指令的執(zhí)行過程

    使用51單片機(jī)把416進(jìn)制數(shù)轉(zhuǎn)成10進(jìn)制數(shù)的方法和程序免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是使用51單片機(jī)把416進(jìn)制數(shù)轉(zhuǎn)成10進(jìn)制數(shù)的方法和程序免費(fèi)下載。
    發(fā)表于 08-23 17:30 ?23次下載
    使用51<b class='flag-5'>單片機(jī)</b>把4<b class='flag-5'>位</b><b class='flag-5'>16</b>進(jìn)制<b class='flag-5'>數(shù)</b>轉(zhuǎn)成10進(jìn)制<b class='flag-5'>數(shù)</b>的方法和程序免費(fèi)下載

    如何使用8單片機(jī)16INT型數(shù)據(jù)進(jìn)行操作

    在8單片機(jī)中沒有16位數(shù)操作指令,所有的int型數(shù)據(jù)都要通過兩個字節(jié)分開
    的頭像 發(fā)表于 06-30 10:29 ?7821次閱讀
    如何使用8<b class='flag-5'>位</b><b class='flag-5'>單片機(jī)</b>對<b class='flag-5'>16</b><b class='flag-5'>位</b>INT型數(shù)據(jù)<b class='flag-5'>進(jìn)行</b><b class='flag-5'>操作</b>

    51單片機(jī)4位數(shù)簡易計(jì)算器

    51單片機(jī)4位數(shù)簡易計(jì)算器
    發(fā)表于 05-06 11:19 ?30次下載

    單片機(jī)開發(fā)小程序

    如何使用單片機(jī)開發(fā)小程序單片機(jī)一般都是通過燒寫hex或是bin文件來進(jìn)行程序升級,這個方法是在8、16
    發(fā)表于 11-13 12:36 ?10次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>開發(fā)</b>小程序

    816、32單片機(jī)中的“XX”指什么?

    處理的數(shù)據(jù)寬度不同,總線寬度小于CPU一次處理的數(shù)據(jù)寬度,則以CPU的數(shù)據(jù)寬度定義單片機(jī)位數(shù),但稱為準(zhǔn)多少。比如某CPU是16但總線是
    發(fā)表于 11-16 09:21 ?29次下載
    8<b class='flag-5'>位</b>、<b class='flag-5'>16</b><b class='flag-5'>位</b>、32<b class='flag-5'>位</b><b class='flag-5'>單片機(jī)</b>中的“XX<b class='flag-5'>位</b>”指什么?

    8、16、32單片機(jī)(MCU)

    51的CPU一次只能處理8位數(shù)據(jù)。????????在ARM里面,R0和R2是32的,所以ARM的CPU一次能處理32位數(shù)據(jù)。3、進(jìn)一步解釋?????????單片機(jī)
    發(fā)表于 11-18 17:36 ?11次下載
    8<b class='flag-5'>位</b>、<b class='flag-5'>16</b><b class='flag-5'>位</b>、32<b class='flag-5'>位</b><b class='flag-5'>單片機(jī)</b>(MCU)

    一顆8的51單片機(jī)是如何處理32位數(shù)據(jù)的?

    一顆8的51單片機(jī)是如何處理32位數(shù)據(jù)的? 首先,需要明確一點(diǎn),即51單片機(jī)是8的,指的是其數(shù)據(jù)總線寬度為8
    的頭像 發(fā)表于 11-06 11:05 ?2784次閱讀