PIC单片机入门_中断系统详解

发布者:HeavenlyWhisper最新更新时间:2018-07-30 来源: eefocus关键字:PIC单片机  中断系统 手机看文章 扫描二维码
随时随地手机看文章

1.中断的基本概念

当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到、有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原先的程序去执行,这就形成了一次“中断”。“中断”加强了单片机处理突发事件的能力,如果没有中断功能,对可能发生的特殊状况的处理就必须采用定时查询,这样就会浪费大量的CPU时间。

因此,中断是单片机中很重要的一个概念,是提高工作效率的重要功能,中断系统功能的好坏是衡量单片机功能的重要指标。单片机的“中断源”与单片机包含的外围设备有很大的关系,所谓“中断源”就是引起中断的原因或根源,就是中断请求的来源。16F873/876内部集成了12个外围设备。

外围设备在工作过程中,都需要CPU参与控制、协调或交换数据等服务,而CPU正是通过中断技术使得这些外围设备协调工作的。PIC单片机作一次中断处理的过程如下,当某一中断源发出中断请求时:
①假如CPU正在执行更重要的任务,则可采用屏蔽的方法暂时不响应该中断请求;
②如果可以响应该中断请求,则CPU执行完当前指令后,必须把断点处的程序计数器PC的值(即下一条指令的地址)压入堆栈保存起来(断点保护),也可以把一些的重要寄存器内容也保护起来(现场保护)。然后再转移到相应的中断服务子程序中执行。
③在中断服务子程序中,首先必须确定发出中断请求的中断源,然后再跳转到与该中断源相对应的程序分支中去执行中断服务程序。
④当中断服务程序执行毕后,必须先恢复被保护的寄存器的值(现场恢复),再将程序计数器PC的值从堆栈中恢复(断点恢复) ,使CPU返回断点处继续执行被中断的程序。

2.PIC16F876的中断源

PIC16F876单片机具备的中断源如下表所示:


从上表可看出,各中断源基本上都与各个外围设备模块相对应的:多数的外围设备对应着一个中断源(如定时/计数器TMR0),也有的外围设备对应二个中断源(如SCI同步/异步接收/发送器USART);有的外围设备没有中断源与之对应(如输入/输出端口 RA和RC);也有的中断源没有外围设备与之对应(例如外部中断源INT)。

每一种中断源对应了一个中断标志位,记为XXXF,以及一个中断屏蔽位或叫中断使能位,记为XXXE。中断源产生的中断信号能否到达CPU,都受控于相应的中断屏蔽位。 每个中断源申请中断时,其中断标志位会自动置位,中断标志位的清0是由用户程序完成的;而每个中断屏蔽位的置位和清位均由用户程序完成。

PIC16F876单片机的中断系统的逻辑电路如图:


图中全部的的14个中断源按两个梯队并列排开,第一梯队中只安排了3个中断源,其余的中断源全部安排到第二梯队中。所有的中断源都受“全局中断屏蔽位”(也称总屏蔽位)GIE的控制;第一梯队的中断源不仅受GIE的控制,还要受各自中断屏蔽位的控制;第二梯队的中断源不仅受到GIE和各自中断屏蔽位的控制,还要受到一个外设中断屏蔽位PEIE的控制。

3.与中断相关的寄存器

与中断有关的特殊功能寄存器SFR共有6个,分别是:
选项寄存器OPTION_REG、中断控制寄存器INTCON、第一外围设备中断标志寄存器PIR1、第一外围设备中断屏蔽寄存器PIE1(也称中断使能寄存器)、第二外围设备中断标志寄存器PIR2和第二外围设备中断屏蔽寄存器PIE2。
后5个SFR,共有40位,但仅使用了30位来控制中断,分别与图中的中断逻辑电路输入信号成严格的对应关系。


3.1 选项寄存器OPTION _REG


该寄存器包含了与定时/计数器TMR0、分频器和端口RB有关的控制位。RB端口引脚RB0和外部中断INT复用一脚,与该脚有关的一个控制位含义如下:

INTEDG:外部中断INT触发信号边沿选择位:1=选择RB0/INT上升沿触发;0=选择RB0/INT下降沿触发。

3.2 中断控制寄存器INTCON


它将第一梯队中的3个中断源的标志位和屏蔽位,以及PEIE和GIE包含在其中:

RBIF:端口RB的引脚RB4~RB7电平变化中断标志位。1=RB4~RB7已经发生了电平变化;0=RB4~RB7尚未发生电平变化。

