arduino中断~详解arduino的所有中断类型(附图及代码)

什么是中断

CPU执行时原本是按程序指令一条一条向下顺序执行的。 但如果此时发生了某一事件B请求CPU迅速去处理(中断发生),CPU暂时中断当前的工作,转去处理事件B(中断响应和中断服务). 待CPU将事件B处理完毕后, 再回到原来被中断的地方继续执行程序(中断返回),这一过程称为中断 。
arduino中断~详解arduino的所有中断类型(附图及代码)-少儿编程网

中断
打个比方:假如你正在读书,这时电话响了。你放下手中的书,去接电话。接完电话后,再继续回来读书,并从原来读的地方继续往下读。
UNO中断

内部中断

内部中断主要为定时中断,定时中断是指主程序在运行一段程序过后自动进行的中断服务程序。
外部中断

一般由外设发出中断请求,如:键盘中断、打印机中断、外部中断需外部中断源发出中断请求才能发中断。
函数列表

attachInterrupt()
detachInterrupt()
interrupts()
noInterrupts()
attachInterrupt()函数说明

void attachInterrupt (uint8_t interruptNum, void(*)(void)userFunc, int mode)
设置中断

指定中断函数. 外部中断有0和1两种, 一般对应2号和3号数字引脚.

参数:

interrupt 中断类型, 0或1
fun 对应函数
mode 触发方式. 有以下几种:
LOW 低电平触发中断
CHANGE 变化时触发中断
RISING 低电平变为高电平触发中断
FALLING 高电平变为低电平触发中断
注解:

在中断函数中 delay 函数不能使用, millis 始终返回进入中断前的值. 读串口数据的话, 可能会丢失. 中断函数中使用的变量需要定义为 volatile 类型.

下面的例子如果通过外部引脚触发中断函数, 然后控制LED的闪烁.

int pin = 13;
volatile int state = LOW;
void setup()
{
pinMode(pin, OUTPUT);
attachInterrupt(0, blink, CHANGE);
}
void loop()
{
digitalWrite(pin, state);
}
void blink()
{
state = !state;
}
detachInterrupt()函数说明

void detachInterrupt (uint8_t interruptNum)
取消中断

取消指定类型的中断.

参数:

interrupt 中断的类型.
interrupts()函数说明

#define interrupts() sei()
开中断

例子:

void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
noInterrupts()函数说明

#define noInterrupts() cli()
关中断

例子:

void setup() {}
void loop()
{
noInterrupts();
// critical, time-sensitive code here
interrupts();
// other code here
}
实验——按键实现外部中断

实验器材

按键开关 一个
面包板一块
470Ω 电阻一个
杜邦线若干
实验实现

按键按下,串口显示器显示“KEY DOWM”

按键松开,串口显示器显示“KEY UP”

实验连线图

arduino中断~详解arduino的所有中断类型(附图及代码)-少儿编程网
代码实现

int pinInterrupt = 2; //接中断信号的脚
void onChange()
{
if ( digitalRead(pinInterrupt) == LOW )
Serial.println("Key Down");
else
Serial.println("Key UP");
}
void setup()
{
Serial.begin(9600); //打开串口
pinMode( pinInterrupt, INPUT); //设置管脚为输入
//Enable中断管脚, 中断服务程序为onChange(), 监视引脚变化
attachInterrupt( digitalPinToInterrupt(pinInterrupt), onChange, CHANGE);
}
void loop()
{
// 模拟长时间运行的进程或复杂的任务。
delay(1000);
}
实验结果

arduino中断~详解arduino的所有中断类型(附图及代码)-少儿编程网

本文链接:arduino中断~详解arduino的所有中断类型(附图及代码)

转载声明:本站文章若无特别说明,皆为原创,转载请注明来源:少儿编程网,谢谢!^^


*文章为作者独立观点,不代表少儿编程网立场
发表评论

坐等沙发
相关文章
杭州少儿编程课程:论学习少儿编程的重要性
杭州少儿编程课程:论学习少儿编程的重…
杭州少儿编程,一年级学生都开始学习编程了
杭州少儿编程,一年级学生都开始学习编…
飞机上赶作业,怎样有效提高学习效率?
飞机上赶作业,怎样有效提高学习效率?
孩子学习成绩不好怎么办?家长得这么挽救
孩子学习成绩不好怎么办?家长得这么挽救
如何培养孩子的学习方法?这6大技能越早培育越好!
如何培养孩子的学习方法?这6大技能越早…
《python编程入门经典》python之父推荐这三本书让你更快入门
《python编程入门经典》python之父推荐…
JSDY 投稿者
我还没有学会写个人说明!