PIC系列单片机的中断资源特点及其应用方法详解

发布者:dst2015最新更新时间:2019-12-18 来源: elecfans关键字:PIC系列  单片机  中断资源 手机看文章 扫描二维码
随时随地手机看文章

1 PIC单片机简介

PIC系列单片机是美国Microchip技术公司推出的高性能价格比的8位嵌入式控制器(Embedded Controller),它采用了精简指令集计算机RISC(Reduced Instruction Set Computer)和哈佛(Harvard)双总线以及两级指令流水线结构。具有高速度、低工作电压、低功耗等特点和优良的性能价格比,因而PIC系列单片机越来越受到单片机开发与应用工程技术人员的青睐。该系列独特的结构和中断资源使其在使用时与其它系列的单片机有许多不同之处。下面以PIC16CXX系列微控制器为例来介绍PIC系列单片机的中断资源特点以及应用方法。

2 中断资源的开发与屏蔽

图1是PIC16C64/64A/65/65A的中断逻辑电路图,其它型号芯睡的中断资源也大致相同,只是资源多少不一而已,但它们的中断入口只有一个(入口地址在004H)。PIC 单片机 的中断大致可以分为两类。


另一类是外围接口中断,包括定时器TMR1溢出中断、TMR溢出或匹配中断、同步串行口中断、异步串行口中断、并行从动口中断和CCP(Capture/Compare/PWM)中断等,而带A/D功能的PIC16C7X系列微处理器还有A/D转换完成中断。这些中断的允许位分别在PIE1和PIE2寄存器,而中断标志则分别在PIR1和PIR2中。


所有的中断都有自己的中断允许位和中断标志,外围接口中断不仅受各自的中断允许位控制,同时还共同受外围中断控制允许位的控制。全局中断允许位GID能够控制所有的中断。无论全局中断允许位GIE和相应的中断允许位状态如何,只要满足中断条件,各个中断标志位都会被置1。


与其它微处理器不同的是:当CPU响应中断时全局中断允许闰GIF会自动被清零,中断标志位不能用硬件清零而只能用软件清零;当执行中断返回指令RETFIE时,全局中断允许位GIE会被自动置1而重新开放中断。因此,在重新开放中断之前要用软件清零有关的中断标志位,以避免产生不断地中断请求而反复进入中断。由于全局中断允许位GIE会被中断服务程序(RETFIE指令)自动置1,因此用软件清零GIE并不可靠,这一点要特别注意。用下面的程序可确保整个中断被禁止。


***************LOOP BCF INTCON,GIE ;禁止整个中断BTFSC INTCON,GIE ;判断全局中断是否被禁止GOTO LOOP ;否,重新清零…… ;继续***************

对于外部中断事件,例如:INT引脚中断和RB口引脚电平变化中断等为边沿触发,因此,CPU在响应中断时对外部信号的要求并不苛刻。一般情况下,中断花费的时间需要3或4个指令周期,确切时间取决于中断事件发生的时刻而与指令本身的周期数无关。


3 中断的优先级

PIC系列单片机只有一个中断入口(004H),所有的中断都通过该入口进入中断服务子程序,至于是哪一个中断源,只有在进入中断服务子程序后查询中断标志才能确认。该单片机没规定中断的优先级,也没有用于设定中断优先级的寄存器,中断的优先级是由于中断服务子程序中断查询中断标志的顺序确定的。CPU响应一个中断并进入中断服务程序后,全局中断允许位GIE被自动清零,CPU在此期间不响应其它中断,也不能形成中断嵌套。

因此,在使用中断时要合理安排查询中断标志的顺序,尽量缩短CPU在中断服务程序中逗留的时间。在用PIC系列单片机构成系统时应尽量减少中断源的个数,对于那些执行时间较长且不需采用中断方式来处理的事件,应尽量采和查询标志的方式进行处理;对于那些必须采用中断方式处理的事件,在中断服务程序中要尽量先查询对系统至关重要的事件的中断标志。


另外,在退出中断服务程序时,只清除处理过的中断标志即可,而不需要将所有的中断标志清除。


对于RB口电平变化中断,一方面要保存RB口每次变化后的状态,以便在下次中断时判断是哪根口线上的电平发生了变化;另一方面可以设置产生中断的口线标志,并将由于该中断而未执行的程序在中断服务程序外通过查询口线标志来执行,以减少CPU在中断服务程序中逗留的时间。


4 程序跨页时的中断处理

PIC系列单片机的程序存储空间是分页处理的,每页空间的大小为512字节到4k字节不等。页程序计数器PC是一个13位宽的增量寄存器,其低8位PCL是一个可读/写寄存器,其高字节PCH(有效位为5位)不能直接进行读/写操作,它通过一个8位保护寄存器PCLATH把高5位地址传递给程序计数器的高字节。当一个中断被响应时,PC中的断点地址自动被压栈(PUSH)保护;而当执行RETFIE指令时,堆栈中的断点地址回弹到(POP)程序存储器PC中。