RBIE:端口RB的引脚RB4~RB7电平变化中断屏蔽位。1=允许RB产生的中断;0=屏蔽端口RB产生的中断。
INTF:外部INT引脚中断标志位。1=外部INT引脚有中断触发信号; 0=外部INT引脚无中断触发信号。
INTE:外部INT引脚中断屏蔽位。 l=允许外部INT引脚产生的中断;0=屏蔽外部INT引脚产生的中断。

T0IF:TMR0溢出中断标志位。1=TMR0已经发生了溢出;0=TMR0尚未发生溢出。
T0IE:TMR0溢出中断屏蔽位。1=允许TMR0溢出后产生的中断; 0=屏蔽TMR0溢出后产生的中断。
PEIE:外设中断屏蔽位。1=允许CPU响应来自第二梯队中断请求0=禁止CPU响应来自第二梯队中断请求。 

GIE:全局中断屏蔽位(总屏蔽位)。1=允许CPU响应所有中断源产生的中断请求;0=禁止CPU响应所有中断源产生的中断请求。 

3.3 第一外围设备中断标志寄存器PIR1


该寄存器中各中断标志位的含义如下:

TMR1IF:定时/计数器TMR1模块溢出中断标志位。1=发生了TMR1溢出; 0=未发生TMR1溢出。
TMR2IF:定时/计数器TMR2模块溢出中断标志位。1=发生了TMR2溢出; 0=未发生TMR2溢出。
CCP1IF:输入捕捉/输出比较/脉宽调制CCP1模块中断标志位。 输入捕捉模式下:1=发生了捕捉中断请求;0=未发生捕捉中断请求。输出比较模式下:1=发生了比较输出中断请求;0=未发生比较输出中断请求。脉宽调制模式下: 无用。

SSPIF:同步串行端口(SSP)中断标志位。1=发送/接收完毕产生的中断请求;0=等待发送/接收。
TXIF:串行通信接口(SCI)发送中断标志位。1=发送完成,即发送缓冲区空 0=正在发送,即发送缓冲区未空。

RCIF:串行通信接口(SCI)接收中断标志位。1=接收完成,即接收缓冲区满0=正在接收,即接收缓冲区空。
ADIF:模拟/数字(A/D)转换中断标志位。1=发生了A/D转换中断;0=未发生A/D转换中断。
PSPIF:并行端口中断标志位,只有40脚封装型号具备,对于28脚封装型号总保持0。1=并行端口发生了读/写中断请求;0=并行端口未发生读/写中断请求。

3.4 第一外围设备中断屏蔽寄存器PIE1



该寄存器中包含的中断屏蔽位(使能位)的含义如下:

TMR1IE:定时器/计数器TMRl模块溢出中断屏蔽位。l=开放TMRl溢出发生中断;0=屏蔽TMRl溢出发生中断。

TMR2IE:定时/计数器TMR2溢出中断屏蔽位。1=开放TMR2溢出发生的中断;0=屏蔽TMR2溢出发生的中断。
CCP1IE:输入捕捉/输出比较/脉宽调制CCP1模块中断屏蔽位。1=开放CCP1模块产生的中断请求;0=屏蔽CCP1模块产生的中断请求。 
SSPIE:同步串行端口(SSP)中断屏蔽位。1=开放SSP模块产生的中断请求0=屏蔽SSP模块产生的中断请求。

TXIE:串行通信接口(SCI)发送中断屏蔽位。1=开放SCI发送中断请求;0=屏蔽SCI发送中断请求。
RCIE:串行通信接口(SCI)接收中断屏蔽位。1=开放SCI接收中断请求;0=屏蔽SCI接收中断请求。
ADIE:模拟/数字(A/D)转换中断屏蔽位。1=开放A/D转换器的中断请求;0=屏蔽A/D转换器的中断请求。 
PSPIE:并行端口中断屏蔽位,只有40脚封装型号具备,对于28脚封装型号总保持0。1=开放并行端口读/写发生的中断请求;0=屏蔽并行端口读/写发生的中断请求。

3.5 第二外围设备中断标志寄存器PIR2



CCP2IF:输入捕捉/输出比较/脉宽调制CCP2模块中断标志位。输入捕捉模式下:1=发生了捕捉中断请求(必须用软件清0);0=未发生捕捉中断请求。输出比较模式下:1=发生了比较输出中断请求(必须用软件清0);0=未发生比较输出中断请求。脉宽调制模式下:无用

BCLIF:I2C总线冲突中断标志。当同步串行端口MSSP被配置成I2C总线的主控器模式时:1=发生了总线冲突;0=未发生总线冲突。

EEIF:EEPROM写操作中断标志位。1=写操作已经完成(必须用软件清0);0=写操作未完成或尚未开始进行。 

3.6 第二外围设备中断屏蔽寄存器PIE2


