单片机魏第6章.ppt

6MCS 51中断系统 一 概述 与上对比 单片机中也有同样的问题 CPU正在执行原程序 突然 被意外事情打断 转去执行新程序 CPU执行新程序结束后 又回到原程序中继续执行 这样的过程就叫 什么叫中断 举例 某同学正在教室写作业 忽然被人叫出去 回来后 继续写作业 这就是生活中中断的例子 对突发事故 做出紧急处理 根据现场随时变化的各种参数 信息 做出实时监控 CPU与外部设备并行工作 以中断方式相联系 提高工作效率 解决快速CPU与慢速外设之间的矛盾 在多项外部设备同时提出中断请求情况下 CPU能根据轻重缓急响应外设的中断请求 中断的作用 对于MCS 51单片机中断系统的组成可以用一句话来讲 叫做 五源中断 两级管理 五个中断源 入口地址外部中断0 INT0 0003HT0溢出中断000BH外部中断1 INT1 0013HT1溢出中断001BH串口中断0023H 二 中断请求源 五源中断 中断源的中断请求 如何通知CPU 利用中断请求标志位来通知 CPU识别中断申请的依据 CPU在每个机器周期的S5P2期间 会自动查询各个中断申请标志位 若查到某标志位被置位 将启动中断机制 2 中断控制MCS 51单片机设置了4个专用寄存器用于中断控制 用户通过设置其状态来管理中断系统 以上6个中断请求标志位分别分布在TCON SCON两个寄存器中 TCON SCON 在中断源与CPU之间有二级中断允许控制逻辑电路 类似开关 其中第一级为一个总开关 第二级为五个分开关 由IE控制 三 中断控制 两级管理 1 中断屏蔽 第一级管理 IE 若为 1 开关接通 允许例如SETBEA若为 0 开关断开 不允许例如CLRIE 7 2 中断优先级 第二级管理 为什么要有中断优先级 PS 串口的中断优先级别PT1 定时 计数器T1的中断优先级别PX1 外部中断1的中断优先级别PT0 定时 计数器T0的中断优先级别PX0 外部中断0的中断优先级别 该位是 1 时 为高级优先级该位是 0 时 为低级优先级 同一级中的5个中断源的优先顺序是 中断优先原则 概括为四句话 1 低级不打断高级2 高级不睬低级3 同级不能打断4 同级 同时中断 事先约定 事件1 事件2 子程序2 子程序1 中断嵌套的概念 主程序 中断 中断 四 MCS 51中断的响应过程 中断请求的撤消1 定时器 计数器中断请求的撤消中断请求被响应后 硬件会自动清TF0或TF1 2 外部中断请求的撤消 1 跳沿方式外部中断请求的撤消是自动撤消的 2 电平方式外部中断请求的撤消 除了标志位清 0 之外 还需在中断响应后把中断请求信号引脚从低电平强制改变为高电平 如下图所示 只要P1 0端输出一个负脉冲就可以使D触发器置 1 从而撤消了低电平的中断请求信号 所需的负脉冲可增加如下两条指令得到 ORLP1 01H P1 0为 1 ANLP1 0FEH P1 0为 0 电平方式的外部中断请求信号的完全撤消 是通过软硬件相结合的方法来实现的 3 串行口中断请求的撤消响应串行口的中断后 CPU无法知道是接收中断还是发送中断 还需测试这两个中断标志位的状态 以判定是接收操作还是发送操作 然后才能清除 所以串行口中断请求的撤消只能使用软件的方法CLRTI 清TI标志位CLRRI 清RI标志位 例1外部中断的应用 8051单片机的P1口控制8个LED灯 要求8个灯加1移位点亮 当中断来时 灯全灭后全亮 然后继续加1移位点亮 ORG0HAJMPSTORG0003HAJMPEXT0ORG0030HST MOVSP 70HMOVIE 81HMOVIP 01HMOVTCON 00HRES MOVR1 08HMOVA 0FFH LOOP MOVP1 ADECAACALLDELAYACALLDELAYDJNZR1 LOOPSJMPRES 中断服务程序 EXT0 PUSHACCMOVA 00MOVP1 AACALLDELAYACALLDELAYCPLAMOVP1 AACALLDELAYACALLDELAYPOPACCRETI 处理外部中断举例 要求每次按动按键 使外接发光二极管LED改变一次亮灭状态 解 INT0输入按键信号 P1 0输出改变LED状态 1 跳变触发 每次跳变引起一次中断请求 ORG0000H 复位入口AJMPMAINORG0003H 中断入口AJMPPINT0ORG0100H 主程序MAIN MOVSP 40H 设栈底SETBEA 开总允许开关SETBEX0 开INT0中断SETBIT0 负跳变触发中断H SJMPH 执行其它任务ORG0200H 中断服务程序PINT0 CPLP1 0 改变LEDRETI 返回主程序 1 软件等待按键释放 2 硬件清除中断信号 2 电平触发 避免一次按键引起多次中断响应 ORG0000H 复位入口AJMPMAINORG0003H 中断入口AJMPPINT0ORG0100H 主程序MAIN MOVSP 40H 设栈底SETBEA 开总允许开关SETBEX0 开INT0中断CLRIT0 低电平触发中断H SJMPH 执行其它任务ORG0200H 中断服务程序PINT0 CPLP1 0 改变LEDWAIT JNBP3 2 WAIT 等按键释放RETI 返回主程序 例题3 通过外部中断控制八盏灯循环点亮 解 通过P1口扩展八盏灯 在引脚接一个按钮开关到地 每按一下按钮就申请一次中断 点亮一盏灯 中断服务则是 依次点亮八盏灯中的一盏 采用边沿触发 硬件电路如下图所示 程序如下 ORG0000HLJMPMAINORG0013H 中断服务程序入口地址LJMPIN11MAIN SETBEA 开总中断允许 开关 SETBEX1 开分中断允许 开关 CLRPX1 低优先级 也可不要此句 SETBIT1 边沿触发MOVA 01H 给累加器A赋初值SJMP 原地等待中断申请IN11 RLA 左环移一次MOVP1 A 输出到P1口RETI 中断返回END 3 2 4MCS 51扩展外部中断请求输入口 8051单片机只提供了两个外部中断请求输入端 如果需要使用多于两个的中断源 就必须扩展外部中断请求输入口 1 定时器 计数器用于扩展外部中断请求输入口8051单片机有两个定时器 计数器 它们作为计数器使用时 计数输入端T0 或T1 发生负跳变将使计数器加1 利用此特性 适当设置计数初值 就可以把计数输入端T0 或T1 作为外部中断请求输入口 其特点是以占用内部定时中断为代价的 中断服务程序的入口地址仍然为000BH或001BH 2 查询方式扩展外部中断请求输入口把多个中断源通过硬件 如与非门 引入外部中断输入端 同时又连到某个I O口 当有中断源申请中断时 在中断服务程序中通过软件查询可确定哪一个是正在申请的中断源 其查询的次序可由中断优先级决定 其特点是中断响应速度较慢 适用于外部中断源较多的场合 下页例题中 我们采用74LS21A四输入端双与门实现该任务 3 使用专用芯片扩展外部中断请求输入口当外部中断源较多 同时又要求中断响应速度很高时 查询方式扩展外部中断请求输入口的方法很难满足要求 这时可以使用专用接口芯片进行外部中断请求输入口的扩展 下面例题中 我们采用74LS21A四输入端双与门实现该任务 查询方式扩展外部中断请求输入口的电路实现 74ls21的逻辑表是 当输入全高时输出为高 任一输入低则输出就为低 电路分析 当没有按键按下时 由于上拉电阻的作用 74ls21输出高 使INT0口为高电平 此时中断程序不被触发 如果任何一个按键按下 则74ls21输出低电平 触发中断程序 中断程序设计为 如果程序设计检测次序是P1 0 P1 1 P1 2 P1 3口 优先级即按顺序排列 如果同时有多个键被按下 可根据实际要求设定为1 仅仅只响应最优先中断 2 按优先级顺序依次执行各个中断 设计程序如下 ORG0000HLJMPMAINORG0003H 外部中断0中断服务入口地址LJMPINT 转中断服务ORG0100HMAIN SETBEA 开总中断允许SETBEX0 开INT0中断SETBIT0 下降沿有效 中断服务程序清单如下 INTICALLD20 延时去抖动MOVP1 0FFH P1口送全1值 准双向口原因 MOVA P1 读P1口各引脚 设另四口未用 CJNEA 0FFH CLOSE 验证是否确实有键闭合AJMPINT0 无键按下 按键时间过短 则退 出中断 CLOSE JNBACC 3 KEY0 查询0号键JNBACC 2 KEY1 查询1号键JNBACC 1 KEY2 查询2号键JNBACC 0 KEY3 查询3号键INT0 RETIKEY0 7号键处理程序KEY01 MOVA P1 再读P1口各引脚JNBACC 0 FUNC71 确认键是否释放RETIKEY1 其他键处理程序 D20 20ms延时子程序 END 中断应用举例 例5 1 图5 6为3个故障源显示电路 当系统无故障时 3个故障源输入端X1 X3全为低电平 对应的3个显示灯全灭 当某部分出现故障时 其对应的输入端由低电平变为高电平 从而引起MCS 51单片机中断 中断服务程序的任务是判定故障 并点亮对应的发光二极管 其中 发光二极管LED1 LED3对应3个输入端X1 X3 实现上述功能的电路如图5 6所示 3个故障源X1 X3通过 或非门 与8031单片机的外部中断0输入端相连 同时 X1 X3与P0口的P1 0 P1 2引脚相接 3支发光二极管LED1 LED3分别与P0口的P1 3 P1 5相接 主程序为 ORG0000HAJMPMAINORG0003HAJMPSERVEMAIN ORLP1 0FFH 灯全灭 准备读入SETBIT0 选择边沿触发方式SETBEX0 允许INT0中断SETBEA CPU开中断AJMP 等待中断 中断服务子程序为 SERVE JNBP1 0 L1 若X1无故障 跳到L1CLRP1 3 点亮LED1L1 JNBP1 1 L2 若X2无故障 跳到L2CLRP1 4 点亮LED2L2 JNBP1 2 L3 若X3无故障 跳到L3CLRP1 5 点亮LED3L3 RETI 小结 1 MCS 51单片机中断系统有几个中断源 分别是什么 事先约定的优先顺序是怎样的 2 如何进行中断允许控制 如何进行中断优先级控制 3 中断优先的规则是什么 今天的作业 1 若允许片内2个定时器 计数器中断 禁止其它中断源的中断请求 分别用位操作指令和字节操作指令编写设置IE的相应程序段 用位操作指令来编写如下程序段 CLRES 禁止串行口中断CLREX1 禁止外部中断1中断CLREX0 禁止外部中断0中断SETBET0 允许定时器 计数器T0中断SETBET1 允许定时器 计数器T1中断SETBEA CPU开中断用字节操作指令来编写 MOVIE 8AH或者用 MOV0A8H 8AH A8H为IE寄存器字节地址 2 分别用位操作指令和字节操作指令设置IP寄存器的初始值 使2个外中断请求为高优先级 其它中断请求为低优先级 1 用位操作指令SETBPX0 2个外中断为高优先级SETBPX1CLRPS 串行口 2个定时器 计数器为低优先级中断CLRPT0CLRPT1 2 用字节操作指令MOVIP 05H或 MOV0B8H 05H B8H为IP寄存器的字节地址