求大神 stc15单片机 看门狗 复位时 怎么跳到程序跑偏的位置 30
求大神,以下是看门狗的一些简单程序,我的问题是看门狗复位时怎么跳到while(1)循环中去,不要去点亮LED1了;#include<STCIAP15W4K58S4.H>s...
求大神,以下是看门狗的一些简单程序,我的问题是 看门狗 复位时 怎么跳到while(1)循环中去,不要去点亮LED1了;
#include <STCIAP15W4K58S4.H>
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
void delay1(unsigned int t) //T=t*2+5 us
{
unsigned int i ,j;
for (i=t;i>0;i--)
for(j=497;j>0;j--);
}
void main ()
{
WDT_CONTR=0x3c;
LED2=0;
LED1=1;
delay1(500);
LED1=0;
delay1(500);
while(1)
{
WDT_CONTR=0x3c;
delay1(1000);
}
}
前面while(1)
{
没有 WDT_CONTR=0x3c;这一句,就是while(1)循环不去喂狗
} 展开
#include <STCIAP15W4K58S4.H>
sfr IAP_CONTR = 0xC7; //0000,x000 EEPROM控制寄存器
sfr WDT_CONTR = 0xC1; //0000,0000 看门狗控制寄存器
void delay1(unsigned int t) //T=t*2+5 us
{
unsigned int i ,j;
for (i=t;i>0;i--)
for(j=497;j>0;j--);
}
void main ()
{
WDT_CONTR=0x3c;
LED2=0;
LED1=1;
delay1(500);
LED1=0;
delay1(500);
while(1)
{
WDT_CONTR=0x3c;
delay1(1000);
}
}
前面while(1)
{
没有 WDT_CONTR=0x3c;这一句,就是while(1)循环不去喂狗
} 展开
1个回答
展开全部
看门狗复位就跟按复位按钮一样,程序重头运行,你控制不了的。要实现你的目标,只能防止看门狗不运行,即程序不死机。或者也有其他的技巧,如第一次运行设置一个标志存储于EEPROM中,下次启动读取该标志表明是第二次或看门狗复位引起就忽略LED点亮指令。
追问
谢谢你,追问下,看门狗 IDLE_WDT是起什么作用的
还有END_WDT这一位是看门狗启动位,那我启动了之后想关掉看门狗要怎么弄
追答
看下STC的文档吧,很清楚的。你要关掉相反操作就行了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询