单片机的看门狗
ST单片机:独立看门狗和窗口看门狗
ST单片机:独立看门狗和窗口看门狗
STM32单片机中有两只看门狗,分别是独立看门狗和窗口看门狗。
这两只看门狗有什么区别,今天来看一下。
1. 时钟源的区别
▪独立看门狗使用的是内部低速时钟,其频率为40kHz,但是这个40KHz不是准确的,其大致的范围是(30-60)KHz。
该时钟与外设时钟无关,所以不受系统晶振影响。
▪窗口看门狗使用的是PCLK1的时钟,该时钟与晶振相关。
2. 喂狗时间不同
▪独立看门狗喂狗时只要下限大于0就可以,上限是0XFFF。
而窗口看门狗必须在一个区域内喂狗才可以,上限是0x7F,下限是0X40,
3. 计数器不同
▪独立看门狗的计数器是12位递减的,即最大值是0XFFF;
▪窗口看门狗的计数器是7位递减的,即最大值是0X7F;
4. 产生结果不同
▪独立看门狗时,如果超时不喂狗,则直接产生复位,程序从头执行;
▪独立看门狗会在计数器到达0X40时产生中断,在0X3F时产生复位,所以可以把独立看门狗看成是一种中断。
使用用途举例
▪独立看门狗可以用来防止程序跑飞,在程序中开启看门狗,定时喂狗,尤其在通讯中使用广泛,当逻辑处理不当,使程序一直处于发送或接收状态不退出时,这时独立看门狗可以使程序复位,程序从头执行。
▪窗口看门狗可以产生中断,利用这一特点可以用来进行数据保存,当产生窗口看门狗中断时,可以用来保存数据。
单片机看门狗的描述
单片机看门狗的描述下面是关于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)了就使单片机软复位;当启动了【看门狗计数器】之后,我们需要在它计数没有满之前复位计数器强制。
单片机的看门狗
引言概述:
单片机的看门狗(二)是在第一篇文章中讨论的单片机看门狗的延伸,本文将深入探讨单片机看门狗的使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面的内容。
单片机看门狗是一种重要的硬件设备,在系统稳定性和可靠性方面起到关键作用,因此了解和掌握单片机看门狗的相关知识是非常有必要的。
正文内容:
一、单片机看门狗的使用场景
1.1实时系统
1.2长时间运行的设备
1.3类似于操作系统的应用
二、单片机看门狗的工作原理
2.1看门狗定时器
2.2看门狗计数器
2.3看门狗复位信号
三、单片机看门狗的设置参数
3.1看门狗定时器的预分频和计数器
3.2看门狗复位信号的触发条件
3.3看门狗溢出时间的设置
四、单片机看门狗的使用注意事项
4.1错误的看门狗设置
4.2看门狗溢出时间过短
4.3看门狗溢出时间过长
五、单片机看门狗的常见问题及解决方法
5.1看门狗复位问题
5.2看门狗延时问题
5.3看门狗定时器设置问题
总结:
单片机看门狗是一项重要的硬件设备,它在保证系统稳定性和可靠性方面起到关键作用。
本文从使用场景、工作原理、设置参数、使用注意事项以及常见问题等方面深入探讨了单片机看门狗的相关知识。
在实际应用中,我们应该根据具体情况,合理设置单片机看门狗的参数,避免错误的配置导致系统异常。
同时,我们也要注意单片机看门狗的溢出时间,不要设置过短或过长,以免影响系统的正常运行。
通过深入了解和掌握单片机看门狗的相关知识,我们可以更好地应用它,提高系统的稳定性和可靠性。
AVR单片机看门狗实验报告2013v1(有不同)
void watchdog_off(void)
{ /* Write logical one to WDTOE and WDE
这里严格要求这样的顺序*/
WDTCR = (1<<WDTOE) | (1<<WDE); /* Turn off WDT 这里严格要求这样的顺序*/
WDTCR = 0x00;
}
void Delay(void) { unsigned char i,j; for(i=200;i>0;i--)
{ for(j=100;j>0;j--); WDR(); //这里喂狗不然超过时间了
BIT 2、1、0 这三位设置看门狗溢出的间隔,在设置好的时间内不喂狗,就重启。
二、 具体例子(基于 ICCAVR7.22)
A、 打开和配置看门狗为最大时间间隔 2.2s void watchdog_on(void) { WDTCR |=(1<<WDE)|(1<<WDP2)|(1<<WDP1)|(1<<WDP0); }
{ } }
4.2 加入看门狗后
//ICC-AVR application builder : 2013-9-23 9:24:33 // Target : M16 // Crystal: 4.0000Mhz
#include <iom16v.h> #include <macros.h>
void port_init(void) { PORTD = 0x00; DDRD = 0xff; }
单片机看门狗(Watchdog)的工作原理及其应用
单片机看门狗(Watchdog)的工作原理及其应用2010年05月16日星期日 23:00在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环。
程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果。
所以,出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称"看门狗"(watchdog)。
看门狗电路的应用,使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行。
这个时候,看门狗电路就会由于得不到单片机送来的信号。
便在它和单片机复位引脚相连的引脚上送出一个复位信号。
使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
看门狗,又叫 watchdog timer,是一个定时器电路。
一般有一个输入,叫喂狗(kicking the dog or service the dog),一个输出到MCU的RST端,MCU 正常工作的时候,每隔一端时间输出一个信号到喂狗端,给 WDT 清零。
如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个复位信号到MCU,是MCU复位,防止MCU死机。
看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
工作原理:在系统运行以后也就启动了看门狗的计数器,看门狗就开始自动计数,如果到了一定的时间还不去清看门狗,那么看门狗计数器就会溢出从而引起看门狗中断,造成系统复位。
所以,在使用有看门狗的芯片时要注意清看门狗。
51单片机的看门狗
“看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。
单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。
其各位的定义如表4.2.1所示。
表1看门狗定时器寄存器(WDT_CONTR)EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。
STC系列单片机看门狗
其中N是单片机的时钟周期,STC89C5X系列单 片机提供6时钟周期和12时钟周期两种时钟周 期,可以在烧写程序时修改;
Prescale是预分频数,通过设置【看门狗控制 寄存器】可以设置为2、4、8、16、32、64、 128、256;怎么设置演示程序中有介绍;
次,用于判断系统是否重启
i=0;
while(str[i]!='\];
while(TI==0);
TI=0;
i++;
}
//while大循环
while(true)
{
//约每隔800ms喂一次狗,可以通过调整这里的喂
狗时间来验证看门狗是否有效
//我们设置的看门狗约1秒。所以可以用800和2000
{
//初始化时两盏灯都熄灭
LED=1;
LED_busy=1;
TMOD=0x21;
//定时器0工作在方式1,作
为16位定时器;定时器1工作在方式2,作为串行口波特率发生器
TH0=0x4C;
50ms溢出一次
//定时器0装初值:每隔
TL0=0x00;
IE=0x82;
时器0中断
//IE=(1000 0010)B, 使能定
TR0=1;
//启动定时器0
}
//串行口初始化程序
void InitCOM()
{
SCON=0x50;
//SCON=(0101
0000)B,波特率不加倍,允许接收
MSP430单片机看门狗的使用
MSP430单片机看门狗的使用
1、看门狗有三种工作模式:停止模式,计时器模式,看门狗模式。
2、其中后两种模式可以选择的时钟源有:SMCLK 和ACLK。
3、使用后两种模式时要注意单片机所处的状态下看门狗能否工作,如单片
机处在LPM3 时只有ACLK 时钟,处在LPM4 下,没有时钟可以使用。
4、看门狗模式的使用方法
当看门狗计数溢出时,程序复位。
在程序中开启看门狗,在计数溢出前清空看门狗,或重置看门狗,以使其重新计数。
若程序跑飞,看门狗可能没有被清空或重置,就会溢出,使程序复位。
5、MSP430F2274 中,看门狗模式下可以计时最长为1s,若需要以更长的时间复位,可采取的方法,使用其他计数器,计数满后执行((void(*)())
RESET_VECTOR)();或计数满后往看门狗控制寄存器写个错误值或执行一条无效命令:如((void(*)())0x170)();0x170 是外围模块的一个地址,不可能是一个函数地址,所以执行此句将使程序复位。
6、看门狗的具体使用
6.1、停止模式:关闭看门狗
C 语言实现:WDTCTL = WDTPW + WDTHOLD
6.2、计时器模式:作为一个计时器使用,计数器满产生中断时执行看门狗中断函数。
C 语言实现:
主程序中开启看门狗计时器,如:WDTCTL = WDT_MDLY_8;
看门狗中断函数为:
#pragmavector=WDT_VECTOR。
单片机汇编语言实现看门狗
CS=0; if(bRegion==0) //write the page addr else 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 busy CS=0; if(bRegion==0) else WriteByte(cAddress); cData=ReadByte(); CS=1; return cData; } main() { WriteReg(0x00);//set the watchdog time as 1.4s CS=1; CS=0; } //reset the watchdog
SCK=0; SCK=1; ucData<<=1; } } uchar ReadReg() { uchar ucData; CS=0; WriteByte(RDSR); ucData=ReadByte(); CS=1; return ucData; } uchar WriteReg(uchar ucData) { uchar ucTemp; ucTemp=ReadReg(); if((ucTemp&0x01)==1) //the device is busy return 0; CS=0; WriteByte(WREN);//when write the WREN, the cs must have a high level CS=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 busy CS=0; WriteByte(WREN); //when write the wren , the cs must have a high level CS=1; //write register //read register
51单片机的看门狗
“看门狗”概念及其应用在由单片机构成的系统中,由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称“看门狗”(watch dog)。
加入看门狗电路的目的是使单片机可以在无人状态下实现连续工作,其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接单片机来实现,不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
看门狗定时器寄存器(WDT_CONTR)STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址,该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。
单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。
其各位的定义如表4.2.1所示。
表1看门狗定时器寄存器(WDT_CONTR)EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。
单片机看门狗
单片机看门狗简介单片机看门狗(Watchdog Timer,简称WDT),是一种常见于嵌入式系统中的硬件设备,用于监控系统的运行状态并在出现故障时采取相应措施。
该设备在单片机的内部,通过定时器和逻辑电路实现对系统的监控,一旦系统停止响应或发生意外情况,看门狗会自动执行预定义的操作,如复位系统等。
工作原理单片机看门狗的工作原理是基于定时器和逻辑电路的组合。
在系统正常运行时,定时器会周期性地进行倒计时,并通过逻辑电路的判断来确认系统是否正常。
如果系统一直能够及时喂狗(喂狗指的是定时器的计数周期内向看门狗喂入脉冲),看门狗认为系统处于正常状态,并在每次喂狗后重新计时。
如果在设定的时间内没有喂狗,看门狗会判断系统发生故障,进而执行相应的操作,如复位系统。
应用场景单片机看门狗在嵌入式系统中的应用场景非常广泛,特别是对于那些对系统可靠性要求较高的应用。
以下是几种常见的应用场景:1. 实时操作系统(RTOS)在实时操作系统中,单片机看门狗经常被用来监控任务的运行状态。
通过设定适当的看门狗定时器,并在每个任务执行的过程中定时喂狗,可以确保系统在出现任务堵塞或死循环等情况时得以及时恢复。
2. 工业控制系统在工业控制系统中,单片机看门狗常用于监控各个任务的运行状态,并保证系统的稳定性和可靠性。
例如,对于PLC (可编程逻辑控制器)等系统,单片机看门狗能够在检测到系统堵塞或故障时及时进行恢复,避免生产过程中的停机等问题。
3. 汽车电子领域在汽车电子领域,单片机看门狗被广泛应用于汽车电子控制模块(ECM)等关键系统。
通过监控系统的运行状态,单片机看门狗可以在检测到系统故障时进行自动恢复,并确保汽车电子系统的稳定性和可靠性。
优势与注意事项单片机看门狗作为嵌入式系统的重要组件,具有以下优势:1.提高系统可靠性:通过定期检测系统状态并自动执行相应操作,单片机看门狗可以在系统发生故障时迅速恢复系统的正常运行。
2.简化系统设计:单片机看门狗可以作为一个独立的硬件设备存在,与系统的其他部分相互独立,从而简化了系统设计和整合的复杂性。
PIC单片机之看门狗
PIC单片机之看门狗
PIC 单片机之看门狗
看门狗定时器
看门狗定时器(WDT,WatchDogTImer)是单片机的一个组成部分,它实际上是一个计数器,一般给看门狗一个数字,程序开始运行后看门狗开始倒计数。
如果程序运行正常,过一段时间CPU 应发出指令让看门狗复位,重新开始倒计数。
如果看门狗减到0 就认为程序没有正常工作,强制整个系统复位。
工作原理
使用时,WDT 将递增,直到溢出,或称超时。
除非处于休眠或空闲模式,WDT 超时会强制器件复位。
为避免WDT 超时复位,用户必须定期用PWRSAV 或CLRWDT 指令将看门狗定时器清零。
如果WDT 在休眠或空闲模式下超时,器件将唤醒并从PWRSAV 指令执行处继续执行代码。
在上述两种情况下,WDTO 位(RCON《4》)都会置1,表示该器件复位或唤醒事件是由于WDT 超时引起的。
如果WDT 将CPU 从休眠或空闲模式唤醒,休眠状态位(RCON《3》)或空闲状态位(RCON《2》)也会置1,表示器件之前处于省电模式。
关于STC系列单片机的WatchDog使用心得
关于STC系列单片机的WatchDog使用心得WatchDog看门狗程序是一个我们经常会用到的程序。
这里基于自己的理解和查阅相关的资料来对其进行一下说明。
1、为什么要使用看门狗?由于单片机的工作有可能会受到来自外界电磁场的干扰,造成程序的跑飞,从而陷入死循环,程序的正常运行被打断,由单片机控制的系统便无法继续工作,这样会造成整个系统陷入停滞状态,发生不可预料的后果。
2、看门狗的大体原理(自己理解的)经过使用看门狗后,我说一下我对对看门狗的理解。
看门狗其实就类似一个计数器,启动看门狗后,它就开始自己计数,如果计数到了一个值或时间(这个可以自己设定)它就会溢出,溢出同时它就会给系统一个复位信号,这时系统程序就会从头开始运行。
为了不让看门狗的值溢出,我们需要在程序运行中喂狗(也就是手动把看门狗的计数值清零)确保它不会溢出。
如果你的程序中用了延时函数那请注意一下延时时间的设置不要和看门狗的溢出时间冲突了,这个我就不细说了需要大家动手练习才更容易理解。
最后在补充一句。
其实溢出的同时看门狗的溢出标志位也会置一,如果你设置了看门狗相关的中断,它就会进入中断程序。
(进入中断程序后别忘了手动清除看门狗的溢出标志位)3、看门狗的使用(基于STC15W204S单片机、Keil 5环境、C语言)在这里只给出整个程序的一部分,为了讲解使用。
void main(void){UART1_Init(); //这时串口1的初始化函数EA = 1; //开启总中断SendString("Ready! \r\n"); //通过串口1向计算机发送一个字符串WDT_CONTR = 0x36; //这一句里包含了启动看门狗、清零看门狗、设置其为128分频while(1){/*------------喂狗,也就是清零看门狗计数器------------*/WDT_CONTR = 0x36; //这一句里包含了启动看门狗、清零看门狗、设置其为128分频}}上图为STC官方手册截图通过STC-ISP程序烧写代码,这里要注意红框部分,选择自己的分频数(这里为128)下面开始说明上面代码,很简单。
单片机看门狗电路的作用,看门狗系统设计技巧及其抗干扰措施
单片机看门狗电路的作用,看门狗系统设计技巧及其抗干扰措施在由单片机构成的微型计算机系统中,由于单片机的工作常常会受到来自外界电磁场的干扰,造成程序的跑飞,而陷入死循环,程序的正常运行被打断,由单片机控制的系统无法继续工作,会造成整个系统的陷入停滞状态,发生不可预料的后果,所以出于对单片机运行状态进行实时监测的考虑,便产生了一种专门用于监测单片机程序运行状态的芯片,俗称看门狗(watchdog)其作用是使单片机可以在无人状态下实现连续工作,其工作原理是:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过程序控制它定时地往看门狗的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,写看门狗引脚的程序便不能被执行,这个时候,看门狗电路就会由于得不到单片机送来的信号,便在它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,即程序从程序存储器的起始位置开始执行,这样便实现了单片机的自动复位。
单片机看门狗电路的作用看门狗的作用:看门狗定时器是一个计数器,基本功能是在发生软件问题和程序跑飞后使系统重新启动。
看门狗计数器正常工作时自动计数,程序流程定期将其复位清零,如果系统在某处卡死或跑飞,该定时器将溢出,并将进入中断。
在定时器中断中执行一些复位操作,使系统恢复正常的工作状态,即在程序没有正常运行期间,如期复位看门狗以保证所选择的定时溢出归零,使处理器重新启动。
软件的可靠性一直是一个关键问题。
任何使用软件的人都可能会经历计算机死机或程序跑飞的问题,这种情况在嵌入式系统中也同样存在。
由于单片机的抗干扰能力有限,在工业现场的仪器仪表中,常会由于电压不稳、电弧干扰等造成死机。
在水表、电表等无人看守的情况下,也会因系统遭受干扰而无法重启。
为了保证系统在干扰后能自动恢复正常,看门狗定时器(Watchdog TImer)的利用是很有价值的。
单片机看门狗
看门狗定时器WDT是一种需要软件控制的复位方式。
WDT 由13位计数器和特殊功能寄存器中的看门狗定时器复位存储器(WDTRST)构成。
WDT 在默认情况下无法工作;为了激活WDT,户用必须往WDTRST 寄存器(地址:0A6H)中依次写入01EH 和0E1H。
当WDT激活后,晶振工作,WDT在每个机器周期都会增加。
WDT计时周期依赖于外部时钟频率。
除了复位(硬件复位或WDT溢出复位),没有办法停止WDT工作。
当WDT溢出,它将驱动RSR引脚一个高个电平输出。
WDT的使用为了激活WDT,用户必须向WDTRST寄存器(地址为0A6H的SFR)依次写入0E1H 和0E1H。
当WDT激活后,用户必须向WDTRST写入01EH和0E1H喂狗来避免WDT溢出。
当计数达到8191(1FFFH)时,13 位计数器将会溢出,这将会复位器件。
晶振正常工作、WDT激活后,每一个机器周期WDT 都会增加。
为了复位WDT,用户必须向WDTRST 写入01EH 和0E1H(WDTRST 是只读寄存器)。
WDT 计数器不能读或写。
当WDT 计数器溢出时,将给RST 引脚产生一个复位脉冲输出,这个复位脉冲持续96个晶振周期(TOSC),其中TOSC=1/FOSC。
为了很好地使用WDT,应该在一定时间内周期性写入那部分代码,以避免WDT复位。
掉电和空闲方式下的WDT在掉电模式下,晶振停止工作,这意味这WDT也停止了工作。
在这种方式下,用户不必喂狗。
有两种方式可以离开掉电模式:硬件复位或通过一个激活的外部中断。
通过硬件复位退出掉电模式后,用户就应该给WDT 喂狗,就如同通常AT89S52 复位一样。
通过中断退出掉电模式的情形有很大的不同。
中断应持续拉低很长一段时间,使得晶振AT89S5210稳定。
当中断拉高后,执行中断服务程序。
为了防止WDT在中断保持低电平的时候复位器件,WDT 直到中断拉低后才开始工作。
这就意味着WDT 应该在中断服务程序中复位。
利用单片机内部定时器实现软件看门狗
利用单片机内部定时器实现软件看门狗利用单片机内部定时器实现软件看门狗勤镐工控(05/09/04)软件看门狗(WATCH DOG)也叫做程序运行监视系统。
当程序运行受到干扰,程序飞到一个临时构成的死循环中时,系统将完全瘫痪,软件陷阱也无能为力了,这时就需要人工复位或硬件复位;如果没有人工操作和硬件复位系统,我们采用软件看门狗技术同样也能使系统复位,恢复正常。
这种程序监视系统就好比主人家养了一条狗,主人总要定时喂狗,如果主人忘了喂狗(程序受到干扰,跑飞掉了),狗就会大叫起来,提醒主人(程序重新运行)。
软件看门狗的特性如下:1、本身独立工作,基本上不依赖CPU;2、CPU在一个固定的时间间隔内和系统打一次交道(喂一次狗),以表明系统目前工作正常。
3、当CPU陷入死循环后,能及时发觉并使系统复位。
当系统陷入死循环后,怎样才能从死循环中跳出来呢?只有比这个死循环更高级的中断程序才能夺走CPU的控制权。
为此,可以用一个定时器来做软件看门狗,因为定时器在运行时不占用CPU资源,它是独立工作的,所以,将它的溢出中断设定为最高优先级中断,系统的其它中断均设为比它低级的中断优先级。
然后根据看门狗的定时时间来设定定时器初值。
软件看门狗启动后,系统工作程序必须经常“喂它”,且每两次之间的间隔不得大于定时器的定时时间。
程序中只要设立一个设置定时器初值的子程序,喂它时只要调用这个子程序即可。
当程序陷入死循环后,定时器溢出,产生高优先级中断,从而跳出死循环。
我们还可以在定时器中断服务程序中放置一条LJMP ERR 指令,即可使程序转向出错处理程序;由出错程序来完成以后的工作,并用软件的方法使系统复位。
以下是一个用定时/计数器T0作软件看门狗的完整程序:ORG 0000HAJMP MAINORG 000BHLJMP ERR MAIN :MOV SP , #60HMOV PSW , #00HMOV SCON , #00HMOV TMOD , #01H ;设置T0为16位定时器SETB ET0 ;允许T0中断SETB PT0 ;设置T0中断为高级中断MOV TL0, #00H ;设定T0的定时初值,定时时间约为16ms(6M 晶振)MOV TH0, #0B0HSETB EA ;开中断SETB TR0 ;启动T0 LOOP:...... ;主程序开始LCALL WATCH DOG ;调用喂狗子程序......LJMP LOOP WATCHDOG:MOV TL0, #00H ;喂狗子程序MOV TH0, #0B0HSETB TR0RET ERR:POP ACC ;定时器中断POP ACC ;看门狗软件复位程序CLR APUSH ACCPUSH ACC RETI在程序中,由于执行了中断服务程序后,PC 的指针已经指向0000H ,从而实现了软件复位的目的。
STM32F103系列单片机最实用看门狗的详细资料概述
STM32F103系列单片机最实用看门狗的详细资料概述为什么使用看门狗事情很简单先前做的一款采集数据的产品不知道为何异常,陷入死循环然后“死机”,分析了很多次,没发现原因,但是每次重新上点后就能正常采集到数据。
后来找到了解决方法:看门狗!目的是当程序走入死循环或者硬件异常时,可以自动复位,这样就可以得到跟重新上电后差不多的效果了。
使用的平台:stm32f103系列单片机使用的烧写调试模式:Jlink SWD 模式。
使用STM32官方模板库。
ST系列单片机看门狗分为两种:1.独立看门狗,2.窗口看门狗。
独立看门狗:可参看RM(reference Manual)的Independent watchdog (IWDG)当然,只是简要查看下RM中的介绍(至于寄存器的操作,我们可以略过,因为我们使用库的开发,但是基本流程一定要了解!)。
在这里我们要抓住几个关键点:a、stm32f10x系列有两个看门狗,看门狗主要用于检测由于软件出错的问题,并触发系统自动复位,或者触发一个中断(窗口看门狗才有)。
b、独立看门狗的时钟源为LSI,尽管主时钟出错,它还是能保持激活状态。
窗口看门狗的时钟源为APB1时钟,并且可以修改分频值。
c、独立看门狗:有独立时钟(内部低速时钟LSI),所以不受系统硬件影响的系统故障探测器。
主要用于监视硬件错误。
精确度要求比较低。
d、窗口看门狗:时钟与系统相同。
如果系统时钟不走了,这个狗也就失去作用了,主要用于监视软件错误。
精确度要求更高。
看门狗原理简介:有某个寄存器按照时钟源不断的递减(有只狗,不断的消耗能量),当该。
单片机实践-IAP15W4K58S4单片机的看门狗定时器
11 看门狗定时器作用
单片机的“看门狗定时器”遵循同样的基本方法。如果每隔一定间隔不刷新定时 器,它将溢出,定时器溢出将复位系统。即使经过仔细规划和设计,单片机系统也可 能由于出乎意外的问题而程序跑飞或者“死机”,这种看门狗就是用来处理此类情况 。看门狗可用于在特定的情况下从这种状态恢复。
2 看门狗定时器寄存器
(1)看门狗控制寄存器WDT_CONTR(Watch Dog Timer Control Register)
寄存器
地址
B7
B6
B5
B4
B3
B2 B1 B0
WDT_CONTR C1H WDT_FLAG — EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
WDT溢出时间(ms)
IAP15W4K58S4单片 机的看门狗定时器
CONTENTS
看门狗定时器作用 看门狗定时器寄存器 看门狗定时器应用
11 看门狗定时器作用
假设有一只饥饿的狗正在看守着一所房子,而有人要闯入。如果这个强盗的同谋 以2分钟的间隔不停地向看门的狗扔肉块,那么这只狗将忙于吃食物而忽视保卫工作 ,因此将不会吠叫。然后,如果同谋扔完了或由于其它原因忘记喂狗,狗将开始吠叫 ,从而惊动邻居、房屋的主人。
39.3 78.6 157.3 314.6 629.1 1250 2500 5000
2 看门狗定时器寄存器
(1)看门狗控制寄存器WDT_CONTR(Watch Dog Timer Control Register)
寄存器
地址
B7
B6
B5
B4
B3
B2 B1 B0
WDT_CONTR C1H WDT_FLAG — EN_WDT CLR_WDT IDLE_WDT PS2 PS1 PS0
STM32单片机中的独立看门狗与窗口看门狗有哪些不同之处
STM32单片机中的独立看门狗与窗口看门狗有哪些不同之处
STM32 单片机中的独立看门狗与窗口看门狗有哪些
不同之处
1.关于看门狗的解释不再说明,窗口看门狗简而言之即只能看某个窗口期即某段时间内才能够喂狗。
32 的独立看门狗是没有中断的,而窗口看门狗可根据需要配置中断
2.关于独立看门狗和窗口看门狗的应用,手册p316 即17.1 节讲的非常清楚。
首先独立看门狗和窗口看门狗都可用来监视软件程序是否正常运行,而
具体而言,因为独立看门狗独立于系统时钟单独运行,因此其可用来监视是
否发生了硬件错误,比如说系统时钟故障,看门狗仍然能够起到重启的作
用,但是独立看门狗的计时精度比较差,更多的应用在独立系统运行之外的
对计时要求低的地方。
而窗口看门狗是由系统时钟提供的,因此其计时也会
很准确,当然其也就只能用来检测软件故障,比如硬件故障系统时钟坏了,
自身也就不动了,也就没有检测硬件故障的作用,因此窗口看门狗是用在检
测应用软件是否准确运行时使用的。
当然我们用系统情况下其实完全可以不使用32 提供的看门狗,我们自己某个任务的一个变量即实现看门狗的功能了。
3.另外注意,看门狗只是解决软件异常,独立看门狗称为硬件看门狗是其。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//延时函数,11.0592MHz晶振下延时约xms毫 秒 void delay_ms(unsigned xms) { unsigned x,y; for(x=xms; x>0; x--) for(y=110; y>0; y--); }
//主程序初始化函数 void InitMain() { //初始化时两盏灯都熄灭 LED=1; LED_busy=1; TMOD=0x21; //定时器0工作在方式1,作 为16位定时器;定时器1工作在方式2,作为串行口波特率发生器 TH0=0x4C; //定时器0装初值:每隔 50ms溢出一次 TL0=0x00; IE=0x82; //IE=(1000 0010)B, 使能定 时器0中断 TR0=1; //启动定时器0 }
举个例子说:8051 单片机选用12MHz晶振, 一个时钟周期为1us,如果“看门狗计数器” 是16位的,最大计数65536个,那么从0开始 计到65535需要约65ms,所以我们可以在程序 的50ms左右清零一次计数器(“喂狗”), 让他重新从0开始计,再过50ms,再清,……, 这样下去只要程序正常运行,计数器永远不会 计满,也就永远不会被“看门狗”复位。
单片机的看门狗
-S51及STC89系列
为什么要看门狗?
你家的看门狗是做什么的?
“看门狗定时器”是这样一种东西,从功能上 说它可以让微控制器在意外状况下(比如软件 陷入死循环或跑飞)重新回复到系统上电状态, 以保证系统出问题的时候重启一次。
就跟我们现在用电脑一样,死机了你就按一下 reset键重启一次电脑,看门狗就是负责干这个 事儿的。它是52单片机增加的一个功能,以前 Intel 8031、……、AT 89C51时代单片机片内 都没有“看门狗”功能,需要我们外扩看门狗 芯片,比如X5045。
S51的看门狗
AT89S52单片机看门狗定时器是14位的,最大 计数214=16384个数,每计16384个时钟周期 就溢出一次。也就是说如果使用12M晶振的话, 至少应该在16.384ms内喂一次狗。
STC89
STC89C5X系列单片机由于采用了“预分频技 术”,它的溢出时间是=(N*Prescale*32768)/ 晶振频率 (不要问我为什么,他们就是这么设计的,我 们就这么用就行)。
/定时器0中断服务程序程序,控制信号灯闪烁。如果系统正常运行,信号灯1.5秒 闪一次 void Timer0_isr() interrupt 1 { TH0=0x4C; TL0=0x00; timer0_ctr++; if(timer0_ctr>=30) { TR0=0; timer0_ctr=0; LED=0; delay_ms(100); LED=1; TR0=1; }
其中N是单片机的时钟周期,STC89C5X系列单 片机提供6时钟周期和12时钟周期两种时钟周 期,可以在烧写程序时修改; Prescale是预分频数,通过设置【看门狗控制 寄存器】可以设置为2、4、8、16、32、64、 128、256;怎么设置演示程序中有介绍; 晶振频率就是系统选用的晶振。
STC看门狗应用举例
STC89C52最小单片机系统+两个指示灯
串行口接口(用于下载程序和测试本次试验
关于实验的注意事项: 1. 本次试验使用的是11.0592MHz晶振,设置 WDT_CONTR=(0011 0100)B,32预分频,单片机使 用12指令周期模式。 计算看门狗溢出时间: [12*32*32768/(11059200)]≈1s。 2. 本次试验的硬件电路很简单,就是最小系统上增 加两个LED灯,原理图见正文,用户可以很容易实现。 ****************************************** *********************************/
//串行口初始化程序 void InitCOM() { SCON=0x50; //SCON=(0101 0000)B,波特率不加倍,允许接收 TH1=0xFD; //设置波特率 =9600bps TL1=TH1; TR1=1; //启动定时器1 }
//while大循环 while(true) { //约每隔800ms喂一次狗,可以通过调整这里的喂 狗时间来验证看门狗是否有效 //我们设置的看门狗约1秒。所以可以用800和2000 分别做一次试验,看是否会被看门狗复位 delay_ms(800); LED_busy=0; //第一次上电约延时 800ms工作灯点亮,如果系统不重启,他将一直亮着,用于指 示系统是否重启 WEIGOU; } }
“看门狗”就是一个计数器,由于位数有限计 数器能够装的数值是有限的(比如8位的最多装 256个数、16位的最多装65536个数),从开 启“看门狗”那刻起,它就开始不停的数机器 周期,数一个机器周期就计数器加1,加到计 数器盛不下了(术语叫溢出)就就产生一个复 位信号,重启系统。
注解:
这里顺便说一下,一般教材上叫“看门狗定时 器”,其实定时器原理还是计数器,只是计的 是时钟周期,所以我为了初学者好理解叫统一 叫“计数器”,这里阐明一下。
所以如果同样选择12MHz晶振,使用传统的12 时钟周期,它最小的溢出时间是 (12*2*32768)/(12*106)=65.536ms,最大 溢出时间是(12*256*32768) /(12*106)≈8.38s。如果选择256分频,也就是 说只要在8.38秒之内喂一次狗就可以了。
对于我们用户来说,看门狗的时间是越长越好, 这样可以节省更多的单片机资源,尤其是对时 间要求精准的系统,如果执行过程中我们不停 地“喂狗”,那么是比较浪费时间的。所以 STC89C5X系列单片机的看门狗更有优势一些。 当然这个也是个人的选择,如果对时间要求的 不苛刻的话,勤喂几次狗也没关系。
注意事项:
1. 89S51的看门狗必须由程序激活后才开始 工作。所以必须保证CPU有可靠的上电复位。 否则看门狗也无法工作。 2. 看门狗使用的是CPU的晶振。在晶振停振 的时候看门狗也无效。 3. 89S51只有14位计数器。在16383个机器 周期内必须至少喂狗一次。而且这个时间是固 定的,无法更改。当晶振为12M时每16个毫秒 需喂狗一次。
//定时器0暂停,否则再次来中断会冲断程序
//定时器0重新启动
}
void main() { WEIGOU; 门狗定时器,并且启动 InitMain(); InitCOM();
//上来第一步设置看
//开机通过串口发送一次“I love MCU!”,使用串口调试助手可以查看 //由于在while大循环外边,所以只要系统不重新启动,则上电后只会发送一 次,用于判断系统是否重启 i=0; while(str[i]!='\0') { SBUF=str[i]; while(TI==0); TI=0; i++; }
看门狗的看门原理
我们在设计程序时,先根据看门狗计数器的位 数和系统的时钟周期算一下计满数需要的时间, 就是说在这个时间内“看门狗”计数器是不会 装满的,然后在这个时间内告诉它重新开始计 数,就是把计数器清零,这个过程叫“喂狗”, 这样隔一段时间喂一次狗,只要程序正常运行 他就永远计不满,一旦出现死循环之类的故障, 没有及时来清零计数器,就会导致装满了溢出, 他就重启系统,这就是
每种单片机的“看门狗”实现方法不尽相同, 但是原理都一样,而且“看门狗”都是启动了 之后就不能被关闭,只能系统复位(重新断电 在上电)才能关闭。
设置“看门狗”的一般步骤如 下:
1. 设置“看门狗”相关寄存器, 启动 “看门狗”; 2. 隔一段时间清零一次,“喂狗”; 3. 如果程序正常,一直运行;如果程序出 错,没有按时“喂狗”,“看门狗”就在溢出 的时候复位系统。
89S51的看门狗应用
在C语言中要增加一个声明语句。 在AT89X51.h声明文件中增加一行 sfr T = 0xA6; 程序代码 sfr WDTRST = 0xA6; main() { WDTRST=0x1E; WDTRST=0xE1;//初始化看门狗。
While (1) { WDTRST=0x1E; WDTRST=0xE1;//喂狗指令 } }
#include <Reg52.H> sfr WDT_CONTR=0xE1; //定义特殊 功能寄存器:STC单片机看门狗控制寄存器 #define uchar unsigned char #define true 1 #define false 0 #define WEIGOU WDT_CONTR=0x34 //看门狗启动设置 和“喂狗”操作 sbit LED=P1^6; //信号灯, 系统正常工作就一闪一闪的 sbit LED_busy=P1^7; //工作灯, 上电灭一会儿(约800ms),然后正常工作的时候一直亮着;用于指示系 统是否重启 uchar timer0_ctr,i; const uchar str[]="I love MCU!"; //定义一句话,让他从串口输出,只 有系统重启的时候才输出一次,所以也是用于验证看门狗有没有重启系统
89S52看门狗使用方法
在ATMEL的89S52系列的89S52与89C51功能相 同。指令兼容。HEX程序无需任何转换可以直 接使用。89S52比89C51增加了一个看门狗功 能。89S52的其它功能可以参见89C52的资料。 看门狗具体使用方法如下: 在程序初始化中向看门狗寄存器 (WDTRST地址是0A6H)中先写入01EH,再 写入0E1H。即可激活看门狗。