技術頻道

娓娓工業(yè)
您現在的位置: 中國傳動網 > 技術頻道 > 應用方案 > 定時器和實時時鐘應用

定時器和實時時鐘應用

時間:2007-12-20 10:20:00來源:ronggang

導語:?對ETR186T和ETR232i,由于不確定最終系統(tǒng)是否有RTC,所以BIOS沒有做RTC的同步操作。用戶應用程序可以很方便的實現同步的操作
在嵌入式系統(tǒng)中經常會用到定時器和實時時鐘的功能,這里首先介紹定時器和實時時鐘的概念。 (1) 定時器是指82C54這樣的可編程Timer,通常具有固定頻率的輸入脈沖,Timer對該脈沖記數,當記數到所設置的值后,定時器可觸發(fā)CPU生產中斷,因而定時器一般用于產生1ms-50ms的事件,來驅動相應的應用程序執(zhí)行某個動作。 (2) 實時時鐘,也簡稱為RTC,是一個獨立的電路單元,可提供精確的日期和時間參數,通常包括“年-月-日”,“時:分:秒”。RTC一般帶有后備電池,通過擴展總線或SPI接口與系統(tǒng)相連。 與標準的PC一樣,英創(chuàng)嵌入式網絡模塊帶有一個每秒中斷18.2次的系統(tǒng)定時器Timer0,每次中斷間隔時間約為55ms,操作系統(tǒng)中和時間相關的功能都將和系統(tǒng)定時器有關。此外模塊中還為用戶保留了一個16-bit可編程定時器Timer1,其輸入頻率通常為1MHz,特別適合用做ms級的定時器。目前英創(chuàng)模塊中一部分型號還同時支持RTC,如NetBox-II、ETR100E等,圖1指出ETR100E上的RTC。
圖1 ETR100E上的RTC
對還沒有在模塊上支持RTC的型號,ETR186和ETR232i,都在其評估地板上擴展有RTC單元,如圖2所示。用戶可參考評估板電路圖,為自己的應用底板擴展RTC單元。
圖2 ETR232i評估地板上擴展的RTC
由于操作系統(tǒng)提供的日期和時間都是根據系統(tǒng)定時器生成的,所以為了讓系統(tǒng)的時間與當前真實時間一致,就需要用RTC的時間去同步系統(tǒng)的時間。對在模塊上已帶了RTC單元的型號,如NetBox-II、ETR100E等,BIOS在上電初始化期間已進行了RTC對系統(tǒng)時鐘的同步操作。目前對ETR186T和ETR232i,由于不確定最終系統(tǒng)是否有RTC,所以BIOS沒有做RTC的同步操作。用戶應用程序可以很方便的實現同步的操作: #include #include “ds1302.h” …… struct time t; struct date d; …… RTC.getdate( &d ); // 取RTC的日期參數 RTC.gettime( &t ); // 取RTC的時間參數 t.ti_hund = 0; // 設置百分秒為0 setdate( &d ); // 設置系統(tǒng)的日期 settime( &t ); // 設置系統(tǒng)的時間 注意,進行RTC對系統(tǒng)時鐘的同步操作之前,RTC本身應當被正確的初始化,并設置有效的當前時間。 以下對定時器和實時時鐘的常用方式作簡單介紹。 (1) 構造1ms – 50ms的定時任務發(fā)生器 通過啟動定時器Timer1,并安裝中斷程序響應Timer1記數結束事件。Timer1的輸入頻率為1MHz,即時間分辨率為1us,若設置Timer1的分頻值為1000,則定時中斷間隔1ms,若設置為10000,則定時中斷間隔為10ms。作為定時任務發(fā)生器,中斷服務程序只需設置一個全局變量標志,而上層的應用程序則檢查該全局變量標志,當標志被設置時就執(zhí)行相應的定時任務并清除該標志。 不建議設置小于1ms的定時間隔,因為這樣會占用過多CPU開銷。 有關Timer1定時中斷程序的安裝及應用,請在BC的IDE環(huán)境中打開光盤中software\drivers目錄下的tmrdemo.prj,參閱相關的代碼。 (2) 構造幾百毫秒至一兩秒的定時任務發(fā)生器 對構造這個時間量級的定時任務發(fā)生器,最好是加載軟中斷int 0x1C,每次系統(tǒng)定時中斷將自動調用軟中斷int 0x1C,所以int 0x1C的定時間隔就是55ms(精確值為54.925ms)。在中斷程序中可通過對一全局變量計數,來表示時間間隔,而上層應用程序則判斷該全局變量計數值來決定是否執(zhí)行定時任務,如設置計數閾值為18,表示1s時間間隔,注意當開始執(zhí)行定時任務時,需把全局變量計數值清零。 BC集成開發(fā)環(huán)境的在線幫助中有關于如何加載int 0x1C的代碼例程,可搜索關鍵詞getvect或setvect,以打開相關的在線幫助窗口。 (3) 整點時間操作 這里所謂的整點時間操作是指每10秒、每5分鐘、每小時等等這樣的定時任務,可以通過簡單的獲取系統(tǒng)時間參數來判斷是否執(zhí)行定時任務。如每10秒進行定時操作: struct time t; unsigned char lastsecond; // 初始化相關變量 gettime( &t ); lastsecond = t.ti_sec; …… //定時任務判斷 gettime( &t ); if( (t.ti_sec != lastsecond) && ( (t.ti_sec%10) == 0) ) { lastsecond = t.ti_sec; //執(zhí)行定時任務 …… } 注意由于定時操作的判斷是使用了DOS的系統(tǒng)調用,因此不能把上述代碼放在硬件中斷服務程序中,以避免中斷重入而引起系統(tǒng)crush。

標簽:

點贊

分享到:

上一篇:EC20系列PLC在老化房控制系統(tǒng)...

下一篇:微能WIN-V63矢量控制變頻器在...

中國傳動網版權與免責聲明:凡本網注明[來源:中國傳動網]的所有文字、圖片、音視和視頻文件,版權均為中國傳動網(www.wangxinlc.cn)獨家所有。如需轉載請與0755-82949061聯系。任何媒體、網站或個人轉載使用時須注明來源“中國傳動網”,違反者本網將追究其法律責任。

本網轉載并注明其他來源的稿件,均來自互聯網或業(yè)內投稿人士,版權屬于原版權人。轉載請保留稿件來源及作者,禁止擅自篡改,違者自負版權法律責任。

網站簡介|會員服務|聯系方式|幫助信息|版權信息|網站地圖|友情鏈接|法律支持|意見反饋|sitemap

傳動網-工業(yè)自動化與智能制造的全媒體“互聯網+”創(chuàng)新服務平臺

網站客服服務咨詢采購咨詢媒體合作

Chuandong.com Copyright ?2005 - 2025 ,All Rights Reserved 深圳市奧美大唐廣告有限公司 版權所有
粵ICP備 14004826號 | 營業(yè)執(zhí)照證書 | 不良信息舉報中心 | 粵公網安備 44030402000946號