zigbee学习之睡眠定时器

简介:
睡眠定时器:


void InitSleepTimer(void) 

    ST2 = 0x00; //设置时间
    ST1 = 0x00; 
    ST0 = 0x00; 
    EA = 1;     //开中断 
    STIE = 1;   //睡眠定时器中断使能 0: 中断禁止     1: 中断使能
    STIF = 0;   //睡眠定时器中断标志 0: 无中断未决   1: 中断未决
}




void SysPowerMode(uchar mode) //设置系统睡眠模式 mode等于0为PM0 1为PM1 2为PM2 3为PM3  

    if(mode < 4) 
    {  
        SLEEPCMD |= mode;    //设置系统睡眠模式 
        PCON = 0x01;         //进入睡眠模式 ,通过中断唤醒
    } 
    else 
        PCON = 0x00;         //通过中断唤醒系统 
}


#pragma vector = ST_VECTOR (中断向量)
__interrupt void ST_ISR(void) 

    STIF = 0;          //清标志位
    SysPowerMode(4);   //进入正常工作模式



void Set_ST_Period(uint sec) //设置睡眠时间 

    ulong sleepTimer = 0; 
    
    sleepTimer |= ST0; 
    sleepTimer |= (ulong)ST1 <<  8; 
    sleepTimer |= (ulong)ST2 << 16; //当前的值 
    sleepTimer += ((ulong)sec * (ulong)32768); //32768定时1s。
    ST2 = (uchar)(sleepTimer >> 16); 
    ST1 = (uchar)(sleepTimer >> 8); 
    ST0 = (uchar) sleepTimer; 
}
main函数中:
    InitSleepTimer();        //初始化休眠定时器
Set_ST_Period(5);   //设置睡眠时间,睡眠5秒后唤醒系统
SysPowerMode(2);    //重新进入睡眠模式PM2 当时间到达的时候进入中断,中断里面唤醒睡眠模式


电源管理寄存器如下:
PCON
[7:1] 未使用。总是写作 0000 000 。
[0 ]供电模式控制。写 1 到该位强制设备进入 SLEEP.MODE注意 (MODE=0x00 且 IDLE = 1
将停止 CPU 内核活动)设置的供电模式,这位读出来一直是 0 。当活动时,所有的使能
中断将清除这个位,设备将重新当活动时,所有进入主动模式。


SLEEPCMD
[7]  禁用32kHzRC振荡器校准 0:使能32kHzRC振荡器校准 1:禁用32kHzRC振荡器校准这个
设置可以在任何时间写入,但是在芯片运行在 16MHz 高频 RC 振荡器之前不起作用。
[6 :3] 保留
[2]总是写作 1 保留
[1:0] 供电 模式设置
0 0 : 主动 / 空闲模式
0 1 : 供电 模式 1
1 0 : 供电 模式 2
1 1 : 供电 模式 3//深度睡眠模式,只能复位或者中断唤醒


睡眠模式3(深度睡眠只能够复位或者外部中断来唤醒)
下面这两项是不用设置的,因为用到的外部中断,跟内部的睡眠定时器中断没有关系。
STIE = 0;   //睡眠定时器中断使能 0: 中断禁止     1: 中断使能
STIF = 0;   //睡眠定时器中断标志 0: 无中断未决   1: 中断未决


#pragma vector = P0INT_VECTOR 
__interrupt void P0_ISR(void) 

    if(P0IFG > 0) 
    { 
        P0IFG = 0;           //清标志位
    } 
    
    P0IF = 0; 
    SysPowerMode(4);         //正常工作模式
目录
相关文章
|
数据可视化 算法 定位技术
SWMM从入门到实践教程 01 SWMM软件介绍
SWMM(Storm Water Management Model)是一款用于城市暴雨径流模拟和城市雨水管理的计算机软件。SWMM软件最初由美国环保局(EPA)开发,现在已经成为一个广泛使用的软件,用于设计、规划和管理城市排水系统。
|
移动开发 数据可视化 weex
如何在线生成App:将网页封装成APP
随着移动互联网的快速发展,很多企业和个人都希望能够将自己的网页封装成APP,以便更好地适应用户的移动需求。本文将介绍一种在线生成App的方法,帮助读者实现将网页封装成APP的目标
392 0
|
12月前
|
人工智能 弹性计算 Kubernetes
【云故事探索】NO.10:厦门立马耀的数字化转型之路
厦门立马耀网络科技有限公司在数字化转型中,凭借敏锐的市场洞察和技术创新,将云计算深度融合于业务。其品牌“蝉妈妈”为中小企业提供全方位数字营销解决方案,成为行业标杆。面对快速变化的市场需求,公司通过与阿里云合作,构建高可靠性计算平台,提升效率,并利用AI技术赋能客户,推动业务多元化发展,展现了云计算在企业成长中的巨大潜力。
|
Kubernetes Windows 容器
minio上传下载
minio上传下载
332 0
|
存储 开发工具 开发者
命令行参数解析神器:深入剖析Python中的argparse模块
命令行参数解析神器:深入剖析Python中的argparse模块
|
XML 存储 人工智能
分享:包括 AI 绘画在内的超齐全免费可用的API 大全
我给大家整理了超级齐全的免费可用 API,包括 AI 绘画在内,有需要的小伙伴赶紧收藏了。
1569 0
分享:包括 AI 绘画在内的超齐全免费可用的API 大全
|
机器学习/深度学习 传感器 算法
【图像压缩】基于LZW实现图像压缩算法附matlab代码
【图像压缩】基于LZW实现图像压缩算法附matlab代码
【图像压缩】基于LZW实现图像压缩算法附matlab代码
|
存储 缓存 负载均衡
无类别域间路由 (CIDR):Internet 地址分配和聚合计划
本备忘录讨论了现有 32 位 IPv4 地址空间的地址分配策略,以保护地址空间并限制全局路由状态的增长率。本文档废弃了 RFC 1519 中的原始无类别域间路由 (Classless Inter-domain Routing,CIDR) 规范,进行了更改以阐明其引入的概念,并在 12 年多之后更新 Internet 社区关于部署所描述技术的结果。
614 0
无类别域间路由 (CIDR):Internet 地址分配和聚合计划
stm32f407探索者开发板(七)——蜂鸣器实验
stm32f407探索者开发板(七)——蜂鸣器实验
429 0
stm32f407探索者开发板(七)——蜂鸣器实验
|
JavaScript 前端开发
react 实现图片正在加载中 加载完成 加载失败三个阶段的
最近博客写道项目列表中,发现这里比较多图片,一开加载会比较慢,然后就想要用一个loading的图片来占位。与此同时,如果图片加载失败那么显示错误的图片,不显示一个原有的错误,那样比较难看。
react 实现图片正在加载中 加载完成 加载失败三个阶段的

热门文章

最新文章