单片机中的中断系统对电子工程师来说是解决突发事件和多任务实时处理的最好方法,熟练掌握中断技术的应用是一个合格电子工程师必备的能力。
PIC与51系列单片机一个显著的区别就是:PIC只有一个中断入口地址(为04H),而51有多个中断源。这样对PIC来说,无论发生何种中断程序将自动转移执行04H处的程序语句,为了区分到底是哪种中断发生就必须在中断服务程序中通过判断中断标志位来确定并转移到相应的中断服务程序中。在发生中断时,断点地址被首先压入硬件堆栈,而现场的一些参数须用户通过软件保存,必须保存的寄存器包括W寄存器、程序寄存器的高位字节PCLATH及状态标志寄存器STATUS等,另外一些在中断服务程序和主程序中均使用到的寄存器也必须保存,否则可能会导致不可预知的错误。如果需要保存的现场参数过多就会到来两个弊端:一是造成RAM资源的浪费,特别是对RAM资源紧张的应用系统;二是增加了中断服务程序的运行时间而导致中断系统的实时性变差,甚至影响正常功能的实现,比如用单片机中的CCP模块实现对高速脉冲宽度的测量,则就要求中断服务程序的运行时间越短越好,否则会丢掉捕捉的机会而造成错误。因此建议在中断服务程序中尽量不要使用主程序中用到的寄存器,将中断中的寄存器设为专用,这样就省去了这些寄存器的保护和恢复程序并减少出错的几率。
另外一个注意的是,在中断服务程序中尽量避免使用有多级嵌套的子程序,本人在实际应用过程中曾遇到过此类问题,在很长一段时间内找不出问题的根源。PIC中档单片机的硬件堆栈为8级,假如在主程序中调用了一个具有6级嵌套的子程序,当主程序执行到最内层的子程序时,则8級堆栈中已用去了6级,如果刚好此时发生了中断,则断点被压入堆栈,此时堆栈中保存了七个地址,又假如在中断服务程序中存在一个二级嵌套的子程序,则堆栈将发生溢出,这必将导致程序不能正确返回到原来的地址,从而导致程序跑偏。由于该情况的发生需要满足一定的条件,即主程序运行到最内层的子程序时发生中断,因而具有很大的不确定性,在产品开发开发调试阶段可能根本就没有发现有什么问题,等到产品经用户长期使用时才开始暴露出来,但此时已经给产品在用户心目中的形象造成了极坏的影响,损失已经无法挽回。因此作为开发人员应该特别注意。
还有一个问题也是值得注意的,就是在中断服务程序中避免打开全局中断允许位,因为PIC单片机不支持中断嵌套,否则在执行一个中断服务程序还未结束就进入另一个中断服务程序后,上一个中断的现场参数将遭到破坏,从而导致程序产生不可预知的错误。
关键字:PIC单片机 中断系统 服务程序
引用地址:
在处理PIC单片机的中断服务程序时需要注意哪些问题
推荐阅读最新更新时间:2024-11-17 20:48
基于pic16f1503单片机的电源电压不足检测和指示方法
原理: 利用单片机内部的FVR稳压电源,ADC进行检测判断单片机的VDD电压是否足够,不足进行输出显示。 应用: 当单片机的供电是由电池供电时,可以测量单片机的供电是否足够,指示电池电量不足。 实际电路测试功能可行,已经应用在具体电路上。 软件: MPLAB X IDE v4.15 proteus 8.6. 1、仿真电路图; 2、源程序加注释。 说明: 1、利用PIC16F1501内部的FVR,ADC可以测量VDD电压,判断单片机是否供电电压不足。 2、将ADC的基准设为Vdd,通过FVR使能并稳定到1.024V后,用ADC测量值。 3、有公式ADC读值=(1.024/VDD)*1024。设置Vdd参考为3.3V,则(1.0
[单片机]
PIC单片机源程序的模拟仿真与调试
我们在编辑P IC 单片机 的C语言时,常常应用对源程序的模拟仿真技术,因为对程序的模拟仿真可代替部分单片机的硬件制作与调试,即使在深入学习PIC单片机C语言程序时,模拟仿真技术,也是不可缺少的。这里以程序实例演示其操作方法。 对源程序的模拟仿真可以完成下列功能:直接观察C程序从主程序main()开始运行的全过程;为了清楚观察程序中各变量和寄存器的变化情况,可采用单步运行(ste PIN to)命令和单步越过(stepover)命令进行模拟运行调试,使观察变量更方便;设置断点再选择Run(快速)命令,程序运行到断点处会停下来,以便观察变量功能;此外,还能定量观察程序中的变化值,如直接观察程序的延时量等多种功能。当然在进行程
[单片机]
PIC单片机SPI接口配置
一般所有单片机的SPI接口都需要配置以下几点内容(CPU作为SPI主模式): 1.引脚功能/方向配置:标准SPI接口由4根线组成,SCK,MISO(SDI),MOSI(SDO),SS(CS),其中SCK,MISO,MOSI都应设置成SPI功能,并且SCK和MOSI设置成输出引脚,MISO设置成输入引脚,SS引脚设置成普通GPIO功能,并且设置成输出。 2.SPI参数配置: (1)SPI的时钟频率设置,一般设置范围几K到几M不等,该频率决定SPI的时钟线和数据线的速率。 (2)SPI时钟极性 (3)SPI时钟相位(边沿) (4)数据宽度,一般选择8位或者16位 (5)位序,传输过程中是高位在前,还是低位在
[单片机]
STM32 USART串口的应用 STM32中断系统专题讲解
STM32 ,从字面上来理解, ST 是 意法半导体 , M 是 M ic roelectronics 的缩写, 32 表示 32 位,合起来理解, STM32 就是指 ST 公司 开发的 32 位 微控制器 。在如今的 32 位 控制器 当中, STM32 可以说是最璀璨的新星,它受宠若娇,大受 工程师 和市场的青睐,无芯能出其右。 51 是嵌入式学习中一款入门级的精典 MCU ,因其结构简单,易于教学。 51诞生于 70 年代,属于传统的 8 位 单片机 ,如今,久经岁月的洗礼,既有其辉煌又有其不足。现在的市场 产品 竞争越来越激烈,对成本极其敏感,相应地对 MCU 的性能要求也更苛刻:更多功能,更低功耗,易用界面和多任务。面
[单片机]
外加电压检测复位电路设计方案
1.6.5 PIC单片机的外接电压检测复位电路举例 1.设计思路 有许多型号单片机的内部均不具备掉电复位功能,即使对于内部包含该功能的PIC单片机,其复位门槛电压值是固定不可更改的,有时不能满足用户的需求,因此,外加电压检测复位电路也是较常见的设计方案。 对于片内带有掉电复位功能BOR的PIC单片机,在使用外接电压检测复位电路时,就必须将内部BUR功能禁止,方法是将系统配置字的BUDEN位设置为0。 对于内部不带BOR功能的PIC单片机,其电源控制寄存器PCUN没有BOR标志位,无法准确识别由外接电压检测复位电路引起的单片机复位,因此在程序执行过程中在MCLR引脚施加了人工复位信号引起的复位。 与外接电压
[单片机]
基于PIC单片机的智能IC卡燃气表电控系统设计
摘要: 给出了一种PIC单片机为核心的智能IC卡燃气表电控系统的设计,介绍了该系统的控制模式、电控系统的硬件电路构成、系统软件设计及其实际应用情况。
关键词: PIC单片机 智能IC卡燃气表 电控系统
智能IC卡燃气表是一种根据用户IC卡购气量实现自动计量计费、自动控制用气的民用高技术产品,具有传统人工抄表收费式燃气表无可比拟的优越性。当前,随着国家“金卡工程”的深入开展 和开发大西北“西气东输”计划的正式启动,智能IC卡燃气表已 呈现出十分广阔的应用前景。本文介绍了该产品的核心技术--基于PIC单片机
[工业控制]
PIC12C509A单片机的编程再生
第一次用P IC 12C509A芯片制作的 振荡器 ,其源程序为PIC02.ASM,用程序 存储器 第1页面和数据存储器BANK1体编辑的源程序,占用程序存储器空间是从D'600’开始的地址存放的程序;第二次再写时,用同-PIC12C509A芯片.也是一种振荡器,振荡 频率 比前者高(以便观察),其源程序定义为PIC04.ASM.其清单如下: 下条指令。 END;程序结束。 说明:由以上的源程序看出,PIC12C509A再写时,需在ORG0(复位矢量)之后,增加两条空指令(因PIC12C509A有两个页面),且这里程序是从PIC12C509A程序存储器的O页面D'30‘开始存放
[单片机]
PIC单片机程序基本结构框架
简介:为了快速掌握PIC单片机源程序的基本结构框架,这里给出一个典型的程序结构框架。建立源程序时首先用伪指令TITLE提供程序的标题,接着给出整个程序的总说明,并用列表伪指令LIST指定所用单片机型号和文件输出格式,再利用INCLUDE伪指令读入MPASM中提供的定义文件如《P16F84?INC》,然后对片内常用资源进行定义,再给出一般程序的基本结构框架。 现举例如下: TITLE“This is……”;程序标题 ;程序说明 LIST P=16F84,F=1NHX8M ; include p16F84.inc -config_RC_Qsc&_WDT_0FF… ;资源定义和变量定义 STATUS EQ
[单片机]