单片机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);
	}
}
相关推荐
方圆工作室15 分钟前
51单片机驱动数码管
单片机·嵌入式硬件·51单片机
乔宕一1 小时前
stm32 链接脚本没有 .gcc_except_table 段也能支持 C++ 异常
c++·stm32·嵌入式硬件
_OP_CHEN2 小时前
数据结构(C语言篇):(十二)实现顺序结构二叉树——堆
c语言·数据结构·算法·二叉树·学习笔记··顺序结构二叉树
杨福瑞2 小时前
C语⾔内存函数
c语言·开发语言
范纹杉想快点毕业2 小时前
STM32 串口接收数据包(自定义帧头帧尾)
stm32·单片机·嵌入式硬件
茯苓gao2 小时前
STM32G4 电流环闭环
笔记·stm32·单片机·嵌入式硬件·学习
单片机系统设计3 小时前
基于stm32的环境监测系统/智能家居/空气质量监测系统
stm32·单片机·嵌入式硬件·毕业设计·智能家居
不知所云,4 小时前
5. STM32 时钟系统分配
stm32·单片机·嵌入式硬件
起个昵称吧5 小时前
立即数、栈、汇编与C函数的调用
c语言·开发语言·汇编
电子科技圈5 小时前
芯科科技FG23L无线SoC现已全面供货,为Sub-GHz物联网应用提供最佳性价比
科技·嵌入式硬件·mcu·物联网·制造·智能硬件·交通物流