3.12看门狗定时器(WDT)
3.12.1看门狗定时器的控制

WDT初值与WDTPERIOD[3:0]对应关系如下:
表 0 124 看门狗溢出时间设置表

*WDT作通用定时器时WDT初值不能设置为0x3FFF.
WTIMEROVF:WDT作通用定时器的溢出标志位,置位时表明定时器溢出。
ASTIMER:工作模式设置位,置位时将WDT设为通用定时器。这种情况下溢出时不产生系统复位动作,只是将WTIMEROVF标志置位;清零(默认)为看门狗定时器。对该位执行写操作将清零定时器。
WDTOVF:WDT溢出标志,WDTOVF=1时表明看门狗溢出;向该位写入“1”时清WDTOVF标志。
WDTRESET:看门狗复位控制。通过将WDTRESET先清零再置位以复位看门狗。在对看门狗溢出时间重新进行配置的时候,也需要对WDTRESET先清零再置位。
3.12.2采用外部时钟的情况下WDT的复位控制
在VRS51L3074使用外部时钟的情况下,如果Versa Ware JTAG软件“系统选项(Device Option)”中的“时钟分频器设置(Clock Devider setting)”设为“OFF”,将导致程序不能正常对WDT进行复位操作。为了使看门狗能够被正常复位,需要将Versa Ware JTAG “系统选项”中的“时钟分频器设置”设为Fosc/2、Fosc/4或者Fosc/8,此时为了使程序仍然能够以“全速”运行,可在程序代码开始处增加以下指令强制使系统时钟返回Fosc/1:
DEVCLKCFG1 &= 0xF0;
…
只有在系统采用外部时钟的情况下使用看门狗功能时才需进行上述处理,如使用内部40MHz晶振则无需此步骤。
3.12.3 WDT基本配置例程
本例程演示看门狗定时器的配置和复位控制(内部40MHz),并通过P1口监控看门狗动作。如果延时函数定义的延时时间大于看门狗溢出时间,WDT将复位处理器。
程序代码:
#include <VRS51L3074_Keil.h>
void delay (unsigned int dlais); // 函数声明
void main (void)
{
PERIPHEN2 = 0x08; //使能 IO口
P1PINCFG = 0x00; //P1口输出
//DEVCLKCFG1 &= 0xF0; //使用外部时钟的情况下
PERIPHEN2 |= 0x04; //WDT使能
P1 = 0xFF; // P1口输出0xFF
delay(10); //保持10ms
WDTCFG = 0x62; //看门狗溢出时间:40ms
WDTCFG = 0x63;
P1 = 0x00; //P1口输出0x00
do
{
delay (50); //延时大于40ms ,看门狗将处理器复位
WDTCFG = 0x62; //复位看门狗
WDTCFG = 0x63;
}while(1);
}// End of main
//延时1ms函数 void delay(unsigned int dlais)
//(略)