久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 8453|回復(fù): 8
收起左側(cè)

51單片機(jī)的定時器

[復(fù)制鏈接]
ID:51090 發(fā)表于 2014-10-15 22:46 | 顯示全部樓層 |閱讀模式
以前學(xué)了好幾次單片機(jī),都是半途而廢,這次要把基礎(chǔ)打好點才行。
話說定時器還是很重要的。。。

對51單片機(jī)來說,其實定時器和計數(shù)器是一樣的東西,下面把它們統(tǒng)稱為定時器了。

51單片機(jī)有兩個定時器,它們的核心是兩個16位的加1計數(shù)器T0和T1,它們又被分為兩個8位的計數(shù)器TH0,TL0,TH1,TL1。

當(dāng)作為計數(shù)器使用時,計數(shù)脈沖來自外部引腳P3.4(T0)和P3.5(T1)。當(dāng)該腳的輸入信號發(fā)生由高到低的負(fù)跳變時,讀數(shù)器TH、TL的值就加1。
定時器其實也是計數(shù),只不過計數(shù)的脈沖來源的內(nèi)部時鐘。

程序是怎樣知道定時器的時間到了呢?用中斷啦。。。
定時器使用的是加法計數(shù),而且只在計數(shù)溢出時才申請中斷,因此,要實現(xiàn)自定義定時或計數(shù),需要自己計算計數(shù)的起點,并將它們填到TH、TL中。
也就是說,如果我要記1000個時鐘脈沖,我就將TH和TL的值設(shè)到距離最大值還差1000的位置。
假設(shè)計數(shù)的最大值是MAX(工作模式不同,這個值不同),則起點X的計算方法如下:
在計數(shù)方式下,X=MAX-計數(shù)值
在定時方式下,X=MAX-定時值/T,其中T為單片機(jī)的機(jī)器周期。如當(dāng)機(jī)器周期=0.5us時,如果定時器工作于模式0,MAX = 2^13 * 0.5us = 4.096ms;如果工作于模式1,則最大定時值為MAX = 2 ^ 16 * 0.5us = 32.768ms。
在注意的是,在溢出后,除了模式2之外,程序都要重新裝入初值!

使用定時器的步驟:
1. 指定工作模式,即TMOD寄存器;
2. 裝入初始值,即對TH和TL賦值;
3. 啟動定時器中斷,通過賦值IE和優(yōu)先級寄存器IP來實現(xiàn),如果不使用中斷,則忽略此步驟;
4. 啟動定時器,即置位TR0或TR1。

模式0:
此模式為13位計數(shù)器,使用TH及TL中的低5位組成,此模式主要是為了向前兼容而設(shè)計的;在此模式下,當(dāng)TL的低5位溢出時,向TH進(jìn)位,當(dāng)TH溢出時,計數(shù)器清零,同時TF置1,另外發(fā)出中斷請求。
模式1:
此模式為16位計數(shù)器,使用TH和TL中的所有位,此模式方便計算初值,而模式0中要由TH和TL中的5位組成一個13位的數(shù),麻煩。
模式2:
此模式是8位自動重新裝入的計數(shù)器,其中TH作為計數(shù)初值寄存器,初值在程序中設(shè)置,程序初始化時,TL=TH,當(dāng)TL溢出時,自動設(shè)置TL=TH,重新計數(shù),TF標(biāo)志置1,TH中的數(shù)不受影響。溢出信號還將送到串行通信系統(tǒng),產(chǎn)生串口通訊的波特率。
模式3:
此模式是將TL和TH分成兩個獨立的計數(shù)器。T1沒有模式3,只有T0有模式3。如果T0工作在方式3下,那么T1就只能工作在0、1、2方式下,因為TR1及TF1已經(jīng)被T0借用。

可以通過TMOD和TCON兩個寄存器控制它們。

TMOD
---------------------------------------------------------
                   用于T1          |         用于T0              
---------------------------------------------------------
GATE | C/T  |  M1  |  M0  |  GATE  |  C/T  |  M1  |  M0 |

TCON
------------------------------------------------------------
     用于定時/讀數(shù)器        |          用于中斷
------------------------------------------------------------
TF1  | TR1  | TF0  |  TR0  |  IE1  |  IT1  |  IE0  |  IT0  |
------------------------------------------------------------

TF是溢出的標(biāo)志,TR是運行控制位,當(dāng)置TR0=1時,定時器1即啟動。
IT是外部中斷觸發(fā)方式選擇位,0是低電平觸發(fā),1是負(fù)跳變觸發(fā)。
IE是外部中斷請求位。

定時/計數(shù)器有四種工作方式,TMOD中的M1和M0即為指定工作方式;
C/T決定是工作于定時還是計數(shù)方式;
GATE可控制定時器的啟動,當(dāng)GATE=0時,定時器僅由TR控制,當(dāng)GATE=1時,除TR置1外,還必須等待外部脈沖輸入端P3.4或P3.5有個高電平,定時器才能啟動。若外部輸入低電平,則定時器關(guān)閉,這樣可由外部控制定時器的啟停。

