新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 延遲使用8051定時器

        延遲使用8051定時器

        作者: 時間:2023-04-10 來源:電子產品世界 收藏

        在這個項目中,我將討論一下中的,以及如何使用生成一個延遲。

        本文引用地址:http://www.104case.com/article/202304/445432.htm

        時間延遲的產生是嵌入式系統中最重要的概念。大多數情況下,我們需要在任何應用中的兩個動作之間產生精確的時間延遲。我們可以使用像LOOPs這樣的技術或使用內置的延遲函數來產生時間延遲。

        但這些都不是產生時間延遲的精確方法,因此我們將使用來產生精確的時間延遲。這個概念類似于時間延遲繼電器的概念。

        項目背后的原理

        大多數的控制器都有內置的定時器。這些定時器不僅用于產生時間延遲,而且還用于計數目的。當一個動作或事件發生時,計數器的值會遞增1。

        另一方面,定時器被用來產生延遲。中的定時器是由SFRs(特殊功能寄存器)控制的。不同操作模式下的定時器是由特殊功能寄存器配置的。

        這個項目的主要原理是在特殊功能寄存器的幫助下,用計時器產生一個延遲。

        Delay using 8051 Timers Image 1

        使用8051定時器的 圖像1

        Delay using 8051 Timers Image 2

        使用8051定時器的 圖片2

        電路圖 

        盡管外部元件(除了振蕩器)在產生延遲方面沒有什么作用,但我還是做了一個簡單的電路,我將用1秒的延遲來閃爍一個LED,這個延遲將在8051定時器的幫助下產生。

        Delay using 8051 Timers Circuit Diagram

        使用8051定時器的電路圖所需元件

        AT89C51單片機

        8051編程器

        編程電纜

        LED

        330Ω 電阻器

        2 - 10KΩ 電阻器

        10μF/16V 電容

        2 - 33pF 電容

        11.0592MHz晶體

        按鈕 

        電路設計

        這個電路的主要部件是AT89C51控制器。8051微控制器的復位電路是由一個按鈕、一個10KΩ電阻和一個10μF電容組成的。

        一個11.0592MHz的uartz晶體和兩個33pF的陶瓷電容組成了8051微控制器的振蕩器電路,并連接到第18和19腳。

        最后,一個LED通過一個330Ω的電阻連接到P2.0上,以顯示時間延遲。

        8051定時器 寄存器描述

        TMOD 寄存器

        TMOD Register

        上位數(TMOD.7至TMOD.4)用于配置定時器1,下位數(TMOD.3至TMOD.0)用于配置定時器0。

        GATE:如果該引腳為高電平,那么當微控制器的相應INT引腳出現中斷時,相應的定時器就會被激活。

        C/T:該引腳用于選擇定時器或計數器。如果該引腳為高電平,則作為一個計數器來計算外部事件。如果該引腳為低電平,則作為定時器使用,產生時間延遲。

        M1和M0:這些位用于選擇不同的定時器模式。

        M1 and M0 Bits

        M1和M0位

        13位定時器:該模式使用高字節的8位和低字節的其余5位。在這種模式下,定時器的值從0000H到1FFFH。

        16位定時器:這種模式最常用于產生時間延遲。在這種模式下,所有的16位都用于定時器,值從0000H到FFFH不等。

        如果數值XXXXH被加載到定時器寄存器中,那么產生的時間延遲等于[(FFFH-XXXXH+1)*(一個時鐘脈沖的周期)]。

        一個時鐘脈沖的時間周期等于1.085μs的11.0592MHz頻率。

        8位自動重新加載: 在這種模式下,初始值被加載到高字節,同樣的值被加載到低字節。計時器的值從00H到FFH。該模式用于設置串行通信的波特率。

        分割模式: 在這種模式下,定時器被分成兩個8位定時器。這些8位定時器可以從00H到FFH計數。這種模式用于我們需要額外的8位定時器或計數器的應用中。

        TCON寄存器

        這是一個特殊功能的寄存器,用于控制定時器的運行。在這個寄存器中,只有上面的幾位是用來控制定時器的,其余的位是用來控制中斷的。

        TCON Register

        TF1: 該位在定時器1溢出時被自動設置為1。

        TR1:該位用于啟用定時器1。該引腳必須為高電平才能啟用定時器1。

        TF0:當定時器0溢出時自動設置為1。

        TR0:在此位上置1,以啟用定時器0。

        使用8051定時器產生精確延時的步驟

        為了準確地產生時間延遲、用定時器的時鐘周期來劃分時間延遲。

        NNNN=時間延遲/1.085μs

        從65536中減去結果值。

        MMMM=65536-NNN

        將差值轉換為十六進制形式。

        MMMMd=XXYYh

        將此值加載到定時器寄存器中。

        TH=XXh

        TL=YYh

        產生1ms延遲的延遲函數

        為了產生1ms的延遲,使用上述步驟的計算方法如下。

        NNNN=1ms/1.085μs≈922。

        MMMM = 65536-922 = 64614

        64614的十六進制=FC66h

        用0xFC加載TH,用0x66加載TL

        下面的函數將使用8051定時器0產生一個1ms的延遲。

        使用定時器進行LED閃爍的代碼

        為了演示使用8051定時器的延遲功能,我將閃爍一個周期為2秒的LED,即LED將被打開1秒和關閉1秒。

        如何操作?

        首先將程序刻錄到AT89C51控制器上

        按照電路圖的要求進行連接

        打開電源,現在你可以觀察到LED的切換,有一定的時間延遲。

        如果你把輸出連接到示波器,你可以觀察到方波。

        電路應用

        在嵌入式系統應用中,我們需要精確的時間延遲。

        這個系統用來產生方波。

        在超聲波模塊應用中使用



        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 沙雅县| 三门县| 上林县| 内江市| 堆龙德庆县| 万全县| 仁寿县| 鹿邑县| 洛扎县| 高碑店市| 确山县| 大足县| 富蕴县| 塘沽区| 青浦区| 沁水县| 突泉县| 临漳县| 紫云| 庆城县| 巴中市| 松阳县| 永吉县| 中西区| 罗定市| 松溪县| 宁陕县| 兴安县| 稷山县| 东山县| 碌曲县| 遂平县| 卓尼县| 平泉县| 汕头市| 兴义市| 宽甸| 固安县| 三门县| 伊春市| 大余县|