今天我將簡單記錄中斷函數
函數分為外部中斷和定時中斷
外部中斷的定義:一般由外設發出中斷請求,如:鍵盤中斷、打印機中斷、外部中斷需外部中斷源發出中斷請求才能發中斷。
定時中斷的定義:是指主程序在運行一段程序過后自動進行的中斷服務程序。
interrupt 可以被中斷的代碼
nointerrupt 可以被中斷的代碼
外部中斷:
attach interrupt(interrupt,function,mode)
1)interrupt:中斷號,UNO只用0,1,即代表D2,D3口
2)function:調用中斷函數,中斷發生時調用的函數
3)mode:中斷觸發模式
UNO R3支持四種模式
low 當針腳輸入為低時,觸發中斷
change 當針腳輸入發生變化時,觸發中斷
rising 當針腳由低變高時,觸發中斷
falling 當針腳由高到低時,觸發中斷
1.中斷服務程序不能夠有參數和返回值,即void Function name(void){}
2.在中斷函數中delay()函數將不起作用
3.在中斷函數中millis()函數的值不會增加
4.得到的串行數據將會丟失
5.需在中斷函數內部更改的值需聲明為volatile類型
detach interrupt (interrupt)
定時中斷
常見的定時庫有FlexiTimer2.h和Ms.Timer2.h
void start() 開啟定時中斷
void stop() 關閉定時中斷
#include<MsTimer2.h>
void flash()
{
static boolean cutput=HIGH;
digitalWrite(13,OUTPUT);
OUTPUT=!OUTPUT;
MsTimer2:set(500,flash);
MsTimer2:start();
}
void loop()
{}
