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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > AVR單片機定點運算及數(shù)制轉(zhuǎn)換子程序

          AVR單片機定點運算及數(shù)制轉(zhuǎn)換子程序

          作者: 時間:2012-04-05 來源:網(wǎng)絡 收藏

          (5)開平方SQR

          操作:(R17,R16,R15,R14)→R14,R13,R12

          可視為雙字型整數(shù)X(≤4294967295)開平方,因有舍入處理,方根最大可達$10000(如X=$FFFF0000開平方即屬此),故用3字節(jié)存儲平方根。也可視為小數(shù)開平方,將X自最高位起每2位進行分割,采用摸擬手算的方法(X每左移2位試出1位根)開平方。

          3 數(shù)制

          該組整數(shù)二翻十、定點整數(shù)十翻二、定點小數(shù)二翻十和定點小數(shù)十翻二等4個子程序組成,分別稱為CONV1、CONV2、CONV3和CONV4。由于AT90系列只有字節(jié)乘字節(jié)指令,計算功能不強,故采用移位調(diào)整法實現(xiàn)多字節(jié)數(shù)據(jù)的數(shù)制。其中,整數(shù)二翻十子程序CONV1和小數(shù)十翻二子程序CONV4采取左移調(diào)整的方法,而整數(shù)十翻二子程序CONV2和小數(shù)二翻十子程序CONV3采用右移調(diào)整的方法。不論左移還是右移,調(diào)整總是對十進制數(shù)進行,其目的是使十進制數(shù)的移位規(guī)則符合于二進制數(shù)移位規(guī)則:左移1位值增倍,右移1位值折半。當某位BCD中的最高位(8)左移移入高位BCD中時,按二進制數(shù)看待應為16,而按十進制數(shù)相鄰位看待只能為10,故要做加6調(diào)整。另外,左移過程中若出現(xiàn)非法BCD碼時也要對其調(diào)整。BCD碼左移只不過是BCD碼相加的特例,故調(diào)用 BCD碼相加調(diào)整子程序ADAA1就可完全解決左移調(diào)整問題。當右移BCD碼時,若某位BCD中的1移入低位BCD最高位,按二進制數(shù)看待,1折半應為 0.5,而低位BCD中最高位值為0.8,故要做減3(即0.3)調(diào)整。因8421BCD碼其各位之權(某位上的1所代表的實際數(shù)值)分別為8、4、2和 1,若只在本碼位內(nèi)部移動,則符合左移1位值增倍、右移1位值折半的規(guī)則,故不須調(diào)整。

          本組定點及數(shù)制子程序為適應大多數(shù)應用場合而設,具體使用時可加以修改。如整數(shù)二翻十時,二進制數(shù)不超過$FFFF,為提高運行速度,可將二進制數(shù)改為二字節(jié),十進制數(shù)改為3字節(jié),并將移位循環(huán)次數(shù)(R21)改為16。如數(shù)據(jù)精度不夠,可把乘法子程序改為3字節(jié)乘3字節(jié)等等。

          ADAA1為左移BCD碼并對其進行調(diào)整的子程序。

          RDAA為對右移后的BCD碼進行測試、實施減3調(diào)整的子程序,以R20為工作單元。

          注:開平方子程序SQR說明中,請將對開平方數(shù)R17、R16、R15、R14加上完整根號。

          參考文獻

          1 宋建國,等. 原理及其應用. 北京:北京航空航天大學出版社, 2000
          2 張克彥. MCS-51/196浮點程序和實用程序(2.2.7 2.4.1 3.1.2 3.1.3等小節(jié)). 北京:北京航空航天大學出版社, 2001


          上一頁 1 2 下一頁

          評論


          相關推薦

          技術專區(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); })();