51单片机看门狗系统
在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器
sfr WDT_CONTR = 0xE1;
本案将用一个小灯的工作状况来展示看门狗工作性质。
首先看下看门狗的工作性质:
在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成各种寄存器和内存的数据混乱,会导致程序指针错误,不在程序区,取出错误的程序指令等,都有可能会陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续正常工作,导致整个系统的陷入停滞状态,发生不可预料的后果。
看门狗,又叫 watchdog,从本质上来说就是一个定时器电路,一般有一个输入和一个输出,其中输入叫做喂狗,输出一般连接到另外一个部分的复位端,一般是连接到单片机。 看门狗的功能是定期的查看芯片内部的情况,一旦发生错误就向芯片发出重启信号。看门狗命令在程序的中断中拥有最高的优先级。(来自百科)
1. 看门狗复位机制
-
内部自动复位
当看门狗超时(计数器溢出)时,芯片内部会自动触发复位信号,直接重启单片机内核和所有外设。-
无需RST引脚动作:复位由内部逻辑完成,不依赖外部RST引脚电平变化。
-
RST引脚状态:复位期间,RST引脚可能保持高电平(需外部上拉电阻维持),但复位动作本身由内部完成。
-
-
2.
WDT_CONTR寄存器的作用 -
功能:
WDT_CONTR是 看门狗控制寄存器,用于配置看门狗定时器(Watchdog Timer, WDT)的工作模式、分频系数和喂狗操作。 -
关键功能位(以 STC89C52 为例):
位 名称 功能描述 5 EN_WDT 看门狗使能位(1=启用,0=关闭) 4 CLR_WDT 喂狗位(写 1 清除计数器) 3 IDLE_WDT 空闲模式看门狗控制(1=计数,0=暂停) 2-0 PS[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只闪了一下好奇怪,不知道为什么。。。。
相关文章:
51单片机看门狗系统
在 STC89C52 单片机中,看门狗控制寄存器的固定地址为 0xE1。此地址由芯片厂商在硬件设计时确定,但是它在头文件中并未给出,因此在使用看门狗系统时需要声明下这个特殊功能寄存器 sfr WDT_CONTR 0xE1; 本案将用一个小灯的工作状况来展示看门…...
RNN/LSTM/GRU 学习笔记
文章目录 RNN/LSTM/GRU一、RNN1、为何引入RNN?2、RNN的基本结构3、各种形式的RNN及其应用4、RNN的缺陷5、如何应对RNN的缺陷?6、BPTT和BP的区别 二、LSTM1、LSTM 简介2、LSTM如何缓解梯度消失与梯度爆炸? 三、GRU四、参考文献 RNN/LSTM/GRU …...
Android记事本App设计开发项目实战教程2025最新版Android Studio
平时上课录了个视频,从新建工程到打包Apk,从头做到尾,没有遗漏任何实现细节,欢迎学过Android基础的同学参加,如果你做过其他终端软件开发,也可以学习,快速上手Android基础开发。 Android记事本课…...
【Leetcode 每日一题 - 补卡】680. 验证回文串 II
问题背景 给你一个字符串 s s s,最多 可以从中删除一个字符。 请你判断 s s s 是否能成为回文字符串:如果能,返回 t r u e true true;否则,返回 f a l s e false false。 数据约束 1 ≤ s . l e n g t h ≤ 1 0 …...
Leetcode 8283 移除排序链表中的重复元素
Leetcode 82&83 移除排序链表中的重复元素 Leetcode 83 题目描述 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。 示例 1: 输入:head [1,1,2] 输出:[1,2] 示…...
【R语言】获取数据
R语言自带2种数据存储格式:*.RData和*.rds。 这两者的区别是:前者既可以存储数据,也可以存储当前工作空间中的所有变量,属于非标准化存储;后者仅用于存储单个R对象,且存储时可以创建标准化档案,…...
为什么在springboot中使用autowired的时候它黄色警告说不建议使用字段注入
byType找到多种实现类导致报错 Autowired: 通过byType 方式进行装配, 找不到或是找到多个,都会抛出异常 我们在单元测试中无法进行字段注入 字段注入通常是 private 修饰的,Spring 容器通过反射为这些字段注入依赖。然而,在单元测试中&…...
Unity游戏(Assault空对地打击)开发(6) 鼠标光标的隐藏
前言 鼠标光标在游戏界面太碍眼了,要隐藏掉。 详细操作 新建一个脚本HideCursor,用于隐藏/取消隐藏光标。 写入以下代码。 意义:游戏开始自动隐藏光标,按Esc(隐藏<-->显示)。 using System.Collectio…...
哪些专业跟FPGA有关?
FPGA产业作为近几年新兴的技术领域,薪资高、待遇好,吸引了大量的求职者。特别是对于毕业生,FPGA领域的岗位需求供不应求。那么,哪些专业和FPGA相关呢? 哪些专业跟FPGA有关? 微电子学与固体电子学、微电子科…...
UE5 蓝图学习计划 - Day 14:搭建基础游戏场景
在上一节中,我们 确定了游戏类型,并完成了 项目搭建、角色蓝图的基础设置(移动)。今天,我们将进一步完善 游戏场景,搭建 地形、墙壁、机关、触发器 等基础元素,并添加角色跳跃功能,为…...
ZooKeeper单节点详细部署流程
ZooKeeper单节点详细部署流程 文章目录 ZooKeeper单节点详细部署流程 一.下载稳定版本**ZooKeeper**二进制安装包二.安装并启动**ZooKeeper**1.安装**ZooKeeper**2.配置并启动**ZooKeeper** ZooKeeper 版本与 JDK 兼容性3.检查启动状态4.配置环境变量 三.可视化工具管理**Zooke…...
Python----Python高级(并发编程:进程Process,多进程,进程间通信,进程同步,进程池)
一、进程Process 拥有自己独立的堆和栈,既不共享堆,也不共享栈,进程由操作系统调度;进程切换需要的资源很最大,效率低。 对于操作系统来说,一个任务就是一个进程(Process)ÿ…...
ComfyUI安装调用DeepSeek——DeepSeek多模态之图形模型安装问题解决(ComfyUI-Janus-Pro)
ComfyUI 的 Janus-Pro 节点,一个统一的多模态理解和生成框架。 试用: https://huggingface.co/spaces/deepseek-ai/Janus-1.3B https://huggingface.co/spaces/deepseek-ai/Janus-Pro-7B https://huggingface.co/spaces/deepseek-ai/JanusFlow-1.3B 安装…...
React中为每个列表项显示多个DOM节点的解决方案
React中为每个列表项显示多个DOM节点的解决方案 问题背景:Fragment的简写形式的限制解决方案:使用显式的<Fragment>组件实现步骤 其他替代方案方法一:使用<div>包裹节点方法二:使用React.createElement创建Fragment 为…...
VoIP中常见术语
在 VoIP(Voice over Internet Protocol,基于互联网协议的语音传输)技术中,涉及许多专业术语。以下是常见术语及其含义: 1. 核心协议相关 SIP(Session Initiation Protocol,会话发起协议…...
LeetCode 0090.子集 II:二进制枚举 / 回溯
【LetMeFly】90.子集 II:二进制枚举 / 回溯 力扣题目链接:https://leetcode.cn/problems/subsets-ii/ 给你一个整数数组 nums ,其中可能包含重复元素,请你返回该数组所有可能的 子集(幂集)。 解集 不能 …...
UE求职Demo开发日志#22 显示人物信息,完善装备的穿脱
1 创建一个人物信息显示的面板,方便测试 简单弄一下: UpdateInfo函数: 就是获取ASC后用属性更新,就不细看了 2 实现思路 在操作目标为装备栏,或者操作起点为装备栏时,交换前先判断能否交换(只…...
利用deepseek参与软件测试 基本架构如何 又该在什么环节接入deepseek
利用DeepSeek参与软件测试,可以考虑以下基本架构和接入环节: ### 基本架构 - **数据层** - **测试数据存储**:用于存放各种测试数据,包括正常输入数据、边界值数据、异常数据等,这些数据可以作为DeepSeek的输入&…...
如何安装PHP依赖库 更新2025.2.3
要在PHP项目中安装依赖,首先需要确保你的系统已经安装了Composer。Composer是PHP的依赖管理工具,它允许你声明项目所需的库,并管理它们。以下是如何安装Composer和在PHP项目中安装依赖的步骤: 一. 安装Composer 对于Windows用户…...
java求职学习day28
XML 1. XML基本介绍 1.1 概述 XML 即可扩展标记语言( Extensible Markup Language ) (1)W3C 在 1998 年 2 月发布 1.0 版本, 2004 年 2 月又发布 1.1 版本,但因为 1.1 版本不能向下兼容 1.0 版本,所以1.1 没有人用。…...
EF Core与ASP.NET Core的集成
目录 分层项目中EF Core的用法 数据库的配置 数据库迁移 步骤汇总 注意: 批量注册上下文 分层项目中EF Core的用法 创建一个.NET类库项目BooksEFCore,放实体等类。NuGet:Microsoft.EntityFrameworkCore.RelationalBooksEFCore中增加实…...
pytorch逻辑回归实现垃圾邮件检测
人工智能例子汇总:AI常见的算法和例子-CSDN博客 完整代码: import torch import torch.nn as nn import torch.optim as optim from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.model_selection import train_test_split …...
2022ACMToG | 寻找快速的去马赛克算法
文章标题:Searching for Fast Demosaicking Algorithms 1. Abstract 本文提出了一种方法,用于在给定损失函数和训练数据的情况下,自动合成高效且高质量的去马赛克算法,涵盖各种计算开销。该方法执行多目标的离散-连续优化&#x…...
渗透测试之文件包含漏洞 超详细的文件包含漏洞文章
目录 说明 通常分为两种类型: 本地文件包含 典型的攻击方式1: 影响: 典型的攻击方式2: 包含路径解释: 日志包含漏洞: 操作原理 包含漏洞读取文件 文件包含漏洞远程代码执行漏洞: 远程文件包含…...
机器学习8-卷积和卷积核1
机器学习8-卷积和卷积核1 卷积与图像去噪卷积的定义与性质定义性质卷积的原理卷积步骤卷积的示例与应用卷积的优缺点优点缺点 总结 高斯卷积核卷积核尺寸的设置依据任务类型考虑数据特性实验与调优 高斯函数标准差的设置依据平滑需求结合卷积核尺寸实际应用场景 总结 图像噪声与…...
Android --- handler详解
handler 理解 handler 是一套Android 消息传递机制,主要用于线程间通信。 tips: binder/socket 用于进程间通信。 参考: Android 进程间通信-CSDN博客 handler 就是主线程在起了一个子线程,子线程运行并生成message ,l…...
DeepSeek:全栈开发者视角下的AI革命者
目录 DeepSeek:全栈开发者视角下的AI革命者 写在前面 一、DeepSeek的诞生与定位 二、DeepSeek技术架构的颠覆性突破 1、解构算力霸权:从MoE架构到内存革命 2、多模态扩展的技术纵深 3、算法范式的升维重构 4、重构AI竞争规则 三、…...
Page Assist - 本地Deepseek模型 Web UI 的安装和使用
Page Assist Page Assist是一个开源的Chrome扩展程序,为本地AI模型提供一个直观的交互界面。通过它可以在任何网页上打开侧边栏或Web UI,与自己的AI模型进行对话,获取智能辅助。这种设计不仅方便了用户随时调用AI的能力,还保护了…...
Spring Boot篇
为什么要用Spring Boot Spring Boot 优点非常多,如: 独立运行 Spring Boot 而且内嵌了各种 servlet 容器,Tomcat、Jetty 等,现在不再需要打成 war 包部署到 容器 中,Spring Boot 只要打成一个可执行的 jar 包就能独…...
基于SpringBoot的在线远程考试系统的设计与实现(源码+SQL脚本+LW+部署讲解等)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
