新聞中心

EEPW首頁(yè) > 模擬技術(shù) > 設(shè)計(jì)應(yīng)用 > 用軟件實(shí)現(xiàn)DAA的方法

用軟件實(shí)現(xiàn)DAA的方法

作者: 時(shí)間:2013-09-09 來(lái)源:網(wǎng)絡(luò) 收藏
ebkit-text-size-adjust: auto; webkit-text-stroke-width: 0px">  該組子程序由定點(diǎn)整數(shù)二翻十、定點(diǎn)整數(shù)十翻二、定點(diǎn)小數(shù)二翻十和定點(diǎn)小數(shù)十翻二等4個(gè)子程序組成,分別稱(chēng)為CONV1、CONV2、CONV3和CONV4。由于AVRAT90系列單片機(jī)只有字節(jié)乘字節(jié)指令,計(jì)算功能不強(qiáng),故采用移位調(diào)整法實(shí)現(xiàn)多字節(jié)數(shù)據(jù)的數(shù)制轉(zhuǎn)換。其中,整數(shù)二翻十子程序CONV1和小數(shù)十翻二子程序CONV4采取左移調(diào)整的方法,而整數(shù)十翻二子程序CONV2和小數(shù)二翻十子程序CONV3采用右移調(diào)整的方法。不論左移還是右移,調(diào)整總是對(duì)十進(jìn)制數(shù)進(jìn)行,其目的是使十進(jìn)制數(shù)的移位規(guī)則符合于二進(jìn)制數(shù)移位規(guī)則:左移1位值增倍,右移1位值折半。當(dāng)某位BCD中的最高位(8)左移移入高位BCD中時(shí),按二進(jìn)制數(shù)看待應(yīng)為16,而按十進(jìn)制數(shù)相鄰位看待只能為10,故要做加6調(diào)整。另外,左移過(guò)程中若出現(xiàn)非法BCD碼時(shí)也要對(duì)其調(diào)整。BCD碼左移只不過(guò)是BCD碼相加的特例,故調(diào)用 BCD碼相加調(diào)整子程序A1就可完全解決左移調(diào)整問(wèn)題。當(dāng)右移BCD碼時(shí),若某位BCD中的1移入低位BCD最高位,按二進(jìn)制數(shù)看待,1折半應(yīng)為 0.5,而低位BCD中最高位值為0.8,故要做減3(即0.3)調(diào)整。因8421BCD碼其各位之權(quán)(某位上的1所代表的實(shí)際數(shù)值)分別為8、4、2和 1,若只在本碼位內(nèi)部移動(dòng),則符合左移1位值增倍、右移1位值折半的規(guī)則,故不須調(diào)整。

  本組定點(diǎn)運(yùn)算及數(shù)制轉(zhuǎn)換子程序?yàn)檫m應(yīng)大多數(shù)應(yīng)用場(chǎng)合而設(shè),具體使用時(shí)可加以修改。如整數(shù)二翻十時(shí),二進(jìn)制數(shù)不超過(guò)$FFFF,為提高運(yùn)行速度,可將二進(jìn)制數(shù)改為二字節(jié),十進(jìn)制數(shù)改為3字節(jié),并將移位循環(huán)次數(shù)(R21)改為16。如數(shù)據(jù)精度不夠,可把乘法子程序改為3字節(jié)乘3字節(jié)等等。

  A1為左移BCD碼并對(duì)其進(jìn)行調(diào)整的子程序。

  R為對(duì)右移后的BCD碼進(jìn)行測(cè)試、實(shí)施減3調(diào)整的子程序,以R20為工作單元。

  注:開(kāi)平方子程序SQR說(shuō)明中,請(qǐng)將對(duì)開(kāi)平方數(shù)R17、R16、R15、R14加上完整根號(hào)。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 軟件 DAA

評(píng)論


相關(guān)推薦

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

關(guān)閉