Arduino UNO R3自学笔记18 之 Arduino的外部中断、定时中断介绍及应用

注意:学习和写作过程中,部分资料搜集于互联网,如有侵权请联系删除。

前言:上篇写了为啥要用中断,这篇具体展开写Arduino中断相关的知识。

 温习:单片机在执行程序时,发生一些其它紧急的事情,单片机将立即暂停当前程序,赶去处理中断程序,处理完中断程序后再返回刚才暂停处接着执行原来的程序。这个过程称之为中断。

        举个通俗易懂的例子:当你在看电视的时候,突然电话响了,你去接电话。接完电话回来继续看电视,这就是一个中断过程。我们以此为例分析一下:

                                          主进程:看电视;

                                          中断触发源:电话响了;

                                          中断服务子程序:接电话;

   通过上述例子我们了解了一些术语,以及中断这个过程。

1.Arduino中断分类

        总体来讲,根据触发源的不同,中断分为外部中断定时中断

外部中断:一般是单片机硬件IO产生,比如外接的按钮、编码器。键盘等输入设备。

定时中断:一般是定时器产生的中断,周期性发生的事情。

2.Arduino的外部中断

        Arduino UNO R3并不是所有的引脚支持外部中断,只有特定的几个引脚支持,下面列出了具体情况。

Arduino板子型号INT0INT1INT2INT3INT4INT5
UNO 23////
MEGA2321201918

需要注意的是INT0到INT5指的是其中断编号

        知道了产生中断的引脚,那怎么触发中断的呢?

Arduino 上支持下表中的四种中断触发方式

模式名称说明
LOW电平触发,低电平触发。
CHANGE电平变化触发,即由高变低、由低变高均可触发。
RISING上升沿触发,即低电平变高电平触发。
FALLING下降沿触发,即高电平变低电平触发。

        

有了前面的基础知识。我们就可以初始化配置中断了,首先,给出初始化配置函数,如下:

attachInterrupt( interrupt,function,mode)
   功能:对中断引脚进行初始化配置。
   参数:
      ● interrupt,中断编号,注意,这里的中断编号并不是引脚编号。
      ● function,中断服务子程序,当中断被触发后即会运行此函数名称所代表的中断服务子程序。
      ● mode,中断模式。

注意以下内容

使用 attachInterrupt 函数时注意:

      ● 在中断函数中 delay 函数不能使用。
      ● 使用 millis 函数始终返回进入中断前的值。
      ● 读取串口数据的话,可能会丢失。
      ● 中断函数中使用的变量需要定义为 volatile 型。


detachInterrupt( interrupt)
        功能:禁用外部中断。
        参数:
        interrupt,需要禁用的中断编号。

interrupts()和nolnterrupts()
        interrupts 和 noInterrupts 函数在 Arduino 中负责打开和关闭总中断,函数无返回值,无参数。

以上简单介绍了中断的大多数知识。

3.Arduino的外部中断使用方法

对于Arduino使用外部中断一般相对比较容易,具体步骤如下:

编程前确认以下内容:

        确定需求,比如要用中断检测按钮按下,根据需求选择好外部中断的引脚、触发方式 比如选择2号引脚,上升沿触发。

编程步骤

(1) 在setup函数第一句使用noInterrupts 函数关闭总中断;

void setup()
{  
 noInterrupts();//关所有中断,防止在初始化时被中断
}
void loop()
{

}

(2) 初始化外部中断attachInterrupt( 0,function,RISING);

void setup()
{  
 noInterrupts();//关所有中断,防止在初始化时被中断
 attachInterrupt( 0,function,RISING);//设置2号引脚上升沿触发,触发后执行function函数
}
void loop()
{

}

(3) 在setup函数最后一句使用Interrupts 函数打开总中断;

void setup()
{  
 noInterrupts();//关所有中断,防止在初始化时被中断
 attachInterrupt( 0,function,RISING);//设置2号引脚上升沿触发,触发后执行function函数
 Interrupts();//开所有中断,准备进入程序运行模式
}
void loop()
{

}

(4) 声明并编写中断服务子程序


void function();//声明函数,防止编译器报错
void setup()
{  
 noInterrupts();
 attachInterrupt( 0,function,RISING);
 Interrupts();
}
void loop()
{

}
void function()//中断服务子程序
{
//此处执行你要干的事
}

