設置好觸發所用的時間了,也就是TH0和TL0,這樣就可以進入中斷了。但是進入中斷後如何操作,還要設定,就是前文提到的,中斷的四種工作方式,一般的,計時用就選擇中斷2即可。
這是手冊中的參數,定時器的模式設置寄存器,這個寄存器無法位尋址,所以需要單獨設置。設置什麼呢,就是設置我們的定時器如何工作。
GATE位是打開外部中斷引腳控制定時器的,目前不需要,所以等於0即可。
C/T位是切換定時器和計數器模式的,等於1就是計數器模式,此時由引腳P3.4/T0來輸入計數信號。等於0時就是定時器模式,此時P3.4/T0引腳不控制,由系統自己定時觸發。我們要工作在定時器,所以就等於0。
M1、M0兩位是組合的,前文就介紹了,分為四種方式,分別是00/01/10/11。對應1、2、3、4這四種方式,我們計時就選擇第二種方式,16位計時器。
目前就只開第二個定時器T0,所以設置的參數就是TMOD=0b0000 0001=0x01,也就設置了定時器0工作在定時器模式,以16位定時器模式工作。
這就算完成了定時器的設置這一步。接下來是打開定時器。打開之前,先再次看下定時器使用的步驟,這次加上設置的步驟。
設置T0步驟:
1,查看晶振頻率。
2,計算出一個機器周期的時間,大部分是12分之一,也有些是6分之一的,注意查看手冊。
3,設置定時器一個中斷周期時間長度。
4,計算出累加一個時間長度所需累加數,然後計算出初始值。
5,使用科學計算器,計算出初始值的二進位數,把二進位數分為兩個八位數。把二進位轉換為十六進位。
6,把高八位十六進位寫入TH0,低八位十六進位寫入TL0。
7,設置工作模式和工作方式TMOD。
8,打開T0中斷開關。
9,打開總中斷開關。
10,設置中斷響應程序。
目前完成了前七步,其實就是這個七步,相當於之前的外部中斷的第一步。也正是因為這七步,難倒了一片學習單片機的同學。
接下來的打開T0中斷開關,就簡單多了。查看手冊。
之前控制外部中斷的打開,使用的是EX0和EX1,這次我們需要打開的是中斷T0,所以就需要使ET0=1。這個是T0允許中斷的開關。然後是總中斷開關,這個前文已經說過多次,所有的中斷的總開關就是EA,只要EA=1,就打開了所有中斷的控制開關,至於讓誰運行,再打開分開關即可。
TCON是控制中斷開始的開關,我們之前使用過IT0去控制外部中斷INT0的觸發方式。IT0等於0是低電位觸發,IT0等於1是下降沿觸發。因為可以進行位尋址,所以無需統一設置TCON,開始學習,單獨位控制就好。本次使用的是T0,所以,當TR0等於1時,T0定時器就被打開了,開始定時。就好像一個燈的開關一樣。
最後的一個步驟就是設置中斷響應程序,這個也是根據中斷號來進行的,之前的外部中斷是0和2,分別是INT0和INT1。
這次是T0和T1中斷號就是1和3。
void T0() interrupt 1{}
void T1() interrupt 3{}
名稱可以自己寫,簡單易辨識即可。
說了這麼長,是不是感覺確實比外部中斷複雜些?沒關係,只要掌握了步驟,就很簡單了。本文我們先以12M晶振為例,寫一個定時1秒的LED閃爍案例。
1,晶振是12M。
2,一個機器周期時間是1微秒。
3,定時最小分度為50毫秒。
4,所需的初始值是15536.
5,計算出對應初始值的十六位十六進位數是:0x3C B0
6,得出TH0=0x3C,TL0=0xB0。
7,工作模式是定時器,工作方式是16位定時。TMOD=0x01。
8,打開T0定時器開關,ET0=1;TR0=1;
9,打開中斷總開關,EA=1;
10,設置中斷響應函數。void T0() interrupt 1{}
好了,就先到這裡,消化一下,下篇就寫程序。