微機原理-08-定時器

定時器

概述

檢測與控制中,許多場合都要用到計數功能和定時功能。實現定時/計數這些功能,有3種主要方法:軟件定時、數字電路的硬件定時、可編程定時/計數器。

  1. 軟件定時
    軟件定時就是一個循環程序,執行這一程序段所需的時間就是延時時間。

  2. 數字電路硬件定時
    這種硬件定時採常用小規模集成電路器件,如用555定時芯片構成定時電路,它不佔用CPU的時間,但是這種電路的定時時間要靠電路中的元件參數來確定。在硬件電路連接好以後,要改變定時時間,就要改變電路中的電子元件,使用起來很不方便。

  3. 可編程定時/計數器
    可編程定時/計數器是爲了方便微型計算機系統的設計和應用而研製的,它既是硬件定時,又可以很容易地通過軟件來確定和改變定時時間,通過軟件編程就能夠滿足不同的定時和計數要求。

###結構

定時器/計數器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所示。

img

圖9-23 題15波形圖

****解:****首先計算定時常數:

100us   方式0   Tc=FE0EH; 方式1   Tc=FFCEH; 方式2  Tc=CEH

150us   方式0   Tc=FD15H; 方式1   Tc=FFB5H; 方式2  Tc=B5H  

****方法一****:採用方式一,定時器中斷。

流程圖:

img

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 定時器中斷 加延時程序

流程圖:

img

    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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章