slf057 发表于 2022-11-28 16:25:13

STC的掉电唤醒定时器设计很独特

STC的掉电唤醒定时器设计很独特:
不用进入中断程序,就可以掉电唤醒了。
特别适合用于低功耗电路。
如果对时间要求不高,可以直接作为时基信号。
最长定时达15.89S,无需再设,直接进入循环状态。
像STC15F104W居然也具备这个功能。
使用超简单。


神农鼎 发表于 2024-6-13 18:34:32









zfgansuchina 发表于 2023-1-5 09:51:48

问题是这个16秒太短了,想搞个半小时怎么办呢?

神农鼎 发表于 2023-1-5 10:19:26

那就唤醒后计数,未到时间立即再进低功耗,
或者用有 RTC 的 STC8H8K64U 系列


神农鼎 发表于 2023-1-5 10:21:30







zfgansuchina 发表于 2023-1-5 10:43:16

神农鼎 发表于 2023-1-5 10:19
那就唤醒后计数,未到时间立即再进低功耗,或者用有 RTC 的 STC8H8K64U系列

...

我觉得您说的唤醒后立即又进入掉电,循环若干次,这样可行。

神农鼎 发表于 2023-1-5 10:51:20

基本都是这样,平均电流也就增加个 0.1uA 附近

wsr2580 发表于 2023-2-14 16:10:06

本帖最后由 wsr2580 于 2023-2-14 16:26 编辑

大家好,我也在搜索这个信息,但是我没有实现这个需求。

我的产品用的单片机是STC8G1k08,因为我有多个唤醒源唤醒这个单片机,每个唤醒源都执行不同的行为。因为我所用的其他唤醒源都可以进入中断改变状态,而这个不行。

我现在的问题是,如何知道确实是掉电唤醒定时器进行的唤醒,在文档中提到:
掉电唤醒之后,可以通过读 WKTCH 和 WKTCL 中的内容获取单片机在掉电模式中的睡眠时间。
但是,我该怎么读取这个值呢?

      c = 0xaa;
      printf("------%c %c------\n", WKTCH, *c);
      c = 0xab;
      printf("------%c %c------\n", WKTCL, *c);

我用上面的代码发现串口打印的数据是:
2D 2D 2D 2D 2D 2D FF 20 00 2D 2D 2D 2D 2D 2D 0A 2D 2D 2D 2D 2D 2D FF 20 00 2D 2D 2D 2D 2D 2D 0A 2D 2D 2D 2D 2D 2D FF 20 00 2D 2D 2D 2D 2D 2D 0A 2D 2D 2D 2D 2D 2D FF 20 00 2D 2D 2D 2D 2D 2D 0A
WKTCH值为FF,0xaa的值为00;请问我该如何判断?

附件是我最小项目,谢谢!

wsr2580 发表于 2023-2-15 13:03:37

神农鼎 发表于 2023-1-5 10:21


请问能否看看这个帖子我的问题。谢谢

梁工 发表于 2023-2-15 16:11:12

WKTCH 和 WKTCL 是特殊功能寄存器,直接读取即可。
比如:i=WKTCH;j = WKTCL;

wsr2580 发表于 2023-2-16 09:19:17

梁工 发表于 2023-2-15 16:11
WKTCH 和 WKTCL 是特殊功能寄存器,直接读取即可。
比如:i=WKTCH;j = WKTCL;

我试试,你的意思是我创建两个变量:
u8 i,j;
然后进行这个赋值,然后我和我设置的初始原址进行比较,如果小于,则代表是由其他进行的唤醒,如果等于代表是由这个掉电唤醒定时器进行的唤醒。
1. 是这样的意思吗?
2. 有没有专门的寄存器告诉我触发唤醒源是哪个呢?
页: [1] 2 3 4 5
查看完整版本: STC的掉电唤醒定时器设计很独特