<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          延遲使用8051定時器

          作者: 時間:2023-04-10 來源:電子產(chǎn)品世界 收藏

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

          本文引用地址:http://www.ex-cimer.com/article/202304/445432.htm

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

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

          項目背后的原理

          大多數(shù)的控制器都有內(nèi)置的定時器。這些定時器不僅用于產(chǎn)生時間延遲,而且還用于計數(shù)目的。當(dāng)一個動作或事件發(fā)生時,計數(shù)器的值會遞增1。

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

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

          Delay using 8051 Timers Image 1

          使用8051定時器的 圖像1

          Delay using 8051 Timers Image 2

          使用8051定時器的 圖片2

          電路圖 

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

          Delay using 8051 Timers Circuit Diagram

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

          AT89C51單片機

          8051編程器

          編程電纜

          LED

          330Ω 電阻器

          2 - 10KΩ 電阻器

          10μF/16V 電容

          2 - 33pF 電容

          11.0592MHz晶體

          按鈕 

          電路設(shè)計

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

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

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

          8051定時器 寄存器描述

          TMOD 寄存器

          TMOD Register

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

          GATE:如果該引腳為高電平,那么當(dāng)微控制器的相應(yīng)INT引腳出現(xiàn)中斷時,相應(yīng)的定時器就會被激活。

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

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

          M1 and M0 Bits

          M1和M0位

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

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

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

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

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

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

          TCON寄存器

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

          TCON Register

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

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

          TF0:當(dāng)定時器0溢出時自動設(shè)置為1。

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

          使用8051定時器產(chǎn)生精確延時的步驟

          為了準(zhǔn)確地產(chǎn)生時間延遲、用定時器的時鐘周期來劃分時間延遲。

          NNNN=時間延遲/1.085μs

          從65536中減去結(jié)果值。

          MMMM=65536-NNN

          將差值轉(zhuǎn)換為十六進制形式。

          MMMMd=XXYYh

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

          TH=XXh

          TL=YYh

          產(chǎn)生1ms延遲的延遲函數(shù)

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

          NNNN=1ms/1.085μs≈922。

          MMMM = 65536-922 = 64614

          64614的十六進制=FC66h

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

          下面的函數(shù)將使用8051定時器0產(chǎn)生一個1ms的延遲。

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

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

          如何操作?

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

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

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

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

          電路應(yīng)用

          在嵌入式系統(tǒng)應(yīng)用中,我們需要精確的時間延遲。

          這個系統(tǒng)用來產(chǎn)生方波。

          在超聲波模塊應(yīng)用中使用



          關(guān)鍵詞: 8051 微控制器 定時器 延時

          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();