PIC系列单片机的中断处理注意事项

发布者:Xingfu8888最新更新时间:2016-11-04 来源: eefocus关键字:PIC系列  单片机  中断处理  注意事项 手机看文章 扫描二维码
随时随地手机看文章
单片机中的中断系统对电子工程师来说是解决突发事件和多任务实时处理的最好方法,熟练掌握中断技术的应用是一个合格电子工程师必备的能力。 

PIC与51系列单片机一个显著的区别就是:PIC只有一个中断入口地址(为04H),而51有多个中断源。这样对PIC来说,无论发生何种中断程序将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务程序中。在发生中断时,断点地址被首先压入硬件堆栈,而现场的一些参数须用户通过软件保存,必须保存的寄存器包括W寄存器、程序寄存器的高位字节PCLATH及状态标志寄存器STATUS等,另外一些在中断服务程序和主程序中均使用到的寄存器也必须保存,否则可能会导致不可预知的错误。如果需要保存的现场参数过多就会到来两个弊端:一是造成RAM资源的浪费,特别是对RAM资源紧张的应用系统;二是增加了中断服务程序的运行时间而导致中断系统的实时性变差,甚至影响正常功能的实现,比如用单片机中的CCP模块实现对高速脉冲宽度的测量,则就要求中断服务程序的运行时间越短越好,否则会丢掉捕捉的机会而造成错误。因此建议在中断服务程序中尽量不要使用主程序中用到的寄存器,将中断中的寄存器设为专用,这样就省去了这些寄存器的保护和恢复程序并减少出错的几率。 

另外一个注意的是,在中断服务程序中尽量避免使用有多级嵌套的子程序,本人在实际应用过程中曾遇到过此类问题,在很长一段时间内找不出问题的根源。PIC中档单片机的硬件堆栈为8级,假如在主程序中调用了一个具有6级嵌套的子程序,当主程序执行到最内层的子程序时,则8級堆栈中已用去了6级,如果刚好此时发生了中断,则断点被压入堆栈,此时堆栈中保存了七个地址,又假如在中断服务程序中存在一个二级嵌套的子程序,则堆栈将发生溢出,这必将导致程序不能正确返回到原来的地址,从而导致程序跑偏。由于该情况的发生需要满足一定的条件,即主程序运行到最内层的子程序时发生中断,因而具有很大的不确定性,在产品开发开发调试阶段可能根本就没有发现有什么问题,等到产品经用户长期使用时才开始暴露出来,但此时已经给产品在用户心目中的形象造成了极坏的影响,损失已经无法挽回。因此作为开发人员应该特别注意。 

还有一个问题也是值得注意的,就是在中断服务程序中避免打开全局中断允许位,因为PIC单片机不支持中断嵌套,否则在执行一个中断服务程序还未结束就进入另一个中断服务程序后,上一个中断的现场参数将遭到破坏,从而导致程序产生不可预知的错误。 

以上是本人在实际使用PIC单片机过程中的一点经验,供网友参考,有不妥之处请谅解。
关键字:PIC系列  单片机  中断处理  注意事项 引用地址:PIC系列单片机的中断处理注意事项

上一篇:温度DS18b20与PIC单片机通讯程序
下一篇:基于PIC18F45K20实现频率测量的MCC18平台代码

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

