51单片机看门狗系统

在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器

sfr WDT_CONTR = 0xE1;

本案将用一个小灯的工作状况来展示看门狗工作性质。

首先看下看门狗的工作性质:

            在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。

           看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。(来自百科

       

1. 看门狗复位机制

  • 内部自动复位
    当看门狗超时(计数器溢出)时,芯片内部会自动触发复位信号,直接重启单片机内核和所有外设。

    • 无需RST引脚动作:复位由内部逻辑完成,不依赖外部RST引脚电平变化

    • RST引脚状态:复位期间,RST引脚可能保持高电平(需外部上拉电阻维持),但复位动作本身由内部完成。

  • 2. WDT_CONTR 寄存器的作用
  • 功能
    WDT_CONTR 是 看门狗控制寄存器,用于配置看门狗定时器(Watchdog Timer, WDT)的工作模式、分频系数和喂狗操作。

  • 关键功能位(以 STC89C52 为例):

    名称功能描述
    5EN_WDT看门狗使能位(1=启用,0=关闭)
    4CLR_WDT喂狗位(写 1 清除计数器)
    3IDLE_WDT空闲模式看门狗控制(1=计数,0=暂停)
    2-0PS[2:0]分频系数选择位(控制溢出时间)

看门狗寄存器设置:WDT_CONTR = 0x35;   //延时2.27S

4. 为何需要这样设置?
  • 目的
    通过 sfr WDT_CONTR = 0xE1; 将看门狗控制寄存器绑定到 C 语言变量,使得程序员可以通过操作变量直接配置看门狗,例如:

    WDT_CONTR = 0x35; // 二进制 0011 0101

  • 详细配置解析(以 0x35 为例):

    • EN_WDT=1:启用看门狗。

    • CLR_WDT=1:喂狗操作(需周期性执行)。

    • IDLE_WDT=0:空闲模式下看门狗暂停计数。

    • PS[2:0]=101:分频系数为 2^(5+1)=64,决定溢出时间。

    • 2. 计算示例(PS=5, Fosc=11.0592MHz)

      T溢出=12×64×32768/11,059,200≈2.275秒

设计一个简单程序验证下看门狗系统:

#include"reg52.h"
#include "macro_and_const.h"sfr WDT_CONTR = 0xE1;
sbit ENLED = P1^4;     // 使能引脚P1.4   这几个部分是38译码器是笔者硬件电路方面的要求
sbit ADDR0 = P1^0;     // 地址线0
sbit ADDR1 = P1^1;     // 地址线1
sbit ADDR2 = P1^2;     // 地址线2
sbit ADDR3 = P1^3;     // 地址线3(E3使能)sbit led = P0^0;/*******************************************
延时一毫秒函数
*******************************************/
void Timer0_Init() {TMOD |= 0x01;    // 模式1(16位定时器)TH0 = 0xFC;      // 初值,定时1ms(11.0592MHz)TL0 = 0x66;TR0 = 1;         // 启动定时器
}void delay(uint ms) {uint i;for (i = 0; i < ms; i++) {TH0 = 0xFC; TL0 = 0x66; // 重载初值while (!TF0);          // 等待溢出TF0 = 0;               // 清除标志}
}void main(void){Timer0_Init();WDT_CONTR = 0x35;//设置看门狗时间2.27sADDR3 = 1;        // E3=1使能ADDR2 = 1;        // A2=1ADDR1 = 1;        // A1=1ADDR0 = 0;        // A0=0 → Y6有效ENLED = 0;        // E1&E2使能(低电平)led = 0;delay(200);led = 1;	delay(200);  //LED闪烁3下led = 0;	delay(200);led = 1;	delay(200);led = 0;WDT_CONTR = 0x35;	 while(1){led = 0;delay(2000);//延时2sWDT_CONTR = 0x35;	//喂狗}}
/*--------------------------------------------------------------------------
MACROANDCONST.H--------------------------------------------------------------------------*/
#ifndef _MACRO_AND_CONST_H_
#define _MACRO_AND_CONST_H_
/*无符号整形*/
typedef    unsigned int   uint16; 
typedef    unsigned int   UINT; 
typedef    unsigned int   uint; 
typedef    unsigned int   UINT16; 
typedef    unsigned int   WORD; 
typedef    unsigned int   word;/*有符号整形*/
typedef      int        int16; 
typedef      int        INT16; /*无符号长整形*/
typedef    unsigned long    uint32; 
typedef    unsigned long    UINT32; 
typedef    unsigned long    DWORD; 
typedef    unsigned long    dword; /*有符号长整形*/
typedef    long            int32; 
typedef    long            INT32; /*有符号字符形*/
typedef    signed  char     int8;
typedef    signed  char     INT8; /*无符号字整形*/
typedef    unsigned char     boolean; 
typedef    unsigned char     BOOLEAN; 
typedef    unsigned char     uchar;
typedef    unsigned char     UCHAR;
typedef    unsigned char     UINT8; 
typedef    unsigned char     uint8;
typedef    unsigned char     BOOL; 
typedef    unsigned char     bool;/*C51编译器的扩展类型*/
typedef   bit   byte; 
typedef   bit   BYTE;#ifndef EOF#define EOF -1
#endif#ifndef NULL#define NULL ((void *) 0)
#endif#ifndef enable
#define enable 1
#endif#ifndef disable
#define disable 0
#endif#ifndef true
#define true 1
#endif#ifndef false
#define false 0
#endif#endif 

这个是头文件

这个程序的现象是闪3下,然后LED一直点亮,因为看门狗触发的时间是2.27S,延时是2S,及时喂了狗,因此程序一直在while循环里跑。

看一下视频:及时喂狗程序一直运行_哔哩哔哩_bilibili


如果把循环里的延时语句修改一下改成3s即

  while(1){led = 0;delay(3000);//延时3sWDT_CONTR = 0x35;	//喂狗}

延时过长未能及时喂狗,因此单片系统复位了。所以现在的现象是闪烁3下,然后延时2.27S(这时LED灯是常亮的),系统复位后马上又闪烁三下,接着延时2.27S,一直这么循环。

看一下视频:

看门狗溢出一直复位_哔哩哔哩_bilibili

可以看到LED闪烁3下后延迟一段时间又开始闪烁,这个延迟时间就是看门狗设置的时间2.27S。无论这个延时语句是多少秒要超过2.27S,它的延时时间都是保持在2.27S。

不过存在一个问题,复位后LED只闪了一下好奇怪,不知道为什么。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12839.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML排版标签、语义化标签、块级和行内元素详解

目录 前言 一、HTML中的排版标签 1. 文本相关标签 1.1 标题标签 ~ 1.2 段落标签 1.3 强调和加粗 1.4 换行标签 1.5 水平线标签 二、HTML中的语义化标签 2.1 语义化标签概述 2.2 常见的语义化标签 示例&#xff08;核心代码部分&#xff09;&#xff1a; 三、HTM…

20250205——Windows系统基于ollama的DeepSeek-R1本地安装

1、安装ollama 1.1 Windows系统 打开ollama官网链接Download Ollama on Windows&#xff0c;根据自己的系统下载安装包&#xff0c;如果是Windows系统&#xff0c;下载Windows版本。 1.1 Linux系统 &#xff08;这个是因为运行遇到报错了&#xff0c;想自己记录一下解决方法&a…

DeepSeek R1 x ApiSmart

根据美国业界的说法&#xff1a;如果一个模型能够在生成良好代码方面表现更出色&#xff0c;那么通常它也能对非代码生成类型的其他用户查询产生更好的答案。 在AI编程领域&#xff0c;市面上已有多款大模型和工具供我们选择。常见的有OpenAI系列模型、Claude 3.5 Sonnet&#…

解决threeJS加载obj gltf和glb模型后颜色太暗的方法

网上找到的部分解决方法 网上找到的部分解决方法 咱们有时候去glb官方下载glb或gltf模型时候&#xff0c;模型显示太黑 其实通过查找后不难发现网上给出了很多解决方法&#xff0c;但是大部分都无法从根本上解决问题。我之前看到有一篇文章对gltf的解决方法是让gltf增加自发光…

GitHub Copilot 越狱漏洞

研究人员发现了两种操控 GitHub 的人工智能&#xff08;AI&#xff09;编码助手 Copilot 的新方法&#xff0c;这使得人们能够绕过安全限制和订阅费用、训练恶意模型等。 第一种技巧是将聊天交互嵌入 Copilot 代码中&#xff0c;利用 AI 的问答能力&#xff0c;使其产生恶意输…

动态规划练习八(01背包问题)

一、问题介绍与解题心得 01背包问题就是每个物品数量只有一个&#xff0c;每个物品可以取或不取&#xff0c;来达到收益最大&#xff0c;或者收益在某个值。 限制条件&#xff1a;背包容量有限&#xff0c;物品个数只有1个 解决问题&#xff1a;从价值入手&#xff08;价值最…

Java实习生面试题汇总

Java实习生面试题汇总 简介 本人是二本大三学生&#xff0c;下半年大四。暑假在上海这边找实习工作&#xff0c;面了几家公司&#xff0c;所问到的问题记录在下面。 因为是在校生&#xff0c;没任何实习经历&#xff0c;一般找我面试的都是小公司&#xff0c;一般问的比较简…

开源安全一站式构建!开启企业开源治理新篇章

在如今信息技术日新月异、飞速发展的数字化时代&#xff0c;开源技术如同一股强劲的东风&#xff0c;为企业创新注入了源源不断的活力&#xff0c;然而&#xff0c;正如一枚硬币有正反两面&#xff0c;开源技术的广泛应用亦伴随着不容忽视的挑战。安全风险如影随形&#xff0c;…

xxl-job 自定义告警短信发送

官方介绍 代码实现 实现 JobAlarm 重写 doAlarm 方法 Component public class SmsJobAlarm implements JobAlarm {Overridepublic boolean doAlarm(XxlJobInfo info, XxlJobLog jobLog) {boolean alarmResult true;// 简单内容&#xff0c;根据业务自行修改String template …

大数据学习之Spark分布式计算框架RDD、内核进阶

一.RDD 28.RDD_为什么需要RDD 29.RDD_定义 30.RDD_五大特性总述 31.RDD_五大特性1 32.RDD_五大特性2 33.RDD_五大特性3 34.RDD_五大特性4 35.RDD_五大特性5 36.RDD_五大特性总结 37.RDD_创建概述 38.RDD_并行化创建 演示代码&#xff1a; // 获取当前 RDD 的分区数 Since ( …

【分布式架构理论3】分布式调用(2):API 网关分析

文章目录 一、API 网关的作用1. 业务层面&#xff1a;简化调用复杂性2. 系统层面&#xff1a;屏蔽客户端调用差异3. 其他方面&#xff1a; 二、API 网关的技术原理1. 协议转换2. 链式处理3. 异步请求机制1. Zuul1&#xff1a;同步阻塞处理2. Zuul2&#xff1a;异步非阻塞处理 三…

3.【BUUCTF】XSS-Lab1

进入题目页面如下 好好好&#xff0c;提示点击图片&#xff0c;点进去页面如下&#xff0c;且url中有传参&#xff0c;有注入点 发现题目给出了源码 查看得到本题的源码 分析一下代码 <!DOCTYPE html><!--STATUS OK--> <!-- 声明文档类型为 HTML5&#xff0c;告…

uniapp小程序自定义中间凸起样式底部tabbar

我自己写的自定义的tabbar效果图 废话少说咱们直接上代码&#xff0c;一步一步来 第一步&#xff1a; 找到根目录下的 pages.json 文件&#xff0c;在 tabBar 中把 custom 设置为 true&#xff0c;默认值是 false。list 中设置自定义的相关信息&#xff0c; pagePath&#x…

105,【5】buuctf web [BJDCTF2020]Easy MD5

进入靶场 先输入试试回显 输入的值成了password的内容 查看源码&#xff0c;尝试得到信息 什么也没得到 抓包&#xff0c;看看请求与响应里有什么信息 响应里得到信息 hint: select * from admin where passwordmd5($pass,true) 此时需要绕过MD5&#xff08;&#xff09;函…

JVM监控和管理工具

基础故障处理工具 jps jps(JVM Process Status Tool)&#xff1a;Java虚拟机进程状态工具 功能 1&#xff1a;列出正在运行的虚拟机进程 2&#xff1a;显示虚拟机执行主类(main()方法所在的类) 3&#xff1a;显示进程ID(PID&#xff0c;Process Identifier) 命令格式 jps […

【大模型】AI 辅助编程操作实战使用详解

目录 一、前言 二、AI 编程介绍 2.1 AI 编程是什么 2.1.1 为什么需要AI辅助编程 2.2 AI 编程主要特点 2.3 AI编程底层核心技术 2.4 AI 编程核心应用场景 三、AI 代码辅助编程解决方案 3.1 AI 大模型平台 3.1.1 AI大模型平台代码生成优缺点 3.2 AI 编码插件 3.3 AI 编…

机器学习--2.多元线性回归

多元线性回归 1、基本概念 1.1、连续值 1.2、离散值 1.3、简单线性回归 1.4、最优解 1.5、多元线性回归 2、正规方程 2.1、最小二乘法 2.2、多元一次方程举例 2.3、矩阵转置公式与求导公式 2.4、推导正规方程0的解 2.5、凸函数判定 成年人最大的自律就是&#xff1a…

2025最新软件测试面试大全(附答案+文档)

&#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 1、问&#xff1a;你在测试中发现了一个bug&#xff0c;但是开发经理认为这不是一个bug&#xff0c;你应该怎样解决? 首先&#xff0c;将问题提交到缺陷管理库里…

手写MVVM框架-环境搭建

项目使用 webpack 进行进行构建&#xff0c;初始化步骤如下: 1.创建npm项目执行npm init 一直下一步就行 2.安装webpack、webpack-cli、webpack-dev-server&#xff0c;html-webpack-plugin npm i -D webpack webpack-cli webpack-dev-server html-webpack-plugin 3.配置webpac…

如何自定义软件安装路径及Scoop包管理器使用全攻略

如何自定义软件安装路径及Scoop包管理器使用全攻略 一、为什么无法通过WingetUI自定义安装路径&#xff1f; 问题背景&#xff1a; WingetUI是Windows包管理器Winget的图形化工具&#xff0c;但无法直接修改软件的默认安装路径。原因如下&#xff1a; Winget设计限制&#xf…