close
中斷顧名思義就是 先中斷目前的程序 優先處理突發的狀況
一般程式都是照編寫的順序執行程式
我們稱之為輪詢(polling)
當有些緊急的狀況發生時,
使用輪詢的方式可能會發生不可預期的問題
須使用中斷來優先處理
AVR的外部中斷有許多,這邊只簡單介紹INT0和INT1
※本文使用的晶片為Atmega128
EIMSK 暫存器
INTx 中斷觸發方式,上升電平、下降電平、連續低電平等
EICRA EICRB 暫存器位置
ISC00 ISC01 為 INT0 ISC10 ISC11 為INT1 以此類推 至INT7
中斷使用方式
1.包含中斷的 .h檔
#include <avr/interrupt.h>
2.初始化中斷設置
EIMSK //中斷的選擇
EICRA //中斷觸發的條件
sei( ) //設定(全域)中斷開啟位元
3.中斷程式撰寫
ISR( )
假設使用按鈕模擬發生中斷,進而觸發中斷的程序
假設按鈕為PD2,
按鈕狀態改變INT0的狀態也會跟著變化
※下圖為其他擷取 不為Atmega128腳位
#include <avr/io.h> #include <avr/interrupt.h> //Interrupt Service Routine for INT0 ISR(INT0_vect) { //中斷觸發時所需的處理 } int main(void) { EISMK |= (1<<INT0); // Enable INT0 EICRA |= (1<<ISC00); // Trigger INT0 on rising edge sei(); //Enable Global Interrupt while(1) { } }
參考資料:
AVR C Programming of External Interrupt
AVR External Interrupts
文章標籤
全站熱搜