MCU

看门狗

0
阅读(2559)

/*--------------------------------------------------------------------
程 序名称:看门狗使用
程序功能:看门狗程序是借助于八个发光二极管同时亮灭程序来实现的,教用户如何使用
看门狗
注意事项:在电路板 上把LED-J1用跳线帽连接上
提示说明:间隔时间可在程序当中调节
--------------------------------------------------------------------*/

#include <iom16v.h>
#include <macros.h>

/***********************************************/
#define osccal 0x7d 
//ATMEGA8单片机使用内部8M  RC 振荡器,校正常数0x7d
/***********************************************/

#define LED_DDR  DDRA
#define LED_PORT PORTA

/**********************************************
                  延时函数
**********************************************/
void delay_us(unsigned int delay_counter)//延时1us
  {
    do
  {
   delay_counter--;
  }
 while(delay_counter>1);
  }
 
void delay_ms(unsigned int delay_counter)//延时1ms
  {
    while(delay_counter!=0)
   {
     delay_us(1000);
  delay_counter--;
   }
  }
 
/*********************************************
          看门狗初始化
**********************************************/
 
void watchdog_init(void)
{
 _WDR(); //初始化前先喂狗
 WDTCR = 0x1F; //重新设定看门狗定时器的预分频参数时,WDCE也必须先置1
 
 //delay_ms(2);//延时500ms
 
 WDTCR = 0x0F; //看门狗使能,使用2048K分频
}

/*********************************************
               主程序
*********************************************/
void main(void)
{
  OSCCAL="osccal";//内部RC校正常数为0x7d
  LED_DDR=0xff;//初始化LED数据口为输出口
  LED_PORT=0x00;//初始化LED数据口为0,全亮
  watchdog_init();
 
  while(1)
  {
    //_WDR(); //看门狗计数清零,也就是喂狗
 /*注:用户可以把上面这句话去掉,看看显示效果,会和正常时不一样,因为单片机经常复位*/
 delay_ms(500);// 延时500ms
    LED_PORT^=0xff;//LED数据口取反
  } 
}