PIC单片机中断系统详细汇总.ppt

上传人:小飞机 文档编号:5443819 上传时间:2023-07-07 格式:PPT 页数:61 大小:888.50KB
返回 下载 相关 举报
PIC单片机中断系统详细汇总.ppt_第1页
第1页 / 共61页
PIC单片机中断系统详细汇总.ppt_第2页
第2页 / 共61页
PIC单片机中断系统详细汇总.ppt_第3页
第3页 / 共61页
PIC单片机中断系统详细汇总.ppt_第4页
第4页 / 共61页
PIC单片机中断系统详细汇总.ppt_第5页
第5页 / 共61页
点击查看更多>>
资源描述

《PIC单片机中断系统详细汇总.ppt》由会员分享,可在线阅读,更多相关《PIC单片机中断系统详细汇总.ppt(61页珍藏版)》请在三一办公上搜索。

1、第八章 中断系统,8.1 中断的基本概念 当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到、有键盘信号输入等,此时CPU须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原先的程序去执行,这就形成了一次“中断”。“中断”加强了单片机处理突发事件的能力,如果没有中断功能,对可能发生的特殊状况的处理就必须采用定时查询,这样就会浪费大量的CPU时间。,因此,中断是单片机中很重要的一个概念,是提高工作效率的重要功能,中断系统功能的好坏是衡量单片机功能的重要指标。单片机的“中断源”与单片机包含的外围设备有很大的关系,所谓“中断源”就是引起中断的原因或根源

2、,就是中断请求的来源。PIC16F87X系列集成了较多的外围设备:16F874/877内部集成了15个外围设备;16F873/876内部集成了12个外围设备;16F870/872内部集成了10个外围设备;16F871内部集成了13个外围设备。,外围设备在工作过程中,都需要CPU参与控制、协调或交换数据等服务,而CPU正是通过中断技术使得这些外围设备协调工作的。PIC单片机作一次中断处理的过程如下:当某一中断源发出中断请求时:假如CPU正在执行更重要的任务,则可采用屏蔽的方法暂时不响应该中断请求;如果可以响应该中断请求,则CPU执行完当前指令后,必须把断点处的程序计数器PC的值(即下一条指令的地

3、址)压入堆栈保存起来(断点保护),也可以把一些的重要寄存器内容也保护,起来(现场保护)。然后再转移到相应的中断服务子程序中执行。在中断服务子程序中,首先必须确定发出中断请求的中断源,然后再跳转到与该中断源相对应的程序分支中去执行中断服务程序。当中断服务程序执行毕后,必须先恢复被保护的寄存器的值(现场恢复),再将程序计数器PC的值从堆栈中恢复(断点恢复),使CPU返回断点处继续执行被中断的程序。8.2 PIC16F87X的中断源 PIC16F87X单片机具备的中断源如下表所示:,从上表可看出,各中断源基本上都与各个外围设备模块相对应的:多数的外围设备对应着一个中断源(如定时计数器TMR0),也有

4、的外围设备对应二个中断源(如SCI同步异步接收发送器USART);有的外围设备没有中断源与之对应(如输入输出端口 RA和RC);也有的中断源没有外围设备与之对应(例如外部中断源INT)。8.3 PIC16F87X的中断硬件逻辑 在PIC16F87X单片机中,不但中断源的种类和个数不同,它们的中断逻辑电路也不同。,PIC16F87X单片机的中断系统的逻辑电路如图9.1(a)(e)所示(p101103)。每一种中断源对应了一个中断标志位,记为XXXF,以及一个中断屏蔽位或叫中断使能位,记为XXXE。中断源产生的中断信号能否到达CPU,都受控于相应的中断屏蔽位。每个中断源申请中断时,其中断标志位会自

5、动置位,中断标志位的清0是由用户程序完成的;而每个中断屏蔽位的置位和清位均由用户程序完成。下图是由一些门电路构成的中断组合逻辑电路。,图中全部的的14个中断源按两个梯队并列排开,第一梯队中只安排了3个中断源,其余的中断源全部安排到第二梯队中。所有的中断源都受“全局中断屏蔽位”(也称总屏蔽位)GIE的控制;第一梯队的中断源不仅受GIE的控制,还要受各自中断屏蔽位的控制;第二梯队的中断源不仅受到GIE和各自中断屏蔽位的控制,还要受到一个外设中断屏蔽位PEIE的控制。,8.4 中断相关的寄存器,与中断有关的特殊功能寄存器SFR共有6个,分别是:选项寄存器OPTION_REG、中断控制寄存器INTCO

