source:http://www.arduino.cn/forum.php?mod=viewthread&tid=2421&page=1#pid8221
1、什么是中断? (这里就不多解释了,主要讲一下具体使用)
2、各种板子的中断:UNO、NANO、ProMINI这仨板子都是INT0(D2针脚:中断编号为0)、INT1(D3针脚:中断编号为1),其它板子参考电路图。
3、中断函数、中断触发模式与设置中断
【中断函数】:就是你要去执行的函数,这个函数不能带任何参数,且没有返回类型。
如:
void hello()
{
Serial.println("hello");
}
【中断模式】:就是你的中断触发方式。在大多数arduino上有以下四种触发方式:
LOW 低电平触发
CHANGE 电平变化,高电平变低电平、低电平变高电平
RISING 上升沿触发
FALLING 下降沿触发
HIGH 高电平触发(该中断模式仅适用于Arduino due)
【设置中断】:在定义中断函数后,要使用外部中断,你只需要在程序的Setup部分配置好中断函数即可,配置函数如下:
attachInterrupt(interrupt, function, mode); //interrupt为你中断通道编号,function为中断函数,mode为中断触发模式
需要注意的是在Arduino Due中,中断设置有点不同:
attachInterrupt(pin, function, mode); //due 的每个IO均可以进行外部中断,所以这里第一个参数为pin,即你使用的引脚编号。
如果在程序中途,你不需要使用外部中断了,你可以用中断分离函数来取消这一中断设置:
detachInterrupt(interrupt);
同样在Arduino Due上,该函数为detachInterrupt(Pin);。
4、例程:
外部中断的使用也是非常简单的,下面我们来看一个官方提供的例程
int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);//当int.0电平改变时,触发中断函数blink
}
void loop()
{
digitalWrite(pin, state);
}
void blink()//中断函数
{
state = !state;
}
5、应用:利用外部中断,可以在很多地方提高你程序的运行效率。你可以运用以上知识,做一个简单的监控装置。