main.lst

来自「菜鸟,详细NRF24E1运用,程序,电路」· LST 代码 · 共 427 行

LST
427
字号
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\KEIL C  V4\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

*** WARNING C500 IN LINE 1 OF MAIN.C: LICENSE ERROR (R208: RENEW LICENSE ID CODE (LIC))

   1          /******************
   2          /
   3          /源代码部分
   4          /
   5          ******************/
   6          
   7          #include "reg24le1.h"    /* 头文件包含部分   */
   8          
   9          /******************
  10          /
  11          /宏定义低功耗模式
  12          /
  13          ******************/
  14          #define  DeepSleep   0x00
  15          #define  Mem_Ret_On  0x01
  16          #define  Mem_Ret_Off 0x02
  17          #define  Reg_Ret_On  0x03
  18          #define  Reg_Ret_Off 0x04
  19          #define  Standby     0x05
  20          
  21          /******************
  22          /
  23          /宏定义定时器中断号
  24          /
  25          ******************/
  26          #define  TF0         0x01  
  27          
  28          /******************
  29          /
  30          /定义布尔逻辑常量
  31          /
  32          *******************/
  33          #define  true        0x01
  34          #define  false       0x00
  35          /******************
  36          /
  37          /定义一个LED指示灯
  38          /
  39          ******************/
  40          #define  LED         P07
  41          
  42          /******************
  43          /
  44          /中断开关宏定义
  45          /
  46          *******************/
  47          #define Disableint() {EA=0;}
  48          #define Enableint()  {EA=1;}
  49          
  50          /******************
  51          /
  52          /定义全局变量seconds用于计秒数
  53          /
  54          ******************/
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 2   

  55          static unsigned char seconds=0;
  56          /******************
  57          /
  58          /函数原型声明方便别的函数调用
  59          /
  60          ******************/
  61          void getlastpowerdownmode(void);
  62          /******************
  63          /
  64          /延时函数,通过修改延时参数实现延时的不同
  65          /
  66          *******************/
  67          void  delay(int x)
  68          {
  69   1      int i,j;
  70   1       for(i=x;i>0;i--)
  71   1         for(j=120;j>0;j--)
  72   1           {
  73   2               ;
  74   2               }
  75   1      
  76   1      }
  77          
  78          /*****************
  79          /
  80          /nRF24LE1的uart的初始化,通过修改输入的参数可以初始化化不同的串口传输速率
  81          /
  82          ******************/
  83          void baudrate(int rate)
  84          {
  85   1      
  86   1              P0DIR &= 0xF7;                          // P0.3 (TxD) 
  87   1              P0DIR |= 0x10;                          // P0.4 (RxD)    
  88   1                      
  89   1              S0CON  = 0x50;  
  90   1              PCON  |= 0x80;                          // 倍增
  91   1              WDCON |= 0x80;                          // 选用内部波特率发生器
  92   1      
  93   1       switch(rate)
  94   1        {
  95   2              case 38400:
  96   2                                 {
  97   3                                      S0RELL = 0xF3;  
  98   3                      S0RELH = 0x03;   
  99   3                                 }
 100   2                                 break;
 101   2              case 19200:
 102   2                         {
 103   3                                      S0RELL =0xE6;   
 104   3                      S0RELH =0x03;                     
 105   3                                 }
 106   2                                 break;
 107   2              case 14400:
 108   2                     {
 109   3                                      S0RELL =0xDE;   
 110   3                      S0RELH =0x03;    
 111   3                                 }
 112   2                                 break;
 113   2              case 9600 :
 114   2                         {
 115   3                                      S0RELL =0xCC;   
 116   3                      S0RELH =0x03;    
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 3   

 117   3                                 }
 118   2                                 break;
 119   2              case 4800 :
 120   2                         {
 121   3                                      S0RELL =0x98;   
 122   3                      S0RELH =0x03;    
 123   3                                 }
 124   2                                 break;
 125   2              case 2400 :
 126   2                         {
 127   3                                      S0RELL =0x30;   
 128   3                      S0RELH =0x03;    
 129   3                                 }
 130   2                                 break;
 131   2          default   :
 132   2                         {
 133   3                                      S0RELL =0xCC;   
 134   3                      S0RELH =0x03;    
 135   3                                 }
 136   2                                 break;
 137   2      
 138   2          }
 139   1      
 140   1              return ;
 141   1      }
 142          
 143          /****************
 144          /
 145          /定时器初始函数
 146          /
 147          ****************/
 148          void timer0init(void)
 149          {
 150   1      
 151   1      TMOD=0X01;
 152   1      TH0=(65536-50000)/256;
 153   1      TL0=(65536-50000)%256;
 154   1      ET0=1;
 155   1      TR0=1;
 156   1      }
 157          
 158          /****************
 159          /
 160          /nRF24LE1工作时钟配置函数
 161          /
 162          *****************/
 163          void workclkset(void)
 164          {
 165   1          CLKCTRL   = 0x28;                      // 使用 XCOSC16M     
 166   1              CLKLFCTRL = 0x01; 
 167   1      }
 168          
 169          /****************
 170          /
 171          /nRF24LE1的低功耗模式设置
 172          /
 173          ****************/
 174          void powrdownmodeset(unsigned char mode)
 175          {
 176   1        char low_power=0;
 177   1        switch(mode)
 178   1        {
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 4   

 179   2         case DeepSleep  :low_power=0x01;break;
 180   2         case Mem_Ret_On :low_power=0x03;break;
 181   2         case Mem_Ret_Off:low_power=0x02;break;
 182   2         case Reg_Ret_On :low_power=0x04;break;
 183   2         case Reg_Ret_Off:low_power=0x04;break;
 184   2         case Standby    :low_power=0x07;break;
 185   2         default         :low_power=0x07;break;
 186   2        }
 187   1       
 188   1        CLKCTRL=0x10;                              /*进入到睡眠前一定要启用RC时钟源*/
 189   1        OPMCON|=0x02;
 190   1        PWRDWN|=low_power;
 191   1      
 192   1      }
 193          
 194          /****************
 195          /
 196          /引脚唤醒模式设置
 197          /
 198          ****************/
 199          void retentionpinset(void)
 200          {
 201   1       WUOPC0=0x00;
 202   1       OPMCON=0x00;               /*  开锁                          */ 
 203   1       WUOPC1=0x00;               /*唤醒的引脚设置无                */
 204   1       WUOPC0=0x01;               /*唤醒的引脚设置为P0.0            */ 
 205   1       P0DIR|=0x01;               /*P0.0初始化为输入I/O口           */
 206   1       P00   =0x00;               /*P0.0初始化为高电平              */                     
 207   1      }
 208          
 209          /***************
 210          /
 211          /串口发送一个字符
 212          /
 213          ****************/
 214          void putch(char ch)
 215          {
 216   1      S0BUF=ch;
 217   1      while(!TI0);
 218   1      TI0=0;
 219   1      }
 220          
 221          /***************
 222          /
 223          /串口发送一个字符串
 224          /
 225          ***************/
 226          void prints(char * str)
 227          {
 228   1      while(*str!='\0')
 229   1       {
 230   2        putch(*str++);
 231   2        }
 232   1      }
 233          
 234          /***************
 235          /
 236          /换行函数nextline()
 237          /
 238          ****************/
 239          void nextline(void)
 240          {
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 5   

 241   1       putch('\n');
 242   1      }
 243          
 244          /***************
 245          /
 246          /获得上一次低功耗模式
 247          /
 248          ****************/
 249          void getlastpowerdownmode(void)
 250          {
 251   1       char tmp=0;
 252   1       tmp=PWRDWN&0x03;
 253   1       nextline();
 254   1       switch(tmp)
 255   1       {
 256   2        case 0x00:prints("Power Off!"); break;
 257   2        case 0x01:prints("Deep Sleep!");break;
 258   2        case 0x02:prints("Memory Retention, Timer Off!");break;
 259   2        case 0x03:prints("Memory Retention, Timer On!") ;break;
 260   2        case 0x04:prints("Register Retention!");break;
 261   2        case 0x07:prints("Standby!");break;
 262   2        default  :prints("Error Or Reserved!");break;
 263   2        }
 264   1      }
 265          
 266          /**************
 267          /
 268          /获取上一次复位的原因
 269          /
 270          **************/
 271          void getlastresetinf(void)
 272          {
 273   1       char tmp=0;
 274   1       tmp=RSTREAS&0x07;
 275   1       nextline();
 276   1       prints("Reset Reason:");
 277   1       if(0==tmp)
 278   1         {
 279   2         prints("On-chip reset generator!");
 280   2         }
 281   1       else if(0x01==tmp)
 282   1         {
 283   2         prints("RST pin!");
 284   2         }
 285   1       else if(0x02==tmp)
 286   1         {
 287   2         prints("Watchdog!");
 288   2         }
 289   1       else if(0x04==tmp)
 290   1         {
 291   2         prints("Reset from on-chip hardware debugger!");
 292   2         }
 293   1       else if(0x06==tmp)
 294   1         {
 295   2         prints(" a reset from the debugger followed by a watchdog reset!");
 296   2         }
 297   1      
 298   1      }
 299          
 300          /*************
 301          /
 302          /串口显示程序调试信息
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 6   

 303          /
 304          **************/
 305          void programdebug(char * bugs)
 306          {
 307   1       nextline();
 308   1       prints("Debug Information:");
 309   1       prints((char *)bugs);  
 310   1      
 311   1      }
 312          
 313          /*************
 314          /
 315          /定时器0中断服务函数
 316          /
 317          **************/
 318          void timer0isr() interrupt TF0
 319          {
 320   1       static char times=0;
 321   1       TR0=0;
 322   1       TH0=(65536-50000)/256;
 323   1       TL0=(65536-50000)%256;
 324   1       times++;
 325   1       if(20==times)
 326   1        {
 327   2        LED=!LED;
 328   2        times=0;
 329   2        seconds++;
 330   2        nextline();
 331   2        programdebug("Time Left:");
 332   2        putch(((5-seconds)+'0'))  ;
 333   2        if(5==seconds)
 334   2          {
 335   3              delay(100);
 336   3          programdebug("Sleeping..!");
 337   3              powrdownmodeset(DeepSleep);
 338   3               }
 339   2        if(60==seconds)
 340   2          {seconds=0;}
 341   2        }
 342   1       TR0=1;
 343   1      }
 344          
 345          /*************
 346          /
 347          /nRF24LE1的I/O口初始化配置函数
 348          /
 349          *************/
 350          void chipiocfg(void)
 351          {
 352   1      P0DIR&=0X78;
 353   1      P07=0;
 354   1      }
 355          
 356          /*************
 357          /
 358          /主函数部分
 359          /
 360          **************/
 361          void main(void)
 362          {
 363   1        char flag=1;
 364   1        Disableint()      ;
C51 COMPILER V9.00   MAIN                                                                  11/13/2010 14:45:14 PAGE 7   

 365   1        workclkset()      ;                /*初始化工作时钟          */
 366   1        baudrate(9600)    ;                /*波特率初始化9600        */
 367   1        chipiocfg()       ;                            /*nRF24LE1的I/O口配置函数 */
 368   1        timer0init()      ;                /*定时器初始化函数        */
 369   1        delay(100)        ;                /*延时函数                */
 370   1        getlastresetinf() ;                /*获取上一次系统复位的原因*/
 371   1        nextline();
 372   1        getlastpowerdownmode();            /*获取上一次低功耗模式    */
 373   1        retentionpinset() ;                /*设置唤醒引脚            */
 374   1        delay(100)        ;
 375   1        Enableint()       ;
 376   1        while(1)
 377   1        {
 378   2         if(flag)
 379   2          {
 380   3               flag=0;
 381   3               delay(100);
 382   3           getlastpowerdownmode();
 383   3          }
 384   2        }
 385   1      
 386   1      }
 387          
 388          
 389          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    631    ----
   CONSTANT SIZE    =    323    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      2       7
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  1 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?