6、N、第一外围设备中断标志寄存器PIR1、第一外围设备中断屏蔽寄存器PIE1(也称中断使能寄存器)、第二外围设备中断标志寄存器PIR2和第二外围设备中断屏蔽寄存器PIE2,如表9.2所列。后5个SFR,共有40位,但仅使用了30位来控制中断,分别与图9.l中的中断逻辑电路的输入信号成严格的对应关系。,选项寄存器OPTION _REG OPTION_REG选项寄存器是可读写的,各位的分布形式:,该寄存器包含了与定时计数器TMR0、分频器和端口RB有关的控制位。RB端口引脚RB0和外部中断INT复用一脚,与该脚有关的一个控制位含义如下:INTEDG:外部中断INT触发信号边沿选择位:1=选择RB0I

7、NT上升沿触发;,0=选择RB0INT下降沿触发中断控制寄存器INTCON 中断控制寄存器是一个可读可写的寄存器,各位的分布形式如下:,它将第一梯队中的3个中断源的标志位和屏蔽位,以及PEIE和GIE包含在其中:RBIF:端口RB的引脚RB4RB7电平变化中断标志位。,1=RB4RB7已经发生了电平变化;0=RB4RB7尚未发生电平变化。RBIE:端口RB的引脚RB4RB7电平变化中断屏蔽位。1=允许端口RB产生的中断;0=屏蔽端口RB产生的中断。INTF:外部INT引脚中断标志位。1=外部INT引脚有中断触发信号;0=外部INT引脚无中断触发信号。INTE:外部INT引脚中断屏蔽位。l=允许

8、外部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响应所有中断源产生的中断请求。第一外围

9、设备中断标志寄存器PIR1 寄存器PIR1也是一个可读可写的寄存器,各位的分布形式如下:,该寄存器中各中断标志位的含义如下:,TMR1IF:定时计数器TMR1模块溢出中断标志位。1=发生了TMR1溢出;0=未发生TMR1溢出。TMR2IF:定时计数器TMR2模块溢出中断标志位。1=发生了TMR2溢出;0=未发生TMR2溢出。CCP1IF:输入捕捉输出比较脉宽调制CCP1模块中断标志位。输入捕捉模式下:1=发生了捕捉中断请求;0=未发生捕捉中断请求。,输出比较模式下:1=发生了比较输出中断请求;0=未发生比较输出中断请求。脉宽调制模式下:无用SSPIF:同步串行端口(SSP)中断标志位。1=发送

10、接收完毕产生的中断请求;0=等待发送接收。TXIF:串行通信接口(SCI)发送中断标志位。1=发送完成,即发送缓冲区空;0=正在发送,即发送缓冲区未空。,RCIF:串行通信接口(SCI)接收中断标志位。1=接收完成,即接收缓冲区满;0=正在准备接收,即接收缓冲区空。ADIF:模拟数字(AD)转换中断标志位。1=发生了AD转换中断;0=未发生AD转换中断。PSPIF:并行端口中断标志位,只有40脚封装型号具备,对于28脚封装型号总保持0。1=并行端口发生了读写中断请求;0=并行端口未发生读写中断请求。,第一外围设备中断屏蔽寄存器PIE1 第一外围设备中断屏蔽寄存器PIEl也是可读写的寄存器,各位

11、的分布形式如下:,该寄存器中包含的中断屏蔽位(使能位)的含义如下: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=开放

12、SCI发送中断请求;0=屏蔽SCI发送中断请求。RCIE:串行通信接口(SCI)接收中断屏蔽位。1=开放SCI接收中断请求;0=屏蔽SCI接收中断请求。ADIE:模拟数字(AD)转换中断屏蔽位。1=开放AD转换器的中断请求;0=屏蔽AD转换器的中断请求。PSPIE:并行端口中断屏蔽位,只有40脚封装型号具备,对于28脚封装型号总保持0。,1=开放并行端口读写发生的中断请求;0=屏蔽并行端口读写发生的中断请求。第二外围设备中断标志寄存器PIR2 第二外围设备中断标志寄存器PIR2也是一个可读写的寄存器,各位的分布形式如下:,各位的含义如下:CCP2IF:输入捕捉输出比较脉宽调制CCP2模块中断标

