色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

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

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

3天內不再提示

用簡單明了的方法教你使用定時器中斷

冬至子 ? 來源:ZYuanBlogs ? 作者:激沄RagingWaves ? 2023-10-31 17:30 ? 次閱讀

前排提示

以下定時器的設置例程是以12MHz頻率運行為模板的

STC15F2K60S2單片機內部晶振頻率設置方法如下:

圖片

什么是中斷

首先,我們先來模擬一個情景:

在某天的晚上,你正在為今晚截止上交的作業絞盡腦汁,同時你還有一桶的衣服沒洗(嗯,假設是個懶癌,假設)**。但有一個好消息,洗衣機還有5分鐘就洗完了上一位同學的衣服,如果你足夠及時的話就能夠用上洗衣機。因此,你用手機設了一個5分鐘后的提醒,時間一到你就暫停做作業,并馬上去使用洗衣機洗衣服,完成這項任務后回去繼續寫作業。

分析一下上面的情景,我們可以得到以下信息

1、你現在主要的任務是完成作業,而且現在就需要進行;

2、你需要洗你的衣服,但不是現在;

3、在洗衣機前一直等待的話,將阻礙你其他任務的進行;

4、你設置了一個定時器,會提醒你進行另一項任務。

得到這些信息,對于定時器中斷我們就很好理解了。

圖片

將上面的情景套到單片機中的話:

1、主函數(main)是你現在正在做的事(做作業);

2、中斷函數是你另外需要做的事(洗衣服)但不是現在需要做的;

3、主函數需要一直執行,而且無法與其他函數同時執行(只有一個線程);

4、定時器中斷可以暫停主函數的執行,并進入中斷函數,待中斷函數完成后就回到主函數,從暫停的位置繼續執行。

如果你理解了什么是中斷,那么請接著往下看。

怎樣使用中斷

使用定時器中斷分為兩部分:打開定時器中斷與編寫中斷函數,下面以定時器0為例,講解如何編寫和使用。

圖片

打開定時器中斷

打開定時器中斷分為以下三個步驟:

1、打開定時器;

2、設置定時器工作模式;

3、設置定時時長(設置初值)。

下面是設置定時50ms的例程:

void Timer0_Start()                //中斷設置函數
{
  EA = 1;
  ET0 = 1;


  TMOD |= 0x09;
  TR0 = 1;


  TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;
}

我們按上面所隔開的三部分,來逐句分析上面的程序:

  • 第一步,打開定時器:

EA:中斷的總開關,置1使中斷可用;

ET0:定時器0的開關,置1使定時器0可用。

我們可以這樣理解,EA家里的總電閘,ET0是家里其中一盞電燈的開關,只有打開了EA,ET0才能用;只用ET0打開了,定時器0才能用。

  • 第二步,設置定時器的工作模式:

TMOD:定時器共有4種工作模式(模式0~模式3),其中模式1較為常用,具體的設置方法以后更新,本文只講較常用的模式。

TR0:控制TR0的運行,置1時定時器開始運行(ET0是使定時器0能用,并不代表著定時器0已經開始工作)。

  • 第三步,設置定時器初值:

TH0:相當于分,計滿(65536)時進入中斷;

TL0:相當于秒,計滿(65536)時分(TH0)加一。

如果不設置TH0和TL0,則默認從0開始計。

其中,50000為計時時長(50000微妙,即50毫秒)具體的為啥醬紫設置將在下篇細講。

編寫中斷函數

中斷函數的編寫與一般子函數的編寫差別不大:

void xxx() interrupt 1          //中斷函數
{
  TH0 = (65536-50000)/256;
  TL0 = (65536-50000)%256;


  //balabalabala...
}

函數名同樣是可以自定義的,不過中斷函數并沒有返回值與參數

函數名后面的interrupt關鍵字可以看成中斷函數的標志,帶這東西的就是中斷函數。

進入中斷后,首先要做的就是將TH0、TL0恢復初值(如果這個中斷只執行一次,那么可以忽略這個步驟)。

原來定時的時長已經完成了,如果不重新設定時間,那么就不會再繼續定時。

interrupt后面接的數字是中斷源的序號:

  • 1 為定時器0;*
  • 3 為定時器1;
  • 有的單片機還有定時器2,定時器2的序號為5。*

中間其他數是其他中斷的序號。

