|
本帖最后由 正是河豚 于 2019-8-5 08:56 编辑
1、STC15W4K32S4系列MCU进入掉电模式后,内部掉电唤醒定时器可以唤醒MCU,下面介绍如何配置内部掉电唤醒定时器的程序设计。
2、内部掉电唤醒定时器的程序设计部分代码如下。
- /**************************************
- 功能描述:唤醒定时器计数寄存器配置
- 入口参数:uint16 SetTime: 实际计数值
- 返回值:无
- ***************************************/
- void SetWakeUpTime(uint16 SetTime)
- {
- if(SetTime > 0) SetTime=SetTime-1; //待写入WKTCH、WKTCL寄存器值比实际计数值少1
- WKTCL = (uint8)SetTime; //赋值WKTCL寄存器
- WKTCH = (uint8)(SetTime >> 8) | 0x80; //赋值WKTCH寄存器并使能掉电唤醒定时器
- }
3、主函数设计代码如下。
- /************* 本地变量声明 **************/
- uint16 msecond; //1000ms计数
- uint8 SleepDelay; //睡眠延时用时间变量
- /**************************************************************************
- 功能描述:主函数
- 入口参数:无
- 返回值:无
- *************************************************************************/
- int main(void)
- {
- /////////////////////////////////////////////////
- //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为
- // 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用
- //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2
- // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5
- /////////////////////////////////////////////////
- P0M1 &= 0x3F; P0M0 &= 0x3F; //设置P0.6、P0.7为准双向口
-
- SleepDelay = 0; //初始清零
-
- while(1)
- {
- delay_ms(1); //延时1ms
- if(++msecond >= 1000) //约1秒到
- {
- msecond = 0; //清1000ms计数
- led_on(LED_2); //点亮红色指示灯DS2
- led_off(LED_1); //熄灭蓝色指示灯DS1
-
- if(++SleepDelay >= 5) //约5秒到
- {
- SleepDelay = 0; //清零延时用时间变量
- led_on(LED_1); //点亮蓝色指示灯DS1
- led_off(LED_2); //熄灭红色指示灯DS2
- SetWakeUpTime(4096); //约2秒后唤醒
- PCON |= 0x02; //单片机进入掉电模式
- _nop_();
- _nop_();
- _nop_();
- }
- }
- }
- }
4、下载程序的实验现象如下:
1)红灯亮蓝灯灭,约5s后红灯灭蓝灯亮,单片机进入掉电模式。
2)2s后,掉电唤醒定时器定时时间到,单片机被从掉电模式下唤醒,程序从设置单片机进入掉电模式的下一条语句开始执行,进主循环, 红灯亮蓝灯灭,约5s后红灯灭蓝灯亮,单片机再次进入掉电模式。
3)2s后,掉电唤醒定时器定时时间又到,单片机被从掉电模式下唤醒,程序从设置单片机进入掉电模式的下一条语句开始执行,进主循环, 红灯亮蓝灯灭,约5s后红灯灭蓝灯亮,单片机又一次次进入掉电模式。如此反复,单片机不断进入掉电模式,又不断被定时唤醒。
|
|