女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

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

用簡(jiǎn)單明了的方法教你使用定時(shí)器中斷

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

前排提示

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

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

圖片

什么是中斷

首先,我們先來模擬一個(gè)情景:

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

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

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

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

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

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

得到這些信息,對(duì)于定時(shí)器中斷我們就很好理解了。

圖片

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

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

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

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

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

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

怎樣使用中斷

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

圖片

打開定時(shí)器中斷

打開定時(shí)器中斷分為以下三個(gè)步驟:

1、打開定時(shí)器;

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

3、設(shè)置定時(shí)時(shí)長(zhǎng)(設(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;
}

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

  • 第一步,打開定時(shí)器:

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

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

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

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

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

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

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

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

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

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

其中,50000為計(jì)時(shí)時(shí)長(zhǎng)(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ù)初值(如果這個(gè)中斷只執(zhí)行一次,那么可以忽略這個(gè)步驟)。

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

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

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

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

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

注意:

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

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

寫個(gè)程序試試看

上面就是定時(shí)器中斷的設(shè)置與使用了,我們來試試用定時(shí)器做一個(gè)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,下次中斷開始重新計(jì)數(shù)
    LED = ~LED;                    //將LED進(jìn)行取反,原來亮的就變滅,原來滅的就變亮
  }
}

圖片

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

在使用中斷時(shí),有幾個(gè)需要注意的地方:

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

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

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

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

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

    關(guān)注

    6063

    文章

    44915

    瀏覽量

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

    關(guān)注

    0

    文章

    29

    瀏覽量

    9993
  • 定時(shí)器中斷
    +關(guān)注

    關(guān)注

    0

    文章

    49

    瀏覽量

    11424
  • 動(dòng)態(tài)數(shù)碼管

    關(guān)注

    1

    文章

    11

    瀏覽量

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

    關(guān)注

    0

    文章

    13

    瀏覽量

    5439
收藏 人收藏

    評(píng)論

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

    定時(shí)器中斷跑馬燈

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

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

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

    stm32定時(shí)器中斷程序

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

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

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

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

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

    "外部中斷,定時(shí)器中斷的理解"

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

    STM32定時(shí)器中斷整理

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

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

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

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

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

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

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

    STM32CubeMX_定時(shí)器中斷_PWM

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

    STM32定時(shí)器的分類及中斷原理

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

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

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

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

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

    定時(shí)器中斷程序怎么寫

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