要注意的是,中斷是有優先級的,序號越高則優先級越高。例如,定時器0與定時器1同時發生了中斷,則優先執行定時器0的中斷函數,執行完后再執行定時器1的中斷函數,最后回到主函數。

注意:

上面所使用的ET0、TR0、TH0、TL0中,最后的數字代表著定時器0,

如果使用定時器1,相應的就改成ET1、TR1、TH1、TL1。

寫個程序試試看

上面就是定時器中斷的設置與使用了,我們來試試用定時器做一個LED閃爍的小程序吧。

例程:

#include < reg52.h >
#define TIME_US 50000              //中斷間隔,50000即每隔50ms發生一次中斷
#define LED P1                     //LED與單片機所連接的引腳


int count = 0;                     //用于記錄進入中斷次數的全局變量


void Timer0_Start()                //中斷設置函數
{
  EA = 1;
  ET0 = 1;
  TMOD |= 0x09;
  TR0 = 1;
  TH0 = (65536-TIME_US)/256;
  TL0 = (65536-TIME_US)%256;
}


void main()
{
  Timer0_Start();                  //調用中斷設置函數,若不調用則與沒寫沒有區別
  LED = 0x00;                      //設置LED的初值
  while(1);                        //死循環,讓程序在此停止,否則將一直循環令LED為0x00
}


void Timer0() interrupt 1          //中斷函數
{
  TH0 = (65536-TIME_US)/256;
  TL0 = (65536-TIME_US)%256;


  count++;                         //進入了一次中斷,變量count加1
  if(count == 20)                  //如果進入了20次中斷,即過了1秒(50ms*20=1s),
  {
    count = 0;                     //將count歸0,下次中斷開始重新計數
    LED = ~LED;                    //將LED進行取反,原來亮的就變滅,原來滅的就變亮
  }
}

圖片

(程序下載效果,LED亮一秒滅一秒)

在使用中斷時,有幾個需要注意的地方:

1、中斷設置函數( Timer0_Start() )只需要進行一次,若循環進行則相當于一直給TH、TL賦值,TH、TL不能計滿溢出則無法進入中斷。

2、中斷里用來計數的變量(count)不能在中斷里進行定義(例如把int count寫在中斷函數里),因為每次退出中斷后里面的局部變量都會被清除,這個變量也就無法用于計數。

使用中斷的好處是,你可以在上面主函數的while循環里執行其他程序,且不影響LED閃爍的執行,可以完成多項任務(例如動態數碼管與LED閃爍同時工作)。

相比之下,使用軟件延時(delay)的話,要完成像上面這樣的多任務執行可能就要寫比較復雜的程序了,因為在軟件延時的期間單片機是無法執行其他程序的。

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

    關注

    6035

    文章

    44554

    瀏覽量

    634663
  • LED閃爍
    +關注

    關注

    0

    文章

    29

    瀏覽量

    9822
  • 定時器中斷
    +關注

    關注

    0

    文章

    49

    瀏覽量

    11167
  • 動態數碼管
    +關注

    關注

    1

    文章

    11

    瀏覽量

    7473
  • 中斷函數
    +關注

    關注

    0

    文章

    13

    瀏覽量

    5282