13、志位。,输入捕捉模式下:1=发生了捕捉中断请求(必须用软件清0);0=未发生捕捉中断请求。输出比较模式下:1=发生了比较输出中断请求(必须用软件清0);0=未发生比较输出中断请求。脉宽调制模式下:无用BCLIF:I2C总线冲突中断标志。当同步串行端口MSSP被配置成I2C总线的主控器模式时:1=发生了总线冲突;0=未发生总线冲突。,EEIF:EEPROM写操作中断标志位。1=写操作已经完成(必须用软件清0);0=写操作未完成或尚未开始进行。第二外围设备中断屏蔽寄存器PIE2 PIE2各位的分布形式如下:,CCP2IE:输入捕捉输出比较脉宽调制CCP2模块中断屏蔽位。1=开放CCP2模块产生的中

14、断请求;0=屏蔽CCP2模块产生的中断请求。,EEIE:EEPROM写操作中断屏蔽位。1=开放EEPROM写操作产生的中断请求;0=屏蔽EEPROM写操作产生的中断请求。8.5 中断的处理 单片机复位后,硬件会自动设置GIE=0,屏蔽所有的中断源,假如要求单片机能响应所有中断,必须设置GIE=1。其实无论GIE或着其他中断屏蔽位是否为1,当某中断源的中断条件满足时,都会发出中断请求,即相应的中断标志位都会置1。但是否能够得到CPU的响应,则由该中断源的中断屏蔽位决定。,CPU响应中断后,自动设置GIE=0,屏蔽所有中断,以免发生重复中断响应,然后自动把PC寄存器当前值压入堆栈,并把PC值赋予地

15、址0004H,从而转向执行中断服务子程序。进入中断服务程序后,程序必须要确定发出请求的中断源,这可以通过检查各中断源的标志位来实现。确定了中断源后,就用软件把该中断源的标志位清0,否则,执行中断返回指令重开中断后,假如中断标志位仍然为1,则会引起CPU重复响应同一个中断请求。,执行中断返回指令RETFIE后,不仅会将保留在堆栈中的断点地址弹回到PC寄存器中,使程序能返回到被中断的程序处;而且还会自动设置GIE=1,重新开放所有的中断源。8.5.1 中断的现场保护问题 中断现场保护是中断技术中十分重要的环节。在进入中断服务子程序期间,堆栈中只能保存返回地址(程序计数器PC的值)。若要保留其他寄存

16、器的内容,怎么办?由于PIC的指令系统中没有PUSH(入栈)和POP(出栈)之类的指令,所以用户要编制一段程序来实现现场保护的功能。,因为是由用户程序来实现现场保护,而程序的执行中最敏感的寄存器无非就是W寄存器和STATUS寄存器,所以应该首先把这两个寄存器保护起来,然后再去保存其他的寄存器。PIC单片机中,中断现场数据是不能保留到堆栈区域中的,而是保留在RAM存储器单元中,一般是保留在通用寄存器中。在PIC中,现场保护是很麻烦的事。因为中断是随机发生的,不管程序执行到哪一步,也不管程序所选择的RAM的当前体是哪一个,更不管主程序目前在程序存储器那个页面,中断请求及其中断响应都有可能发生。,在

17、中断现场保护过程中,首先要保存的是累加器W,这是因为PIC单片机,是不可以在不同的文件寄存器之间(RAM单元之间)直接传送数据的,必须要经W中转才能实现,所以首先要把W寄存器保存,才可以备份其他的寄存器比如STATUS。在保存W寄存器时,要确定主程序目前处在的RAM存储器的那个体中是十分困难的。虽然可以通过读取STATUS寄存器的rp0rp1位得到当前体,但是也是十分麻烦的。假设在RAM的bank0的20H上定义一个W的临时备份寄存器,通常取名为 W_TEMP。,当利用MOVWF W_TEMP命令,企图将W 中的内容保存到W_TEMP中时,往往会出现问题,因为此时保存的内容不一定是在bank0

18、中,还和STATUS寄存的内容有关系。为了解决这个问题,PIC16F87X中有几款单片机(见p28p31),其RAM各个体的顶端有16个单元,都会彼此映射到相同的16个单元上。访问这16个单元时体选码就不重要了,因为它们对四个体都是“透明”的。因此,将W_TEMP安排在这个部位最为合适,这样做可以使得现场保护和现场恢复变得相对容易实现。,下面给出一段保护中断现场的程序片段:;将W,STATUS和PCLATH的内容保存到文件寄存器中W_TEMP EQU 70HSTATUS_TEMP 6EHPCLATH_TEMP 6FHMOVWF W_TEMP;WW_TEMPSWAPF STATUS,0;STAT

