• 嵌入式成长轨迹55 【Zigbee项目】【CC2430基础实验】【系统唤醒】


    本次实验使能外部I/O 中断唤醒CC2430,每次唤醒红色 LED 闪烁10 次,然后进入低功耗模式,在进入PM3 之前程序会将两个LED 灯关闭。在应用中也可以不关闭以指示CC2430处于低功耗模式,可以中断激活。


    void PowerMode(uchar sel);
    函数原型:

     1 void PowerMode(uchar sel) 
     2 { 
     3  uchar i,j; 
     4   i = sel; 
     5  if(sel<4) 
     6  { 
     7   SLEEP &= 0xfc; 
     8   SLEEP |= i; 
     9   for(j=0;j<4;j++); 
    10   PCON = 0x01; 
    11  } 
    12  else 
    13  { 
    14       PCON = 0x00; 
    15  } 
    16 } 

    函数功能:使系统进入sel 指定的电源模式下,这里的 sel 只能是 0-3 之间的数,程序只能在CPU 全速运行时执行,也就是说函数中能使系统从全速运行进入 PM0-PM3 而不可以从PM0-PM3进入全速运行

      1 //main.c
      2 #include <ioCC2430.h>
      3 
      4 #define uint unsigned int
      5 #define uchar unsigned char
      6 #define DELAY 10000
      7 
      8 //小灯控端口定义
      9 #define RLED P1_0
     10 #define YLED P1_1
     11 
     12 void Delay(void);
     13 void Init_IO_AND_LED(void);
     14 void PowerMode(uchar sel);
     15 
     16 /****************************************************************
     17 *函数功能:延时                        
     18 *入口参数:无                            
     19 *返回值  :无                            
     20 *说  明    :可在宏定义中改变延时长度            
     21 ****************************************************************/
     22 void Delay(void)
     23 {
     24     uint tt;
     25     for(tt = 0;tt<DELAY;tt++);
     26     for(tt = 0;tt<DELAY;tt++);
     27     for(tt = 0;tt<DELAY;tt++);
     28     for(tt = 0;tt<DELAY;tt++);
     29     for(tt = 0;tt<DELAY;tt++);
     30 }
     31 
     32 /****************************************************************
     33 *函数功能:初始化电源                    
     34 *入口参数:para1,para2,para3,para4            
     35 *返回值    :无                        
     36 *说  明    :para1,模式选择                        
     37 *                                                                *
     38 * para1  0     1    2    3                                            *
     39 * mode     PM0    PM1    PM2    PM3                                            *
     40 *                                                                *
     41 ****************************************************************/
     42 void PowerMode(uchar sel)
     43 {
     44     uchar i,j;
     45     i = sel;
     46     if(sel<4)
     47     {
     48         SLEEP &= 0xfc;
     49         SLEEP |= i;
     50         for(j=0;j<4;j++);
     51         PCON = 0x01;
     52     }
     53     else
     54     {
     55         PCON = 0x00;
     56     }
     57 }
     58 
     59 /****************************************************************
     60 *    函数功能:初始化I/O,控制LED                            
     61 *    入口参数:无                        
     62 *    返回值    :无                        
     63 *    说  明    :初始化完成后关灯                
     64 ****************************************************************/
     65 void Init_IO_AND_LED(void)
     66 {
     67   /*
     68     P1DIR = 0X03;
     69     RLED = 1;
     70     YLED = 1;
     71 
     72     P1SEL &= ~0X0C;
     73     P1DIR &= ~0X0C;
     74     P1INP  &= ~0X0c;//有上拉、下拉
     75     P2INP &= ~0X40; //选择上拉
     76 
     77     P1IEN |= 0X0c;   //P12 P13
     78     PICTL |= 0X02;   //下降沿
     79 
     80     EA = 1;
     81     IEN2 |= 0X10;  //P1IE = 1;
     82 
     83     P1IFG |= 0x00;   //P12 P13
     84   */
     85     P1DIR = 0X03; //0为输入(默认),1为输出
     86     RLED = 0;
     87     GLED = 1;
     88 
     89     P0SEL&=~0X60;
     90     P0DIR&=~0X60;
     91 
     92     P0INP|=0X60;//有上拉、下拉
     93 
     94     /*
     95     P1IEN |= 0X0c;   //P12 P13
     96     PICTL |= 0X02;   //下降沿
     97     */
     98     PICTL |= 0X11;   //P0口中断允许,下降沿触发
     99 
    100     EA = 1;
    101     //IEN2 |= 0X10;   // P1IE = 1;
    102     IEN1 |= 0X20;   // P0IE = 1
    103 
    104     //P1IFG &= ~0x0C;   //P12 P13中断标志清0
    105     P0IFG &= ~0x60;   //P05 P06中断标志清0
    106 };
    107 /****************************************************************
    108 *    函数功能:主函数                    
    109 *    入口参数:                    
    110 *    返回值    :无                        
    111 *    说  明    :10次绿色LED闪烁后进入睡眠状态            
    112 ****************************************************************/
    113 void main()
    114 {
    115     uchar count = 0;
    116     Init_IO_AND_LED();
    117 
    118     RLED = 0 ;       //开红色LED,系统工作指示
    119     Delay();        //延时
    120     Delay();
    121     Delay();
    122     Delay();
    123 
    124     while(1)
    125     {
    126         YLED = !YLED;
    127                 RLED = 0;
    128         count++;
    129         if(count >= 20)
    130                 {
    131                   count = 0;
    132                   RLED = 1;
    133                   PowerMode(3);
    134           //10次闪烁后进入睡眠状态
    135                 }
    136 
    137         //Delay();
    138         Delay();
    139                 //延时函数无形参,只能通过改变系统时钟频率
    140                 //来改变小灯的闪烁频率
    141     };
    142 }
    143 
    144 /*****************************************
    145 //唤醒系统
    146 *****************************************/
    147 #pragma vector = P0INT_VECTOR
    148  __interrupt void P0_ISR(void)
    149  {
    150         if(P0IFG>0)
    151         {
    152           P0IFG = 0;
    153         }
    154         P1IF = 0;
    155  }
  • 相关阅读:
    Python爬取豆瓣电影top
    那些年我们踩的坑,依然有人在踩坑
    工行ICBC_WAPB_B2C支付接口
    SharePoint2016配置工作流开发环境
    Html+Css实现梯形选项卡
    The Ribbon Tab with id: "Ribbon.Read" has not been made available for this page or does not exist.
    SharePoint自动初始化网站列表
    常用的SharePoint命令行代码
    SharePoint开启错误提示
    Asp.Net写入读取Xml(处理文件权限)
  • 原文地址:https://www.cnblogs.com/zeedmood/p/2666942.html
Copyright © 2020-2023  润新知