AVR单片机ATemga328P中断原理的介绍

2023-11-14

1、一AVR单片机中断原理的介绍

ATmega328P微控制器具有两个外部中断引脚,分别是INT0和INT1。

  • 外部中断0(INT0):它对应的引脚是PD2(数字引脚2)。INT0可以用于响应外部信号的边沿触发(上升沿、下降沿或任意边沿),并触发相应的中断服务程序。INT0具有附加的可选特性,例如使能/禁用中断、选择触发边沿、使能上拉电阻等。

  • 外部中断1(INT1):它对应的引脚是PD3(数字引脚3)。INT1的功能与INT0类似,它也可以用于响应外部信号的边沿触发,并触发相应的中断服务程序。INT1同样具有附加的可选特性,例如使能/禁用中断、选择触发边沿、使能上拉电阻等。

这两个外部中断引脚提供了一种机制,使得ATmega328P能够在外部事件发生时及时中断当前的程序执行,以处理外部事件或执行其他特定的任务。程序员可以根据应用需求来配置和利用这些外部中断功能。


ATmega328单片机具有26个中断源。每个中断源都有个独立的中断向量作为中断服务程序的入口地址,而且所有的中断源都有自己独立的使能位。如果全局中断I和相应的中断使能位都置位,则在中断标志位置位时将执行中断服务程序。

一个中断产生后,全局中断使能位I将被清零,后续的中断被屏蔽。用户可以在中断服务程序里面对工置位从而开发中断,在中断返回后全局中断位I将重新置位。

ATmega328P单片机中断向量表介绍:

ATmega328单片机具有2个外部中断,分别是INT0(中断号为2),INT1(中断号为1),这2个外部中断都是由单片机的引脚触发。需要注意的是,如果允许外部中断的话,即使是INT0,INT1这2个引脚都设置为输出方式,外部中断也会触发。INT0,INT1外部中断可以选择的触发方式有上升沿触发、下降沿触发以及低电平触发;使用外部中断涉及到的寄存器有:

1.1 外部中断控制寄存器A

EICRA(External Interrupt Control Register A):这是一个8位寄存器,用于配置外部中断的触发方式。它的低两位(ISC01和ISC00)控制INT0的触发方式,而高两位(ISC11和ISC10)控制INT1的触发方式。这些位可用于选择外部中断的触发边沿(上升沿、下降沿或任意边沿)。

ISC11 ISC10 说明
0 0 INT1引脚为低电平时产生中断请求
0 1 INT1引脚上的任意逻辑电平变化都会产生中断请求
1 0 INT1引脚为下降沿产生中断请求
1 1 INT1引脚为上升沿产生中断请求

ISC01 ISC00 说明
0 0 INT0引脚为低电平时产生中断请求
0 1 INT0引脚上的任意逻辑电平变化都会产生中断请求
1 0 INT0引脚为下降沿产生中断请求
1 1 INT0引脚为上升沿产生中断请求

1.2 外部中断屏蔽寄存器

EIMSK(External Interrupt Mask Register):这是一个8位寄存器,用于使能/禁用外部中断。它包含两个位用于使能/禁用INT0和INT1外部中断。设置EIMSK寄存器的相应位可以启用对应的外部中断功能。

当 INT1 位被设置1并且状态寄存器SREG中的I位被设置1时,外部引脚中断被启用。 外部中断控制寄存器 A (EICRA) 中的中断检测控制 1 位 1/0(ISC11 和 ISC10)定义外部中断是在 INT1 引脚的上升沿和/或下降沿激活还是在检测到电平时激活。 即使 INT1 配置为输出,一旦引脚电平发生了相应的变化,中断就产生。 外部中断请求1对应的中断从INT1中断向量执行。

当 INT0 位被设置1并且状态寄存器SREG中的 I 位被设置1时,外部引脚中断被启用。 外部中断控制寄存器 A (EICRA) 中的中断检测控制 0 位 1/0(ISC01 和 ISC00)定义外部中断是在 INT0 引脚的上升沿和/或下降沿激活还是在检测到电平时激活。 即使INT0配置为输出,一旦引脚电平发生了相应的变化,中断就产生。 外部中断请求0对应的中断从INT0 中断向量执行。

1.3 外部中断标志寄存器

EIFR(External Interrupt Flag Register):这是一个8位寄存器,用于指示外部中断事件的发生。当外部中断事件触发时,相应的位(INTF0和INTF1)会被置位。在处理完中断后,可以通过清除EIFR寄存器的相应位来复位中断标志。


当INT1引脚上的边沿或逻辑变化触发中断请求时,INTF1变为置位1。 如果 SREG 中的I位和IMSK中的INT1位被置位1,MCU将跳转到相应的中断向量。中断程序执行时该标志被清除。 或者,可以通过向其写入逻辑1来清除该标志。 当 INT1配置为电平中断时,该标志总是被清除。

