51复位难道不是从程序开始处执行吗?看看这现象

2020-02-05 09:12发布

本帖最后由 zuu0 于 2012-5-31 17:31 编辑

void main()
{
  启动画面
  延时2秒
  
  其它功能初始化
  开看门狗  //1秒 小于上面的延时 stc  WOD_CONr=0X3C
  while(1)
  {
    ........
   喂狗       
  }

}


现象: 正常上电启动,程序正常,每次上电都工作正常

按下复位键:启动画面 一直在闪烁,也就是没有喂狗。

为什么???按复位键后和上电 程序难道还不是从一个地方开始执行?

在延时2秒那段程序里不断喂狗,工作正常。郁闷啊
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
11条回答
BXAK
1楼-- · 2020-02-05 20:46
 精彩回答 2  元偷偷看……
zuu0
2楼-- · 2020-02-05 21:09
我重新挑了一部分程序上来
整个程序48K,不好发上来
jjl3
3楼-- · 2020-02-05 22:19
推测:上电时,看门狗默认状态是关闭的,所以不影响你在LCD操作中的大量延时,而reset不能改变看门狗已经开启的状态,因而由于LCD操作中大量延时造成看门狗复位,lz可以通过改长看门狗复位时间来验证,比如改为10s试试
zuu0
4楼-- · 2020-02-05 22:34
第一次发现,上电复位和手动按键复位,竟然还不一样
BXAK
5楼-- · 2020-02-06 00:09
zuu0 发表于 2012-6-1 08:03
程序开始关狗,没用,。试过了

大师有空试一下,好像都是这样,我想不明白,吃不好,睡不好

前面说错了,看门狗启动后软件无法关闭,
修改如下

void main(void)
{
     WDT_CONTR = 0x35;           //启动看门狗,2.2s @ 11.0592M,空闲不计数
     LCMInit();                             //LCM初始化,即LCD模块初始化
     WDT_CONTR |= 0x10;          //清看门狗
     Start();                                //程序起动画面
     WDT_CONTR |= 0x10;          //清看门狗

     while(1)
     {
          DisplayListChar(0, 0, "ABCDEF0123456789",16);
          DelayNms(10);
          WDT_CONTR |= 0x10;          //清看门狗
     }
}

一周热门 更多>