Arduino定时器中断外部中断
中断(Interrupt)
中断(Interrupt)是计算机的⼀个重要概念,现代计算机普遍采⽤中断技术.
什么是中断呢?
CPU执⾏时原本是按照程序指令⼀条⼀条向下执⾏的.但如果此时发⽣了某⼀件事件B请求CPU迅速去处理(中断发⽣),CPU暂时中断当前的⼯作,转去处理事件B(中断响应和中断服务),待CPU将事件B处理完毕后,再回到原来被中断的地⽅继续执⾏程序(中断返回),这⼀过程成为中断.
个人贷款抵押房屋保险打个⽐⽅:加⼊你正在读书,这时电话响了你放下⼿中的书,去接电话.接娃完电话后,在继续回来读书,并从原来读的地⽅继续往下读.
当中断发⽣时,程序执⾏流程图⽰如下:
换句话讲呢:
中断是指计算机运⾏过程中,出现某些意外情况需主机⼲预时,机器能⾃动停⽌正在运⾏的程序并转⼊处理新情况的程序,处理完毕后⼜返回原被暂停的程序继续运⾏。相当于你在读书时听到了敲门声,即中断源向你发出了中断请求,你需要放下书本,先去开门,发现原来是外卖到了。你处理完之后,⼜回去继续读书,并从你刚才读到的地⽅继续往下读。如果你是⼀个机器⼈的话,你从听到敲门声到回来继续读书的过程,构成了整个的中断过程。写⼊你⼤脑中的程序即为软件处理程序,门就是中断装置。
备注:Arduino UNO 开发板的 2、3,可以输⼊外部中断信号。中断有四种触发模式:低电平触发、电平改变触发、上升沿触发、下降沿触发。
Arduino的定时器中断
使⽤定时器中断前,必须先安装MsTimer2库,并在程序中引⽤头⽂件 MsTimer2.h中。使⽤例程如下:
#include <MsTimer2.h> //定时器库的头⽂件
int tick = 0; //计数值
//中断服务程序
void onTimer()
{
Serial.print("timer ");
Serial.println(tick++);
}
void setup()
{
Serial.begin(9600); //初始化串⼝
MsTimer2::set(1000, onTimer); //设置中断,每1000ms进⼊⼀次中断服务程序 onTimer()
MsTimer2::start(); //开始计时_开启定时器中断文科生可以报的专业
//MsTimer2::stop(); //关闭定时器中断
}农业合作社经营范围
void loop()
{
}
程序运⾏效果:
每隔1000毫秒,产⽣⼀次时钟中断,并进⼊中断服务程序 onTimer(), 向串⼝打印⼀串⽂字。
在Arduino IDE中打开串⼝监视窗⼝,可见打印的⽂字
timer 0
timer 1
timer 2
黄山仙女弹琴图片...
Arduino的外部中断
在函数 Loop() 中,⾥⾯的 if() 条件需要我们不断检测循环⾥⾯的代码,如果存在很多的语句需要判断的话,处理器就有可能在处理别的事务,来不及处理你要的判断。对于这些情况,你就可以使⽤中断接收这些事件,当发⽣这种情况时,已设置的⼀个函数会运⾏程序,即使微控制器可能正在处理其他事务也会执⾏这个程序。这个过程叫做硬件中断。
Arduino开发板中,只有两个引脚为硬件中断。
Leonardo有4个中断引脚。
Mega2560有更多。
Due板,所有的引脚都可以作为硬件中断。
代码⽰例:
int ledPIN = 13;
void setup()
{
pinMode(ledPIN, OUTPUT);
attachInterrupt(0, stuffHappened, FALLING);
}
void loop()
{
}
void stuffHappened()
{
digitalWrite(ledPIN, HIGH);
}
上述代码(attachInterrupt()函数):
第⼀个参数0,是中断号(在Arduino UNO中,中断0是指D2引脚,中断1是指D3引脚。其他板⼦并不同)
第⼆个参数stuffHappened,是指Loop()后⾯的⾃写函数stuffHappened(),这个函数叫做中断服务程序,简称ISR。该函数没有任何参数也不返回任何值。
最后⼀个参数FALLING,常数,这⾥的意思是,只有当D2从⾼电平变为低电平(换句话说,它为“下降沿”)时,ISR才会被调⽤,这是在按下按钮时所要发⽣的事:D2从⾼电平变为低电平。
女人运气最好的名
上述可见Loop()函数中没有代码。这个ISR本⾝只是将“L”灯点亮。
华南虎课件在测试时,当Arduino复位时,“L”LED应该熄灭。然后当你按下按钮时,“L”LED应⽴即点亮并保持。
现在将attachInterrupt的最后⼀个参数改为RISING,并下载修改后的程序。LED应该保持熄灯状态直到Arduino完全重新启动,这是因为中断引脚上⼀直都是⾼电平,没有出现低电平,然后“上升”到⾼电平的时候。
当按住按钮时,LED应保持熄灭状态直到你松开它放开它时触发中断,因为按下按钮时D2是低电平,⽽松开时才上升到⾼电平。
外部中断配置函数attachInterrupt( )
函数原型:attachInterrupt(interrupt, ISR, mode)
mode中断触发⽅式
LOW: 低电平触发。
CHANGE:管脚状态改变触发。
RISING:上升沿触发。
FALLING:下降沿触发。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论