伦伦影院久久影视,天天操天天干天天射,ririsao久久精品一区 ,一本大道香蕉大久在红桃,999久久久免费精品国产色夜,色悠悠久久综合88,亚洲国产精品久久无套麻豆,亚洲香蕉毛片久久网站,一本一道久久综合狠狠老

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

冬至子 ? 來源:ZYuanBlogs ? 作者:激沄RagingWaves ? 2023-10-31 17:30 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前排提示

以下定時器的設(shè)置例程是以12MHz頻率運(yùn)行為模板的

STC15F2K60S2單片機(jī)內(nèi)部晶振頻率設(shè)置方法如下:

圖片

什么是中斷

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

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

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

1、你現(xiàn)在主要的任務(wù)是完成作業(yè),而且現(xiàn)在就需要進(jìn)行;

2、你需要洗你的衣服,但不是現(xiàn)在;

3、在洗衣機(jī)前一直等待的話,將阻礙你其他任務(wù)的進(jìn)行;

4、你設(shè)置了一個定時器,會提醒你進(jìn)行另一項任務(wù)。

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

圖片

將上面的情景套到單片機(jī)中的話:

1、主函數(shù)(main)是你現(xiàn)在正在做的事(做作業(yè));

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

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

4、定時器中斷可以暫停主函數(shù)的執(zhí)行,并進(jìn)入中斷函數(shù),待中斷函數(shù)完成后就回到主函數(shù),從暫停的位置繼續(xù)執(zhí)行。

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

怎樣使用中斷

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

圖片

打開定時器中斷

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

1、打開定時器;

2、設(shè)置定時器工作模式;

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

下面是設(shè)置定時50ms的例程:

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


  TMOD |= 0x09;
  TR0 = 1;


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

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

  • 第一步,打開定時器:

EA:中斷的總開關(guān),置1使中斷可用;

ET0:定時器0的開關(guān),置1使定時器0可用。

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

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

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

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

  • 第三步,設(shè)置定時器初值:

TH0:相當(dāng)于分,計滿(65536)時進(jìn)入中斷;

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

如果不設(shè)置TH0和TL0,則默認(rèn)從0開始計。

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

編寫中斷函數(shù)

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

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


  //balabalabala...
}

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

函數(shù)名后面的interrupt關(guān)鍵字可以看成中斷函數(shù)的標(biāo)志,帶這東西的就是中斷函數(shù)。

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

原來定時的時長已經(jīng)完成了,如果不重新設(shè)定時間,那么就不會再繼續(xù)定時。

interrupt后面接的數(shù)字是中斷源的序號:

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

中間其他數(shù)是其他中斷的序號。

要注意的是,中斷是有優(yōu)先級的,序號越高則優(yōu)先級越高。例如,定時器0與定時器1同時發(fā)生了中斷,則優(yōu)先執(zhí)行定時器0的中斷函數(shù),執(zhí)行完后再執(zhí)行定時器1的中斷函數(shù),最后回到主函數(shù)。

注意:

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

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

寫個程序試試看

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

例程:

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


int count = 0;                     //用于記錄進(jìn)入中斷次數(shù)的全局變量


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


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


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


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

圖片

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

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

1、中斷設(shè)置函數(shù)( Timer0_Start() )只需要進(jìn)行一次,若循環(huán)進(jìn)行則相當(dāng)于一直給TH、TL賦值,TH、TL不能計滿溢出則無法進(jìn)入中斷。

2、中斷里用來計數(shù)的變量(count)不能在中斷里進(jìn)行定義(例如把int count寫在中斷函數(shù)里),因?yàn)槊看瓮顺鲋袛嗪罄锩娴木植孔兞慷紩磺宄@個變量也就無法用于計數(shù)。

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

相比之下,使用軟件延時(delay)的話,要完成像上面這樣的多任務(wù)執(zhí)行可能就要寫比較復(fù)雜的程序了,因?yàn)樵谲浖訒r的期間單片機(jī)是無法執(zhí)行其他程序的。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6078

    文章

    45533

    瀏覽量

    672248
  • LED閃爍
    +關(guān)注

    關(guān)注

    0

    文章

    29

    瀏覽量

    10242
  • 定時器中斷
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    11775
  • 動態(tài)數(shù)碼管

    關(guān)注

    1

    文章

    11

    瀏覽量

    7678
  • 中斷函數(shù)
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    5662
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    定時器中斷跑馬燈

    定時器中斷跑馬燈 這里我們定時器方式再次實(shí)現(xiàn),定時器方式有效率高,定時準(zhǔn)確等優(yōu)點(diǎn)。一個編程經(jīng)
    發(fā)表于 08-09 22:58 ?6326次閱讀

    定時器中斷應(yīng)用

    定時器中斷應(yīng)用。
    發(fā)表于 03-15 14:56 ?3次下載

    stm32定時器中斷程序

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

    介紹中斷定時器特點(diǎn)及應(yīng)用

    中斷定時器
    的頭像 發(fā)表于 07-10 03:51 ?5923次閱讀
    介紹<b class='flag-5'>中斷</b>與<b class='flag-5'>定時器</b>特點(diǎn)及應(yīng)用

    51單片機(jī):開啟中斷定時器

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

    中斷(外部中斷0、外部中斷1、定時器中斷0、定時器中斷1)

    中斷TMOD:定時器/計數(shù)工作方式寄存TCON:定時器/計數(shù)控制寄存
    發(fā)表于 11-22 12:51 ?12次下載
    <b class='flag-5'>中斷</b>(外部<b class='flag-5'>中斷</b>0、外部<b class='flag-5'>中斷</b>1、<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>0、<b class='flag-5'>定時器</b><b class='flag-5'>中斷</b>1)

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

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

    STM32定時器中斷整理

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

    定時器中斷實(shí)現(xiàn)步驟及實(shí)例筆記

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

    定時器中斷實(shí)驗(yàn)

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

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

    (一)項目任務(wù)ü 任務(wù)1:定時方式控制LEDn 子任務(wù)1.1 兩種定期的認(rèn)識n 子任務(wù)1.2 掌握定期定時原理和計算
    發(fā)表于 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>概念的基本認(rèn)識...

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

    本文主要介紹常規(guī)定時器中的TIM3,實(shí)現(xiàn)定時器中斷的功能。STM32定時器的分類在其中一篇文章中已經(jīng)介紹過,本文主要內(nèi)容主要介紹定時器的基礎(chǔ)
    的頭像 發(fā)表于 01-12 17:29 ?9103次閱讀
    STM32<b class='flag-5'>定時器</b>的分類及<b class='flag-5'>中斷</b>原理

    如何設(shè)置基于定時器中斷

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

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

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

    定時器中斷程序怎么寫

    定時器中斷程序怎么寫? 在嵌入式系統(tǒng)中,定時器被廣泛應(yīng)用于各種任務(wù)。它們在實(shí)時系統(tǒng)中可用于輪詢,計時等任務(wù)。定時器可以被配置為周期性定時器
    的頭像 發(fā)表于 09-01 10:17 ?3119次閱讀