CCP2IE:输入捕捉/输出比较/脉宽调制CCP2模块中断屏蔽位。1=开放CCP2模块产生的中断请求;
0=屏蔽CCP2模块产生的中断请求。

EEIE:EEPROM写操作中断屏蔽位。1=开放EEPROM写操作产生的中断请求;0=屏蔽EEPROM写操作产生的中断请求。

4.中断的处理

单片机复位后,硬件会自动设置GIE=0,屏蔽所有的中断源,假如要求单片机能响应所有中断,必须设置GIE=1。其实无论GIE或着其他中断屏蔽位是否为1,当某中断源的中断条件满足时,都会发出中断请求,即相应的中断标志位都会置1。但是否能够得到CPU的响应,则由该中断源的中断屏蔽位决定。

CPU响应中断后,自动设置GIE=0,屏蔽所有中断,以免发生重复中断响应,然后自动把PC寄存器当前值压入堆栈,并把PC值赋予地址0004H,从而转向执行中断服务子程序。 
进入中断服务程序后,程序必须要确定发出请求的中断源,这可以通过检查各中断源的标志位来实现。确定了中断源后,就用软件把该中断源的标志位清0,否则,执行中断返回指令重开中断后,假如中断标志位仍然为1,则会引起CPU重复响应同一个中断请求。

执行中断返回指令RETFIE后,不仅会将保留在堆栈中的断点地址弹回到PC寄存器中,使程序能返回到被中断的程序处;而且还会自动设置GIE=1,重新开放所有的中断源。

5.关于中断部分的总结

⑴单片机在任何情况下的复位,均会导致总屏蔽位和其他的中断屏蔽位清0,即在默认状态下,禁止CPU响应所有中断。
⑵中断标志位的状态与该所有的中断屏蔽位无关,即不管是否允许CPU响应中断源的中断请求,只要满足了中断的条件,中断标志位就会被置成1。

⑶当系统开放某一中断源时,中断源就通过中断标志位向CPU申请中断,只要将中断标志位置1,就会产生中断响应。
⑷当CPU响应任一个中断后,全局中断屏蔽位GIE将会自动清0;当中断返回时它又会自动恢复为1。 

(5)如果在中断服务期间若用软件将自动清0的GIE重新置1,这时若再出现中断请求,就会形成中断的嵌套:即在响应某一中断期间又响应了其他中断。不过嵌套的级数不能超过堆栈的深度(8级),以免造成堆栈溢出。

⑹如果同时发生多个中断请求,到底哪个中断会优先得到处理,完全取决于在中断服务子程序中检查中断源的顺序,原因是各个中断源之间不存在优先级别之分。 
⑺每一种中断源受屏蔽的次数不完全相同,第一梯队的中断源受到二次屏蔽,而第二梯队的中断源受到三次屏蔽。
⑻ PIC系列单片机的型号不同,数据存储器RAM的布局不完全相同,为工作寄存器W安排备份寄存器W_TEMP的方法也就不完全相同。


关键字:PIC单片机  中断系统 引用地址:PIC单片机入门_中断系统详解

上一篇:PIC单片机-利用Timer2定时器的溢出中断实现动态扫描数码管
下一篇:PIC单片机入门_指令系统

推荐阅读最新更新时间:2024-03-16 16:10

