辜渝傧

13037102709

027-87870986

教学实训

您当前的位置:首页 > 教学资源 > 实训方案 >

无线传感网络实训|实验2.8 中断唤醒睡眠实验

发布者:唯众    布时间:2020-11-27 15:30:49    点击量:

1.实验目的

1)、为什么要睡眠? Zigbee 的特点就是远距离低功耗的无线传输设备,节点模块闲时可以进入睡眠模式,在需要传输数据时候进行唤醒,能进一步节省电量。
2)、掌握几种系统电源模式的基本设置及切换。系统电源有以下几种管理模式:全功能模式,高频晶振(16M 或者 32M )和低频晶振(32.768K RCOSC/XOSC )全部工作, 数字处理模块正常工作。
PM1 : 高频晶振(16M 或者 32M )关闭,低频晶振(32.768K RCOSC/XOSC )工作,数字核心模块正常工作。PM2 :低频晶振(32.768K RCOSC/XOSC )工作, 数字核心模块关闭,系统通过 RESET,外部中断或者睡眠计数器溢出唤醒。
PM3 : 晶振全部关闭,数字处理核心模块关闭,系统只能通过 RESET 或外部中断唤醒。此模式下功耗最低。
3)、将睡眠模式下的 CC2530 通过定时器唤醒,观察 LED 闪烁现象

2.实验设备

硬件:PC机1台、ZIGBEE节点板1套(底板、核心板、仿真器、USB 线)
软件:2000/XP/win7 系统,IAR 8.10 集成开发环境

3.实验相关电路图

实验2.8 中断唤醒睡眠实验

4.实验相关寄存器

实验2.8 中断唤醒睡眠实验
睡眠定时器用于设置系统进入和退出低功耗睡眠模式之间的周期。还用于当系统进入低功耗模式后,维持MAC 定时器(T2)的定时。
其特性如下: 长达24 位定时计数器,运行在32.768KHZ的工作频率。24 位的比较器具有中断和DMA 触发功能在PM2 低功耗模式下运行.按照表格寄存器的内容,相关寄存器配置如下:
SLEEPCMD |= mode; //设置系统睡眠模式mode 取值为0、1、2、3
PCON = 0x01; //进入睡眠模式,通过中断唤醒
PCON = 0x00; //通过中断唤醒系统

5.源码分析

#include <ioCC2530.h>
#define uint unsigned int
#define uchar unsigned char
#define DELAY 15000
#define BUZZER         P1_3             //定义BUZZER为P13口控制
#define KEY                P2_0             //定义KEY为P20口
 
void Delay(void);
void SysPowerMode(uchar sel);
/****************************************************************
延时函数
****************************************************************/
void Delay(void)
{
uint i;
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
for(i = 0;i<DELAY;i++);
}
/****************************************************************
系统工作模式选择函数
* para1 0 1 2 3
* mode PM0 PM1 PM2 PM3
****************************************************************/
void SysPowerMode(uchar mode)
{
uchar i,j;
i = mode;
if(mode<4)
{
SLEEPCMD &= 0xFC;
SLEEPCMD |= i; //设置系统睡眠模式
for(j=0;j<4;j++);
{
PCON = 0x01; //进入睡眠模式
}
}
else
{
PCON = 0x00; //系统唤醒
}
}
/****************************************************************
LED 控制 IO 口初始化函数
****************************************************************/
void Init_IO_AND_BUZZER(void)
{
P1DIR |= 0x08;                       //P13定义为输出
BUZZER = 0;
 
       P2DIR &= ~0x01;                                                  //P20定义为输入
       KEY = 1;
    P2INP &= ~0X01; //配置P2.0口上拉下拉
    P2IEN |= 0X01;  //P2.0为中断模式
    PICTL |= 0X08;  //下降沿
       IEN2 |= 0X02;
P2IFG &= ~0x01;
EA = 1;
};
 
/****************************************************************
主函数
****************************************************************/
void main()
{
uchar count = 0;
Init_IO_AND_BUZZER();
BUZZER = 1 ; //开蜂鸣器,系统工作指示
Delay(); //延时
while(1)
{
BUZZER = !BUZZER;
count++;
if(count >= 6)
{
count = 0;
SysPowerMode(3);
//3 次蜂鸣后进入睡眠状态 PM3
}
Delay();
//延时函数无形参,只能通过改变系统时钟频率或 DEALY 的宏定义
//来改变小灯的闪烁频率
};
}
/*****************************************
中断处理函数-系统唤醒
*****************************************/
#pragma vector = P2INT_VECTOR
__interrupt void P2_ISR(void)
{
if(P2IFG>0)
{
P2IFG = 0;
}
P2IF = 0;
SysPowerMode(4);
}

6.实验现象

       在工作情况下,LED1 灯长亮,LED2 闪烁三次后,系统进入睡眠。当按下 S1,系统唤醒进入工作状态,LED1 灯长亮,LED2 闪烁三次后,再次进入睡眼。***(方规)完善


上一篇:无线传感网络实训|实验2.7 看门狗实验

下一篇:无线传感网络实训|第三章 传感器实验介绍