嵌入式成长轨迹55 【Zigbee项目】【CC2430基础实验】【系统唤醒】
2012-09-01 18:32
423 查看
本次实验使能外部I/O 中断唤醒CC2430,每次唤醒红色 LED 闪烁10 次,然后进入低功耗模式,在进入PM3 之前程序会将两个LED 灯关闭。在应用中也可以不关闭以指示CC2430处于低功耗模式,可以中断激活。
void PowerMode(uchar sel);
函数原型:
函数功能:使系统进入sel 指定的电源模式下,这里的 sel 只能是 0-3 之间的数,程序只能在CPU 全速运行时执行,也就是说函数中能使系统从全速运行进入 PM0-PM3 而不可以从PM0-PM3进入全速运行
void PowerMode(uchar sel);
函数原型:
void PowerMode(uchar sel) { uchar i,j; i = sel; if(sel<4) { SLEEP &= 0xfc; SLEEP |= i; for(j=0;j<4;j++); PCON = 0x01; } else { PCON = 0x00; } }
函数功能:使系统进入sel 指定的电源模式下,这里的 sel 只能是 0-3 之间的数,程序只能在CPU 全速运行时执行,也就是说函数中能使系统从全速运行进入 PM0-PM3 而不可以从PM0-PM3进入全速运行
//main.c #include <ioCC2430.h> #define uint unsigned int #define uchar unsigned char #define DELAY 10000 //小灯控端口定义 #define RLED P1_0 #define YLED P1_1 void Delay(void); void Init_IO_AND_LED(void); void PowerMode(uchar sel); /**************************************************************** *函数功能:延时 *入口参数:无 *返回值 :无 *说 明 :可在宏定义中改变延时长度 ****************************************************************/ void Delay(void) { uint tt; for(tt = 0;tt<DELAY;tt++); for(tt = 0;tt<DELAY;tt++); for(tt = 0;tt<DELAY;tt++); for(tt = 0;tt<DELAY;tt++); for(tt = 0;tt<DELAY;tt++); } /**************************************************************** *函数功能:初始化电源 *入口参数:para1,para2,para3,para4 *返回值 :无 *说 明 :para1,模式选择 * * * para1 0 1 2 3 * * mode PM0 PM1 PM2 PM3 * * * ****************************************************************/ void PowerMode(uchar sel) { uchar i,j; i = sel; if(sel<4) { SLEEP &= 0xfc; SLEEP |= i; for(j=0;j<4;j++); PCON = 0x01; } else { PCON = 0x00; } } /**************************************************************** * 函数功能:初始化I/O,控制LED * 入口参数:无 * 返回值 :无 * 说 明 :初始化完成后关灯 ****************************************************************/ void Init_IO_AND_LED(void) { /* P1DIR = 0X03; RLED = 1; YLED = 1; P1SEL &= ~0X0C; P1DIR &= ~0X0C; P1INP &= ~0X0c;//有上拉、下拉 P2INP &= ~0X40; //选择上拉 P1IEN |= 0X0c; //P12 P13 PICTL |= 0X02; //下降沿 EA = 1; IEN2 |= 0X10; //P1IE = 1; P1IFG |= 0x00; //P12 P13 */ P1DIR = 0X03; //0为输入(默认),1为输出 RLED = 0; GLED = 1; P0SEL&=~0X60; P0DIR&=~0X60; P0INP|=0X60;//有上拉、下拉 /* P1IEN |= 0X0c; //P12 P13 PICTL |= 0X02; //下降沿 */ PICTL |= 0X11; //P0口中断允许,下降沿触发 EA = 1; //IEN2 |= 0X10; // P1IE = 1; IEN1 |= 0X20; // P0IE = 1 //P1IFG &= ~0x0C; //P12 P13中断标志清0 P0IFG &= ~0x60; //P05 P06中断标志清0 }; /**************************************************************** * 函数功能:主函数 * 入口参数: * 返回值 :无 * 说 明 :10次绿色LED闪烁后进入睡眠状态 ****************************************************************/ void main() { uchar count = 0; Init_IO_AND_LED(); RLED = 0 ; //开红色LED,系统工作指示 Delay(); //延时 Delay(); Delay(); Delay(); while(1) { YLED = !YLED; RLED = 0; count++; if(count >= 20) { count = 0; RLED = 1; PowerMode(3); //10次闪烁后进入睡眠状态 } //Delay(); Delay(); //延时函数无形参,只能通过改变系统时钟频率 //来改变小灯的闪烁频率 }; } /***************************************** //唤醒系统 *****************************************/ #pragma vector = P0INT_VECTOR __interrupt void P0_ISR(void) { if(P0IFG>0) { P0IFG = 0; } P1IF = 0; }
相关文章推荐
- 嵌入式成长轨迹54 【Zigbee项目】【CC2430基础实验】【系统睡眠工作状态】
- 嵌入式成长轨迹57 【Zigbee项目】【CC2430基础实验】【定时唤醒】
- 嵌入式成长轨迹37 【Zigbee项目】【CC2430基础实验】【自动闪烁】
- 嵌入式成长轨迹49 【Zigbee项目】【CC2430基础实验】【DMA】
- 嵌入式成长轨迹50 【Zigbee项目】【CC2430基础实验】【单片机串口发数】
- 嵌入式成长轨迹38 【Zigbee项目】【CC2430基础实验】【按键控制开关】
- 嵌入式成长轨迹51 【Zigbee项目】【CC2430基础实验】【在PC用串口控制LED】
- 嵌入式成长轨迹39 【Zigbee项目】【CC2430基础实验】【按键控制闪烁】
- 嵌入式成长轨迹52 【Zigbee项目】【CC2430基础实验】【在PC用串口收数并发数】
- 嵌入式成长轨迹40 【Zigbee项目】【CC2430基础实验】【T1的使用】
- 嵌入式成长轨迹53 【Zigbee项目】【CC2430基础实验】【串口时钟PC显示】
- 嵌入式成长轨迹41 【Zigbee项目】【CC2430基础实验】【T2的使用】
- 嵌入式成长轨迹42 【Zigbee项目】【CC2430基础实验】【T3的使用】
- 嵌入式成长轨迹56 【Zigbee项目】【CC2430基础实验】【睡眠定时器的使用】
- 嵌入式成长轨迹43 【Zigbee项目】【CC2430基础实验】【T4的使用】
- 嵌入式成长轨迹58 【Zigbee项目】【CC2430基础实验】【看门狗模式】
- 嵌入式成长轨迹44 【Zigbee项目】【CC2430基础实验】【定时器中断】
- 嵌入式成长轨迹59 【Zigbee项目】【CC2430基础实验】【喂狗】
- 嵌入式成长轨迹45【Zigbee项目】【CC2430基础实验】【外部中断】
- 嵌入式成长轨迹46 【Zigbee项目】【CC2430基础实验】【片内温度】