资源描述
单 元 七 MCS - 51单 片 机 的 中 断 一 、 中 断 的 概 述 二 、 MCS - 51中 断 系 统三 、 中 断 系 统 的 应 用 5.1 中 断 的 概 述 1. 中 断 中 断 是 指 计 算 机 在 执 行 某 一 程 序 的过 程 中 , 由 于 计 算 机 系 统 内 、 外 的 某 种原 因 , 而 必 须 中 止 原 程 序 的 执 行 , 转 去 执行 相 应 的 处 理 程 序 , 待 处 理 结 束 之 后 , 再回 来 继 续 执 行 被 中 止 的 原 程 序 的 过 程 。 采 用 了 中 断 技 术 后 的 计 算 机 , 可 以 解 决CPU与 外 设 之 间 速 度 匹 配 的 问 题 , 使 计 算机 可 以 及 时 处 理 系 统 中 许 多 随 机 的 参 数和 信 息 , 同 时 , 它 也 提 高 了 计 算 机 处 理 故障 与 应 变 的 能 力 。“ 中 断 ” 与 “ 查 询 ” 相 比 : 执 行 效 率 实 时 性 2. 中 断 源 中 断 源 是 指 在 计 算 机 系 统 中 可 以 向CPU发 出 中 断 请 求 的 来 源 。 通 常 有 I/O设 备 、 实 时 控 制 系 统 中 的 随 机 参 数 和 信息 故 障 源 等 。 3. 中 断 优 先 级 中 断 优 先 级 越 高 , 则 响 应 优 先 权 就 越 高 。 当CPU正 在 执 行 中 断 服 务 程 序 时 , 又 有 中 断 优 先 级 更高 的 中 断 申 请 产 生 , 这 时 CPU就 会 暂 停 当 前 的 中 断服 务 转 而 处 理 高 级 中 断 申 请 , 待 高 级 中 断 处 理 程 序完 毕 再 返 回 原 中 断 程 序 断 点 处 继 续 执 行 , 这 一 过 程称 为 “ 中 断 嵌 套 ” 。 4. 中 断 响 应 的 一 般 过 程 (1) 在 每 条 指 令 结 束 后 , 系 统 都 自 动 检 测 中 断请 求 信 号 , 如 果 有 中 断 请 求 , 且 CPU处 于 开 中断 状 态 下 , 则 响 应 中 断 。 (2) 保 护 现 场 , 在 保 护 现 场 前 , 一 般 要 关 中 断 , 以 防 止 现 场 被 破 坏 。 保 护 现 场 一 般 是 用 堆 栈 指令 将 原 程 序 中 用 到 的 寄 存 器 推 入 堆 栈 。 (3) 中 断 服 务 , 即 为 相 应 的 中 断 源 服 务 。 (4) 恢 复 现 场 , 用 堆 栈 指 令 将 保 护 在 堆 栈中 的 数 据 弹 出 来 , 在 恢 复 现 场 前 要 关 中 断 , 以 防 止 现 场 被 破 坏 。 在 恢 复 现 场 后 应 及 时开 中 断 。 (5) 返 回 , 此 时 CPU将 推 入 到 堆 栈 的 断 点地 址 弹 回 到 程 序 计 数 器 , 从 而 使 CPU继 续 执行 刚 才 被 中 断 的 程 序 。 5.2 MCS - 51中 断 系 统图 5.1 MCS - 51中 断 系 统 结 构 框 图 5.2.1 中 断 源 表 5.1 8051 中 断 源 中 断 标 志 ( Flag)IE0: 外 部 中 断 0中 断 标 志TF0: 定 时 器 /计 数 器 0中 断 标 志IE1: 外 部 中 断 1中 断 标 志TF1: 定 时 器 /计 数 器 1中 断 标 志TI: 串 行 口 发 送 中 断 标 志RI: 串 行 口 接 收 中 断 标 志 1. 定 时 器 控 制 寄 存 器 TCON的 格 式 ( 88H ) TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0(MSB) (LSB)IT0: 外 部 中 断 0触 发 方 式 选 择 位 0:低 电 平 触 发 1: 负 跳 变 触 发IE0: 外 部 中 断 0中 断 请 求 标 志IT1、 IE1 类 似 IT0、 IE0TR0: 定 时 /计 数 器 0运 行 控 制 位 0:停 止 1:运 行TF1: 定 时 /计 数 器 0中 断 请 求 标 志 位TR1、 TF1 类 似 TR0、 TF0 2. 特 殊 功 能 寄 存 器 SCON的 格 式 ( 98H) SM0和 SM1: 串 行 口 工 作 方 式 选 择 位SM2: 多 机 通 信 使 能 位REN: 接 收 允 许 位TB8: 发 送 数 据 位 8RB8: 接 收 数 据 位 8TI: 串 行 口 发 送 中 断 请 求 标 志RI: 串 行 口 接 收 中 断 请 求 标 志 SM0 SM1 SM2 REN TB0 RB0 TI RIMSB LSB 5.2.2 中 断 控 制 1. 中 断 允 许 控 制 MCS - 51单 片 机 有 5个 ( 8052有 6个 ) 中 断 源 , 为了 使 每 个 中 断 源 都 能 独 立 地 被 允 许 或 禁 止 , 以 便 用 户能 灵 活 使 用 , CPU内 部 在 每 个 中 断 信 号 的 通 道 中 设 置了 一 个 中 断 允 许 触 发 器 , 它 控 制 CPU能 否 响 应 中 断 。只 有 对 应 的 中 断 允 许 触 发 器 被 使 能 ( 置 “ 1”) , 相 应的 中 断 才 能 得 到 相 应 。 EX0: 外 部 中 断 0允 许 位ET0: 定 时 器 /计 数 器 0中 断 允 许 位EX1: 外 部 中 断 1允 许 位ET1: 定 时 器 /计 数 器 1中 断 允 许 位ES : 串 行 口 中 断 允 许 位EA : 中 断 总 允 许 位EA ES ET1 EX1 ET0 EX0(MSB) (LSB)中 断 允 许 控 制 寄 存 器 IE ( 0A8H) 2. 中 断 优 先 级 控 制 寄 存 器 IP( 0B8H) PS PT1 PX1 PT0 PX0(MSB) (LSB)PX0: 外 部 中 断 0允 许 位PT0: 定 时 器 /计 数 器 0中 断 允 许 位PX1: 外 部 中 断 1允 许 位PT1: 定 时 器 /计 数 器 1中 断 允 许 位PS : 串 行 口 中 断 允 许 位 当 两 个 以 上 的 中 断 源 同 时 提 出 申 请 时 ,CPU到 底 相 应 哪 个 中 断 呢 ? 中 断 响 应 遵 循 两 条 规 则 : ( 1) 低 优 先 级 中 断 可 以 被 高 优 先 级 中 断 所中 断 , 反 之 不 能 ; ( 2) 一 种 中 断 ( 不 论 哪 个 优 先 级 ) 一 旦 得到 响 应 , 与 它 同 级 的 中 断 不 能 再 中 断 它 。 表 5.2 同 级 内 第 二 优 先 级 次 序 当 同 时 收 到 处 于 同 一 优 先 级 的 多 个 中 断请 求 时 , 哪 一 个 中 断 能 得 到 响 应 , 取 决 于“ 内 部 查 询 次 序 ” , 相 当 于 在 每 个 优 先 级 中 ,还 有 一 个 “ 内 部 优 先 级 ” , 如 下 表 所 示 : 例 如 , 某 软 件 中 对 寄 存 器 IE、 IP设 置 如 下 : MOV IE, 8FH MOV IP, 06H 则 此 时 该 系 统 中 : CPU中 断 允 许 ; 允 许 外 部 中 断 0、 外 部 中 断 1、 定 时 器 /计 数 器 0、 定 时 器 /计 数 器 1提 出 的 中 断 申 请 ; 允 许 中 断 源 的 中 断 优 先 次 序 为 : 定 时 器 /计 数 器 0外 部 中 断 1外 部 中 断 0定 时 器 /计 数器 1。 5.2.3 中 断 响 应The interrupt request flags are sampled in each machine cycle. The sampled flags are polled during the following machine cycle. If one of the flags was in a set condition in the preceding cycle, the polling cycle will find it and the interrupt controller will cause the CPU to branch to the vector address of the appropriate service routine by generating an internal LCALL. 中 断 标 志 检 测 与 响 应 过 程 5.2.3.1 中 断 响 应 的 阻 断 条 件 在 EA 1且 相 应 的 中 断 允 许 位 也 为 1的 情 况 下 ,检 测 到 的 最 高 级 的 中 断 请 求 将 会 得 到 相 应 。 但 此 时如 果 发 生 下 列 三 种 情 况 中 的 任 何 一 种 , 中 断 响 应 的过 程 将 被 阻 断 :( 1) 同 级 或 高 优 先 级 的 中 断 已 在 进 行 中 ; ( 2) 当 前 的 机 器 周 期 还 不 是 正 在 执 行 指 令 的 最 后一 个 机 器 周 期 ( 换 言 之 , 正 在 执 行 的 指 令 完 成 前 , 任何 中 断 请 求 都 得 不 到 响 应 ) ; ( 3) 正 在 执 行 的 是 一 条 RETI 或 者 访 问 特 殊 功 能寄 存 器 IE或 IP的 指 令 ( 换 言 之 , 在 RETI或 读 写 IE或 IP之 后 , 不 会 马 上 响 应 中 断 请 求 , 而 至 少 执 行一 条 其 它 指 令 之 后 才 会 响 应 ) 。 当 上 述 阻 断 条 件 存 在 时 , 中 断 不 能被 相 应 , 且 丢 弃 查 询 结 果 。 若 阻 断 条 件 结束 时 , 中 断 标 志 已 经 消 失 , 则 这 个 被 拖 延了 的 中 断 请 求 可 能 不 会 再 得 到 响 应 。 在 单 一 外 部 中 断 的 系 统 里 ( 即 不 考 虑上 述 阻 断 条 件 中 断 的 第 一 个 条 件 ) , 外 部中 断 响 应 时 间 总 是 在 38个 机 器 周 期 之 间 。 2. 单 片 机 一 旦 响 应 中 断 请 求 , 由 硬 件 完 成 以 下 功 能 : (1) 根 据 响 应 的 中 断 源 的 中 断 优 先 级 , 使 相 应 的 优 先 级 状态 触 发 器 置 1; (2) 执 行 硬 件 中 断 服 务 子 程 序 调 用 , 并 把 当 前 程 序 计 数器 PC的 内 容 压 入 堆 栈 ; (3) 清 除 相 应 的 中 断 请 求 标 志 位 ( 串 行 口 中 断 请 求 标志 RI和 TI除 外 ) ; (4) 把 被 响 应 的 中 断 源 所 对 应 的 中 断 服 务 程 序 的 入 口地 址 ( 中 断 矢 量 ) 送 入 PC, 从 而 转 入 相 应 的 中 断 服 务 程 序 。 中 断 响 应 过 程 , 相 当 于 执 行 了 一 条 隐含 的 调 用 指 令 ( 或 称 隐 指 令 ) LCALL。 例 如 当 TF0被 置 1且 得 到 中 断 响 应 时 ,CPU就 自 动 的 执 行 一 条 隐 指 令 “ LCALL 000BH”。 应 当 注 意 , 在 中 断 服 务 子 程 序 的 调 用过 程 中 , 仅 仅 保 存 了 PC的 信 息 , 其 余 的 现场 信 息 ( 如 寄 存 器 的 值 等 ) 都 要 由 编 程 人员 通 过 软 件 来 进 行 保 护 。 表 5.3 中 断 服 务 程 序 入 口 地 址 表 例 如 , 现 有 外 部 中 断 1 提 出 申 请 , 且 主 程 序 中 有R0、 R1、 DPTR、 累 加 器 A需 保 护 , 则 编 制 程 序 应为 : ORG 0000H AJMP MAIN ORG 0013H LJMP INT1 ORG 0100H MAIN: ; 主 程 序 ORG 1000H INT1: PUSH ACC ; 中 断 服 务 程 序 PUSH DPH ; 若 有 更 高 级 中 断 , PUSH DPL ; 应 先 关 闭 EA PUSH R0 ; 待 现 场 保 护 完 成 后 PUSH R1 ; 再 打 开 EA POP R1 ; 恢 复 现 场 时 相 同 POP R0 POP DPL POP DPH POP ACC RETI 编 程 中 应 注 意 : (1) 在 0000H放 一 条 跳 转 到 主 程 序 的 跳 转 指 令 , 这 是 因 为 MCS-51单 片 机 复 位 后 , PC的 内 容 变 为 0000H, 程 序 从 0000H 开 始 执 行 , 紧 接 着 0003H是 中 断 程 序 入 口 地 址 , 故 在 此 中 间 只 能插 入 一 条 转 移 指 令 ; (2) 响 应 中 断 时 , 先 自 动 执 行 一 条 隐 指 令 “ LCALL 0013H”, 而 0013H至 001BH( 定 时 器 1 溢 出 中 断 入 口 地 址 ) 之间 可 利 用 的 存 储 单 元 不 够 , 故 放 一 条 无 条 件 转 移 指 令 。 (3) 在 中 断 服 务 程 序 的 末 尾 , 必 须 安 排 一 条 中 断 返 回 指 令RETI, 使 程 序 自 动 返 回 主 程 序 。 5.3 中 断 系 统 的 应 用 例 1 单 步 操 作 的 中 断 实 现 。 把 一 个 外 部 中 断 ( 设 为 INT0) 设 置 为 电 平 激 活 方 式 。其 中 断 服 务 程 序 的 末 尾 写 上 如 下 几 条 指 令 : JNB P3.2, $ ; 在 INT0变 高 前 , 原 地 等 待 (死 循 环 ) JB P3.2, $; 在 INT0变 低 前 , 原 地 等 待 (死 循 环 ) RETI ; 返 回 并 执 行 一 条 指 令 现 在 ,若 INT0保 持 低 电 平 , 且 允 许 INT0中 断 , 则 CPU就 进入 外 部 中 断 0 服 务 程 序 , 由 于 有 上 述 几 条 指 令 , 它 就 会 停 在 JNB处 , 原 地 等 待 。 当 INT0 端 出 现 一 个 正 脉 冲 ( 由 低 到 高 , 再 到 低 ) 时 , 程 序 就 会 往 下 执 行 , 执 行 RETI后 , 将 返 回 主 程 序 , 往 下 执 行 一 条 指 令 , 然 后 又 立 即 响 应 中 断 ,以 等 待 INT0端 出 现的 下 一 个 正 脉 冲 。 这 样 在 INT0端 每 出 现 一 个 正 脉 冲 , 主 程 序就 执 行 一 条 指 令 , 实 现 了 单 步 执 行 的 目 的 , 要 注 意 的 是 , 这 个正 脉 冲 的 高 电 平 持 续 时 间 不 小 于 2 个 周 期 , 以 确 保 CPU能 采集 到 高 电 平 值 。 例 2 多 中 断 源 。 MCS - 51 单 片 机 有 两 个 外 部 中 断 输 入 端 , 当 有 2 个 以 上 中 断 源 时 , 它 的 中 断 输 入 端 就 不 够 了 。 此 时 , 可 以 将 定 时 器 /计 数 器 作 为 外 部 中 断 源 使 用 , 也 可 以采 用 中 断 与 查 询 相 结 合 的 方 法 来 实 现 。 可 以 使 每 个中 断 源 都 接 在 同 一 个 外 部 中 断 输 入 端 上 , 同 时 利 用输 入 口 线 作 为 多 中 断 源 情 况 下 各 中 断 源 的 识 别 线 。 图 5.6 多 中 断 源 ORG 0003H LJMP INT0INT0: PUSH PSW PUSH ACC JB P0.7, DV1 JB P0.6, DV2 JB P0.5, DV3 JB P0.4, DV4GOBACK: POP ACC POP PSW RETI DV1: ; 装 置 1中 断 服 务 程 序 AJMP GOBACKDV2: ; 装 置 2中 断 服 务 程 序 AJMP GOBACKDV3: ; 装 置 3中 断 服 务 程 序 AJMP GOBACKDV4: ; 装 置 4中 断 服 务 程 序 AJMP GOBACK
展开阅读全文