P89V51RD2 单片机看门狗的使用
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
P89V51RD2具有一个可编程的看门狗定时器(WDT),可用于系统故障安全保护,防止软件死锁和自
动恢复。WDT在 CPU落入软件运行失控的情况下可作为一种恢复的方法。P89V51RD2有两个特殊功能寄
存器 WDTC(地址 0xC0)和 WDTD(地址 0x85)用于看门狗功能,有关这两个寄存器的详细注解参见
《P89V51RD2器件
手册
华为质量管理手册 下载焊接手册下载团建手册下载团建手册下载ld手册下载
》。
WDT的溢出周期可由下式计算得出:
T =(255 – WDTD)﹡344064*1/fOSC,此处WDTD为WDTD寄存器的装载值,fOSC是系统时钟。每经
过 344, 064个振荡周期,WDT寄存器加 1。
当向WDTD装载 0值时看门狗获得最大的溢出周期 7.90s;当向WDTD装载 0xFE时看门狗获得最小
的溢出周期 31.11ms;表 1 给出当 fOSC为 11.0592M时不同溢出周期对应的 WDTD装载值的简表。若使用
其它的晶振或想得到其它的溢出周期可根据公式自行计算。
表 1 P89V51RD2看门狗溢出周期取样
WDTD装载值 看门狗溢出周期
0xFE 31.11ms
0xDD 1.0s
0xBD 2.0s
0x9D 3.0s
0x7D 4.0s
0x5D 5.0s
0x3D 6.0s
0x1D 7.0s
0x01 7.90s
P89V51RD2看门狗的启动和关闭通过WDTC寄存器的 SWDT位实现,该位被置位启动看门狗,该位
被清零时关闭看门狗。要使能WDT复位,用户必须将WDTC寄存器的WDRE位置 1。当看门狗使能且发
生溢出时,它将会在 RST脚产生一个复位脉冲执行复位。为避免看门狗溢出产生复位,用户需要定期执行
“喂狗”操作。执行“喂狗”操作时,在向WDTD写入重装值后,必须立即执行看门狗定时器刷新(置位
WDT)才能将数据成功写入WDTD寄存器中,否则数据不能被写入。
以下实验例程使用了 WDT 的定时和复位功能,系统在上电复位后 LED2 点亮一下即熄灭,接下来实
现 LED1闪动控制。若按下 KEY键,则启动看门狗定时器并打开看门狗复位输出使能,若屏蔽掉“喂狗子
程序”,4s 后可观察到系统复位(LED2 被点亮一下);若不屏蔽“喂狗子程序”则会看到 LED1 一直在闪
动而 LED2一直熄灭,说明程序一直在正常运行而未发生看门狗复位。
/*****************************************************************
*文件名: WDT_test.c
*版权: 周立功单片机研究所
*功能: P89V51RD2看门狗 C语言演示程序
*日期: 2004/6/28
******************************************************************/
#include
sfr WDTC = 0xC0; // 看门狗定时器控制寄存器
sfr WDTD = 0x85; // 看门狗定时数据/重装数据控制寄存器
- 1 -
sbit KEY = P3^3;
sbit LED1= P1^0;
sbit LED2= P1^1;
main()
{
int j, i;
char flag = 0;
LED2 = 0; // 检测程序是否重启指示灯
for(i=0;i<6000;i++);
LED2 = 1;
do{
LED1 = ~LED1; // 检查程序是否运行指示灯
if(KEY==0){
WDTC = 0x09; // 启动看门狗定时器,使能看门狗定时器复位
WDTD = 0x80; // 装入重装载值
WDTC = WDTC|0x02; // 执行装载指令
flag = 1;
}
if(flag){ // 定时喂狗操作
if(i>=5){ // 喂狗子程序
WDTD = 0x80; // 装入重载值
WDTC = WDTC|0x02; // 执行装载指令
i=0;
}
}
for(j=0;j<4000;j++); // 延时
i++;
}while(1);
}
/*****************************************************************
*文件名: WDT_test.asm
*版权: 周立功单片机研究所
*功能: P89V51RD2看门狗汇编演示程序
*日期: 2004/6/28
******************************************************************/
$NOMOD51
$INCLUDE(REG51.INC)
WDTC DATA 0C0H ;定义WDTC看门狗定时器控制寄存器的地址
WDTD DATA 085H ;定义WDTD看门狗定时器数据/重装寄存器地址
- 2 -
KEY BIT P3.3 ;定义按键端口
LED1 BIT P1.0 ;定义指示灯端口
LED2 BIT P1.1
ORG 0000H
AJMP MAIN
ORG 0100H
MAIN: CPL LED2
CALL DELAY
CPL LED2
CIRCLE: CPL LED1
CALL DELAY
; JB KEY,CIRCLE ;有键按下后则等待看门狗复位,无键按下使 LED1闪烁
JB KEY,FEED ;调用喂狗子程序
AJMP WDTCON
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; 启动看门狗定时器分支程序
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
WDTCON: MOV A,#09H
MOV WDTC,A ;启动看门狗定时器
MOV A,#80H
MOV WDTD,A ;写入定时初值
ORL WDTC,#02H ;执行定时器刷新
AJMP CIRCLE
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; WDT看门狗喂狗分支程序
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
FEED: MOV A,#80H
MOV WDTD,A ;写入定时初值
ORL WDTC,#02H ;执行定时器刷新
AJMP CIRCLE
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
; 延时子程序
;= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =
DELAY: MOV R7,#05H ;延时子程序
DELAY_1:MOV R6,#00H
DELAY_2:MOV R5,#00H
DJNZ R5,$
DJNZ R6,DELAY_2
DJNZ R7,DELAY_1
RET
END
参考文献:《P89V51RD2器件手册》,http://www.zlgmcu.com
- 3 -