19、US高低半字节交换CLRF STATUS;设置体0作当前体MOVWF STATUS_TEMP;到STATUS_TEMPMOVF PCLATH,0;PCLATH到PCLATH_TEMPMOVWF PCLATH_TEMP(中断服务子程序的核心部分),CLRF STATUSMOVF PCLATH_TEMP,0;恢复PCLATH内容 MOVWF PCLATHSWAPF STATUS_TEMP,0;恢复STATUSMOVWF STATUS;同时RAM恢复到原先BANKSWAPF W_TEMP,1;恢复WSWAPF W_TEMP,0;【说明】程序中对要保留的寄存器分别定义了相应的临时备份寄存器,例如“W”

20、的临时备份寄存器为“W_TEMP”。在保存W时,决不能影响状态寄存器STATUS的当前内容,否则会影响到体选码及其他标志位。,保存好W后,才可以保存STATUS和其他寄存器。指令系统总是先将STATUS的内容传送W,再经W传送到备份相应的备份寄存器中,比如STATUS _TEMP。在程序中使用SWAPF STATUS,0 来保存状态寄存器STATUS的内容,而没有使用MOVF STATUS,0,因为该指令会影响STATUS的Z标志位,显然这是不可容忍的。因此,程序采用字节交换指令SWAPF 来顶替。在此只利用SWAPF的传递功能,它带来的交换功能得记录下来,在返回主程序之前必须把它重新置换回来

21、。,STATUS保存到W后,就可以将其清0,以便把定义了STATUS_TEMP和PCLATH_TEMP的体0设置为当前体,然后就可以很方便地将寄存器STATUS和PCLATH的内容保存到各自的临时备份寄存器中。寄存器PCLATH的内容保护并不是必须的,只要主程序和中断子程序中都不会修改PCLATH的内容,就可以不保护它。恢复现场的操作次序与保护现场的操作次序应该相反。,在恢复STATUS的内容时候一定要注意把保护现场时采用SWAPF STATUS,0产生的多余的交换再交换回来。最后2条指令,将W_TEMP内容的高、低半字节交换了2遍,才被恢复到工作寄存器W中。为不使用MOVF W_TEMP,0

22、?因为MOVF W_TEMP,0又会影响Z标志位,会破坏刚刚恢复的STATUS中的内容,这显然是不可以的。,8.5.3 小结 除了在中断现场保护部分提到的一些需注意的问题之外,还有前面提到的一些重要注意要注意:单片机在任何情况下的复位,均会导致总屏蔽位和其他的中断屏蔽位清0,即在默认状态下,禁止CPU响应所有中断。中断标志位的状态与该所有的中断屏蔽位无关,即不管是否允许CPU响应中断源的中断请求,只要满足了中断的条件,中断标志位就会被置成1。,当系统开放某一中断源时,中断源就通过中断标志位向CPU申请中断,只要将中断标志位置1,就会产生中断响应。当CPU响应任一个中断后,全局中断屏蔽位GIE将

23、会自动清0;当中断返回时它又会自动恢复为1。如果在中断服务期间若用软件将自动清0的GIE重新置1,这时若再出现中断请求,就会形成中断的嵌套:即在响应某一中断期间又响应了其他中断。不过嵌套的级数不能超过堆栈的深度(8级),以免造成堆栈溢出。,如果同时发生多个中断请求,到底哪个中断会优先得到处理,完全取决于在中断服务子程序中检查中断源的顺序,原因是各个中断源之间不存在优先级别之分。每一种中断源受屏蔽的次数不完全相同,第一梯队的中断源受到二次屏蔽,而第二梯队的中断源受到三次屏蔽。PIC系列单片机的型号不同,数据存储器RAM的布局不完全相同,为工作寄存器W安排备份寄存器W_TEMP的方法也就不完全相同

24、。,8.6 中断功能的应用举例,8.6.1 TMR0溢出中断 本例介绍如何以中断方式利用TMR0产生延时。例8.1:闪烁式跑马灯 实验的功能:演示板上ICD2上的8只LED中只有一只点亮,亮灯的位置以循环方式不停地移动,移动的速度取决于在各个位置上停留的时间(假设延时196ms),并且在每一个位置上LED都保持快速闪烁(假设延时66 ms)。,软件设计思路 本例中,需要加入2段延时:一个是LED灯每向前移动一步都要延迟196ms(记为T1),另一个是LED要在亮、灭之间切换形成闪烁,亮和灭状态之间保持66ms的延时(记为T2)。T1延时用软件实现,T2延时用TMR0的中断技术实现。将分频器配置