无论是压栈操作还是出栈操作,它们都不影响PCLATH寄存器的内容。同时,CPU响应中断并跳转到中断入口地址时,都只能在本页内跳转而不影响PLCATH寄存器的内容。另外,在中断入口安排的是GOTO语句,而GOTO语句也只能在本页跳转。当中断服务程序存放在程序存储器的第一页且CPU在执行非第一页内程序时,响应中断将导致中断入口地址和中断返回地址错误而引起程序混乱。下面以PIC16C65A来说明这个问题的解决办法。


PIC16C65A的片内程序存储器为4k,分为两页,每页2k。假设中断服务程序存放在第一页(0000H-07FFH),通常这样做是因为中断入口地址在第一页,因而可以减少程序量)。那么,具体程序如下:


***************ORG 0000H0000H GOTO STARTORG 0004H***************0004H GOTO PRO-INTORG 0005H0005H START …………0234H PRO-INT…………RETFIE***************

通过汇编程序编译可知,在程序存储器0004H单元存放的代码是2A34H,当CPU在程序存储器第一页响应中断时,程序先跳到0004H,然后跳到0234H执行,正常进入中断,执行完后能正常返回。当CPU在程序存储器第二页响应中断时,由于PCLATH的D4D3(页选择位)为01,CPU4执行“GOTO PRO-INT”时的代码虽然是2A34H,但程序不是跳到0234H执行,而是跳至0A34H执行。显然,程序执行错误。


解决这一问题的方面是在程序存储器0A34H处安排一段程序,在中断程序结束时判断CPU响应中断时程序所处的位置,从而使程序根据该信息合理设置页选择位,然后再返回中断。

******************ORG 0A34HBSF RAM,b ;设置在程序执行到第二页时CPU响应中断的标志BCF PCLATH,3 ;将PC切换到第一页GOTO PRO-INT ;程序跳转到中断服务程序*******************在指令RETFIE前应增加的程序如下:******************BTFSC RAM,b ;判断CPU响应中断前程序所在位置BSF PCLATH,3 ;设置页选择位RETFIE******************

以上程序中的RAM是一个内存单元,b是该单元的某一位,该位在程序初始化时清零,CPU在执行程序存储器第二页的程序并响应中断时该位置“1”。经过上述处理,CPU不管在程序存储器第一页还是第二页响应中断,都能正确进入中断服务程序并能正确返回中断前的地址。

5 利用中断唤醒CPU

PIC系列单片机具有休眠(SLEEP)省电工作模式,当执行一条SLEEP指令后,芯片就进入低功耗休眠模式。进入休眠状态后,主振荡器停止工作,此时芯片消耗的电流极低(在3V工作电压,32kHz时钟时典型值约1μA),这一特点对于电池供电的系统非常有利。利用中断可以将CPU从休眠状态唤醒。这些中断源包括外部INT引脚中断、RB口引脚电平改变中断和部分外围接口中断。用于唤醒休眠状态的CPU外围接口中断有:工作在异步计数器方式下的TMR1中断、SSP起始/停止位检测中断、CCP捕捉方式中断和从动并行口读写中断。其它外围接口中断因需要片内Q时钟而无法产生中断。


利用中断事件唤醒CPU与全局中断允许位GIE无关,任意一个中断允许位置1的中断源,只要产生中断就会将相应的中断标志置1,芯片将立入中断服务程序与全局中断允许位GIE的状态和紧接SLEEP指令后的那条指令有关。由于PIC系列 单片机 采用了两级指令流水线结构,在执行SLEEP指令时,下一条指令已预先取出,因此在GIE位为0时,芯片被唤醒后首先执行预先取出的那条指令;如果GIE位为1,则芯片被唤醒后执行预先取出的那条指令后紧接着转入中断入口地址再执行中断服务程序。在这种情况下,应在SLEEP指令后安排一条空操作指令NOP,以便CPU被唤醒后能立即进入中断服务程序。


总之,PIC系列单片机是一种性能价格比很高的微控制器,正确、合理地使用其中断资源可以使系统更加完善,工作更加稳定。

关键字:PIC系列  单片机  中断资源 引用地址:PIC系列单片机的中断资源特点及其应用方法详解

上一篇:经典的运用PIC单片机实现LED点阵手写屏设计方案
下一篇:PIC单片机ICSP接口电路的设计

推荐阅读最新更新时间:2024-11-13 21:46

