<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > PIC單片機制數(shù)之間的轉(zhuǎn)換和程序設計步驟

          PIC單片機制數(shù)之間的轉(zhuǎn)換和程序設計步驟

          作者: 時間:2011-09-08 來源:網(wǎng)絡 收藏
          在我們設計的儀表中采用PIC系列單片機,碰到了浮點數(shù)的運算問題,查閱其有關資料發(fā)現(xiàn),其浮點數(shù)的格式及其與十進制數(shù)之間的轉(zhuǎn)換,與我們常用的MCS-51單片機所提供的三字節(jié)、四字節(jié)浮點數(shù)完全不同,本文將說明其浮點數(shù)的格式及其與十進制數(shù)之間的轉(zhuǎn)換和程序設計步驟。

          1 浮點數(shù)的格式

          Microchip公司單片機所采用的浮點數(shù)格式是IEEE-754標準的變異型。32位浮點數(shù)格式為:



          其中:×表示一位二進制數(shù)0或1;eb為指數(shù)的偏差;S為浮點數(shù)的符號位,S=0為正數(shù),S=1為負數(shù);小數(shù)點“·”在符號位S的右邊;BY0BY1BY2為尾數(shù)的小數(shù)部分。

          應特別注意:

          ⑴浮點數(shù)隱含其整數(shù)部分為1。

          ⑵十進制數(shù)0的浮點數(shù)表示為00H,00H,00H,00H。

          2 浮點數(shù)與十進制數(shù)之間的相互轉(zhuǎn)換

          2.1 十進制數(shù)轉(zhuǎn)換成浮點數(shù)

          設:十進數(shù)為A,則2Z=A,Z=lnA/ln2,指數(shù)P=int(z);尾數(shù)部分X:X=A/2P,其整數(shù)部分隱含為1(零除外),將其小數(shù)部分按原碼格式化為二進制數(shù),即為尾數(shù)的小數(shù)部分BY0BY1BY2。而指數(shù)偏差eb=P+7FH(其中的7FH為指數(shù)的偏移量)。符號位S,視十進制數(shù)的正負而確定。

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

          2.2 浮點數(shù)轉(zhuǎn)換為十進制數(shù)

          設浮點數(shù)為ebS.BY0BY1BY2。由于浮點數(shù)隱含尾數(shù)的整數(shù)為1,故尾數(shù)X的實際值為:

          BY0BY1BY2;指數(shù)P=eb-7FH;故:十進制數(shù)

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

          例:32位規(guī)格化浮點數(shù)84H,49H,0FH,5CH轉(zhuǎn)換為十進制數(shù)。

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

          3 浮點數(shù)與十進制數(shù)相互轉(zhuǎn)換的程序設計

          3.1 浮點數(shù)轉(zhuǎn)換為十進制數(shù)的程序設計

          (1)檢測浮點數(shù)是否為零;若為零,則十進制數(shù)整數(shù)部分和小數(shù)部分均為零。

          (2)保存浮點數(shù)的符號位,將浮點數(shù)隱含的1置于浮點數(shù)的符號位,指數(shù)偏差eb加1,小數(shù)點移到原浮點數(shù)的符號位之前。

          (3)判斷指數(shù)偏差大于7FH否?若小于等于7FH,則該進制數(shù)整數(shù)部分為零,浮點數(shù)尾數(shù)部分右移n次(注:n=7FH-指數(shù)偏差eb),即求得二進制小數(shù)部分。若大于7FH,則將小數(shù)點右移n’次(注:n’=指數(shù)偏差eb-7FH),即求得二進制整數(shù)部分和小數(shù)部分。

          (4)將二進制整數(shù)部分轉(zhuǎn)換為十進制整數(shù);將二進制小數(shù)部分轉(zhuǎn)換為十進制小數(shù)。至此,完成了浮點數(shù)到十進制數(shù)的轉(zhuǎn)換。

          3.2 十進制數(shù)轉(zhuǎn)換為浮點數(shù)的程序設計

          (1)檢測十進制數(shù)是否為零,若為零,則浮點數(shù)置成00H,00H,00H,00H。

          (2)保存十進制數(shù)的符號位,將十進制數(shù)的整數(shù)部分轉(zhuǎn)換為二進制整數(shù),將十進制數(shù)的小數(shù)部分轉(zhuǎn)換為二進制小數(shù)(設二進制整數(shù)為三個字節(jié),二進制小數(shù)為兩個字節(jié))。

          (3)將浮點數(shù)的指數(shù)偏差eb置為7FH+23,檢測二進制整數(shù)的最高位是否為1,不是,則將二進制整數(shù)和二進制小數(shù)聯(lián)合左移,左移一次,指數(shù)偏差減1,直至二進制整數(shù)的最高位為1;隱含尾數(shù)整數(shù)的1,將二進制整數(shù)的最高位改為數(shù)的符號位。至此,指數(shù)偏差eb單元及原二進制整數(shù)的三個單元中的內(nèi)容,即構成四字節(jié)浮點數(shù)。

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

          4 結語

          本文中的十進制數(shù)與浮點數(shù)之間相互轉(zhuǎn)換的程序設計,在智能化儀表的鍵盤置數(shù)及數(shù)據(jù)顯示中,具有實用價值。這里提出了一種設計思路,沒有復雜的算法,程序設計亦較簡單,工作量較少,可利用Microchip公司提供的現(xiàn)成子程序?qū)崿F(xiàn)十進制整數(shù)與二進制整數(shù)的相互轉(zhuǎn)換,十進制小數(shù)與二進制小數(shù)的相互轉(zhuǎn)換。


          關鍵詞: PIC單片機

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();