当INT0引脚上的边沿或逻辑变化触发中断请求时,INTF0变为置位1。 如果SREG中的I位和EIMSK中的INT0位被置位1,MCU将跳转到相应的中断向量。中断程序执行时该标志被清除。 或者,可以通过向其写入逻辑 1 来清除该标志。 当 INT0配置为电平中断时,该标志总是被清除。

二、中断服务函数写法

语法格式:

#pragma interrupt_handler<函数名>:<中断向量号>

例如定义INT0中所服务程序:

#pragma interrupt_handler into_isr: 2
void into_isr(void)
{
	//INTO中断服务函数
}

三、外部中断使用步骤

1、设置外部中断触发方式
2、使能外部中断
3、设置中断管脚(是否需要上拉电阻)
4、打开全局中断
5、选择终端号,编写中断服务函数

#include <avr/io.h>
#include <avr/interrupt.h>

// 外部中断0的中断服务函数
ISR(INT0_vect)
{
    // 在此处编写中断处理代码
    // ...
}

int main(void)
{
    // 配置引脚和外部中断

    // 设置PD2引脚为输入
    DDRD &= ~(1 << PD2);
    // 使能PD2引脚的上拉电阻
    PORTD |= (1 << PD2);

    // 配置外部中断0的触发方式为下降沿触发
    EICRA |= (1 << ISC01);
    EICRA &= ~(1 << ISC00);

    // 使能外部中断0
    EIMSK |= (1 << INT0);

    // 全局使能中断
    sei();//SREG |= (1 << 7);

    while (1)
    {
        // 主循环代码
        // ...
    }

    return 0;
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AVR单片机ATemga328P中断原理的介绍 的相关文章

  • Android BLE 扫描与 UUID 过滤器列表混淆

    我正在 Android 移动设备 A 上执行 UUID 过滤扫描 并且有两个测试用例 一个人在另一台 Android 设备 移动设备 b 上使用名为 BLE Scanner 的应用程序来创建具有两个测试服务 每个服务都有自己唯一的 UUID
  • sim800L GPRS 发布请求

    我一直在研究 LoNet 迷你 GSM 模块 SIM800L 并将其与 Arduino 连接 我已插入 SIM 移动卡并且可以连接互联网 通过串行监视器 我可以毫无问题地与它通信 但是当向网络服务器页面发出 GET 或 POST 请求时 它
  • x86 汇编中断服务程序可以调用另一个中断吗?

    我可以在独立 x686 环境中从中断服务程序中调用中断吗 那么可以执行以下操作 isr pusha call doSomething int 21h popa iret 如果可能的话 那么这些嵌套中断是否有任何重大的塌陷 虽然处理器对嵌套中
  • Linux 中断与轮询

    我正在开发一个带有 DSP 和 ARM 的系统 ARM上有一个linux操作系统 我有一个 DSP 向 ARM Linux 发送数据 在 Linux 中 有一个内核模块读取从 DSP 接收到的数据 内核模块被唤醒以读取数据 使用 DSP 和
  • Arduino从SD卡读取最后一行

    我对 Arduino 业务还很陌生 如何从 SD 卡读取最后一行 通过以下代码片段 我可以读取第一行 n 之前的所有字符 现在我想添加一个 向后 声明 或其他内容 到目前为止我的代码 include
  • HM10 ble改变特征值AT命令Arduino

    谁能帮我用AT命令写入特征值 或者如何使用Hm10模块将数据从arduino发送到另一个ble设备 HM10发送AT START后 会通告数据包 并且可以检测服务和特征 但特征值是默认的0x00 如何更改 多次检查数据表 但找不到能够执行相
  • 使用串口通过 Arduino 将多个值发送到 Raspberry

    我有一个关于 Arduino 和 Raspberry Pi 之间串行通信的问题 事实上 我想使用 Arduino 将 2 个变量发送到 Raspberry Pi 并以不同的方式使用它们 这是我的 Arduino 草图 int one 1 i
  • R 控制台可以支持后台任务或中断(事件处理)吗?

    在 R 控制台中工作时 我想设置一个后台任务来监视特定连接 并在发生事件时执行另一个函数 警报 或者 我可以进行设置 以便外部函数仅向 R 发送警报 但这似乎是同一个问题 有必要设置一个侦听器 我可以在 R 的专用进程中执行此操作 但我不知
  • 在声明对象之前在全局函数中使用类的成员函数

    我有一个事件处理函数 在该函数中调用了类的成员函数 事件处理函数在类 cpp 文件中声明 但不是类的一部分 它不是成员函数 当我编译代码时 编译器表示该函数在范围内 因为它正在调用全局事件处理函数中的成员函数 我的问题如下 有没有办法在全局
  • Arduino C++ 析构函数?

    我知道在Arduino中你不能使用delete 那么什么时候调用 C 类中定义的析构函数呢 同样 如果我想创建一个指向数组的指针 我必须使用malloc and free 当对象被销毁时 析构函数被调用 对于自动 堆栈上 变量 它在离开其作
  • Arduino串口数据解析

    我正在编写一个应用程序 通过蓝牙用我的 Android 手机控制我的机器人 一切都很顺利 数据得到回显和验证 但我在协议方面遇到了一些问题 特别是我希望我的机器人的轮子在我发送时转动一个命令 例如s 10 100 or s 30 10 数值
  • 当我启动程序时,Arduino IDE (Win10) 崩溃

    我的 Arduino IDE Win10 上的版本为 1 8 12 在启动时崩溃 运行arduino debug exe我收到此错误消息 C Program Files x86 Arduino gt arduino debug exe Se
  • Arduino Nano 33 IoT 的软件序列号

    我计划从旧的 5V Arduino Nano 迁移到新的 Arduino Nano 33 IoT 我已经使用软件串行 SoftwareSerial h 为旧的 5V Arduino Nano 编写了一个功能代码 以便与 Sim800L 模块
  • 内核与系统中的 Windows 进程

    我有一些与内核和用户模式下的 Windows 进程相关的问题 如果我有一个 hello world 应用程序和一个公开新系统调用 foo 的 hello world 驱动程序 我很好奇一旦处于内核模式 我能做什么和不能做什么 对于初学者来说
  • 使用 Arduino 来操作 Android [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有人尝试过让 Android 和 Arduino 相互通信吗 我在网上找到了几个项目 Amarino http www amarino tool
  • STM32F4 板上的 SPI 从机设置

    我正在尝试通过主从配置中的 SPI 在两个 STM32F4 发现板之间进行通信 我已经有了主设备的代码 但我对需要对从设备的 SPI 初始化进行的更改感到有点困惑 我还想在主机发送数据时实现中断 而不是让从机一直轮询 RXNE 寄存器 但是
  • 什么是遗留中断?

    我正在开发一个项目 试图弄清楚 ARM 架构的全局中断控制器中如何处理中断 我正在使用 pl390 中断控制器 我看到有一条线被称为传统中断 它绕过了分配器逻辑 假设有 2 个中断可以被编程为传统中断 任何人都可以帮助解释一下什么是遗留中断
  • 各种中断的区别:SCI、SMI、NMI、普通中断

    我正在学习英特尔架构 到目前为止我遇到过几种类型的中断 SCI 系统控制中断 硬件使用的系统中断 用于向操作系统通知 ACPI 事件 SCI 是一个有效 低电平 可共享的电平中断 SMI 系统管理中断 由遗留系统上的中断事件生成的操作系统透
  • 带 firebase 的 Nodemcu(ESP8266)

    这是我上传到 ESP8266 以连接到 firebase 的代码 include
  • USB编程

    我想对微控制器 AVR 进行编程 以通过 USB 控制一些 LED 它只是出于对如何构建和编程 USB 设备的兴趣 有一些 AVR 微控制器支持 USB 协议 或者我可以自己在另一个微控制器中实现 USB 协议 但我想知道用什么来在计算机上

随机推荐

  • Git本地项目推送到远程仓库

    目录 1 初始化git 2 添加远程地址并给地址起一个别名 3 合并远程代码 4 推送 5 常见问题 6 无法推送 7 查看远程仓库信息 8 拉取与本地不相关的git项目 9 配置ssh公钥 1 初始化git 进入项目目录 git init
  • np.mgrid

    功能 返回多维结构 常见的如2D图形 3D图形 np mgrid 第1维 第2维 第3维 第n维的书写形式为 a b c c表示步长 为实数表示间隔 该为长度为 a b 左开右闭 或 a b cj cj表示步长 为复数表示点数 该长度为 a
  • R语言实战笔记--第十六章 高级图形进阶

    R语言实战笔记 第十六章 高级图形进阶 标签 空格分隔 R语言 lattice 交互式图形 图形系统简介 本文为R语言实战中最后一章 介绍的是图形的高级进阶 主要讲述了两个包 lattice和ggplot2 以及交互式图形的做法 极大扩展了
  • NacosSpringCloud

    Nacos尝试配置SpringCloud 新来了一个项目 有并发要求 选择了springcloud这套 至于eureka已经闭源了 就没有考虑 最后选择了阿里的nacos 服务发现和配置中心都集中在注册中心 配置支持动态加载 中文文档丰富
  • 视频质量算法有几种的介绍,视频质量技术及编码

    首先介绍SSIM是一种全参考 Full Rerence 视频质量评价算法 全参考视频图像质量评价指标 它分别从亮度 对比度 结构三方面度量视频图像相似性 而全参考评价算法必须同时知道原始视频和失真视频 也就是想计算结构相似度 就得先找到两个
  • 打开win7的系统更新服务器失败,win7的windows update无法启动,手动在服务里启动提示“错误2:系统找不到指定文件...

    您好 该问题有可能是系统文件损坏导致的 建议您尝试以下方法操作 方法一 建议您暂时卸载掉电脑上安装的第三方杀毒软件 再打开控制面板 操作中心 疑难解答 点使用Windows Update 解决问题 根据提示自动修复更新是出现的问题 方法二
  • 关于HttpClient请求获取数据

    httpClient请求获取网站数据 今天一网友问我 他写的httpClient请求为什么获取不到数据 他写的代码如下 StringBuffer buffer new StringBuffer String url1 http api ji
  • 深入云存储系统Swift核心组件:Ring实现原理剖析

    深入云存储系统Swift核心组件 Ring实现原理剖析 简介 OpenStack是一个美国国家航空航天局和Rackspace合作研发的开源云计算项目 并成为Apache下的一个重要开源项目 目前已经发展到了180家公司参与其中 OpenSt
  • MySQL学习笔记

    Windows服务 启动MySQL net start mysql 创建Windows服务 sc create mysql binPath mysqld bin path 注意 等号与值之间有空格 连接与断开服务器 mysql h 地址 P
  • 改造QTabWidget的QTabBar,自绘随意控制样式,不同颜色

    1 简介 本文介绍通过自绘 随意定制QTabWidget的 TabBar的方法 可设置不同Tab页的不同背景色 前景色 边框 鼠标三态色 尺寸 以及绘制其他自定义内容 如角标 2 效果 3 主要思路 继承QTabBar 改尺寸就是重写 ta
  • CSDN周赛60期简要题解

    一转眼 周赛都举办了60期了 还以为可以 寿终正寝 了 结果61期又安排上了 打开一看 还是 计算之魂 主题的周赛 还是这种 4 非编程 2 编程 的题型 可能目前就指望着 计算之魂 主持大局 了 C 站的有生力量全扑在研发 开发各种各样酷
  • Remix 以太坊Solidity IDE搭建与初步使用

    以太坊 因为以太坊为开源社区 虽然东西很优秀 但是组件十分的杂乱 因此首先简单介绍下以太坊的一些常用组件 1 Geth Geth是由以太坊基金会提供的官方客户端软件 用Go编程语言编写的 2 Parity Parity 是对以太坊协议的另一
  • Centos7安装后没有图形界面

    Centos7虚拟机安装好后重启只能进到命令行不能进入图形界面 原因 安装时没有安装图形界面 选择了Minimal Install 解决方法 安装过程中将设置SOFTWARE SELECTION勾选GNOME Desktop gt Deve
  • 如何创建React项目

    前言 构建React项目的几种方式 create react app 脚手架快速搭建 react 项目 推荐 yeoman 脚手架搭建 react 项目 webpack 一步一步构建 react 项目 脚手架是什么 脚手架是一种约定和规范
  • MOS管的作用及原理介绍

    MOS管的英文全称叫MOSFET Metal Oxide Semiconductor Field Effect Transistor 即金属氧化物半导体型场效应管 属于场效应晶体管中的绝缘栅型 因此 MOS管有时被称为场效应管 在一般电子电
  • Modbus RTU 工业通讯技术实现

    Modbus 是一个工业上常用的通讯协议 一种通讯约定 ModBus 协议是应用层报文传输协议 OSI 模型第7层 它定义了一个与通信层无关的协议数据单元 PDU 即PDU 功能码 数据域 ModBus 协议能够应用在不同类型的总线或网络
  • javaWeb中如何防止两个人同时操作同一条记录(限制单人操作),使用redis的解决方式

    最近在做demo的时候 碰到这么一个问题 当页面上同一角色有两个人登录的时候 他们同时操作统一条记录 简言之就是 同一记录同一时刻多人操作 这种情况在我的业务中回导致数据的冗余 干扰正常的程序运行 当时想到的解决办是锁表或者使用缓存 当然其
  • h0105 (10 分) c/c++

    c 代码 include
  • 互联网摸鱼日报(2023-03-29)

    互联网摸鱼日报 2023 03 29 InfoQ 热门话题 阿里再启组织变革 六大业务集团全面独立经营 张勇 具备条件的业务都可能独立上市 新一代Serverless事件中间件EventMesh正式毕业为Apache顶级项目 杭银消金基于
  • AVR单片机ATemga328P中断原理的介绍

    1 一AVR单片机中断原理的介绍 ATmega328P微控制器具有两个外部中断引脚 分别是INT0和INT1 外部中断0 INT0 它对应的引脚是PD2 数字引脚2 INT0可以用于响应外部信号的边沿触发 上升沿 下降沿或任意边沿 并触发相