找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3705|回复: 1
打印 上一主题 下一主题
收起左侧

51单片机看门狗笔记

[复制链接]
跳转到指定楼层
楼主
本帖最后由 leemo 于 2019-6-8 13:55 编辑

看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被 打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了 一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。

STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器。


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:168250 发表于 2019-6-8 13:45 | 只看该作者
本帖最后由 leemo 于 2019-6-8 13:53 编辑

看门狗定时器寄存器(WDT_CONTR)

STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址, 该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界 面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。

    #include "reg52.h"
    #define uchar unsigned char
    #define uint unsigned int
    sfr WDT_CONTR=0xe1;
    sbit led1=P1^0;

    void delayms(uint x)
    {
        uint i,j;
        for(i=x;i>0;i--)  //i=x 即延时约 x 毫秒
            for(j=110;j>0;j--);
    }

    void main()
    {
         WDT_CONTR=0x35;
         led1=0;
         delayms(500);
         led1=1;
        while(1)
        {
              delayms(1000);
              WDT_CONTR=0x35;
        }
    }

    其中,WDT_CONTR=0x35; //喂狗,由上表可得出,2.2755 s 溢出

如果在溢出时间内没有喂狗,那么将复位,程序从头开始执行。


分析:

    “sfr WDT_CONTR=0xe1;”定义STC单片机中新加入的看门狗寄存器,因为reg52.h头文件中没有对该寄存器的定义,以后要定义其它新的寄存器 时方法相同,当然也可以写在reg52.h头文件中。
    程序开始后,点亮发光二极管后延时约500ms后再熄灭,这里延时不可过长,若两次喂狗之间程序运行的总时间超过看门狗的溢出时间,看门狗将复位单 片机,大家可调节这个延时时间看实际演示效果。
    喂狗时使用和设定看门狗寄存器同样的语句,只要看门狗寄存器中的CLR_WDT位被置1,看门狗定时器将重新计数,CLR_WDT位被置1后,由硬件自动将其清零。
    演示结果表现为发光二极管点亮后,马上熄灭,再不会点亮,这说明程序没有被复位,始终停止在while(1)循环中,看门狗处于被正常喂狗的情况下。


【例】只需把while(1)循环中的“WDT_CONTR=0x35;”这句删掉,演示结果为小灯不停的闪烁,因为有了看门狗的作用,当看门狗定时器溢出时,使单片机复位从头重新执行程序,所以小灯闪烁。

在应用看门狗时,需要在整个大程序的不同位置喂狗,每两次喂狗之间的时间间隔一定不能小于看门狗定时器的溢出时间,否则程序将会不停的复位。



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表