25、给TMR0使用,并将分频比设定为1:256,假设时钟频率为4MHZ,则 TMR0延时计算:256(256-0)1s=65,536s=65.536 ms66 ms。程序流程图如下图所示:,程序清单:TMR0 EQU 01H PCL EQU 02H STATUS EQU 03H OPTION_REG EQU 81H INTCON EQU 0BH PORTC EQU 07H TRISC EQU 87H TMR0_B EQU 0 DLY1 EQU 20H;定义延时变量寄存器DLY2 EQU 21H;定义延时变量寄存器W EQU 0;定义目标寄存器WF EQU 1;定义目标寄存器为RAMRP0 EQU

26、5;定义体选位RP0T0IF EQU 2;TMR0的中断标志位,W_TEMP EQU 7FH;临时备份寄存器PORTC_B EQU 23H;显示数据寄存器FLAG EQU 24H;亮灭标志位 ORG 000H GOTO MAIN;-中断向量和中断服务子程序-ORG 004H;中断服务程序入口地址TMR0SERV;中断服务程序名称 MOVWF W_TEMP;保存W INCF FLAG,F;亮灭标志位反转 BTFSS FLAG,0;标志位=1?是!跳转 GOTO JUMP0;CLRF PORTC;熄灭 GOTO JUMP1;跳过下面的程序,JUMP0 MOVF PORTC_B,W;将显示数据 MO

27、VWF PORTC;送入PORTCJUMP1 BCF INTCON,T0IF;T0IF清零 MOVLW TMR0_B;TMR0赋初值 MOVWF TMR0;重新启动定时 MOVF W_TEMP,W;恢复现场 RETFIE;中断返回;-主程序-MAIN BSF STATUS,RP0;设置RAM的体1 MOVLW 0;将端口C设为输出 MOVWF TRISC MOVLW 0FH;设置选项寄存器 MOVWF OPTION_REG,BCF STATUS,RP0;恢复RAM的体0 MOVLW 0A0H;开放T0IE=1 MOVWF INTCON;开放GIE=1 BCF INTCON,T0IF;T0IF=

28、0 MOVLW TMR0_B;TMR0赋初值 MOVWF TMR0;并启动定时计数 MOVLW B10000000;送显示码初值 MOVWF PORTC_B;至显示数据寄存器LOOP CALL DELAY;调用延时子程序 RRF PORTC_B,F;右移 GOTO LOOP;开始循环,;-软件延时子程序-DELAY;子程序名 MOVLW 0FFH;将外层循环参数值 MOVWF DLY1;送入循环变量DLY1LP0 MOVLW 0FFH;将内层循环参数值 MOVWF DLY2;送入循环变量的DLY2LP1 DECFSZ DLY2,F;DLY2内容递减,若为0跳跃 GOTO LP1;DECFSZ

29、DLY1,F;DLY1内容递减,若为0跳跃 GOTO LP0;跳转到LP0处 RETURN;返回主程序END;源程序结束,用C语言编制如下:#includeunsigned char FLAG0 x24;/flag绝对定位在23H unsigned char W_TEMP0 x7F;/临时备份寄存器bit FLAG0(unsigned),if(FLAG0=0)goto jump0;PORTC=0 x00;goto jump1;jump0:PORTC=PORTC_B;jump1:TMR0=TMR0_B;asm(“MOVF _W_TEMP,W”);/W恢复 main()TRISC=0;/不用切换体

30、 OPTION=0 x07;INTCON=0 xA0;TMR0_B=0;T0IF=0;TMR0=TMR0_B;/TMR0赋初值并启动 PORTC_B=0b10000000;,loop:delay();asm(“RRF _PORTC_B,F”);/PORTC_B=PORTC_B1;goto loop;【说明】定义中断服务程序时,直接使用interrupt关键字,而不用ORG 004H定位;累加器W的保存用asm(“MOVWF _W_TEMP”),也可以使用asm(MOVF _W_TEMP,W)恢复现场;C环境下设置的变量在汇编中要使用的时候,变量前面要加下划线标注;,8.6.3 端口RB电平变化

