本帖最后由 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;
- }
复制代码
|