『原創(chuàng)』51單片機定時器那點事

認(rèn)識中斷

什么是中斷拍屑,中斷的概念很簡單,我們從一個生活中的例程引入坑傅。你正在家中看書僵驰,突然電話鈴響了,你放下書本裁蚁,去接電話矢渊,和來電話的人交談,然后放下電話枉证,回來繼續(xù)看你的書。這就是生活中的“中斷”的現(xiàn)象移必,就是正常的工作過程被外部的事件打斷了室谚。仔細(xì)研究一下生活中的中斷,對于我們學(xué)習(xí)單片機的中斷也很有好處崔泵。

中斷圖解

了解中斷結(jié)構(gòu)

我們先來了解了解51單片機的中斷原理秒赤。引起CPU中斷的根源稱為中斷源,中斷源向CPU 發(fā)出中斷請求憎瘸,CPU暫時中斷原來的事件A入篮,轉(zhuǎn)去處理事件B,對事件B處理完后幌甘,再轉(zhuǎn)過來繼續(xù)處理事件A的過程潮售。實現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)痊项。
除了單個中斷,還有多個中斷的概念酥诽,那就是中斷嵌套鞍泉,意思是說:如果單片機正在處理一個中斷程序時,此時肮帐,另一個中斷產(chǎn)生了咖驮,單片機將會停止當(dāng)前的中斷程序,當(dāng)新的中斷處理完后再回到剛停止的中斷程序出繼續(xù)執(zhí)行中斷训枢,執(zhí)行完這個中斷后托修,回到這個主程序繼續(xù)執(zhí)行。當(dāng)然中斷還有自己的中斷優(yōu)先級恒界,優(yōu)先級高的優(yōu)先執(zhí)行中斷诀黍,在單片機內(nèi)部有一個特殊的功能寄存器——中斷優(yōu)先級寄存器,通過設(shè)置中斷的優(yōu)先級仗处,當(dāng)兩個中斷同時出現(xiàn)時先執(zhí)行那個中斷程序眯勾。
而單片機的中斷的啟動和停止是由單片機內(nèi)部的一些特殊功能寄存器決定,后面我們在講如何通過寄存器的代碼編寫來控制中斷程序的啟動與停止婆誓。


51單片機5個中斷源的符號吃环、名稱及產(chǎn)生的條件如下。
INT0:外部中斷0洋幻,由P3.2端口線引入郁轻,低電平或下跳沿引起。
INT1:外部中斷1文留,由P3.3端口線引入好唯,低電平或下跳沿引起。
T0:定時器/計數(shù)器0中斷燥翅,由T0計滿回零引起骑篙。
T1:定時器/計數(shù)器l中斷,由T1計滿回零引起森书。
TI/RI:串行I/O中斷靶端,串行端口完成一幀字符發(fā)送/接收后引起。
52單片機多一個T2:定時器/計數(shù)器l中斷凛膏,由T1計滿回零引起
今天會用到T0和T1這兩個定時器

那么中斷和我們要講的定時器有什么關(guān)系呢杨名?關(guān)系大著呢

既然我們了解了中斷是怎么一回事了,那么接下來我們廢話少說猖毫,直接進(jìn)入今天的主題台谍,先來說說幾個特殊功能寄存器

中斷允許寄存器

中斷允許寄存器IE

在這里我就不一一說每一位了,想要了解的可以去找一下資料吁断,今天我們主要講幾個與定時器有關(guān)的位就行了

EA —全局中斷允許位

當(dāng)EA=1時為打開全局中斷控制
當(dāng)EA=0時為關(guān)閉全局中斷控制

ET1—定時器/計數(shù)器1中斷允許位

當(dāng)ET1=1時打開定時器/計數(shù)器T1
當(dāng)ET1=0時關(guān)閉定時器/計數(shù)器T1

ET0—定時器/計數(shù)器0中斷允許位

當(dāng)ET0=1時打開定時器/計數(shù)器T0
當(dāng)ET0=0時關(guān)閉定時器/計數(shù)器T0
注意一下ET0和ET1是兩個定時器/計數(shù)器

     還有一個中斷優(yōu)先級寄存器我們就不講了趁蕊,這次沒用到不到

51單片機內(nèi)部共有兩個16位可編程的定時器/計數(shù)器坞生,由高8位和低8位組成,也稱加1計數(shù)器介衔,其有兩個計數(shù)脈沖來源恨胚,分別為外部和內(nèi)部脈沖,這里不做解析炎咖,可以去查找一下資料赃泡,接下來我們再講兩個寄存器

定時器/計數(shù)器工作方式寄存器TMOD

c/T定時器模式和計數(shù)器模式

c/T=1計數(shù)器模式
c/T=0定時器模式

M1M0工作方式

M1=0 ,M0=0 方式0,為13位定時器/計數(shù)器
M1=0,M0=01方式2乘盼,為16位定時器/計數(shù)器
M1=1 ,M0=0 方式3升熊,8位初值自動重裝的8位定時器/計數(shù)器
M1=1 ,M0=1 方式4,僅適用于T0绸栅,分成兩個8位定時器/計數(shù)器

