qepuemc 发表于 2024-12-2 13:37:05

临时贴求助怎么多休眠一会时间

//sfr WKTCL = 0xAA;   //唤醒定时器低字节
//sfr WKTCH = 0xAB;   //唤醒定时器高字节

//========================================================================
// 函数: void   SetWakeUpTime(u16 SetTime)
// 描述: 唤醒定时器设置时间值函数。
// 参数: SetTime: 要设置的时间值(睡眠的时间), 单位为ms.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-7-15
// 备注:
//========================================================================
void    SetWakeUpTime(u16 SetTime)
{
    SetTime = (u16)((32768UL * (u32)SetTime) / 16000);//重装值 = Fwkt/16 * SetTime/1000 = Fwkt * SetTime / 16000
    if(SetTime > 0) SetTime--;
    WKTCL = (u8)SetTime;
    WKTCH = (u8)(SetTime >> 8) | 0x80;
}

/*

SetWakeUpTime(5000);    //5秒后醒来
                                                                PCON |= 0x02;   //Sleep
*/


上面的代码只能最多休个10秒。还请给个可以休30秒60秒的方法 。 还有就是这个需要在什么时候用(在主循环中是不是把需要做的事做完后就可以开定时器然后休眠了)。谢谢

_奶咖君_ 发表于 2024-12-2 13:44:53

看看如果单片机里有内置的RTC,用RTC的闹钟中断 那就想定多久就定多久。。

如果就只有这个掉电唤醒定时器的话,,那就只能是定一个周期,周期醒了之后计个数,然后就睡觉。计数值到达你想定时的时间之后,在去干活。

DebugLab 发表于 2024-12-2 14:16:04

_奶咖君_ 发表于 2024-12-2 13:44
看看如果单片机里有内置的RTC,用RTC的闹钟中断 那就想定多久就定多久。。

如果就只有这个掉电唤醒定时器 ...

赞同

qepuemc 发表于 2024-12-2 14:57:51

stc 32 g 12 k 128好像是有内置rtc。只是有的话怎样设置它就能。设置更长的休眠时间了呢

qepuemc 发表于 2024-12-2 21:20:50

本帖最后由 qepuemc 于 2024-12-2 22:06 编辑

下面是我提取了可以休眠运行的代码 STC32G8K64
本来以为这样可以了。结果这样不是不能进入休眠就是不能唤醒的感觉。最怕的就是休眠后醒了就可以进入休眠了!

//低功耗
#include "comm\STC32G.h" //STC官方文件没做修改用的是STC32GLQFP32 32脚的芯片
#define MAIN_Fosc       11059200L   //定义主时钟
typedef   unsigned char   u8;
typedef   unsigned int    u16;
typedef   unsigned long   u32;
sfr WKTCL = 0xAA;   //唤醒定时器低字节
sfr WKTCH = 0xAB;   //唤醒定时器高字节
/****************************** 用户定义宏 ***********************************/


void    SetWakeUpTime(u16 SetTime);
/********************** 主函数 ************************/
void main(void)
{   
    P0M1 = 0;   P0M0 = 0;   //设置为准双向口
    P1M1 = 0;   P1M0 = 0;   //设置为准双向口
    P2M1 = 0;   P2M0 = 0;   //设置为准双向口
    P3M1 = 0;   P3M0 = 0;   //设置为准双向口
    P4M1 = 0;   P4M0 = 0;   //设置为准双向口
    P5M1 = 0;   P5M0 = 0;   //设置为准双向口
    P6M1 = 0;   P6M0 = 0;   //设置为准双向口
    P7M1 = 0;   P7M0 = 0;   //设置为准双向口
   
    EA = 1;   //允许总中断

    while(1)
    {
                        SetWakeUpTime(5000);    //2秒后醒来
                                                                PCON |= 0x02;   //Sleep      
    }
}

//========================================================================
// 函数: void   SetWakeUpTime(u16 SetTime)
// 描述: 唤醒定时器设置时间值函数。
// 参数: SetTime: 要设置的时间值(睡眠的时间), 单位为ms.
// 返回: none.
// 版本: VER1.0
// 日期: 2014-7-15
// 备注:
//========================================================================
void    SetWakeUpTime(u16 SetTime)
{
    SetTime = (u16)((32768UL * (u32)SetTime) / 16000);//重装值 = Fwkt/16 * SetTime/1000 = Fwkt * SetTime / 16000
    if(SetTime > 0) SetTime--;
    WKTCL = (u8)SetTime;
    WKTCH = (u8)(SetTime >> 8) | 0x80;
}

页: [1]
查看完整版本: 临时贴求助怎么多休眠一会时间