日B视频 亚洲,啪啪啪网站一区二区,91色情精品久久,日日噜狠狠色综合久,超碰人妻少妇97在线,999青青视频,亚洲一区二卡,让本一区二区视频,日韩网站推荐

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

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

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

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

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

掃碼添加小助手

加入工程師交流群

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

在8位單片機(jī)中沒有16位數(shù)的操作指令,所有的int型數(shù)據(jù)都要通過(guò)兩個(gè)字節(jié)分開操作,使用的方法不用,生成的代碼也不相同,當(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)算,而后者沒有,后者生成的代碼更簡(jiǎn)潔,這種方式與用聯(lián)合成生的代碼是完全一樣的,

在這幾種方法中第(1)與第(4)的第二種生成的代碼是最乘潔的,是推薦使用的,從軟件工程的角度出發(fā),推薦使用方法(1),這樣沒有強(qiáng)制類型轉(zhuǎn)換,沒有用到指針,更不容易出錯(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)投訴
  • 串口通信
    +關(guān)注

    關(guān)注

    34

    文章

    1663

    瀏覽量

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

    關(guān)注

    3

    文章

    126

    瀏覽量

    29785

原文標(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)推薦

    SGM52001-1616、1MSPS、8通道低功耗串行接口ADC解析

    SGM52001-1616、1MSPS、8通道低功耗串行接口ADC解析 在電子設(shè)計(jì)領(lǐng)域,模數(shù)轉(zhuǎn)換器(ADC)是連接模擬世界和數(shù)字世界的關(guān)鍵橋梁。今天,我們來(lái)深入了解SGMICRO推
    的頭像 發(fā)表于 03-12 14:00 ?281次閱讀

    深入解析SGM5353 - 1616串行輸入電壓輸出DAC

    深入解析SGM5353 - 1616串行輸入電壓輸出DAC 在電子設(shè)計(jì)領(lǐng)域,數(shù)模轉(zhuǎn)換器(DAC)是連接數(shù)字世界和模擬世界的重要橋梁。今天,我們就來(lái)深入了解一下SGMICRO推出的S
    的頭像 發(fā)表于 03-12 09:45 ?260次閱讀

    單片機(jī)中的串口通訊串行同步通信與串行異步通信

    進(jìn)行傳送。串行通信的數(shù)據(jù)是逐傳輸?shù)?,發(fā)送方發(fā)送的每一都具有固定的時(shí)間間隔,這就要求接收方也
    發(fā)表于 01-15 08:06

    嵌入式中的浮點(diǎn)數(shù)據(jù)轉(zhuǎn)換為字節(jié)類型的三種方法

    的時(shí)候一般都是以省內(nèi)存,加快運(yùn)算速度優(yōu)先。所以在選擇使用浮點(diǎn)時(shí)float就可以滿足大部分需求,當(dāng)需要高精度的時(shí)候必須使用double進(jìn)行運(yùn)算。 浮點(diǎn)數(shù)據(jù)在嵌入式中的使用 在嵌入式
    發(fā)表于 01-07 06:28

    深入剖析DS92LV1616總線LVDS串行器/解串器的卓越性能與應(yīng)用

    深入剖析DS92LV1616總線LVDS串行器/解串器的卓越性能與應(yīng)用 在當(dāng)今高速數(shù)據(jù)傳輸?shù)臅r(shí)代,
    的頭像 發(fā)表于 12-31 14:45 ?563次閱讀

    請(qǐng)問(wèn)UART內(nèi)核在接收數(shù)據(jù)時(shí)有哪些具體操作?UART內(nèi)核在接收數(shù)據(jù)完成后會(huì)進(jìn)行哪些處理?

    UART內(nèi)核在接收數(shù)據(jù)時(shí)有哪些具體操作?UART內(nèi)核在接收數(shù)據(jù)完成后會(huì)進(jìn)行哪些處理?
    發(fā)表于 12-25 07:15

    串行通訊與并行通訊介紹

    、16、32及64根或更多的數(shù)據(jù)進(jìn)行傳輸?shù)耐ㄓ嵎绞?,并行通訊就像多個(gè)車道的公路, 可以同時(shí)傳輸多個(gè)數(shù)據(jù)位數(shù)據(jù),而
    發(fā)表于 12-11 06:52

    操作的常見錯(cuò)誤與應(yīng)對(duì)策略

    溢出或數(shù)據(jù)丟失。在進(jìn)行位移操作時(shí),必須確保位移量在數(shù)據(jù)類型的有效范圍內(nèi)。例如,對(duì)于一個(gè) 8 的無(wú)符號(hào)字符
    發(fā)表于 11-24 07:50

    并行與串行的基本通信方式

    1、并行通信方式:將數(shù)據(jù)字節(jié)的各位用多條數(shù)據(jù)線同時(shí)進(jìn)行傳輸,每位數(shù)據(jù)都需要一條傳輸線。 2、串行通信方式:
    發(fā)表于 11-24 06:36

    NucleiStudio_IDE_201909串打印浮點(diǎn)數(shù)據(jù)時(shí)無(wú)數(shù)據(jù)輸出,軟件該如何配置串口才能打印浮點(diǎn)數(shù)據(jù)?

    NucleiStudio_IDE_201909串打印浮點(diǎn)數(shù)據(jù)時(shí)無(wú)數(shù)據(jù)輸出,軟件該如何配置串口才能打印浮點(diǎn)
    發(fā)表于 11-07 07:57

    對(duì)UART0輸入到串口的char數(shù)據(jù)轉(zhuǎn)換成16進(jìn)制的寄存器常用int相關(guān)處理

    ascii碼了,比如輸入0,但接收到轉(zhuǎn)換成int后顯示的卻是48,輸入a顯示的是97。 為了方便硬件寄存器得到想要的16進(jìn)制數(shù)據(jù),我們先要
    發(fā)表于 10-31 07:58

    UART接口數(shù)據(jù)接收和發(fā)送數(shù)據(jù)

    之后便將數(shù)據(jù)壓入FIFO。軟件每讀一次UART_RDATA寄存器,便會(huì)將1字節(jié)的表項(xiàng)數(shù)據(jù)彈出FIFO。 我們應(yīng)該注意UART接收端采用16倍波特率的采樣頻率采樣
    發(fā)表于 10-29 07:37

    使用MCU200T開發(fā)板的UART進(jìn)行數(shù)據(jù)傳輸

    我們想要實(shí)現(xiàn)從電腦串口調(diào)試助手像MCU軟核發(fā)送一個(gè)8bit字節(jié)數(shù)據(jù)例如0xff,并且收到數(shù)據(jù)軟核回傳的數(shù)據(jù)。首先要對(duì)MCU的UART進(jìn)行
    發(fā)表于 10-28 08:16

    請(qǐng)問(wèn)rt_thread的uart下如何支持9位數(shù)據(jù)的發(fā)送和接收?

    目前項(xiàng)目中有使用UART進(jìn)行數(shù)據(jù)的發(fā)送和接收,但是此部分UART比較特殊,其使用9bit進(jìn)行數(shù)據(jù)傳輸,其中第9用于指示當(dāng)前是地位還是數(shù)據(jù),
    發(fā)表于 09-28 07:56

    全面了解串行通信

    串行通信是一種數(shù)據(jù)傳輸方式,它將數(shù)據(jù)按 逐順序 (bit by bit)在一條傳輸線上發(fā)送和接收,與并行通信(同時(shí)傳輸多位
    的頭像 發(fā)表于 07-19 14:13 ?2177次閱讀
    景德镇市| 新兴县| 洪洞县| 交城县| 临海市| 望城县| 古浪县| 彭水| 白河县| 尉犁县| 个旧市| 阜平县| 新民市| 淮滨县| 安阳市| 千阳县| 高州市| 会同县| 三原县| 闸北区| 台北市| 金山区| 盐亭县| 靖州| 桂平市| 宁德市| 广元市| 柞水县| 井陉县| 中西区| 泰来县| 剑河县| 云南省| 柳林县| 稷山县| 中西区| 社旗县| 岫岩| 灵武市| 新龙县| 新蔡县|