当前位置 - 股票行情交易網 - 裝修設計 - 怎樣使用51單片機的定時器?

怎樣使用51單片機的定時器?

51單片機定時器的使用

51單片機定時器/計時器的使用

步驟:

1、 打開中斷允許位:

對IE寄存器進行控制,IE寄存器各位的信息如下圖所示:

EA: 為0時關所有中斷;為1時開所有中斷

ET2:為0時關T2中斷;為1時開T2中斷,只有8032、8052、8752才有此中斷 ES: 為0時關串口中斷;為1時開串口中斷 ET1:為0時關T1中斷;為1時開T1中斷 EX1:為0時關1時開 ET0:為0時關T0中斷;為1時開T0中斷 EX0:為0時關1時開

2、 選擇定時器/計時器的工作方式:

定時器TMOD格式

CPU在每個機器周期內對T0/T1檢測壹次,但只有在前壹次檢測為

1和後壹次檢測為0時才會使計數器加1。因此,計數器不是由外部時鐘負邊沿觸發,而是在兩次檢測到負跳變存在時才進行計數的。由於兩次檢測需要24個時鐘脈沖,故T0/T1線上輸入的0或1的持續時間不能少於壹個機器周期。通常,T0或T1輸入線上的計數脈沖頻率總小於100kHz。

方式0:定時器/計時器按13位加1計數,這13位由TH中的高8位和TL中的低5位組成,其中TL中的高3位棄之不用(與MCS-48兼容)。

13位計數器按加1計數器計數,計滿為0時能自動向CPU發出溢出中斷請求,但要它再次計數,CPU必須在其中斷服務程序中為它重裝初值。

方式1:16位加1計數器,由TH和TL組成,在方式1的工作情況和方式0的相同,只是計數器值是方式0的8倍。

1

1/3

方式2:計數器被拆成壹個8位寄存器TH和壹個8位計數器TL,CPU對它們初始化時必須送相同的定時初值。當計數器啟動後,TL按8位加1計數,當它計滿回零時,壹方面向CPU發送溢出中斷請求,另壹方面從TH中重新獲得初值並啟動計數。

方式3:T0和T1工作方式不同,TH0和TL0按兩個獨立的8位計數器工作,T1只能按不需要中斷的方式2工作。 在方式3下的TH0和TL0是有區別的:TL0可以設定為定時器/計時器或計數器模式工作,仍由TR0控制,並采用TF0作為溢出中斷標誌;TH0只能按定時器/計時器模式工作,它借用TR1和TF1來控制並存放溢出中斷標誌。因此,T1就沒有控制位可以用了,故TL1在計滿回零時不會產生溢出中斷請求的。 顯然,T0和T1設定為方式3實際上就相當於設定了3個8位計數器同時工作,其中TH0和TL0為兩個由軟件重裝的8位計數器,TH1和TL1為自動重裝的8位計數器,但無溢出中斷請求產生。由於TL1工作於無中斷請求狀態,故用它來作為串口可變波特

3、 為計數器賦值

計數器初值計算

TC=M?C

TC:計數器初值,M:計數器模值(2k),C:把計數器計滿的計數值 定時器初值計算

T=(M?TC)T計數

TC=M?T/?計數

M:模值,T計數:單片機時鐘周期TCLK(ΦCLK的倒數)的12倍;TC為定時器的定時初值,T為欲定時的時間。

TC=M?T×/12

M:模值,ΦCLK:單片機時鐘周期ΦCLK;TC為定時器的定時初值,T為欲定時的時間。 例如:單片機主脈沖頻率ΦCLK為12MHz,最大定時時間為: 方式0時 TMAX = 213×1us = 8.192ms 方式1時 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms

4TR0:為0時,停T0計數;為1時,啟T0計數

2

2/3

TF0:為0時,無T0中斷(硬件復位);為1時,有T0溢出中斷 TR1:為0時,停T1計數;為1時,啟T1計數 TF1:為0時,無T1中斷(硬件復位);為1時,有T1溢出中斷 IE1:為0時,硬件復位;為1時 IT1:為0時,INT1電平觸發(軟件復位);為1時,INT1負邊沿觸發 IE0:為0時,硬件復位;為1時 IT0:為0時,INT0電平觸發(軟件復位);INT0負邊沿觸發

5

在C51的C語言中使用interrupt x來指定中斷入口地址,x為中斷號,例T0中斷: void Time0_Int() interrupt 1 //定時器T0的中斷入口程序