<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > PIC單片機的浮點(diǎn)數格式及轉換

PIC單片機的浮點(diǎn)數格式及轉換

作者: 時(shí)間:2012-11-27 來(lái)源:網(wǎng)絡(luò ) 收藏

由美國Microchip公司生產(chǎn)的PIC系列單片機,因其功耗低,超小型,低成本,功能完整,非常適用于便攜式儀表和就地式顯示控制儀表,在國內越來(lái)越受到用戶(hù)的重視和廣泛的應用。

在我們設計的儀表中采用PIC系列單片機,碰到了浮點(diǎn)數的運算問(wèn)題,查閱其有關(guān)資料發(fā)現,其浮點(diǎn)數的格式及其與十進(jìn)制數之間的,與我們常用的MCS-51單片機所提供的三字節、四字節浮點(diǎn)數完全不同,本文將說(shuō)明其浮點(diǎn)數的格式及其與十進(jìn)制數之間的和程序設計步驟。

1 浮點(diǎn)數的格式
Microchip公司所采用的是IEEE-754標準的變異型。32位為:
PIC單片機的浮點(diǎn)數格式及轉換
其中:×表示一位二進(jìn)制數0或1;eb 為指數的偏差S為浮點(diǎn)數的符號位,S=0為正數,S=1為負數;小數點(diǎn)“·”在符號位S的右邊;BY0 BY1 BY2為尾數的小數部分。

應特別注意:

  1. 浮點(diǎn)數隱含其整數部分為1。
  2. 十進(jìn)制數0 的浮點(diǎn)數表示為00H,00H, 00H, 00H。

2 浮點(diǎn)數與十進(jìn)制數之間的相互
2.1 十進(jìn)制數轉換成浮點(diǎn)數
設:十進(jìn)數為A,則2Z=A,Z= lnA/ln2,指數P=int(z);尾數部分X: X=A/2P, 其整數部分隱含為1(零除外),將其小數部分按原碼格式化為二進(jìn)制數,即為尾數的小數部分BY0 BY1 BY2。而指數偏差eb=P+7FH(其中的7FH 為指數的偏移量)。符號位S,視十進(jìn)制數的正負而確定。

例如十進(jìn)制數50.265化為32位規格化浮點(diǎn)數:A=50.265,則Z=ln50.265/ln2,P=int(Z),故P=5; X=A/2P=50.265/25=1.57078125,將0.57078125化為23位二進(jìn)制小數,即是BY0 BY1 BY2,在最高位添上十進(jìn)制數的符號位S(因十進(jìn)制數為正數,故S=0);而eb=P+7FH,所以,十進(jìn)制數50.265的32位規格化浮點(diǎn)數即為84H,49H,0FH,5CH。

2.2 浮點(diǎn)數轉換為十進(jìn)制數
設浮點(diǎn)數為 eb S.BY0 BY1 BY2。由于浮點(diǎn)數隱含尾數的整數為1,故尾數X的實(shí)際值為:

BY0 BY1 BY2;指數P=eb-7FH;故:十進(jìn)制數

A=(-1)S×2P×X

例:32位規格化浮點(diǎn)數84H,49H,0FH,5CH轉換為十進(jìn)制數。

符號位S=0;指數P=84H-7FH,故P=5; 尾數的小數部分為49H,0FH,5CH左移一位,而尾數的整數部分隱含為1,故尾數X的實(shí)際值為:1.57078123;十進(jìn)制數A=(-1)0×25×1.57078123,即A=50.265。

3 浮點(diǎn)數與十進(jìn)制數相互轉換的程序設計
3.1 浮點(diǎn)數轉換為十進(jìn)制數的程序設計

  1. 檢測浮點(diǎn)數是否為零;若為零,則十進(jìn)制數整數部分和小數部分均為零。
  2. 保存浮點(diǎn)數的符號位,將浮點(diǎn)數隱含的1置于浮點(diǎn)數的符號位,指數偏差eb加1,小數點(diǎn)移到原浮點(diǎn)數的符號位之前。
  3. 判斷指數偏差大于7FH否?若小于等于7FH,則該進(jìn)制數整數部分為零,浮點(diǎn)數尾數部分右移n次(注:n=7FH-指數偏差eb), 即求得二進(jìn)制小數部分。若大于7FH,則將小數點(diǎn)右移n’次(注:n’=指數偏差eb-7FH),即求得二進(jìn)制整數部分和小數部分。
  4. 將二進(jìn)制整數部分轉換為十進(jìn)制整數 ;將二進(jìn)制小數部分轉換為十進(jìn)制小數。至此,完成了浮點(diǎn)數到十進(jìn)制數的轉換。

3.2 十進(jìn)制數轉換為浮點(diǎn)數的程序設計

  1. 檢測十進(jìn)制數是否為零,若為零,則浮點(diǎn)數置成00H,00H,00H,00H。
  2. 保存十進(jìn)制數的符號位,將十進(jìn)制數的整數部分轉換為二進(jìn)制整數,將十進(jìn)制數的小數部分轉換為二進(jìn)制小數(設二進(jìn)制整數為三個(gè)字節,二進(jìn)制小數為兩個(gè)字節)。
  3. 將浮點(diǎn)數的指數偏差eb置為7FH+23,檢測二進(jìn)制整數的最高位是否為1,不是,則將二進(jìn)制整數和二進(jìn)制小數聯(lián)合左移,左移一次,指數偏差減1,直至二進(jìn)制整數的最高位為1;隱含尾數整數的1,將二進(jìn)制整數的最高位改為數的符號位。至此,指數偏差eb單元及原二進(jìn)制整數的三個(gè)單元中的內容,即構成四字節浮點(diǎn)數。

最后應該指出,本文所述32位浮點(diǎn)數,精度相當于7位十進(jìn)制數;32位浮點(diǎn)數運算程序在Microchip 公司提供的有關(guān)資料中均有,但是,在調試其浮點(diǎn)子程序時(shí),發(fā)現0減0的結果為00H,80H, 00H,00H,而不是00H,00H,00H,00H,編程時(shí)應注意。

4 結語(yǔ)
本文中的十進(jìn)制數與浮點(diǎn)數之間相互轉換的程序設計,在智能化儀表的鍵盤(pán)置數及數據顯示中,具有實(shí)用價(jià)值。這里提出了一種設計思路,沒(méi)有復雜的算法,程序設計亦較簡(jiǎn)單,工作量較少,可利用Microchip公司提供的現成子程序實(shí)現十進(jìn)制整數與二進(jìn)制整數的相互轉換,十進(jìn)制小數與二進(jìn)制小數的相互轉換。



評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>