临时贴求助怎么多休眠一会时间
//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秒的方法 。 还有就是这个需要在什么时候用(在主循环中是不是把需要做的事做完后就可以开定时器然后休眠了)。谢谢
看看如果单片机里有内置的RTC,用RTC的闹钟中断 那就想定多久就定多久。。
如果就只有这个掉电唤醒定时器的话,,那就只能是定一个周期,周期醒了之后计个数,然后就睡觉。计数值到达你想定时的时间之后,在去干活。 _奶咖君_ 发表于 2024-12-2 13:44
看看如果单片机里有内置的RTC,用RTC的闹钟中断 那就想定多久就定多久。。
如果就只有这个掉电唤醒定时器 ...
赞同 stc 32 g 12 k 128好像是有内置rtc。只是有的话怎样设置它就能。设置更长的休眠时间了呢 本帖最后由 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]