cxl 发表于 2024-8-5 12:04:33

掉电唤醒计时器的设置问题

无论给WKTCH和WKTCL设置为多少,读取的时候总是0xFF,且用掉电唤醒计时器总是5s唤醒一次,没法更改时间。
赋值语句:
WKTCH=0xAB;
WKTCL=0x11;
赋值之后立马读取WKTCH和WKTCL,发现读取到的值都是0xFF。
开启掉电唤醒定时器后,中途用外部中断多次唤醒,唤醒之后读取WKTCH和WKTCL的值,读取到的是随机的,一会儿大一会儿小,没有规律,且不修改WKTCH和WKTCL的值,发现从唤醒后再到下一次掉电唤醒定时器唤醒还是5s。
总结一下就是只要使用掉电唤醒定时器,无论怎样都都是从掉电的时候定时5s左右唤醒,不管初始的时候给WKTCH和WKTCL赋值多少;且中间唤醒后从唤醒的时刻重新计时5s,而不是从上次休眠后计时5s。
请问这个问题是什么原因呢?有啥好的解决办法没。芯片用的是STC8h1k08

DebugLab 发表于 2024-8-5 12:34:19



32767保留不能用


进入掉电模式后要nop

晓飛飛 发表于 2024-8-5 12:37:13

建议你用RTC定时器唤醒吧,休眠前重置RTC,设置5s唤醒,中间产生的外部中断能够唤醒芯片,同时不影响RTC唤醒时间。

Lkck8210 发表于 2024-8-5 13:23:49

掉电唤醒计时器当然是掉电后才开始计时啊

cxl 发表于 2024-8-5 13:56:00

Lkck8210 发表于 2024-8-5 13:23
掉电唤醒计时器当然是掉电后才开始计时啊

问题是无论给WKTCH和WKTCL设置的值是啥,总是5s唤醒一次,且外部中断后会重新计时5s(中间没更改定时器的值),而不是接续计时5s。

Lkck8210 发表于 2024-8-5 14:01:38

cxl 发表于 2024-8-5 13:56
问题是无论给WKTCH和WKTCL设置的值是啥,总是5s唤醒一次,且外部中断后会重新计时5s(中间没更改定时器的 ...

试试
WKTCL=0x11;
WKTCH=0xAB;
先赋值低位,再高位

cxl 发表于 2024-8-5 17:03:10

Lkck8210 发表于 2024-8-5 14:01
试试
WKTCL=0x11;
WKTCH=0xAB;


试过,这个没有解决,扩展寄存器打开也试过。

hsrzq 发表于 2024-8-5 18:38:03

发一下你的代码呀。如果硬件有这么明显的问题,官方不可能没发现。所以只可能是你代码的问题了

cxl 发表于 2024-8-5 21:50:38

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) {
      "定时器唤醒后的代码"
      }
    }       
}
}

cxl 发表于 2024-8-6 09:06:10

DebugLab 发表于 2024-8-5 12:34
32767保留不能用




测试了不行
页: [1] 2
查看完整版本: 掉电唤醒计时器的设置问题