930电子网

 找回密码
 立即注册
艾克姆科技推出最新产品STC32G12K128开发板
查看: 8538|回复: 0

STC15W4K32S4系列电源管理之程序设计2

[复制链接]

101

主题

333

帖子

7428

积分

版主

Rank: 7Rank: 7Rank: 7

积分
7428
发表于 2019-8-5 08:56:26 | 显示全部楼层 |阅读模式
本帖最后由 正是河豚 于 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后红灯灭蓝灯亮,单片机又一次次进入掉电模式。如此反复,单片机不断进入掉电模式,又不断被定时唤醒。









回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|官方淘宝店|930电子网 ( 皖ICP备16000695号-2 )

Copyright © 合肥艾克姆电子科技有限公司
快速回复 返回顶部 返回列表