单片机看门狗程序

合集下载

【单片机】CH32V103C8T6——窗口看门狗

【单片机】CH32V103C8T6——窗口看门狗

【单⽚机】CH32V103C8T6——窗⼝看门狗本章教程通过串⼝调试助⼿打印显⽰程序运⾏状态,具体现象如下:若计数器值在上窗⼝值和下窗⼝值0X40之间的时候,进⾏喂狗操作,计数器重新计数,程序正常运⾏,串⼝打印显⽰:The program runs normally;若程序在快要减到0X3F时候通过中断函数进⾏喂狗操作,则串⼝打印显⽰:Execute interrupt function The program runs normally;若程序没有在窗⼝时间内进⾏喂狗操作,则程序会不停进⾏复位。

1、WWDG简介及相关函数介绍窗⼝看门狗(WWDG)通常⽤来监测系统运⾏的软件故障,例如外部⼲扰、不可预见的逻辑错误等情况。

其需要在⼀个特定的窗⼝时间(有上下限)内进⾏计数器刷新(喂狗),否则早于或者晚于这个窗⼝时间看门狗电路都会产⽣系统复位。

CH32V103的窗⼝看门狗具有可编程的7位⾃减型计数器;具有双条件复位,当计数器值⼩于0X40,或者计数器值在窗⼝时间外被重装载;具有唤醒提前通知功能(EWI),⽤于及时喂狗动作防⽌系统复位。

CH32V103的窗⼝看门狗运⾏基于⼀个可编程的7 位的⾃减型计数器,其挂载在 APB1 总线下,计数时基 WWDG_CLK 来源(PCLK1/4096)时钟的分频,分频系数在配置寄存器 WWDG_CFGR 中的 WDGTB[1:0]域设置。

递减计数器处于⾃由运⾏状态,⽆论看门狗功能是否开启,计数器⼀直循环递减计数。

关于CH32V103窗⼝看门狗具体信息,可参考CH32V103应⽤⼿册。

本章教程通过调⽤窗⼝看门狗库函数中相关函数进⾏程序编写,关于库函数相关介绍如下:void WWDG_DeInit(void);void WWDG_SetPrescaler(uint32_t WWDG_Prescaler);void WWDG_SetWindowValue(uint8_t WindowValue);void WWDG_EnableIT(void);void WWDG_SetCounter(uint8_t Counter);void WWDG_Enable(uint8_t Counter);FlagStatus WWDG_GetFlagStatus(void);void WWDG_ClearFlag(void);1.1、void WWDG_DeInit(void)功能:将WWDG外围寄存器初始化为其默认重置值输⼊:⽆1.2、void WWDG_SetPrescaler(uint32_t WWDG_Prescaler)功能:设置WWDG预分频器输⼊:WWDG_预分频器:指定WWDG预分频器。

第十二章 STM32单片机看门狗编程及其应用

第十二章 STM32单片机看门狗编程及其应用

• 在WWDG中断服务程序中,不应该重装递减计数器,而是让应 用程序在发生复位前,安排一些紧急处理的任务:保存一些 重要数据和状态参数、或做系统刹车等操作。
工程素质和技能归纳
• 复习C语言中的函数指针内容,掌握其在嵌入式系统中的应 用。 • 理解看门狗的作用,掌握STM32单片机独立看门狗的工作机 制、配置流程和方法。 • 掌握STM32单片机窗口看门狗的工作机制、配置流程和方 法,以及注意事项。
STM32单片机窗口看门狗编程
• 窗口看门狗( Window Watchdog,WWDG),通常用来检 测由外部干扰或不可预见的逻辑条件造成的应用程序背离正 常运行序列而产生的软件故障。WWDG从APB1时钟分频后 得到的时钟驱动,通过可配置的时间窗口来检测应用程序非 正常的过迟或过早的操作。
独立看门狗与窗口看门狗的区别
机器人辅助32位单片机课程
第十二章 STM32单片机看门狗编程及其应用
华中科技大学控制科学与工程系 深圳市中科鸥鹏智能科技有限公司 彭刚
摘要
• 看门狗介绍 • STM32单片机独立看门狗编程
任务一 任务二 独立看门狗编程 认识系统节编程
任务三 窗口看门狗编程
任务一 独立看门狗编程
• 利用IWDG进行检测和解决由系统错误引起的故障。 • 例程参考P284:IWDG.c • 当程序正常运行时,每隔30ms会重新装载IWDG计数器。当程 序进入死循环时,计数器递减到0,系统发生复位。当系统检 测到复位后电量LED。
任务一 独立看门狗编程
• 需要注意: • (1)因为独立看门狗使用的是LSI,所以复位与时钟初始化 函数RCC_Configuration中加入:
WWDG“过早”复位
WWDG“过迟”复位和“过早”复位

