標(biāo)題: 奶爸業(yè)余單片機(jī)學(xué)習(xí)之:定時(shí)器以工作方式1運(yùn)行時(shí)的初值的計(jì)算方法(51單片機(jī)) [打印本頁(yè)]

作者: czf_gd    時(shí)間: 2014-8-28 16:04
標(biāo)題: 奶爸業(yè)余單片機(jī)學(xué)習(xí)之:定時(shí)器以工作方式1運(yùn)行時(shí)的初值的計(jì)算方法(51單片機(jī))
http://www.cnblogs.com/czf-gd/p/3941577.html
//==========51單片機(jī)========
/*定時(shí)器以工作方式1運(yùn)行
TMOD = 0x01;//定時(shí)器0
TMOD = 0x10;//定時(shí)器1
TMOD =0x11;//定時(shí)器0/1同時(shí)工作
*/
定時(shí)器工作時(shí),如何確定定時(shí)時(shí)間?
假設(shè)有一個(gè)5L的水桶,現(xiàn)在要往水桶里面裝水3L,怎么才知道裝夠3L了呢?答案就是先往水桶里面裝水2L,然后繼續(xù)裝,水滿(mǎn)溢出時(shí),就表示3L水裝夠了。
(以定時(shí)器0為例)溢出:?jiǎn)纹瑱C(jī)也一樣,當(dāng)單片機(jī)內(nèi)定時(shí)器以工作方式1運(yùn)行時(shí),定時(shí)器存儲(chǔ)寄存器每經(jīng)過(guò)一個(gè)機(jī)器周期就加1,計(jì)數(shù)長(zhǎng)度為65535(十六進(jìn)制為:FFFFFF),所以65536+1時(shí)就會(huì)溢出,溢出后寄存器值從0開(kāi)始計(jì)數(shù),則:定時(shí)周期 = 65536 - 初值,初值為0時(shí),定時(shí)周期 = 65535個(gè)機(jī)器周期
所以,當(dāng)需要定時(shí)時(shí),先往寄存器里裝入初值,讓寄存器從初值開(kāi)始計(jì)數(shù),到65536時(shí),寄存器溢出為0,溢出后TF0 == 1,表示定時(shí)值已到,若需要用到循環(huán)定時(shí),則溢出后,首先必讓溢出標(biāo)志(TF0)歸零(歸零方法:一、程序清零,則TF0 = 0;二、進(jìn)入定時(shí)器中斷以實(shí)現(xiàn)硬件自動(dòng)清零。)。
其次,須往寄存器重新裝入初值再開(kāi)始計(jì)算。

時(shí)鐘周期 = 1/時(shí)鐘頻率;
機(jī)器周期(定時(shí)器存儲(chǔ)寄存器加1時(shí)間)= 12×?xí)r鐘周期,
以11.0592MHz頻率晶振為例,機(jī)器周期(秒) = 12×(1/11059200)
初值為0時(shí),最大定時(shí)時(shí)間為 65535×12×(1/11059200)=71ms(約),所以程序需要定時(shí)時(shí),通常要根據(jù)定時(shí)時(shí)間來(lái)確定一個(gè)合適的初值。
假設(shè)需定時(shí)一個(gè)30毫秒時(shí)間,則0.03 = A×機(jī)器周期,可以算出A = 0.03/機(jī)器周期 = (0.03×11059200)/12,則經(jīng)歷A個(gè)機(jī)器周期時(shí),就為30毫秒定時(shí)時(shí)間
可以算出 A = 27648
所以,初值 = 65536 - 27648 = 37888,37888轉(zhuǎn)換成十六進(jìn)制為9400,所以高八位TH0 = 0x94,低八位TL0 = 0x00;
公式總結(jié):
初值 = 65536 - 定時(shí)時(shí)間(秒)/機(jī)器周期
時(shí)鐘周期 = 1/時(shí)鐘頻率;
機(jī)器周期(定時(shí)器存儲(chǔ)寄存器加1時(shí)間)= 12×?xí)r鐘周期,






歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1