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

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

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

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

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

j4AI_wujianying ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2017-12-27 06:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

吳鑒鷹單片機(jī)開發(fā)板地址

在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)<<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)強(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)系本站處理。 舉報(bào)投訴
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1640

    瀏覽量

    56824
  • 數(shù)模轉(zhuǎn)換

    關(guān)注

    3

    文章

    114

    瀏覽量

    29408

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

文章出處:【微信號:wujianying_danpianji,微信公眾號:單片機(jī)精講吳鑒鷹】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

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

    對DAC104進(jìn)行操作,16位數(shù)據(jù)分兩次寫,兩次操作間需要延時嗎?

    (1) { SetDAC_A(0x200); //0x200---1.5V __delay_cycles(184320000);//10s延時 } } 通過檢測發(fā)現(xiàn),A輸出一直不對,不知道問題出在哪兒?對DAC104進(jìn)行操作,16
    發(fā)表于 01-24 08:04

    SN65HVS880是不是在CLK的上升沿發(fā)送數(shù)據(jù)出去的?

    一個SN65HVS880調(diào)試時發(fā)現(xiàn)當(dāng)我沒給并行數(shù)據(jù)時,串行口接收到的數(shù)據(jù)總為0000 0001。 2)給IP7高電平時,
    發(fā)表于 01-24 06:40

    用long int采集了ad輸出的24有符號二進(jìn)制補(bǔ)碼數(shù)據(jù),該如何觀察數(shù)據(jù)

    1.24的二進(jìn)制補(bǔ)碼第24為符號,但我用的long int 形第32為符號,用ccs
    發(fā)表于 01-14 06:26

    DAC3283到底是8的LVDS輸入數(shù)據(jù)還是16的LVDS輸入數(shù)據(jù)?

    請問這個DAC到底是8的LVDS輸入數(shù)據(jù)還是16的LVDS輸入數(shù)據(jù)啊。。也就是說,這個I路的15:8和7:0,是一個
    發(fā)表于 12-31 08:27

    為什么ADS1x9x在接收數(shù)據(jù)后會舍棄高4和低4?

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

    請問如何接收并處理ads8411的2Msps@16bit并行數(shù)據(jù)?

    請問如何接收并處理ads8411的2Msps@16bit并行數(shù)據(jù)? 我之前沒有接觸過mcu,對fpga比較熟悉;設(shè)想直接將ADC的并行數(shù)據(jù)輸出接到mcu的IO
    發(fā)表于 11-22 06:26

    用TLV320AIC3106音頻芯片ADC采集正弦波,采集到的32int數(shù)據(jù)點(diǎn)的波形為什么不是正常的正弦波呢?

    用TLV320AIC3106音頻芯片ADC 采集正弦波,采集到的32int數(shù)據(jù)點(diǎn)的波形如下圖所示:為什么不是正常的正弦波呢?
    發(fā)表于 10-24 06:58

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收?int還是unsigned int?

    AIC23采集到的數(shù)據(jù)是應(yīng)該用什么數(shù)據(jù)類型來接收,int還是unsigned int? 這個采集到的數(shù)字是什么含義呢?代表的是聲音信號的幅
    發(fā)表于 10-18 06:56

    串行口的四種工作方式各有什么特點(diǎn)

    串行通信是計(jì)算機(jī)硬件和外設(shè)之間常用的通信方式之一。串行口(Serial Port)是實(shí)現(xiàn)串行通信的硬件接口。在計(jì)算機(jī)系統(tǒng)中,串行口通常用于連接鼠標(biāo)、調(diào)制解調(diào)器、打印機(jī)等設(shè)備。
    的頭像 發(fā)表于 08-22 17:37 ?3771次閱讀

    ADS8339 16、250kSPS串行接口微功耗微型SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS8339 16、250kSPS串行接口微功耗微型SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-30 13:51 ?1次下載
    ADS8339 <b class='flag-5'>16</b><b class='flag-5'>位</b>、250kSPS<b class='flag-5'>串行</b>接口微功耗微型SAR模數(shù)轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表

    ADS8864 16、400kSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS8864 16、400kSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-27 10:41 ?0次下載
    ADS8864 <b class='flag-5'>16</b><b class='flag-5'>位</b>、400kSPS、<b class='flag-5'>串行</b>接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表

    ADS8860 16、1MSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS8860 16、1MSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-27 09:43 ?0次下載
    ADS8860 <b class='flag-5'>16</b><b class='flag-5'>位</b>、1MSPS、<b class='flag-5'>串行</b>接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表

    ADS8866 16、100kSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《ADS8866 16、100kSPS、串行接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-27 09:42 ?0次下載
    ADS8866 <b class='flag-5'>16</b><b class='flag-5'>位</b>、100kSPS、<b class='flag-5'>串行</b>接口、微功耗、微型、單端輸入、SAR模數(shù)轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表

    DAC7731 16電壓輸出串行輸入數(shù)模轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《DAC7731 16電壓輸出串行輸入數(shù)模轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-23 09:48 ?0次下載
    DAC7731 <b class='flag-5'>16</b><b class='flag-5'>位</b>電壓輸出<b class='flag-5'>串行</b>輸入數(shù)模轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表

    DAC716帶串行數(shù)據(jù)接口的16數(shù)模轉(zhuǎn)換器數(shù)據(jù)

    電子發(fā)燒友網(wǎng)站提供《DAC716帶串行數(shù)據(jù)接口的16數(shù)模轉(zhuǎn)換器數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 07-23 09:15 ?0次下載
    DAC716帶<b class='flag-5'>串行數(shù)據(jù)</b>接口的<b class='flag-5'>16</b><b class='flag-5'>位</b>數(shù)模轉(zhuǎn)換器<b class='flag-5'>數(shù)據(jù)</b>表