中断功能的应用举例.ppt_第1页
中断功能的应用举例.ppt_第2页
中断功能的应用举例.ppt_第3页
中断功能的应用举例.ppt_第4页
中断功能的应用举例.ppt_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

9.6 中断功能的应用举例 由于中断功能是一种应用比较广发的功能,在绝大多数的单片机 控制项目中几乎都会用到此功能,因此,我们在本节中尽量利用ICD 配套演示板上不算很多的硬件资源,通过灵活配置和辅以必要的附 加条件,尽可能多样化的设计几个实验范例,以便充分展现中断功 能的不同用法和编程技巧。 下面的3个范例中,第1个范例中着重应用的一个中断源是TMR0 ; 第2个实验中则重应用的中断源是外部中断INT;第3个实验中着重应 用RB端口电平变化中断,并且有2个中断源(外部INT和端口RB)同时 在活动. 9.6.1 TMR0溢出中断 如何以中断方式利用模块产生延时?与查询方式相比,以中断 方式利用TMR0模块产生延时是如何分解CPU负担的?下面的实验范 例会使读者得到答案。 例9.1闪烁跑马灯 实验项目实现的功能 把演示板上的8只LED发光二极管,规划为跑马等方式轮流闪烁 发光。也就是8只LED中只有一只点亮,亮灯的位置以循环方式不停 的移动,移动的速度取决于在各个位置上停留的时间,即在两步之 间插入一个约96ms的延时,并且在每一个位置上LED都保持快速闪 烁。 硬件电路规划 流水灯电路如图9.3所示(电路图总各个元器件的标号保持与M APLABICD用户指南中提供的电路图中各元器件标号一致)。利 用端口RC上现有的8只发光二极管LED作为显示部件,各只LED均有 限流电阻,主要为的是对单片机端口引脚内部电路起保护作用。单 片机的时钟振荡器工作模式选用RC阻容振荡方式(将跳线JP1插接到 演示板标有RC一侧的接线针上),根据电路中给定的R3和R4阻容值 , 时钟频率大约为4MHz。万一单片机脱离正常工作状态,而进入失控 状态(或出现非正常现象),就可以利用复位按钮SW2,对单片机实施 人工强行复位。利用片内的定时器/计数器TMR0模块和中断逻辑功 能部件,让TMR0工作于定时器模式,并且在超时溢出时向CPU发送 中断请求信号。 PIC16F87X RC0 RC1 RC2 RC3 RC4 RC5 RC6 RC7 470 *8 D1 D0 D2 D3 D4 D5 D6 D7 LED *8 _ MCLR VDD VDD VDD C422pF 47KR3 R13 R2047K 470 R5 R6 R7 R8 R9 R10 R11 R12 VSS OSC1 图9.3 闪烁式跑马灯电路 软件设计思路 驱动8只LED的显示码的形成,采用一次性向端口寄存器赋初值 , 然后循环移动的方式。在本例的程序中,需要加入2段延时,一个使 LED灯每向前移动一步都要延迟一会(记为T1),另一个是LED还要亮 、 灭频繁切换形成闪烁,在亮态和灭态上都保留一个延时(记为T2)。我 们打算T1延时用软件手段实现,T2延时以硬件措施完成,分频器配 置给TMR0使用,并且分频比设定为最大(1:256),利用TMR0编制一 段大约66ms的延时子程序。 TMR0延时时长的计算式为256*(256-0)指令周期=65536指令周期 =65536 s =65.536ms。 其中,前面的256是分频比,括号内的256是TMR0的最大技术 值;0是每次循环累加计数开始时需要向TMR0填写的初始值,直到 计数到256时产生溢出。即从00H开始经过256次加1后,累计到100H 便产生高位溢出,并且发出中断请求。 程序流程图 如图9.4所是,包含主程序和中断服务子程序的流程图,延时子 程序再次不再赘述,可以参见“PIC汇编语言程序设计基础”一部分 中关于岩石子程序的介绍。 主程序 设定C口全部输出 设分频器归TMR0,分频比为1:256 开放TMR0中断使能位和总使能位 消除TMR0中断标志位 给TMR0赋初值启动定时器 显示缓冲器赋初始显示码 调用延时子程序 显示缓冲器带进位标志循环右移 中断服务子程序 保护W寄存器 清除TMR0溢出标志位 亮灭标志位=1 ? 中断返回 YN 修改亮灭标志位 显示缓冲器送显令灯LED熄灭 TMR0赋初值重新启动 恢复W寄存器 图 9.4 程序流程图 程序清单 ;* ;闪烁式跑马灯 ;程序文件名为“INTEXP.ASM ” ;* tmr0 equ 01h ;定义定时器/计数器0寄存器地址 pcl equ 02h ;定义程序计数器低字节寄存器地址 status equ 3h ;定义状态寄存器地址 option_reg equ 81h ;定义选项寄存器地址 intcon equ 0bh ;定义中断控制寄存器地址 portc equ 07h ;定义端口C的数据寄存器地址 trisc equ 87h ;定义端口C的方向控制寄存器地址 tmer0_b equ 0 ;定义TMR0寄存器初始值(256=256-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 ;在体0上定义临时备份寄存器 portc_c equ 23h ;定义一个显示缓冲区寄存器 flag equ 24h ;定义一个亮灭标志位(只用寄存器的末位) ;*复 位 向 量* org 000h ;定义程序存放区域的启示地址 nop ;设置一条ICD必需的空操作指令 goto main ; ;*中断向量和中断服务子程序* org 004h ;中断向量,中断服务程序入口地址 tmr0serv ;中断服务程序名称 movwf w_temp ;复制W到他的临时备份寄存器W_TEMP bcf intcon, t0if ;清除TMR0溢出中断标志位 incf flag, f ;亮灭标志位(寄存器末位)反转 btfss flag, 0 ;标志位=1?是!跳一步到“熄灭” goto jump0 ;否!跳到“点亮” clrf portc ;熄灭 goto jump1 ;跳过下面的程序 jump0 movf portc_b ;点亮,即将缓冲区内容先传入W movwf portc ;再由W转入端口寄存器,送显 jump1 movlw tmr0_b ;TMR0赋初值 movwf tmr0 ;并(重新)启动定时计算 movf w_temp, w :恢复现场 retfie :中断返回 ;*主程序* main bsf status, rp0 ;设置文件寄存器的体1 movlw 0 ;将端口C的方向控制00h码先送W movwf trisc ;再转到方向寄存器,RC全部设为输出 movlw 07h ;设置选项寄存器内容:分频器给TMR0 movwf option_reg ;分频比值设为1:256 bcf status, rp0 ;恢复到文件寄存器的体0 movlw 0a0h ;开放TMR0中断使能位 movwf intcon ;开放全局中断使能位 bcf intcon, t0if ;清除TMR0溢出中断标志位 movlw tmr0_b ;TMR0赋初值 movwf tmr0 ;并启动定时计数 movlw b10000000 ;显示驱动码送入W movwf portc_b ;将驱动码送入显示缓冲区寄存器 loop cal l delay ;调用延时子程序 rrf portc_b, f ;带进位标志位右移缓冲区寄存器 goto loop ;跳转回去 ;*软件延时子程序* delay ;子程序名,也是子程序入口地址 movlw 0fh ;将外层循环参数值经过W movwf dly1 ;送入用作外循环变量的dly1 lp0 movlw offh ;将内层循环参数值FFH送入W movwf dly2 ;送入用作内循环变量的dly2 lp1 decfsz dly2, f ;内层变量dly2内容递减,若为0跳跃 goto lp1 ;跳转到lp1处 decfsz dly1, f ;外层变量dly1内容递减,若为0跳跃 goto lp0 ;跳转到lp0处 return ;返回主程序 end ;源程序结束 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 Q1|Q2|Q3|Q4 PCPC+PC+10004H0005H 指令(PC) 指令(PC-1)指令(PC) 指令(PC+1) 空运行周期 空运行周期 指令(0004H) 指令(0005H) 指令(0004H) 潜伏期 指令周期 始终OSC1 指令周期 INT引脚 INTF标志位 (INTCON) GIE比特 (INTCON) PC 提取指令 执行指令 指 令 流 图9.2 INT外部中断时序图 TXIF TXIE SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE PSPIF PSPIE EEIF EEIE TMR1IF TMR1IE CCP2IF CCP1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中断CPU当 前的程序 唤醒CPU(如果 处于模式) 中断源第二梯队中断源第一梯队 (a) PIC16F874/877中断逻辑 TXIF TXIE SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE CCP2IF CCP1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中断CPU当 前的程序 唤醒CPU(如果 处于模式) 中断源第二梯队中断源第一梯队 (b) PIC16F873/876中断逻辑 (c) PIC16F872中断逻辑 SSPIF SSPIE TMR2IF TMR2IE CCPIF CCPIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE BCLIF BCLIE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中断CPU当 前的程序 唤醒CPU(如果 处于模式) 中断源第二梯队中断源第一梯队 TXIF TXIE TMR2IF TMR2IE CCPIF CCPIE RCIF RCIE ADIF ADIE EEIF EEIE TMR1IF TMR1IE RBIF RBIE INTF INTE T0IF T0IE PEIE GIE 中断CPU当 前的程序 唤醒CPU(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论