定時器/計數(shù)器控制寄存器TCON

TCON 寄存器用來控制定時器的啟级野、停和溢出,當(dāng)發(fā)生溢出時粹胯,此時計數(shù)已滿蓖柔,就會去觸發(fā)啟動中斷
說幾個內(nèi)部中斷位
TF1定時器1溢出標(biāo)志:當(dāng)計數(shù)器1計滿數(shù)溢出時,硬件會把TF1置為1风纠,并請求進(jìn)入中斷况鸣,此時程序會進(jìn)入中斷函數(shù)去執(zhí)行相應(yīng)功能,中斷結(jié)束后竹观,硬件會把TF1置為0镐捧,計數(shù)器就會重新計數(shù),當(dāng)再次溢出時再次進(jìn)入中斷程序臭增,除非停止或結(jié)束懂酱,不然會一直發(fā)生
TF0為定時器0的溢出標(biāo)志:其功能跟TF1一樣
TR1為定時器1運行控制位:用于啟動和關(guān)閉定時器1
TR0為定時器0運行控制位:用于啟動和關(guān)閉定時器0


好了定時器的構(gòu)造和原理就講到這,接下來我們通過代碼進(jìn)行分析解說

`
#include<reg52.h>
sbit led=P1^1; //聲明一個用于測試的led燈
unsigned char number;
void main()
{
led=0;
TMOD=0x01; //聲明定時器的工作方式M1=0誊抛,M0=1
//裝入初始值列牺,即計滿所裝的數(shù)時,就會溢出
TH0=(65536-45872)/256;
TL0=(65536-45872)/256;
EA=1; //開啟全局中斷允許
ET0=1; //開啟定時器0中斷允許
TR0=1; //開啟定時器0
while(1); //讓程序一直循環(huán)下去芍锚,中斷也不斷產(chǎn)生

}
//中斷函數(shù)
  void  T_Time() interrupt 2
  {
        TH0=(65536-45872)/256;//重裝初值
        TL0=(65536-45872)/256;
        number++;                                
        if(number==20)                    //當(dāng)number=20時昔园,即為1s
         {
           number=0;                         //把number置0,重新計數(shù)
       led=~led;                             //使led燈每隔1s亮一次
         }
  }        

通過上述函數(shù)分析可知其過程為:我們先給設(shè)定我們所需要的時間(即TH和TL的初值)并炮,通過一些寄存器的位來設(shè)定啟動定時器,當(dāng)單片機晶振每傳來一個脈沖甥郑,TH0和TL0的兩個8位寄存器逃魄,低位就會加1,當(dāng)?shù)臀粷M了后向高位加1澜搅,當(dāng)兩個8位都滿時伍俘,再輸入一個脈沖就會使其溢出邪锌,此時,TCON寄存器中的TF1或TF0癌瘾,看你用哪個定時器觅丰,就會置1,并觸發(fā)請求中斷妨退,然后進(jìn)入到中斷函數(shù)去執(zhí)行相應(yīng)的操作妇萄,執(zhí)行完后,返回繼續(xù)執(zhí)行中斷前的程序咬荷,以此類推冠句,如果沒有停止都將會一直下去

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市幸乒,隨后出現(xiàn)的幾起案子懦底,更是在濱河造成了極大的恐慌,老刑警劉巖罕扎,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聚唐,死亡現(xiàn)場離奇詭異,居然都是意外死亡腔召,警方通過查閱死者的電腦和手機杆查,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宴咧,“玉大人根灯,你說我怎么就攤上這事〔粽ぃ” “怎么了烙肺?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氧卧。 經(jīng)常有香客問我桃笙,道長,這世上最難降的妖魔是什么沙绝? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任搏明,我火速辦了婚禮,結(jié)果婚禮上闪檬,老公的妹妹穿的比我還像新娘星著。我一直安慰自己,他們只是感情好粗悯,可當(dāng)我...
    茶點故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布虚循。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪横缔。 梳的紋絲不亂的頭發(fā)上铺遂,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天,我揣著相機與錄音茎刚,去河邊找鬼襟锐。 笑死,一個胖子當(dāng)著我的面吹牛膛锭,可吹牛的內(nèi)容都是我干的粮坞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼泉沾,長吁一口氣:“原來是場噩夢啊……” “哼捞蚂!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起跷究,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤姓迅,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后俊马,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體丁存,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年柴我,在試婚紗的時候發(fā)現(xiàn)自己被綠了解寝。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,703評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡艘儒,死狀恐怖聋伦,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情界睁,我是刑警寧澤觉增,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站翻斟,受9級特大地震影響逾礁,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜访惜,卻給世界環(huán)境...
    茶點故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一嘹履、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧债热,春花似錦砾嫉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蚓峦。三九已至舌剂,卻和暖如春济锄,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背霍转。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工荐绝, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人避消。 一個月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓低滩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親岩喷。 傳聞我的和親對象是個殘疾皇子恕沫,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容