找回密码
 立即注册
楼主: STC_STC

掉电唤醒定时器请教

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:201
  • 最近打卡:2025-10-16 11:05:25

77

主题

6778

回帖

1万

积分

超级版主

积分
14394
发表于 2023-5-12 13:09:37 | 显示全部楼层
STC_*** 发表于 2023-5-12 11:50
现在可以了,问题在于我每次进掉电模式都设置了掉电唤醒定时器一次,可以看我帖子里程序截图。
你可以试 ...

我都是每次进掉电模式前都设置掉电唤醒定时器,没有问题。

#define MAIN_Fosc                11059200L        //定义主时钟

#include        "..\..\STC8Hxxx.h"

/*************        本地函数声明        **************/
void          delay_ms(u8 ms);
void        SetWakeUpTime(u16 SetTime);

//========================================================================
// 函数: void main(void)
// 描述: 主函数.
// 参数: none.
// 返回: none.
// 版本: VER1.0
// 日期: 2018-4-25
// 备注:
//========================================================================
void main(void)
{
        //IO口设置, 用户可根据自己具体情况设置
        P0M1 = 0x00;        P0M0 = 0x00;        //P0设置为准双向口
        P1M1 = 0x00;        P1M0 = 0x00;        //P1设置为准双向口
        P2M1 = 0x00;        P2M0 = 0x00;        //P2设置为准双向口
        P3M1 = 0x00;        P3M0 = 0x00;        //P3设置为准双向口
        P4M1 = 0x00;        P4M0 = 0x00;        //P4设置为准双向口
        P5M1 = 0x00;        P5M0 = 0x00;        //P5设置为准双向口
        P6M1 = 0x00;        P6M0 = 0x00;        //P6设置为准双向口
        P7M1 = 0x00;        P7M0 = 0x00;        //P7设置为准双向口
       
        while(1)
        {

                SetWakeUpTime((3000 * 2048L) / 1000);        //定时值 n = T * (Fwkt/16) / 1000, T单位为ms, 最大值16000.
               
                PCON |= 0x02;        //Sleep
                _nop_();
                _nop_();
                _nop_();
                _nop_();
               
                P32 = 0;        //点亮一个LED指示醒来
                delay_ms(10);        //delay 10 ms
                P32 = 1;        //灭LED
        }

}

//========================================================================
// 函数: void        SetWakeUpTime(u16 SetTime)
// 描述: 唤醒定时器设置时间值函数。
// 参数: SetTime: 要设置的时间值(睡眠的时间), 单位为ms.
// 返回: none.
// 版本: VER1.0
// 日期: 2018-4-25
// 备注:
//========================================================================
void        SetWakeUpTime(u16 SetTime)
{
        if(SetTime > 0)        SetTime--;
        WKTCL = (u8)SetTime;
        WKTCH = (u8)(SetTime >> 8) | 0x80;
}


//========================================================================
// 函数: void  delay_ms(u8 ms)
// 描述: 延时函数。
// 参数: ms,要延时的ms数.
// 返回: none.
// 版本: VER1.0
// 日期: 2018-4-25
// 备注:
//========================================================================
void  delay_ms(u8 ms)
{
        u16 i;
        do
        {
                i = MAIN_Fosc / 10000L;
                while(--i)        ;
        }while(--ms);
}

回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:533
  • 最近打卡:2025-10-16 13:14:51
已绑定手机

47

主题

2274

回帖

7999

积分

论坛元老

积分
7999
发表于 2023-5-12 13:10:34 | 显示全部楼层
STC_*** 发表于 2023-5-12 11:50
现在可以了,问题在于我每次进掉电模式都设置了掉电唤醒定时器一次,可以看我帖子里程序截图。
你可以试 ...

哪怕每次进掉电模式前都重新设置一遍也不会有问题的

你可以在我的例程上面修改,将掉电唤醒定时器设置代码移到休眠前试试
1.png

回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:287
  • 最近打卡:2025-03-27 14:28:57

24

主题

79

回帖

293

积分

中级会员

积分
293
发表于 2023-5-12 14:42:36 | 显示全部楼层
那就不知道了,奇怪,我只是把设置放到初始化就好了,其他什么都没有动。按道理,芯片型号也不影响吧,我用的是1MHZ HIRC.
先完成其他功能做样给客户吧,后面再找找原因了。

谢谢两位的帮助,谢谢!

点评

好的 有疑问再跟帖  详情 回复 发表于 2023-5-13 09:07
回复

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:204
  • 最近打卡:2025-09-24 08:50:50
已绑定手机

97

主题

997

回帖

2754

积分

超级版主

积分
2754
QQ
发表于 2023-5-13 09:07:48 | 显示全部楼层
STC_*** 发表于 2023-5-12 14:42
那就不知道了,奇怪,我只是把设置放到初始化就好了,其他什么都没有动。按道理,芯片型号也不影响吧,我用 ...

好的 有疑问再跟帖
热线19952583534
www.STCAI.com
回复

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:533
  • 最近打卡:2025-10-16 06:42:56

50

主题

390

回帖

606

积分

高级会员

积分
606
发表于 2024-12-19 08:08:21 | 显示全部楼层
国学*** 发表于 2023-5-13 09:07
好的 有疑问再跟帖

我现在休眠了只能执行一次。求教为什么不能循环休眠
回复

使用道具 举报 送花

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

GMT+8, 2025-10-16 14:32 , Processed in 0.131733 second(s), 79 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表