在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 在8位單片機(jī)中對(duì)16位INT型數(shù)據(jù)的操作

            在8位單片機(jī)中對(duì)16位INT型數(shù)據(jù)的操作

            作者: 時(shí)間:2016-11-22 來(lái)源:網(wǎng)絡(luò) 收藏
            在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é)分別讀取,然后寫(xiě)入到RAM中去再進(jìn)行計(jì)算,或者把16位的int型數(shù)據(jù)從RAM中讀出再分別把高低字節(jié)存到EEPROM或者送到D/A,或者通過(guò)串行口發(fā)送出去,方法有很多種,下面用多種方法進(jìn)行實(shí)現(xiàn)該操作,這里只演示寫(xiě)入到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ò)。從書(shū)寫(xiě)的代碼來(lái)講,第(4)的第二種方法是最好的,代碼簡(jiǎn)潔而且效率最高,但語(yǔ)法有點(diǎn)兒復(fù)雜。

            本文引用地址:http://www.biyoush.com/article/201611/319705.htm



            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