收藏 人收藏

    評論

    相關推薦

    定時器中斷跑馬燈

    定時器中斷跑馬燈 這里我們定時器方式再次實現,定時器方式有效率高,定時準確等優點。一個編程經
    發表于 08-09 22:58 ?5996次閱讀

    定時器中斷應用

    定時器中斷應用。
    發表于 03-15 14:56 ?3次下載

    stm32定時器中斷程序

    STM32的定時器是個強大的模塊,定時器使用的頻率也是很高的,定時器可以做一些基本的定時,還可以做PWM輸出或者輸入捕獲功能。 以下是進行stm32
    發表于 10-12 16:59 ?1.3w次閱讀

    介紹中斷定時器特點及應用

    中斷定時器
    的頭像 發表于 07-10 03:51 ?5428次閱讀
    介紹<b class='flag-5'>中斷</b>與<b class='flag-5'>定時器</b>特點及應用

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

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

    "外部中斷,定時器中斷的理解"

    外部中斷外部中斷一般是由計算機外設發出的中斷請指求,如:鍵盤中斷、打印機中斷定時器
    發表于 11-22 13:21 ?16次下載
    "外部<b class='flag-5'>中斷</b>,<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>的理解"

    STM32定時器中斷整理

    目錄1、系統異常中斷2、外部中斷(全部)3、優先級5、如何開關中斷示例6、搶斷優先級、響應優先級說明7、定時器說明7.1基本定時器7.2高級
    發表于 11-23 18:06 ?3次下載
    STM32<b class='flag-5'>定時器</b>與<b class='flag-5'>中斷</b>整理

    定時器中斷實現步驟及實例筆記

    定時器中斷實現步驟使能定時器時鐘。 RCC_APB1PeriphClockCmd();初始化定時器,配置ARR,PSC。 TIM_TimeBaseInit()
    發表于 11-23 18:06 ?13次下載
    <b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>實現步驟及實例筆記

    定時器中斷實驗

    定時器中斷實驗定時器中斷實驗一:51單片機定時器原理(1)51單片機定時/計數
    發表于 11-24 17:21 ?12次下載
    <b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>實驗

    利用定時器中斷方式控制led燈的閃爍速度_項目四 定時器中斷概念的基本認識...

    (一)項目任務ü 任務1:定時方式控制LEDn 子任務1.1 兩種定期的認識n 子任務1.2 掌握定期定時原理和計算
    發表于 11-26 12:06 ?16次下載
    利用<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>方式控制led燈的閃爍速度_項目四 <b class='flag-5'>定時器</b>和<b class='flag-5'>中斷</b>概念的基本認識...

    STM32CubeMX_定時器中斷_PWM

    中斷和PWM的使用. 仍用NUCLEO-F767ZI的板子, 使用定時器3的中斷實現LED2(Blue, PB7)的翻轉, 然后剛好LED2的PB7又是TIM4_CH2, 可以PWM
    發表于 12-05 13:51 ?13次下載
    STM32CubeMX_<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>_PWM

    STM32定時器的分類及中斷原理

    本文主要介紹常規定時器中的TIM3,實現定時器中斷的功能。STM32定時器的分類在其中一篇文章中已經介紹過,本文主要內容主要介紹定時器的基礎
    的頭像 發表于 01-12 17:29 ?7276次閱讀
    STM32<b class='flag-5'>定時器</b>的分類及<b class='flag-5'>中斷</b>原理

    如何設置基于定時器中斷

    電子發燒友網站提供《如何設置基于定時器中斷.zip》資料免費下載
    發表于 02-06 14:44 ?0次下載
    如何設置基于<b class='flag-5'>定時器</b>的<b class='flag-5'>中斷</b>

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

    定時器中斷是由單片機中的定時器溢出而申請的中斷。51單片機中有兩個定時器T0和T1。STM32中共有11個
    的頭像 發表于 07-23 09:45 ?6145次閱讀

    定時器中斷程序怎么寫

    定時器中斷程序怎么寫? 在嵌入式系統中,定時器被廣泛應用于各種任務。它們在實時系統中可用于輪詢,計時等任務。定時器可以被配置為周期性定時器
    的頭像 發表于 09-01 10:17 ?1953次閱讀
    主站蜘蛛池模板: beeg日本高清xxxx| 欧美最猛12teevideos| 成人免费视频一区| 色小姐.com| 国产亚洲精品久久久999密臂| 一本道综合久久免费| 人与畜禽CROPROATION免费| 国精产品砖一区二区三区糖心 | 又色又爽又黄gif动态视频| 试看做受120秒免费午夜剧场| 美国色吧影院| 黄色三级三级免费看| 国产精品18久久久久网站| avav去吧| 在线涩涩免费观看国产精品| 亚洲成片在线看| 日本人奶水中文影片| 九九热久久只有精品2| 国产精品一区二区在线播放| 99欧美精品| 夜色福利院在线看| 无码天堂亚洲内射精品课堂| 女人操男人| 久久久久久久久a免费| 激情内射亚洲一区二区三区| 国产精品igao视频网网址| 99久久亚洲精品影院| 伊人精品影院| 一本之道高清视频在线观看| 亚洲第一综合天堂另类专| 乳交高H糙汉宠文| 免费乱理伦片在线观看八戒| 久久热国产在线视频| 精品国产成人AV在线看| 果冻传媒免费观看| 观看免费做视频| 动漫美女和男人下载| 99视频这里只有精品| 99精品国产福利在线观看| bl肉yin荡受np各种play| 99精品视频在线观看re|