这样程序框架就完成了,接下来将中断服务子程序函数补全即可。

4.Arduino的定时中断

在 Arduino Uno 中有三个定时器,他们分别被使用到以下官方函数和库中:

  • Timer0(8 位定时器)
    • delay()
    • delayMicroseconds()
    • millis()
    • micros()
  • Timer1(16 位定时器)
    • 伺服电机库 Servo.h
  • Timer2(8 位定时器)
    • tone()函数

各个定时器与引脚功能、软件库功能对应关系:

Timer0:D5/D6的PWM输出、delay()、millis()、delayMicroseconds()。
Timer1:D9/D10的PWM输出、舵机库Servo.h、TimerOne库。
Timer2:D3/D11的PWM输出、无源蜂鸣器的tone()、 MsTimer2库(三方库)。定时中断这部分内容,主要推荐使用MsTimer2第三方库,使用起来方便快捷,相关使用请看前面我写的这篇文章:

     Arduino UNO R3自学笔记16 之 Arduino的定时器介绍及应用

5.总结

        中断的使用和内容不止只有上述列出的,其它用法我们后续在具体案例中应用时再讲,同时也应该多多练习使用,推荐以下文章多多阅读学习。

关于此部分内容,可以阅读以下内容:
官方教程:https://www.arduino.cc/reference/en/language/functions/external-interrupts/attachinterrupt/
定时器和中断:https://www.robotshop.com/community/forum/t/arduino-101-timers-and-interrupts/13072
Arduino定时器和中断的使用:https://www.pipipi.net/1030.html
Timer2库文件:https://playground.arduino.cc/Main/FlexiTimer2/

上一篇:Arduino UNO R3自学笔记17 之 Arduino为啥要用中断?

下一篇:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/886018.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞

漏洞描述 沂机管理系统/data/Ajax.aspx接口存在SQL注入漏洞,攻击者可以获取服务器权限 漏洞复现 body"后台管理系统演示版" POC GET /data/Ajax.aspx?methodlog_list&page1&limit20&fkey1&fdate12024-10-0100%3A00%3A00&fdate2…

Postgresql源码(136)syscache/relcache 缓存及失效机制

相关 《Postgresql源码(45)SysCache内存结构与搜索流程分析》 0 总结速查 syscache:缓存系统表的行。通用数据结构,可以缓存一切数据(hash dlist)。可以分别缓存单行和多行查询。 syscache使用CatCache数…

AI 对话工具汇总

🐣个人主页 可惜已不在 🐤这篇在这个专栏AI_可惜已不在的博客-CSDN博客 🐥有用的话就留下一个三连吧😼 目录 前言: 正文: 前言: 在科技飞速发展的时代,AI 对话正逐渐成为我们获取信息、交流思想的新方式。它以强…

算法笔记(四)——模拟

算法笔记(四)——模拟 文章目录 算法笔记(四)——模拟替换所有的问号提莫攻击Z字形变换外观数列数青蛙 模拟算法就是根据题目的要求,题目让干神马就做神马,一步一步来 替换所有的问号 题目:替换…

初识TCP/IP协议

回顾上文 来回顾一下TCP协议的特性,有一道比较经典的题:如何使用UDP实现可靠传输,通过应用程序的代码,完成可靠传输的过程? 原则,TCO有啥就吹啥,引入滑动窗口,引入流量控制&#x…

【RabbitMQ——具体使用场景】

