Arduino外部中断
本帖最后由 丄帝De咗臂 于 2015-6-12 10:49 编辑一、什么是中断
1.中断是CPU在正常时,由于内部/外部事件引起CPU暂停正在运行的程序,而转到该事件的程序中去,执行完毕,再返回去执行暂时中断的程序。举一例子,假如你正在用手机玩消消乐,女朋友来喊你出去逛街。这时,你只能暂停游戏去逛街。逛街回来,可以继续玩o(∩_∩)o 这个例子就表现了中断及其处理过程:女友要求去逛街称为“中断请求”,你暂停游戏去逛街叫作“中断响应”,陪女友逛街的过程就是“中断处理”。
2.根据中断源的位置,有两种中断:有的中断源在CPU的内部,称为内部中断;大多数的中断源在CPU的外部,称为外部中断。
根据中断引脚的不同,或者CPU响应中断的不同条件,也可以把中断划分为可屏蔽中断和不可屏蔽中断两种。
二、计算机为什么要采用中断
1.实行分时操作:可以利用中断功能同时为多个对象服务,以提高CP的工作效率。
2.实现实时处理:通过中断,各个服务对象可以根据需要随时CP发出中断申请。
三、中断函数
大部分的Arduino板子里有两个外部中断: numbers 0 (on digital pin 2) and 1 (on digital pin 3)。
Mege有四个外部中断:numbers 2(数字针脚21),3(20),4(19),5(18)。
1.外部中断的语法:attachInterrupt(interrupt, function, mode),即attachInterrupt(中断号,中断函数,中断模式)。
中断模式:LOW 当中断管脚是低电平时触发
CHANGE当中断管脚有高低电平变化时触发
RISING当中断管脚是上升延时触发(从低电平变高电平)
FALLING 当中断管脚是下降延时触发(从高电平变低电平)
2.删除中断:detachInterrupt(interrupt_number)
3.忽略所有中断:noInterrupts()
4.重新启用中断:interrupts()
注意事项:当中断函数时,delay()和millis()的数值将不会继续变化,串口收到的数据可能会丢失,应该声明一个变量来在未发生中断时储存变量。
四、示例程序
int pbIn = 0; // 定义中断引脚为0,也就是D2引脚
int ledOut = A0; // 定义输出指示灯引脚
volatile int state = LOW; // 定义默认输入状态
void setup()
{
// 置ledOut引脚为输出状态
pinMode(ledOut, OUTPUT);
// 监视中断输入引脚的变化
attachInterrupt(pbIn, stateChange, CHANGE);
}
void loop()
{
// 模拟长时间运行的进程或复杂的任务。
for (int i = 0; i < 100; i++)
{
// 什么都不做,等待10毫秒
delay(10);
}
}
void stateChange()
{
state = !state;
digitalWrite(ledOut, state);
}
非常有用的东西,在车速码表中会用到中断的。张禄回头指导我一下。 hnyzcj 发表于 2015-6-12 11:34
非常有用的东西,在车速码表中会用到中断的。张禄回头指导我一下。
你过奖了,我这也是现学现卖
页:
[1]