[PIC®/AVR®/dsPIC®产品] PIC12F683单片机休眠,看门狗唤醒复位了?

[复制链接]
 楼主| 发表于 2014-5-13 12:06 | 显示全部楼层 |阅读模式
本帖最后由 WT418995874 于 2014-5-15 10:21 编辑

是这样的,休眠状态下看门狗溢出不应该是执行休眠之后的程序么?也就是唤醒休眠的。

看门狗在没休眠状态下,溢出才会复位的。是这样么?
发表于 2014-5-13 14:14 | 显示全部楼层
不是!看门狗复位都是从头开始执行程序
 楼主| 发表于 2014-5-13 14:37 | 显示全部楼层
tozxq 发表于 2014-5-13 14:14
不是!看门狗复位都是从头开始执行程序

休眠状态下,我开看门狗,溢出后是复位还是将cpu唤醒继续执行下一条语句?
 楼主| 发表于 2014-5-13 14:38 | 显示全部楼层
tozxq 发表于 2014-5-13 14:14
不是!看门狗复位都是从头开始执行程序


看看这个

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2014-5-13 15:01 | 显示全部楼层
没听说不是从头的。
发表于 2014-5-13 15:03 | 显示全部楼层
你那可能只是翻译的不太准确造成的错误理解,可以看英文的。
发表于 2014-5-13 15:59 | 显示全部楼层
是楼主说对了,刚我看了下数据手册,不同型号,看门狗唤醒结果确实不同
PIC12F508数据手册中的《特殊寄存器的初始化》表:


再看看PIC16F883数据手册中的情况:


12F508看门狗唤醒,电平变化唤醒,PCL的值是从头开始的,PIC16F883中却不相同,看门狗唤醒,电平变化唤醒都是原PC值+1;所以楼主的理解是正确的,具体看楼主使用的是什么型号的CPU了,详情查看对于的数据手册。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

参与人数 1威望 +3 收起 理由
grasswolfs + 3 赞一个!

查看全部评分

 楼主| 发表于 2014-5-13 18:30 | 显示全部楼层
tozxq 发表于 2014-5-13 15:59
是楼主说对了,刚我看了下数据手册,不同型号,看门狗唤醒结果确实不同
PIC12F508数据手册中的《特殊寄存器 ...

谢谢。
我也看了手册,我用的是12F683单片机
跟你第二个图一样,这样在休眠中,看门狗只会唤醒,不会复位的是吧
但是在唤醒时它还是复位了。
 楼主| 发表于 2014-5-13 18:32 | 显示全部楼层
yewuyi 发表于 2014-5-13 15:01
没听说不是从头的。

看门狗在休眠唤醒会复位?
发表于 2014-5-14 08:20 | 显示全部楼层
WT418995874 发表于 2014-5-13 18:32
看门狗在休眠唤醒会复位?

我所使用过的型号,都是复位。
发表于 2014-5-14 08:24 | 显示全部楼层
WT418995874 发表于 2014-5-13 18:32
看门狗在休眠唤醒会复位?

程序中有无清看门狗动作?是否是非休眠状态未清看门狗造成的复位?从上面的表可见非休眠状态看门狗复位时,程序从头开始执行。
 楼主| 发表于 2014-5-14 21:39 | 显示全部楼层
yewuyi 发表于 2014-5-14 08:20
我所使用过的型号,都是复位。

我现在用12f683
 楼主| 发表于 2014-5-14 21:43 | 显示全部楼层
tozxq 发表于 2014-5-14 08:24
程序中有无清看门狗动作?是否是非休眠状态未清看门狗造成的复位?从上面的表可见非休眠状态看门狗复位时 ...

我程序中没加清看门狗,我在主循环就休眠,在进入主循环就设置就看门狗的时间及打开看门狗,然而这样好像会复位。
在非休眠状态会复位,在休眠状态测试了一次,好像也是复位。
但手册讲的好像可以在休眠状态唤醒不复位,在非休眠状态复位
发表于 2014-5-15 08:43 | 显示全部楼层

确实讲的不会复位,但是我也没亲自试过……
你可以试试在sleep指令之后尽量快的连续进行清狗动作并重新配置看看门狗或直接关掉看门狗

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| 发表于 2014-5-15 09:27 | 显示全部楼层
zhimagod 发表于 2014-5-15 08:43
确实讲的不会复位,但是我也没亲自试过……
你可以试试在sleep指令之后尽量快的连续进行清狗动作并重新配 ...

谢谢,已经有答案了。楼下我的答案
 楼主| 发表于 2014-5-15 09:29 | 显示全部楼层
  1. //        OSCTUNE = 0X0F;//振荡器校准
  2.         CMCON0 = 0X07;//比较器设置 关闭比较器
  3.         TRISIO=0B00001000;//初始化GP0输出方向

  4.         ANSEL = 0x00; //取消模拟输入 配置为数字io
  5.         GP5 = 0;//所有IO置高
  6.         GP4 = 1;//所有IO置高
  7.         GP3 = 1;//所有IO置高
  8.         GP2 = 1;//所有IO置高
  9.         GP1 = 1;//所有IO置高
  10.         GP0 = 1;//所有IO置高

  11.         GP5 = 1;
  12.         OPTION_REG = 0x0D;//看门狗 32分频 18ms * 32 = 576ms
  13.        
  14.         while(1)
  15.         {
  16.                 GP5 = 1;
  17.                 SWDTEN = 1;
  18.                 CLRWDT();
  19.                 SLEEP();
  20.                 NOP();
  21.                 SWDTEN = 0;
  22.                 GP4 = 0;
  23.                 GP5 = 0;
  24.                 SWDTEN = 1;
  25.                 CLRWDT();
  26.                 SLEEP();
  27.                 NOP();       
  28.                 SWDTEN = 0;       

  29.                

  30.         }
上面测试代码
 楼主| 发表于 2014-5-15 10:20 | 显示全部楼层
测试代码说明:用两个led测试(高电平点亮,拉电流点亮) led1接GP5  led2接GP4
1、led1 led2 在初始化时候置高,led全亮。
2、进入大循环,休眠576ms,等待看门狗溢出唤醒
3、唤醒后,led1熄灭,led2也熄灭,(led2不会再点亮,而且可以明显看出是否复位,如果复位了,led2会再次点亮,但实验证明led2只亮一次),然后再次休眠
4、再次唤醒后,led1再次点亮。所以该测试led1会闪烁,led2在上电瞬间会闪一下。
5、循环... ...
发表于 2014-12-10 22:45 | 显示全部楼层
   假设 ,我现在单片机需要看门狗复位,但是有一个条件就是如果 检测adc的电流小于1A就继续休眠,大于1A就被唤醒,请问各位有什么好点子吗? 纯软件唤醒和休眠(掉电模式的休眠,)
发表于 2014-12-14 18:26 | 显示全部楼层
不同的单片机,有的看门狗唤醒是复位,程序从头开始执行,比如12F508,10F200
有的看门狗唤醒是继续执行下一条指令,比如12F629,12F683
这一点,需要从手册中仔细查看才行
发表于 2014-12-31 12:34 | 显示全部楼层
我用PIC16LF1823,SLEEP中WDT唤醒,执行下一条。其他情况复位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

78

帖子

2

粉丝
快速回复 返回顶部 返回列表