1. 异步 1.1 同步异步的问题(串行) 串行方式:将订单信息写入数据库成功后,发送注册邮件,再发送注册短信。以上三个任务全部完成后,返回给客户端 public void makeOrder(){// 1 :保存订单 orderService.…

排水系统C++

题目: 样例解释: 1 号结点是接收口,4,5 号结点没有排出管道,因此是最终排水口。 1 吨污水流入 1 号结点后,均等地流向 2,3,5 号结点,三个结点各流入 1/3 吨污水。 2 号结点流入的 1/3​ 吨污水将均等地流向…

nginx打包部署前端vue项目全过程【保姆级教程】

🤹‍♀️潜意识起点:个人主页 🎙座右铭:得之坦然,失之淡然。 💎擅长领域:前端 是的,我需要您的: 🧡点赞❤️关注💙收藏💛 是我持…

【JavaScript】Bit:组件驱动开发的新时代

Bit 是一个现代化的开发工具,帮助开发者通过组件驱动的方式进行软件开发和协作。它旨在解决开发大型系统时的常见挑战,如组件的复用性、独立性和协作性问题。通过 Bit,开发团队可以更加轻松地共享、管理和维护可复用的代码组件,同…

初识算法 · 双指针(2)

目录 前言: 盛最多水的容器 题目解析: 算法原理: 算法编写: 有效三角形的个数 题目解析: 算法原理: 算法编写: 前言: 本文介绍两个题目,盛最多水的容器和有效三…

Jenkins: fontconfig head is null, check your fonts or fonts configuration;

​ 在部署jenkins第一次启动时遇到如下报错: 一大串报错,看的让人脑瓜疼。。。静静地分析一下日志,发现第一行报错信息: fontconfig head is null, check your fonts or fonts configuration。 这是个什么鬼,我也不…

师生健康信息管理:SpringBoot技术突破

第4章 系统设计 4.1 系统体系结构 师生健康信息管理系统的结构图4-1所示: 图4-1 系统结构 登录系统结构图,如图4-2所示: 图4-2 登录结构图 师生健康信息管理系统结构图,如图4-3所示。 图4-3 师生健康信息管理系统结构图 4.2…

linux文件编程_文件

1. 文件编程概述 之前在windows中对文件的操作是:打开文档—>编辑文档—>保存文档—>关闭文档 我们的Linux文件编程主要是利用代码对文件进行操作:文件创建、打开、编辑等自动化执行等 在Linux我们要使用编程调用api函数的方式进行文档的编辑…

数据结构-链表笔记

移除节点 203. 移除链表元素 - 力扣(LeetCode) /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val val; }* ListNode(int val, ListN…

C++杂项

作业&#xff1a; 将之前实现的顺序表、栈、队列都更改成模板类 顺序表 #include <iostream>using namespace std;template<typename T>class SeqList { private:T *ptr;int size; //总长度int len 0; //当前顺序表实际长度public://初始…

Vue3.X + SpringBoot小程序 | AI大模型项目 | 饮食陪伴官

gitee平台源码 github平台源码 饮食陪伴师是一个管理饮食的原生大模型小程序&#xff0c;优势&#xff1a; 精确营养监控&#xff1a;用户记录饮食后&#xff0c;我们会计算出食用的营养成分与分量&#xff0c;并反馈给用户。饮食建议有效&#xff1a;大模型经过我们训练具备大…

中建材信云智联项目总监张瑞洲受邀为第四届中国项目经理大会演讲嘉宾

全国项目经理专业人士年度盛会 中建材信云智联科技有限公司数字化事业部项目总监张瑞洲先生受邀为PMO评论主办的全国项目经理专业人士年度盛会——2024第四届中国项目经理大会演讲嘉宾&#xff0c;演讲议题为“电厂智能安全管控项目范围管理实践分享”。大会将于10月26-27日在北…

工具介绍---效率高+实用

Visual Studio Code (VS Code) 功能特点&#xff1a; 智能代码提示&#xff1a;内置的智能代码提示功能可以自动完成函数、变量等的输入&#xff0c;提高代码编写速度。插件丰富&#xff1a;支持成千上万的扩展插件&#xff0c;例如代码片段、主题、Linting等&#xff0c;能够…

67.【C语言】枚举类型

1.定义 对于有限的情况,一一列举 如一周有7天,从周一到周日;光学三原色(Red Green Blue) 2.格式 enum 枚举类型名 {//枚举常量 }; 备注:enum为enumeration缩写 3.枚举成员变量的值 #include <stdio.h> enum color {Red,Green,Blue };int main() {printf("%d…

alpine安装docker踩坑记

文章目录 前言错误场景正确操作最后 前言 你好&#xff0c;我是醉墨居士&#xff0c;最近使用alpine操作系统上docker遇到了一些错误&#xff0c;尝试解决之后就准备输出一篇博客&#xff0c;帮助有需要的后人能够少踩坑&#xff0c;因为淋过雨所以想给别人撑伞 错误场景 我…