51單片機定時(shí)器總結
C/T這一位用來(lái)控制定時(shí)器工作方式。本來(lái)T上面有一橫表示低電平有效。c為計數,也即是及外部脈沖的個(gè)數,也會(huì )是定時(shí)器溢出及中斷。GATE這一位用來(lái)設定外部中斷脈沖是否可啟動(dòng)定時(shí)器。 意思就是當GATE=1時(shí),定時(shí)器的啟動(dòng)有二個(gè)位控制,即TR0和int0(這是對定時(shí)器0來(lái)說(shuō)的,T1的話(huà)上二位就是1)。定時(shí)器只有在上二位都是一的情況下才會(huì )啟動(dòng)。我們就可以利用這個(gè)功能來(lái)測量脈沖的寬度。
我們知道在其他單片機中我們測脈沖寬度可以利用外部中斷在上升沿河下降沿各讀取一次定時(shí)器值來(lái)測定。但51單片機沒(méi)有上升沿中斷,也就沒(méi)有辦法測出高電平寬度?,F在我們可以這樣做,令TR0=1,GATE=1,這時(shí)定時(shí)器的啟動(dòng)只有INT0控制。當INT0為高電平時(shí)定時(shí)器啟動(dòng),為低電平時(shí)定時(shí)器關(guān)閉。我們設置下降沿中斷,在中斷中就可以讀取高電平所占的時(shí)間了。但是這樣做只能得到高電平時(shí)間按。要想得到脈沖周期,可以再開(kāi)一個(gè)定時(shí)器,另外一個(gè)就正常工作,這樣就可以得到脈沖周期。也就可以求出脈沖寬度了。
T0的工作方式3相信很少人記得,我還沒(méi)有用過(guò),但是我感覺(jué)做起碼在我們需要用到的時(shí)候,還知道有這個(gè)功能。方式3可以把T0當作二個(gè)獨立的計數器使用。在高級應用中肯定會(huì )有用吧。
定時(shí)器會(huì )存在誤差,原因是在執行定時(shí)器中斷的時(shí)候,會(huì )占用3到8個(gè)機器周期不等。這段時(shí)間我們并沒(méi)有算到計數器初值里面。要想消除誤差:1.可以把定時(shí)器低八位設為0,中斷中只要給TH0賦值,因為此時(shí)定時(shí)器已經(jīng)開(kāi)始啟動(dòng)了,低八位其實(shí)已經(jīng)不是0了。2.將低四位設為0.賦初值時(shí),利用ORL TL1,# ;加上你設定的初值。還有其他方法。
還有一點(diǎn)T0和T1的工作方式2看似工作方式是一樣的,其實(shí)T1在方式2的時(shí)候不能中斷,而T0是可以中斷的。
評論