0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何使用8051定時器生成時間延遲?

科技觀察員 ? 來源:英銳恩 ? 作者:英銳恩 ? 2023-07-07 11:00 ? 次閱讀

8051單片機有兩個獨立的16位向上計數(shù)定時器,名為Timer0和Timer1,本文是關(guān)于使用8051定時器生成時間延遲。使用純軟件循環(huán)可以生成延遲,但這種延遲精度較差,不能用于敏感應(yīng)用。使用定時器延遲是最準(zhǔn)確的,當(dāng)然也是最好的方法。

定時器可以概括為多位計數(shù)器,它在接收時鐘信號時增加/減少自身,并在翻轉(zhuǎn)時產(chǎn)生中斷信號。當(dāng)計數(shù)器在處理器時鐘上運行時,它被稱為“定時器”,它對預(yù)定數(shù)量的處理器時鐘脈沖進行計數(shù)并產(chǎn)生可編程延遲。當(dāng)計數(shù)器在外部時鐘源(可能是周期性或非周期性外部信號)上運行時,它本身被稱為“計數(shù)器”,可用于對外部事件進行計數(shù)。

在8051單片機中,振蕩器輸出使用12分頻網(wǎng)絡(luò)進行12分頻,然后作為時鐘信號饋入定時器。這意味著對于以12MHz運行的8051,定時器時鐘輸入將為1MHz。這意味著計時器每1uS前進一次,使用單個8051計時器可能的最大時間延遲為(2^16)x(1uS)=65536uS。比這更長的延遲可以通過使用定時器編寫一個基本的延遲程序然后循環(huán)它所需的時間來實現(xiàn)。我們將在本文的下一節(jié)中詳細(xì)了解所有這些。

一、使用8051單片機的定時器設(shè)計延遲程序

在8051中設(shè)計延時程序時,計算需要加載到TH和TL寄存器中的初始值是很重要的事情。讓我們看看它是如何完成的:

(1)假設(shè)處理器由12MHz晶振提供時鐘。

(2)這意味著,定時器時鐘輸入將為12MHz/12=1MHz

(3)這意味著,定時器增加一倍所用的時間=1/1MHz=1uS

(4)對于“X”uS的時間延遲,計時器必須使“X”遞增。

(5)2^16=65536是16位定時器可能的最大計數(shù)數(shù)。

(6)設(shè)TH是必須加載到TH寄存器的值,TL是必須加載到TL寄存器的值。

(7)然后,THTL=(65536-X)的十六進制等效值,其中(65536-X)被視為十進制。

二、使用8051單片機定時器產(chǎn)生1mS延遲的程序

下面的程序可用于產(chǎn)生1mS延遲,已被編寫為子程序,以便可以在程序的任何地方調(diào)用它。也可以將其置于循環(huán)中以創(chuàng)建更長的時間延遲(1mS的倍數(shù))。這里使用了8051的定時器0,它在MODE1(16位定時器)下運行。

DELAY: MOV TMOD,#00000001B // Sets Timer 0 to MODE1 (16 bit timer). Timer 1 is not used
       MOV TH0,#0FCH // Loads TH0 register with FCH
       MOV TL0,#018H // LOads TL0 register with 18H
       SETB TR0 // Starts the Timer 0
HERE: JNB TF0,HERE // Loops here until TF0 is set (ie;until roll over)
      CLR TR0 // Stops Timer 0
      CLR TF0 // Clears TF0 flag
      RET

上面的延遲例程可以循環(huán)兩次以獲得2毫秒的延遲,如下面的程序所示:

MAIN: MOV R6,#2D
LOOP: ACALL DELAY
      DJNZ R6,LOOP
      SJMP MAIN
DELAY: MOV TMOD,#00000001B 
       MOV TH0,#0FCH
       MOV TL0,#018H 
       SETB TR0 
HERE: JNB TF0,HERE 
      CLR TR0 
      CLR TF0 
      RET

使用定時器時要記住的幾點:

(1)一旦設(shè)置了定時器標(biāo)志(TF),程序員必須先將其清除,然后才能再次設(shè)置。

(2)定時器標(biāo)志設(shè)置后定時器不會停止。程序員必須清除TR位才能停止定時器。

(3)一旦定時器溢出,程序員必須將初始起始值重新加載到TH和TL寄存器以開始向上計數(shù)。

(4)我們可以配置所需的計時器以在設(shè)置TF標(biāo)志時創(chuàng)建中斷。

(5)如果沒有使用中斷,那么我們必須使用一些條件分支指令檢查定時器標(biāo)志(TF)是否設(shè)置。

(6)使用單個8051定時器可能的最大延遲為65536uS,如果您使用12MHz晶體為單片機計時,則最小延遲為1uS。

三、使用8051單片機定時器生成方波

使用8051單片機定時器可以生成任何頻率的方波(受控制器規(guī)格限制)。該技術(shù)非常簡單。編寫一個延遲子程序,延遲等于方波時間周期的一半。使任何端口引腳為高電平并調(diào)用延遲子程序。延遲子程序完成后,將相應(yīng)的端口引腳拉低,調(diào)用延遲子程序增益。子程序完成后,再次重復(fù)循環(huán)。結(jié)果將是所選端口引腳上所需頻率的方波。電路圖如下所示,它可以用于任何方波,但程序必須相應(yīng)。不同方波的程序如下圖所示:

20211028110259.jpg

例1:1KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FEH
       MOV TL0,#00CH
       SETB TR0
HERE: JNB TF0,HERE
      CLR TR0
      CLR TF0
      SETB P1.0
      RET
      END

例2:2KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FCH
       MOV TL0,#018H
       SETB TR0
