这里会显示出您选择的修订版和当前版本之间的差别。
前一修订版 | |||
— | reference:language:attachinterrupt [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== attachInterrupt(interrupt, | ||
+ | |||
+ | ===== description ===== | ||
+ | |||
+ | 当发生外部中断时,调用一个指定函数。当中断发生时,该函数会取代正在执行的程序。大多数的ocrobot板有两个外部中断:0(数字引脚2)和1(数字引脚3)。 | ||
+ | |||
+ | Mega2560有四个外部中断:数字2(引脚21),3(20针),4(引脚19),5(引脚18)。 | ||
+ | ===== 语法 ===== | ||
+ | |||
+ | interrupt:中断引脚数 | ||
+ | \\ function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。 | ||
+ | \\ mode:定义何时发生中断以下四个contstants预定有效值: | ||
+ | * LOW 当引脚为低电平时,触发中断 | ||
+ | * CHANGE 当引脚电平发生改变时,触发中断 | ||
+ | * RISING 当引脚由低电平变为高电平时,触发中断 | ||
+ | * FALLING 当引脚由高电平变为低电平时,触发中断. | ||
+ | ===== 返回 ===== | ||
+ | |||
+ | 无 | ||
+ | ===== 注意事项 ===== | ||
+ | |||
+ | 当中断函数发生时,delay()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。 | ||
+ | ===== 使用中断 ===== | ||
+ | |||
+ | 在单片机自动化程序中当突发事件发生时,中断是非常有用的,它可以帮助解决时序问题。一个使用中断的任务可能会读一个旋转编码器,监视用户的输入。 | ||
+ | |||
+ | 如果你想以确保程序始终抓住一个旋转编码器的脉冲,从来不缺少一个脉冲,它将使写一个程序做任何事情都要非常棘手,因为该计划将需要不断轮询的传感器线编码器,为了赶上脉冲发生时。其他传感器也是如此,如试图读取一个声音传感器正试图赶上一按,或红外线槽传感器(照片灭弧室),试图抓住一个硬币下降。在所有这些情况下,使用一个中断可以释放的微控制器来完成其他一些工作。 | ||
+ | ===== 程序示例 ===== | ||
+ | <code cpp> | ||
+ | int pin = 13; | ||
+ | volatile int state = LOW; | ||
+ | |||
+ | void setup() | ||
+ | { | ||
+ | pinMode(pin, | ||
+ | attachInterrupt(0, | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | digitalWrite(pin, | ||
+ | } | ||
+ | |||
+ | void blink() | ||
+ | { | ||
+ | state = !state; | ||
+ | } | ||
+ | </ | ||
+ | |||