参数:
interrupt,中断编号,注意,这里的中断编号并不是引脚编号。
function,中断函数名,当中断被触发后即会运行此函数名称所代表的中断函数。
mode,中断模式。
attachInterrupt(0,counter,RISING);
如果使用的是 Arduino UNO 或者 MEGA 控制器,则该语句即会开启2号引脚(中断编号0)上的外部中断功能,并指定上升沿时触发该中断。当2号引脚上的电平由低变高后,该中断会被触发,而 Arduino 即会运行 counter()函数中的语句。
如果不需要使用外部中断了,则可以使用中断分离函数 detachInterrupt() 来关闭中断功能。
在使用 attachInterrupt 函数时要注意以下几点:
在中断函数中 delay 函数不能使用。
使用 millis 函数始终返回进入中断前的值。
读取串口数据的话,可能会丢失。
中断函数中使用的变量需要定义为 volatile 型。
attachInterrupt 函数的函数原型可在文件 WInterrupts。c 中找到,如下所示:
(2)detachInterrupt( interrupt)
功能:禁用外部中断。
参数:
interrupt,需要禁用的中断编号。
(3)interrupts()和nolnterrupts()
interrupts 和 noInterrupts 函数在 Arduino 中负责打开和关闭总中断,函数无返回值,无参数,可以在文件 wiring。h 中查看函数原型,如下:
#define interrupts() sei()
#define noInterrupts() cli()
3 定时器中断
3。1 定时器的作用
定时器对于单片机来说就类似我们现实生活中的时钟,记录很多和时间相关的事件。在我们平时经常使用的 delay() millis() ,micros() ,delayMicroseconds() ,PWM 波生成的 analogWrite() 和 tone() 函数都是通过定时器实现的,不过这些都被 Arduino 的封装库隐藏起来了,为了让使用者更快更便捷地开发项目。
我们平常使用的 Arduino 单片机为 UNO,NANO和MEGA 2560。UNO 和 NANO 都使用的是 ATmega328 芯片,这款芯片有3个定时器,Timer0,Timer1,Timer2,其中Timer0和Timer2都是8位寄存器(256),Timer1是16位寄存器(65536),意味着更高的分辨率。mege2560 使用的是 ATmege2560 芯片,这款芯片有 6 个定时器,在328 的基础上,增加了 Timer3,Timer4,Timer5。这三个定时器都是16位的寄存器。
[tr]Arduino 型号 参数Timer0 Timer1 Timer2 Timer3 Timer4 Timer5 [/tr]
UNO 位数 8bit 16bit 8bit — — —
对应引脚 5,6 9,10 3,11