STC15W系列单片机休眠唤醒与看门狗配置问题


本次是记录自己在STC单片机低功耗模式下使用过程中遇到的一些问题。本来想这是一件简单的事情,三下五除二就能解决问题了。在实际配置中却遇到了一些波折,在这里做一个学习记录,方便以后自己查看。

关于STC单片机之定时器唤醒与看门狗寄存器配置

最开始的时候,我先完计数周期配置,最后再使能定时器唤醒。结果不论怎么配置,总时间都不变。经过多次测试摸索,最后确定WKTCH寄存器要一次完成写入配置。

正确配置,如:
void sy_sys_wakeup(void){
	unsigned short timer = 0;
//	 timer = 16384;
	   timer = 8192;//唤醒时间
	 if(timer>=0x7fff)timer = 0x7fff;
 	 timer |= 0x8000;
     WKTCL = timer%256; 
     WKTCH = timer/256;    
}
错误配置,如:
void sy_sys_wakeup(void){
	unsigned short timer = 0;
//	 timer = 16384;
	 timer = 8192;//唤醒时间
	 if(timer>=0x7fff)timer = 0x7fff;
     WKTCL = timer%256; 
     WKTCH = timer/256;    
     WKTCH  |=0x80;
}

硬件看门狗

STC15单片机看门狗配置起来很简单,只需要配置一个寄存器就好了。当然了,现实中,如果没有遇到一点点曲折,我也不会写这篇文章了。
故事事这样的:最开始的时候,我已经配置好休眠唤醒了,单片机利用唤醒寄存器,进行周期唤醒。即,单片机配置为: PCON |= 0x02。最后实测发现,我配置看门狗复位为2秒,结果经过了1分钟也没有出现复位重启问题。开始怀疑自己配置问题,查阅芯片手册,研究来研究去,也没有发现自己配置上的错误。后面经过了大半天时间,猜想到会不会是休眠计数器不走引起的呢?
后面一试将PCON |= 0x02注释掉,结果就正常复位了。验证了自己猜想。

硬件看门狗配置

这个配置起来很简单,具体参考STC用户手册即可。如下,是自己配置的一个参考:

void sy_sys_dog_init(void){
	 WDT_CONTR = 0x27;  //配置为最长周期
}
void sy_dog_load(void)
{
	 WDT_CONTR |= 0x10;      //启动看门狗
	
}

主程序参考配置

void mian(void){
................
sy_sys_wakeup(); //定时唤醒
sy_sys_dog_init();
while(1){
 
        //  usaer handle
		sy_dog_load();
		PCON |= 0x02;         
		_nop_();           
		_nop_();
		_nop_();
}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值