zoukankan      html  css  js  c++  java
  • 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();   //停止计时

    天子骄龙

  • 相关阅读:
    xna 添加一个精灵1
    【leetcode】705. 设计哈希集合
    【leetcode】1603. 设计停车系统
    【leetcode】设计有序流
    【leetcode】旅行终点站
    【leetcode】检测大写字母
    【leetcode】重复至少 K 次且长度为 M 的模式
    【leetcode】二叉树的直径
    【leetcode】公交站间的距离
    【leetcode】分糖果
  • 原文地址:https://www.cnblogs.com/liming19680104/p/10921212.html
Copyright © 2011-2022 走看看