Arduino-中断

Posted liming19680104

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Arduino-中断相关的知识,希望对你有一定的参考价值。

中断:

 当出现需要时,CPU暂时停止当前程序的执行转而执行处理新情况的程序,执行完之后回到原程序继续执行原程序的过程称之为中断

中断的分类:Arduino中的中断可以分为两类:外部中断和定时中断

外部中断:一般是指由外设发出的中断请求,即中断源在外部。如键盘中断、打印机中断等。外部中断需要外部中断源发出中断请求才能发中断。
定时中断:主程序在运行的过程中停一段时间就进行一次中断,执行中断服务程序,不需要中断源的中断请求触发,这有时是自动进行的。

 

外部中断:

外部中断需要外部的触发,在Arduino UNO中数字引脚2和3是连接外部触发电路的,它们的中断号分别是0和1【0表示用引脚2,1表示用引脚3】。在写程序时通常把中断函数写在setup()中

            例子:

volatile int state=LOW;//需要在中断函数内部更改的值需要声明为volatile类型

void setup(){
  pinMode(13,OUTPUT);
 attachInterrupt(0,blink,CHANGE); //设置外部中断函数
 //参数1 中断号  0表示用引脚2,1表示用引脚3
 //参数2 中断函数
 //参数3 中断触发模式:
 //       LOW:当针脚输入为低时,触发中断。
//        CHANGE:当针脚输入发生改变时,触发中断。
//        RISING:当针脚输入由低变高时,触发中断。
//        FALLING:当针脚输入由高变低时,触发中断。
//不同型号的Arduino板,其外部中断的触发的引脚和引脚数目,以及中断触发方式都不太一样,在使用外部中断时一定要弄清楚使用的Arduino板的型号。
}

void loop(){

digitalWrite(13,state);
}

void blink(){
state=!state;}
//中断服务程序不能有参数和返回值
//在中断函数中delay()函数将不再起作用。在中断函数中millis()函数的值将不会增加
//得到的串行数据将会丢失

取消中断:

        detachInterrupt(0);  //参数 中断号

        取消中断和关中断是两个不同的概念。当关中断之后,所有的中断都不能执行,但是取消某个中断之后,其他的中断还是可以执行的

 

 

定时中断---定时器:

        常用的库有FlexiTimer2.h和MsTimer2.h,这两个库的用法是大同小异的

    ?    ?例子:

#include <MsTimer2.h> //定时器库的头文件
volatile int state=LOW;

void setup(){
  pinMode(13,OUTPUT);
 MsTimer2::set(500,blink);  //中断设置函数,每500ms进入一次中断
 //参数1 时间 单位毫秒
 //参数2  中断函数名
 MsTimer2::start();   //开始计时
}

void loop(){

digitalWrite(13,state);
}

void blink(){
state=!state;
}

MsTimer2::stop();   //停止计时

 

 

 

 

 

天子骄龙

以上是关于Arduino-中断的主要内容,如果未能解决你的问题,请参考以下文章

arduino 用伺服电机中断

Python 串行读取线是不是会中断 Arduino 循环?

Arduino ESP32:测试GPIO中断功能

Arduino ESP32:测试GPIO中断功能二

Arduino利用定时器中断霍尔计数

Arduino ESP8266定时器中断