首页 > 编程知识 正文

看门狗接线图(看门狗复位电路工作原理)

时间:2023-05-03 11:02:12 阅读:75124 作者:3877

视频解说: xxdgkSTM32初级教程_哔哩哔哩_bilibili 看门狗通俗理解:

自转: STC89C5X单片机“看门狗”原理详情-电子学世界

很多人第一次接触就不太了解用法,书上也写得很清楚,故意复杂神秘(可能是现在写书的人的通病,简单的别人怕他没水平)。 说明白色点,“看门狗”是指计数器。 位数有限的计数器中可搭载的数值有限,因此从打开“看门狗”时开始,持续计数机器的周期。 计数机器的周期时,计数器一次增加1,计数器无法接通时,会产生复位信号。 被称为“溢出”

注意:顺便说一下,一般教材都叫“看门狗计时器”,其实计时器的原理还是计数器,只是计算时钟的周期,所以为了让初学者容易理解,统一叫“计数器”。 在这里弄清楚。

在理解以上原理的基础上,我们在设计程序时,首先根据看门狗计数器的位数和系统时钟周期计算完全计数所需的时间。 也就是说,在这个时间内“看门狗”计数器不会满。 然后,计数器清零告诉您在这个时间内恢复计数。 这个过程被称为“喂狗”。 像这样隔一段时间喂狗。 只要程序正常运行,他就永远心怀不满。 如果发生死循环等故障,如果不立即清除计数器,就会溢出,他会重新启动系统。 这就是看门狗的看门原理。 请实际考虑一下。

举个例子,8051单片机选择12MHz晶振,一个时钟周期为1us。 如果“看门狗计数器”为16位,最大计数为65536个,则从0到65535计数需要约65ms,所以在程序的50ms左右清除计数器,说“喂狗”,再一次为0 0.5535 一般不要给得太频繁。 这样做会浪费单片机的运行时间。 例如,如果你在1ms内给一次,就不要给得太频繁。 那样的话,虽然我说65ms给一次,但是边缘太过,抗干扰能力会下降。 你最好留有余地。 这是设计师自己掌握的。 我通常请人计算到90%

虽然每个单片机的“看门狗”实现方法不同,但原理都是一样的,而且“看门狗”都启动后不关机,只有重置(重新开机)系统才能关机设定看门狗的一般步骤如下。

1 .设置"看门狗"相关寄存器,启动"看门狗";

2 .间隔一段时间通关,“喂狗”

3 .如果程序正常,就一直运行; 如果程序错误,不能按时“喂狗”,“看门狗”就会在溢出时重置系统。

值得一提:

现在,AT89S52被广泛使用,所以我们先谈谈ATMEL的看门狗; 另外,谈谈这次试验中使用的STC89C52RC的看门狗; 注意两个不同!

AT89S52单片机的看门狗计时器为14位,最大计数为214=16384个,每16384个时钟周期溢出一次。 也就是说,如果使用12M水晶振动的话,至少应该在16.384ms以内喂一次狗。

由于STC89C5X系列单片机采用“预分频技术”,其溢出时间为=(n*prescale*32768 ) /石英频率(为什么,因为他们是这样设计的)

其中n为单片机时钟周期,STC89C5X系列单片机提供6个时钟周期和12个时钟周期两种时钟周期,烧程序时可以修改; Prescale是预备分频数,通过设定【监视控制寄存器】能够设定为2、4、8、16、32、64、128、256; 对演示程序的设定方法进行说明; 石英振动频率是系统选择的石英振动。 因此,如果同样选择12MHz晶体振荡器并使用传统的12个时钟周期,其最小溢出时间为(12*2*32768 )/(12 106 )=65.536ms,最大溢出时间为) 12 * 开玩笑地说:“这条狗饿了,J~~

对我们的用户来说,看门狗的时间越长越好。 这样可以节省更多的单片机资源。 特别是在要求时间准确的系统中,如果在运行中我们不断地“喂狗”,就会浪费时间。 所以STC89C5X系列单片机看门狗更具优势。 当然这也是个人的选择,但是如果时间不严格的话,多次喂狗也没关系

看门狗,也称为watchdog timer,是计时器电路。 一般情况下,有“喂狗”(kicking the dog/service the dog )输入,输出到MCU的RST端。 MCU正常工作时,每隔一定时间向喂狗方输出信号,清除WDT,防止MCU死机。 看门狗的作用是防止程序死循环或程序飞走。 看门狗命令在程序中断中具有最高的优先级。

这实际上是一个计数器,一般会给看门狗一个数字,程序开始运行后,看门狗就会开始倒计时。 如果程序正常运行,则在一段时间内,CPU必须重置看门狗,并发出指示重新开始倒计时。 如果看门狗减少了的话

到0就认为程序没有正常工作,强制整个系统复位。

看门狗是一个定时器电路,负责在程序跑飞或硬件停滞的情况下对单片机进行复位操作,使程序能从头执行。
工作原理:上面说过,看门狗是一个定时器电路,这个电路有一个输入和一个输出,输入就是喂狗操作(至于什么是喂狗,见下文),所谓喂狗,就是通过外部输入重装载看门狗计数器的值;输出接到另一个电路通常是单片机/MCU的复位端。当看门狗的计数器由初始值递减至0时,输出一个信号到另一个电路的复位端,程序执行复位操作。
使用方法:为监测程序是否跑飞,在程序中隔一段时间执行一次喂狗操作,即在一个完整的程序段中,间隔性的放入多个喂狗操作,如果程序在某个点出错开始跑飞,那下一次的喂狗操作就得不到执行,这样的话,当看门狗的计数器由初始值递减至0时(还是从0递增?,我的理解是递增就是定期置0,递减就定期置T0初值),程序执行复位操作。要注意的是,喂狗的时间间隔,不能太晚,太晚的话,超过了计数器的溢出时间,程序就执行复位操作了,就相当于错误的判断成程序跑飞了。

