一种新的单片机“ 看门狗” 电路软件设计方法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

技 术 与 应 用 文 章 -- 21ic.com为 全 体 电 子 工 程 师 全 力 奉 献 !!
页 码 , 3/4
……
RETI
这 样 , 在 整 个 用 户 程 序 中 只 唯 一 的 一 对 指 令 ( SETB P1.0及 CLR P1.0) 能 使 “ 看 门 狗 ” 定 时器复位。也就是说不会有任何“非法”的指令能使“看门狗”定时器误复位,致使系统已经 “ 死 机 ” 而 “ 看 门 狗 ” 失 效 。 当 然 , 对 对 没 有 中 断 的 用 户 系 统 , 只 需 将 清 零 指 令 ( CLR P1.0) 也插在主程序中就可以了;对于有多种中断的用户系统,如果没有中断嵌套,则清零指令 ( CLR P1.0) 可 以 插 在 任 一 个 中 断 子 程 序 中 , 而 在 主 程 序 中 适 当 加 入 一 些 有 关 中 断 的 冗 余 指 令 ( 如 SETB ET0等 ) , 以 免 因 有 关 中 断 的 特 殊 功 能 寄 存 器 数 据 受 到 干 扰 时 导 致 中 断 功 能 失 效 ; 对 于 有 二 级 中 断 嵌 套 的 用 户 系 统 , 清 零 指 令 ( CLR P1.0) 可 以 插 在 中 断 种 数 比 较 多 的 那 一 级 中 的 任一个中断子程序中,插有“喂狗”指令的那一级中断系统将会受到“看门狗”的保护,而另 一级中断系统如果失效,“看门狗”是“无动于衷”的,这时只能尽量减少这种中断子程序的 执行时间以减少受到干扰的可能性。如果二级中断嵌套系统者受到“看门狗”的保护,就必需 设计一个非常复杂的“看门狗”电路,其“喂狗”指令要由三部分来保证各个部分都能正常工 作 , 需 要 说 明 的 是 , 如 果 主 程 序 运 行 一 次 的 时 间 ( 包 括 可 能 被 中 断 的 时 间 ) 超 过 1.6秒 , 则 要 适 当 再 插 入 一 条 SETB P1.0指 令 , 而 T0中 断 时 间 间 隔 是 不 能 超 过 1.6秒 的 。
可以修改为
……
0306 74C2 MOV A, #0C2H
0308 0பைடு நூலகம் NOP
0309 901000 MOV DPTR, #1000H
……
mhtml:file://D:\LJW\应 用 文 章 \一 种 新 的 单 片 机 “ 看 门 狗 ” 电 路 软 件 设 计 方 ... 2004-7-11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
mhtml:file://D:\LJW\应 用 文 章 \一 种 新 的 单 片 机 “ 看 门 狗 ” 电 路 软 件 设 计 方 ... 2004-7-11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
1“看门狗”硬件电路简述
现 以 MAX706监 控 电 路 为 例 ( 见 图 1) 来 说 明 “ 看 门 狗 ” 硬 件 电 路 的 工 作 过 程 , 我 们 知 道 , MAX706是 一 种 性 能 优 良 的 低 功 耗 CMOS监 控 电 路 芯 片 , 其 内 部 电 路 由 上 电 复 位 、 可 重 触 发 “ 看 门 狗 ” 定 时 器 及 电 压 比 较 器 等 组 成 [2]。 MAX706只 要 在 1.6秒 时 间 内 检 测 到 WCI引 脚 有 高 低 电 平 跳 变 信 号 , 则 “ 看 门 狗 ” 定 时 器 清 零 并 重 新 开 始 计 时 ; 若 超 出 1.6秒 后 , WCI引 脚 仍 无 高 低 电 平 跳 变 信 号 , 则 “ 看 门 狗 ” 定 时 器 溢 出 , WDO引 脚 输 出 低 电 平 , 进 而 触 发 MR手 动 复 位 引 脚 , 使 MAC706复 位 , 从 而 使 “ 看 门 狗 ” 定 时 器 清 零 并 重 新 开 始 计 时 , WDO引 脚 输 出 高 电 平 , MAX706的 RST复 位 输 出 引 脚 输 出 大 约 200毫 秒 宽 度 的 低 电 平 脉 冲 , 使 单 片 机 控 制 系 统 可 靠 复 位 , 重 新 投 入 正常运行。
在主程序中适当插入“喂狗”指令,大多数场合的单片机系统都能够比较可靠地工作。但 是有一种特殊情况,即中断响应功能已经失效,而主程序仍然能够正常运行,这时“看门狗” 电路对恢复单片机系统正常工作时无能为力的。例如:当程序正在执行中断子程序时,系统突 然 受 到 强 烈 干 扰 , 程 序 跑 飞 , 而 且 PC指 针 刚 好 落 在 主 程 序 的 指 令 字 节 上 , 堆 栈 也 不 溢 出 , 使 主 程序能够继续正常运行。这时“看门狗”的“喂狗”动作正常,而中断再也不法响应了。这时 因 为 在 MCS-51的 中 断 系 统 中 有 两 个 不 可 寻 址 的 优 先 级 状 态 触 发 器 , 分 别 指 标 两 级 中 断 响 应 状 态 。 当 CPU响 应 中 断 时 , 首 先 置 位 相 应 的 优 先 级 状 态 触 发 器 ( 该 触 发 器 能 指 出 CPU正 在 处 理 的 中 断 优 先 级 别 ) , 这 时 会 屏 蔽 掉 同 级 别 的 所 有 中 断 申 请 , 直 到 执 行 RETI指 令 时 , 才 由 CPU硬 件 清 零 该 优 先 级 状 态 触 发 器 , 从 而 使 以 后 的 中 断 请 求 能 被 正 常 地 响 应 [3]。 如 果 响 应 中 断 后 而 不 执 行 RETI指 令 , 那 么 同 级 别 中 断 申 请 就 不 会 被 响 应 了 。
技 术 与 应 用 文 章 -- 21ic.com为 全 体 电 子 工 程 师 全 力 奉 献 !!
另外,为了消除可能的“喂狗”误动作,建议对所应用的用户程序进行彻底仔细的检查, 以 防 程 序 错 乱 时 生 成 多 余 的 SETB P1.0( 指 令 码 D290H) 或 者 CLR P1.0( 指 令 码 C290H) 指 令 。 利 用 通 用 编 程 软 件 ( 如 EDIT) 的 查 找 功 能 可 搜 索 用 户 程 序 在 LST文 件 中 的 “ 90” 字 符 串 , 就 能 方 便 地 找 到 所 有 可 能 的 非 法 “ SETB P1.0或 CLR P1.0” 指 令 , 然 后 用 NOP指 令 将 其 分 离 开 来 就可以了。如
ROM地 址 指 令 码 源 程 序
……
0306 C2 MOV A, #0C2H
0308 901000 MOV DPTR, #1000H
……
B4D290 CJNE A, #0D2H, STEP1
……
0401 B4D290 CJNE A, #0D2H, STEP1
0494 00 STEP1: NOP
……
技 术 与 应 用 文 章 -- 21ic.com为 全 体 电 子 工 程 师 全 力 奉 献 !!
页 码 , 1/4
一种新的单片机“看门狗”电路软件设计方法
摘要:单片机控制系统“看门狗”电路的有效性,除硬件电路的可靠性以外,主要取决于 如 何 正 确 给 “ 看 门 狗 ” 电 路 进 行 复 位 ( 即 “ 喂 狗 ” ) , 文 章 在 介 绍 了 一 种 采 用 MAX706和 89C52 构成的硬件电路的基础上,给出了一种新颖可靠的“看门狗”电路软件设计方法。
关 键 词 : 抗 干 扰 单 片 机 看 门 狗 MAX706 89C52
随 着 MCS-51系 列 单 片 机 的 发 展 , 其 芯 片 价 格 在 不 断 下 降 , 但 同 时 也 带 来 了 单 片 机 芯 片 的 抗 干扰问题,该问题可能导致一些智能型仪器仪表单片机工业控制系统发生“死机”。笔者通过 近几年的设计实践及不断试验,总结了一套可靠的“看门狗”硬件电路及软件设计方法。由于 一些专业期刊曾经刊登过许多关于“看门狗”硬件电路构成的文章,同时也详细的关于“看门 狗 ” 电 路 非 正 常 失 效 故 障 原 因 的 分 析 及 针 对 性 软 件 设 计 技 巧 [1], 本 文 给 出 了 一 个 采 用 MAX706 和 89C52构 成 的 “ 看 门 狗 ” 硬 件 电 路 , 并 且 从 新 的 角 度 说 明 了 如 何 确 保 “ 看 门 狗 ” 电 路 的 正 常 工作,同时给出了它的软件设计方法。
具体做法如下: ORG 0000H LJMP START ORG 000BH LJMP INTT0 …… ORG 0030H START: MOV SP, #30H …… MAIN: NOP NOP SETB P1.0 NOP NOP SETB EA NOP SETB ET0 …… LJMP MAIN …… INTT0: NOP NOP CLR P1.0 NOP NOP
当 然 , 象 上 述 这 种 情 况 是 比 较 少 见 的 。 大 多 数 情 况 下 , 程 序 跑 飞 后 都 会 使 PC指 针 越 出 有 效 程序区,造成“死机”。这时“看门狗”就起作用了。在大多数系统中,中断子程序执行的时 间 占 总 运 行 时 间 的 百 分 比 都 非 常 小 , 而 在 执 行 中 断 程 序 时 , PC指 针 跑 飞 越 过 RETI指 令 , 而 主 程 序又能正常运行的机会就更少。但是如果中断子程序处理数据比较复杂或带有一些函数运算的 功能时,则出现这种系统失常的情况就有可能发生了。以前,在笔者设计的智能流量计中就曾 经出现过这种现象:键盘显示操作都正常,看起来不象“死机”,但是在设定参数时,数据位 该 内 烁 的 不 闪 烁 , 总 流 量 不 会 累 计 上 去 , 显 然 是 T0定 时 中 断 系 统 失 效 , 而 主 程 序 仍 然 在 运 行 , 因为“喂狗”指令插在主程序中。那么,针对这种情形,有没有彻底解决的方法呢?“喂狗”
技 术 与 应 用 文 章 -- 21ic.com为 全 体 电 子 工 程 师 全 力 奉 献 !!
页 码 , 2/4
指令直接插在中断子程序中是不合适的,而单独插在主程序中又显然是不够的。笔者通过仔细 推 敲 后 , 将 “ 喂 狗 ” 指 令 分 解 开 来 , 取 反 指 令 变 成 置 位 和 清 零 两 种 指 令 ( 即 SETB P1.0和 CLR P1.0) , 将 置 位 指 令 插 在 主 程 序 中 , 而 将 清 零 指 令 插 在 T0中 断 子 程 序 中 , 这 样 将 两 者 联 系 起 来 , 缺 一 不 可 , 无 论 主 程 序 运 行 失 效 , 还 是 T0中 断 请 求 失 效 , 都 不 能 完 成 完 整 的 “ 喂 狗 ” 指 令,造成“看门狗”动作,从而确保了系统安全可靠地工作。
mhtml:file://D:\LJW\应 用 文 章 \一 种 新 的 单 片 机 “ 看 门 狗 ” 电 路 软 件 设 计 方 ... 2004-7-11 PDF created with FinePrint pdfFactory trial version http://www.fineprint.com
2“看门狗”电路软件设计方法
以往的“看门狗”电路复位指令(即“喂狗”)一般总 是插入在主程序中,而且“喂狗”指令一般是脉冲式,可以 连 续 用 两 条 取 反 指 令 ( 如 CPL P1.0) 。 这 是 因 为 一 般 情 况 下,程序跑飞或者陷入“死循环”时,中断功能可能不受影 响 , CPU仍 能 象 正 常 运 行 时 一 样 响 应 和 执 行 中 断 子 程 序 。 这 时如果中断子程序中插有“喂狗”指令,则“看门狗”定时器始终处于正常无溢出状态,无法 对已经混乱的微机系统重新启动以投入正常运转状态。
相关文档
最新文档