<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > MCS-5l單片機內部定時(shí)計數器作為軟時(shí)鐘的設計方案

MCS-5l單片機內部定時(shí)計數器作為軟時(shí)鐘的設計方案

作者: 時(shí)間:2011-08-29 來(lái)源:網(wǎng)絡(luò ) 收藏

  0 引言

  隨著(zhù)微電腦應用的普及,以MCS-51單片機為核心的微機測控系統已隨處可見(jiàn)。為滿(mǎn)足用戶(hù)要求,這些系統通常都具有數碼顯示時(shí)鐘的功能。由于MCS-51內部包含2個(gè)定時(shí)計數器,通過(guò)采用將其中一個(gè)定時(shí)計數器用于設計的方法,可以大大節省硬件開(kāi)銷(xiāo)。本文提出了如何提高的定時(shí)精度,以及在存在的情況下,如何提高以MCS-51單片機為核心的測控系統的設計質(zhì)量的方法。

  1 MCS-51單片機概述

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

  2 軟時(shí)鐘程序設計方法1——0.1 s計數法

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

  初始化程序:

  


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

  由于入口引導與裝入初值低位字節共占4個(gè)機器周期,所以為了使中斷周期等于O.1s基準時(shí)間,上文對按理論推算出來(lái)的初值進(jìn)行了加4修正。盡管如此,按照方法1設計的時(shí)鐘程序與測控系統的其他程序有機聯(lián)接在一起運行時(shí),要實(shí)現準確定時(shí)也是十分困難的,因為在實(shí)用工業(yè)測控系統中常常不止1個(gè)中斷源,而是含有多個(gè)中斷源,存在著(zhù)中斷優(yōu)先權的管理問(wèn)題。要使上述軟時(shí)鐘能夠準確定時(shí),T0中斷必須設置為高優(yōu)先級,這樣CPU對T0的定時(shí)中斷才有可能不受影響,確保每隔0.1 s執行一次定時(shí)中斷服務(wù)程序。如果T0定時(shí)中斷被設置為低優(yōu)先級,那么CPU對T0定時(shí)中斷的響應就要受到影響。當CPU正在執行某一高優(yōu)先級中斷源的中斷服務(wù)程序時(shí),T0計數滿(mǎn)會(huì )產(chǎn)生中斷請求,CPU必須等到當前正在執行的中斷服務(wù)程序執行完畢之后,才能響應T0中斷,這必將延長(cháng)中斷間隔,使初值不能如期裝入,破壞定時(shí)的準確性。由此可見(jiàn),采用方法1設計的時(shí)鐘程序限制了系統設置中斷優(yōu)先級的靈活性,降低了設計效率。例如,某些以數碼管作為顯示器的測控系統,為了節省硬件開(kāi)銷(xiāo),通常采用對數碼管進(jìn)行巡回掃描的方法進(jìn)行顯示輸出,為使顯示穩定,且無(wú)抖動(dòng)現象,必須將數碼管顯示中斷設置為高優(yōu)先級,以便保證掃描程序的執行周期固定不變,這便與時(shí)鐘定時(shí)中斷對優(yōu)先級的要求發(fā)生了矛盾。為克服方法1的缺陷,在實(shí)際工程中,通過(guò)采用如下所述的方法2來(lái)設計時(shí)鐘程序,可獲得較好的效果。

  3 軟時(shí)鐘程序設計方法2——中斷周期累加法

  方法2和方法1的程序結構是完全相同的,只是在對秒以下時(shí)間的處理上有所不同。將方法1的中斷服務(wù)程序中“O.1 s單元增加1”程序段改為:

  

  通過(guò)對照容易看出,雖然兩個(gè)“O.1 s單元增加1”程序段所用指令不同,但效果是完全一樣的,可以互相替代。改動(dòng)后的程序將對0.1 s中斷周期的計數,變成了對O.1 s中斷周期的累加,由此引申,對任何小于秒的中斷周期都可以進(jìn)行累加,當最高位有進(jìn)位時(shí)實(shí)施秒增1,同樣可以達到時(shí)鐘定時(shí)的目的。MCS-51單片機內部定時(shí)器選擇工作方式1時(shí)為16位計數器,在上述假定條件下,當初值為0時(shí),T0的定時(shí)中斷周期T=0.131 072 s,131072定義為中斷周期常數,在中斷服務(wù)程序中對其進(jìn)行累加。以下是采用方法2設計的時(shí)鐘程序。

  定義中斷周期常數:

  CONST: DB 00H,13H,10H,72H

  初始化程序:

  

  方法2采用對中斷周期進(jìn)行累加的方法,令定時(shí)器滿(mǎn)量程計數,初值為O,計數滿(mǎn)后,自動(dòng)重新從0開(kāi)始計數,不需用程序裝入初值,從根本上擺脫了裝入初值的困擾,當然也就避免了對初值進(jìn)行修正的繁瑣過(guò)程。由于不需要裝入初值,CPU可在中斷周期的任意時(shí)刻,響應定時(shí)器的中斷請求,只需保證下一次中斷請求到來(lái)之前將中斷服務(wù)程序執行完畢即可,從而使定時(shí)器大大降低了對中斷優(yōu)先級的要求。因此方法2將定時(shí)器中斷設置為低優(yōu)先級,而方法1則將其設置為高優(yōu)先級。顯然,采用方法2不僅便于程序設計,而且提高了程序設計的效率。

  方法2中,當定時(shí)器滿(mǎn)量程計數時(shí),中斷周期不再是標準的0.1 s,因此中斷周期在累加過(guò)程中向秒單元的進(jìn)位,大多數發(fā)生在非整秒時(shí)刻,而且進(jìn)位間隔也不盡相同,具體來(lái)講,假設秒以下時(shí)間單元從0開(kāi)始累加,那么向秒單元進(jìn)位第一次是在1.048 576 s時(shí)刻,第二次是在2.097 152 s時(shí)刻,第三次是在3.014 656 s時(shí)刻,…,第一次與第二次間隔為1.048 576 s,第二次與第三次間隔為0.917 504 s,……,進(jìn)位間隔有時(shí)候大于l s,有時(shí)候小于1 s,然而,對分、時(shí)、日、月這些長(cháng)期時(shí)間過(guò)程來(lái)說(shuō),積累誤差可以認為等于O,從這個(gè)意義上說(shuō),方法2大大提高了定時(shí)精度。

  4 結語(yǔ)

  提出了采用MCS-5l作為軟時(shí)鐘設計的方法,不僅節省了硬件開(kāi)銷(xiāo),而且提高軟時(shí)鐘的定時(shí)精度,具有廣泛的應用價(jià)值。在實(shí)際測試中,當晶體振蕩器的振蕩頻率不是標準6 MHz時(shí),通過(guò)調整中斷周期常數,以及必要時(shí)通過(guò)增加秒以下時(shí)間單元緩沖區的字節數,可使中斷周期常數準確到所需精度。

51單片機相關(guān)文章:51單片機教程


單片機相關(guān)文章:單片機教程


單片機相關(guān)文章:單片機視頻教程


單片機相關(guān)文章:單片機工作原理


負離子發(fā)生器相關(guān)文章:負離子發(fā)生器原理
塵埃粒子計數器相關(guān)文章:塵埃粒子計數器原理
熱電偶相關(guān)文章:熱電偶原理


評論


相關(guān)推薦

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

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>