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

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

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

3天內不再提示

中斷是什么 如何使用它們

454398 ? 來源:工程師吳畏 ? 2019-07-31 14:08 ? 次閱讀

原理圖

中斷是什么 如何使用它們

什么是中斷?

微控制器編寫的簡單程序通常都可以在主函數內部完成,并且幾乎不需要使用外設。但是,大多數其他微控制器程序更復雜,需要大量代碼。當發生這種情況時,中斷會變得非常有用,但究竟什么是中斷?

想象一下,我們的微控制器需要同時做兩件事:準確跟蹤時間并使LED閃爍。我們的程序可以通過重置計時器,遞增計數器,然后等待計時器溢出來開始。完成后,我們的代碼可以使LED閃爍。雖然這有點完成工作,但是有兩個問題。 CPU花費大部分時間坐在延遲循環中,這浪費了CPU時間,并且LED的執行時間很難計算。

那么,我們如何解決這個問題呢?我們可以在計時器上使用中斷!因此,我們不是在主代碼中遞增計數器,而是將代碼轉換為處理時序的中斷服務程序。

通常,微控制器將運行LED閃爍代碼,但是一旦定時器生成中斷請求,微控制器停止LED閃爍代碼,執行定時器中斷服務程序,然后返回到LED閃爍代碼。這樣,LED閃爍代碼不會干擾我們的定時器代碼,它可以更準確(并且更容易)跟蹤時間。

AVR Core上的中斷

AVR有一個向量表,每個中斷源都跳轉到一個唯一的地址。這是非常有利的,因為我們不再需要執行比較來查看觸發了哪個中斷,這可能需要一些時間。

下表顯示了Atmega168上可用的不同中斷以及它們跳轉到的地址。程序記憶。但是,在我們使用它們之前必須配置幾個中斷選項。

從ATmega168數據表中提取

表位置

Atmega168具有允許的引導加載程序區域它可以動態地重寫自己的程序存儲器,這對固件更新很有用。因此,ISR向量表將位于內存中很重要。如果表位于引導加載程序區域中,則在啟用引導加載程序時永遠不會更新(不推薦)。

因此,如果沒有引導加載程序,則應將向量表放在內存的底部(接近地址0x0000),但如果使用引導加載程序,則應將向量表移動到引導加載程序上方。這可以通過改變MCUCR寄存器中的幾個位來輕松完成。

如果IVSEL = 0,則ISR位于向量表的起始,否則ISR駐留在引導加載程序中。現在,將其保留為0,因為我們沒有使用引導加載程序

如果IVCE = 1,則執行ISR切換。暫時保留為0

中斷啟用位

每個中斷源(I/O引腳,外設等)都有關聯中斷使能位。與PIC類似,STATUS寄存器中有一個全局中斷使能位,需要將其設置為允許中斷工作。要找出這些中斷標志所在的位置,需要參考數據手冊中的特定外設章節。

例如,我們將在定時器0上使用溢出中斷,所以如果我們看一下定時器0在章節中,我們發現中斷使能位位于TIMSK0寄存器(第89頁)中,稱為TOIE0。需要將此位設置為1才能觸發定時器溢出。該寄存器還有另外兩個中斷源,A匹配溢出和B匹配溢出,這對PWM功能很有用(將來會介紹)。

注意,設置我在SREG中的位不是使用SREG本身,而是使用函數sei();設置I位和cei();清除I位。

在WinAVR中編寫ISR

所以我們現在明白需要啟用中斷才能啟動,但我們如何使用C和WINAVR編譯器編寫?答案很簡單:我們使用特殊保留字ISR并傳遞中斷名稱參數來告訴編譯器哪個中斷函數處理。注意我們需要包含中斷頭文件,否則中斷函數將不起作用!

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags.。。.unlike the PIC

// Put your code here

}

簡單閃爍示例

在這個例子中,ATmega168會使連接到PD0的LED頻繁閃爍,其中閃爍的速率受到控制通過定時器0但是,您可能會注意到主功能為空,并且LED在定時器溢出中斷服務程序(ISR)內閃爍。這意味著我們可以在while循環中放入我們想要的任何代碼,并且該代碼不會阻止中斷運行。

/*

* AVR Interrupt.c

*

* Created: 09/01/2018

* Author : RobinLaptop

*/

// These are really useful macros that help to get rid of unreadable bit masking code

#define setBit(reg, bit) (reg = reg | (1 《《 bit))