系统软件"看门狗"的设计思路:

1.看门狗定时器T0的设置。在初始化程序块中设置T0的工作方式,并开启中断和计数功能。系统Fosc=12 MHz,T0为16位计数器,最大计数值为(2的10次方)-1=65 535,T0输入计数频率是.Fosc/12,溢出周期为(65 535+1)/1=65 536(μs)。

2.计算主控程序循环一次的耗时。考虑系统各功能模块及其循环次数,本系统主控制程序的运行时间约为16.6 ms。系统设置"看门狗"定时器T0定时30 ms(T0的初值为65 536-30 000=35 536)。主控程序的每次循环都将刷新T0的初值。如程序进入"死循环"而T0的初值在30 ms内未被刷新,这时"看门狗"定时器T0将溢出并申请中断。

3.设计T0溢出所对应的中断服务程序。此子程序只须一条指令,即在T0对应的中断向量地址(000BH)写入"无条件转移"命令,把计算机拖回整个程序的第一行,对单片机重新进行初始化并获得正确的执行顺序。

分类




硬件看门狗

硬件看门狗是利用了一个定时器,来监控主程序的运行,也就是说在主程序的运行过程中,我们要在定时时间到之前对定时器进行复位。如果出现死循环,或者说PC指针不能回来,那么定时时间到后就会使单片机复位。常用的WDT芯片如MAX813,5045,IMP 813等。




软件看门狗

而在某些情况下,也会采用纯软件的方法来设置看门狗,如在单片机系统中,利用闲置的定时器/计数器就可以设计一个软件看门狗。具体实现步骤如下:

首先,在初始化程序中设置定时器/计数器的方式以控制寄存器(TMOD) 和定时时间的初值,并且打开中断。

然后,根据定时器的时间,在主程序中按一定的时间间隔插人复位定时器的指令(喂狗), 两条喂狗指令之间的时间间隔可以根据系统时钟与指令周期计算出来,而且该时间周期应该小于定时器的定时时间

最后,在定时器的中断服务程序中,设置一条无条件转移指令,将程序计数器PC转移到初始化程序的入口。

在非单片机系统,如PowerPC系统中,也可以采用多线程的方式来设置软件狗,其主要的步骤如下所述:

首先,新建一个看门狗线程,该线程维护一个全局变量数组,该数组相当于每个工作线程的计数器。看门狗线程为一一个死循环,每隔一段时间就会循环一次,并将全局变量数组的每一个值都加1后判断是否超过预定义的上限值,若发现某个线程对应的变量数值超过最大值,则看门狗线程会重置该线程。

然后,每个工作线程中,每隔一段时间就会将对应的全局变量置0 (喂狗)。

软件看门狗的优点是无需额外的硬件支持,但当系统存在严重的错误时(例如:中断服务出错),则有可能导致软件看门狗失效。 [4]

【MCU】单片机看门狗工作原理_m0_38045338的博客-CSDN博客

工作原理
看门狗定时器(Watch Dog Timer, WDT)是MCU的一个组成部分,是一个计数器,其基本原理是先给计数器设定一个数值(溢出值),程序开始运行后,看门狗定时器开始计数,程序正常运行时,会周期发出指令将计数器置零(喂狗),重新开始计数,而如果长时间没有清零,计数器增加到设定值(定时器溢出),计数器会认为程序出现了异常,强制系统复位。

分类
看门狗又分硬件看门狗和软件看门狗。

硬件看门狗又叫外部看门狗,外部定时器电路的输出连接到电路的复位端,程序周期性的对定时器清零(俗称‘喂狗’)。
软件看门狗(又叫内狗)原理上一样,只是将外部定时器用内部定时器代替,可以简化硬件电路设计,但可靠性差,如内部定时器自身故障就无法检测到系统异常。
注意事项
大多数51系列单片机都有看门狗,当看门狗没有被定时清零时,将引起复位。这可防止程序跑飞。设计者必须清楚看门狗的溢出时间以决定在合适的时候,清看门狗。清看门狗也不能太过频繁否则会造成资源浪费。程序正常运行时,软件每隔一定的时间(小于定时器的溢出周期)给定时器置数,即可预防溢出中断而引起的误复位。

设计思路
51单片机系统看门狗的设计思路:

看门狗定时器T0的设置。在初始化程序块中设置T0的工作方式,并开启中断和计数功能。系统晶振频率Fosc = 12MHz,T0为16位计数器,最大计数值为65535,机器周期Tcy = 12 / Fosc = 1μs,即T0输入计数频率1μs,溢出周期为65535μs。
计算主控程序循环一次的耗时。考虑系统各功能模块及其循环次数,本系统主控制程序的运行时间约为16.6 ms。系统设置"看门狗"定时器T0定时30 ms(T0的初值为65 536-30 000=35 536)。主控程序的每次循环都将刷新T0的初值。如程序进入"死循环"而T0的初值在30 ms内未被刷新,这时"看门狗"定时器T0将溢出并申请中断。
设计T0溢出所对应的中断服务程序。此子程序只须一条指令,即在T0对应的中断向量地址(000BH)写入"无条件转移"命令,把计算机拖回整个程序的第一行,对单片机重新进行初始化并获得正确的执行顺序。
————————————————
版权声明:本文为CSDN博主「woniudaidai」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/m0_38045338/article/details/118249149

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。