收藏 分销(赏)

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

上传人:xrp****65 文档编号:13326085 上传时间:2026-03-01 格式:PPT 页数:61 大小:1.19MB 下载积分:10 金币
下载 相关
PIC单片机中断系统详细汇总.ppt_第1页
第1页 / 共61页
PIC单片机中断系统详细汇总.ppt_第2页
第2页 / 共61页


点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第八章 中断系统,8.1,中断的基本概念,当单片机正在执行程序时,出现了某些特殊状况,例如定时时间到、有键盘信号输入等,此时,CPU,须要暂时停止当前的程序,而转去执行处理这些事件的程序,待执行完这些特定的程序之后,再返回到原先的程序去执行,这就形成了一次,“中断”。,“中断”加强了单片机处理突发事件的能力,如果没有中断功能,对可能发生的特殊状况的处理,就必须采用定时查询,,这样就会浪费大量的,CPU,时间。,因此,中断是单片机中很重要的一个概念,是提高工作效率的重要功能,中断系统功能的好坏是衡量单片机功能的重要指标。,单片机的,“中断源”,与单片机包含的外围设备有很大的关系,所谓“中断源”就是引起中断的原因或根源,就是中断请求的来源。,PIC16F87X,系列集成了较多的外围设备:,16F874/877,内部集成了,15,个外围设备;,16F873/876,内部集成了,12,个外围设备;,16F870/872,内部集成了,10,个外围设备;,16F871,内部集成了,13,个外围设备。,外围设备在工作过程中,都需要,CPU,参与控制、协调或交换数据等服务,而,CPU,正是通过中断技术使得这些外围设备协调工作的。,PIC,单片机作一次中断处理的过程如下:,当某一中断源发出中断请求时:,假如,CPU,正在执行,更重要的任务,,则可采用屏蔽的方法暂时不响应该中断请求;,如果可以响应该中断请求,则,CPU,执行完当前指令后,必须把断点处的程序计数器,PC,的值,(,即下一条指令的地址,),压入堆栈保存起来,(,断点保护,),,也可以把一些的重要寄存器内容也保,护,起来,(,现场保护,),。然后再转移到相应的中断服务子程序中执行。,在中断服务子程序中,首先必须确定,发出中断请求的中断源,,然后再跳转到与该中断源相对应的程序分支中去执行中断服务程序。,当中断服务程序执行毕后,必须先恢复被保护的寄存器的值,(,现场恢复,),,再将程序计数器,PC,的值从堆栈中恢复,(,断点恢复,),,使,CPU,返回断点处继续执行被中断的程序。,8.2 PIC16F87X,的中断源,PIC16F87X,单片机具备的中断源如下表所示:,从上表可看出,各中断源基本上都与各个外围设备模块相对应的:,多数的外围设备对应着一个中断源,(,如定时计数器,TMR0),,也有的外围设备对应二个中断源,(,如,SCI,同步异步接收发送器,USART),;,有的外围设备没有中断源与之对应,(,如输入输出端口,RA,和,RC),;,也有的中断源没有外围设备与之对应,(,例如外部中断源,INT),。,8.3 PIC16F87X,的中断硬件逻辑,在,PIC16F87X,单片机中,不但中断源的种类和个数不同,它们的中断逻辑电路也不同。,PIC16F87X,单片机的中断系统的逻辑电路如图,9.1(a),(e),所示,(p101103),。,每一种中断源对应了一个,中断标志位,,记为,XXXF,,,以及一个,中断屏蔽位,或叫,中断使能位,记为,XXXE,。,中断源产生的中断信号能否到达,CPU,,,都受控于相应的中断屏蔽位。,每个中断源申请中断时,其,中断标志,位会自动置位,中断标志位的清,0,是由用户程序完成的;而每个,中断屏蔽位,的置位和清位均由用户程序完成。,下图是由一些门电路构成的中断组合逻辑电路。,图中全部的的,14,个中断源按两个梯队并列排开,第一梯队中只安排了,3,个中断源,其余的中断源全部安排到第二梯队中。,所有的中断源都受“全局中断屏蔽位”,(,也称总屏蔽位,)GIE,的控制;,第一梯队的中断源不仅受,GIE,的控制,还要受各自中断屏蔽位的控制;,第二梯队的中断源不仅受到,GIE,和各自中断屏蔽位的控制,还要受到一个,外设中断屏蔽位,PEIE,的控制。,8.4,中断相关的寄存器,与中断有关的特殊功能寄存器,SFR,共有,6,个,分别是:,选项寄存器,OPTION_REG,、中断控制寄存器,INTCON,、第一外围设备中断标志寄存器,PIR1,、第一外围设备中断屏蔽寄存器,PIE1(,也称中断使能寄存器,),、第二外围设备中断标志寄存器,PIR2,和第二外围设备中断屏蔽寄存器,PIE2,,如表,9.2,所列,。,后,5,个,SFR,,共有,40,位,但仅使用了,30,位来控制中断,分别与图,9.l,中的中断逻辑电路的输入信号成严格的对应关系。,选项寄存器,OPTION _REG,OPTION_REG,选项寄存器是可读写的,各位的分布形式:,该寄存器包含了与定时计数器,TMR0,、,分频器和端口,RB,有关的控制位。,RB,端口引脚,RB0,和外部中断,INT,复用一脚,与该脚有关的一个控制位含义如下:,INTEDG,:,外部中断,INT,触发信号边沿选择位:,1=,选择,RB0,INT,上升沿触发;,0=,选择,RB0,INT,下降沿触发,中断控制寄存器,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,引脚产生的中断。,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,响应所有中断源产生的中断请求。,第一外围设备中断标志寄存器,PIR1,寄存器,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=,并行端口未发生读写中断请求。,第一外围设备中断屏蔽寄存器,PIE1,第一外围设备中断屏蔽寄存器,PIEl,也是可读写的寄存器,各位的分布形式如下:,该寄存器中包含的中断屏蔽位,(,使能位,),的含义如下:,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=,屏蔽并行端口读写发生的中断请求。,第二外围设备中断标志寄存器,PIR2,第二外围设备中断标志寄存器,PIR2,也是一个可读写的寄存器,各位的分布形式如下:,各位的含义如下:,CCP2IF,:输入捕捉输出比较脉宽调制,CCP2,模块中断标志位。,输入捕捉模式下:,1=,发生了捕捉中断请求,(,必须用软件清,0),;,0=,未发生捕捉中断请求。,输出比较模式下:,1=,发生了比较输出中断请求,(,必须用软件清,0),;,0=,未发生比较输出中断请求。,脉宽调制模式下:无用,BCLIF,:,I,2,C,总线冲突中断标志。当同步串行端口,MSSP,被配置成,I,2,C,总线的主控器模式时:,1=,发生了总线冲突;,0=,未发生总线冲突。,EEIF,:,EEPROM,写操作中断标志位。,1=,写操作已经完成,(,必须用软件清,0),;,0=,写操作未完成或尚未开始进行。,第二外围设备中断屏蔽寄存器,PIE2,PIE2,各位的分布形式如下:,CCP2IE,:,输入捕捉输出比较脉宽调制,CCP2,模块中断屏蔽位。,1=,开放,CCP2,模块产生的中断请求;,0=,屏蔽,CCP2,模块产生的中断请求。,EEIE,:,EEPROM,写操作中断屏蔽位。,1=,开放,EEPROM,写操作产生的中断请求;,0=,屏蔽,EEPROM,写操作产生的中断请求。,8.5,中断的处理,单片机复位后,硬件会自动设置,GIE=0,,屏蔽所有的中断源,假如要求单片机能响应所有中断,必须设置,GIE=1,。,其实无论,GIE,或着其他中断屏蔽位是否为,1,,当某中断源的中断条件满足时,都会发出中断请求,即相应的中断标志位都会置,1,。但是否能够得到,CPU,的响应,则由该中断源的中断屏蔽位决定。,CPU,响应中断后,自动设置,GIE=0,,,屏蔽所有中断,以免发生重复中断响应,然后自动把,PC,寄存器当前值压入堆栈,并把,PC,值赋予地址,0004H,,从而转向执行中断服务子程序。,进入中断服务程序后,程序必须要确定发出请求的中断源,这可以通过检查各中断源的标志位来实现。,确定了中断源后,就用软件把该中断源的标志位清,0,,,否则,执行中断返回指令重开中断后,假如中断标志位仍然为,1,,则会引起,CPU,重复响应同一个中断请求。,执行中断返回指令,RETFIE,后,不仅会将保留在堆栈中的断点地址弹回到,PC,寄存器中,使程序能返回到被中断的程序处;而且还会自动设置,GIE=1,,重新开放所有的中断源。,8.5.1,中断的现场保护问题,中断现场保护是中断技术中十分重要的环节。在进入中断服务子程序期间,堆栈中只能保存返回地址,(,程序计数器,PC,的值,),。若要保留其他寄存器的内容,怎么办?,由于,PIC,的指令系统中没有,PUSH(,入栈,),和,POP(,出栈,),之类的指令,所以用户要编制一段程序来实现现场保护的功能。,因为是由用户程序来实现现场保护,,而程序的执行中最敏感的寄存器无非就是,W,寄存器和,STATUS,寄存器,所以应该首先把这两个寄存器保护起来,然后再去保存其他的寄存器。,PIC,单片机中,中断现场数据是不能保留到堆栈区域中的,而是保留在,RAM,存储器单元中,一般是保留在,通用寄存器中,。,在,PIC,中,现场保护是很麻烦的事。因为中断是随机发生的,不管程序执行到哪一步,也不管程序所选择的,RAM,的当前体是哪一个,更不管主程序目前在程序存储器那个页面,中断请求及其中断响应都有可能发生。,在中断现场保护过程中,首先要保存的是累加器,W,,这是因为,PIC,单片机,是不可以在不同的文件寄存器之间,(RAM,单元之间,),直接传送数据的,必须要经,W,中转才能实现,所以首先要把,W,寄存器保存,才可以备份其他的寄存器比如,STATUS,。,在保存,W,寄存器时,要确定主程序目前处在的,RAM,存储器的那个体中是十分困难的。,虽然可以通过读取,STATUS,寄存器的,rp0rp1,位得到当前体,但是也是十分麻烦的。,假设在,RAM,的,bank0,的,20H,上定义一个,W,的临时备份寄存器,通常取名为,W_TEMP,。,当利用,MOVWF W_TEMP,命令,企图将,W,中的内容保存到,W_TEMP,中时,往往会出现问题,因为此时保存的内容不一定是在,bank0,中,还和,STATUS,寄存的内容有关系。,为了解决这个问题,,PIC16F87X,中有几款单片机,(,见,p28p31),,其,RAM,各个体的顶端有,16,个单元,都会彼此映射到相同的,16,个单元上。访问这,16,个单元时体选码就不重要了,因为它们对四个体都是“透明”的。因此,将,W_TEMP,安排在这个部位最为合适,这样做可以使得现场保护和现场恢复变得相对容易实现。,下面给出一段保护中断现场的程序片段:,;,将,W,,,STATUS,和,PCLATH,的内容保存到文件寄存器中,W_TEMP EQU 70H,STATUS_TEMP 6EH,PCLATH_TEMP 6FH,MOVWF W_TEMP ;WW_TEMP,SWAPF STATUS,0,;STATUS,高低半字节交换,CLRF STATUS,;,设置体,0,作当前体,MOVWF STATUS_TEMP ;,到,STATUS_TEMP,MOVF PCLATH,0 ;PCLATH,到,PCLATH_TEMP,MOVWF PCLATH_TEMP,(,中断服务子程序的核心部分,),CLRF STATUS,MOVF PCLATH_TEMP,0 ;,恢复,PCLATH,内容,MOVWF PCLATH,SWAPF STATUS_TEMP,0 ;,恢复,STATUS,MOVWF STATUS ;,同时,RAM,恢复到原先,BANK,SWAPF W_TEMP,1 ;,恢复,W,SWAPF W_TEMP,0 ;,【,说明,】,程序中对要保留的寄存器分别定义了相应的临时备份寄存器,例如“,W”,的临时备份寄存器为“,W_TEMP”,。,在保存,W,时,决不能影响状态寄存器,STATUS,的当前内容,否则会影响到体选码及其他标志位。,保存好,W,后,才可以保存,STATUS,和其他寄存器。指令系统总是先将,STATUS,的内容传送,W,,,再经,W,传送到备份相应的备份寄存器中,比如,STATUS _TEMP,。,在程序中使用,SWAPF STATUS,0,来保存状态寄存器,STATUS,的内容,,而没有使用,MOVF STATUS,0,,,因为,该指令会影响,STATUS,的,Z,标志位,显然这是不可容忍的。,因此,程序采用字节交换指令,SWAPF,来顶替。在此只利用,SWAPF,的传递功能,它带来的交换功能得记录下来,在返回主程序之前必须把它重新置换回来。,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?,因为,MOVF W_TEMP,,,0,又会影响,Z,标志位,会破坏刚刚恢复的,STATUS,中的内容,这显然是不可以的。,8.5.3,小结,除了在中断现场保护部分提到的一些需注意的问题之外,还有前面提到的一些重要注意要注意:,单片机在任何情况下的复位,均会导致总屏蔽位和其他的中断屏蔽位清,0,,即在默认状态下,禁止,CPU,响应所有中断。,中断标志位的状态与该所有的中断屏蔽位无关,即不管是否允许,CPU,响应中断源的中断请求,只要满足了中断的条件,中断标志位就会被置成,1,。,当系统开放某一中断源时,中断源就通过中断标志位向,CPU,申请中断,只要将中断标志位置,1,,就会产生中断响应。,当,CPU,响应任一个中断后,,全局中断屏蔽位,GIE,将会自动清,0,;当中断返回时它又会自动恢复为,1,。,如果在中断服务期间若用软件将自动清,0,的,GIE,重新置,1,,这时若再出现中断请求,就会形成中断的嵌套:即在响应某一中断期间又响应了其他中断。不过嵌套的级数不能超过堆栈的深度,(8,级,),,以免造成堆栈溢出。,如果同时发生多个中断请求,到底哪个中断会优先得到处理,完全取决于在中断服务子程序中检查中断源的顺序,原因是各个中断源之间不存在优先级别之分。,每一种中断源受屏蔽的次数不完全相同,第一梯队的中断源受到二次屏蔽,而第二梯队的中断源受到三次屏蔽。,PIC,系列单片机的型号不同,数据存储器,RAM,的布局不完全相同,为工作寄存器,W,安排备份寄存器,W_TEMP,的方法也就不完全相同。,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,的中断技术实现。将分频器配置给,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 ;,定义目标寄存器,W,F EQU 1 ;,定义目标寄存器为,RAM,RP0 EQU 5 ;,定义体选位,RP0,T0IF 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 ;,将显示数据,MOVWF PORTC ;,送入,PORTC,JUMP1,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=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 ;,送入循环变量,DLY1,LP0 MOVLW 0FFH ;,将内层循环参数值,MOVWF DLY2 ;,送入循环变量的,DLY2,LP1 DECFSZ DLY2,F ;DLY2,内容递减,若为,0,跳跃,GOTO LP1 ;,DECFSZ DLY1,F ;DLY1,内容递减,若为,0,跳跃,GOTO LP0 ;,跳转到,LP0,处,RETURN ;,返回主程序,END ;,源程序结束,用,C,语言编制如下:,#include,unsigned char FLAG0 x24;/flag,绝对定位在,23H,unsigned char W_TEMP0 x7F;/,临时备份寄存器,bit FLAG0(unsigned)/FLAG0,定位为,FLAG,的,bit0,unsigned char PORTC_B,TMR0_B;,void delay(),unsigned,int,i;,for(i,=19600;i0;i-);,void,interrupt,TMR0SERV(),asm(MOVWF,_W_TEMP),;/,累加器的保存,T0IF=0;/,清,TMR0,中断标志位,flag+=1;,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;/,不用切换体,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,电平变化中断,端口,RB,除了具有普通,I/O,功能之外,它还要其他端口没有的特点:,端口,RB,具有弱上拉功能:,每条引脚内部都有一个可编程的弱上拉电路,即在,RB,每条引脚上都有一个可由程序控制的开关连接一只高值电阻到,VDD,引脚上。开关闭合,则弱上拉功能启用;开关断开,则弱上拉功能禁止。,选项寄存器,OPTION_REG,的,RBPU,(bit7),位,可以控制弱上拉开关:,RBPU,=0,,弱上拉启用;,RBPU,=1,,弱上拉禁止。,对于某些需要外接上拉电阻的应用场合,利用这项功能,可以简化外部电路。,RB,端口还有一个重要特性,即,RB7,RB4,具有输入电平变化中断功能。,当口线,RB7,RB4,被定义为输入状态时,口线上的输入电平发生变化,(,电平由低变高或由高变低,),时,可以引起,CPU,的中断。与端口,RB,相关的中断标志位和中断屏蔽位是寄存器,INTCON,中的,RBIF,位和,RBIE,位。,端口,RB,的中断功能电路,RB,端口中断的硬件电路原理图如下:,图中,RB4,RB7,中只要某一口线上的逻辑电平发生变化,就会使端口中断标志,RBIF,置位,产生中断请求。所谓“电平变化”,意味着口线电平在原有的“基准电平”上发生了变化。基准电平是,0,,引脚新电平是,1,,或者基准电平是,1,,引脚新电平是,0,,均会引起中断请求。,基准电平是由,基准电平锁存器,LEVEL Latch,负责锁存,,输入锁存器,INPUT Latch,的,Q,端输出电平,(,即锁存内容,),会不停的用外部引脚上的逻辑状态进行周期性刷新。即输入锁存器的,Q,端和基准电平锁存器的,Q,端电平都随着外部引,脚上的电平变化而变化,只是锁存的时刻不同而已,当然应该是基准电平锁存器,LEVEL Latch,锁存在前。,异或门,Gb,比较两个锁存器的,Q,端输出电平。一旦发现两个电平不同,就立即通过与门,Gc,和或门,Gd,,将,RB,端口电平变化中断标志位,RBIF,置位,向,CPU,发送中断请求信号。,与门,Gc,的另一个输入端连接到端口口线的方向控制寄存器,TRIS Latch,的输出端,即异或门,Gb,输出信号是否能够通过与门,Gc,与端口引脚的方向设置有关。,因此,只有当端口引脚设置为输入模式时,该引脚上的电平变化才会导致标志位,RBIF,被置位。,或门,Gd,具有,4,个输入端连接到端口引脚,RB4,RB7,上,因而只要其中一条引脚上的电平,与原先读操作时锁存在基准电平锁存器中的电平比较,发生了变化,就会使得标志位,RBIF,被置位。,中断控制寄存器,INTCON,的,RBIF,标志位,可以由软件进行置位或者清,0,。,注意:当,INPUT Latch,和,LEVEL Latch,的,Q,端电平存在差异时,那就无法将,RBIF,清,0,。,因此,在每次对,RBIF,进行清,0,之前,都必须先对端口寄存器作一次读操作,例如,MOVF PORTB,1,其目的不是为了锁存基准电平,而是为了结束失配条件。,端口,RB,中断应用实例,例,1,简易四路抢答器,该抢答器供不多于,4,个参赛队或者个人的抢答比赛场合使用。每个参赛队的座位前安装,1,只抢答按钮开关和,1,个信号灯。主持人的座位前安装,1,只复原按钮开关、,1,只蜂鸣器和,1,个抢答器工作状态指示灯。,端口,RB,中断应用实例,例,1,简易四路抢答器,该抢答器供不多于,4,个参赛队的抢答比赛场合。每个队的座位前有,1,只抢答按钮和,1,个信号灯。主持人的座位前有,1,只复位按钮、,1,只蜂鸣器和,1,个抢答器工作状态指示灯。当主持人发出允许抢答命令后,哪个队先按下座位上的按钮,该座位的信号灯就先被点亮,同时封锁其他按钮。并且熄灭主持人座位上的状态指示灯和发出,3,声类似于电话振铃的提示声,以声明此次抢答已经完成。,在主持人确认后,按下复原按钮,状态指示灯重新点亮,并且同时发出“笛笛”声,为下一次的抢答作好准备。,硬件电路规划:,电路原理图如图,9.22,所示,。,电路中的,FM,是一个蜂鸣器,用来模拟发出报警声的功率放大器和喇叭。在,FM,发声的同时,灯,D6,也在发光。,按钮开关和指示灯与座位的对应关系如下所列。,软件设计思路,程序中允许,2,个中断源,(,外部中断,INT,和端口,RB,电平变化中断,),向,CPU,申请中断。在进入中断服务程序后,先保护中断现场,然后确定发出中断请求的中断源。,平时让单片机进入睡眠状态,以便降低能耗,这时单片机内一部分电路退出工作状态,时钟振荡器也停振,但各个寄存器的内容会得到保持。任何中断信号或复位信号的到来,都会将单片机从睡眠状态中唤醒过来,重新投入正常工作。工作完成后可以再次进入睡眠状态,等待下一次被唤醒。,
展开阅读全文

开通  VIP、SVIP  下载更划算
下载10份以上建议开通 VIP 会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        关注我们

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服