- 1、本文档共38页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机的看门狗培训资料.ppt
* * 单片机的看门狗 -S51及STC89系列 为什么要看门狗? 你家的看门狗是做什么的? “看门狗定时器”是这样一种东西,从功能上说它可以让微控制器在意外状况下(比如软件陷入死循环或跑飞)重新回复到系统上电状态,以保证系统出问题的时候重启一次。 就跟我们现在用电脑一样,死机了你就按一下reset键重启一次电脑,看门狗就是负责干这个事儿的。它是52单片机增加的一个功能,以前Intel 8031、……、AT 89C51时代单片机片内都没有“看门狗”功能,需要我们外扩看门狗芯片,比如X5045。 “看门狗”就是一个计数器,由于位数有限计数器能够装的数值是有限的(比如8位的最多装256个数、16位的最多装65536个数),从开启“看门狗”那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加1,加到计数器盛不下了(术语叫溢出)就就产生一个复位信号,重启系统。 注解: 这里顺便说一下,一般教材上叫“看门狗定时器”,其实定时器原理还是计数器,只是计的是时钟周期,所以我为了初学者好理解叫统一叫“计数器”,这里阐明一下。 看门狗的看门原理 我们在设计程序时,先根据看门狗计数器的位数和系统的时钟周期算一下计满数需要的时间,就是说在这个时间内“看门狗”计数器是不会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,这个过程叫“喂狗”, 这样隔一段时间喂一次狗,只要程序正常运行他就永远计不满,一旦出现死循环之类的故障,没有及时来清零计数器,就会导致装满了溢出,他就重启系统,这就是 举个例子说:8051 单片机选用12MHz晶振,一个时钟周期为1us,如果“看门狗计数器”是16位的,最大计数65536个,那么从0开始计到65535需要约65ms,所以我们可以在程序的50ms左右清零一次计数器(“喂狗”),让他重新从0开始计,再过50ms,再清,……,这样下去只要程序正常运行,计数器永远不会计满,也就永远不会被“看门狗”复位。 每种单片机的“看门狗”实现方法不尽相同,但是原理都一样,而且“看门狗”都是启动了之后就不能被关闭,只能系统复位(重新断电在上电)才能关闭。 设置“看门狗”的一般步骤如下: 1. 设置“看门狗”相关寄存器,?启动“看门狗”; 2.? 隔一段时间清零一次,“喂狗”; 3. 如果程序正常,一直运行;如果程序出错,没有按时“喂狗”,“看门狗”就在溢出的时候复位系统。 S51的看门狗 AT89S52单片机看门狗定时器是14位的,最大计数214=16384个数,每计16384个时钟周期就溢出一次。也就是说如果使用12M晶振的话,至少应该在16.384ms内喂一次狗。 STC89 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*256*32768)/(12*106)≈8.38s。如果选择256分频,也就是说只要在8.38秒之内喂一次狗就可以了。 对于我们用户来说,看门狗的时间是越长越好,这样可以节省更多的单片机资源,尤其是对时间要求精准的系统,如果执行过程中我们不停地“喂狗”,那么是比较浪费时间的。所以STC89C5X系列单片机的看门狗更有优势一些。当然这个也是个人的选择,如果对时间要求的不苛刻的话,勤喂几次狗也没关系。 STC看门狗应用举例 STC89C52最小单片机系统+两个指示灯 串行口接口(用于下载程序和测试本次试验 关于实验的注意事项: 1. 本次试验使用的是11.0592MHz晶振,设置WDT_CONTR=(0011 0100)B,32预分频,单片机使用12指令周期模式。 计算看门狗溢出时间:[12*32*32768/]≈1s。 2. 本次试验的硬件电路很简单,就是最小系统上增加两个LED灯,原理图见正文,用户可以很容易实现。 ***************************************************************************/ #include Reg52.H sfr WDT_CONTR=0xE1; //定义特殊功能寄存器:STC
文档评论(0)