Arduino基础(四)——中断

目录:

1,语言基础:https://blog.csdn.net/SumubeiFZ/article/details/118603957
2,串口通讯:https://blog.csdn.net/SumubeiFZ/article/details/118638228
3,基础实验操作:https://blog.csdn.net/SumubeiFZ/article/details/118638290
4,中断:https://blog.csdn.net/SumubeiFZ/article/details/118638320

中断(Interrupt):

指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。

Arduino的定时器中断

定时器中断:利用板子里的定时器来让中断定时发生,可以精确控制时间。

需要注意的是:实现该功能需要先在Arduino开发环境中导入FlexiTimer2库,这个库可以在官网上下载。

例子程序:
该程序运行效果:
每隔1000毫秒,产生一次时钟中断,并进入中断服务程序 onTimer(), 向串口打印一串文字。

#include <MsTimer2.h>     //定时器库的头文件
int num = 0; //计数值

//中断服务程序
void onTimer()
{
  Serial.print("timer ");
  Serial.println(num++);
}

void setup()
{
  Serial.begin(9600); //初始化串口

  MsTimer2::set(1000, onTimer); //设置中断,每1000ms进入一次中断服务程序 onTimer()
  MsTimer2::start(); //开始计时_开启定时器中断
  //MsTimer2::stop(); //关闭定时器中断
}

void loop()
{
}

程序上传后,打开Arduino IDE的串口监视窗口,可见打印的文字:

timer 0
timer 1
timer 2

Arduino的外部中断

在函数 Loop() 中,里面的 if() 条件需要我们不断检测循环里面的代码,如果存在很多的语句需要判断的话,处理器就有可能在处理别的事务,来不及处理你要的判断。对于这些情况,你就可以使用中断接收这些事件。当发生这种情况时,中断程序可以看作是一段独立于主程序之外的程序,当中断触发时,控制器会暂停当前正在运行的主程序,而跳转去运行中断程序,中断程序运行完后,会再回到之前主程序暂停的位置,继续运行主程序。如此便可做到实时响应处理事件的效果。

示例代码:

int ledPIN = 13;//写需要使用的引脚

void setup() 
{
  pinMode(ledPIN, OUTPUT);
  attachInterrupt(0, stuffHappened, FALLING);
  //这里0是中断号(在Arduino UNO中,中断0是指D2引脚,中断1是指D3引脚。其他板子并不同)
  //FALLING:常数,高电平变为低电平时,ISR才会被调用(在按下按钮时所要发生的事:D2从高电平变为低电平)
}

void loop() 
{
}

void stuffHappened()//函数:中断服务程序(简称ISR)
{
  digitalWrite(ledPIN, HIGH); 
}
//ISR本身只是将“L”灯点亮

测试:1,当Arduino复位时,“L”LED应该熄灭。然后当你按下按钮时,“L”LED应立即点亮并保持。
2,若将attachInterrupt的参数FALLING改为RISING,并将Arduino重新启动,灯保持亮灯状态。此时中断引脚上一直都是高电平,没有出现低电平。当按住按钮时,LED保持熄灭状态直到你松开它放开它时触发中断,因为按下按钮时D2是低电平,而松开时才上升到高电平。

mode中断触发方式:

  • LOW: 低电平触发。
  • CHANGE:管脚状态改变触发。
  • RISING:上升沿触发。
  • FALLING:下降沿触发。

转载自: 布尔博客 – 高校青年技术社区

  • 6
    点赞
  • 66
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值