PIC16F877A 看门狗定时器(WDT)

//PIC.H中定义了宏   #define CLRWDT()  asm("clrwdt")因此在PICC的c语言中可以直接使用CLRWDT()对WDT清0
//若单片机WDT使能,在适当位置加入CLRWDT(),程序进入正常运行时,每隔一定时间均会执行CLRWDT()语句对WDT清0,芯片不会复位
//如果程序陷入死循环,不会执行到CLRWDT()语句,则超出所设定的时间后,WDT溢出使芯片复位,从头(000H)开始执行,单片机恢复正常运行
//PIC16F单片机,看门狗定时器的启用只能在芯片的烧写时确定,即无法用软件来开启或关闭WDT,但在PIC16f88X中可以。
//PIC16单片机的WDT基本溢出时间为18MS,由RC充放电时间确定,在-40~85度之间变化时,WDT基本溢出时间在7-33ms变化
#include<pic.h>
__CONFIG(0X3F3D);//开启WTD
void DELAY(unsigned int);
#define LED1 RB1
main(void)
{
TRISB=0B11111101;
OPTION=0B11111011;  //WDT的分频比为1:8,最大复位时间为18*8=144ms
if(TO==0)// 若写成T0,则编译出错。。。
{
  LED1=1;  //看门狗定时器溢出,仿真时溢出TO不会清零
}
else
  LED1=0;
while(1)
{
  DELAY(100);//模拟一个运行100ms的子程序
  CLRWDT();
  DELAY(200);//模拟一个运行200ms的子程序,时会产生溢出(200ms>144ms)
  CLRWDT();
};
}
void DELAY(unsigned int n)
{
unsigned int j;
char k;
for(j=0;j<n;j++)
  for(k=246;k>0;k--)
NOP();
}

posted @ 2012-06-28 17:52  平湖之下  阅读(2057)  评论(1编辑  收藏  举报