C51单片机看门狗电路及程序设计方案

C51单片机看门狗电路及程序设计方案

C51单片机看门狗电路及程序设计案院系:信息工程学院年级:2010级电子一班禹豪电子一班训虎电子二班邓启新一、引言在由单片机构成的微型计算机系统中,程序的正常运行常常会因为来自外界的电磁场干扰等原因而被打断,从而造成程序的跑飞,而陷入死循环。

由此导致单片机控制的系统无法继续工作,造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片或程序,俗称"看门狗"(watchdog)(1)看门狗电路基本原理看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连**,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

*此处设计原理实际上为下文中硬件看门狗设计思路。

(2)看门狗电路一般设计式“看门狗”电路一般分为硬件看门狗与软件看门狗两种设计式。

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。

如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。

常用的WDT芯片如MAX813,5045,IMP 813等,价格4~10元不等.软件看门狗技术的原理和硬件看门狗类似,只不过是用软件的法实现(即利用单片机部定时器资源,通过编程模拟硬件看门狗工作式),以51系列为例:因在51单片机中有两个定时器,在利用部定时器资源来对主程序的运行进行监控时。

如何设计STM32单片机独立看门狗程序?

如何设计STM32单片机独立看门狗程序?

如何设计STM32单片机独立看门狗程序?[导读]今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O 引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。

即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

今天要学习的是独立看门狗,看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位。

即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。

1.1独立看门狗简介看门狗定时器 (WDT,Watch Dog Timer)是单片机的组成部分,它实际上是一个计数器,一般给看门狗一个数值,程序开始运行后看门狗开始倒计时。

如果程序运行正常,过一段时间CPU应发出指令让看门狗复位,重新开始计数,也就是所谓的“喂狗”。

如果看门狗减到0就认为程序没有正常工作,强制整个系统复位。

独立看门狗由专用低速时钟(LSI)驱动,计时主时钟发生故障它也仍然有效。

看门狗主要是用于在发生系统软件故障时,将系统复位。

也可以用于将系统从休眠或空闲模式唤醒。

51单片机 c语言看门狗程序怎么写

51单片机 c语言看门狗程序怎么写

51单片机c语言看门狗程序怎么写看门狗在51单片机电路里的作用是防止程序“跑飞”、“死机”后,系统不动作,而采取复位的办法“唤醒”系统。

89S51、89S52系列单片机自带有看门狗功能,片内数据区A6H寄存器具有看门狗功能,使用很简单:#include<reg51.h>...sfr WDTRST = 0xA6;...void main(){WDTRST=0x1E;;//初始化看门狗WDTRST=0xE1;//初始化看门狗for(;;){WDTRST=0x1E;;//喂狗指令WDTRST=0xE1;//喂狗指令}}可见,你只要在程序的大循环体内加一条喂狗指令就行。

但这种看门狗功能有限,不是很可靠的,它依靠晶振工作,一旦晶振不起振,就无效了。

实践中多采用外部看门狗的方法,可以选用的芯片很多:MAX708、MAX813、X25045.....具体编程就要看芯片的参考资料了。

例如:X25045是SPI总线的看门狗芯片,复位端和单片机复位端连接,SPI数据输入你可以选择合适的IO接口。

