原创 CC2430/CC2431源代码:CC2430睡眠定时器的使用

2009-7-13 15:23 1624 10 10 分类: 消费电子

//cd wxl

//说明:本实验在成都无线龙提供的CC2430模块中调试通过。http://www.c51rf.com
#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
};
/****************************************************************
* 函数功能:主函数     
* 入口参数:     
* 返回值 :无      
* 说 明 :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 = P1INT_VECTOR
__interrupt void P1_ISR(void)
{
        if(P1IFG>0)
        {
          P1IFG = 0;
        }
        P1IF = 0;
}

更多资料与技术讨论请联系:

上海无线龙通讯科技有限公司

联系人:司文铠

QQ876692208

MSN:siwenkai@hotmail.com

TEL13816689475

email:wxlsiwenkai@yahoo.com.cn

skype:sparksi01

公司网址:www.wxlsoc.com

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条