|
发表于 2023-5-12 13:09:37
|
显示全部楼层
我都是每次进掉电模式前都设置掉电唤醒定时器,没有问题。
#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);
}
|
|