|
本帖最后由 leemo 于 2019-6-8 13:53 编辑 看门狗定时器寄存器(WDT_CONTR) STC单片机看门狗定时器寄存器在特殊功能寄存器中的字节地址为E1H,不能位寻址, 该寄存器用来管理STC单片机的看门狗控制部分,包括启停看门狗、设置看门狗溢出时间等。单片机复位时该寄存器不一定全部被清0,在STC下载程序软件界 面上可设置复位关看门狗或只有停电关看门狗的选择,大家根据需要可做出适合自己设计系统的选择。 #include "reg52.h" #define uchar unsigned char #define uint unsigned int sfr WDT_CONTR=0xe1; sbit led1=P1^0; void delayms(uint x) { uint i,j; for(i=x;i>0;i--) //i=x 即延时约 x 毫秒 for(j=110;j>0;j--); } void main() { WDT_CONTR=0x35; led1=0; delayms(500); led1=1; while(1) { delayms(1000); WDT_CONTR=0x35; } } 其中,WDT_CONTR=0x35; //喂狗,由上表可得出,2.2755 s 溢出 如果在溢出时间内没有喂狗,那么将复位,程序从头开始执行。 分析: “sfr WDT_CONTR=0xe1;”定义STC单片机中新加入的看门狗寄存器,因为reg52.h头文件中没有对该寄存器的定义,以后要定义其它新的寄存器 时方法相同,当然也可以写在reg52.h头文件中。 程序开始后,点亮发光二极管后延时约500ms后再熄灭,这里延时不可过长,若两次喂狗之间程序运行的总时间超过看门狗的溢出时间,看门狗将复位单 片机,大家可调节这个延时时间看实际演示效果。 喂狗时使用和设定看门狗寄存器同样的语句,只要看门狗寄存器中的CLR_WDT位被置1,看门狗定时器将重新计数,CLR_WDT位被置1后,由硬件自动将其清零。 演示结果表现为发光二极管点亮后,马上熄灭,再不会点亮,这说明程序没有被复位,始终停止在while(1)循环中,看门狗处于被正常喂狗的情况下。 【例】只需把while(1)循环中的“WDT_CONTR=0x35;”这句删掉,演示结果为小灯不停的闪烁,因为有了看门狗的作用,当看门狗定时器溢出时,使单片机复位从头重新执行程序,所以小灯闪烁。 在应用看门狗时,需要在整个大程序的不同位置喂狗,每两次喂狗之间的时间间隔一定不能小于看门狗定时器的溢出时间,否则程序将会不停的复位。 |