【MCU】单片机看门狗工作原理


>>返回总目录<<

1 背景

在单片机运行中,可能会遇到电磁场等恶劣环境干扰失控,造成程序进入死循环,程序跑飞(死机)等意外故障,程序的正常运行被打断,系统无法继续运行,陷入停滞状态,发生不可预料的后果。此时可通过按下复位按钮,强制系统复位。但更理想的实现是通过一套监控系统,实时监视MCU运行状态,在运行异常时,使系统摆脱故障状态。看门狗(Watchdog)技术能够解决这一问题。

2 工作原理

看门狗定时器(Watch Dog Timer, WDT)是MCU的一个组成部分,是一个计数器,其基本原理是先给计数器设定一个数值(溢出值),程序开始运行后,看门狗定时器开始计数,程序正常运行时,会周期发出指令将计数器置零(喂狗),重新开始计数,而如果长时间没有清零,计数器增加到设定值(定时器溢出),计数器会认为程序出现了异常,强制系统复位。

3 分类

看门狗又分硬件看门狗和软件看门狗。

  • 硬件看门狗又叫外部看门狗,外部定时器电路的输出连接到电路的复位端,程序周期性的对定时器清零(俗称‘喂狗’)。
  • 软件看门狗(又叫内狗)原理上一样,只是将外部定时器用内部定时器代替,可以简化硬件电路设计,但可靠性差,如内部定时器自身故障就无法检测到系统异常。

4 注意事项

大多数51系列单片机都有看门狗,当看门狗没有被定时清零时,将引起复位。这可防止程序跑飞。设计者必须清楚看门狗的溢出时间以决定在合适的时候,清看门狗。清看门狗也不能太过频繁否则会造成资源浪费。程序正常运行时,软件每隔一定的时间(小于定时器的溢出周期)给定时器置数,即可预防溢出中断而引起的误复位。

5 设计思路

51单片机系统看门狗的设计思路:

  1. 看门狗定时器T0的设置。在初始化程序块中设置T0的工作方式,并开启中断和计数功能。系统晶振频率Fosc = 12MHz,T0为16位计数器,最大计数值为65535,机器周期Tcy = 12 / Fosc = 1μs,即T0输入计数频率1μs,溢出周期为65535μs。
  2. 计算主控程序循环一次的耗时。考虑系统各功能模块及其循环次数,本系统主控制程序的运行时间约为16.6 ms。系统设置"看门狗"定时器T0定时30 ms(T0的初值为65 536-30 000=35 536)。主控程序的每次循环都将刷新T0的初值。如程序进入"死循环"而T0的初值在30 ms内未被刷新,这时"看门狗"定时器T0将溢出并申请中断。
  3. 设计T0溢出所对应的中断服务程序。此子程序只须一条指令,即在T0对应的中断向量地址(000BH)写入"无条件转移"命令,把计算机拖回整个程序的第一行,对单片机重新进行初始化并获得正确的执行顺序。
  • 8
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
ESP8266 NodeMCU可以通过使用内置的看门狗定时器来实现看门狗功能。看门狗是一种硬件或软件机制,用于监视系统的运行状态并在系统停止响应时强制重新启动系统。在ESP8266 NodeMCU中,看门狗可以用于监视程序的运行状态并在程序发生故障时重启设备。 以下是使用ESP8266 NodeMCU看门狗的基本步骤: 1. 启用看门狗定时器 在ESP8266 NodeMCU中,看门狗定时器被称为硬件看门狗(HWDT)。要启用HWDT,需要调用`ESP.wdtEnable()`函数。 2. 配置看门狗定时器 可以通过调用`ESP.wdtDisable()`函数来禁用HWDT并重置其计数器。可以设置看门狗定时器的超时时间,以便在超过该时间时自动重启设备。可以通过调用`ESP.wdtSetTimeout()`函数并传递超时时间(以毫秒为单位)来设置超时时间。例如,如果要将超时时间设置为5秒,则可以使用以下代码: ``` ESP.wdtSetTimeout(5000); ``` 3. 喂狗 在程序运行期间,需要定期向看门狗定时器“喂狗”,防止看门狗定时器超时并重启设备。可以通过调用`ESP.wdtFeed()`函数来喂狗。可以将此函数调用放置在程序的主循环中,以确保每次循环都会喂狗。 4. 禁用看门狗定时器 在程序退出之前,需要禁用看门狗定时器,以防止设备在程序退出之后重启。可以通过调用`ESP.wdtDisable()`函数来禁用HWDT并重置其计数器。 例如,以下是一个使用ESP8266 NodeMCU看门狗的示例代码: ``` void setup() { // 启用看门狗定时器 ESP.wdtEnable(WDTO_8S); } void loop() { // 向看门狗定时器喂狗 ESP.wdtFeed(); // 程序的其他代码 } void exitFunction() { // 禁用看门狗定时器 ESP.wdtDisable(); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

woniudaidai

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值