8051 Timer

Posted by: 邱小新 at 上午9:45 in
TMOD register 0x89 (timer/counter mode control register)

  1. GATE = 1 需要 INTx 接腳為高電位才計時,GATE = 0 則不需要。

    也就是當 TRx=1 and GATE=0 開始計時,或者當 TRx=1 and GATE=1 and INTx=1 開始計時,其它條件都不計時。

  2. C/T = 0 使用內部時脈,C/T = 1 使用外部時脈。

    Timer 的計時時脈來源有兩種,一種是 8051 單晶片的內部時脈也就是從 XTAL1 與 XTAL2 接腳所輸入的內部時脈,一種是從 T0 與 T1 接腳所輸入的外部時脈。所以一般來說設定成內部時脈時,稱為計時器,因為振盪器頻率固定可以當計時器用;而設定成外部時脈時,稱為計數器,因為不知使用者會接什麼裝置,但是都有計算次數功能。如果外部時脈也是接振盪器時,也可以算是計時器,只是沒人會如此做,因為直接使用內部時脈即可,可以省成本又可以多些腳位使用。

  3. M1, M0: Mode Select bits:

    M1M0MODE
    0013 位元計時器
    0116 位元計時器
    108 位元自動重新載入
    11兩個8位元計時器

  4. 在 8051 單晶片使用內部時脈計時,會在每個機械週期值由〝1〞變為〝0〞時,將 Timer 的值累加1。也就是每一個 count 的時間為一個機械週期的時間,時間算法請見 8051 clock

  5. 當計時器溢位時(0xff->0x00),會設置 TFx 為 1;如果 ETx 被設置成 1,則接著會進入中斷常式,並且把 TFx 設置為 0。

8 位元自動重新載入時間算法,以 40MHz 為例:


  1. 當 TLx 從 0xff 變成 0x00 時,會產一個中斷,並且把 THx 載入 TLx 再繼續計數。所以產生中斷的次數為 256-THx。

  2. 1 count = 12/40000000(s) = 12/40000(ms) = 12/40(us),所以產生中斷的時間為 (256-THx) * 12/40。

  3. 最大值為 (256-0)*12/40 = 76.8(us),最小值為 (256-255)*12/40 = 0.3(us)。

  4. 如果設定中斷時間為 60us 則 (256-THx) * 12/40 = 60,THx = 256 - 60*40/12 = 56。

2 意見

請問一下如何使用timer0讀取H訊號,L訊號,目前使用頻率0~2KHZ,週期為50%duty.

8051讀取duty cycle程式參考嗎??

張貼留言