3474|7

33

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

ZIGBEE 电源控制之中断唤醒 [复制链接]

/*
  此程序很简单,主要用到的是外部中断和电源管理
实验目的:通过按键触发外部中断,使单片机跳出休眠状态,LED闪烁5
       主讲  王加辉
*/
#include
#define LED1 P1_0/*定义端口*/
#define LED2 P1_1
void init_led()/*此函数初始化LED*/
{
  P1SEL&=~0X03;/*P1SELP1功能选择寄存器,主要用来设置P1I/O各个端口为普通I/O口或者是作为外设功能接口。
                在这里我们只要P1_0P1_1口为普通的I/O口即可*/
  P1DIR|=0X03;/*P1DIRP1放向寄存器,主要功能是设置P1各个口为输入口还是输出口,
                 LED为输出设备,所以此处我们需要P1_0P1_1口为输出口*/
  P1INP&=~0X03;/*P1INPP1输入模式寄存器,主要是设置P1各个口的上拉是开还是关,此处无所谓开还是关*/
                /*因为P1SELP1INP在复位后默认为0,所以我们可以不用配置,只要配置P1DIR寄存器即可*/
  LED1=LED2=1;/*关闭所有LED*/
}
void init_interrupt()/*外部中断初始化函数*/
{
  P0IEN|=0X10;/*P0口中断掩码寄存器,主要是用来设置P0口各个端口中断的开关,
                因为我们这里用的键盘连的是P0.4,所以我们要开P0.4的中断*/
  PICTL|=0X01;/*PICTLP口中断控制寄存器,其主要功能请各位自己查看cc2530数据手册,
               这里我们主要设置P0口的中断触发方式为下降沿触发*/
  P0IE=1;/*P0IEIEN1寄存器的第6位,是用来设置P0口的中断使能,即设置P0口的中断开关*/
  P0IFG=0X00;/*P0口各个端口的中断标志寄存器,中断发生是相应位会自动置一,中断发生后需要软件手动清零*/
  EA=1;   /*开总中断*/
}
void delay_ms(int ti)/*延时函数*/
{
  int i,j;
  for(i=0;i
    for(j=0;j<524;j++);
}
void sleep_select(int temp)/*电源管理函数,我们这里比较简单,只设置了PM3*/
{
  if(temp<4)/*根据temp的值来改变供电模式*/
   {
     SLEEPCMD|=temp;/*设置供电模式*/
     delay_ms(10);/*延迟等待至少3ms*/
     PCON=0X01;/*强行进入所选的电源模式*/
   }
  else
     PCON=0x00;/*回到主动模式,即唤醒单片机*/
}
void main()
{
  int x=0;
  init_led();/*初始化LED*/
  init_interrupt();/*初始化外部中断*/
  while(1)
   {
       for(x=0;x<10;x++)/*LED灯闪烁5*/
    {
      LED2=LED1=~LED1;
      delay_ms(200);
    }
     sleep_select(3);/*进入电源管理函数,设置电源方式为PM3*/
   }
}
#pragma vector=P0INT_VECTOR/*中断源*/
__interrupt void P0_ISR(void)/*中断子程序*/
{
  sleep_select(4);/*进入电源管理函数,唤醒单片机*/
  P0IFG=0;/*清中断标志位*/
  P0IF=0;/*清中断标志位,P0IFP0IFG中有,在IRCON中也有,大家可以查看手册*/
}
/*因为电源管理的资料我也没有word文档,字比较多,不好打出来,
详细请大家参考cc2530数据手册里的53页:电源管理简介,里面讲的很详细*/
/*祝大家学的愉快*/
此帖出自无线连接论坛

最新回复

PM3模式下只能用外部中断才能唤醒,这里说的是外部端口唤醒,也就在按键之类的才能唤醒,串口中断不属于这个范围,不能唤醒的。  详情 回复 发表于 2014-4-21 12:12
点赞 关注
 

回复
举报

3238

帖子

5

TA的资源

五彩晶圆(中级)

沙发
 
写的不错,再接再厉
此帖出自无线连接论坛

点评

谢谢版主支持  详情 回复 发表于 2013-12-11 17:40
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

板凳
 

回复 沙发wateras1 的帖子

谢谢版主支持
此帖出自无线连接论坛
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

4
 
正在研读协议栈,没法详细和同志分享,等我能够随意使用时,再来和大家分享
此帖出自无线连接论坛
 
 
 

回复

33

帖子

0

TA的资源

一粒金砂(中级)

5
 
协议栈里一个自定义的任务ID是怎么设置的,我没想通,请各位大神指点迷津
此帖出自无线连接论坛

点评

你可以可以偶数来设置比如#define MY_Event 0x0000 那么下一个事件为则为0x0002,相当于每次左移一位。  详情 回复 发表于 2014-1-2 13:39
 
 
 

回复

12

帖子

0

TA的资源

一粒金砂(初级)

6
 
好好学习
此帖出自无线连接论坛
 
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

7
 
王加辉 发表于 2013-12-29 17:30
协议栈里一个自定义的任务ID是怎么设置的,我没想通,请各位大神指点迷津

你可以可以偶数来设置比如#define MY_Event 0x0000 那么下一个事件为则为0x0002,相当于每次左移一位。
此帖出自无线连接论坛
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 
 

回复

29

帖子

0

TA的资源

一粒金砂(中级)

8
 
PM3模式下只能用外部中断才能唤醒,这里说的是外部端口唤醒,也就在按键之类的才能唤醒,串口中断不属于这个范围,不能唤醒的。
此帖出自无线连接论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
快速回复 返回顶部 返回列表