PIC单片机驱动LCD1602液晶循环显示两行字符串程序
#include pic.h __CONFIG(0x1832); //芯片配置字,看门狗关,上电延时开,掉电检测关,低压编程关,加密,4M晶体HS振荡 //LCD控制线宏定义 #define rs RA0 #define rw RA1 #define e RA2 char web = { www.51hei.com }; char tel = { QQ:776860123 }; void init(); //申明I/O口初始化函数 void lcd_init(); //申明LCD初始化函数 void write(char x); //申明显示1字节数据函数 voi
[单片机]
8051单片机基础3:C51内存模型(small, compact和large)
C51编译器支持3种内存模型 Small Model Compact Model Large Model 函数参数、automatic变量在声明时,如果没有指定内存类型,C51编译器会根据内存模型进行隐式声明; 使用内存模型的方式 1. 在源文件中使用#pragma来指定内存模型 #pragma large /* 以下代码默认使用large内存模型 */ int a; int *p; void function(int arg, int *p) { /* user code */ } 2. 在声明/定义函数时,后面加上small/compact/large对单个函数进行指定 int mtest (int
[单片机]
8051<font color='red'>单片机</font>基础3:C51内存模型(small, compact和large)
手把手教你学51单片机:定时器与数码管
一、逻辑电路与逻辑运算 逻辑运算符: (1)按变量整体值进行运算 :逻辑与(&&) 逻辑或(||) 逻辑非(!) (2)按变量的每一位进行运算: 按位与(&) 按位或(|) 按位取反(~) 二、定时器学习 2.1定时器的初步认识 (1)时钟周期:时序中最小的时间单位。 时钟周期(T)=1/时钟源频率 (2)机器周期:单片机完成一个操作的最短时间。 51单片机系列,机器周期是12个时钟周期。 定时器和计数器是单片机内部的同一个模块,通过配置SFR(特殊功能寄存器)可以实现两种不同的功能。主要用于定时。定时器内部有一个寄存器,让他开始计数后,这个寄存器的值没经过一个机器周期就会自动加1,因此可以把机器周期理解
[单片机]
手把手教你学51<font color='red'>单片机</font>:定时器与数码管
51单片机怎么驱动直流电机c语言
特点 产品 PK51 CA51 A51 设备支持 经典的8051设备 Far Memory类型 ADI公司ADuC812的家庭 Dallas Semiconductor的390家庭 NXP(飞利浦)51MX家庭 μVisionIDE IDE 调试器 模拟器 编译工具 AX51汇编 CX51的C编译器 LX51连接器 OHx51目标进制转换器 A51汇编 BL51代码空间连接器 OH51对象的十六进制转换器 OC51 banked 目标转换器
[单片机]
51<font color='red'>单片机</font>怎么驱动直流电机c语言
MSP403单片机+TLC5615+ADC0808恒流源Proteus仿真程序设计
单片机源程序如下: /****************************************************************** * 实验说明: * 通设置系统主时钟(MCLK=8Mhz ) 、辅助时钟(ACLK=8Mhz )、 * 子系统时钟(SMCLK=8Mhz ) ******************************************************************/ #include MSP430x24x.h #include string.h #define uchar unsigned char #define uint unsigned
[单片机]
MSP403<font color='red'>单片机</font>+TLC5615+ADC0808恒流源Proteus仿真程序设计
PIC单片机定时器中断源程序
程序: COUNT EQU 13 org 0000h goto main org 0004h goto zhongduan org 0010h jiafa: bcf status,5 MOVLW 225 MOVWF tmr0 retlw 0 zhongduan: bcf intcon,2 movLW 3h movwf count retfie MAIN: BSF INTCON,5 bsf intcon,7 bsf status,5;rp0 movlw 2
[单片机]
MSP430单片机常见加密总结
1、为什么要加密,如何加密? 当您的产品推向市场的时候,您的竞争对手就开始盯上它了,如果您的产品硬件很容易被模仿,而且您使用的MSP430单片机没有被加密的话,那么您辛辛苦苦的劳动成功就很容易成为您竞争对手的产品了,使用JTAG调试工具FET虽然可以将程序下载到芯片内部,但只有使用专业编程器能够防止程序被 窃取。 2、JTAG、BSL、BOOTLOADER、熔丝的区别和关系是什么? JTAG接口能够访问MSP430单片机内部所有资源,通过JTAG可以对芯片进行程序下载、代码调试、内存修改等等,通过JTAG还能烧断加密熔丝,熔丝一旦被烧断,JTAG接口绝大部分功能失效,就再也不能通过它进行编程了。 BSL接口是利用芯
[单片机]
集Hi-Fi、智能和USB多通道等特征于一体的微控制器
随着诸多技术突破和全新流媒体服务的不断融合,在智能家居和智能音箱市场日益繁荣的今天,消费者对于音频的需求已不再仅仅局限于音质本身,更多的是追求高品质的生活体验和便捷的智慧互联。因此,要想更好的迎接数字音频新时代,当今的数字音频,不仅要能够提供Hi-Fi的音质,而且还能够作为智能设备的人机界面,同时还能够用USB多通道等方式方便连接...... XMOS在其最新的xcore器件中集成了边缘AI、DSP、控制单元和I/O等功能,因而可以在新一代音频、电机控制、工业自动化和边缘计算等许多应用和场景中,利用软件就能开发出功能非常先进的系统。这种在实现高性能硬件的同时,保持灵活性和可编程性的特性,可以为工程师和系统企业带来更快的产品上市
[嵌入式]
集Hi-Fi、智能和USB多通道等特征于一体的<font color='red'>微控制器</font>
小广播
设计资源 培训 开发板 精华推荐

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

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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