回覆列表
  • 1 # 玩轉嵌入式

    51微控制器的定時器T0和T1是可以同時使用的,但是在程式設計的時候需要注意一下,防止暫存器的設定被覆蓋以及定時溢位問題。詳細介紹如下:

    1.注意事項之一:暫存器設定

    在使用微控制器的定時器暫存器時,有兩個暫存器非常重要,是TMOD和TCON,TMOD暫存器包含暫存器的工作模式、定時模式等,TCON包含了中斷允許、定時器啟動、中斷標誌等的設定。

    在設定TMOD時建議直接操作TMOD,防止T0和T1單獨按位操作引起,防止暫存器的設定被覆蓋。比如T0和T1都是用作定時器,且工作在方式1,則TMOD=0x11;中斷總開關EA=1;定時器中斷允許ET0=1;ET1=1;定時器啟動TR0=1;TR1=1等。

    2.注意事項之二:定時器初值的計算

    51微控制器的定時器是加法暫存器,在設定定時器初值時需要計算一下。以16位定時方式舉例,最大可以計數65535,假設採用f=12M的時鐘頻率,那麼微控制器的機器週期為:T=1/f=1us。如果計時50ms的話,需要50000/1=50000個機器週期,則定時50ms需要的初值為(65536-50000),所以初值如下:

    TH = (65536-50000)/256;

    TL = (65536-50000)%256;

    3.注意事項之三:定時器防溢位

    定時器的暫存器設定好之後,可以設定定時器使用過程中的定時變數,必須要注意定時變數的資料型別,我在程式設計時多次犯過這種錯誤,比如變數的型別是char型,但是在定時器判斷時,卻和1000進行比較。因為char型最大值是255,這樣就永遠到不了1000,所以永遠等不到定時器的觸發。

    4.注意事項之四:中斷優先順序

    定時器T0和定時器T1在同時使用時,不會同時觸發定時器中斷,中斷只有一個,哪一個先觸發,會涉及到中斷優先順序的問題,需要配置IP暫存器,預設的中斷優先順序如下:

    外部中斷0>定時器T0>外部中斷1>定時器T1>串列埠中斷。

    如果沒有特殊優先順序要求,則可以選擇預設設定。

  • 中秋節和大豐收的關聯?
  • 英鎊上的歷史人物是誰?