<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 電子開發(fā) >> EDA開發(fā)應(yīng)用 >> Keilc >> 正文

      Keil C51下快速小數(shù)運(yùn)算算法

      作者:佚名    文章來源:本站原創(chuàng)    點擊數(shù):    更新時間:2008/10/31

      1引言
          實時控制系統(tǒng)程序設(shè)計中,常涉及到小數(shù)運(yùn)算問題.計算機(jī)系統(tǒng)中用二進(jìn)制表示小數(shù)的方法有定點數(shù)表示法和浮點數(shù)表示法.采用浮點數(shù)表示法表示的小數(shù)范圍大、精度高,但程序代碼長,運(yùn)算速度慢.定點數(shù)表示的小數(shù)范圍小、精度低,但程序代碼短,運(yùn)算速度快.
          使用C語言設(shè)計程序具有程序可讀性強(qiáng),編程方便等優(yōu)點,但按常規(guī)方法設(shè)計程序時,實時性不如采用匯編語言設(shè)計的程序,這在涉及到小數(shù)運(yùn)算時表現(xiàn)更為突出.這樣就限制了C語言的應(yīng)用.如果采用合適的計算方法,使用C語言編程可以獲得與匯編語言編程同樣的實時性.
          實時控制系統(tǒng)中的前向通道采集的原始數(shù)據(jù)大多是定點整數(shù),例如前向模擬通道的A/D轉(zhuǎn)換器的轉(zhuǎn)換結(jié)果,定時/計數(shù)器的計數(shù)結(jié)果等,都是定點整數(shù).而系統(tǒng)的后向通道能接受的輸入量也都為整數(shù),即由量化產(chǎn)生的有限字長誤差不可避免,精確到小數(shù)位的控制量因執(zhí)行機(jī)構(gòu)無法接受而不得不舍去.因而,雖然采用定點數(shù)表示小數(shù)的方法精度低,但在大多數(shù)情況下,仍能滿足實時控制系統(tǒng)的控制精度要求.
          MCS-51單片機(jī)的內(nèi)部程序存儲器僅有4K,運(yùn)算速度較慢.對于實時性、代碼長度限制要求較高的控制系統(tǒng),采用MCS-51單片機(jī)控制時,不宜大量采用浮點運(yùn)算.本文介紹Keil C51下的16位定點小數(shù)的乘法程序.

      2 定點小數(shù)運(yùn)算算法
      1.1 控制算法的特點.
          計算機(jī)實時控制系統(tǒng)中,控制算法通常可用下面的差分方程表示.
       
          式中y[n]為第n個采樣周期的輸出,通常為二進(jìn)制整數(shù);x [n]為第n個采樣周期的輸入,通常也為二進(jìn)制整數(shù);ai、bi為實系數(shù).在保證計算精度的條件下,計算上述差分方程時,將系數(shù)ai、bi轉(zhuǎn)換成整數(shù)或定點小數(shù),會大幅度提高運(yùn)算速度和大幅度減少代碼長度.這對于在程序存儲器容量或運(yùn)算速度有限的嵌入式控制器中實現(xiàn)快速控制算法計算有重要意義.

      1.2 定點小數(shù)
          小數(shù)可分為整數(shù)部分為0的純小數(shù)和帶整數(shù)的小數(shù).純小數(shù)可直接用定點小數(shù)表示,當(dāng)使用16位定點小數(shù)時,分辯率可達(dá)2-16,可以獲的足夠的運(yùn)算精度.

      1.3 定點算法
          設(shè)x為十進(jìn)制純小數(shù),M為16位二進(jìn)制整數(shù).若程序需計算y=(x·M)取整,則可先將x轉(zhuǎn)換成16位二進(jìn)制定點小數(shù).
      X =(x·65536)取整          (2)
          由于X的小數(shù)點在X的最高位前,2個16位二進(jìn)制數(shù)相乘結(jié)果為32位二進(jìn)制數(shù),小數(shù)點在高16位和低16位間,乘法運(yùn)算后的高16位為計算結(jié)果的整數(shù)部分,低16位為計算結(jié)果的小數(shù)部分.即
      (x·M)取整=(X·M)取高16位                    (3)
          這樣處理后可以大幅度提高運(yùn)算速度,且大幅度減少代碼長度.
          匯編語言程序設(shè)計中的取整操作容易實現(xiàn),在C語言中實現(xiàn)取整操作可以使用聯(lián)合體,方法如下.
      先定義2個聯(lián)合體.
      union{
      unsigned char a_byte[4];
      long a_long;
      }r;
      union{
      unigned char b_byte[2];
      int b_int;
      }p;
           第一個是長整數(shù)變量與4字節(jié)變量的聯(lián)合體,長整型變量用于保存計算結(jié)果,第二個是整型變量與2個字節(jié)型變量的聯(lián)合體,用于取整運(yùn)算.在Keil C51中,長整數(shù)占4個字節(jié),在RAM中按從高到低的順序存放,r.a_byte[0]、r.a_byte[1]存放計算結(jié)果的整數(shù)部分,r.a_byte[2]、r.a_byte[3]存放計算結(jié)果的小數(shù)部分.
          通過下列程序,實現(xiàn)取整運(yùn)算.
      p.b_byte[0]=r.a_byte[0];
      p.b_byte[1]=r.a_byte[1];
          這樣p.b_int為計算結(jié)果的整數(shù)部分.以上程序在編譯后僅為2條數(shù)據(jù)傳送指令,需要4個機(jī)器周期的執(zhí)行時間.與采用除法運(yùn)算或移位運(yùn)算實現(xiàn)取整運(yùn)算相比,具有更快的執(zhí)行速度.

      3 程序
          設(shè)程序需要計算0.12345乘16位二進(jìn)制數(shù)后取整,采用浮點數(shù)時的程序如下所示.
      main()
      {
      int b;
      b=20000;
      a=0.12345*b;
      }
      本程序的運(yùn)行結(jié)果a=2527,程序編譯后長度513字節(jié),做浮點運(yùn)算時需要602個機(jī)器周期.
      main()
      {
      int a,b;
      union{
      char c[4];
      long d;
      }u1;
      union{
      char e[2];
      int f;
      }u2;
      b=20000;
      u1.d=(long)8090*b;
      u2.e[0]=u1.c[0];
      u2.e[1]=u1.c[2];
      }
      本程序的運(yùn)行結(jié)果u2.f=2527,程序編譯后長度129字節(jié),做整數(shù)運(yùn)算時僅需134個機(jī)器周期.

      4 結(jié)束語
          采用本文中所述方法,使用c語言設(shè)計MCS-51單片機(jī)控制算法程序,可獲得與采用匯編語言設(shè)計的控制算法程序同樣的效果.充分發(fā)揮了
      c語言設(shè)計程序的優(yōu)點,筆者在設(shè)計的某控制系統(tǒng)時,采用這種方法在獲得了很好的效果.

      Tags:Keil c,小數(shù)運(yùn)算算法  
      責(zé)任編輯:admin
      請文明參與討論,禁止漫罵攻擊,不要惡意評論、違禁詞語。 昵稱:
      1分 2分 3分 4分 5分

      還可以輸入 200 個字
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 丁香婷婷激情综合俺也去| 久久91精品综合国产首页| 一本久道久久综合狠狠爱| 久久综合丁香激情久久| 婷婷国产天堂久久综合五月| 久久综合九色综合久99| 91精品国产综合久久久久久| 亚洲狠狠综合久久| 亚洲国产aⅴ综合网| 久久青青草原综合伊人| 国产综合激情在线亚洲第一页 | 亚洲综合无码一区二区痴汉| 国产成人亚洲综合一区| 伊人色综合久久大香| 伊人色综合久久天天| 亚洲五月综合缴情在线观看| 婷婷六月久久综合丁香76| 玖玖爱zh综合伊人久久| 色欲天天天综合网| 精品综合久久久久久97超人| 国产精品国产色综合色| 色婷婷久久综合中文久久蜜桃| 99久久综合久中文字幕| 久久亚洲伊人中字综合精品| 国产综合精品女在线观看| 一本久道久久综合狠狠躁AV| 色欲老女人人妻综合网| 亚洲日本国产综合高清| 日韩综合在线观看| 丁香婷婷亚洲六月综合色| 98精品国产综合久久| 伊人久久大香线蕉综合热线| 亚洲国产精品成人综合久久久 | 98精品国产综合久久| 亚洲国产日韩综合久久精品 | 少妇人妻综合久久中文字幕| 亚洲av综合日韩| 热久久综合这里只有精品电影| 国产性天天综合网| 激情综合色五月六月婷婷| 99久久国产综合精品麻豆|