31、中断,端口RB除了具有普通I/O功能之外,它还要其他端口没有的特点:端口RB具有弱上拉功能:每条引脚内部都有一个可编程的弱上拉电路,即在RB每条引脚上都有一个可由程序控制的开关连接一只高值电阻到VDD引脚上。开关闭合,则弱上拉功能启用;开关断开,则弱上拉功能禁止。选项寄存器OPTION_REG的RBPU(bit7)位,可以控制弱上拉开关:RBPU=0,弱上拉启用;RBPU=1,弱上拉禁止。,对于某些需要外接上拉电阻的应用场合,利用这项功能,可以简化外部电路。RB端口还有一个重要特性,即RB7RB4具有输入电平变化中断功能。当口线RB7RB4被定义为输入状态时,口线上的输入电平发生变化(电平由低

32、变高或由高变低)时,可以引起CPU的中断。与端口RB相关的中断标志位和中断屏蔽位是寄存器INTCON中的RBIF位和RBIE位。端口RB的中断功能电路 RB端口中断的硬件电路原理图如下:,图中RB4RB7中只要某一口线上的逻辑电平发生变化,就会使端口中断标志RBIF置位,产生中断请求。所谓“电平变化”,意味着口线电平在原有的“基准电平”上发生了变化。基准电平是0,引脚新电平是1,或者基准电平是1,引脚新电平是0,均会引起中断请求。基准电平是由基准电平锁存器LEVEL Latch负责锁存,输入锁存器INPUT Latch的Q端输出电平(即锁存内容)会不停的用外部引脚上的逻辑状态进行周期性刷新。即

33、输入锁存器的Q端和基准电平锁存器的Q 端电平都随着外部引,脚上的电平变化而变化,只是锁存的时刻不同而已,当然应该是基准电平锁存器LEVEL Latch锁存在前。异或门Gb比较两个锁存器的Q端输出电平。一旦发现两个电平不同,就立即通过与门Gc和或门Gd,将RB端口电平变化中断标志位RBIF置位,向CPU发送中断请求信号。与门Gc的另一个输入端连接到端口口线的方向控制寄存器TRIS Latch的输出端,即异或门Gb输出信号是否能够通过与门Gc与端口引脚的方向设置有关。,因此,只有当端口引脚设置为输入模式时,该引脚上的电平变化才会导致标志位RBIF被置位。或门Gd具有4个输入端连接到端口引脚RB4R

34、B7上,因而只要其中一条引脚上的电平,与原先读操作时锁存在基准电平锁存器中的电平比较,发生了变化,就会使得标志位RBIF被置位。中断控制寄存器INTCON的RBIF标志位,可以由软件进行置位或者清0。注意:当INPUT Latch和LEVEL Latch的Q端电平存在差异时,那就无法将RBIF 清0。,因此,在每次对RBIF进行清0之前,都必须先对端口寄存器作一次读操作,例如MOVF PORTB,1 其目的不是为了锁存基准电平,而是为了结束失配条件。端口RB中断应用实例例1 简易四路抢答器 该抢答器供不多于4个参赛队或者个人的抢答比赛场合使用。每个参赛队的座位前安装1只抢答按钮开关和1个信号灯

35、。主持人的座位前安装1只复原按钮开关、1只蜂鸣器和1个抢答器工作状态指示灯。,端口RB中断应用实例例1 简易四路抢答器 该抢答器供不多于4个参赛队的抢答比赛场合。每个队的座位前有1只抢答按钮和1个信号灯。主持人的座位前有1只复位按钮、1只蜂鸣器和1个抢答器工作状态指示灯。当主持人发出允许抢答命令后,哪个队先按下座位上的按钮,该座位的信号灯就先被点亮,同时封锁其他按钮。并且熄灭主持人座位上的状态指示灯和发出3声类似于电话振铃的提示声,以声明此次抢答已经完成。在主持人确认后,按下复原按钮,状态指示灯重新点亮,并且同时发出“笛笛”声,为下一次的抢答作好准备。,硬件电路规划:电路原理图如图9.22所示。,电路中的FM是一个蜂鸣器,用来模拟发出报警声的功率放大器和喇叭。在FM发声的同时,灯D6也在发光。按钮开关和指示灯与座位的对应关系如下所列。,软件设计思路,程序中允许2个中断源(外部中断INT和端口 RB电平变化中断)向CPU申请中断。在进入中断服务程序后,先保护中断现场,然后确定发出中断请求的中断源。平时让单片机进入睡眠状态,以便降低能耗,这时单片机内一部分电路退出工作状态,时钟振荡器也停振,但各个寄存器的内容会得到保持。任何中断信号或复位信号的到来,都会将单片机从睡眠状态中唤醒过来,重新投入正常工作。工作完成后可以再次进入睡眠状态,等待下一次被唤醒。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号