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; 本案将用一个小灯的工作状况来展示看门…...
探索 paraphrase-MiniLM-L6-v2 模型在自然语言处理中的应用
在自然语言处理(NLP)领域,将文本数据转换为机器学习模型可以处理的格式是至关重要的。近年来,sentence-transformers 库因其在文本嵌入方面的卓越表现而受到广泛关注。本文将深入探讨 paraphrase-MiniLM-L6-v2 模型,这…...
2025最新软件测试面试大全(附答案+文档)
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库里…...
Java语法进阶
目录: Object类、常用APICollection、泛型List、Set、数据结构、CollectionsMap与斗地主案例异常、线程线程、同步等待与唤醒案例、线程池、Lambda表达式File类、递归字节流、字符流缓冲流、转换流、序列化流、Files网络编程 十二、函数式接口Stream流、方法引用 一…...
UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK
UNI-MOL: A UNIVERSAL 3D MOLECULAR REPRESENTATION LEARNING FRAMEWORK Neurips23 推荐指数:#paper/⭐⭐⭐#(工作量不小) 动机 在大多数分子表征学习方法中,分子被视为 1D 顺序标记或2D 拓扑图,这限制了它们为下游任务整合…...
笔记day7
文章目录 1 分页功能实现2 分页器的展示需要哪些数据(条件)?3 自定义分页器4 分页器存在问题5 分页器动态展示6 开发某一个商品的详情页面 1 分页功能实现 为什么很多项目采用分页功能,比如电商平台同时展示的数据有很多…...
106,【6】 buuctf web [SUCTF 2019]CheckIn
进入靶场 文件上传 老规矩,桌面有啥传啥 过滤了<? 寻找不含<?的一句话木马 文件名 123(2).php.jpg 文件内容 GIF89a? <script language"php">eval($_GET[123]);</script> 123即密码,可凭借个人喜好更换 再上传一个文…...
基于Ubuntu2404搭建Zabbix7.2
Zabbix 搭建zabbix zabbix7.2已推出:官网 增加的新功能如下: 1.使用新的热门商品小部件全面概览指标 数据概览小部件已转换为热门项目小部件使用项目模式可以实现细粒度的项目选择利用条形图、指标和迷你图来可视化您的数据定义价值阈值以动态地可视化…...
OPENGLPG第九版学习 - 着色器基础
文章目录 2.1 着色器与OpenGL2.2 0penGL的可编程管线2.3 OpenGL着色语言GLSL概述2.3.1 使用GLSL构建着色器变量的声明变量的作用域变量的初始化构造函数 、 类型转换聚合类型访问向量和矩阵中的元素结构体数组多维数组 2.3.2 存储限制符const 存储限制符in 存储限制符out 存储限…...
Android 使用ExpandableListView时,需要注意哪些细节
1. 布局属性设置 尺寸属性 宽度和高度:要合理设置 android:layout_width 和 android:layout_height 属性。如果设置为 match_parent,它会填满父容器;设置为 wrap_content,则会根据内容自动调整大小。例如,若想让 Exp…...
redis简介及应用
文章目录 1.redis简介2.安装配置2.1 单机部署2.2 配置 3 主从部署4 哨兵部署5.集群部署6.客户端工具 1.redis简介 某些网站出现的问题,如12306、淘宝等… 2.安装配置 2.1 单机部署 安装gcc、关闭防火墙、关闭selinux等 #安装gcc yum -y install gcc #关闭防火墙…...
Electron使用WebAssembly实现CRC-8 MAXIM校验
Electron使用WebAssembly实现CRC-8 MAXIM校验 将C/C语言代码,经由WebAssembly编译为库函数,可以在JS语言环境进行调用。这里介绍在Electron工具环境使用WebAssembly调用CRC-8 MAXIM格式校验的方式。 CRC-8 MAXIM校验函数WebAssembly源文件 C语言实现C…...
人工智能赋能企业系统架构设计:以ERP与CRM系统为例
一、引言 1.1 研究背景与意义 在数字化时代,信息技术飞速发展,人工智能(Artificial Intelligence, AI)作为一项具有变革性的技术,正深刻地影响着各个领域。近年来,AI 在技术上取得了显著突破,…...
NacosRce到docker逃逸实战
NacosRce到docker逃逸实战 1、Nacos Derby Rce打入内存马 这个漏洞的原理大家应该都知道, 2.3.2 < Nacos < 2.4.0版本默认derby接口未授权访问,攻击者可利用未授权访问执行SQL语句加载构造恶意的JAR包导致出现远程代码执行漏洞。 在日常的漏洞挖…...
Linux:文件系统(软硬链接)
目录 inode ext2文件系统 Block Group 超级块(Super Block) GDT(Group Descriptor Table) 块位图(Block Bitmap) inode位图(Inode Bitmap) i节点表(inode Tabl…...
在Spring Cloud中将Redis共用到Common模块
前言 在分布式系统中,共用组件的设计可以极大地提升代码复用性和维护性。Spring Cloud中将Redis共用到一个公共模块(common模块)是一个常见的设计实践,这样可以让多个微服务共享相同的Redis配置和操作逻辑。本文将详细介绍如何在…...
如何解决 Vue 应用中的内存泄漏
如何解决 Vue 应用中的内存泄漏 如何解决 Vue 应用中的内存泄漏常见的内存泄漏原因1. 组件生命周期管理不善2. 闭包引起的引用3. 数据订阅与发布系统4. 第三方库的内存泄漏5. 路由缓存和组件实例堆积排查内存泄漏的工具1. **Chrome DevTools**2. **Firefox Developer Tools**3.…...
什么是物理地址,什么是虚拟地址?
摘要 什么是物理地址,什么是虚拟地址? 如果处理器没有MMU或未启用,CPU执行单元发出的内存地址直接传到芯片引脚上,被内存芯片接受,这称为物理地址(Physical Addraress) 如果处理器启用了MMU&a…...
find 和 filter 都是 JavaScript 数组的常用方法
find 和 filter 都是 JavaScript 数组的常用方法,用来查找符合条件的元素,但它们有一些关键的区别: 1. find 方法 返回值:find 方法返回数组中 第一个符合条件的元素,如果没有找到符合条件的元素,返回 un…...
MVC、MVP和MVVM模式
MVC模式中,视图和模型之间直接交互,而MVP模式下,视图与模型通过Presenter进行通信,MVVM则采用双向绑定,减少手动同步视图和模型的工作。每种模式都有其优缺点,适合不同规模和类型的项目。 ### MVVM 与 MVP…...
[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?
🧠 智能合约中的数据是如何在区块链中保持一致的? 为什么所有区块链节点都能得出相同结果?合约调用这么复杂,状态真能保持一致吗?本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里…...
MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
智能仓储的未来:自动化、AI与数据分析如何重塑物流中心
当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南
1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...
Pinocchio 库详解及其在足式机器人上的应用
Pinocchio 库详解及其在足式机器人上的应用 Pinocchio (Pinocchio is not only a nose) 是一个开源的 C 库,专门用于快速计算机器人模型的正向运动学、逆向运动学、雅可比矩阵、动力学和动力学导数。它主要关注效率和准确性,并提供了一个通用的框架&…...
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement
Cilium动手实验室: 精通之旅---13.Cilium LoadBalancer IPAM and L2 Service Announcement 1. LAB环境2. L2公告策略2.1 部署Death Star2.2 访问服务2.3 部署L2公告策略2.4 服务宣告 3. 可视化 ARP 流量3.1 部署新服务3.2 准备可视化3.3 再次请求 4. 自动IPAM4.1 IPAM Pool4.2 …...
spring Security对RBAC及其ABAC的支持使用
RBAC (基于角色的访问控制) RBAC (Role-Based Access Control) 是 Spring Security 中最常用的权限模型,它将权限分配给角色,再将角色分配给用户。 RBAC 核心实现 1. 数据库设计 users roles permissions ------- ------…...
从零开始了解数据采集(二十八)——制造业数字孪生
近年来,我国的工业领域正经历一场前所未有的数字化变革,从“双碳目标”到工业互联网平台的推广,国家政策和市场需求共同推动了制造业的升级。在这场变革中,数字孪生技术成为备受关注的关键工具,它不仅让企业“看见”设…...