AVR 嵌入式单片机芯片的中断系统介绍
中断源和中断向量: 缺省情况下,AVR的程序存储区的最低端,即从Flash地址的0x0000开始用于放置中断向量,称做中断向量区。中断向量区大小 = 中断源个数 * 每个中断向量占据字数。对于Flash比较小的AVR处理器,每个中断向量占据一个字的空间,用于放置一条相对转移指令 rjmp(跳转范围-2K~+2K),而Flash较大的AVR,每个中断向量占据两个字空间,用于放置一条绝对转移指令 jmp,用于跳转到相应中断的中断服务程序的起始地址。 在这21个中断中,包含1个非屏蔽中断(RESET)3个外部中断(INT0、INT1、INT2)和17个内部中断。 RESET $000 INT0 $002 INT1 $004
[单片机]
基于MCU设计的的调频信号发生器
引言 DDS(直接数字频率合成器)具有相位变换连续、频率转换速度快、频率分辨率高、相位噪声低、频率稳定度高、集成度高、易于控制等诸多优点,在现代频率合成技术中占有重要地位,被广泛应用于信号发生器、雷达系统、通信系统等领域。MCU(微控制器)具有很强的数据处理能力和控制能力,片上外围设备丰富,精度高,功耗低,在电子设备上有广泛的应用。本文介绍一种基于ADI公司的双通道DDS芯片AD9958产生高质量调频信号的数字调频信号发生器的设计方法,该结构产生的调频信号覆盖频率范围广,载波频率和频偏数字可调,调频波形频率准确度高,且成本较低、可靠性高。 系统结构原理 调频(FM)体制用已调信号频率的变化承载信息。调频波的瞬时频率等于载波频率
[单片机]
基于<font color='red'>MCU</font>设计的的调频信号发生器
第四节:PIC系列单片机程序存储器及堆栈
PIC16C5X内部有384~2K的只读程序存贮器,下面论述其结构和堆栈。 §1.4.1 程序存储器结构 PIC16C5X程序存储器结构如图1.3所示: 从上图可看出,PIC程序存储器采用分页结构,每页长0.5K。因此对于PIC16C52程序存储器在1页之内,而对于PIC16C54和PIC15C55程序存储器容量为1页,PIC16C56和PIC16C57 的容量则分别为2页和4页。页面地址由状态寄存器f3的第5位和第6位(PA0、PA1)确定。程序转移时,在本页内可直接进行;在需跨页跳转时(GOTO、CALL指令),则必须根据将要跳转去的页面,把f3中的PA0、PA1位置成相应的值。具体请参考f3寄存器描述及§2.7.2
[单片机]
第四节:<font color='red'>PIC</font><font color='red'>系列</font><font color='red'>单片机</font>程序存储器及堆栈
51单片机仿真实例 ,直流电机的正反转演示实例
简介:基于proteus的51单片机仿真实例之直流电机的正反转演示实例。本例运行时,按下相应的按键,电机即可产生正转、反转、停止的效果。同时相应的LED指示灯也会点亮。 1、本例运行时,按下相应的按键,电机即可产生正转、反转、停止的效果。同时相应的LED指示灯也会点亮。 当P1.0输出低电平时:Q3,Q2截止,Q7,Q1导通,电机左端输出高电平;P1.1输出高电平时:Q8,Q4截止,Q6,Q5导通,电机右端输出低电平,此时,电机正转。 反之, 当P1.0输出高电平时:Q3,Q2导通,Q7,Q1截止,电机左端输出低电平;P1.1输出低电平时:Q8,Q4导通,Q6,Q5截止,电机右端输出高电平,此时,电机反转。 当P
[单片机]
51<font color='red'>单片机</font>仿真实例 ,直流电机的正反转演示实例
用增强型51单片机实验板实现红外线遥控
标签:化红外接收 集红外接收 红外线遥控是目前使用最广泛的一种通信和遥控手段。工业设备中,在高压、辐射、有毒气体、粉尘等环境下,采用红外线遥控不仅完全可靠而且能有效地隔离电气干扰。 1.红外遥控系统 通用红外遥控系统由发射和接收两大部分组成,使用编/解码专用集成电路芯片来进行控制操作。发射部分包括键盘矩阵、编码调制、LED红外发射器;接收部分包括光、电转换放大器、解调、解码部分电路。 2.遥控发射器及其编码 下面以日本NEC的uPD6121G组成发射电路为例说明编码原理。当发射器按键按下后,有遥控码发出,所按的键不同遥控编码也不同。这种遥控码具有以下特征: 采用脉宽调制的串行码,以脉宽为0.565ms、间隔0.56m
[单片机]
用增强型51<font color='red'>单片机</font>实验板实现红外线遥控
基于51单片机和AD9858的4频点快速跳频设计
在电子系统中,常常需要应用频率合成技术来实现跳频源设计。频率合成指对一个高稳定的参考频率进行各种技术处理,以生成一系列稳定的频率输出。目前应用最广的是锁相环(PLL)频率合成技术,它是通过改变PLL中的分频比N来实现跳频的,但PLL无法避免环路锁定时间缩短与频率分辨率提高及杂散减小之间的矛盾,因此很难同时满足高速跳频和细步长、低杂散的要求。直接数字频率合成(DDS)是一种新的频率合成技术。它具有频率分辨率高、频率切换快、频率切换时相位连续等优点,因而被广泛应用于雷达跳频、通信、电子对抗等系统中。 1 DDS基本原理 DDS的原理框图如图1所示。相位累加器在A位频率控制字FCW的控制下,以参考时钟频率fc为采样率来产生待合成信号
[单片机]
基于51<font color='red'>单片机</font>和AD9858的4频点快速跳频设计
FPGA的学习及注意事项
1 基础问题    FPGA 的基础就是数字电路和HDL语言,想学好FPGA的人,建议床头都有一本数字电路的书,不管是哪个版本的,这个是基础,多了解也有助于形成硬件设计的思想。 在语言方面,建议初学者学习Verilog语言, VHDL 语言语法规范严格,调试起来很慢,Verilog语言容易上手,而且,一般大型企业都是用Verilog语言。    2 EDA 工具问题   熟悉几个常用的就可以的,开发环境QuartusII ,或ISE 就可以了,这两个基本是相通的,会了哪一个,另外的那个也就很Easy了。功能仿真建议使用Modelsim ,如果你是做 芯片 的,就可以学学别的仿真工具,做FPGA的,Modelsim
[嵌入式]
解析单片机ISP自动下载程序电路设计原理
STM32 单片机有Boot启动方式,在用UART串口下载程序时,需要手动设置Boot的启动方式,可能有点麻烦,通过设计电路可以实现自动ISP下载。下面和大家分享一下设计原理。STM32支持仿真器和串口下载程序。将要介绍的内容,属于串口下载,即我们通常说的ISP下载。 手动ISP下载程序,我们已经知道了,控制BOOT0引脚实现。STM32上电,会自动检测BOOT0引脚是什么电平,如果是高电平,等待用户下载程序;如果是低电平,运行用户之前下载到单片机的程序。所以我们需要把BOOT0引脚引出,然后控制其接地或接VCC来下载程序或者运行程序。在调试过程中,我们需要不断的控制BOOT0,非常麻烦。那么,自动ISP就该出场了。 自动
[单片机]
解析<font color='red'>单片机</font>ISP自动下载程序电路设计原理
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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