单片机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);
	}
}
相关推荐
重生之我在20年代敲代码11 分钟前
strncpy函数的使用和模拟实现
c语言·开发语言·c++·经验分享·笔记
2401_858286113 小时前
52.【C语言】 字符函数和字符串函数(strcat函数)
c语言·开发语言
jiao000015 小时前
数据结构——队列
c语言·数据结构·算法
铁匠匠匠5 小时前
从零开始学数据结构系列之第六章《排序简介》
c语言·数据结构·经验分享·笔记·学习·开源·课程设计
C-SDN花园GGbond5 小时前
【探索数据结构与算法】插入排序:原理、实现与分析(图文详解)
c语言·开发语言·数据结构·排序算法
Navigator_Z7 小时前
数据结构C //线性表(链表)ADT结构及相关函数
c语言·数据结构·算法·链表
菜菜想进步7 小时前
内存管理(C++版)
c语言·开发语言·c++
知星小度S7 小时前
C语言——自定义类型
c语言·开发语言
redcocal7 小时前
地平线秋招
python·嵌入式硬件·算法·fpga开发·求职招聘