HERE:JNB TF0,HERE
     CLR TR0
     CLR TF0
     SETB P1.0
RET
END

例3:10KHz方波。

MOV P1,#00000000B
MOV TMOD,#00000001B
MAIN: SETB P1.0
      ACALL DELAY
      CLR P1.0
      ACALL DELAY
      SJMP MAIN
DELAY: MOV TH0,#0FFH
       MOV TL0,#0CEH
       SETB TR0
HERE:JNB TF0,HERE
     CLR TR0
     CLR TF0
     SETB P1.0
RET
END
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 定時器
    +關(guān)注

    關(guān)注

    23

    文章

    3218

    瀏覽量

    113681
  • 8051單片機
    +關(guān)注

    關(guān)注

    5

    文章

    153

    瀏覽量

    25431
收藏 人收藏

    評論

    相關(guān)推薦

    等待與時間延遲

    各位老師指點一下,LABVIEW中的等待與時間延遲什么區(qū)別?
    發(fā)表于 03-26 09:18

    編程-定時之“等待”與“時間延遲”有啥區(qū)別?

    編程-定時之“等待”與“時間延遲”有啥區(qū)別?請看圖片
    發(fā)表于 03-06 08:53

    關(guān)于時間延遲的問題

    通常情況下,我在3里放一個時間延遲的vi,按照程序運行順序,先運行1,然后運行2,最后進入3激活延遲。我想當(dāng)程序運行1時,3里的時間延遲vi同時被激活,開始計時。有沒有可以使時間跟別的
    發(fā)表于 09-10 16:08

    8051定時器T0的定時功能自動代碼生成工具

    該工程可自動生成8051系列單片機定時器0的定時功能代碼,可根據(jù)設(shè)置的晶振頻率和定時時間自動生成
    發(fā)表于 11-03 23:06

    相移和時間延遲濾波設(shè)計

    相移和時間延遲濾波設(shè)計內(nèi)容有全通濾波,恒定時間延遲濾波或貝塞爾濾波,全通濾波
    發(fā)表于 12-01 12:53 ?18次下載
    相移和<b class='flag-5'>時間延遲</b>濾波<b class='flag-5'>器</b>設(shè)計

    延遲電路構(gòu)成的定時器

    延遲電路構(gòu)成的定時器
    發(fā)表于 04-03 09:45 ?722次閱讀
    用<b class='flag-5'>延遲</b>電路構(gòu)成的<b class='flag-5'>定時器</b>

    基于8051的Proteus仿真-定時器設(shè)計的門鈴

    基于8051的Proteus仿真-定時器設(shè)計的門鈴
    發(fā)表于 09-01 23:33 ?26次下載

    4小時順序定時器電路圖

    4小時順序定時器在雙定時器556的兩個字時之間使用N8281分配器網(wǎng)絡(luò),不用大體積低漏電電容器,可以得到相當(dāng)長的時間延遲。
    發(fā)表于 05-06 16:47 ?3019次閱讀
    4小時順序<b class='flag-5'>定時器</b>電路圖

    SAM器件上的各種定時器

    定時器是基于單片機的嵌入式應(yīng)用中的基本模塊。很難想象不使用定時器如何設(shè)計嵌入式應(yīng)用。定時器作為外設(shè),可生成周期性事件,用于測量時間間隔、
    發(fā)表于 03-30 15:55 ?6次下載
    SAM器件上的各種<b class='flag-5'>定時器</b>

    SAM系列MCU中的定時器的可能應(yīng)用場景

    SAM 器件上的各種定時器 簡介 定時器是基于單片機的嵌入式應(yīng)用中的基本模塊。很難想象不使用定時器如何設(shè)計嵌入式應(yīng)用。定時器作為外設(shè),可生成
    的頭像 發(fā)表于 09-18 10:39 ?1750次閱讀

    MCU中定時器的可能應(yīng)用場景

    SAM 器件上的各種定時器 簡介 定時器是基于單片機的嵌入式應(yīng)用中的基本模塊。很難想象不使用定時器如何設(shè)計嵌入式應(yīng)用。定時器作為外設(shè),可生成
    的頭像 發(fā)表于 11-17 10:46 ?3115次閱讀

    時間定時器開關(guān)怎樣接線?

    時間定時器:又稱時間定時器開關(guān)、定時器、定時控制
    的頭像 發(fā)表于 09-28 11:47 ?7591次閱讀

    555定時器內(nèi)部框圖、工作原理和工作模式

    555定時振蕩也就是通常所說的 555定時器 。 555定時器的用途非常廣泛,可以 生成各種類型的脈沖 、 創(chuàng)建
    的頭像 發(fā)表于 05-09 09:18 ?5961次閱讀
    555<b class='flag-5'>定時器</b>內(nèi)部框圖、工作原理和工作模式

    STM32定時器時間計算方法

    STM32微控制定時器模塊在嵌入式系統(tǒng)中非常常見,它被用于產(chǎn)生精確的時間延遲,或者用于實時時鐘(RTC)等功能。為了充分利用STM32的定時器功能,理解其
    的頭像 發(fā)表于 12-19 11:31 ?9475次閱讀

    使用555定時器的可調(diào)雙定時器電路

    定時器 IC 555 是最通用和最常用的 IC 之一,因為它的應(yīng)用范圍更廣,如 PWM放大器、延遲定時器、開關(guān)電路、占空比選擇、時鐘脈沖發(fā)生
    的頭像 發(fā)表于 02-25 15:16 ?1625次閱讀
    使用555<b class='flag-5'>定時器</b>的可調(diào)雙<b class='flag-5'>定時器</b>電路