这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » STC51单片机实例之15看门狗实验

共4条 1/1 1 跳转至

STC51单片机实例之15看门狗实验

高工
2014-05-17 01:29:35     打赏
/********************************************************************
* 文件名  :  宏晶看门狗.c
* 描述    :  看门狗是单片机开发中很重要的一个实验。可以说每个工程开发的单片机代码中,都会用到看门狗。
             每隔一定时间就要进行“喂狗”,如果没有操作,那么代码就会开头重新开始运行。
			 看门狗可以解决程序经过干扰,程序跑飞后,程序的自己恢复。			 

***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sfr WDTRST = 0xA6;		   //声明看门狗寄存器

uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar Count;

/********************************************************************
* 名称 : Time0_Init()
* 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Init()
{
	TMOD = 0x01;
	IE 	 = 0x82;
	TH0  = 0xee;
	TL0  = 0x00;	
	TR0 = 1;		
}

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
	uchar x,j;
	for(j=0;j<i;j++)
	for(x=0;x<=148;x++);	
}

/********************************************************************
* 名称 : Time0_Int()
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Int() interrupt 1
{
	TH0 = 0xee;
	TL0 = 0x00;
	Count++;			//长度加1
	WDTRST = 0x1e;      //这里进行喂狗,如果没有这两行,单片机就为因为没有喂狗,单片机就会运行5毫秒,就重新复位,就会一直看到开发板上显示的00?
	WDTRST = 0xe1;		
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
	uchar LED_Buffer; 
	Time0_Init();
	WDTRST = 0x1e;
	WDTRST = 0xe1;
	while(1)
	{
		Count = 0;
		while(Count<20)
		{
			P0 = table[LED_Buffer / 10 % 10];
			P2 = 6;
			Delay_1ms(5);
			P0 = table[LED_Buffer % 10];
			P2 = 7;
			Delay_1ms(5);		
		}
		LED_Buffer++; 
	} 			
}

 

/********************************************************************
* 文件名  :  宏晶看门狗.c
* 描述    :  看门狗是单片机开发中很重要的一个实验。可以说每个工程开发的单片机代码中,都会用到看门狗。
             每隔一定时间就要进行“喂狗”,如果没有操作,那么代码就会开头重新开始运行。
			 看门狗可以解决程序经过干扰,程序跑飞后,程序的自己恢复。
             数码管上会显示0--9,如果没有“喂狗”,就会重新显示0开始。大家可以改变看门狗的相关值。			 

***********************************************************************/
#include<reg52.h>
#define uchar unsigned char
#define uint  unsigned int

sfr WDT_CONTR = 0xE1;		   //声明寄存器

uchar table[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
uchar Count;

/********************************************************************
* 名称 : Time0_Init()
* 功能 : 定时器的初始化,定时时间可用光碟中软件计算,11.0592MZ晶振,10ms
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Init()
{
	TMOD = 0x01;
	IE 	 = 0x82;
	TH0  = 0x4c;
	TL0  = 0x00;	
	TR0 = 1;		
}

/********************************************************************
* 名称 : Delay_1ms()
* 功能 : 延时,延时时间为 10ms * del
* 输入 : del
* 输出 : 无
***********************************************************************/
void Delay_1ms(uint i)
{
	uchar x,j;
	for(j=0;j<i;j++)
	for(x=0;x<=148;x++);	
}

/********************************************************************
* 名称 : Time0_Int()
* 功能 : 定时器中断,中断中实现 Count 加一
* 输入 : 无
* 输出 : 无
***********************************************************************/
void Time0_Int() interrupt 1
{
	TH0 = 0x4c;
	TL0 = 0x00;
	Count++;			//长度加1
}

/********************************************************************
* 名称 : Main()
* 功能 : 主函数
* 输入 : 无
* 输出 : 无
***********************************************************************/
void main()
{
	uchar LED_Buffer; 
	Time0_Init();
	WDT_CONTR = 0x3f;
	while(1)
	{
		Count = 0;
		while(Count<20)
		{
			P0 = table[LED_Buffer / 10 % 10];
			P2 = 6;
			Delay_1ms(5);
			P0 = table[LED_Buffer % 10];
			P2 = 7;
			Delay_1ms(5);		
		}
		LED_Buffer++; 
		//WDT_CONTR = 0x3f;	 	//没有这条语句时,当看门狗溢出时(这里设的是9秒),看门狗会复位。 							
	} 			
}

 


高工
2014-05-17 18:15:15     打赏
2楼
以前试过用按键激活看门狗复位,好多乱七八糟的问题

菜鸟
2014-06-08 17:21:02     打赏
3楼
希望楼主可以把相应的电路图也贴出来的

菜鸟
2014-06-08 17:21:10     打赏
4楼
希望楼主可以把相应的电路图也贴出来的

共4条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]