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();   //停止計時

 

 

 

 

 

天子驕龍


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM