搜档网
当前位置:搜档网 › 中断的原理和使用心得

中断的原理和使用心得

中断的原理和使用心得
中断的原理和使用心得

中断的原理和使用心得(一)

又是很长时间没有写东西了,感觉时间长不写人都变懒了。其实,说实话:不是我不写,我也在总结,单片机以前学过一次,都是这看一点,那看一点,没有系统的学习。现在工作闲的发慌,总感觉在浪费青春,才想起自己还有个爱好。就想把单片机系统的学一遍。所以,我现在也是一边学习、一边总结,可以说我也是个十足的菜鸟,还不如你呢!

很多单片机初学者都会对中断、定时/计数器、串口有些恐惧。原因有:

1.没学之前被老鸟吓。到,很多学单片机的新手问单片机难不难,就会有些老鸟故意吓唬说中断、定时器很难等等。

2.很多新手听说难学,在编程时会极力避免使用中断、定时器,以至于越不使用,越不会用,就越害怕使用。(其实我说的只是我自己遇到的一些,不必究其细节,目的只有一个,让你在学习单片机之前放下恐惧)

本节先说说中断的使用:

概念:中断是为了使单片机具有对外部或内部随机发生的事件实时处理而设置的,中断功能的存在,很大程度上提高了单片机处理外部或内部事件的能力。(纯属抄袭,但就是这个理)

51单片机的中断有:外部中断INT0 、外部中断INT1 、定时器T0 、定时器T1 、

串行口中断TI 、RI 。

我就对其一一分析,可能分析的不到位,希望大家给予指点,因为我也是才学,也是自己总结的,不可能就正确。

1. 外部中断INT0 :对应单片机12引脚(P3^2口),只看名字就知道,处理外部事件的,因为它是外部中断。它是如何处理外部事件呢?我用生活中实际的例子对应单片机的中断操作说说,可能不是很恰当,但是,目的是说明问题。

例:你正在看书,突然手机铃响了,你放下书去接电话。(这个例子都被一些出书的列举的不爱用了,但我不只是就看书,电话铃响了,接电话就完了)#include

#define uint unsigned int

#define uchar unsigned char

sbit d1=P1^0;

void delay(uint z);

void main()

{

EA=1;//开总中断

EX0=1;//开外部中断0

IT0=1;//下降沿触发

while(1)

{

}

void exter0() interrupt 0

{

d1=0;

}

我用例子对应程序来分析:

EA=1;就是你开着手机,如果你都不开手机哪肯定不会影响到你看书了。

EX0=1;如果你手机是双卡单待,相当于你SIM1卡开着。(即待机)IT0=1;是下降沿触发,就相当短信提醒,短信响一下就停了,然后你就会去看短信来处理短信内容,短信内容就相当于你中断要做的事情。

void exter0() interrupt 0

{

d1=0;

} //点亮小灯程序,这就是中断内容,就相当于你看短信。

每一句分析完了,我用例子写个程序,更直白点:

#include

#define uint unsigned int

#define uchar unsigned char

sbit d1=P1^0; //前面的就没必要说了吧!

void main()

{

打开手机;

打开手机SIM1卡:

短信提醒设为铃声,电话设为静音;(注,电话设为静音,意思是忽略电话的影响)

while(1)

{

你一直在看书;

}

void exter0() interrupt 0 短信处理程序

{

查看短信;

}

中断INT1:就不说了,就是手机SIM1卡和SIM2卡的区别。

外部中断INT0不是对应着12引脚吗:1。你打开中断,2,设置触发方式。剩下的事就是等待外部中断的,只要12引脚有任何动静,CPU都会根据情况去处理的。

举例说明这句话:1.如果你设置下降沿触发,则12引脚有个高电平到低电平的跳变,则中断就会被执行。2.如果设置低电平触发,则12引脚有底电平中断才会执行,没有中断不会执行。

先写到着,实在不知道这样写,会不会把人搞晕。。。。

我写的这些只是简单的应用,先不用去考虑什么中断标志位什么的东西,因为那些动作是由硬件自动处理的,等到定时器,串口需要软件处理时,再详细说吧!

TH0是计时器的高八位,Tl0是第八位;

举个简单的例子,在十进制里面98你想分别放大TH0,Tl0中则为

TH0=98/10;Tl0=98%10;这样TH0=9;Tl0=8;

同理,若想把一个数的高八和第八位分开,八位正好是256

所以出现上面的TH0=(65535-50000)/256;Tl0=(65535-50000)%256;

至于为什么会出现65535,这是因为这个是2^16-1,因为是从0开始算的,就像10个数,是从0到9,不是1到10;

以上是计数器的一种形式,溢出(就是到了65535之后就会重新开始)。这样的话,-50000,就是说计数50000次。

中断管理函数

中断管理函数 CM3内核支持256个中断,其中包含了16个内核中断和240个外部中断,并且具有256级的可编程中断设置。但STM32并没有使用CM3内核的全部东西,而是只用了它的一部分。STM32有76个中断,包括16个内核中断和60个可屏蔽中断,具有16级可编程的中断优先级。而我们常用的就是这60个可屏蔽中断,所以我们就只针对这60个可屏蔽中断进行介绍。 在MDK内,与NVIC相关的寄存器,MDK为其定义了如下的结构体: typedef struct { vu32 ISER[2]; u32 RESERVED0[30]; vu32 ICER[2]; u32 RSERVED1[30]; vu32 ISPR[2]; u32 RESERVED2[30]; vu32 ICPR[2]; u32 RESERVED3[30]; vu32 IABR[2]; u32 RESERVED4[62]; vu32 IPR[15]; } NVIC_TypeDef; STM32的中断在这些寄存器的控制下有序的执行的。了解这些中断寄存器,你才能方便的使用STM32的中断。下面重点介绍这几个寄存器: ISER[2]:ISER全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32的可屏蔽中断只有60个,这里用了2个32位的寄存器,总共可以表示64个中断。而STM32只用了其中的前60位。ISER[0]的

bit0~bit31分别对应中断0~31。ISER[1]的bit0~27对应中断32~59;这样总共60个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考 stm32f10x_nvic..h里面的第36行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER一样。这里要专门设置一个ICER来清除中断位,而不是向ISER写0来清除,是因为NVIC的这些寄存器都是写1有效的,写0是无效的。具体为什么这么设计,请看《CM3权威指南》第125页,NVIC概览一章。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0是无效的。 ICPR[2]:全称是:Interrupt Clear-Pending Registers,是一个中断解挂控制寄存器组。其作用与ISPR相反,对应位也和ISER是一样的。通过设置1,可以将挂起的中断接挂。写0无效。 IABR[2]:全称是:Active Bit Registers,是一个中断激活标志位寄存器组。对应位所代表的中断和ISER一样,如果为1,则表示该位所对应的中断正在被执行。这是一个只读寄存器,通过它可以知道当前在执行的中断是哪一个。在中断执行完了由硬件自动清零。 IPR[15]:全称是:Interrupt Priority Registers,是一个中断优先级控制的寄存器组。这个寄存器组相当重要!STM32的中断分组与这个寄存器组密切相关。IPR寄存器组由15个32bit的寄存器组成,每个可屏蔽中断占用8bit,这样总共可以表示15*4=60个可屏蔽中断。刚好和STM32的可屏蔽中断数相等。IPR[0]的[31~24],[23~16],[15~8],[7~0]分别对应中中断3~0,依次类推,总共对应60个外部中断。而每个可屏蔽中断占用的8bit并没有全部使用,而是只用了高4位。这4位,又分为抢占优先级和子优先级。抢占优先级在前,子优先级在后。而这两个优先级各占几个位又要根据SCB->AIRCR中中断分组的设置来决定。 这里简单介绍一下STM32的中断分组:STM32将中断分为5个组,组0~4。该分组的设置是由SCB->AIRCR寄存器的bit10~8来定义的。具体的分配关系如下表所示:

实验四单片机中断优先级实验

实验四单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 1.从 ① ②RES、 ③ ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。 2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计

通过菜单“source→Add/Remove Source Files…”新建源程序文件:。 通过菜单“source→”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件。 3.源程序编译汇编、生成目标代码文件 通过菜单“source→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。

设计带屏蔽中断优先级排队电路

┊┊┊┊┊┊┊┊┊┊┊┊┊装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊1. 设计题目 设计带中断屏蔽位的中断优先权排队带电路。 2.设计目的 1.对已学过的组成原理知识知识进行综合运用。 2.能按要求设计出具有一定功能的逻辑电路。 3.设计任务 1、已知在多级中断中,每一级均有一根中断请求线送往CUP的中断优 先级排队电路,对每一级赋予了不同的优先级。这是一种独立请求的逻辑结构。 2、而且中断请求信号保存在中断请求寄存器当中,经过“中断屏蔽” 寄存器控制后,可能有多个请求信号进入排队电路。而排队电路就可以根据事先设计好的逻辑电路判断那个设备的优先级最高,从而响应该设备的中断请求。 2、利用Quartus II完成电路图的绘制,选择合适的逻辑电路和芯片。 3、对所设计的电路分析其性能优劣,并与所熟悉的其他电路做比较, 总结各自优缺点,利用软件进行仿真。 4.设计分析 因为在该电路要用到充当中断请求的寄存器,充当中断屏蔽的寄存器以及响应符合获得中断请求的设备的译码器。所以首先要选择以上芯片。 通过以前学习数字逻辑的知识可知道,可以使用两个74163二进制寄存器充当中断请求寄存器和中断请求屏蔽器,而是用74148-3-8译码器做为该 电路中的译码器。 5. 设计过程 5.1 设计原理 图1- 设计原理图 译码器 中断请求寄存器中断屏蔽寄存器

┊┊┊┊┊┊┊┊┊┊┊┊┊ 装┊┊┊┊┊订┊┊┊┊┊线┊┊┊┊┊┊┊┊┊┊┊┊┊ 图2- 74163二进制寄存器逻辑符号图 表1- 74163二进制寄存器功能表 由上面图1和表1可知,要使中断寄存器与中断屏蔽器同步置数,CR=1,LD=0,ET和EP悬空,同时给一个CP一个高电位。 D0 D1 D2 D3 ET 74163 EP LD CP CR Q0 Q1 Q2 Q3 模16加法计数 1 1 1 1 ↑ 保持,CO=0 1 1 1 × 保持 1 1 1 × 同步置数 × × 1 ↑ 同步清0 × × × ↑ 功能 EP ET LD /CR CP

STM32外部中断以及中断优先级

外部中断的初始化过程: 1.初始化IO为输入(可以设置上拉,下拉,浮空) 2.开启IO复用时钟 3.开启与该IO相对的线上(详解下) 4.配置NVIC,使能中断 5.编写中断服务函数 外部中断: Stm32中总共有19个外部中断 包括: 线0-15:IO输入中断(每条线上最多有7个IO,如GPIOA~GPIOG,但是每一条线每次只允许同时连接到一个IO)

线16:PVD 线17:RTC 线18:USB 关于优先级: CM3中内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置

Stm32目前支持84个中断(16个内核+68个外部,注:不是指68个外部中断),16级可编程优先级(优先级设置寄存器中使用了4位)

注意:其中外部中断5-9和中断10-15向量存放在一起 优先级: 数值低的优先级要高于数值高的!!!!!! 上电复位后,系统默认使用的是组0; 一个系统只能使用一组优先级组,不可使用多个,优先级的设置不能超过组的范围,否则会产生不可预计的错误 1.高抢先级的中断可以打断低优先级的中断响应,构成中断嵌套 2.相同抢先级的中断不可以构成嵌套,系统会优先响应子优先级高的

3.当2(n)个相同抢先优先级和相同子优先级的中断出现,STM32首先响应中断通道所对应的中断向量地址低的那个中断 4.0号抢先优先级的中断,可以打断任何中断抢先优先级为非0号的中断;1号抢先优先级的中断,可以打断任何中断抢先优先级为2、3、4号的中断;……;构成中断嵌套。 5.所有外部中断通道的优先级控制字PRI_n也都是0,68个外部中断通道的抢先优先级都是0号,没有子优先级的区分。不会发生任何的中断嵌套行为,谁也不能打断当前正在执行的中断服务。当多个中断出现后,则看它们的中断向量地址:地址越低,中断级别越高,STM32优先响应

实验五--单片机中断优先级实验

实验五单片机中断优先级实验 一、实验目的 1.理解AT89C51单片机中断优先级和优先权。 2.用PROTEUS设计、仿真基于AT89C51单片机的中断优先级实验。 3.掌握中断编程。 4.掌握发光二极管的控制方法。 二、实验要求 单片机主程序控制P0口数码管循环显示0~8;外中断(INT0)、外中断(INT1)发生时分别在P2、P1口依次显示0~8;INT1为高优先级,INT0为低优先级。 三、电路设计 ④CAP、CAP-ELEC:电容、电解电容; ⑤CRYSTAL:晶振; ⑥BUTTON:按钮。

2.放置元器件 3.放置电源和地 4.连线 5.元器件属性设置 6.电气检测 四、源程序设计、生成目标代码文件 1.流程图 2.源程序设计 通过菜单“sourc e→Add/Remove Source Files…”新建源程序文件:DZC35.ASM。 通过菜单“sourc e→DZC35.ASM”,打开PROTEUS提供的文本编辑器SRCEDIT,在其中编辑源程序。 程序编辑好后,单击按钮存入文件DZC35.ASM。 3.源程序编译汇编、生成目标代码文件 通过菜单“sourc e→Build All”编译汇编源程序,生成目标代码文件。若编译失败,可对程序进行修改调试直至汇编成功。 五、PROTEUS仿真 1.加载目标代码文件 2.全速仿真 单击按钮,启动仿真。 (1)低优先级INT0中断主程序:当主程序运行时,单片机控制与P0

口相接的数码管循环显示1~8;而P1、P2口的数码管不显示。当前主程序控制P0口显示“8”的时刻单击“低优先级输入”按钮,触发INT0如图所示,INT0服务程序控制P2口依次显示1~8,当前显示“2”。 (2)高优先级INT1中断低优先级INT0;在上一步的基础上,即主程序被INT0中断在P0口输出“8”,而在INT0服务程序在P2口输出“2”的时刻,单击“高优先级输入”按钮,触发高优先级INT1,所在INT0被中断在显示“2”,INT1服务程序控制P1口依次显示1~8。 3.仿真调试 六、思考题: 1.说明单片机中共有哪几种中断,它们的默认优先级是什么? 2.怎样修改中断优先级?例如在本实验中要使TIMER1成为优先级最高的中断,该怎么处理?

利用中断屏蔽技术修改中断优先级

利用中断屏蔽技术修改中断优先级 摘要:在现代计算机系统中,中断系统不只是I/O系统,也是整个计算机系统必不可少的重要组成部分。中断响应的次序是固定的,中断处理的次序可以与之保持一致,也可通过修改屏蔽字来灵活地改变,文章针对三种典型的问题,提出解决思路和方法,阐述利用中断屏蔽技术修改中断优先级。 关键词:中断级屏蔽位;中断响应;中断处理 当CPU与外设交换信息时,如果采用查询的方式,则CPU要浪费很多时间去等待外设,为了解决快速CPU与慢速外设之间的矛盾,一方面提高外设的工作速度,另一方面发展了中断的概念。中断概念的出现,是计算机系统结构设计中的一个重大变革。中断是指CPU终止正在执行的程序,转去处理随机提出的请求,待处理完后,再回到原先被打断的程序继续恢复执行的过程。响应和处理各种中断的软、硬件总体称为中断系统。中断系统是整个计算机系统必不可少的重要组成部分。它对程序的监视和跟踪、人机联系、故障处理、多道程序和分时处理、实时处理、目态程序和操作系统的联系、I/O处理以及多处理机系统中各机的联系等都起着重要的作用。中断响应的次序是固定的,中断处理的次序可以与之保持一致,也可通过修改屏蔽字来灵活地改变,文章针对三种典型的问题,提出解决思路和方法,阐述利用中断屏蔽技术修改中断优先级。 1 确定中断屏蔽字 引起中断的各种事件称为中断源。在中、大型计算机系统中,中断源个数多达几十甚至几百个,为每个中断源单独形成入口,显然很困难,也没有这种必要,为简化中断处理程序入口地址形成硬件,将中断源归成几类,每一类中各中断源性质比较接近,对每一类给定一个中断处理程序入口,再由软件转入对相应的中断源进行处理。中断的特点是具有随机性,常常会同时发生多个中断请求,为解决这个问题,需要根据中断的性质、紧迫性、重要性以及软件处理的方便性把中断分成不同的级别,按照优先次序进行响应和处理。在现代计算机系统中,中断优先级一般是由硬件的排队器实现的,因此,当有多个中断源同时请求中断服务时,中断响应次序的高低是固定死的。处理机在执行某一个级别的中断源的中断服务程序时,较之同级的或低级的中断请求不能中断其处理,只有较之高级的中断请求可以中断其处理。为了能由操作系统灵活改变实际的中断处理次序,设置了中断级屏蔽位寄存器,以决定某级中断请求能否进入中断响应排队器,只有能进入排队器的中断请求,才有机会得到响应,从而就可改变中断实际处理完的次序,PSW中包含有中断级屏蔽位字段。因此,引出了第一种典型的问题:给定中断响应次序和希望的中断处理次序,怎么确定各级中断的屏蔽字,方法是:某级中断的屏蔽字中,自身及处理次序较之低的各级中断需要屏蔽。需要特别注意的是,有关中断级屏蔽位“0”、“1”是屏蔽还是“开放”中断,不同机器有着不同的定义,不要将“0”、“1”的含义搞反了。现举例说明,假设机器有5级中断,中断响应优先次序为1→2→3→4→5,令”0”对应于屏蔽,“1”对应于开放,若希望中断处理次序也为1→2→3→4→5,则只需将各级中断处理程序的中断级屏蔽位设置成如表1所示的即可。

STM32 中断优先级理解

CM3 内核支持256 个中断,其中包含了16 个内核中断和240 个外部中断,并且具有256级的可编程中断设置。但STM32 并没有使用CM3 内核的全部东西,而是只用了它的一部分。STM32 有84 个中断,包括16 个内核中断和68 个可屏蔽中断,具有16 级可编程的中断优先级。而我们常用的就是这68 个可屏蔽中断,但是STM32 的68 个可屏蔽中断,在STM32F103 系列上面,又只有60 个 (在107 系列才有68 个)。 在MDK 内,与NVIC 相关的寄存器,MDK 为其定义了如下的结构体: 点击(此处)折叠或打开 1.typedef struct 2.{ 3.vu32 ISER[2]; 4.u32 RESERVED0[30]; 5.vu32 ICER[2]; 6.u32 RSERVED1[30]; 7.vu32 ISPR[2]; 8.u32 RESERVED2[30]; 9.vu32 ICPR[2]; 10.u32 RESERVED3[30]; 11.vu32 IABR[2]; 12.u32 RESERVED4[62]; 13.vu32 IPR[15]; 14.} NVIC_TypeDef; STM32 的中断在这些寄存器的控制下有序的执行的。只有了解这些中断寄存器,才能了解STM32 的中断。下面简要介绍这几个寄存器: ISER[2]:I SER 全称是:Interrupt Set-Enable Registers,这是一个中断使能寄存器组。上面说了STM32F103 的可屏蔽中断只有60 个,这里用了 2 个32 位的寄存器,总共可以表示64 个中断。而STM32F103 只用了其中的前60 位。ISER[0]的bit0~bit31 分别对应中断0~31。ISER[1]的bit0~27 对应中断32~59;这样总共60 个中断就分别对应上了。你要使能某个中断,必须设置相应的ISER 位为1,使该中断被使能(这里仅仅是使能,还要配合中断分组、屏蔽、IO 口映射等设置才算是一个完整的中断设置)。具体每一位对应哪个中断,请参考stm32f10x_nvic..h 里面的第36 行处。 ICER[2]:全称是:Interrupt Clear-Enable Registers,是一个中断除能寄存器组。该寄存器组与ISER 的作用恰好相反,是用来清除某个中断的使能的。其对应位的功能,也和ICER 一样。这里要专门设置一个ICER 来清除中断位,而不是 向ISER 写0 来清除,是因为NVIC 的这些寄存器都是写 1 有效的,写0 是无效的。 ISPR[2]:全称是:Interrupt Set-Pending Registers,是一个中断挂起控制寄存器组。每个位对应的中断和ISER 是一样的。通过置1,可以将正在进行的中断挂起,而执行同级或更高级别的中断。写0 是无效的。

单片机原理课后习题整理1.0

第1章思考题及习题1参考答案 一、填空 1. 除了单片机这一名称之外,单片机还可称为或。答:微控制器,嵌入式 控制器. 3. AT89S52单片机工作频率上限为 MHz。答:33 MHz。 三、判断对错 1. STC系列单片机是8051内核的单片机。对 2. AT89S52与AT89S51相比,片内多出了4KB的Flash程序存储器、128B的RAM、1个中断 源、1个定时器(且具有捕捉功能)。对 3. 单片机是一种CPU。错 4. AT89S52单片机是微处理器。错 5. AT89C52片内的Flash程序存储器可在线写入,而AT89S52则不能。错 6. 为AT89C51单片机设计的应用系统板,可将芯片AT89C51直接用芯片AT89S51替换。对 7. 为AT89S51单片机设计的应用系统板,可将芯片AT89S51直接用芯片AT89S52替换。对 8. 单片机的功能侧重于测量和控制,而复杂的数字信号处理运算及高速的测控功能则是DSP 的长处。对 四、简答 4. 解释什么是单片机的在系统编程(ISP)与在线应用编程(IAP)。 答:单片机的在系统编程ISP(In System Program),也称在线编程,只需一条与PC机USB口或串口相连的ISP下载线,就可把仿真调试通过的程序代码从PC机在线写入单片机的Flash存储器内,省去了编程器。在线应用编程(IAP)就是可将单片机的闪存内的应用程序在线修改升级。

第2章思考题及习题2参考答案 一、填空 1. 在AT89S52单片机中,如果采用6MHz晶振,一个机器周期为。答:2μs 2. AT89S52单片机的机器周期等于个时钟振荡周期。答:12 9. AT89S52单片机程序存储器的寻址范围是由程序计数器PC的位数所决定的,因为AT89S52单片机的PC是16位的,因此其寻址的范围为 KB。答:64 10. AT89S52单片机复位时,P0~P3口的各引脚为电平。答:高 11. AT89S52单片机使用片外振荡器作为时钟信号时,引脚XTAL1接,引脚XTAL2的接法是。答:片外振荡器的输出信号,悬空 二、判断对错 1. 使用AT89S52单片机且引脚EA=1时,仍可外扩64KB的程序存储器。错 2. 区分片外程序存储器和片外数据存储器的最可靠的方法是看其位于地址范围的低端还是高端。错 3. AT89S52单片机共有32个特殊功能寄存器,它们的位都是可以用软件设置的,因此,都

中断系统及中断优先级实验

中断系统及中断优先级实验 1.实验目的 1)扩展八个发光二极管 2)用2个按键模拟外部中断源 3)案件独立模拟中断 4)中断优先级控制 2.实验设备 1)Usb通讯线 2)CH340usb接口模块 3)74hc245 4)74hc138 5)排阻4.7k9脚 6)排阻4.7k5脚 7)300R色环电阻 8)1k色环电阻 9)三极管9012 10)led 二极管 11)陶瓷电容20pf 12)晶振11.059mhz 13)按键开关 14)万能板 15)stc89c51rc 16)焊锡 17)电烙铁 18)万能表 19)计算机 3.实验要求 1)画出电路原理图 2)用protues画出仿真图 3)根据硬件连接设计程序流程图 4)用keil软件编写程序 5)焊好板子输入程序调试完成中断优先级控制功能 4.实验原理 1、中断的概念 如果单片机没有中断功能,单片机对外部或是内部事件的处理只能采用程序查询方式,即CPU不断查询是否有事件发生。显然,采用程序查询方式,CPU不能再做别的事,而是在大部分时间处于等待状态。单片机都具有实时处理能力,能对外部或是内部发生的事件做出及时地处理,这是靠中断技术来实现的。 当CPU正在处理某件事情的时候,外部或内部发生的某一事件请求CPU迅速去处理,于是CPU暂时中止当前的工作,转去处理所发生的事件。中断服务处理程序处理完该事件后,再回到原理被中止的地方,继续原来的工作,这样的过程称为中断,如图所示。处理事件的过程称为CPU的中断响应过程。对事件的整个处理过程,称为中断服务或中断处理

实现这种功能的部件称为中断系统,产生中断的请求源称为中断源。中断源向CPU提出的处理请求,称为中断请求或中断申请。CPU暂时中止执行的程序,转去执行中断服务程序,除了硬件会自动把断点地址PC值压入堆栈之外,用户还得注意保护有关的工作寄存器、累加器、标志位等信息,这称为现场保护。最后执行中断返回指令,从堆栈中自动弹出断点地址到PC,继续执行被中断的程序,这称为中断返回。 2、MCS-51中断系统的结构 单片机的中断系统有5个中断请求源,具有两个中断优先级,可实现两级中断服务程序嵌套。用户可以用软件来屏蔽所有的中断请求,也可以用软件使CPU接受中断请求;每一个中断源可以用软件独立地控制为开中断或是关中断状态;每一个中断源中的中断级别均可用软件来设置。下图为中断系统结构图。 3、中断请求源 中断系统共有五个中断请求源它们是: 1)INT0 外部中断0请求,由INT0引脚输入,中断请求标志为IE0。 2)INT1 外部中断1请求,由INT1引脚输入,中断请求标志为IE1。 3)定时器/计数器T0溢出中断请求,中断请求标志为TF0。 4)定时器/计数器T1 溢出中断请求,中断请求标志为TF1。 5)串口中断

STM32(Cortex-M3)中断优先级理解

STM32(Cortex-M3)中的优先级理解 很多人在配置STM32中断时对固件库中的这个函数NVIC_PriorityGroupConfig()——配置优先级分组方式,会很不理解,尤其是看中文翻译版的,因为中文翻译版里把这里翻译成“先占优先级和从优先级”这样翻译其实是不对的,很容易让人误解。为了便于大家理解,有必要先解释两个概念:抢占式优先级/响应优先级: STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套在低抢占式优先级的中断中。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序决定先处理哪一个。 看了上面的介绍后,相信大家都明白了这里面的关系了,总结下便是:抢占式优先级>响应优先级>中断表中的排位顺序(其中“>”理解为比较的方向)。 正是因为每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位可以有8种分配方式,如下: 1. 所有8位用于指定响应优先级 2. 最高1位用于指定抢占式优先级,最低7位用于指定响应优先级 3. 最高2位用于指定抢占式优先级,最低6位用于指定响应优先级 4. 最高3位用于指定抢占式优先级,最低5位用于指定响应优先级 5. 最高4位用于指定抢占式优先级,最低4位用于指定响应优先级 6. 最高5位用于指定抢占式优先级,最低3位用于指定响应优先级 7. 最高6位用于指定抢占式优先级,最低2位用于指定响应优先级 8. 最高7位用于指定抢占式优先级,最低1位用于指定响应优先级 以上便是优先级分组的概念,但是Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位,这4个寄存器位的分组方式如下:第0组:所有4位用于指定响应优先级 第1组:最高1位用于指定抢占式优先级,最低3位用于指定响应优先级 第2组:最高2位用于指定抢占式优先级,最低2位用于指定响应优先 第3组:最高3位用于指定抢占式优先级,最低1位用于指定响应优先级 第4组:所有4位用于指定抢占式优先级 这里便对于于文章最前提到的固件库里相关的函数了——NVIC_PriorityGroupConfig(u32 NVIC_PriorityGroup),函数的参数共有5种: 这个函数的参数(NVIC_PriorityGroup值)有下列5种: NVIC_PriorityGroup_0 => 选择第0组 NVIC_PriorityGroup_1 => 选择第1组 NVIC_PriorityGroup_2 => 选择第2组 NVIC_PriorityGroup_3 => 选择第3组 NVIC_PriorityGroup_4 => 选择第4组

STM32中断优先级相关概念与使用笔记

STM32中断优先级相关概念与使用笔记 上海 华东师范大学 通信工程系 ma-chao 一、基本概念 1.ARM cortex_m3内核支持256个中断(16个内核+240外部)和可编程256级中断优先级的设置,与其相关的中断控制和中断优先级控制寄存器(NVIC、SYSTICK等)也都属于cortex_m3内核的部分。STM32采用了cortex_m3内核,所以这部分仍旧保留使用,但STM32并没有使用cortex_m3内核全部的东西(如内存保护单元MPU等),因此它的NVIC是cortex_m3内核的NVIC的子集。 2.STM32目前支持的中断共为84个(16个内核+68个外部),和16级可编程中断优先级的设置(仅使用中断优先级设置8bit中的高4位,见后面解释)。《参考最新101xx-107xx STM32 Reference manual, RM0008》。 3.以下主要对“外部中断通道”进行说明。 对于cortex_m3内核所支持的240个外部中断,我在这里使用了“中断通道”这个概念,因为尽管每个中断对应一个外围设备,但该外围设备通常具备若干个可以引起中断的中断源或中断事件。而该设备的所有的中断都只能通过该指定的“中断通道”向内核申请中断。因此,下面关于中断优先级的概念都是针对“中断通道”的。当该中断通道的优先级确定后,也就确定了该外围设备的中断优先级,并且该设备所能产生的所有类型的中断,都享有相同的通道中断优先级。至于该设备本身产生的多个中断的执行顺序,则取决于用户的中断服务程序。 4. STM32可以支持的68个外部中断通道,已经固定的分配给相应的外部设备。每个中断通道都具备自己的中断优先级控制字节PRI_n(8位,但在STM32中只使用4位,高4位有效),每4个通道的8位中断优先级控制字(PRI_n)构成一个32位的优先级寄存器(Priority Register)。68个通道的优先级控制字至少构成17个32位的优先级寄存器,它们是NVIC 寄存器中的一个重要部分。 5.对于这4bit的中断优先级控制位还必须分成2组看:从高位开始,前面是定义抢先式优先级的位,后面用于定义子优先级。4bit的分组组合可以有以下几种形式: 编 号 分配情况 7 0:4 无抢先式优先级,16个子优先级 6 1:3 2个抢先式优先级,8个子优先级 5 2:2 4个抢先式优先级,4个子优先级 4 3:1 8个抢先式优先级,2个子优先级 3/2/1/0 4:0 16个抢先式优先级,无子优先级 6.在一个系统中,通常只使用上面5种分配情况的一种,具体采用哪一种,需要在初始化时写入到一个32位寄存器AIRC(Application Interrupt and Reset Control Register)

STM32中断优先级彻底讲解

STM32中断优先级彻底讲解 一:综述 STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级 的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢占优先级最多可以有四位数)。 二:优先级判断 STM32(Cortex-M3)中有两个优先级的概念——抢占式优先级和响应优先级,有人把响应优先级称作'亚优先级'或'副优先级',每个中断源都需要被指定这两种优先级。 具有高抢占式优先级的中断可以在具有低抢占式优先级的中断处理过程中被响应,即中断嵌套,或者说高抢占式优先级的中断可以嵌套低抢占式优先级的中断。 当两个中断源的抢占式优先级相同时,这两个中断将没有嵌套关系,当一个中断到来后,如果正在处理另一个中断,这个后到来的中断就要等到前一个中断处理完之后才能被处理。如果这两个中断同时到达,则中断控制器根据他们的响应优先级高低来决定先处理哪一个;如果他们的抢占式优先级和响应优先级都相等,则根据他们在中断表中的排位顺序

决定先处理哪一个。 三:优先级分组 既然每个中断源都需要被指定这两种优先级,就需要有相应的寄存器位记录每个中断的优先级;在Cortex-M3中定义了8个比特位用于设置中断源的优先级,这8个比特位在NVIC应用中断与复位控制寄丛器(AIRCR)的中断优先级分组域中,可以有8种分配方式,如下: 所有8位用于指定响应优先级 最高1位用于指定抢占式优先级,最低7位用于指定响应优先级 最高2位用于指定抢占式优先级,最低6位用于指定响应优先级 最高3位用于指定抢占式优先级,最低5位用于指定响应优先级 最高4位用于指定抢占式优先级,最低4位用于指定响应优先级 最高5位用于指定抢占式优先级,最低3位用于指定响应优先级 最高6位用于指定抢占式优先级,最低2位用于指定响应优先级 最高7位用于指定抢占式优先级,最低1位用于指定响应优先级 这就是优先级分组的概念。 Cortex-M3允许具有较少中断源时使用较少的寄存器位指定中断源的优先级,因此STM32把指定中断优先级的寄存器位减少到4位(AIRCR高四位),这4个寄存器位的分组方式如下:

中断优先级控制及中断保护实验报告

中断优先级控制及中断保护 学生:何绍金 学号:201203870408 专业班级:自动化1202 指导老师:杨东勇 2014年12月

一、实验目的 1、掌握单片机中断机制。 2、熟悉中断的应用和编程。 二、实验设备 统一电子开发平台。 三、实验要求 连接单片机最小系统和发光二极管阵列的电路并编写程序,学习单片机中断机制,及中断优先级和中断保护的方法,使用独立式按键B 连接INT0(P3.2),按键F 连接INT1(P3.3),在平时状态下,发光二极管行以200ms 的时间间隔,依次点亮。B 键按下时INT0 中断处理程序点亮P0.0 对应的发光管2秒钟,其他发光管熄灭;F 键按下时P0.1 对应发光管点亮2秒,其他发光管熄灭。 四、实验原理 实验板8051芯片有四级中断优先级的14个中断源。通过几个寄存器来设置4级中断。通过IE, IP, IPH,AUXIE,AUXIP, AUXIPH, XICON和TCON。 1.中断源 表1列出了所有的中断源,使能位被允许,中断请求时硬件会产生一个中断请求标志。当然,总中断使能位EA( IE 寄存器)必须使能。中断请求位能由软件置1或清零, 这和硬件置1或清零结果相同。同理,中断可以由软件产生或取消中断向量地址表示中断服务程序的入口地址。

2. 与中断相关的寄存器 下面是中断过程中的相关特殊功能寄存器IE(地址A8H, 中断使能寄存器, 复位值=0x00,0000B) EA: 总中断使能位. EA = 0, 禁止所有中断. EA = 1, 使能所有中断 ET2: 定时器2 中断使能. ES: 串口中断使能 ET1: 定时器1 中断使能 EX1: 外部中断1 使能. ET0: 定时器0 中断使能EX0: 外部中断0 使能. IP (地址B8H,中断优先级寄存器, 复位值=xx00,0000B) PT2: 定时器2 中断优先级位. PS: 串口中断优先级位. PT1: 定时器1 中断优先级位. PX1: 外部中断1 优先级位. PT0: 定时器0 中断优先级位. PX0: 外部中断0 优先级位. IPH (地址B7H, 中断优先级高位寄存器, 复位值=0000,0000B) PX3H: 外部中断3 优先级位, H. PX2H: 外部中断2 优先级位, H. PT2H: 定时器2 中断优先级位, H. PSH: 串口中断优先级位, H. PT1H: 定时器1 中断优先级位, H. PX1H: 外部中断1 优先级位, H. PT0H: 定时器0 中断优先级位, H. PX0H: 外部中断0 优先级位, H. AUXIE (地址ADH, 辅助中断使能寄存器, 复位值=xx00,0000B) EKB: 键盘中断使能位. ES2: UART2 中断使能位. EBD: 欠压检测中断使能位. EPCA: PCA 中断使能位. EADC: ADC 中断使能位. ESPI: SPI 中断使能位.

计算机原理实验-外部中断实验

计算机原理与应用实验 实验名称:外部中断实验 学院:信息与通信工程学院 班级:2017211113 姓名:陈艺文 学号:2017210374 同组成员姓名:李凝 同组成员学号:2017210371

一、实验目的 1. 掌握NVIC 中断优先级配置。 2. 学会外部中断配置。 二、实验原理及内容 (一)实验原理 电路结构如图3.1 所示 1. NVIC 中断优先级 NVIC 是嵌套向量中断控制器,控制着整个芯片中断相关的功能,它跟内核紧密耦合,是内核里面的一个外设。但是各个芯片厂商在设计芯片的时候会对Cortex-M4 内核里面的NVIC 进行裁剪,把不需要的部分去掉,所以说STM32 的NVIC 是Cortex-M4 的NVIC 的一个子集。 CM4 内核可以支持256个中断,包括16个内核中断和240个外部中断,256 级的可编程中断设置。对于STM32F4 没有用到

CM4 内核的所有东西,只是用到了一部分,对于STM32F40 和41 系列共有92个中断,其中有10个内核中断和82个可屏蔽中断,常用的为82个可屏蔽中断。 ISER[8]—中断使能寄存器组,用来使能中断,每一位控制一个中断,由于上面已经说明了控制82 个可屏蔽的中断,因此利用ISER[0~2]这三个32 位寄存器就够了。一下的几个寄存器同理。 ICER[8]—中断除能寄存器组,用来消除中断。 ISPR[8]—中断挂起控制寄存器组,用来挂起中断。 ICPR[8]—中断解挂控制寄存器组,用来解除挂起。 IABR[8]—中断激活标志寄存器组,对应位如果为1 则表示中断正在被执行。 IP[240]—中断优先级控制寄存器组,它是用来设置中断优先级的。我们只用到了IP[0]~IP[81],每个寄存器只用到了高4 位,这4 位又用来设置抢占优先级和响应优先级(有关抢占优先级和响应优先级后面会介绍到),而对于抢占优先级和响应优先级各占多少位则由AIRCR 寄存器控制,相关设置如表 3.1 所示。 关于抢占优先级和响应优先级的理解,可以将它们简单的理解为两个

51单片机的默认中断优先级都是低级及中断嵌套

51单片机的默认中断优先级都是低级及 中断嵌套 51单片机(80C51系列)有5个中断源,2个优先级,可以实现二级中断服务嵌套。现在很多扩展的51单片机已经有4个优先级(或更多)和更多的中断源了。 在说到中断之前,我先来定义一下优先级,明白了什么是优先级,后面的阐述就容易明白了。实际上很多人都是混淆了优先级的含义,所以才觉得糊里糊涂。 中断的优先级有两个:查询优先级和执行优先级。 什么是查询优级呢?我们从datasheet或书上看到的默认(IP寄存器不做设置,上电复位后为00H)的优先级:外部中断0 >; 定时/计数器0 >; 外部中断1 >; 定时/计数器1 >; 串行中断 或 int0,timer0,int1,timer1,serial port 或 INT0、T0、INT1、T1、UART 或 PX0>;PT0>;PX1>;PT1>;PS>;...... 其实都是查询优级。首先查询优先级是不可以更改和设置的。这是一个中断优先权排队的问题。是指多个中断源同时产生中断信号时,中断仲裁器选择对哪个中断源优先处理的顺序。而这与是否发生中断服务程序的嵌套毫不相干。当CPU查询各个中断标志位的时候,会依照

上述5个查询优先级顺序依次查询,当数个中断同时请求的时候,会优先查询到高优查询先级的中断标志位,但并不代表高查询优先级的中断可以打断已经并且正在执行的低查询优先级的中断服务。 例如:当计数器0中断和外部中断1(按查询优先级,计数器0中断>;外部中断1)同时到达时,会进入计时器0的中断服务函数;但是在外部中断1的中断服务函数正在服务的情况下,这时候任何中断都是打断不了它的,包括逻辑优先级比它高的外部中断0计数器0中断。 而中断的执行优先级就是你对IP寄存器的设置了。在2个优先级的情况下,某位为1,则相应的中断源为高优先级;为0,则为低优先级。 关于中断的优先级有三条原则: 1、CPU同时接收到几个中断时,首先响应优先级最高的中断请求; 2、正在进行的中断过程不能被新的同级或低行优优先级的中断请求所中断; 3、正在进行的低行优优先级中断服务,能被高行优优先级中断请求中断; 若:同一执行优先级中的中断申请不止一个时,则有一个中断优先权排队问题。优先权排队,由中断系统硬件确定的自然优先级形成,优先权自高到低的顺序即:

MCS51中断优先级

鉴于MCS-51系统只提供“二级中断嵌套”,提出扩展51系统中断优先级的纯软件方法。其利用51系统内建的中断允许寄存器IE和中断优先级寄存器IP,通过屏蔽字机制来实现;以C51的形式,给出这种扩展方法的函数库实现,为该方法的使用赋予友好、简洁的用户接口。 引言 众所周知,MCS-51系统只提供“二级中断嵌套”,而大多数嵌入式系统希望有多于两级的优先级别。因为一般来说,系统都有掉电中断,且应置为最高优先级,这样所有其它中断只能共用一个最低优先级,如此,往往不能满足实际的逻辑需求。为了使系统具有多于两级的中断优先级别,可以利用8259A之类的中断控制芯片实现中断优先级的硬扩展,但却增加了系统的造价和复杂性。因复杂性的提高,系统的可靠性将受到影响。本文提出一种扩展MCS-51系统中断优先级的纯软件方法,不需增加任何硬件,且所需的额外资源消耗也很小。实际应用表明这种方法是可行的和有效的。 1 MCS-51的中断系统简介 MCS-51系列单片机允许有五个中断源,提供两个中断优先级,可实现二级中断嵌套。这两级优先级遵循下述规则:仅高优先级中断源可中断嵌套低优先级中断源。为实现这一规则,中断系统内部包含两个不可寻址的优先级状态触发器。当特定优先级的某中断源被响应时,相应的触发器即被置位,直到执行了RETI指令后,这个触发器才复位。在此期间,同级和低级中断将被防止。中断源的中断请求能否得到响应,受中断允许寄存器IE的控制。每个中断源的优先级可通过对中断优先级寄存器IP编程来设定:或最低,或最高。同一优先级中的各中断源同时请求中断时,由内部查询逻辑确定响应次序。查询次序依次为:外部中断0(X0)、定时器中断0(T0)、外部中断1(X1)、定时器中断1(T1)、串口中断(S)。如果当前指令是RETI或是对IE、IP操作的指令,将封装CPU对中断的响应,且必须再执行完一条指令之后才会响应中断。 2 中断优先级软扩展的方法 首先,给出软扩展的第一种方法,并分析其特点,指出其存在的缺陷。然后,基于对方法一的不足之处,给出不断完善的方法二、方法三。其中方法二是对方法一的完善,方法三是对方法二的完善,并最终解决了方法一、二中的缺陷,实现了真正的中断优先级的软扩展。 2.1 方法一

DSP中断优先级设置

原以为2812中断不能设置优先级。实际上硬件上优先级是做好的。但软件上有办法来设置优先级。请往下看: 1.首先要找到文件,DSP281x_SWPrioritizedDefaultIsr.c 和DSP281x_SWPrioritizedIsrLevels.h加载到你的程序当中。 2.在DSP281x_SWPrioritizedIsrLevels.h文件中先设置中断组的优先级级别。其中:0表示不使用;1表示优先级最高中;16表示优先级最低; 比如:我设置第9组优先级最高,第3组次之,第2,4,6组优先级为第三。其他以此类推。0表示不用。 #define INT1PL 4 // Group1 Interrupts (PIEIER1) #define INT2PL 3 // Group2 Interrupts (PIEIER2) #define INT3PL 2 // Group3 Interrupts (PIEIER3) #define INT4PL 3 // Group4 Interrupts (PIEIER4) #define INT5PL 4 // Group5 Interrupts (PIEIER5) #define INT6PL 3 // Group6 Interrupts (PIEIER6) #define INT7PL 0 // reserved #define INT8PL 0 // reserved #define INT9PL 1 // Group9 Interrupts (PIEIER9) #define INT10PL 0 // reserved #define INT11PL 0 // reserved #define INT12PL 0 // reserved #define INT13PL 5 // XINT3 #define INT14PL 5 // INT14 (TINT2) #define INT15PL 5 // DATALOG #define INT16PL 5 // RTOSINT 3.级中断设置好以后,我们就要设置每一组里的中断优先级级别。其中:0表示不用;1表示优先级最高;8表示优先级最低; 以第9组为例说明:其中,ECAN0INTA优先级最高;ECAN1INTA为第2,SCIRXINTA为第3。其他自己数。 #define G91PL 3 // SCIRXINTA (SCI-A) #define G92PL 5 // SCITXINTA (SCI-A) #define G93PL 6 // SCIRXINTB (SCI-B) #define G94PL 4 // SCITXINTB (SCI-B) #define G95PL 1 // ECAN0INTA (ECAN-A) #define G96PL 2 // ECAN1INTA (ECAN-A) #define G97PL 0 // reserved #define G98PL 0 // reserved 4.由上可知所有组里第9组优先级最高,第9组中ECAN0INTA(G95PL)优先级最高。优先级设置好后到DSP281x_SWPrioritizedDefaultIsr.c 文件中找到相应的函数。我这里就拿ECAN0INTA(ECAN-A)来作为例子说明; 这个中断对应的函数为(DSP281x_SWPrioritizedDefaultIsr.c 文件里可以找到)如下: //--------------------------------------------------------------------------- // eCAN-A Default ISRs: // // Connected to PIEIER9_5 (use MINT9 and MG95 masks): #if (G95PL != 0) interrupt void ECAN0INTA_ISR(void) // eCAN-A { // Set interrupt priority: volatile Uint16 TempPIEIER = PieCtrlRegs.PIEIER9.all;

相关主题