初值計算舉例(以T0為例):
模式0, 6MHz的晶振,單片機(jī)的機(jī)器周期為12/6MHz=2us=0.002ms,如果要定時1ms,則有算式:1ms = (2^13-X)*0.002,解出X=7692=0x1E0C,轉(zhuǎn)化為2進(jìn)制為1111000001100,這里面低5位要放到TL中,即TL0=01100=0xC,其余放到TH中,即TH0=11110000=0xF0;
模式1, 12MHz的晶振,單片機(jī)的機(jī)器周期為12/12MHz=1us=0.001ms,如果要定時10ms,則有算式: 10ms=(2^16-X)*0.001,解出X=55536=0xD8F0,則TH0=0xD8,TL0=0xF0;
模式3, 6MHz的晶振,機(jī)器周期為2us=0.002ms,如果要定時200us,則有200=(2^8-X)*2,解出X = 156 = 0x9C, 則TL0 = 0x9C

程序舉例:
T0工作于方式1,定時時間50ms,輸出周期為1000ms的方波,晶振為11.0592MHz
機(jī)器周期為12/11.0592us,最大值為2^16=65536,X=0x4C00
程序如下:

#include "reg51.h"

sbit P0_1 = P0^1;
char i = 0;

void main()
{
    TMOD = 0x01; //T0方式1
    TL0  = 0x00; //TL0的初值
    TH0  = 0x4C; //TH0的初值
    ET0  = 1;    //打開定時器0的中斷允許開關(guān)
    EA   = 1;    //開中斷
    TF0  = 0;
    TR0  = 1;  
    while(1);
}

void Int_T0() interrupt 1 using 2
{
    TL0 = 0x00; //重新裝入初值
    TH0 = 0x4C;
i++;
if (i==10)
    {
P0_1 = !P0_1;
i = 0;
}
}

下面這段中斷的程序還須進(jìn)一步研究,呵呵

回復(fù)

使用道具 舉報

ID:67472 發(fā)表于 2014-10-16 11:50 來自觸屏版 | 顯示全部樓層
謝謝樓主
回復(fù)

使用道具 舉報

ID:67422 發(fā)表于 2014-10-16 20:28 | 顯示全部樓層
謝謝分享
回復(fù)

使用道具 舉報

ID:92169 發(fā)表于 2015-10-18 15:19 | 顯示全部樓層
其實你的中斷服務(wù)函數(shù)里面盡量不要那么多,只要留下i++;后面的可以寫在while里面
回復(fù)

使用道具 舉報

ID:92169 發(fā)表于 2015-10-18 15:20 | 顯示全部樓層
我也在學(xué)習(xí)
回復(fù)

使用道具 舉報

ID:92785 發(fā)表于 2015-10-18 18:24 | 顯示全部樓層
謝謝樓主了!
回復(fù)

使用道具 舉報

ID:104763 發(fā)表于 2016-7-16 17:13 | 顯示全部樓層
樓主,關(guān)于定時器復(fù)用的有沒有
回復(fù)

使用道具 舉報

ID:120095 發(fā)表于 2016-7-17 15:42 | 顯示全部樓層
對于初學(xué)者非常的重要
回復(fù)

使用道具 舉報

ID:226737 發(fā)表于 2019-11-19 19:23 | 顯示全部樓層
謝謝你的分享!!
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 国产精品久久久久久吹潮 | 欧美成人激情 | 久久人人爽人人爽 | 国产视频一区二区 | 一级毛片色一级 | 一区二区成人 | 91精品久久 | 久草福利| 亚洲二区在线 | 亚洲日韩中文字幕一区 | 免费视频一区二区 | 日韩精品视频在线观看一区二区三区 | 一区二区三区国产 | av一二三区 | 99国产精品99久久久久久 | 精品国产免费人成在线观看 | 男人的天堂久久 | 91精品国产综合久久久久 | 久久久精彩视频 | 久久久不卡网国产精品一区 | 99久久视频 | 欧美精品 在线观看 | 欧美黄色一区 | 在线伊人网 | 欧美啊v在线观看 | 日韩中文字幕一区二区 | 久操国产| jlzzjlzz国产精品久久 | 精品久久久久久久人人人人传媒 | 最新日韩在线视频 | 亚洲欧美日韩精品久久亚洲区 | 日韩视频在线播放 | 成人精品一区二区三区中文字幕 | 亚洲一区二区三区四区五区中文 | 久久国产精品视频 | 久久久久无码国产精品一区 | 国产精品美女在线观看 | 国产午夜视频 | 国产午夜精品理论片a大结局 | 亚洲第一福利视频 | 中国一级特黄真人毛片免费观看 |