掉电唤醒计时器的设置问题
无论给WKTCH和WKTCL设置为多少,读取的时候总是0xFF,且用掉电唤醒计时器总是5s唤醒一次,没法更改时间。赋值语句:
WKTCH=0xAB;
WKTCL=0x11;
赋值之后立马读取WKTCH和WKTCL,发现读取到的值都是0xFF。
开启掉电唤醒定时器后,中途用外部中断多次唤醒,唤醒之后读取WKTCH和WKTCL的值,读取到的是随机的,一会儿大一会儿小,没有规律,且不修改WKTCH和WKTCL的值,发现从唤醒后再到下一次掉电唤醒定时器唤醒还是5s。
总结一下就是只要使用掉电唤醒定时器,无论怎样都都是从掉电的时候定时5s左右唤醒,不管初始的时候给WKTCH和WKTCL赋值多少;且中间唤醒后从唤醒的时刻重新计时5s,而不是从上次休眠后计时5s。
请问这个问题是什么原因呢?有啥好的解决办法没。芯片用的是STC8h1k08
32767保留不能用
进入掉电模式后要nop
建议你用RTC定时器唤醒吧,休眠前重置RTC,设置5s唤醒,中间产生的外部中断能够唤醒芯片,同时不影响RTC唤醒时间。 掉电唤醒计时器当然是掉电后才开始计时啊 Lkck8210 发表于 2024-8-5 13:23
掉电唤醒计时器当然是掉电后才开始计时啊
问题是无论给WKTCH和WKTCL设置的值是啥,总是5s唤醒一次,且外部中断后会重新计时5s(中间没更改定时器的值),而不是接续计时5s。 cxl 发表于 2024-8-5 13:56
问题是无论给WKTCH和WKTCL设置的值是啥,总是5s唤醒一次,且外部中断后会重新计时5s(中间没更改定时器的 ...
试试
WKTCL=0x11;
WKTCH=0xAB;
先赋值低位,再高位 Lkck8210 发表于 2024-8-5 14:01
试试
WKTCL=0x11;
WKTCH=0xAB;
试过,这个没有解决,扩展寄存器打开也试过。 发一下你的代码呀。如果硬件有这么明显的问题,官方不可能没发现。所以只可能是你代码的问题了 hsrzq 发表于 2024-8-5 18:38
发一下你的代码呀。如果硬件有这么明显的问题,官方不可能没发现。所以只可能是你代码的问题了 ...
void sleep() {
u8 i = 0;
if "condition" {
...
...
...
if(i == NUM_OF_CMD) { // no task should be invoked
if "condition1" {
WKTCL = 0x11;
WKTCH = 0xAB;
sendDataByUartx(UART1, i-1);
sendDataByUartx(UART1, WKTCH);// 写完直接读发现是0xFF
sendDataByUartx(UART1, WKTCL);// 写完直接读发现是0xFF
} else if "condation2" {
sendDataByUartx(UART1, i-1);
sendDataByUartx(UART1, WKTCH); // condition2是由中断进来的
sendDataByUartx(UART1, WKTCL); // 此处读到的值是随机的,忽大忽小,正常在一个计数周期内向上计数应该越来越大,向下计数应该越来越小才对,且此处没有修改休眠值,从这里开始到下次休眠启动却还是5s,不是接续计时而像是重新计时
}
else {
WKTCH = 0x00;// 情况3不需要启动定时唤醒
}
PCON |= 0x02;// 休眠
_nop_();_nop_();
_nop_();_nop_();
_nop_();_nop_();
sendDataByUartx(UART1, i+2); // 如果外部中断唤醒,此处的值随机,如果定时器唤醒
sendDataByUartx(UART1, WKTCH);// 前几次计时满读出来是0xFF,最后一次是0x7F
sendDataByUartx(UART1, WKTCL);//除外部中断唤醒外每次读出来都是0xFF
if(WKTCL == 0xFF && WKTCH == 0xFF) {
"定时器唤醒后的代码"
}
}
}
} DebugLab 发表于 2024-8-5 12:34
32767保留不能用
测试了不行
页:
[1]
2