定時器
概述
檢測與控制中,許多場合都要用到計數功能和定時功能。實現定時/計數這些功能,有3種主要方法:軟件定時、數字電路的硬件定時、可編程定時/計數器。
-
軟件定時
軟件定時就是一個循環程序,執行這一程序段所需的時間就是延時時間。 -
數字電路硬件定時
這種硬件定時採常用小規模集成電路器件,如用555定時芯片構成定時電路,它不佔用CPU的時間,但是這種電路的定時時間要靠電路中的元件參數來確定。在硬件電路連接好以後,要改變定時時間,就要改變電路中的電子元件,使用起來很不方便。 -
可編程定時/計數器
可編程定時/計數器是爲了方便微型計算機系統的設計和應用而研製的,它既是硬件定時,又可以很容易地通過軟件來確定和改變定時時間,通過軟件編程就能夠滿足不同的定時和計數要求。
###結構
定時器/計數器T0由特殊功能寄存器TH0、TL0構成,
定時器/計數器T1由特殊功能寄存器TH1、TL1構成。
具有定時器和計數器2種工作模式,4種工作方式(方式0、方式1、方式2和方式3)。
- 計數器模式是對加在T0(P3.4)和T1(P3.5)兩個引腳上的外部脈衝進行計數\
- 定時器工作模式是對單片機的時鐘振盪器信號經片內12分頻後的內部脈衝信號計數。
###4種工作方式
M1M0 | 方式 | 特點 |
---|---|---|
0 0 | 0 | 13位定時器/計數器 |
0 1 | 1 | 16位定時器/計數器 |
1 0 | 2 | 自動裝入時間常數的8位定時器/計數器 |
1 1 | 3 | 對T0分爲兩個8位獨立計數器;對T1置方式3時停止工作 |
###對外部輸入的計數信號的要求
-
當定時器/計數器工作在計數器模式時,計數脈衝來自外部輸入引腳T0或T1。
-
當輸入信號產生負跳變時,計數器的值增1。
-
每個機器週期的S5P2期間,都對外部輸入引腳T0或T1進行採樣。
###定時器/計數器的編程和應用
步驟
(1)確定工作方式,即給方式控制寄存器TMO D寫入控制字。
(2)計算定時器/計數器初值,並將初值寫入寄存器TL和TH。
(3)根據需要,對中斷控制寄存器IE置初值,確定是否開放定時器中斷。
(4)使運行控制寄存器TCON中的TRx置1,啓動定時器/計時器。
練習
\2. AT89S51單片機內設有幾個可編程的定時器/計數器?它們可以有哪幾種工作模式?哪幾種工作方式?如何選擇和設定?各有什麼特點?
定時器/計數器四種工作方式由TMOD中的M1 M0兩位確定,如下表所示。
M1M0 | 方式 | 特點 |
---|---|---|
0 0 | 0 | 13位定時器/計數器 |
0 1 | 1 | 16位定時器/計數器 |
1 0 | 2 | 自動裝入時間常數的8位定時器/計數器 |
1 1 | 3 | 對T0分爲兩個8位獨立計數器;對T1置方式3時停止工作 |
7.AT89S51單片機的晶振頻率爲6MHz,若要求定時值分別爲0.1ms和10ms,定時器0工作在方式0、方式1和方式2,其定時器初值各應是多少?
****答:****(1) 0.1ms
方式0:
0.1×10-3=(213-X)×12/(6×106)
所以:X=8142=1111111001110B
T0低5位01110B=0EH
T0高8位:11111110B=FEH
方式1: 0.1×10-3= (216-X) ×12/(6×106)
所以:X=65486=FFCEH
方式2: 0.1×10-3= (28-X) ×12/(6×106)
所以:X=206=CEH
(2) 10ms
方式0: 10×10-3=(213-X) ×12/(6×106)
所以:X=3192=110001111000B
T0低5位11000B=18H
T0高8位:01100011B=63H
方式1: 10×10-3=(216-X) ×12/(6×106)
所以:X=60536=EC78H
方式2:在此情況下最長定時爲512μs,無法一次實現定時10ms,可用0.1ms定時循環100次
11.定時器/計數器作爲外部中斷源使用時,需要如何初始化?以T0爲例通過程序說明。
*答:* 初始化程序:
```
MOV TMOD, #06H
MOV TL0, #0FFH
MOV TH0, #0FEH
SETB TR0
SETB EA
SETB ET0
```
14.已知單片機時鐘振盪頻率爲6MHz,利用T0定時器,在P1.1引腳上輸出連續方波,波形如圖9-23所示。
圖9-23 題15波形圖
****解:****首先計算定時常數:
100us 方式0 Tc=FE0EH; 方式1 Tc=FFCEH; 方式2 Tc=CEH
150us 方式0 Tc=FD15H; 方式1 Tc=FFB5H; 方式2 Tc=B5H
****方法一****:採用方式一,定時器中斷。
流程圖:
ORG 0000H
LJMP START
ORG 000BH
LJMP TINT0
ORG 0100H
START: MOV TMOD, #01H
MOV TL0, #0CEH
MOV TH0, #0FFH
SETB TR0
SETB EA
SETB ET0
SETB 20H.0
SETB P1.1
SJMP $
TINT0: JNB 20H.0, NEXT
MOV TL0, #0B5H
MOV TH0, #0FFH
CLR P1.1
CPL 20H.0
SJMP LAST
NEXT: MOV TL0, #0CEH
MOV TH0, #0FFH
SETB P1.1
CPL 20H.0
LAST:RETI
****方法二****: 採用方式2 定時器中斷 加延時程序
流程圖:
ORG 0000H
LJMP START
ORG 000BH
LJMP TINT0
ORG 0100H
START: MOV TMOD, #02H
MOV TL0, #0CEH
MOV TH0, #0CEH
SETB TR0
SETB EA
SETB ET0
SETB 20H.0
SETB P1.1
SJMP $
TINT0: JNB 20H.0, NEXT
CLR TR0
CLR P1.1
LCALL DELAY
CPL 20H.0
SETB TR0
SJMP LAST
NEXT: SETB P1.1
CPL 20H.0
LAST: RETI
DELAY: MOV R7, #8
DELAY1: DJNZ R7, DELAY1
RET