C8051关闭看门狗汇编语言,STC系列单片机 看门狗一旦启动,就无法关闭

#include

#include"STC12C5AXX.h"

#define TM_BASE 100

sbit K1=P2^0;

sbit K2=P2^1;

sbit LED1=P1^0;

sbit LED2=P1^1;

sbit LED3=P1^2;

unsigned char T_BASE=100;     //1s基准

unsigned char WDT_TAG=0;

void Delay10ms( );   //延时10ms

void Timer0Init(void);        //10毫秒@12.000MHz

void WDTInit(void);     //看门狗初始化

void WDTFeed(void);     //喂狗函数

/*******************************************************************************

* 函 数 名         : main

* 函数功能               : 主函数

* 输    入         : 无

* 输    出         : 无

*******************************************************************************/

void main(void)

{

unsigned int i,j;

EA=1;

i=0;

j=0;

WDT_TAG=0;

LED1=0;

LED2=0;

WDT_CONTR = 0x07;       //把看门狗寄存器设置为关闭状态

/

//让LED3亮3秒,表示程序开始启动

LED3=1;

for(i=0;i<300;i++)

{

Delay10ms();

}

LED3=0;

i=0;

LED3=0;

K1=1; //把按键的电平先拉高,之后再去判断是否按下

Timer0Init();

while(1)

{

if(K1==0)         //检测按键K1是否按下

{

Delay10ms();      //消除抖动

Delay10ms();      //消除抖动

Delay10ms();      //消除抖动

if(K1==0)

{

if(LED1==0)

{

LED1=1;

WDTInit();        //开启看门狗

WDT_TAG=1;        //看门狗标志置1,表示在定时器里面开始喂狗

}

else

{

LED1=0;

WDT_TAG=0;        //看门狗标志置0,表示在定时器里面不喂狗

}

while((i<50)&&(K1==0))    //检测按键是否松开

{

Delay10ms();

i++;

}

i=0;

}

}

}

}

void Delay10ms()        //@12.000MHz   延时10ms

{

unsigned char i, j;

_nop_();

_nop_();

i = 117;

j = 183;

do

{

while (--j);

} while (--i);

}

void Timer0Init(void)         //10毫秒@12.000MHz        定时器0初始化

{

AUXR &= 0x7F;       //定时器时钟12T模式

TMOD &= 0xF0;       //设置定时器模式

TMOD |= 0x01;           //设置定时器模式

TL0 = 0xF0;       //设置定时初值

TH0 = 0xD8;       //设置定时初值

TF0 = 0;          //清除TF0标志

TR0 = 1;          //定时器0开始计时

ET0=1;

}

void tm0_isr() interrupt 1 using 1              //定时器0中断

{

TL0 = 0xF0;       //设置定时初值

TH0 = 0xD8;       //设置定时初值

T_BASE--;

if(T_BASE==0)                       //到1秒后才执行以下操作

{

T_BASE=TM_BASE;

LED2=!LED2;

if(1==WDT_TAG)          //看门狗标志为1则喂狗

{

WDTFeed();   //喂狗

}

}

}

void WDTInit(void)

{

WDT_CONTR = 0x37;//使能看门狗,预分频256      理论上喂狗周期为5秒钟以内

}

void WDTFeed(void)

{

WDT_CONTR = 0x37;//喂狗

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值