-
2021-12-08 22:11:31
EXTI10_15共用一个中断向量地址,但是中断线EXTI_Line10~EXTI_Line15是分开的。
在初始化时,使用 或 操作进行初始化时,如下部分代码,对中断线进行初始化后,中断程序没有动作。
EXTI_InitStructure.EXTI_Line=EXTI_Line15 | EXTI_Line14 | EXTI_Line13;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);查阅网上代码发现分开写试试:
EXTI_InitStructure.EXTI_Line=EXTI_Line15;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);EXTI_InitStructure.EXTI_Line=EXTI_Line14 ;
EXTI_InitStructure.EXTI_Mode=EXTI_Mode_Interrupt;
EXTI_InitStructure.EXTI_trigger=EXTI_Trigger_Falling;
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
EXTI_Init(&EXTI_InitStructure);测试发现:外部中断可以有效执行!
奇怪的配置过程,可能是库函数对寄存器的操作不接受或操作吧!
更多相关内容 -
TMS320F28335外部中断总结
2020-08-19 00:25:11在这里我们要十分清楚DSP的中断系统。C28XX一共有16个中断源,其中有2个不可屏蔽的中断RESET和NMI、定时器1和定时器2分别使用中断13和14。这样还有12个中断都直接连接到外设中断...这样PIE共管理12*8=96个外部中断。 -
外部中断实验(急救车与交通灯)
2020-08-02 00:33:19本文主要介绍了外部中断实验(急救车与交通灯)。 -
C语言程序中的中断入口
2021-02-03 18:41:50程序中断汇编入口ext_usar.s(hanzhaowei).INCLUDE"../../periph/aic/irq.mac"#------------------------------------------------------------------------------#-功能:外部中断0中断服务程序#-调用程序:at91_IRQ0_... -
用优先权编码器扩展PIC的外部中断源
2021-01-14 17:58:11由于PIC16F 877单片机没有设置外部的中断优先级,提出了一种用74LS148优先权编码器来扩展PIC16F 877单片机的外部中断源。当PIC16F 877单片机外部有多个中断源中断请求时,74LS148优先权编码器首先对这些中断源进行... -
8086是如何确定硬件中断服务程序的入口地址的?
2021-08-01 05:46:3949%等级:9已帮助:315人中断系统功能(1)进行中断优先权排队(2)实现中断嵌套(3)自动响应中断CPU在响应中断时通常要自动做三件事:自动关闭中断和把原执行程序的断点地址压入堆栈按中断源提供的中断矢量自动转入相应...满意答案
海绵温暖smile
2017.07.16
采纳率:49% 等级:9
已帮助:315人
中断系统功能
(1)进行中断优先权排队
(2)实现中断嵌套
(3)自动响应中断
CPU在响应中断时通常要自动做三件事:
自动关闭中断和把原执行程序的断点地址压入堆栈
按中断源提供的中断矢量自动转入相应中断服务程序执行
自动或通过安排在中断服务程序中指令来撤消本次中断请求,以避免再次响应本次中断的请求
(4)中断返回
§6.3 8086/8088中断系统
中断特点:
矢量型中断,有256个中断矢量号(设备号) (0~255)
1. 中断分类
非屏蔽中断
可屏蔽中断
NMI引入,1个,不受IF的屏蔽
INTR引入,多个,受IF的屏蔽
CPU根据软件中的某条指令或者软件对标志寄存器中的设置而产生的
硬件中断
软件中断
(外部中断)
(内部中断)
非屏蔽中断请求
NMI
软件中断
硬件中断
2. 中断矢量和中断矢量表
中断矢量:是中断处理子程序的入口地址,每个中断
类型对应一个中断矢量
中断
中断矢量号代码
(0~255)
中断服务程序
一一对应
一一对应
中断矢量表:在内存中,开辟一个区域存放中断服务程序的入口地址的表.对于8086,这个区域的首地址00000H(固定)
问题:已知中断矢量号代码,怎样找到中断服务程序的入口地址
7
0
7
中断矢量表范围: 00000H ~003FFH(1KB)
每一个中断服务程序的入口地址占四个字节单元(256×4=1024B),高字节放的是段地址(CS),低字节放的是偏移地址(IP)
每个中断源对应一个中断服务程序,每一个中断服务程序都有固定的入口地址
中断矢量号N
中断矢量表的地址
中断矢量表
中断服务程序的入口 地址(CS,IP)
00分享举报
-
STM32的“外部中断”和“事件”区别和理解 .
2020-08-09 20:23:32事件是中断的触发源,开放了对应的中断屏蔽位,则事件可以触发相应的中断。 事件还是其它一些操作的触发源,比如DMA,还有TIM中影子寄存器的传递与更新;而中断是不能触发这些操作的,所以要把事件与中断区分开。 -
6.STC15W408AS单片机外部中断
2021-07-15 09:29:24一、外部中断简介 STC15W408AS单片机有4个外部中断,它们分别是:外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)。 外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,上升沿或下降沿均...一、外部中断简介
STC15W408AS单片机有4个外部中断,它们分别是:外部中断0(INT0)、外部中断1(INT1)、外部中断2(INT2)、外部中断3(INT3)。
外部中断0(INT0)和外部中断1(INT1)触发有两种触发方式,上升沿或下降沿均可触发方式
和仅下降沿触发方式。
TCON寄存器中的IT0/TCON.0和IT1/TCON.2决定了外部中断0和1是上升沿和下降沿均可触发还是仅下降沿触发。如果ITx = 0(x = 0,1),那么系统在INTx(x = 0,1)脚探测到上升沿或下降沿后均可产生外部中断。如果ITx = 1(x = 0,1),那么系统在INTx( x= 0,1)脚探测下降沿后才可产生外部中断。外部中断0(INT0)和外部中断1(INT1)还可以用于将单片机从掉电模式唤醒。
外部中断2(INT2)、外部中断3(INT3)都只能下降沿触发。外部中断2~3的中断请求标志位被隐藏起来了,对用户不可见,故也无需用户清"0"。当相应的中断服务程序被响应后或中断允许位EXn (n=2,3)被清零后,这些中断请求标志位会立即自动地被清0。这些中断请求标志位也可以通过软件禁止相应的中断允许控制位将其清"0"(特殊应用)。外部中断2(INT2)、外部中断3(INT3)也可以用于将单片机从掉电模式唤醒。
由于系统每个时钟对外部中断引脚采样1次,所以为了确保被检测到,输入信号应该至少维持2个时钟。如果外部中断是仅下降沿触发,要求必须在相应的引脚维持高电平至少1个时钟,而且低电平也要持续至少一个时钟,才能确保该下降沿被CPU检测到。同样,如果外部中断是上升沿、下降沿均可触发,则要求必须在相应的引脚维持低电平或高电平至少1个时钟,而且高电平或低电平也要持续至少一个时钟,这样才能确保CPU能够检测到该上升沿或下降沿。
二、中断结构图
这里,我们只需要看最上面的部分就可以。
三、中断寄存器
IE寄存器是中断总控制,IP是中断优先级控制寄存器,TCON的低4位是外部中断0和外部中断1控制位。一般情况下我们只需要操作IE和TCON寄存器即可。
四、实验电路图
实验现象是点按一下按钮,LED闪烁一次,和上面的按键输入实验效果是一样的。
五、实验程序
#include "stc15.h" void main() { P11 = 0; // 初始设置P1.1为低电平 熄灭LED IT0 = 1; // 设置INT0的中断类型 (1:仅下降沿 0:上升沿和下降沿) EX0 = 1; // 使能INT0中断 EA = 1; // 打开总中断 while (1); } //外部中断服务程序 void exint0() interrupt 0 //INT0中断入口 { P11 = !P11; //将P1.1口取反 }
这里需要说明的是为什么外部中断服务程序是 interrupt 0。这个后面数字和中断优先级有关。从上面的中断结构图中,我们就可以看出外部中断0的优先级是最高的,所以这里是0,其他的在后面使用到再讲。
更多首发原创,请关注我。
-
MCS-51 与 中断 有关的 寄存器、中断入口地址及编号.doc
2011-09-02 15:55:30MCS-51与中断有关的寄存器、中断入口地址及编号.doc -
S3C6410外部中断设置步骤
2014-04-15 12:29:28详细介绍S3C6410外部中断的设置步骤,适合除学者。 -
51单片机之外部中断应用实例(电平触发、边沿触发)
2019-05-15 15:10:32硬件:STC89C52RC 开发工具:Keil uVision4 前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的...下面详细讲述外部中断功能的使用。 外部中断:单片机提供的系统紧急事件的输入控制。事件触发的方式...- 硬件:STC89C52RC
- 开发工具:Keil uVision4
前言:8051是一款很经典的、历史悠久的单片机,作为一款入门级的单片机8051受到很多初学者的欢迎。89c52是8051系列的成员之一,拥有8K字节程序存储空间,512字节随机数据存储空间;I/O口控制端口、中断功能、定时器及串行接口。下面详细讲述外部中断功能的使用。
外部中断:单片机提供的系统紧急事件的输入控制。事件触发的方式包括输入信号的下降沿触发、低电平触发。当触发中断后,单片机会跳到某一个固定的地址去执行中断服务程序。
外部中断信号由INT0、INT1引脚传送进来,如图所示:
有关中断处理的相关控制寄存器如下:
- 计时计数器控制寄存器 TCON
- 中断允许控制寄存器 IE
- 中断优先权寄存器 IP
寄存器并不算多,配置起来也不复杂。先对各个寄存器进行说明:
TCON寄存器:
“T”开头的是计数/定时器相关位,“I”开头的是外部中断相关位,我们需要看的是后者:
IE寄存器:
IP寄存器:
CPU接到中断信号发生时会停止当前的工作跳转到中断服务程序。那么当CPU同时接到多个中断信号时,该怎么选择?当CPU正在中断函数时又接受到另一个中断信号,该怎么处理?
关于中断的优先级有一下原则:
1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求,低优先的进入队列等待;
2、正在进行的中断过程不能被新的同级或低优先级的中断请求所中断;
3、正在进行的低优先级中断服务,能被高优先级中断请求中断;那么,IP寄存器的某一中断配置为1就成为高优先级。每一个中断在IP里面只占一位配置位(IP.x=0或OP.x=1),也就是说系统里只存在两种优先级,要么是高优先级,要么是低优先级。
如果,任何中断都不配置IP寄存器的优先级,也等同于系统上电时,默认的优先级顺序如下:
外部中断0 > 定时/计数器0 > 外部中断1 > 定时/计数器1 > 串行中断
关于外部中断的寄存器已经了解清楚了,接下来看代码设计:
外部中断0(下降沿触发)
/*----------------------------------------------- 功能:外部中断0边沿触发 现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平; 当外部中断信号输出口P3.2接到GND时,产生了一个下降沿信号,接到P0.0 口的LED灯反转;若此后P3.2持续接到GND,LED只反转一次,这与电平触发 有区别。 ------------------------------------------------*/ #include<reg52.h> sbit LED=P0^0; //定义LED端口 void DelayMs(unsigned char t) //大致延时1mS { unsigned short T=500; while(t--) { while(--T); } } void INT0_init(void) //外部中断0初始化 { LED=1; //LED口初始值 EA=1; //全局中断开 EX0=1; //外部中断0开 IT0=1; //边沿触发 } main() { INT0_init(); while(1){ //主循环 } } //中断服务程序 interrupt 0 指明是外部中断0的中断函数 /* interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; */ void ISR_Key(void) interrupt 0 using 1 { if(!INT0){ DelayMs(10); //防抖动 if(!INT0){ LED=!LED; //按下触发一次,LED取反一次 } } }
外部中断0(电平触发)
/*----------------------------------------------- 功能:外部中断0电平触发 现象:首先将P3.2口通过上拉电阻接到电源,保证在空闲时P3.2处于高电平; 当外部中断信号输出口P3.2接到GND时,产生了一个低电平信号,接到P0.0 口的LED灯反转;若此后P3.2持续接到GND,LED会反复反转,这与边沿触 发有区别。 ------------------------------------------------*/ #include<reg52.h> sbit LED=P0^0; //定义LED端口 void DelayMs(unsigned char t) //大致延时1mS { unsigned short T=500; while(t--) { while(--T); } } void INT0_init(void) //外部中断0初始化 { LED=1; //LED口初始值 EA=1; //全局中断开 EX0=1; //外部中断0开 IT0=0; //电平触发 } main() { INT0_init(); while(1){ //主循环 } } //中断服务程序 interrupt 0 指明是外部中断0的中断函数 /* interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; */ void ISR_Key(void) interrupt 0 using 1 { if(!INT0){ DelayMs(20); //防抖动 if(!INT0){ LED=!LED; //按下触发一次,LED取反一次 } } }
外部中断1(下降沿触发)
/*----------------------------------------------- 功能:外部中断1边沿触发 现象:首先将P3.3口通过上拉电阻接到电源,保证在空闲时P3.3处于高电平; 当外部中断信号输出口P3.3接到GND时,产生了一个下降沿信号,接到P0.0 口的LED灯反转;若此后P3.3持续接到GND,LED只反转一次,这与电平触发 有区别。 ------------------------------------------------*/ #include<reg52.h> sbit LED=P0^0; //定义LED端口 void DelayMs(unsigned char t) //大致延时1mS { unsigned short T=500; while(t--) { while(--T); } } void INT1_init(void) //外部中断0初始化 { LED=1; //LED口初始值 EA=1; //全局中断开 EX1=1; //外部中断1开 IT1=1; //边沿触发 } main() { INT1_init(); while(1){ //主循环 } } /* interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; */ void ISR_Key(void) interrupt 2 using 1 { if(!INT1){ DelayMs(10); //防抖动 if(!INT1){ LED=!LED; //按下触发一次,LED取反一次 } } } #endif
外部中断1(电平触发)
/*----------------------------------------------- 功能:外部中断1电平触发 现象:首先将P3.3口通过上拉电阻接到电源,保证在空闲时P3.3处于高电平; 当外部中断信号输出口P3.3接到GND时,产生了一个低电平信号,接到P0.0 口的LED灯反转;若此后P3.3持续接到GND,LED会反复反转,这与边沿触 发有区别。 ------------------------------------------------*/ #include<reg52.h> sbit LED=P0^0; //定义LED端口 void DelayMs(unsigned char t) //大致延时1mS { unsigned short T=500; while(t--) { while(--T); } } void INT1_init(void) //外部中断1初始化 { LED=1; //LED口初始值 EA=1; //全局中断开 EX1=1; //外部中断1开 IT1=0; //电平触发 } main() { INT1_init(); while(1){ //主循环 } } /* interrupt 0 指明是外部中断0; interrupt 1 指明是定时器中断0; interrupt 2 指明是外部中断1; interrupt 3 指明是定时器中断1; interrupt 4 指明是串行口中断; */ void ISR_Key(void) interrupt 2 using 1 { if(!INT1){ DelayMs(10); //防抖动 if(!INT1){ LED=!LED; //按下触发一次,LED取反一次 } } }
以上四种模式,代码都是大同小异,比较一下就知道哪些是关键点了。
注意点:
- 上面的程序已经是测试过没有问题的,如果出现led不反转,那么检测一下电路,有一些集成了很多元件的开发板里面电路复杂,几个外围元件可能共用一个IO口,容易被干扰,以至于达不到想要的效果。最好还是买一个最小系统的单片机,所有IO独立出来。
- 在选择“电平触发”模式下,因为低电平的持续时间比较长(虽然只是按一下,对于单片机来说已经持续很长),会出现反复进入中断,导致LED不会反转,解决方法就是在进入第一次中断后,先把该中断关闭掉并且用while循环,直到中断信号引脚退出低电平状态再打开中断并退出while循环,这么做缺点就是会阻塞在中断里面,可能导致主函数里面的程序不能及时运行。
- 上面的代码比较简单,需要根据实验出现的问题进一步优化。
- 外部中断还可以应用到检测波形的周期、占空比、频率以及红外接收处理,有兴趣可以试一下。
仅供参考,错误之处以及不足之处还望多多指教。
-
单片机实验报告,存储器读写,IO端口操作,定时中断,外部中断等.pdf
2022-06-23 03:40:56单片机实验报告,存储器读写,IO端口操作,定时中断,外部中断等.pdf单片机实验报告,存储器读写,IO端口操作,定时中断,外部中断等.pdf单片机实验报告,存储器读写,IO端口操作,定时中断,外部中断等.pdf单片机实验报告,... -
STM8L152 外部中断例程
2014-12-03 14:36:54调试成功的例程,包括整个工程文件,非常适合初学者 -
80C51单片机外部中断的应用及其程序调试 (2010年)
2021-05-07 06:19:39分析了80C51单片机的2个对外中断入口INT0和INT1的结构、功能,讨论了通过控制机构的合理设置、编程,实现单片机对外中断功能的控制问题。 -
外部中断(数码骰子)
2022-04-10 10:47:44按键作为外部中断,每按一次按键后,首先控制数码管从a段到f段循环跑2圈,然后生成一个随机点数并在数码管上显示。 实验工具、器材:keil、proteus、AT89C51芯片、共阳数码管、按键 实验原理: 1、外部中断 ... -
外部中断事件
2018-11-12 23:13:23外部中断事件 众所周知,CPU在计算机系统中,除了能够执行指令,进行运算外,还应该有输入输出功能。比如说,我现在在打字输入‘a’,CPU他会处理这个按键,并在你的屏幕上显示‘a’。我们想想,它能显示,是不是... -
外部中断与内部中断原理与使用
2021-07-26 09:36:51外部中断源2个 1.INT0 — 由P3.2端口控制引入,低水平或者下降沿引起。(下降沿就是给5V后给0V形成下降电压) 2.INT1 —由P3.3端口控制引入,低水平或者下降沿引起。 (这两个中断源标志与中断方式由特殊功能寄存器... -
外部中断
2020-11-20 12:41:42文章目录外部中断硬件控制外部中断矢量外部中断控制寄存器外部中断控制位软件控制外部中断0初始化方法外部中断1初始化方法外部中断程序框架示例P3.2口脉冲输入计数 硬件控制 外部中断矢量 中断源名称 中断源地址... -
中断系统详解、外部中断
2020-11-21 11:36:5351单片机各个引脚功能 IO口引脚: 中断系统的主要功能:处理随机突发事件 中断系统结构: ...代码实现由外部中断控制P1口的电平高低: #include<reg52.h> #include<intrins.h> #define uint -
单片机外部中断.ppt
2022-06-19 21:33:07单片机外部中断.ppt该文档详细且完整,值得借鉴下载使用,欢迎下载使用,有问题可以第一时间联系作者~ -
8051单片机实战分析(以STC89C52RC为例) | 10 - 外部中断的使用
2021-06-05 10:22:208051单片机实战分析(以STC89C52RC为例) | 01 - 点亮一个LED 8051单片机实战分析(以STC89C52RC为例) | 02 - LED延时约5s闪烁 8051单片机实战分析(以STC89C52RC为例) | 03 - LED流水灯 8051单片机实战分析(以... -
单片机外部中断实验报告 (3).pdf
2022-06-22 01:56:39单片机外部中断实验报告 (3).pdf单片机外部中断实验报告 (3).pdf单片机外部中断实验报告 (3).pdf单片机外部中断实验报告 (3).pdf单片机外部中断实验报告 (3).pdf单片机外部中断实验报告 (3).pdf单片机外部中断实验... -
单片机外部中断实验报告 (2).pdf
2022-06-22 00:47:26单片机外部中断实验报告 (2).pdf单片机外部中断实验报告 (2).pdf单片机外部中断实验报告 (2).pdf单片机外部中断实验报告 (2).pdf单片机外部中断实验报告 (2).pdf单片机外部中断实验报告 (2).pdf单片机外部中断实验... -
单片机外部中断实验报告 (3).docx
2022-06-22 00:29:45单片机外部中断实验报告 (3).docx单片机外部中断实验报告 (3).docx单片机外部中断实验报告 (3).docx单片机外部中断实验报告 (3).docx单片机外部中断实验报告 (3).docx单片机外部中断实验报告 (3).docx单片机外部中断... -
单片机外部中断实验报告 (2).docx
2022-06-22 00:29:06单片机外部中断实验报告 (2).docx单片机外部中断实验报告 (2).docx单片机外部中断实验报告 (2).docx单片机外部中断实验报告 (2).docx单片机外部中断实验报告 (2).docx单片机外部中断实验报告 (2).docx单片机外部中断... -
外部中断1
2020-12-08 17:27:15/************************************************************************************** 实验现象:下载程序后,操作K4按键使LED1(D11)状态取反 接线说明: (具体接线图可见开发攻略对应实验的“实验现象... -
单片机实验之外部中断应用实验
2021-05-19 14:02:47一、实验目的1、掌握中断系统外部中断源的使用方法。 2、掌握延时程序的编程及使用方法。3、掌握Proteus软件与Keil软件的使用方法。4、掌握单片机系统的硬件和软件设计方法。 二、设计要求1、用Proteus软件画出电路... -
STM32(六)-------中断(外部中断)
2020-06-25 10:24:46F103 在内核水平上搭载了一个异常响应系统, 支持为数众多的系统异常和外部中断。 其中系统异常有 8 个(如果把 Reset 和 HardFault 也算上的话就是 10 个),外部中断有 60个。除了个别异常的优先级被定死外,其它... -
外部中断初始化配置
2021-06-02 09:55:35timer_ISR.c /*********************... *输入:uchar mode 0为外部中断0低电平触发,1为外部中断0下降沿触发 *返回:无 *************************************************/ void int0_Init(uchar mode) { IE0 = 0; -
快速复习51单片机的外部中断、计数/定时器中断和串行口中断,加代码实现
2021-09-13 15:12:32SBUF是像是李信,光信和暗信是一个英雄,但是有不同的技能和外观。