Haloha

89S51单片机看门狗的使用方法

wstrom 发布于 2006/9/1 11:28 浏览: 1866 回复: 0 所在分类:单片机

ATMEL系列芯片中,89C51功能上的不足现在已从单片机的行列中隐身。取而代之的89S51系列的89S5189C51功能相同。指令完全兼容。程序编译后生成的HEX文件无需任何转换就可以直接在89S51使用。其实89S51只比89C51增加了一个看门狗功能。89S51的其它功能与89C51的几乎完全相同,大家可以查阅89C51的资料,在这里我只对89S51的看门狗使用方法介绍一下。
89S51
单片机内部的看门狗使用方法同多数同类芯片有着共同的特点,如果我们想加固程序运行的稳定性和抗干扰性,又不想在硬件上加太多的外围电路,那么用这种芯片内置的看门狗就可以完全可以实现我们的设计要求了,使用方法具体如下:
在程序初始化中应初始化看门狗寄存器(WDTRST地址是0A6H),初始化时我们只需先向看门狗寄存器中先写入01EH,再写入0E1H。即可激活看门狗。

例程如下:
ORG      0000H 

LJMP     START

ORG      0030H

CLRDOG                ;喂狗子程序
……
MOV     0A6H,#01EH      
;先送1E
MOV     0A6H,#0E1H      
;后送
E1
;喂狗指令

……
RET

 

ORG     0100H
START

……

……

;初始化其他寄存器
MOV     0A6H,#01EH      
;先送1E
MOV     0A6H,#0E1H      
;后送
E1
;初始化看门狗寄存器

……
……

……

LCALL   CLRDOG

……

……

END

C语言中要增加一个声明语句。
AT89X51.h声明文件中增加一行 sfr WDTRST = 0xA6;
Main()
{
WDTRST=0x1E;
WDTRST=0xE1;//
初始化看门狗。

While (1)
{
WDTRST=0x1E;
WDTRST=0xE1;//
喂狗指令

}
}

在此,我只是用了一个死循环的例子来告诉大家在程序中如何“喂狗”,如果是在一个大一些的程序中,还可以把喂狗指令写在一个经常调用的子程序当中,我就不再一一举例了。

 

不过要用好看门狗在硬件设计和编写程序时一定要注意一些地方:首先,89S51的看门狗必须由程序激活后才开始工作。所以必须保证CPU有可靠的上电复位。否则看门狗也无法工作。其次,看门狗使用的是CPU的晶振。在晶振停振的时候看门狗也无效。(所以如果你要设计的东东要求较高的的可靠性,我建议你还是用硬件看门狗。)最后,89S51只有14位计数器。在16383个机器周期内必须至少喂狗一次。而且这个时间是固定的,无法更改。当晶振为12M时每16个毫秒需喂狗一次。不过利用定时器可以在程序中延长“喂狗”时间,网上我看到有人已经使用过这种方法。我也利用定时器把看门狗的喂狗时间延长至几秒。不过可靠性有所降低。各位也不妨试试!

wstrom 2006/9/1 11:28

留下脚印

踩一脚
copyright © wstrom 的空间 2010-2012
Processed in 0 seconds, 0 queries