#define clearBit(reg, bit) (reg = reg & ~(1 《《 bit))

#define toggleBit(reg, bit) (reg = reg ^ (1 《《 bit))

#define clearFlag(reg, bit) (reg = reg | (1 《《 bit))

#include

#include

ISR(TIMER0_OVF_vect)

{

// Interestingly, the AVR automatically clears interrupt flags =) 。。..unlike the PIC =(

// Toggle the LED (PD0 , Pin 2)

toggleBit(PORTD, PD0);

}

int main(void)

{

// Initialize Registers

clearBit(TCCR0A, WGM00); // Configure WGM to be 0x00 for normal mode

clearBit(TCCR0A, WGM01);

clearBit(TCCR0B, WGM02);

setBit(TCCR0B, CS00); // Configure clock source to be clock io at 1024 pre-scale

clearBit(TCCR0B, CS01);

setBit(TCCR0B, CS02);

DDRD = 0xFF; // Make PORT D and output

sei(); // Enable interrupts

setBit(TIMSK0, TOIE0); // Enable the timer interrupt

while (1)

{

// Put any code you want here

// It should not affect the interrupt service routine!

}

}

結論

教程僅涵蓋單個中斷,即定時器0溢出中斷,但它清楚地表明中斷是非常強大。如果使用得當,您可以擁有一個系統,它可以在信號到達時立即響應并暫停主代碼。這可以用來做很多事情,包括多任務處理,不同外圍設備的多重處理,以及創建實時代碼!

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

    關注

    5

    文章

    900

    瀏覽量

    41645
