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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > -51單片機中軟時鐘設(shè)計的優(yōu)化方法

          -51單片機中軟時鐘設(shè)計的優(yōu)化方法

          作者: 時間:2011-11-19 來源:網(wǎng)絡(luò) 收藏

          3 軟時鐘程序設(shè)計方法2——中斷周期累加法
          方法2和方法1的程序結(jié)構(gòu)是完全相同的,只是在對秒以下時間的處理上有所不同。將方法1的中斷服務(wù)程序中“O.1 s單元增加1”程序段改為:
          -51單片機中軟時鐘設(shè)計的優(yōu)化方法
          通過對照容易看出,雖然兩個“O.1 s單元增加1”程序段所用指令不同,但效果是完全一樣的,可以互相替代。改動后的程序?qū)?.1 s中斷周期的計數(shù),變成了對O.1 s中斷周期的累加,由此引申,對任何小于秒的中斷周期都可以進(jìn)行累加,當(dāng)最高位有進(jìn)位時實施秒增1,同樣可以達(dá)到時鐘定時的目的。單片機內(nèi)部定時器選擇工作方式1時為16位計數(shù)器,在上述假定條件下,當(dāng)初值為0時,T0的定時中斷周期T=0.131 072 s,131072定義為中斷周期常數(shù),在中斷服務(wù)程序中對其進(jìn)行累加。以下是采用方法2設(shè)計的時鐘程序。
          定義中斷周期常數(shù):
          CONST: DB 00H,13H,10H,72H
          初始化程序:
          -51單片機中軟時鐘設(shè)計的優(yōu)化方法
          方法2采用對中斷周期進(jìn)行累加的方法,令定時器滿量程計數(shù),初值為O,計數(shù)滿后,自動重新從0開始計數(shù),不需用程序裝入初值,從根本上擺脫了裝入初值的困擾,當(dāng)然也就避免了對初值進(jìn)行修正的繁瑣過程。由于不需要裝入初值,CPU可在中斷周期的任意時刻,響應(yīng)定時器的中斷請求,只需保證下一次中斷請求到來之前將中斷服務(wù)程序執(zhí)行完畢即可,從而使定時器大大降低了對中斷優(yōu)先級的要求。因此方法2將定時器中斷設(shè)置為低優(yōu)先級,而方法1則將其設(shè)置為高優(yōu)先級。顯然,采用方法2不僅便于程序設(shè)計,而且提高了程序設(shè)計的效率。
          方法2中,當(dāng)定時器滿量程計數(shù)時,中斷周期不再是標(biāo)準(zhǔn)的0.1 s,因此中斷周期在累加過程中向秒單元的進(jìn)位,大多數(shù)發(fā)生在非整秒時刻,而且進(jìn)位間隔也不盡相同,具體來講,假設(shè)秒以下時間單元從0開始累加,那么向秒單元進(jìn)位第一次是在1.048 576 s時刻,第二次是在2.097 152 s時刻,第三次是在3.014 656 s時刻,…,第一次與第二次間隔為1.048 576 s,第二次與第三次間隔為0.917 504 s,……,進(jìn)位間隔有時候大于l s,有時候小于1 s,然而,對分、時、日、月這些長期時間過程來說,積累誤差可以認(rèn)為等于O,從這個意義上說,方法2大大提高了定時精度。

          4 結(jié)語
          提出了采用MCS-5l內(nèi)部定時計數(shù)器作為的方法,不僅節(jié)省了硬件開銷,而且提高軟時鐘的定時精度,具有廣泛的應(yīng)用價值。在實際測試中,當(dāng)晶體振蕩器的振蕩頻率不是標(biāo)準(zhǔn)6 MHz時,通過調(diào)整中斷周期常數(shù),以及必要時通過增加秒以下時間單元緩沖區(qū)的字節(jié)數(shù),可使中斷周期常數(shù)準(zhǔn)確到所需精度。


          上一頁 1 2 下一頁

          關(guān)鍵詞: MCS-51 軟時鐘設(shè)計

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁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); })();