吴忠躺衫网络科技有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機內部定時器和中斷系統以及編寫第一個簡單的定時器實驗程序

GReq_mcu168 ? 來源:未知 ? 作者:李倩 ? 2018-05-07 11:33 ? 次閱讀

上講通過講述用單片機控制一個外部的LED閃爍實驗來向讀者介紹了單片機的工作原理與開發流程。這一講將介紹單片機內部非常重要的兩個資源——定時/ 計數器和中斷系統。通過該講,讀者可以掌握定時器的工作原理和單片機的中斷系統。

從而設計定時器計數程序和中斷服務程序。

一、原理簡介

首先讓我們舉鬧鐘為例,將它定時在一分鐘后鬧鈴,這就需要秒針走一圈(60 次)。即一分鐘時間轉化為秒針走的次數,也就是計數的次數,計數到了60 次然后鬧鈴,而每一次計數的時間是1 秒。

單片機內部的定時/ 計數器跟鬧鐘類似,可以通過編程來設定要定時的時間、定時時間到了進行相應的操作。那么在單片機內部計數一次的時間是多少呢,51 單片機輸入的時鐘脈沖是由晶體振蕩器的輸出經12 分頻后得到的,所以定時器也可看作是對計算機機器周期的計數器。因為每個機器周期包含12 個振蕩周期,故每一個機器周期定時器加1,可以把輸入的時鐘脈沖看成機器周期信號。故其頻率為晶振頻率的1/12。如果晶振頻率為12MHz,則定時器每接收一個輸入脈沖的時間剛好為1μs。在本實驗套件中采用的是11.0592M 的晶振,故每接收一個輸入脈沖的時間約為1.085μs。實現精確定時在實際項目應用中非常重要,因為往往需要用到精確定時一段時間,然后定時時間到的時刻做相應的任務。

那如何編程實現定時時間呢?首先先簡單介紹下本實驗板上單片機(STC89C52)內的定時器資源。STC89C52 內有三個定時/ 計數器, 分別為T0、T1 和T2。其中T0、T1 工作方式一樣,一并介紹。

T2 的工作方式稍有區別,這里不做介紹,實驗套件光盤中有實際應用程序。同時,單片機中的定時器和計數器是復用的,計數器是記錄外部脈沖的個數,而定時器則是由單片機內部時鐘提供的一個非常穩定的計數源。本講中,以T0、T1 作為定時器來進行實例介紹使用。

了解了單片機內的定時器資源后,接下來我們來對定時器寄存器進行詳細介紹。TMOD(見表1)、TCON(見表3)與定時器T0、定時器T1 間通過內部總線及邏輯電路連接,TMOD 用于設置定時器的工作方式,TCON 用于控制定時器的啟動、停止,標志定時器的溢出和中斷情況。當設置了定時器的工作方式并啟動定時器工作后,定時器就按被設定的工作方式獨立工作,不再占用CPU 的操作時間,只有在計數器計滿溢出時才可能中斷CPU 當前的操作。

表1 TMOD寄存器

表中各位(從左至右為從高位到低位)含義如下。

TMOD 的低4 位為定時器0 的方式字段,高4位為定時器1 的方式字段,它們的含義完全相同。

M1 和M0 :工作方式控制位,其定義如表2 所示( 其中i=0,1)。

表2 定時器工作方式控制位

GATE :門控位。當GATE=0 時,軟件控制位TR0 或TR1 置1 即可啟動定時器。

TR0 或TR1 置0 即可停止定時器工作;當GATE=1 時,軟件控制位TR0 或TR1 需置1,同時還需

值得注意的是TMOD 寄存器不能位尋址,只能用字節指令設置高4 位定義定時器1 上的工作方式或低4 位定義定時器0 的工作方式。而且在復位時,TMOD 所有位均置0。

表3 TCON寄存器

表中各位(從左至右為從高位到低位)含義如下。

(1) TFl :定時器1 溢出標志位。當定時器1 計滿數產生溢出時,由硬件自動置TF1=1, 向CPU發出定時器1 的中斷請求,在中斷允許時響應。進入中斷服務程序后,由硬件自動清0。在中斷屏蔽時,TF1 可作查詢測試用,此時只能由軟件清0。

