51单片机看门狗

看门狗

作用:

程序发生死循环的时候(跑飞),能够自动复位。

启动看门狗计数器➡计数器计数➡指定时间内不对计数器赋值(主程序跑飞,无法喂狗)➡溢出,发出复位信号

设置步骤

1、设置“看门狗”相关寄存器, 启动“看门狗”;
2、隔一段时间清零一次,“喂狗”;
3、如果程序正常,一直运行;如果程序出错,没有按时“喂狗”,“看门狗”就在溢出的时候,复位系统。

溢出时间是=(N* Prescale* 32768)/晶振频率

N是单片机的时钟周期

Prescale是预分频数

如:选择12MHz晶振,使用传统的12时钟周期,它最小的溢出时间是(12232768)/(12106)=65.536ms,最大溢出时间是(1225632768)/(12106)≈8.38s。

看门狗寄存器

img

img

[看门狗计数器](watchdog timer)是一个14位的计数器,它以机器周期(晶振频率/12)增加, 当计数值计满(16383/0x3FFF)了就使单片机软复位; 当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制它不能够溢出, 这个过程称作喂狗。 "看门狗"原理: 1. 系统上电并不启动看门狗计数器,通过设置【看门狗重置寄存器(WDTRST SFR)】 启动【看门狗计数器】,一般设置是给WDTRST写入0x1E和0xE1启动; 2. 【看门狗计数器】一旦启动不可停止,除非是硬件RST或者看门狗的软复位才能使其停止; 3. 设计程序在适当的时间喂狗一次,使其不能计满,程序就能不间断执行; 4. 如果程序中出现死循环或者执行某一步超时,看门狗计数器就会计满溢出, (这个时候我们认为程序没有按照预定计划执行–程序跑飞),则复位系统。 本次实验说明: 1. 本次试验使用的是11.0592MHz晶振,设置WDT_CONTR=(0011 0101)B,64预分频, 单片机使用12指令周期模式。计算看门狗溢出时间:[126432768/(11059200)]≈2s。 2. 本次实验,程序复位led会闪烁,程序正常工作时led熄灭,可以通过改变延迟时间看效果

#include <reg52.h> sfr WDT_CONTR=0xe1; sbit led=P1^0; void delayms(unsigned int xms) { unsigned int i,j; for (i=xms;i>0;i--) for(j=110;j>0;j--); } void main() { WDT_CONTR=0x35; led1=0; delayms(500); led1=1; while(1) { delayms(1000); WDT_CONTR=0x35; } }

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

伽男

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

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

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

打赏作者

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

抵扣说明:

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

余额充值