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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于MCS-51單片機的測控系統(tǒng)的軟時鐘設計的優(yōu)化

          基于MCS-51單片機的測控系統(tǒng)的軟時鐘設計的優(yōu)化

          作者: 時間:2013-02-17 來源:網絡 收藏

            隨著微電腦的廣泛應用,以單片機為核心的微機已隨處可見。為滿足用戶要求,這些系統(tǒng)通常都具有數碼顯示時鐘的功能。由于內部包含2個定時計數器,將其中一個定時計數器用于設計的方法,可以大大節(jié)省硬件開銷。本文提出了如何提高的定時精度,以及在存在的情況下,如何提高以單片機為核心的的設計質量的方法。

            一、 MCS-51單片機內部定時計數器的概述

            MCS-51單片機內部包含2個定時計數器T0和T1,它們都是16位的加法計數器,既可用于定時,也可用于計數,在用于定時的情況下,計數脈沖由內部提供,因此計數速率固定為CPU振蕩頻率的1/12;在用于計數的情況下,計數脈沖來自外部,外部計數脈沖通過MCS-51的引腳T0(第14腳)或T1(第15腳)輸入,在發(fā)生從1到0的跳變時計數加1。每個定時計數器又有4種工作方式可供選擇:方式O構成13位定時計數器,高3位未用;方式1構成16位定時計數器;方式2構成8位定時計數器,低位字節(jié)用于計數,高位字節(jié)存放初值;方式3只適合于T0,構成兩個獨立的8位定時計數器。在方式O、方式1及方式3時,初值不能自動裝入,當定時時間已到或計數次數已滿時,若要進行下一次定時計數,必須利用軟件裝入初值,否則,系統(tǒng)會按上限自動定時或計數,即以O初值進行定時或計數;而在方式2時,初值可自動裝入,只需向高位字節(jié)寫入一次初值,則當低位字節(jié)定時時間到(或計數滿)時,高位字節(jié)的初值會自動裝入低位字節(jié),且高位字節(jié)的值保持不變。當系統(tǒng)需用MCS-51單片機的串行接口進行串行通信時,定時計數器T1被固定為波特率發(fā)生器,因此,在軟時鐘設計中,總是選擇T0作為定時器。

            二、軟時鐘程序設計方法1—0.1 s計數法

            0.1 s計數法的基本原理如下:

          通過設置定時計數器0每經過0.1 s請求一次中斷,中斷處理程序會令軟時鐘的基準0.1 s單元增加1,而該單元每增加10次,再令軟時鐘的秒單元增加1,以此類推,按照時間進位令分、時、日、月直至年單元增加1。設CPU所接晶體振蕩器的振蕩頻率為6 MHz,則1個機器周期為2μs,當T0作為定時器工作時,定時器溢出,即中斷周期:T=2×TC×10-6 s,式中TC為時間常數。令中斷周期T=O.1 s,可得:TC=0.1/(2×10-6)=50 000=0C350H,此時間常數決定了T0必須為16位定時器,故設置為工作方式1。由于是加法計數器,初值IC應為時間常數TC的補碼,所以IC=216-TC=10000H-0C350H=3CBOH,修正以后,取IC=3CB4H,有關程序段具體設計如下。

            初始化程序:


            由上述程序可知,作為16位定時器使用時,T0不能自動裝入初值,每次進入中斷服務程序后,首先必須用程序裝入初值,下一次定時實際上是從裝入初值低位字節(jié)后開始的,所以在設定T0中斷為高優(yōu)先級以及CPU對T0中斷請求的響應無等待延時的理想情況下,1個中斷周期所包含的實際時間t=初值到計數滿所需時間+入口引導時間+裝入初值低位字節(jié)時間。


          上一頁 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); })();