PIC单片机的各种中断有没有优先级之分?
PIC单片机的各种中断有没有优先级之分? 中档PIC单片机的中断入口只有一个,硬件不分优先级,但可用软件查询的方式决定其优先级高低:先查先做,优先级为高。高档的17和18系列,包括即将推出的16位dsPIC,中断有硬件优先级。
[单片机]
MMC与PIC单片机接口电路和代码设计
1 概述 Sandisc公司推出的大大容量串行Flash存储器产品——MultiMediaCard(MMC),通常叫作多媒体卡。它的体积比SmartMedia还要小, 不怕冲击,可反复读写记录30万次,驱动电压2.7~3.6V,可变时钟频率范围为0~20MHz,目前常见的容量为64MB/128MB。ATP EleCTRionICs公司已经率先推出了1GB的高容量MMC。除了体积小、寿命长、容量大等特性外,还具备存储区纠错能力;低功耗;5ms内没有接收到命令字后,自动转入休眠状态;支持热插拔等优点。MMC可以格式化为FAT文件系统,便于上位机读写。 2 MMC简介 2.1 引脚排列及功能 根据存储容量的不同,MMC有SMDB和SDM
[单片机]
MMC与<font color='red'>PIC单片机</font>接口电路和代码设计
单片机中断系统介绍_51单片机中断系统结构
什么是中断?就是打断当前要做的事,转而去执行别的事情。单片机中断就是当单片机正在执行程序的时候,突然某个按键按下了(产生外部中断),单片机就必须得去处理那个按键(中断的响应),看看是发生了什么事,按键处理完后继续回来执行程序(中断的返回)。 MCS-51单片机中断系统的结构 5个中断源的符号、名称及产生的条件如下。 INT0:外部中断0,由P3.2端口线引入,低电平或下跳沿引起。 INT1:外部中断1,由P3.3端口线引入,低电平或下跳沿引起。 T0:定时器/计数器0中断,由T0计满回零引起。 T1:定时器/计数器l中断,由T1计满回零引起。 TI/RI:串行I/O中断,串行端口完成一帧字符发送/接收后引起。 整个中断系统的结
[单片机]
单片机<font color='red'>中断系统</font>介绍_51单片机<font color='red'>中断系统</font>结构
pic关于头文件的进一步理解(基于PIC单片机 C18编译器)
一:关于处理器的寄存器定义 针对处理器的寄存器定义文件是一个汇编文件,包含特定器件上所有特殊功能寄存器的定义。编译时,针对处理器的寄存器定义文件将被编译成需要链接到应用程序的目标文件 。 例如,在 PIC18C452 针对处理器的寄存器定义文件中, PORTA 定义为: SFR_UNBANKED0 UDATA_ACS H'f80' PORTA PORTAbits RES 1 ; 0xf80 第一行指定 PORTA 所在的数据寄存器存储区和这个存储区的起始地址。 PORTA 有两个标号, PORTAbits 和 PORTA,都指向同一个地址 (本例中是 0xf80)。 二:关于头文件声明
[单片机]
PIC单片机LED流水灯程序
P IC 单片机 LED 流水灯程序 ;************************************************************* include p16f877.inc ;************************************************** __CONFIG 3F39H;设置配置位中振荡方式为XT,其它全部禁止或关闭 ;*---- MODESEL equ 20h MODESELB equ 21h Count equ 22h Count1 equ 23h Count2 equ 24h PORTDB equ 25h ;*----- org
[单片机]
Linux之ARM Cortex-A7 中断系统详解
1、中断是什么? 中断系统是一个处理器重要的组成部分,中断系统极大的提高了 CPU 的执行效率 2、STM32中断系统和 Cortex-M(STM32)中断系统的异同 STM32 的中断系统主要有以下几个关键点: ①、 中断向量表。 ②、 NVIC(内嵌向量中断控制器)。 ③、 中断使能。 ④、 中断服务函数。 2.1、中断向量表 中断向量表是一个表,这个表里面存放的是中断向量。中断服务程序的入口地址或存放中断服务程序的首地址成为中断向量,因此中断向量表是一系列中断服务程序入口地址组成的表。这些中断服务程序(函数)在中断向量表中的位置是由半导体厂商定好的,当某个中断被触发以后就会自动跳转到中断向量表中对应的中断服务程序
[单片机]
Linux之ARM Cortex-A7 <font color='red'>中断系统</font>详解
PIC单片机CCS之C语言(#USE FIXED_IO的用法)
#USE FIXED_IO 语法:#use fixed_io(port_outputs=pin.pin?) port是A~G. pin是在device.h文件中定义的脚数之一. 目的: 影响编译器如何产生输入输出代码,说明如下. 这种指令有效,直到出现下一个#use xxxx_io为止. 执行设置I/O的方法将使编译器产生代码,这种代码使I/O在每次使用的时候,要么是输入,要么是输出.根据I/O方向寄存器中的信息对引脚进行编程(I/O方向寄存器实际上被执行但不操作),这将存储一个字节到标准I/O使用的RAM中. 例子:#use fixed_io(a_outputs=PIN_A2,PIN_A3) //将PINA2和PIN_A
[单片机]
一种基于PIC单片机的便携式磁记忆检测仪
   引言   金属构件和零部件发生损坏的主要原因,是各种微观和宏观机械应力集中导致疲劳失效,其基本特征表现为材料在低于静强度极限的交变应力持续作用下,生成多种类型的微观内部缺陷,并逐渐演化为宏观裂纹,裂纹扩展最终导致结构破坏。因此,进行疲劳分析,有效评价应力变形状况,测定未来裂缝发展的位置、大小和方向,成为评价金属零部件与构件结构强度和可靠性的一个重要依据。为了及时准确的找出最大机械应力变形区域,20世纪90年代后期,以杜波夫为代表的俄罗斯学者率先提出一种崭新的诊断技术—金属磁记忆检测。本文采用PIC单片机,设计了高性价比的便携式磁记忆检测仪,具有低成本、低功耗和快速检测等特点,可以满足各种场合,特别是难以到达部位的应力集中区
[模拟电子]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved