專注電子技術(shù)學(xué)習(xí)與研究
當(dāng)前位置:單片機(jī)教程網(wǎng) >> MCU設(shè)計(jì)實(shí)例 >> 瀏覽文章

IEEE32數(shù)據(jù)傳輸格式分解

作者:張小強(qiáng)   來源:本站原創(chuàng)   點(diǎn)擊數(shù):  更新時(shí)間:2014年04月01日   【字體:

   平時(shí)Modbus常用的通訊。比如傳輸某寄存器的數(shù)據(jù) “0x3F” 裝換成十進(jìn)制后是“63”。這種類型直觀、簡(jiǎn)單。但是需要處理到正負(fù)數(shù)、浮點(diǎn)數(shù)時(shí)就不是很方便了,即使加標(biāo)志位判斷,數(shù)據(jù)的范圍有局限性,可移植性差。在PLC,觸摸屏中它們通訊這類數(shù)據(jù)則用了另一種格式。即IEEE32數(shù)據(jù)處理格式。下邊簡(jiǎn)單介紹一下,廢話不多說,直接說主題。(詳情百度)從名字可以看出,本數(shù)據(jù)是32位。
下邊 隨便寫個(gè)32位數(shù)跟大家一塊算   
十六進(jìn)制          0x41               0xc5               0x3b              0x28
二進(jìn)制         01000001       11000101       00111011      00101000
分解             sppppppp       pzzzzzzz         zzzzzzzz        zzzzzzzz
說明  :  S表示本數(shù)據(jù)的正負(fù),0表示本數(shù)據(jù)正數(shù),1表示本數(shù)據(jù)為負(fù)數(shù)
            P是后面位偏移,算法是把p整合為一組轉(zhuǎn)換為十進(jìn)制為131,于127比較
             大4,那么待會(huì)向右位移(大幾移幾位),若小向左移位。
  在"S P"后面都省去“1.” 復(fù)原后為 1.1000101 00111011 00101000
                                       右移后為11000.101 00111011 00101000
 小數(shù)左邊算法 1*2^4+1*2^3+0*2^2+0*2^1+0*2^0=24;
小數(shù)右邊算法1*2^-1+0*2^-2+1*2^-3+0*2^-4+0*2^-5+1*2^-6…… 
                    后邊就不說了,結(jié)果是0.6678.
兩個(gè)相加是24.6678.
可以表示任意一個(gè)數(shù)據(jù),編寫這種程序可移植性強(qiáng),無局限性,比如發(fā)個(gè)整數(shù)30我們可以計(jì)算出來。              正負(fù)標(biāo)志位為0,向右移動(dòng)4位p的值就是127+4= 131  二進(jìn)制  10000011    Z為11110000 00000000 00000000    移位整合后
    0x 41      0xf0      0x00        0x00
用KEIL編寫程序時(shí),包含math.h內(nèi)有計(jì)算冪運(yùn)算函數(shù) pow(float x,float y);程序具體怎么寫這里就不多說 。畢竟不是很容易寫,尊重下個(gè)人成果。哈哈。   

關(guān)閉窗口

相關(guān)文章