proteus仿真arduino中断

我们知道,基本任何单片机都有中断机制(当然,我们的操作系统也是有中断机制的),对于熟悉嵌入式开发的童鞋来说,中断在熟悉不过了。但对于新手来说中断的理解也不难,用一句话来说中断就是“放下手中正在做的大事情去做别的小事情”,也可以用一个故事来解释,那就是“小猫钓鱼”,钓鱼是正事,捉蝴蝶,捉蜻蜓则是中断触发了做的小事情(非主线事件)。

在现实的生活中,这样的中断是时刻发生的,比如你正在写代码,你的老大突然叫你过去一趟等等。所以arduino也应有其中断机制,最常见的uno板也有两个中断资源,如下表所列:

Board int.0 int.1 int.2 int.3 int.4 int.5
Uno, Ethernet 2 3
Mega2560 2 3 21 20 19 18
32u4 based (e.g Leonardo, Micro) 3 2 0 1 7

从上表中,我们可以看到其他板比UNO板中断资源要多一些,但UNO板对于初步学习arduino的人来说基本足够了。

在arduino中与中断调用有关的函数就两个
一、attachInterrupt(interruptNumber, callFunName, mode)
这个函数有三个参数分别是
1、interruptNumber:则是我们支持中断调用,或者说支持中断监听的管脚(中断之所以可以实现是因为有硬件资源在不断的监听是否有中断被触发,这里UNO用的就是不停的检测2号和3号脚的电平是否发生了变化)。我们可以直接中断好号,也可以用digitalPinToInterrupt(pin)方式替代,它的作用是将管脚号翻译为中断号。
2、callFunName:这里需要给出一个中断发生后需要执行的函数,也就是说当硬件检测到右中断信号后,你准备利用这个中断的触发干些什么比较紧急的事情。
3、mode:这里填写中断触发模式,也就是说,硬件在检测中断管脚的信号,但系统不知道你要检测哪种信号(当然,系统也可以固定下来一种,但那不灵活,所以系统提供了四种模式供用户来选择),我们可以选择LOW,CHANGE,RISING,FALLING四种之一作为检测信号,这里就不一一详细解释了,从字面意思就知道第一个是低电平、第二个是有变化,三个四个分别是上升沿和下降沿。

下面我们来看一个实例(当按下BTN1时,2号脚被置为低电平,即触发中断INT0)

在这里插入图片描述

#include <Servo.h>

Servo  srv1;
boolean ledState=LOW;
void setup() {
  // put your setup code here, to run once:
pinMode(0,INPUT);  
pinMode(13,OUTPUT);
pinMode(5,OUTPUT);
Serial.begin(9600);
Serial.println("hello my friend!");
srv1.attach(13);
attachInterrupt(digitalPinToInterrupt(2),interruptFun,LOW);

}

void loop() {
  // put your main code here, to run repeatedly:
  int rslt=map(analogRead(0),0,1000,0,180);
 Serial.println(rslt);
 delay(1500);
 srv1.write(rslt);
 delay(1500);
 srv1.write(0);
}

void interruptFun()
{
 ledState=!ledState;
    digitalWrite(5,ledState);
    // Inside the attached function, delay() won't work and the value returned by millis() will not increment. 
    delay(5000);  			

     srv1.write(0);  
    
}

代码说明:
1、digitalPinToInterrupt(2)自动将管脚2反应为int0;
2、interruptFun为检测到2号管脚有LOW信号触发中断后执行的函数;
3、这里需要注意的是,delay函数在中断函数中是不会生效的,调用了也白调用,不会产生延时。
4、当我们不再需要这个中断时,可以用detachinterrupt()来注销掉这个中断的使用;
二、detachinterrupt()
这个函数很简单,只有一个参数,即中断号作为参数。

总结:
arduino中,除了使用外部中断,还可以使用定时中断,我们下一篇继续介绍。

发布了116 篇原创文章 · 获赞 79 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/haigear/article/details/89194223