關(guān)于51單片機(jī)的定時(shí)器的介紹
定時(shí)器在單片機(jī)內(nèi)部就像一個(gè)小鬧鐘一樣,根據(jù)時(shí)鐘的輸出信號,每隔“一秒”,計(jì)數(shù)單元的數(shù)值就增加一,當(dāng)計(jì)數(shù)單元數(shù)值增加到“設(shè)定的鬧鐘提醒時(shí)間”時(shí),計(jì)數(shù)單元就會向中斷系統(tǒng)發(fā)出中斷申請,產(chǎn)生“響鈴提醒”,使程序跳轉(zhuǎn)到中斷服務(wù)函數(shù)中執(zhí)行。
了解定時(shí)器就一定要先了解中斷,中斷,即在 cpu 的一步步按照指令運(yùn)行(A)的過程中,可能會有其它的更緊急的事情(B)需要做的事情, 需要 cpu 暫時(shí)停止當(dāng)前的程序,做完了事情B之后,又可以繼續(xù)去運(yùn)行先前的程序(A)。
舉一個(gè)很簡單的例子,比如我們今天9點(diǎn)要去參加一個(gè)會議,我們定了一個(gè)鬧鐘,九點(diǎn)前的這段時(shí)間我們會做我們該做的想做的任何事情,但到了9點(diǎn),鬧鐘響起我們就要先去參加會議,等到開完會以后在做我們想做的事情,以此循環(huán)類推。
另一個(gè)概念叫溢出,我們知道秒表計(jì)時(shí)到59秒的時(shí)候,再過1秒就變成了00。同理,當(dāng)我們的unsigned char類型的變量的數(shù)值為255時(shí),再加1就變?yōu)?了, unsigned int的變量如果此時(shí)的值為65535,后面再加1也同樣成為0,這些都叫溢出。
在控制系統(tǒng)中,常常要求有一些實(shí)時(shí)時(shí)鐘以實(shí)現(xiàn)定時(shí)或者延時(shí)控制,如定時(shí)中斷、定時(shí)檢測、定時(shí)掃描等等,也往往要求有計(jì)數(shù)器,對外部事件進(jìn)行計(jì)數(shù)。
要實(shí)現(xiàn)定時(shí)或者延時(shí)功能,一般有三種方法:軟件固定時(shí),不可編程硬件固定時(shí)和可編程硬件固定時(shí)。
1.軟件固定時(shí)——讓軟件循環(huán)執(zhí)行一段程序,程序本身并無執(zhí)行目的,而是通過執(zhí)行程序延時(shí)固定的時(shí)間,也就是以前的程序中經(jīng)常使用的延時(shí)程序。這種方法降低了cpu的利用率。
2.不可編程硬件固定時(shí)——如外部芯片555 時(shí)基電路,通過外部阻容,達(dá)到一定的延時(shí)功能,改變阻容大小可以改變延時(shí)長度。這種定時(shí)器取決于硬件,設(shè)定好以后不能通過軟件更改。
3.可編程固定時(shí)器——這種定時(shí)器的定時(shí)值可以通過軟件確定和修改,使用靈活便捷。
定時(shí)器和計(jì)數(shù)器
時(shí)鐘周期:時(shí)鐘周期 T 是時(shí)序中最小的時(shí)間單位,具體計(jì)算的方法就是 1/時(shí)鐘源頻率,我們 KST-51 單片機(jī)開發(fā)板上用的晶振是 11.0592M,那么對于我們這個(gè)單片機(jī)系統(tǒng)來說,時(shí)鐘周期=1/11059200 秒。
機(jī)器周期:單片機(jī)完成一個(gè)操作的最短時(shí)間。
定時(shí)器:定時(shí)器就是用來進(jìn)行定時(shí)的。定時(shí)器內(nèi)部有一個(gè)寄存器,我們讓它開始計(jì)數(shù)后,這個(gè)寄存器的值每經(jīng)過一個(gè)機(jī)器周期就會自動加 1,因此,我們可以把機(jī)器周期理解為定時(shí)器的計(jì)數(shù)周期。秒表,每經(jīng)過一秒,數(shù)字加1,而這個(gè)定時(shí)器就是每過一個(gè)機(jī)器周期的時(shí)間,也就是12/11059200秒,數(shù)字加1。還有一個(gè)特別注意的地方,就是秒表是加到60后,秒就自動變成0了,這種情況在單片機(jī)和計(jì)算機(jī)里我們稱之為溢出。那定時(shí)器加到多少才會溢出呢?定時(shí)器有幾種模式,假如是16位的定時(shí)器,也就是2個(gè)字節(jié),最大值就是65535,那么加到65535后,再加1就算溢出,如果有其他位數(shù)的話,道理是一樣的,對于51單片機(jī)來說,溢出后,這個(gè)值會直接變成0。從某一個(gè)初值,經(jīng)過計(jì)算確定的時(shí)間后溢出,這個(gè)過程就是其定時(shí)的含義。