8051定時器


Intel 8051中,有兩個16位定時器暫存器。這些暫存器稱為Timer0和Timer1。定時器暫存器可以用兩種模式使用。這兩種模式是定時器模式和計數器模式。這兩種模式之間唯一的區別是遞增定時器暫存器的來源。

定時器模式

在定時器模式下,計數內部機器週期。因此,此暫存器在每個機器週期中遞增。因此,當時鍾頻率為12MHz時,定時器暫存器在每個毫秒遞增。在此模式下,它忽略外部定時器輸入引腳。

計數器模式

在計數器模式下,計數外部事件。在此模式下,對於外部輸入引腳的每次1到0轉換,定時器暫存器都會遞增。這種型別的轉換被視為事件。外部輸入引腳在每個機器週期中取樣一次,並且為了確定1或0轉換,將需要另一個機器週期。因此,在此模式下,至少需要兩個機器週期。當頻率為12MHz時,最大計數頻率將為12MHz/24 = 500KHz。因此,對於事件計數,時間持續時間為2 µs。

定時器或計數器有四種不同的模式。模式0到模式2適用於定時器/計數器。模式3對每個定時器暫存器都有不同的含義。有一個稱為TMOD的暫存器。可以對該暫存器進行程式設計以配置這些定時器或計數器。

序列埠在模式1和3中用於序列通訊。Timer1用於生成波特率。因此,只有Timer0可用於定時器或計數器操作。

TMOD暫存器

TMOD(定時器模式)是SFR。此暫存器的地址為89H。它不是按位定址的。

定時器
Timer1模式
Timer0模式
位細節
門控 (G)
C/T
M1
M0
門控 (G)
C/T
M1
M0


現在,讓我們看看控制定時器執行的電路。

在下表中,我們將看到位細節及其對於高值或低值的不同的操作。

位細節
高值(1)
低值(0)
C/T
配置為計數器操作
配置為定時器操作
門控 (G)
當TCON暫存器的TRX位為高時,Timer0或Timer1處於執行模式。
當TCON暫存器的TRX位為高且INT0INT1為高時,Timer0或Timer1處於執行模式。


位細節
00
01
10
11
M1 M0
這是模式0。(8位定時器/計數器,帶5位預分頻器)
這是模式1。(16位定時器/計數器)
這是模式3(8位自動過載定時器/計數器)
這是模式3(功能取決於Timer0或Timer1)


當定時器或計數器處於模式0到2時,門控位將為高。

示例

要將Timer0配置為16位事件計數器並將Timer1配置為8位自動過載計數器,我們可以使用位模式0 0 1 0 0 1 0 1。它相當於25H。如果要使用此位模式程式設計TMOD暫存器,可以使用此指令

MOVTMOD, #25H

執行上述指令後,定時器/計數器將由軟體控制。要將系統配置為硬體控制模式,則門控位將為1。因此,位模式將為1 0 1 0 1 1 0 1 = ADH

我們可以使用此指令

MOVTMOD, #0ADH


定時器/計數器的模式0

模式0操作是帶5位預分頻器的8位定時器或計數器。因此,它是13位定時器/計數器。它使用TL0或TL1的5位和TH0或TH1的所有8位。

在此示例中,選擇了Timer1,在這種情況下,對於計數器操作的每32(25)個事件或定時器操作的每32個機器週期,TH1暫存器將遞增1。當TH1從FFH溢位到00H時,TCON暫存器的TF1將變為高,並且它將停止定時器/計數器。例如,我們可以說,如果TH1保持F0H,並且它處於定時器模式,則在10H * 32 = 512個機器週期後,TF1將變為高。

MOVTMOD, #00H
MOVTH1, #0F0H
MOVIE, #88H
SETB TR1

在上面的程式中,Timer1被配置為定時器模式0。在這種情況下,Gate = 0。然後將TH1載入為F0H,然後啟用Timer1中斷。最後設定TCON暫存器的TR1,並啟動定時器。

定時器/計數器的模式1

模式1操作是16位定時器或計數器。在下圖中,我們對Timer0使用模式1。

在這種情況下,對於計數器操作的每個事件或定時器操作的機器週期,TH0-TL0暫存器對將遞增1。當暫存器對從FFFFH溢位到0000H時,TCON暫存器的TF0將變為高,並且它將停止定時器/計數器。例如,我們可以說,如果TH0-TL0暫存器對保持FFFF0H,並且它處於定時器模式,則在10H = 16個機器週期後,TF0將變為高。當時鍾頻率為12MHz時,以下指令在Timer0開始執行後16 µs產生中斷。

MOVTMOD, #01H
MOVTL0, #0F0H
MOVTH0, #0FFH
MOVIE, #82H
SETB TR0

在上面的程式中,Timer0被配置為定時器模式1。在這種情況下,Gate = 0。然後將TL0載入為F0H,並將TH0載入為FFH,然後啟用Timer0中斷。最後設定TCON暫存器的TR0,並啟動定時器。

定時器/計數器的模式2

模式2操作是8位自動過載定時器或計數器。在下圖中,我們對Timer1使用模式2。

在這種情況下,對於計數器操作的每個事件或定時器操作的機器週期,TL1暫存器將遞增1。當暫存器對從FFH溢位到00H時,TCON暫存器的TF1將變為高,並且TL1也將重新載入TH1的內容並再次開始操作。

例如,我們可以說,如果TH1和TL1暫存器都保持F0H並且它處於定時器模式,則在10H = 16個機器週期後,TF1將變為高。當時鍾頻率為12MHz時,這發生在16 µs之後,然後以下指令在Timer1開始執行後每16 µs產生一次中斷。

MOVTMOD, #20H
MOVTL1, #0F0H
MOVTH1, #0F0H
MOVIE, #88H
SETBTR1

在上面的程式中,Timer1被配置為定時器模式2。在這種情況下,Gate = 0。然後將TL1和TH1載入為F0H。然後啟用Timer1中斷。最後設定TCON暫存器的TR1,並啟動定時器。

當序列埠以模式1或3工作時,模式2下的Timer1生成所需的波特率。



定時器/計數器的模式3

模式3對於Timer0和Timer1是不同的。當Timer0以模式3工作時,TL0將用作8位定時器/計數器。它將由標準Timer0控制位T0和INT0輸入控制。TH0用作8位定時器,但不作為計數器。這由Timer1控制位TR1控制。當TH0從FFH溢位到00H時,TF1設定為1。在下圖中,我們可以看到模式3下的Timer0。

當Timer1以模式3工作時,它只是保持計數而不執行。當Timer0處於模式3時,Timer1配置為模式0、1或2之一。在這種情況下,Timer1不能中斷微控制器。當TF1由TH0定時器使用時,Timer1用作波特率發生器。

模式3下Timer0和Timer1中門控位的含義如下

它像模式0、1或2一樣控制8位定時器/計數器TL0的執行。TH0的執行僅由TR1位控制。因此,此模式下Timer0的門控位沒有特定作用。

模式3用於需要額外8位定時器/計數器的應用程式。在Timer0的模式3中,8051具有三個定時器。一個由TH0提供的8位定時器,另一個由TL0提供的8位定時器/計數器,以及一個由Timer1提供的16位定時器/計數器。

如果Timer0處於模式3,並且Timer1正在執行模式0、1或2,則當門控位為低或INT1為高時,將啟用Timer1的執行控制。當門控位為高且INT1為低時,將停用執行控制。

更新於:2023年10月31日

67K+ 次瀏覽

開啟您的職業生涯

完成課程獲得認證

立即開始
廣告