ZigBee-CC2530单片机 - 低功耗运行
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单片机 - 低功耗运行相关推荐
- Zigbee CC2530 单片机存储 IAR查看内存
广播组网传输数据 平台 协议 TI ZStack-2.5.1a CC2530 存储简介 存储分类 RAM 静态 RAM(SRAM) 动态 RAM(DRAM) ROM PROM EPROM EEPROM ...
- 物联网之ZIGBEE学习(2) CC2530单片机与ZIGBEE
我们学习ZIGBEE要绑定使用TI的CC2530单片机,为什么,为什么不用STM32,51,MSP430,Raspberry PI呢? 因此ZIGBEE和蓝牙,WIFI一样,是一种传输协议,如果要理解 ...
- ZigBee无线传感——CC2530单片机定时器1PWM输出
定时器1(16位) 时器1是一个独立的16位定时器,支持典型的定时/计数功能,比如输入捕获,输出比较和PWM功能. 定时器有五个独立的捕获/比较通道.每个通道定时器使用一个I/O引脚.定时器用于范围广 ...
- 怎样使用Zigbee模块的低功耗功能
怎样使用Zigbee模块的低功耗功能 低功耗其实包含二方面的含义:一是运行时的功耗,一般单片机在20mA左右,二是休眠时的功耗,一般可到几个uA. 运行时的功耗不管怎么小,几个mA还是需要的,再好的 ...
- STM8单片机低功耗---活跃停机(Active Halt)模式实现-3
在上一篇文章中使用活跃停机模式实现单片机的定时自动唤醒功能.STM8单片机低功耗-活跃停机(Active Halt)模式实现-2 通过这个实验可以看出,自动唤醒功能和定时器定时功能很类似,那么能不 ...
- STM8单片机低功耗---活跃停机(Active Halt)模式实现-1
前两篇文章介绍了低功耗模式中的 等待(Wait)模式和停机(Halt)模式的实现.这篇文章开始介绍 活跃停机(Active Halt)模式. STM8单片机低功耗-等待(Wait)模式实现 STM ...
- STM8单片机低功耗---等待(Wait)模式实现
在平时使用单片机的时候,一般不太关心功耗的问题.但是当产品需要使用电池供电的话,那么功耗问题就要必须重视起来.那么如何降低单片机的功耗呢?STM8官方资料上给我们提供了以下几点建议: 如果项目 ...
- zigbee CC2530 系列教程 10 看门狗实验
所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 4.9看门狗实验 4.9.1 实验目的 1.学习CC2530看门狗的工作方式: 2.学习看门狗功能在系统中的运行机制: 4.9. ...
- 关于stm32单片机低功耗的实现和唤醒
关于stm32单片机低功耗的实现和唤醒 - 沙河淘金 - 博客园 关于stm32单片机低功耗的实现和唤醒 最近做的项目中要求低功耗,在单片机完成了手头上的工作之后,就进入低功耗模式,项目的需求是单片机 ...
- zigbee CC2530 系列教程 2 软件开发平台的搭建
所有课程见此链接: zigbee CC2530 系列教程 0 课程介绍 IAR集成开发环境搭建及程序下载调试 相信物联网在近几年的电子产品领域大家都有所耳闻,而zigbee作为无线传输领域中的佼佼者, ...
最新文章
- 使用CoreLocation进行定位(Swift版)
- MVC4 WebAPI(一)
- 8岁小学生表白遭拒:被一部iPhone打败
- php 抽象类 接口 区别,php中接口、抽象类以及接口和抽象类区别详解
- 帆软关于排名公式、分组排名问题开窗函数
- linux运行bak,linux 备份学习
- stm32车牌识别_道路千万条,方案这一条,带你深入了解车牌号识别系统
- OBS 录制黑屏的解决方法
- Unity开发-CYJ技术文档总结篇
- Promise、then()、catch()详解
- 获得旅行青蛙无限三叶草方法及apk
- .MMAP是什么格式?
- Python爬虫js处理
- 品牌入局B站 不可忽视的内容营销趋势
- 模拟信号转PWM脉冲调宽大电流控制隔离放大器
- iOS 开发者账号申请以及发布
- 云南计算机一级b成绩查询入口,云南计算机一级考试成绩查询入口
- 计算机如何连接网络扫描仪,Win7系统怎么连接扫描仪 win7连接扫描仪的方法
- [STK] matlabSTK 安装
- 爬取马蜂窝用户评论界面中的用户ID、用户名以及评分
热门文章
- linux下终端快捷键
- 校园网IPv6免流上网
- 大数据算法_大数据挖掘十大经典算法
- 如何用informatic实现表的增量抽取
- jquery实现多选框
- 怎么使用biopython_什么是Biopython? 你能用Biopython做什么? Biopython功能概。
- 华为认证IE太难,先考IP好找工作吗?
- Windows Server 2012 R2磁盘分区
- 劲舞团显示正在登录message 服务器,[新手]劲舞团2.0之表情和message系统
- 机器学习笔记——14 矩阵谱分解与奇异值分解及其背后的线性算子理论 (实战项目:利用SVD进行图像压缩)