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);         //正常工作模式
目录
相关文章
|
传感器 存储 物联网
为什么定时器,串口这些东西被称之为外设
为什么定时器,串口这些东西被称之为外设
225 0
PLC的脉冲定时器是怎样工作的?西门子S7-300脉冲S5定时器如何使用?
本篇我们以西门子S7-300的脉冲S5定时器S_PULSE为例来讲解一下PLC的脉冲定时器是怎样工作的
PLC的脉冲定时器是怎样工作的?西门子S7-300脉冲S5定时器如何使用?
|
传感器
STM32小项目总结2:(内含:1.对射式红外传感器计次+2.旋转编码器计次+3.定时器定时中断+4.定时器外部中断+5.笔记)
STM32小项目总结2:(内含:1.对射式红外传感器计次+2.旋转编码器计次+3.定时器定时中断+4.定时器外部中断+5.笔记)
348 0
STM32小项目总结2:(内含:1.对射式红外传感器计次+2.旋转编码器计次+3.定时器定时中断+4.定时器外部中断+5.笔记)
|
消息中间件 传感器 Ubuntu
ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)
到了测试第6课,还没有玩过ESP32-C3的基本定时器,虽然FreeRTOS,可以使用软件定时器 但是软件定时器毕竟也有不适用的时候,这个在我FreeRTOS博文中有单独说明。 所以硬件定时器也得熟悉,同时附带简单用一下软件定时器。
958 0
ESP32-C3入门教程 基础篇(六、TIMG 硬件定时器 与 软件定时器)
51单片机定时器原理及相关器件
本篇文章讲述单片机定时器的工作原理及使用方法。
230 0
51单片机定时器原理及相关器件
|
C语言
4.1 51单片机-定时器使用
4.1 51单片机-定时器使用
476 0
4.1 51单片机-定时器使用