单片机的看门狗课件_第1页
单片机的看门狗课件_第2页
单片机的看门狗课件_第3页
单片机的看门狗课件_第4页
单片机的看门狗课件_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、单片机的看门狗-及系列为什么要看门狗?你家的看门狗是做什么的?“看门狗定时器”是这样一种东西,从功能上说它可以让微控制器在意外状况下(比如软件陷入死循环或跑飞)重新回复到系统上电状态,以保证系统出问题的时候重启一次。 就跟我们现在用电脑一样,死机了你就按一下reset键重启一次电脑,看门狗就是负责干这个事儿的。它是52单片机增加的一个功能,以前Intel 8031、AT 89C51时代单片机片内都没有“看门狗”功能,需要我们外扩看门狗芯片,比如X5045。“看门狗”就是一个计数器,由于位数有限计数器能够装的数值是有限的(比如8位的最多装256个数、16位的最多装65536个数),从开启“看门狗

2、”那刻起,它就开始不停的数机器周期,数一个机器周期就计数器加,加到计数器盛不下了(术语叫溢出)就就产生一个复位信号,重启系统。看门狗的看门原理我们在设计程序时,先根据看门狗计数器的位数和系统的时钟周期算一下计满数需要的时间,就是说在这个时间内“看门狗”计数器是不会装满的,然后在这个时间内告诉它重新开始计数,就是把计数器清零,这个过程叫“喂狗”,这样隔一段时间喂一次狗,只要程序正常运行他就永远计不满,一旦出现死循环之类的故障,没有及时来清零计数器,就会导致装满了溢出,他就重启系统,这就是举个例子说:8051 单片机选用12MHz晶振,一个时钟周期为1us,如果“看门狗计数器”是16位的,最大计数

3、65536个,那么从0开始计到65535需要约65ms,所以我们可以在程序的50ms左右清零一次计数器(“喂狗”),让他重新从0开始计,再过50ms,再清,这样下去只要程序正常运行,计数器永远不会计满,也就永远不会被“看门狗”复位。每种单片机的“看门狗”实现方法不尽相同,但是原理都一样,而且“看门狗”都是启动了之后就不能被关闭,只能系统复位(重新断电在上电)才能关闭。 设置“看门狗”的一般步骤如下:1. 设置“看门狗”相关寄存器,启动“看门狗”;2. 隔一段时间清零一次,“喂狗”;3. 如果程序正常,一直运行;如果程序出错,没有按时“喂狗”,“看门狗”就在溢出的时候复位系统。的看门狗AT89S

4、52单片机看门狗定时器是14位的,最大计数214=16384个数,每计16384个时钟周期就溢出一次。也就是说如果使用12M晶振的话,至少应该在16.384ms内喂一次狗。 其中N是单片机的时钟周期,STC89C5X系列单片机提供6时钟周期和12时钟周期两种时钟周期,可以在烧写程序时修改; Prescale是预分频数,通过设置【看门狗控制寄存器】可以设置为2、4、8、16、32、64、128、256;怎么设置演示程序中有介绍; 晶振频率就是系统选用的晶振。 所以如果同样选择12MHz晶振,使用传统的12时钟周期,它最小的溢出时间是(12*2*32768)/(12*106)=65.536ms,最

5、大溢出时间是(12*256*32768)/(12*106)8.38s。如果选择256分频,也就是说只要在8.38秒之内喂一次狗就可以了。 看门狗应用举例STC89C52最小单片机系统+两个指示灯 串行口接口(用于下载程序和测试本次试验 #include sfr WDT_CONTR=0 xE1;/定义特殊功能寄存器:STC单片机看门狗控制寄存器#define uchar unsigned char#define true 1#define false 0#define WEIGOU WDT_CONTR=0 x34/看门狗启动设置和“喂狗”操作sbit LED=P16;/信号灯,系统正常工作就一闪

6、一闪的sbit LED_busy=P17;/工作灯,上电灭一会儿(约800ms),然后正常工作的时候一直亮着;用于指示系统是否重启uchar timer0_ctr,i;const uchar str=I love MCU!;/定义一句话,让他从串口输出,只有系统重启的时候才输出一次,所以也是用于验证看门狗有没有重启系统/延时函数,11.0592MHz晶振下延时约xms毫秒void delay_ms(unsigned xms)unsigned x,y;for(x=xms; x0; x-)for(y=110; y0; y-);/串行口初始化程序void InitCOM()SCON=0 x50;/S

7、CON=(0101 0000)B,波特率不加倍,允许接收TH1=0 xFD;/设置波特率=9600bpsTL1=TH1;TR1=1;/启动定时器1/定时器0中断服务程序程序,控制信号灯闪烁。如果系统正常运行,信号灯1.5秒闪一次void Timer0_isr() interrupt 1TH0=0 x4C;TL0=0 x00;timer0_ctr+;if(timer0_ctr=30)TR0=0;/定时器0暂停,否则再次来中断会冲断程序timer0_ctr=0;LED=0;delay_ms(100);LED=1;TR0=1;/定时器0重新启动void main()WEIGOU;/上来第一步设置看门

8、狗定时器,并且启动InitMain();InitCOM();/开机通过串口发送一次“I love MCU!”,使用串口调试助手可以查看/由于在while大循环外边,所以只要系统不重新启动,则上电后只会发送一次,用于判断系统是否重启i=0;while(stri!=0)SBUF=stri;while(TI=0);TI=0;i+;/while大循环while(true)/约每隔800ms喂一次狗,可以通过调整这里的喂狗时间来验证看门狗是否有效/我们设置的看门狗约1秒。所以可以用800和2000分别做一次试验,看是否会被看门狗复位delay_ms(800);LED_busy=0;/第一次上电约延时80

9、0ms工作灯点亮,如果系统不重启,他将一直亮着,用于指示系统是否重启WEIGOU;89S52看门狗使用方法 在ATMEL的89S52系列的89S52与89C51功能相同。指令兼容。HEX程序无需任何转换可以直接使用。89S52比89C51增加了一个看门狗功能。89S52的其它功能可以参见89C52的资料。看门狗具体使用方法如下:在程序初始化中向看门狗寄存器(WDTRST地址是0A6H)中先写入01EH,再写入0E1H。即可激活看门狗。的看门狗应用在C语言中要增加一个声明语句。 在AT89X51.h声明文件中增加一行 sfr WDTRST = 0 xA6; 程序代码sfr WDTRST = 0 xA6; main() WDTRST=0 x1E; WDTRST=0 xE1;/初始化看门狗。 While (1) WDTRST=0 x1E; WDTRST=0 xE1;/喂狗指令 注意事项:1 89S51的看门狗必须

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论