|
新手解惑:關(guān)于AT89C52定時(shí)器T1/T2初值設(shè)置(THX、TLX)
大家好,我是一名新手,正在學(xué)習(xí)中......(剛剛學(xué)習(xí)一月左右),以后的時(shí)間里,我將不定期更新論壇,用新手解惑的方式給自己督促學(xué)習(xí),給和我一樣的新手學(xué)習(xí)51提供好的方法,同時(shí)也需要單片機(jī)高手的指點(diǎn)。
今天更新的是《新手解惑:關(guān)于AT89C52定時(shí)器T1/T2初值設(shè)置(THX、TLX)》,我在學(xué)習(xí)中發(fā)現(xiàn)了2個(gè)問題:1、如何計(jì)算處置。2、在定時(shí)器方式1中怎樣裝入計(jì)算好的初值(THX、TLX)。
首先定時(shí)器中斷初始化的流程:1、設(shè)置TMOD(定時(shí)器方式選擇M1M0、門控制及定時(shí)器模式)。
2、計(jì)算初值裝入初值(THX、TLX)(方式一)
3、開啟“IE”中斷寄存器,中斷允許(EA、ETX)
4、啟動(dòng)定時(shí)器允許位(TRX)
以上是所有教材標(biāo)準(zhǔn)的流程,如果我們只是了解其過程的話,我就不會(huì)糾結(jié)初值的問題,有很多的資料都有你想要的裝入初值的方法,包括你需要的要求(時(shí)間、方式);但是你不去了解“初值”對(duì)以后的學(xué)習(xí)會(huì)造成一定的阻礙,使得自己在學(xué)習(xí)單片機(jī)過程基礎(chǔ)知識(shí)不扎實(shí),好比“上數(shù)學(xué)課只是一低頭,后來的數(shù)學(xué)再也不會(huì)了”的這個(gè)梗。
我先簡單說一下定時(shí)器在方式一中的工作流程,初始化完畢后,開始計(jì)時(shí),TLx中開始計(jì)數(shù)(以每機(jī)器周期作用下),記滿后溢出至THx,THx溢出TFx標(biāo)志位置1(TFx無需操作硬件自動(dòng)),開啟中斷,中斷完畢,結(jié)束中斷,返回中斷點(diǎn),繼續(xù)主任務(wù)。
現(xiàn)在開始說一下THx和TLx裝入初值的問題了,首先需要了解機(jī)器周期、震蕩周期的換算,震蕩周期=1/晶振頻率;機(jī)器周期=震蕩周期*12=1/晶振頻率*12;以晶振為12Mhz為例,1個(gè)機(jī)器周期=1/12*12=1微秒,而THX和TLX充滿需要多少次呢?這樣計(jì)算:一共是16位,二進(jìn)制,換算后是一共2^16-1;這里就會(huì)有人問為什么要-1,我舉例說明,家里的時(shí)鐘走滿需要多少的數(shù),答案是11個(gè)(不計(jì)原點(diǎn)),所以寄存器充滿需要最高-1;這樣計(jì)算下計(jì)時(shí)器嘴最高能達(dá)到(2^16-1)*機(jī)器周期=65535*1微秒≈65.5ms, 如果需要50ms我們就需要50000個(gè)機(jī)器周期,20ms就需要20000個(gè)機(jī)器周期,初值就是余下的那部分?jǐn)?shù)值=總數(shù)值-需要的時(shí)間,
以12MHZ晶振為例,需要50ms,我們來計(jì)算下初值:初值=總值-需要的時(shí)間
初值=65535-50000=15535
如何裝入初值呢?以上為例,得出要裝入“15535”,把THX、TLX想成兩個(gè)桶,他們本身運(yùn)行方式就是TL升到TH,15536轉(zhuǎn)換2進(jìn)制0011110010110000、16進(jìn)制為3CB0,把高的8位放在THx里,低8位放在TLx里,就是THx=0x3c;TLx=0xb0;這樣你在往里“放水”到溢出就是你需要的時(shí)間了,也就是50ms了。
你也可以對(duì)“15536”進(jìn)行求摸求余運(yùn)算THx=15536/256;TLx=15536%256;原理是一樣的,只不過是一個(gè)是算好的,一個(gè)是需要軟件計(jì)算的。
以上就是我對(duì)定時(shí)器的理解,可能有些我理解的定時(shí)器還有些不全面,但是對(duì)于初學(xué)者這些就夠了,還有些說的不對(duì)的地方,請高手指教!
|
|