打印

请教各位,c8051f310看门狗

[复制链接]
4260|22
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
一般情况下,程序没问题。但产品使用场合各种各样,于是就想开通c8051f310的看门狗,听说是硬件狗。
可是为什么开了狗,就不正常。关狗就正常呢。我配置狗65.3ms溢出一次,在定时器3 中断服务程序中清狗。30毫秒进T3中断一次。

相关帖子

沙发
xbyu520|  楼主 | 2014-1-4 13:19 | 只看该作者
这个是我的部分程序截图

QQ图片20140104131754.jpg (18.69 KB )

QQ图片20140104131754.jpg

QQ图片20140104131749.jpg (44.98 KB )

QQ图片20140104131749.jpg

QQ图片20140104131742.jpg (30.66 KB )

QQ图片20140104131742.jpg

使用特权

评论回复
板凳
xbyu520|  楼主 | 2014-1-4 13:21 | 只看该作者
已经设置成T3 30毫秒中断一次的。看门狗65.3毫秒。应该没问题的啊

使用特权

评论回复
地板
xbyu520|  楼主 | 2014-1-4 13:22 | 只看该作者
这个是中断服务程序中清0

QQ图片20140104131754.jpg (18.69 KB )

QQ图片20140104131754.jpg

使用特权

评论回复
5
xbyu520|  楼主 | 2014-1-4 13:25 | 只看该作者
使用的外部12Mhz晶体振荡器作为sysclk 12分频后给PCA

使用特权

评论回复
6
ningling_21| | 2014-1-4 14:26 | 只看该作者
正确的做法是:
先关狗,再初始化;
在主程序中定时喂狗;
禁止在中断中喂狗。

使用特权

评论回复
7
xbyu520|  楼主 | 2014-1-4 15:33 | 只看该作者
定时器中断中喂狗,为什么不可以呢?不是一样的吗?程序要是死了,不是一样不能喂狗,然后狗自动复位,程序恢复正常。

使用特权

评论回复
8
ayb_ice| | 2014-1-4 15:57 | 只看该作者
定时喂狗是对的
但不知道你程序是否正确

未命名.JPG (35.91 KB )

未命名.JPG

使用特权

评论回复
9
ayb_ice| | 2014-1-4 15:58 | 只看该作者
RT:

未命名.JPG (15.81 KB )

未命名.JPG

使用特权

评论回复
10
xbyu520|  楼主 | 2014-1-4 16:11 | 只看该作者
刚刚百度了一下,有人说不能在中断中喂狗,理由是会发生主循环跑飞了,但是定时器中断还正常。这样狗就形同虚设了。关键是我主程序循环一遍需要较长时间,我现在选择的PCA时钟不能改(改了很多东西要重调)。喂狗  PCA0CPH4 = 0x00;只能65.3毫秒内进行,怎么办?????主程序时间已经比65.3毫秒多很多了

使用特权

评论回复
11
xbyu520|  楼主 | 2014-1-4 16:15 | 只看该作者
重新写了下最小程序,发现可以在定时器中断服务程序中掌控狗了。但主程序循环一遍需要的时间长,喂狗时间又很短65.3毫秒,该怎么处理呢?

使用特权

评论回复
12
xbyu520|  楼主 | 2014-1-4 16:31 | 只看该作者

重新写了下最小程序,发现可以在定时器中断服务程序中掌控狗了。但主程序循环一遍需要的时间长,喂狗时间又很短65.3毫秒,如果在主程序中喂狗,该怎么处理呢?

使用特权

评论回复
13
xbyu520|  楼主 | 2014-1-4 16:32 | 只看该作者


重新写了下最小程序,发现可以在定时器中断服务程序中掌控狗了。但主程序循环一遍需要的时间长,喂狗时间又很短65.3毫秒,如果在主程序中喂狗,该怎么处理呢

使用特权

评论回复
14
gx_huang| | 2014-1-4 16:58 | 只看该作者
给你一个350的参考初始化代码:
        PCA0MD&=0xbf;
        TMOD=0x02;TH0=0;TR0=1;
        PCA0MD=0x04;        //采用T0时钟输入
        PCA0CPL2=0x25;
        PCA0MD|=0x20;        //使能WDT LOCK
        PCA0MD|=0x40;        //使能WDT
        PCA0CPH2=0;                //清WDT
WDT时钟选择T0时钟,溢出周期就会很长的。
不要自己都不仔细看数据手册的。
CPS2-0=001,选择T0溢出作为时钟。

即使WDT周期短,也应该在主循环中分次插入清看门狗指令。

使用特权

评论回复
15
gx_huang| | 2014-1-4 17:00 | 只看该作者
选择了一个MCU,就意味着你需要话费一定时间搞清楚各种内部资源。

使用特权

评论回复
16
受不了了| | 2014-1-4 17:01 | 只看该作者
既然狗不能养好,以前没狗时好好的,又何必自找麻烦养狗呢

使用特权

评论回复
17
ningling_21| | 2014-1-4 17:23 | 只看该作者
xbyu520 发表于 2014-1-4 16:15
重新写了下最小程序,发现可以在定时器中断服务程序中掌控狗了。但主程序循环一遍需要的时间长,喂狗时间又 ...

改用外部的狗,1秒喂狗一次甚至更长都可以啦...

使用特权

评论回复
18
gx_huang| | 2014-1-4 17:29 | 只看该作者
ningling_21 发表于 2014-1-4 17:23
改用外部的狗,1秒喂狗一次甚至更长都可以啦...

310的WDT不可能这么短的,可以很长的。
是LZ自己没有搞清楚而已。

使用特权

评论回复
19
dirtwillfly| | 2014-1-4 20:48 | 只看该作者
把喂狗的时间设置的长一点就可以了

使用特权

评论回复
20
xbyu520|  楼主 | 2014-1-5 08:26 | 只看该作者
感谢各位朋友的热情帮助,我仔细看了一下数据手册,发现8位pwm信号频率和PCA时钟源有关,看门狗周期又和PCA时钟源有关。如果我想改变看门狗周期,pwm信号的频率就必须要改变了,pwm驱动设备要重新调整了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:工作不养闲人,团队不养懒人。赚不到钱赚知识,赚不到知识赚经历,赚不到经历赚阅历,让人迷茫的原因只有一

43

主题

853

帖子

5

粉丝