收藏 人收藏

    評論

    相關推薦

    單片機有哪些中斷類型

    單片機中斷是指在單片機執行程序的過程中,當外部設備或內部條件發生某個特定事件時,能夠暫停當前正在執行的程序,轉而去執行一個特定的服務程序(稱為中斷服務程序或中斷處理程序),處理該事件,之后再返回到被
    的頭像 發表于 10-17 18:12 ?885次閱讀

    freertos中斷優先級在哪設置

    中斷優先級之前,我們需要理解中斷優先級的概念。在嵌入式系統中,中斷是硬件或軟件事件,它們可以打斷CPU的當前執行流程,讓CPU去處理更緊急的任務。
    的頭像 發表于 09-02 14:17 ?750次閱讀

    stm32怎樣觸發軟件中斷

    了解STM32中斷系統 STM32微控制器具有豐富的中斷系統,包括NVIC(嵌套向量中斷控制器)和SYSTICK定時器。NVIC可以處理多達240個中斷源,包括外部
    的頭像 發表于 09-02 09:32 ?1023次閱讀

    RISC-V的中斷處理 中斷操作三個步驟

    中斷操作三個步驟: 1、中斷初始化 2、trap處理 3、用戶中斷處理
    的頭像 發表于 05-20 16:38 ?1338次閱讀

    stm32使用workbench只生成了一些.h和.c文件,然后該如何使用它們

    使用workbench只生成了一些.h和.c文件,然后該如何使用它們?還需要手動在MDK中建立工程添加標準庫再把這些文件加進去么?哪位有相關開發經驗,請賜教!
    發表于 05-15 07:29

    微控制器和嵌入式系統中的并發和中斷

    除了通用 CPU 之外,它們還包含許多用于與外界交互的專用硬件設備(稱為外圍設備),因此您可以連接諸如按鈕和顯示器之類的東西以及實現系統所需的其他外部硬件。通常,這些外設具有中斷機制,因此 CPU 可以要求它們監視特定事件,然后
    發表于 05-03 10:01 ?226次閱讀
    微控制器和嵌入式系統中的并發和<b class='flag-5'>中斷</b>

    CPU中斷程序:從硬件看什么是中斷

    CPU響應中斷轉去執行中斷服務程序前,需要把被中斷程序的現場信息保存起來,以便執行完中斷服務程序后,接著從被中斷程序的斷點處繼續往下執行。
    發表于 03-26 11:36 ?4135次閱讀
    CPU<b class='flag-5'>中斷</b>程序:從硬件看什么是<b class='flag-5'>中斷</b>?

    穩壓管起穩壓作用是利用它的什么特性

    穩壓管(Voltage Regulator),也稱為穩壓二極管、穩壓二極管、穩壓二極管、硅穩壓二極管等,是一種能夠穩定輸出電壓的電子元件。 穩壓管起穩壓作用是利用它的電流-電壓特性。下面是一個深入
    的頭像 發表于 02-22 10:09 ?3236次閱讀

    單片機中斷功能及其應用

    單片機中斷功能及其應用? 單片機中斷是指在程序執行過程中,根據特定的條件或事件自動暫時中斷當前程序的執行,轉而執行特定的中斷服務程序。中斷
    的頭像 發表于 01-30 14:45 ?5759次閱讀

    什么是中斷向量偏移,為什么要做中斷向量偏移?

    當MCU中有兩段或以上程序的時候(第一個程序為用戶BootLoader程序,其他的為APP程序,這個在前期視頻《什么是ISP?什么是IAP》中有講過),APP程序中都需要做中斷向量偏移,那么什么是中斷向量偏移,為什么要做中斷向量
    的頭像 發表于 01-30 09:47 ?1889次閱讀
    什么是<b class='flag-5'>中斷</b>向量偏移,為什么要做<b class='flag-5'>中斷</b>向量偏移?

    GD32 MCU是如何進入中斷函數的

    用過GD32 MCU的小伙伴們都知道,程序是順序執行的,但當有中斷來的時候程序會跳轉到中斷函數,執行完中斷函數后程序又繼續回到原來的位置繼續執行,那么你們知道MCU是如何找到中斷函數入
    的頭像 發表于 01-30 09:45 ?1153次閱讀
    GD32 MCU是如何進入<b class='flag-5'>中斷</b>函數的

    外部中斷的工作原理 外部中斷方式有哪些 為什么要使用外部中斷

    外部中斷的工作原理是單片機響應外部事件的一種機制** **。
    的頭像 發表于 01-28 17:37 ?3849次閱讀

    單片機外部中斷和定時器中斷的區別和用法

    單片機外部中斷和定時器中斷在觸發來源、應用場景以及功能特點上存在明顯差異** **。
    的頭像 發表于 01-28 17:35 ?3261次閱讀

    圖像采集卡到底是什么?為什么要使用它們

    :圖像采集卡到底是什么?它們有什么用?何時以及為什么應該使用它們?為什么要使用圖像采集卡?幀或視頻采集卡的最初目的是將模擬圖片轉換為數字信號。由于當今純數字圖像處理技
    的頭像 發表于 01-26 16:14 ?1545次閱讀
    圖像采集卡到底是什么?為什么要使<b class='flag-5'>用它們</b>?

    聊聊KUKA機器人高級編程:中斷

    最大數量/BRAKE最多可以同時聲明64個中斷中斷的聲明可以隨時被新的聲明覆蓋。可以選擇使用BRAKE聲明中斷。BRAKE語句在檢測到聲明的中斷時立即執行。這意味著當進入
    發表于 01-25 15:16 ?6974次閱讀
    聊聊KUKA機器人高級編程:<b class='flag-5'>中斷</b>
    主站蜘蛛池模板: 国产色综合色产在线视频| 亚洲一区精品伊人久久伊人| 青春禁区动漫免费观看| 亚瑟天堂久久一区二区影院| 中文国产乱码在线人妻一区二区| writeas雷狮直播| 久久99这里只有精品| 日本午夜精品久久久无码| 在线 自拍 综合 亚洲 欧美| 国产精品v片在线观看不卡| 欧美精品高潮呻吟AV久久| 亚洲精品在线不卡| 丰满的女朋友韩国版在线观看| 久久婷婷久久一区二区三区| 天天干夜夜曰| 成人性生交大片免费看金瓶七仙女| 九九视频在线观看视频6| 性VIDEOSTV另类极品| 高H纯肉NP 弄潮NP男男| 女人麻豆国产香蕉久久精品 | 午夜十八岁禁| old老男人野外树林tv| 久章草一区二区| 一本道综合久久免费| 国产在线精品亚洲第一区| 少妇人妻偷人精品视蜜桃| 扒开美女嫩bbb| 女仆乖H调教跪趴| 97国内精品久久久久久久影视| 久久精品影院永久网址| 亚洲色噜噜狠狠网站| 含羞草影院AE在线观看| 亚洲高清一区二区三区电影| 国产精品久久人妻无码网站一区L 国产精品久久人妻无码蜜 | 国内精品蜜汁乔依琳视频| 甜性涩爱快播| 国产精品成人免费| 视频一区国产在线第一页| 俄罗斯人xxx| 婷婷亚洲五月色综合久久| 国产成人综合网在线观看|