WREN 0x06 设置写允许位WRDI 0x04 复位写允许位RDSR 0x05 读状态寄存器WRSR 0x01 写状态寄存器READ 0x03/0x0b 读操作时内部EEPROM页地址WRITE 0x02/0x0a 写操作时内部EEPROM页地址#include <reg51.h>sbit CS= P2^7;sbit SO= P2^6;sbit SCK= P2^5;sbit SI= P2^4;#define WREN 0x06 //#define WRDI 0x04 //#define RDSR 0x05 //#define WRSR 0x01 //#define READ0 0x03 //#define READ1 0x0b //#define WRITE0 0x02 //#define WRITE1 0x0a //#define uchar unsigned charuchar ReadByte() //read a byte from device{bit bData;uchar ucLoop;uchar ucData;for(ucLoop=0;ucLoop<8;ucLoop++){SCK=1;SCK=0;bData=SO;ucData<<=1;if(bData){ ucData|=0x01; }}return ucData;}void WriteByte(uchar ucData)//write a byte to device {uchar ucLoop;for(ucLoop=0;ucLoop<8;ucLoop++){if((ucData&0x80)==0) //the MSB send first{SI=0;}else{SI=1;}SCK=0;SCK=1;ucData<<=1;}}uchar ReadReg() //read register{uchar ucData;CS=0;WriteByte(RDSR);CS=1;return ucData;}uchar WriteReg(uchar ucData) //write register{uchar ucTemp;ucTemp=ReadReg();if((ucTemp&0x01)==1) //the device is busyreturn 0;CS=0;WriteByte(WREN);//when write the WREN, the cs must have a high levelCS=1;CS=0;WriteByte(WRSR);WriteByte(ucData);CS=1;return 1;}void WriteEpm(uchar cData,uchar cAddress,bit bRegion)/* 写入一个字节,cData为写入的数,cAddress为写入地址,bRegion为页*/ {while((ReadReg()&0x01)==1); //the device is busyCS=0;WriteByte(WREN); //when write the wren , the cs must have a high levelCS=1;CS=0;if(bRegion==0){ WriteByte(WRITE0);} //write the page addrelse{WriteByte(WRITE1);}WriteByte(cAddress);WriteByte(cData);SCK=0; //CS=1;}uchar ReadEpm(uchar cAddress,bit bRegion)/* 读入一个字节,cAddress为读入地址,bRegion为页*/{uchar cData;while((ReadReg()&0x01)==1);//the device is busyCS=0;if(bRegion==0)else{WriteByte(READ1);}WriteByte(cAddress);cData=ReadByte();CS=1;return cData;}main(){WriteReg(0x00);//set the watchdog time as 1.4sCS=1;CS=0; //reset the watchdog}回复:xuzhimin9514所有的89S系列都带狗,所有的80C系列都不带狗。

8051单片机看门狗原理C语言演示程序(以STC89C52RC单片机为例包含最简单的程序只有三条)

8051单片机看门狗原理C语言演示程序(以STC89C52RC单片机为例包含最简单的程序只有三条)

***************************************************************************/
#include <Reg52.H>
sfr WDT_CONTR=0xE1;
//定义特殊功能寄存器:STC 单片机看门狗控制寄存器
#define uchar unsigned char
//初始化时两盏灯都熄灭 LED=1; LED_busy=1;
TMOD=0x21; 为串行口波特率发生器
TH0=0x4C; TL0=0x00; IE=0x82; TR0=1;
//定时器 0 工作在方式 1,作为 16 位定时器;定时器 1 工作在方式 2,作
//定时器 0 装初值:每隔 50ms 溢出一次
#define true 1
#define false 0
#define WEIGOU WDT_CONTR=0x34
//看门狗启动设置和“喂狗”操作
sbit LED=P1^6; sbit LED_busy=P1^7;
//信号灯,系统正常工作就一闪一闪的 //工作灯,上电灭一会儿(约 800ms),然后正常工作的时
注解:这里顺便说一下,一般教材上叫“看门狗定时器”,其实定时器原理 还是计数器,只是计的是时钟周期,所以我为了初学者好理解叫统一叫“计数 器”,这里阐明一下。
明白了上面的原理,我们在设计程序时,先根据看门狗计数器的位数和系统 的时钟周期算一下计数器计满数需要的时间,就是说在这个时间内“看门狗”计 数器是丌会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,
由于现在 AT89S52 用的很广泛,所以我先说说 ATMEL 的看门狗;再说说本次试验用的 STC89C52RC 的看 门狗;注意两个不一样!!!

