單片機(jī)中定時(shí)器與計(jì)數(shù)器的區(qū)別
掃描二維碼
隨時(shí)隨地手機(jī)看文章
定時(shí)器實(shí)際上也是計(jì)數(shù)器,只是計(jì)數(shù)的是固定周期的脈沖
定時(shí)/計(jì)數(shù)器很容易理解的啊
定時(shí)器實(shí)際上也是工作在計(jì)數(shù)方式下,只是計(jì)數(shù)的是固定周期的脈沖,由于脈沖周期固定,由計(jì)數(shù)值可以計(jì)算時(shí)間,有定時(shí)功能
定時(shí)和計(jì)數(shù)只是觸發(fā)來源不同(時(shí)鐘信號(hào)和外部脈沖)其他方面是一樣的。
單片機(jī)里的寄存器可以看成一個(gè)個(gè)電子開關(guān),用來切換不同的功能、信號(hào)。
51里通過TMOD里的T/C 位切換計(jì)數(shù)信號(hào)的來源
當(dāng)T/C工作在定時(shí)器時(shí),對(duì)振蕩源12分頻的脈沖計(jì)數(shù),即每個(gè)機(jī)器周期計(jì)數(shù)值加1,計(jì)數(shù)頻率為1/12fosc,當(dāng)晶振頻率6MHZ時(shí),計(jì)數(shù)頻率為500KHz,每2us計(jì)數(shù)值加1;晶振12MHZ就是每1us加1 了。
當(dāng)T/C工作在計(jì)數(shù)器是,計(jì)數(shù)脈沖來自外部脈沖輸入管腳T0(P3.4)或T1(P3.5),當(dāng)T0或T1腳上負(fù)跳變時(shí)計(jì)數(shù)值加1 ,識(shí)別管腳負(fù)跳變需要2個(gè)機(jī)器周期,即24個(gè)振蕩周期。所以T0或T1腳輸入的可計(jì)數(shù)的外部脈沖的最高頻率為1/24fosc,當(dāng)晶振12MHZ時(shí),最高計(jì)數(shù)頻率為500KHz,高于此頻率將計(jì)數(shù)出錯(cuò)。
至于賦初值就是杯子原理了,由于51只能加計(jì)數(shù),且只能在杯子剛剛滿的那一刻發(fā)出中斷,觸發(fā)中斷程序,所以我們就往杯子里先放好一定的豆子,再來相應(yīng)數(shù)量的豆子就滿了,然后中斷程序就自動(dòng)工作了。
注意:
定時(shí)和計(jì)數(shù)只是觸發(fā)來源不同(時(shí)鐘信號(hào)和外部脈沖)其他方面是一樣的。
假設(shè)我們要定時(shí)一定時(shí)間(100個(gè)機(jī)器周期),我們就置初值為(溢出值-100)就行了,假設(shè)我們要計(jì)件100個(gè),實(shí)際上也是置初值為(溢出值-100),然后將輸入脈沖設(shè)為外部輸入就可以了
說:定時(shí)和計(jì)數(shù)只是觸發(fā)來源不同(時(shí)鐘信號(hào)和外部脈沖)其他方面是一樣的。
在中斷里置初值是為下一個(gè)循環(huán)作準(zhǔn)備,沒什么好說的,看需要定了。
由于定時(shí)計(jì)數(shù)器的值也可以隨時(shí)讀出來,所以我們也可以從0開始計(jì)數(shù),從而計(jì)算一段時(shí)間或一定脈沖的數(shù)量哦,這是照樣可以打開中斷,中斷時(shí)就說明已經(jīng)又計(jì)數(shù)了(定時(shí)器溢出值)個(gè)脈沖哦,在中斷里進(jìn)行溢出處理,就可以計(jì)算出遠(yuǎn)遠(yuǎn)大于(定時(shí)器溢出值)的數(shù)字了
此時(shí)也要注意一點(diǎn):51讀數(shù)時(shí)除了T/C2的捕捉功能,直接讀TH和TL可是不斷變化的哦,具體的還是看書。當(dāng)你理解了定時(shí)計(jì)數(shù)器后,我們甚至還可以將計(jì)數(shù)值置為(溢出值-1),從而實(shí)現(xiàn)自動(dòng)單步(定時(shí)模式)或作為外部中斷(計(jì)數(shù)模式)用哦,仔細(xì)想想吧,呵呵;-)
至于中斷中的需要保護(hù)現(xiàn)場(chǎng)的原因,是為了防止不小心修改了別的程序的參數(shù),從而影響別的程序的運(yùn)行,所以要且只要保護(hù)中斷程序自己動(dòng)過的數(shù)據(jù),將動(dòng)過的那些存儲(chǔ)器在退出中斷時(shí)恢復(fù)到進(jìn)入時(shí)的狀態(tài),就不會(huì)影響被中斷的程序了。
匯編需要自己保存現(xiàn)場(chǎng),反正程序就是自己編的嘛,一切盡在掌握中;
C的話編譯器會(huì)自動(dòng)進(jìn)行覆蓋分析,自動(dòng)保存需要保存的變量,一般應(yīng)用時(shí)盡可放心,當(dāng)然,如果你很了解編譯器做了什么,也可以嵌入?yún)R編天馬行空自由發(fā)揮啊,但新手可不建議這樣哦,還是交給編譯器吧。
其實(shí)這些可以說都是基礎(chǔ)知識(shí)啊,如果不明白肯定是你的書看的不夠仔細(xì)哦