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

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

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

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

j4AI_wujianying ? 來(lái)源:未知 ? 2019-06-30 10:29 ? 次閱讀

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

比如通過(guò)串行口接收數(shù)據(jù),或者從串行的EEPROM中讀取的數(shù)據(jù),或者從大于8位的A/D讀取的數(shù)據(jù),由于8位單片機(jī)的數(shù)據(jù)線是8位的,高于8位的數(shù)據(jù)都要分成兩個(gè)字節(jié)分別讀取,然后寫入到RAM中去再進(jìn)行計(jì)算,或者把16位的int型數(shù)據(jù)從RAM中讀出再分別把高低字節(jié)存到EEPROM或者送到D/A,或者通過(guò)串行口發(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;

此時(shí)d = 0x1122;

(2) 使用移位指令

數(shù)據(jù)定義與前面相同

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

或者

d = dH;

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

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

(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)算,而后者沒(méi)有,后者生成的代碼更簡(jiǎn)潔,這種方式與用聯(lián)合成生的代碼是完全一樣的,

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

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

    關(guān)注

    6060

    文章

    44835

    瀏覽量

    645258
  • RAM
    RAM
    +關(guān)注

    關(guān)注

    8

    文章

    1386

    瀏覽量

    116545
  • EEPROM
    +關(guān)注

    關(guān)注

    9

    文章

    1062

    瀏覽量

    83087

原文標(biāo)題:8位單片機(jī)中如何對(duì)16位INT型數(shù)據(jù)進(jìn)行操作?

文章出處:【微信號(hào):wujianying_danpianji,微信公眾號(hào):?jiǎn)纹瑱C(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

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

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

    8單片機(jī)中沒(méi)有16數(shù)的操作指令,所有的int
    的頭像 發(fā)表于 09-27 15:21 ?9267次閱讀

    一文看懂8,16和32單片機(jī)的區(qū)別

    8單片機(jī) 16 32區(qū)別? 指CPU處理的數(shù)據(jù)
    的頭像 發(fā)表于 07-15 11:07 ?12.5w次閱讀

    16單片機(jī)有哪些

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

    串行口接收數(shù)據(jù),如何對(duì)16INT數(shù)據(jù)進(jìn)行操作?

    過(guò)串行口接收數(shù)據(jù),或者從串行的EEPROM中讀取的數(shù)據(jù),或者從大于8的A/D讀取的數(shù)據(jù),由于8
    的頭像 發(fā)表于 12-27 06:02 ?1.3w次閱讀

    單片機(jī)816是怎么區(qū)分的

    本文開(kāi)始介紹了單片機(jī)的概念和單片機(jī)的硬件特性,其次介紹了單片機(jī)的種類及介紹了8單片機(jī)
    的頭像 發(fā)表于 04-10 16:00 ?2.7w次閱讀

    8單片機(jī)和32單片機(jī)的應(yīng)用

     現(xiàn)在在單片機(jī)應(yīng)用市場(chǎng),仍然是以8單片機(jī)和32單片機(jī)為主導(dǎo)。在產(chǎn)品應(yīng)用上,當(dāng)然是物盡其用。那
    發(fā)表于 06-26 14:31 ?6642次閱讀

    8、16、32單片機(jī)的xx含義

    8、16、32是指單片機(jī)的“字長(zhǎng)”,也就是一次運(yùn)算中參與運(yùn)算的
    發(fā)表于 04-30 10:04 ?2次下載

    8OTP IO單片機(jī)PMS154C系列數(shù)據(jù)手冊(cè)

    8OTP IO單片機(jī)PMS154C系列數(shù)據(jù)手冊(cè)
    發(fā)表于 06-21 09:32 ?27次下載

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

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

    1、 8、16、32是什么?? ?? ????指CPU處理的
    發(fā)表于 11-18 17:36 ?11次下載
    <b class='flag-5'>8</b><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單片機(jī)做多位乘除操作

    8單片機(jī)做多位乘除操作今日在8單片機(jī)中做乘除運(yùn)算
    發(fā)表于 11-18 19:51 ?12次下載
    <b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>單片機(jī)</b>做多位乘除<b class='flag-5'>操作</b>

    8單片機(jī)中對(duì)16int數(shù)據(jù)操作技巧

    如何把兩個(gè)8位數(shù)據(jù)合在一起變成16位數(shù)據(jù)呢?
    發(fā)表于 02-08 16:22 ?0次下載
    <b class='flag-5'>8</b><b class='flag-5'>位</b><b class='flag-5'>單片機(jī)</b>中對(duì)<b class='flag-5'>16</b><b class='flag-5'>位</b><b class='flag-5'>int</b><b class='flag-5'>型</b><b class='flag-5'>數(shù)據(jù)</b>的<b class='flag-5'>操作</b>技巧

    8單片機(jī)的優(yōu)缺點(diǎn)有哪些?

    單片機(jī)自上世紀(jì)70年代問(wèn)世以來(lái),在電子設(shè)備現(xiàn)代化中發(fā)揮了巨大作用。單片機(jī)也從最初的4發(fā)展到8單片機(jī)
    的頭像 發(fā)表于 08-08 16:58 ?2019次閱讀

    8單片機(jī)16單片機(jī)的區(qū)別

    的4單片機(jī)發(fā)展到如今的32單片機(jī),其中8單片機(jī)
    的頭像 發(fā)表于 08-12 13:50 ?3781次閱讀

    8單片機(jī)和32單片機(jī)如何選擇?8單片機(jī)和32單片機(jī)的區(qū)別

    8和32單片機(jī)如何選擇適合,以及主要區(qū)別!
    的頭像 發(fā)表于 09-16 10:51 ?1756次閱讀

    電子發(fā)燒友

    中國(guó)電子工程師最喜歡的網(wǎng)站

    • 2931785位工程師會(huì)員交流學(xué)習(xí)
    • 獲取您個(gè)性化的科技前沿技術(shù)信息
    • 參加活動(dòng)獲取豐厚的禮品