单片机看门狗的描述

单片机看门狗的描述

单片机看门狗的描述下面是关于STC89C5XX-51 单片机看门狗的描述WDT_CONTR 位置0xE1; [-] [-] [EN_WDT] [CLR_WDT] [IDLE_WDT] [PS2] [PS1] [PS0]EN_WDT: 看门狗允许位,置1 启动看门狗,看门狗不能自动启动,需要设置该位后启动,一旦启动不能关闭(只能系统重新上电和看门狗复位可以关闭)CLR_WDT: 看门狗计数器清零位,置1 清零看门狗计数器,当计数器开始重新计数,硬件清零该位。

IDLE_WDT: 单片机IDLE 模式看门狗允许位,当IDLE_WDT=1 时,单片机在IDLE 模式(空闲模式)依然启用看门狗PS2~PS0: 看门狗定时器预分频器,下表中Prescale 表示预分频数PS2 PS1 PS0 Prescale0 0 0 20 0 1 40 1 0 80 1 1 161 0 0 321 0 1 641 1 0 1281 1 1256看门狗溢出时间:(N*Prescale*32768)/晶振频率,其中N 表示指令周期数N=12 表示12 时钟周期模式;N=6 表示6 时钟周期模式。

如N=12,晶振频率为12MHz,PS2~PS0 为100 时,溢出时间=(12*32*32768)/12=1048576us,差不多是1s。

例如:给WDT_CONTR 写入0 乘以34,即是激活看门狗,同时预分频数设为32。

喂狗过程也是一样的。

顺便说一下ATMEL-51 单片机的看门狗下面是关于ATMEL-51 单片机看门狗的描述【看门狗计数器】(watchdog timer)是一个14 位的计数器,它以机器周期(晶振频率/12)增加,当计数值计满(16383/0 乘以3FFF)了就使单片机软复位;当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制。

STC单片机看门狗应用

STC单片机看门狗应用

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

加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。

通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,这在我们的单片机教程网http://www.51hei. com以前做过相关的电路介绍。

不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。

看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。

单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
tips:感谢大家的阅读,本文由我司收集整编。仅供参阅!
门狗”WDT的功能;此单片机看门狗由51hei独家提供LISTP=18F458INCLUDE”
P18F458.INC”
DEYHEQU0X20DEYLEQUDEYH+1
ORG0X00GOTOMAINORG0X30
;*************初始化子程序*****************INITIALCLRFTRISD;D口
;************单片机看门狗主程序
****************************MAINNOPCALLINITIAL;系统初始化
MOVLW0X00MOVWFPORTD;D口送00H,发光二极管亮
CALLDELAYMOVLW0XFFMOVWFPORTD;D口送FFH,发光二极管灭
LOOPGOTOLOOP;死循环,等待看门狗复位END
/*主程序*/main(){initial();/*初始化,设定看门狗的相关寄存器*/PORTD=
0X00;/*D口送00H,发光二极管亮*/DELAY();/*给予一定时间的延时*/PORTD
=0XFF;/*D口送FFH,发光二极管灭*/while(1){;}/*死循环,等待看门狗溢出
复位*/}
-------------------汇编语言版本的单片机看门狗程序----------------;此程序实现”看
单片机看门狗程序
/*此程序实现单片机”看门狗”WDT的功能*/
#include”p18f458.h”
unsignedlongi;
/*系统初始化子程序*/voidinitial(){TRISD = 0X00;/*D口设为输出*/}
/*延时子程序*/voue;}
设为输出RETURN
;**************延时子程序
**************************DELAYMOVLW0XFFMOVWFDEYHAGAIN1M
OVLW0XFFMOVWFDEYLAGAIN2DECFSZDEYLGOTOAGAIN2DECFSZDEY
HGOTOAGAIN1NOPRETURN
相关文档
最新文档