STC89单片机看门狗的使用及应用程序

2018-02-01 19:31:16编辑:什么鱼 关键字:STC89  单片机看门狗

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


加入看门狗电路的目的是使 单片机 可以在无人状态下实现连续工作, 其工作过程如下:看门狗芯片和单片机的一个I/O引脚相连,该I/O引脚通过单片机的程序控制,使它定时地往看门狗芯片的这个引脚上送入高电平(或低电平),这一程序语句是分散地放在单片机其他控制语句中间的,一旦单片机由于干扰造成程序跑飞后而陷入某一程序段进入死循环状态时,给看门狗引脚送电平的程序便不能被执行到,这时,看门狗电路就会由于得不到单片机送来的信号,便将它和单片机复位引脚相连的引脚上送出一个复位信号,使单片机发生复位,从而单片机将从程序存储器的起始位置重新开始执行程序,这样便实现了单片机的自动复位。
通常看门狗电路需要一个专门的看门狗芯片连接 单片机 来实现,这在我们的单片机教程网 http://www.51hei.com 以前做过相关的电路介绍。不过这样会给电路设计带来复杂,STC单片机内部自带有看门狗,通过对相应特殊功能寄存器的设置就可实现看门狗的应用,STC89系列单片机内部有一个专门的看门狗定时器寄存器,Watch Dog Timer 寄存器,其相应功能见下个知识点。
看门狗定时器寄存器(WDT_CONTR)
STC 单片机 看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址, 该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。其各位的定义如表4.2.1所示。


表1看门狗定时器寄存器(WDT_CONTR)

位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

--

--

EN_WDT

CLR_WDT

IDLE_WDT

PS2

PS1

PS0


EN_WDT:看门狗允许位,当设置为“1”时,启动看门狗。
CLR_WDT :看门狗清“0”位,当设为“1”时,看门狗定时器将重新计数。硬件 自动清“0”此位。
IDLE_WDT:看门狗“IDLE”模式位,当设置为“1”时,看门狗定时器在 单片机 的“空闲模式”计数,当清“0”该位时, 看门狗定时器在单片机的“空闲模式” 时不计数。
PS2、PS1、PS0:看门狗定时器预分频值,不同值对应预分频数如表4.2.2所示。


表2 12M晶振看门狗定时器预分频值

PS2

ps1

ps0

预分频数

看门狗溢出时间

0

0

0

2

65.5ms

0

0

1

4

131.0ms

0

1

0

8

262.1ms

0

1

1

16

524.2ms

1

0

0

32

1.0485s

1

0

1

64

2.0971s

1

1

0

128

4.1943s

1

1

1

256

8.3886s

看门狗溢出时间与预分频数有直接的关系,公式如下:

看门狗溢出时间=(N×预分频数×32768)/晶振频率
上式中N表示STC 单片机 的时钟模式,STC单片机有两种时钟模式:单倍速,也就是12时钟模式,这种时钟模式下,STC单片机与其它公司51单片机具有相同的机器周期,即12个振荡周期为一个机器周期;另一种为双倍速,又被称为6时钟模式,在这种时钟模式下,STC单片机比其它公司的51单片机运行速度要快一倍,关于单倍速与双倍速的设置在下载程序软件界面上有设置选择,大家可自行下载测试程序运行速度。预分频数的值由PS2、PS1和PS0的组合确定,如表4.2.2所示。晶振频率即为当前系统的时钟频率。
下面我们通过两个例子来进一步讲解使用看门狗和不使用看门狗时程序运行的区别,由于STC 单片机 的高抗干扰特点,至今我还未曾遇到过程序跑飞的情况,因此我们也很难人为制造出使单片机程序跑乱的情况,下面的程序演示利用看门狗的溢出时间来使程序自动复位运行。
【例】:在TX-1C实验板上实现如下描述:程序启动后设定看门狗溢出时间为2秒左右,然后点亮第一个发光二极管,稍延时一会,然后熄灭发光二极管,使程序进入等待死循环状态,并且在死循环中大约每隔1秒喂狗一次,看程序运行是否正常。
新建文件part3.4.2.c,程序代码如下:

#include //52系列 单片机 头文件
#define uchar unsigned char
#define uint unsigned int 
sfr WDT_CONTR=0xe1;
sbit LED1=P1^0;
void delayms(uint xms) 
{
uint i,j;
for(i=xms;i>0;i--) //i=xms即延时约xms毫秒
for(j=110;j>0;j--);
}
void main()
{
WDT_CONTR=0x35;
led1=0;
delayms(500);
led1=1; 
while(1) 
{
delayms(1000);
WDT_CONTR=0x35; 
}
}
分析:
(1)“sfr WDT_CONTR=0xe1;”定义STC 单片机 中新加入的看门狗寄存器,因为reg52.h头文件中没有对该寄存器的定义,以后要定义其它新的寄存器时方法相同,当然也可以写在reg52.h头文件中。
(2)程序开始后,点亮发光二极管后延时约500ms后再熄灭,这里延时不可过长,若两次喂狗之间程序运行的总时间超过看门狗的溢出时间,看门狗将复位 单片机 ,大家可调节这个延时时间看实际演示效果。
(3)喂狗时使用和设定看门狗寄存器同样的语句,只要看门狗寄存器中的CLR_WDT位被置1,看门狗定时器将重新计数,CLR_WDT位被置1后,由硬件自动将其清零。
(4)演示结果表现为发光二极管点亮后,马上熄灭,再不会点亮,这说明程序没有被复位,始终停止在while(1)循环中,看门狗处于被正常喂狗的情况下。
【例】只需把while(1)循环中的“WDT_CONTR=0x35;”这句删掉,演示结果为小灯不停的闪烁,因为有了看门狗的作用,当看门狗定时器溢出时,使 单片机 复位从头重新执行程序,所以小灯闪烁。
在应用看门狗时,需要在整个大程序的不同位置喂狗,每两次喂狗之间的时间间隔一定不能小于看门狗定时器的溢出时间,否则程序将会不停的复位。

 


关键字:STC89  单片机看门狗

来源: eefocus 引用地址:http://www.eeworld.com.cn/mcu/article_2018020137614.html
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:STC内部EEPROM应用函数
下一篇:stc12c4052 315M无线解码程序

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

使用STC14F104W单片机捕获PWM脉宽

最近做了个小东西,使用的是很简单的一个单片机STC15F104W,但是功能很好用。这里简单介绍下本人使用STC15F104W实现的PWM脉冲高电平方式。本人要捕获的PWM脉冲周期是20ms,高电平介于1~2ms。主要使用的是外部中断和定时器,STC15F104W有4个外部中断,这里采用外部中断0,可以响应上升沿和下降沿。(P3.2)外部中断0捕获引脚P3.2的上升沿和下降沿:上升沿开启定时器0计时,下降沿终止定时器0计时,这样读取计时寄存器的值即可获得高电平时间:TH0*256+TL0;具体程序段://*******************************************************//函数名
发表于 2018-07-01 16:54:58

stc89c51单片机矩阵键盘扫描

#include<reg52.h>  #include<stdio.h>    #define GPIO_KEY P0  #define GPIO_LED P1  unsigned char KeyValue;//存储键值  unsigned char code DIG_CODE[]={  0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07, 
发表于 2018-06-22 22:56:44

51单片机STC89C52 DA数模转换

CSDA BIT P3.2  WRR BIT P3.6  WELA BIT P2.7  DULA BIT P2.6    ORG 0000H  LOOP0:  MOV P0,#0FFH ;关数码管显示  SETB WELA  CLR WELA  CLR DULA  SETB CSDA  SETB WR  MOV A,#0  LOOP1:  MOV P0,A  CLR CSDA   CLR WRR  LCALL DELAY  S
发表于 2018-06-22 22:26:20

51单片机STC89C52 AD模数转换

,#0FFH ;关数码管显示  SETB WELA  SETB RDD  SETB WRR  STARTAD: ;开始转换  CLR CSAD  //NOP  CLR WRR  //NOP  SETB WRR  //NOP  SETB CSAD  LCALL DELAY ;延时,等待转换完成 
发表于 2018-06-22 22:25:32

51单片机STC89C52 矩阵键盘数码管显示

WELA BIT P2.7  DULA BIT P2.6  DIOLA BIT P2.5  FM BIT P2.3    ORG 0000H  SETB DIOLA  MOV SP,#0E0H  LOOP0:  LCALL key_Scan  JZ LOOP0  LCALL DELAY20MS  LCALL key_Scan  JZ LOOP0  MOV P1,A  LCALL Smg  HERE0:  LCALL key_Scan ;等待按键释放 &nb
发表于 2018-06-22 22:09:37

51单片机STC89C52 iic

;SETB SDA  IIC8:  SETB SCL  DJNZ R0,IIC6  CLR SCL ;检测ACK  SETB SDA  JB SDA,$  SETB SCL  CLR SCL ;STOP信号  CLR SDA   SETB SCL  SETB SDA  
发表于 2018-06-22 22:08:57

小广播

何立民专栏

单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2018 EEWORLD.com.cn, Inc. All rights reserved