ZigBee-CC2530单片机 - 低功耗运行

程序源码

#include "ioCC2530.h"
#define LED1 P1_0     // P1_0定义为P1_0
#define LED2 P1_1     // P1_0定义为P1_1
#define SW1  P1_2     //SW1端口宏定义enum SYSCLK_SRC
{RC_16MHz,XOSC_32MHz
};enum POWERMODE
{PM_IDLE,PM_1,PM_2,PM_3
};/**************************************************************
函数名称:delay
功    能:软件延时
入口参数:time--延时循环执行次数
出口参数:无
返 回 值:无
**************************************************************/
void delay(unsigned int time)
{unsigned int i;unsigned char j;for(i = 0;i < time;i++)for(j = 0;j < 240;j++){asm("NOP");//asm用来在C代码中嵌入汇编语言操作,汇asm("NOP");//编命令nop是空操作,消耗1个指令周期。asm("NOP");}
}/**************************************************************
函数名称:BlankLed
功    能:闪烁LED灯
入口参数:led--要进行闪烁的LED灯,取值1~4
出口参数:无
返 回 值:无
**************************************************************/
void BlankLed(unsigned char led)
{unsigned char i;switch(led){case 1:for(i=0;i<=5;i++){LED1 = 1;delay(500);LED1 = 0;delay(500);}break;case 2:for(i=0;i<=5;i++){LED2 = 1;delay(500);LED2 = 0;delay(500);}break;}
}/**************************************************************
函数名称:SystemClockSourceSelect
功能:选择系统时钟源(主时钟源)
入口参数:sourceXOSC_32MHz  32MHz晶体振荡器RC_16MHz    16MHz RC振荡器
出口参数:无
返回值:无
**************************************************************/
void SystemClockSourceSelect(enum SYSCLK_SRC source)
{unsigned char clkconcmd,clkconsta;if(source == RC_16MHz){             CLKCONCMD &= 0x80;CLKCONCMD |= 0x49;       }else if(source == XOSC_32MHz){CLKCONCMD &= 0x80;}  /* 等待所选择的系统时钟源(主时钟源)稳定 */clkconcmd = CLKCONCMD;    // 读取时钟控制寄存器CLKCONCMDdo{clkconsta = CLKCONSTA;    // 读取时钟状态寄存器CLKCONSTA} while(clkconsta != clkconcmd); // 直到选择的系统时钟源(主时钟源)已经稳定
}/**************************************************************
函数名称:SetPowerMode
功能:设置功耗模式
入口参数:pmPM_IDLE  空闲模式PM_1     功耗模式PM1PM_2     功耗模式PM2PM_3     功耗模式PM3
出口参数:无
返回值:无
**************************************************************/
void SetPowerMode(enum POWERMODE pm)
{/* 空闲模式 */if(pm == PM_IDLE){SLEEPCMD &= ~0x03;}/* 功耗模式PM3*/else if(pm == PM_3){SLEEPCMD |= ~0x03;}/* 其他功耗模式,即功耗模式PM1或PM2*/else{SLEEPCMD &= ~0x03;SLEEPCMD |= pm;}/* 进入所选择的功耗模式 */PCON |= 0x01;                            asm("NOP");
}/**************************************************************
函数名称:SetSleepTime
功能:设置睡眠时间,即设置睡眠定时器的比较值。
入口参数:sec   唤醒功耗模式IDLE,PM1或PM2的时间。
出口参数:无
返回值:无
**************************************************************/
void SetSleepTime(unsigned short sec)
{unsigned long sleeptime = 0;/* 读取睡眠定时器的当前计数值 */sleeptime |= ST0;sleeptime |= (unsigned long)ST1 <<  8;sleeptime |= (unsigned long)ST2 << 16;/* 根据指定的睡眠时间计算出应设置的比较值 */sleeptime += ((unsigned long)sec * (unsigned long)32753);/* 设置比较值 */while((STLOAD & 0x01) == 0);  // 等待允许加载新的比较值ST2 = (unsigned char)(sleeptime >> 16);ST1 = (unsigned char)(sleeptime >> 8);ST0 = (unsigned char) sleeptime;  }/**************************************************************
函数名称:initIO
功能:初始化系统IO
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void initIO()
{    P1SEL &= ~0x1F;     // 设置LED、SW1为普通IO口P1DIR |= 0x03 ;     // 设置LED为输出P1DIR &= ~0X04;     //Sw1按键在 P1.2,设定为输入LED1 = 0;           //灭 LEDLED2 = 0;           //灭 LEDPICTL &= ~0x02;     //配置P1口的中断边沿为上升沿产生中断P1IFG &= ~0x04;     // 清除P1.2中断标志P1IF =0;            // 清除P1口中断标志
}/**************************************************************
函数名称:ST_ISR
功能:睡眠定时器中断服务函数
入口参数:无
出口参数:无
返回值:无
**************************************************************/
#pragma vector=ST_VECTOR
__interrupt void ST_ISR(void)
{EA=0;          //关全局中断STIF=0;     //睡眠定时器中断标志清0STIE=0;    // 禁止睡眠定时器中断EA = 1;          // 使能全局中断
} /**************************************************************
函数名称:main
功能:程序主函数
入口参数:无
出口参数:无
返回值:无
**************************************************************/
void main(void)
{SystemClockSourceSelect(XOSC_32MHz);  // 选择32MHz晶体振荡器作为系统时钟源(主时钟源)initIO();  //初始化IO /* 使能全局中断 */EA = 1;while(1){/* 功耗模式:主动模式 */LED1=0;  //LED1灯灭LED2=0;  //LED2灯灭/* 功耗模式:空闲模式 */BlankLed(1);            //LED1闪烁5次SetSleepTime(2);        // 设置睡眠时间为2秒IRCON &= ~0x80;         // 清除睡眠定时器中断标志IEN0 |= (0x01 << 5);    // 使能睡眠定时器中断SetPowerMode(PM_IDLE);  // 进入空闲模式/* 功耗模式:主动模式 */BlankLed(2);            //LED2闪烁5次        /* 功耗模式:PM1 */SetSleepTime(3);        // 设置睡眠时间为3秒IRCON &= ~0x80;         // 清除睡眠定时器中断标志IEN0 |= (0x01 << 5);    // 使能睡眠定时器中断SetPowerMode(PM_1);     // 进入功耗模式PM1/* 功耗模式:主动模式 */BlankLed(1);            //LED1闪烁5次/* 功耗模式:PM2 */SetSleepTime(4);        // 设置睡眠时间为4秒IRCON &= ~0x80;         // 清除睡眠定时器中断标志IEN0 |= (0x01 << 5);    // 使能睡眠定时器中断 SetPowerMode(PM_2);     // 进入功耗模式PM2 /* 功耗模式:主动模式 */BlankLed(2);            //LED2闪烁5次    /* 功耗模式:PM3 */    P1IEN |=0x04;           //使能P1.2中断IEN2 |= 0x10;           //使能P1口中断SetPowerMode(PM_3);     // 进入功耗模式PM3   }
}/**************************************************************
函数名称:EINT_ISR
功能:外部中断服务函数
入口参数:无
出口参数:无
返回值:无
**************************************************************/
#pragma vector=P1INT_VECTOR
__interrupt void EINT_ISR(void)
{EA = 0;           // 关闭全局中断/* 若是P1.2产生的中断 */if(P1IFG & 0x04){ /* 等待用户释放按键,并消抖 */while(SW1 == 0);    //低电平有效delay(100);while(SW1 == 0);  P1IFG &= ~0x04;   // 清除P1.2中断标志P1IF =0;  // 清除P1口中断标志P1IEN &= ~ 0x04;  //禁止P1.2中断IEN2 &= ~ 0x10;  //禁止P1口中断  }EA = 1;          // 使能全局中断
}

ZigBee-CC2530单片机 - 低功耗运行相关推荐

  1. Zigbee CC2530 单片机存储 IAR查看内存

    广播组网传输数据 平台 协议 TI ZStack-2.5.1a CC2530 存储简介 存储分类 RAM 静态 RAM(SRAM) 动态 RAM(DRAM) ROM PROM EPROM EEPROM ...

  2. 物联网之ZIGBEE学习(2) CC2530单片机与ZIGBEE

    我们学习ZIGBEE要绑定使用TI的CC2530单片机,为什么,为什么不用STM32,51,MSP430,Raspberry PI呢? 因此ZIGBEE和蓝牙,WIFI一样,是一种传输协议,如果要理解 ...

  3. ZigBee无线传感——CC2530单片机定时器1PWM输出

    定时器1(16位) 时器1是一个独立的16位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM功能. 定时器有五个独立的捕获/比较通道.每个通道定时器使用一个I/O引脚.定时器用于范围广 ...

  4. 怎样使用Zigbee模块的低功耗功能

    怎样使用Zigbee模块的低功耗功能 低功耗其实包含二方面的含义​:一是运行时的功耗,一般单片机在20mA左右,二是休眠时的功耗,一般可到几个uA. 运行时的功耗不管怎么小,几个mA还是需要的,再好的 ...

  5. STM8单片机低功耗---活跃停机(Active Halt)模式实现-3

      在上一篇文章中使用活跃停机模式实现单片机的定时自动唤醒功能.STM8单片机低功耗-活跃停机(Active Halt)模式实现-2 通过这个实验可以看出,自动唤醒功能和定时器定时功能很类似,那么能不 ...

  6. STM8单片机低功耗---活跃停机(Active Halt)模式实现-1

      前两篇文章介绍了低功耗模式中的 等待(Wait)模式和停机(Halt)模式的实现.这篇文章开始介绍 活跃停机(Active Halt)模式. STM8单片机低功耗-等待(Wait)模式实现 STM ...

  7. STM8单片机低功耗---等待(Wait)模式实现

      在平时使用单片机的时候,一般不太关心功耗的问题.但是当产品需要使用电池供电的话,那么功耗问题就要必须重视起来.那么如何降低单片机的功耗呢?STM8官方资料上给我们提供了以下几点建议:   如果项目 ...

  8. zigbee CC2530 系列教程 10 看门狗实验

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.9看门狗实验 4.9.1 实验目的 1.学习CC2530看门狗的工作方式: 2.学习看门狗功能在系统中的运行机制: 4.9. ...

  9. 关于stm32单片机低功耗的实现和唤醒

    关于stm32单片机低功耗的实现和唤醒 - 沙河淘金 - 博客园 关于stm32单片机低功耗的实现和唤醒 最近做的项目中要求低功耗,在单片机完成了手头上的工作之后,就进入低功耗模式,项目的需求是单片机 ...

  10. zigbee CC2530 系列教程 2 软件开发平台的搭建

    所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 IAR集成开发环境搭建及程序下载调试 相信物联网在近几年的电子产品领域大家都有所耳闻,而zigbee作为无线传输领域中的佼佼者, ...

最新文章

  1. 使用CoreLocation进行定位(Swift版)
  2. MVC4 WebAPI(一)
  3. 8岁小学生表白遭拒:被一部iPhone打败
  4. php 抽象类 接口 区别,php中接口、抽象类以及接口和抽象类区别详解
  5. 帆软关于排名公式、分组排名问题开窗函数
  6. linux运行bak,linux 备份学习
  7. stm32车牌识别_道路千万条,方案这一条,带你深入了解车牌号识别系统
  8. OBS 录制黑屏的解决方法
  9. Unity开发-CYJ技术文档总结篇
  10. Promise、then()、catch()详解
  11. 获得旅行青蛙无限三叶草方法及apk
  12. .MMAP是什么格式?
  13. Python爬虫js处理
  14. 品牌入局B站 不可忽视的内容营销趋势
  15. 模拟信号转PWM脉冲调宽大电流控制隔离放大器
  16. iOS 开发者账号申请以及发布
  17. 云南计算机一级b成绩查询入口,云南计算机一级考试成绩查询入口
  18. 计算机如何连接网络扫描仪,Win7系统怎么连接扫描仪 win7连接扫描仪的方法
  19. [STK] matlabSTK 安装
  20. 爬取马蜂窝用户评论界面中的用户ID、用户名以及评分

热门文章

  1. linux下终端快捷键
  2. 校园网IPv6免流上网
  3. 大数据算法_大数据挖掘十大经典算法
  4. 如何用informatic实现表的增量抽取
  5. jquery实现多选框
  6. 怎么使用biopython_什么是Biopython? 你能用Biopython做什么? Biopython功能概。
  7. 华为认证IE太难,先考IP好找工作吗?
  8. Windows Server 2012 R2磁盘分区
  9. 劲舞团显示正在登录message 服务器,[新手]劲舞团2.0之表情和message系统
  10. 机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)