(2) TR1 :定時器1 運行控制位。由軟件置1 或清0 來啟動或關閉定時器1。

當GATE=l,且

(3) TF0 :定時器0 溢出標志位。其功能及操作情況同TF1。

(4) TR0 :定時器0 運行控制位。其功能及操作情況同TR1。

(5) IE1 :外部中斷1(

(6) IT1 :外部中斷1 觸發方式選擇位。

(7) IE0 :外部中斷0(

(8) IT0 :外部中斷0 觸發方式選擇位。

值得注意的是TCON 中的低4 位用于控制外部中斷,與定時器/ 計數器無關,在以后的講座中會提及。當系統復位時,TCON 的所有位也均清0。

在上文中提到定時器溢出和中斷,什么是定時器溢出呢?我們可以這樣理解:往一個盆中滴水,水滴持續落下,盆中的水持續變滿,最終會有一滴水使得盆中的水滿了(這相當于計數到最大值)。這個時候如果再有一滴水落下,這時水就會漫出來,這就是“溢出”。當然,水溢出是流到地上,而定時器溢出后將使得TF0 變為“1”。一旦TF0 由0 變成1,就會產生中斷。中斷就是由于某個事件的發生,CPU 暫停當前正在執行的程序,轉而執行處理該事件的一個程序。該程序執行完成后,CPU 接著執行被暫停的程序的這樣一個過程。這正如我們本來在做某事,有人過來請求幫忙,我們停下手中的活去幫忙,完事之后回來接著做原來的事情。根據中斷引發的不同,或者CPU 響應中斷的不同條件,也可以把中斷劃分為可屏蔽中斷(也就是說我們可以拒絕幫別人忙,繼續做自己的事情)和不可屏蔽中斷(事情做累了,必須休息)兩種。

了解了中斷原理之后,我們來看中斷允許控制寄存器IE(見表4)和中斷優先寄存器IP(見表5)。

表4 IE寄存器

EA:中斷允許總控制位。EA=0,禁止所有中斷;EA=1,開放所有中斷,但是否允許各中斷源的中斷請求,還要取決于各中斷源的中斷允許控制位的狀態。這點要注意,初學者往往容易忘了開放所有中斷,從而導致沒法進入中斷源。

ET2 :時器/ 計數器T2 的中斷允許位。

ES :串行口的中斷允許位。

ET1 :定時器/ 計數器T1 的中斷允許位。

EX1 :外部中斷1(INT1) 的中斷允許位。

ET0 :定時器/ 計數器T0 的中斷允許位。

EX0 :外部中斷0(INT0) 的中斷允許位。

以上7 個中斷允許控制位為0 時,禁止中斷,為1 時允許中斷。

表5 IP寄存器

PT2 :定時器/ 計數器T1 中斷優先級控制位。

PS :串行口中斷優先級控制位。

PT1 :定時器/ 計數器T1 中斷優先級控制位。

PX1 :外部中斷1 優先級控制位。

PT0 :定時器/ 計數器T0 中斷控制位。

PX0 :外部中斷0 中斷優先級控制位。

以上6 個中斷優先級控制位分別為“0”時為低級中斷,為“1”時為高級中斷。如果幾個同一優先級的中斷源同時向CPU 申請中斷,CPU 通過內部順序查詢邏輯電路,按自然優先級順序確定該響應哪個中斷請求。自然優先級由硬件形成,其優先級別從高到底為外部中斷0、定時器/ 計數器T0、外部中斷1、定時器/ 計數器T1、串行口中斷、定時器/ 計數器T2。

至此,對定時器控制相關的重要寄存器都介紹完畢了,接下來通過編寫程序來進行驗證實踐。

二、電路詳解

此講采用和上講一樣的電路,在此不做贅述(見圖1)。

圖1 定時器應用實驗電路圖

三、程序設計

定時器0 應用測試程序( 控制D1 閃爍)。

#include (1)

#define led P0_0 (2)

unsigned char count=0; (3)

void main(void) (4)

{

TMOD=0X01; (5)

TH0=(65536-50000)/256; (6)

TL0=(65536-50000)%256; (7)

EA=1; (8)

ET0=1; (9)

TR0=1; (10)

PT0=1; (11)

while(1) ; (12)

}

void timer0(void) interrupt 1 (13)

{

TH0=(65536-50000)/256; (14)

TL0=(65536-50000)%256; (15)

count++; (16)

if(count==10) (17)

{

count=0; (18)

led=!led; (19)

}

}

1. 程序詳細說明:

(1)頭文件包含。程序接下來調用的P0_0 就是該頭文件中定義好的一個寄存器地址。在對單片機內部的寄存器操作之前,應申明其來處,有興趣的讀者可以看看AT89X52.h 文件中的內容。

(2)宏定義led,便于直觀理解也便于程序修改,將P0_0 口命名為led,這樣在程序中就可以用led代替P0_0 口進行操作。

(3)定義一個8 位的全局變量。

(4)主函數入口。主函數不傳遞參數也不返回值。

(5)設定定時器0 工作在模式1,為16 位的計數器。

(6)定時器高8 位賦初值。對256 取整。

(7)定時器低8 位賦初值。對256 取余。

(8)開總中斷。

(9)開定時器0 中斷。

(10)定時器0 啟動,開始計數。

(11)設置開定時器0 中斷為優先中斷。

(12)死循環,等待中斷。

(13)定時器0 中斷服務函數入口。

(14)定時器高8 位賦初值。對256 取整。

(15)定時器低8 位賦初值。對256 取余。

(16)對變量count 進行加1 操作。

(17)如果count 增長到10。

(18)count 變量清0。

(19)led 輸出取反。

2. 程序流程圖與實驗現象

程序流程如圖2 所示。經編譯下載程序到單片機內運行后,可以看到實驗板上P0_0 口外接的LED 燈有規律的一亮一滅的閃爍見圖3。亮滅的時間可以計算為10×50000×1.085μs=542.5ms。

實際的時間要比這稍多幾個ms,這是因為沒有把條件判斷和程序調用的指令時間算在內。在要求非常精確的場合,應當實際微調。

圖2 主程序和中斷服務函數流程圖

圖3 實驗現象效果

四、總結

本講主要介紹了51 單片機內部定時器和中斷系統以及編寫第一個簡單的定時器實驗程序。通過該講,大家可以發現單片機內的定時器和中斷系統并不難學,只要記住應用的相關操作步驟多進行幾次實踐就可以很熟練的掌握這些資源的用法。鑒于本講的理論內容較多,希望讀者多*時間記下或者熟悉。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 51單片機
    +關注

    關注

    274

    文章

    5705

    瀏覽量

    124294
  • 定時器
    +關注

    關注

    23

    文章

    3255

    瀏覽量

    115367

原文標題:跟我學51單片機(二):單片機內部定時/計數器和中斷系統

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    51單片機定時器中斷的介紹

    夠有幫助。 定時器的功能以及定時器的結構 定時器的功能 其實就是單片機
    的頭像 發表于 09-11 09:54 ?2946次閱讀
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>和<b class='flag-5'>中斷</b>的介紹

    MCS-51單片機內部定時器計數及其應用

    MCS-51單片機內部定時器計數及其應用
    發表于 09-19 13:21 ?159次下載

    51單片機定時器中斷例程

    這個兩rar文件是關于定時器0使用的例子, 也是我第一次使用定時器0做的實驗程序: 1. T0
    發表于 05-26 17:06 ?397次下載

    8051單片機定時器溢出中斷誤差補償示例

    單片機內部般有若干個定時器。如8051單片機內部定時器0和定時器1。在
    發表于 06-14 15:52 ?3176次閱讀

    51單片機——定時器

    cpu資源,因為空輪詢。本篇博客將使用51單片機內置的定時器+中斷系統完成循環左移LED燈。想
    發表于 11-11 16:36 ?40次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>——<b class='flag-5'>定時器</b>

    c語言控制51單片機模擬實驗 定時器/計數、外部中斷實驗

    中斷的方法。51單片機設置晶振頻率為11.0592MHz。將keil生成的.hex程序導入到Proteus的單片機中便可以仿真運行。
    發表于 11-11 17:06 ?21次下載
    c語言控制<b class='flag-5'>51</b><b class='flag-5'>單片機</b>模擬<b class='flag-5'>實驗</b>  <b class='flag-5'>定時器</b>/計數<b class='flag-5'>器</b>、外部<b class='flag-5'>中斷</b><b class='flag-5'>實驗</b>

    51單片機定時器中斷

    定時器介紹:51單片機定時器屬于單片機內部資源,其電路連接和運轉均在
    發表于 11-11 19:36 ?7次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>

    51單片機定時器中斷(數碼管讀秒+LED閃爍)

    51單片機兩種不同的定時器中斷程序實例關于51單片機
    發表于 11-12 09:21 ?88次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>(數碼管讀秒+LED閃爍)

    51單片機 中斷定時器

    51單片機,擁有兩定時器,用來中斷計數,分別是T0和T1。而52單片機
    發表于 11-12 10:51 ?14次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b> <b class='flag-5'>中斷</b>與<b class='flag-5'>定時器</b>

    51單片機定時器中斷

    定時器介紹:51單片機定時器屬于單片機內部資源,其電路連接和運轉均在
    發表于 11-20 20:36 ?15次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>

    51單片機:開啟中斷定時器

    ;打開了中斷開關只是完成了半,還需要定時器控制寄存:使用方法也是和中斷寄存器樣,
    發表于 11-22 12:06 ?12次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>:開啟<b class='flag-5'>中斷</b>和<b class='flag-5'>定時器</b>

    STC51定時器定時器中斷

    1.定義定時器介紹: 51單片機定時器屬于單片機內部資源,其電路的連接和運轉均在
    發表于 11-22 14:51 ?5次下載
    STC<b class='flag-5'>51</b><b class='flag-5'>定時器</b>與<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>

    定時器中斷實驗

    定時器中斷實驗定時器中斷實驗
    發表于 11-24 17:21 ?12次下載
    <b class='flag-5'>定時器</b><b class='flag-5'>中斷</b><b class='flag-5'>實驗</b>

    定時器中斷是什么意思,定時器中斷的工作原理

    定時器中斷是由單片機中的定時器溢出而申請的中斷51單片機
    的頭像 發表于 07-23 09:45 ?6345次閱讀

    定時器中斷程序怎么寫

    達到預定的定時時間時,它會產生個中斷信號,稱為定時器中斷。在本文中,我們將詳細了解如何編寫
    的頭像 發表于 09-01 10:17 ?2030次閱讀
    百家乐正品地址| 机器百家乐软件| 百家乐官网游戏怎么刷钱| 乐天堂百家乐娱乐城| 反赌百家乐官网的玩法技巧和规则| 中国德州扑克比赛| 真人百家乐分析软件是骗局| 百家乐官网游戏机图片| bet365在线体育投注| 网上百家乐游戏下载| 奥斯卡百家乐官网的玩法技巧和规则| 金宝博滚球| 威尼斯人娱乐城首存优惠| 百家乐网络视频游戏| 榆次百家乐官网的玩法技巧和规则 | 百家乐高手论坛| 闲和庄百家乐官网的玩法技巧和规则| 圣淘沙百家乐官网现金网| 188金宝博| 扬中棋牌游戏中心| 威尼斯人娱乐城存款多少起存| 百家乐l23| 百家乐规则好学吗| 吉利百家乐官网的玩法技巧和规则| 百家乐官网d博彩论坛| 360博彩通| 钻石国际娱乐| 大发888娱乐游戏--| 榆次百家乐的玩法技巧和规则| 百家乐视频游戏帐号| 24是吉还是凶| 南京百家乐官网电| 沙龙百家乐官网赌场娱乐网规则| 谈谈百家乐官网赢钱技巧| 百家乐官网数据程序| 百家乐官网作弊手段| 星河国际娱乐场| 金赞娱乐| 苍溪县| 破解百家乐官网打路单| 百家乐官网小77论坛|