感知层实验编程实验二
南昌航空大学实验报告
二0二1年10月17日
课程名称: 感知层编程实验 实验名称:电源管理及休眠
班级学号: 姓名: 同组人: 无
指导教师评定: 签名:
实验二 电源管理及休眠
实验目的:
- 加深和巩固学生对于CC2530平台的电源管理及休眠等概念的理解
- 学生通过本实验了解和掌握电源管理、休眠编程方法
- 提高学生的上机和编程过程中处理具体问题的能力
实验要求:
- 实验要求自己独立的完成;
- 编写和调试过程中出现的问题要做好记录,并事后总结到报告中
- 实验程序调试完成后, 用给定的平台进行测试,由老师检查测试结果,并给予相应的成绩。
实验内容:
- 在实验一的基础上加入休眠功能。
- 实验步骤与现象:按键S1,控制LED1和LED2交替闪烁,在若干秒后系统进入休眠直到再次按下S1,LED1和LED2交替闪烁。如此往复。
实验环境:
集成开发环境为IAR
实验过程:
经分析这次代码主要是对电源管理以及休眠程序书写的考察,参照书上以及第一次实验所写的代码,在IAR上写好代码,debug调试好,再接上cc2530板子烧入,观察实验板亮灯情况。
实验代码:
#include<ioCC2530.h>
typedef unsigned int uint;
typedef unsigned char uchar;
#define LED1 P1_0 //定义LED1为P1_0口控制
#define LED2 P1_1 //定义LED2为P1_1口控制
#define KEY1 P0_1 //定义KEY1为P0_1口控制
void Delay(int n); //延时
void InitKEY(void); //初始化KEY控制IO口函数
void SysPowerMode(uchar sel);//系统工作模式选择函数
void Delay(int n) //1ms
{
int i,j;
for(i=0;i<n;i++)
for(j=0;j<535;j++);
}
void InitKEY(void)
{
IEN1 |= 0x20; //端口0的总中断使能
P0IEN |= 0x02; //P0_1口的中断使能,即KEY1的按键中断
//PICTL |= 0x00; //端口中断触发延,默认所有端口都是上升沿
PICTL |= 0x01; //设置成端口0下降沿触发
IEN0 |= 0x80; //总中断开启
P0IFG = 0x00; //清除端口0的中断状态标志
}
void main(void)
{
P1DIR |= 0x03; //P1_0、P1_1定义为输出
LED1 = 1; //LED0灯初始化为关
LED2 = 1; //LED1灯初始化为关
InitKEY();
SysPowerMode(3);
for(int i = 0;;i++)
{
if(i%2==0)
{
LED2 = 1;
LED1 = !LED1;
}
else
{
LED1 = 1;
LED2 = !LED2;
}
Delay(1000);
if(i==10)
SysPowerMode(3);
}
}
#pragma vector = P0INT_VECTOR //P0中断向量,系统唤醒
__interrupt void P0_ISR(void)
{
if(0x02 == (P0IFG & 0x02)) //判断一下是否是P0_1即按键1的中断请求
{
SysPowerMode(4);
}
IRCON &= ~0x20; //清除端口0的总中断状态标志
P0IFG &= ~0x02; //清除具体端口P0_1的中断状态标志
}
void SysPowerMode(uchar mode){
if(mode < 4){
SLEEPCMD &= ~0x03;
SLEEPCMD |= mode;
PCON = 0x01; //进入休眠
}else{
PCON = 0x00; //系统唤醒
}
}
实验结果:
按下按键key1,LED1与LED2灯交替闪烁,时间间隔为1s。交替闪烁十次之后进入休眠状态。再次按下key1,循环上面状态。
实验总结:
最开始写代码的时候我向上次实验一样,把控制灯亮灭的情况放在中断函数里面,但发现这次实验是要多次使用到中断向量进行系统唤醒,我便调整了代码,将灯控制的代码挪到了主函数。
通过本次实验加深和巩固了我对于CC2530平台的电源管理及休眠等概念的理解,了解和掌握电源管理、休眠编程方法,期间出现了许多问题,但好在书上有一个差不多的样例加上是基于第一次实验上的改进,所以还是很快的得到解决,另外每次的附录都对我们的实验有很大的帮助。
附录:
在上一次实验的基础上,增加休眠功能!采用PM3深度休眠。利用按键的外部中断唤醒系统。
PCON:
SLEEPCMD:
setPowerMode:
注意事项:
1、需要开启中断
2、setPowerMode的调用位置

浙公网安备 33010602011771号