單片機中定時器與計數器的區別


定時器實際上也是計數器,只是計數的是固定周期的脈沖
       定時/計數器很容易理解的啊
       定時器實際上也是工作在計數方式下,只是計數的是固定周期的脈沖,由於脈沖周期固定,由計數值可以計算時間,有定時功能
        定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
        單片機里的寄存器可以看成一個個電子開關,用來切換不同的功能、信號。

51里通過TMOD里的T/C 位切換計數信號的來源
        當T/C工作在定時器時,對振盪源12分頻的脈沖計數,即每個機器周期計數值加1,計數頻率為1/12fosc,當晶振頻率
6MHZ時,計數頻率為500KHz,每2us計數值加1;晶振12MHZ就是每1us加1 了。

        當T/C工作在計數器是,計數脈沖來自外部脈沖輸入管腳T0(P3.4)或T1(P3.5),當T0或T1腳上負跳變時計數值加1 ,識別管腳負跳變需要2個機器周期,即24個振盪周期。所以T0或T1腳輸入的可計數的外部脈沖的最高頻率為1/24fosc,當晶振
12MHZ時,最高計數頻率為500KHz,高於此頻率將計數出錯。


        至於賦初值就是杯子原理了,由於51只能加計數,且只能在杯子剛剛滿的那一刻發出中斷,觸發中斷程序,所以我們就往杯子里先放好一定的豆子,再來相應數量的豆子就滿了,然后中斷程序就自動工作了。

注意:

         定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
         假設我們要定時一定時間(100個機器周期),我們就置初值為(溢出值-100)就行了,假設我們要計件100個,實際上也是置初值為(溢出值-100),然后將輸入脈沖設為外部輸入就可以了
         所以說:定時和計數只是觸發來源不同(時鍾信號和外部脈沖)其他方面是一樣的。
         在中斷里置初值是為下一個循環作准備,沒什么好說的,看需要定了。
         由於定時計數器的值也可以隨時讀出來,所以我們也可以從0開始計數,從而計算一段時間或一定脈沖的數量哦,這是照樣可以打開中斷,中斷時就說明已經又計數了(定時器溢出值)個脈沖哦,在中斷里進行溢出處理,就可以計算出遠遠大於(定時器溢出值)的數字了
         此時也要注意一點:51讀數時除了T/C2的捕捉功能,直接讀TH和TL可是不斷變化的哦,具體的還是看書。
當你理解了定時計數器后,我們甚至還可以將計數值置為(溢出值-1),從而實現自動單步(定時模式)或作為外部中斷(計數模式)用哦,仔細想想吧,呵呵;-)
          至於中斷中的需要保護現場的原因,是為了防止不小心修改了別的程序的參數,從而影響別的程序的運行,所以要且只要保護中斷程序自己動過的數據,將動過的那些存儲器在退出中斷時恢復到進入時的狀態,就不會影響被中斷的程序了。
         匯編需要自己保存現場,反正程序就是自己編的嘛,一切盡在掌握中;
         C的話編譯器會自動進行覆蓋分析,自動保存需要保存的變量,一般應用時盡可放心,當然,如果你很了解編譯器做了什么,也可以嵌入匯編天馬行空自由發揮啊,但新手可不建議這樣哦,還是交給編譯器吧。

          其實這些可以說都是基礎知識啊,如果不明白肯定是你的書看的不夠仔細哦


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM