单片机C语言实例:13、看门狗

一、看门狗溢出测试

程序实例1:

cpp 复制代码
#include<reg52.h>

sfr  WDTRST  =   0xA6;			 	

sbit key = P3^1;		 

/*------------------------------------------------
                    喂狗
------------------------------------------------*/
void Rst_Watchdog( void )
{
	WDTRST  = 0x1E; //先赋值1E 然后赋值E1
    WDTRST  = 0xE1;
}

/*------------------------------------------------
                    主函数
------------------------------------------------*/
void main( void )
{
	int i;
	                            // 设置看门狗时间为1个时钟循环后
	Rst_Watchdog();
	     	                    //关看门狗一个时钟循环
	for( i = 0; i < 500; i++)
	{
		Rst_Watchdog();                
	}
    P1=0x00;
	while(!key)                 //按下按键不松开,表示程序一直在按键处循环,并用LED显示0x55
	{
		P1=0x55; 	                //模拟出错 正常情况应该一直显示LED,
                                //但是加看门狗之后不间断复位,倒是LED闪烁
	}
}

二、按键喂狗

程序实例2:

cpp 复制代码
#include <reg52.h>

sfr WDTRST = 0xA6;

sbit  K1 = P3^0; 
sbit  K2 = P3^1;
sbit  LED1=P1^1;
sbit  LED2=P1^2;

void DelayUs2x(unsigned char t);//us级延时函数声明 
void DelayMs(unsigned char t); //ms级延时
/*------------------------------------------------
                    主函数
------------------------------------------------*/
main()
{
   LED1=0;
   DelayMs(100);
   LED1=1;
   DelayMs(100);

   TMOD=0x01;
   TH0=0xc6;      //定时16ms
   TL0=0x66;
   EA=1;
   ET0=1;

   WDTRST=0x1e;   //在程序初始化中激活看门狗。
   WDTRST=0xe1;   //先送1E,后送E1

   if(K1==0)
   {
     TR0=1;
   }

   while(1)
   {    
     if(K2==0)
     {
       TR0=0;
     }
	 LED2=1;
	 LED1=1;
	 DelayMs(100);
	 LED2=0;
	 DelayMs(100);
   }
}
/*------------------------------------------------
              定时器中断函数
------------------------------------------------*/
void Time0(void) interrupt 1
{
   TH0=0xc6;      //定时16ms
   TL0=0x66;

   WDTRST=0x1e;   //喂狗指令
   WDTRST=0xe1;
}

/*------------------------------------------------
 uS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编,大致延时
 长度如下 T=tx2+5 uS 
------------------------------------------------*/
void DelayUs2x(unsigned char t)
{   
	while(--t);
}
/*------------------------------------------------
 mS延时函数,含有输入参数 unsigned char t,无返回值
 unsigned char 是定义无符号字符变量,其值的范围是
 0~255 这里使用晶振12M,精确延时请使用汇编
------------------------------------------------*/
void DelayMs(unsigned char t)
{
     
	while(t--)
	{
		//大致延时1mS
		DelayUs2x(245);
		DelayUs2x(245);
	}
}
相关推荐
SuperByteMaster7 小时前
keil 工程 .gitignore配置文件
c语言
LCG元10 小时前
STM32项目实战:基于STM32F103的智能农业监控系统
stm32·单片机·嵌入式硬件
ACP广源盛1392462567310 小时前
IX8024与科学大模型的碰撞@ACP#筑牢科研 AI 算力高速枢纽分享
运维·服务器·网络·数据库·人工智能·嵌入式硬件·电脑
老花眼猫11 小时前
编制椭圆旋转绘图函数
c语言·经验分享·青少年编程·课程设计
一起搞IT吧12 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
Truffle7电子12 小时前
STM32CubeIDE/Programmer/Touch GFX 应用
stm32·单片机·嵌入式硬件
constant_LDX13 小时前
步进电机开发(一、硬件设计)
单片机·嵌入式硬件
北山有鸟14 小时前
修改源码法和插件法
嵌入式硬件·学习
richxu2025100114 小时前
嵌入式学习之路->stm32篇->(14)通用定时器(上)
stm32·单片机·嵌入式硬件·学习
Deitymoon14 小时前
STM32——串口通信(USART)
单片机·嵌入式硬件