AT89S51单片机看门狗定时器的使用.pdf
文本预览下载声明
AT89S51 看门狗定时器由一个14位定时器及WDTRST (地址为6AH)寄存器构成。开启看门狗
定时器 ,14 位定时器会自动计数,每16384 (214)个机器周期溢出一次,并产生一个高电
平复位信号,使系统复位。对于12MHZ 的时钟脉冲每16384us (约0.016s)产生一个复位信
号。
如果启动看门狗定时器,当系统超过0.016s 没有动作(程序跑飞),看门狗定时器自动复位,
让系统归复于正常运作状态。为了系统既能正常工作又不会出现死机(程序跑飞),在0.016s
内必须喂狗一次,即对看门狗定时器进行复位,看门狗的启动和复位的方法是一样的。
在汇编语言中启动或复位看门狗定时器的命令如下。
MOV 6AH, #1EH
MOV 6AH, #0E1H
若要在C 语言中使用看门狗定时器功能,由于reg51.h 中并没有声明WDTRST 寄存器,所以必
须先声明WDTRST 寄存器。
Sfr WDTRST=0xa6;
进行声明以后可以用一下命令启用或复位看门狗定时器。
WDTRST=0x1e;
WDTRST=0xe1;
下面用一个C 语言进行说明
#include reg51.h
Sfr WDTRST=0xa6;
Main()
{ ……;
WDTRST=0x1e;
WDTRST=0xe1;
While(1)
{ WDTRST=0x1e;
WDTRST=0xe1;
……;
……; 这部分执行时间必须少于0.016s
}
}
以上程序中系统在做一个无限循环的动作,通过看门狗定时器可以防止程序在执行过程中跑
飞。因为只要程序一跑出 while ()循环,看门狗定时器溢出以后得不到复位,所以自动复
位系统,让程序从mian ()开始重新运行。
但是在C 语言应用看门狗定时器也特别小心,一定要在看门狗定时器启动后的0.016s 内喂一
次狗。
注:在汇编语言中每条指令的执行时间都是可以准确算出来,下面是一个汇编语言编写的8
路led 向左移程序应用看门狗定时器的实例。
ORG 00H ;1 1us
MOV 0A6H,#1EH ;2 1us
MOV 0A6H,#0E1H ;3 1us
START: MOV A,#0FEH ;4 1us
L P: MOV P2,A ;5 1us
CALL DELAY ;6 2us
RL A ;7 2us
JMP L P ;8 2us
DELAY: MOV R7,#200 ;9 1us
DV: MOV R6,#250 ;10 1us
DJNZ R6,$ ;11 2us
MOV 0A6H,#1EH ;2 1us
MOV 0A6H,#0E1H ;3 1us
DJNZ R7,DV ;12 2us
RET ;13 2us
END ;14 2us
在程序的每个行标号后面是12MHZ 时钟脉冲下的指令执行时间,为了让系统正常工作且不死
机将看门狗定时器启动指令放在1和2 之间,将看门狗定时器复位指令放在11 和12之间。
现在一起通过执行时间来计算看门狗定时器复位指令放在那里比较合适。
程序执行顺序:1 2 3 4 5 6 9 10 11 12 9 10 …
显示全部