单片机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);
	}
}
相关推荐
祈安_2 天前
C语言内存函数
c语言·后端
norlan_jame4 天前
C-PHY与D-PHY差异
c语言·开发语言
czy87874754 天前
除了结构体之外,C语言中还有哪些其他方式可以模拟C++的面向对象编程特性
c语言
悠哉悠哉愿意4 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
m0_531237174 天前
C语言-数组练习进阶
c语言·开发语言·算法
Lester_11014 天前
STM32霍尔传感器输入口设置为复用功能输入口时,还能用GPIO函数直接读取IO的状态吗
stm32·单片机·嵌入式硬件·电机控制
LCG元4 天前
低功耗显示方案:STM32L0驱动OLED,动态波形绘制与优化
stm32·嵌入式硬件·信息可视化
三佛科技-187366133974 天前
120W小体积碳化硅电源方案(LP8841SC极简方案12V10A/24V5A输出)
单片机·嵌入式硬件
z20348315204 天前
STM32F103系列单片机定时器介绍(二)
stm32·单片机·嵌入式硬件
Z9fish4 天前
sse哈工大C语言编程练习23
c语言·数据结构·算法