stc89C51使用串口给电脑发送数字,从0开始累加。一秒钟加一个数字,如果5秒钟之内没有按下按键

stc89C51使用串口给电脑发送数字,从0开始累加。一秒钟加一个数字,如果5秒钟之内没有按下按键就通过看门狗自动复位,如果按下按键,就继续累加,看门狗那里一直实现不了功能,求大佬给我写一个程序借鉴一下

在主程序中启动看门狗以后,在主程序循环中要不断地刷新看门狗,一旦停止刷新看门 狗,就会产生看门狗复位。程序如下:

#include <reg51.h>

sbit k1=P3^3;//按键

sfr WDT_CONTR = 0xE1; //定义STC89C51单片机看门狗寄存器

unsigned char t0n;//T0中断20次为1秒

unsigned char s5; //5秒计时

unsigned char second;//秒计时

main()

{

second=0xFF;

TMOD=0x21;

TH1 =0xFD;//晶振频率=11.0592,波特率=9600

TL1 =0xFD;

SCON=0x50;

TH0 =0x4B;//晶振频率=11.0592,定时50ms

TL0 =0xFD;

EA  =1;

ET0 =1;

TR0 =1;

TR1 =1;

WDT_CONTR=0x30; //EN_WDT=1;启动看门狗,CLR_WDT=1,看门狗清0

while(1)

{

WDT_CONTR|=0x10; //刷新看门狗

if(k1==0)

{

s5=0;//有按键计时5秒清0

while(k1==0)WDT_CONTR|=0x10; //等待按键释放要刷新看门狗

}

}

}

void T0_int() interrupt 1

{

TH0 =0x4B;

TL0 =0xFD;

t0n++;

if(t0n>=20)//定时器T0中断20次,1秒到

{

t0n=0;

second++;

if((0x0f&second)==0x0a)//变成10进制数发送

{second+=6;}//删掉这两行,按十六进制数发送

SBUF=second;//发送秒

while(TI==0);

TI=0;

s5++;

if(s5>5)//没有按键,5秒后看门狗复位

while(1);//等待看门狗复位

}

}

串口助手接收状态如下图,注意 画红线数据,有按键,5秒内没有复位,看门狗复位,重新从0开始发送,而5秒内没有按键,发送5以后就复位了。

STC89C51单片机看门狗寄存器设置如下图

追问

哇⊙∀⊙!感谢感谢☺☺☺

温馨提示:答案为网友推荐,仅供参考
相似回答