⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.lst

📁 NRF9E5简易表演程序 用于无线收发数据。
💻 LST
字号:
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 1   


C51 COMPILER V7.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND TABS(8)

line level    source

   1          #include <reg9e5.h>
   2          
   3          
   4          #define         int8u   unsigned char 
   5          #define         int16u  unsigned int 
   6          #define         INT8U   unsigned char 
   7          #define         INT16U  unsigned int
   8          
   9          
  10          
  11          #define WRC     0x00 //W_RF_CONFIG
  12          #define RRC     0x10 //R_RF_CONFIG
  13          #define WTP     0x20 //W_TX_PAYLOAD
  14          #define RTP     0x21 //R_TX_PAYLOAD
  15          #define WTA     0x22 //W_TX_ADDRESS
  16          #define RTA     0x23 //R_TX_ADDRESS
  17          #define RRP     0x24 //R_RX_PAYLOAD
  18          #define RAD     0x40 //R_ADC_DATA 
  19          #define WAC     0x44 //W_ADC_CONFIG
  20          #define RAC     0x46 //R_ADC_CONFIG
  21          #define WTU     0x50 //W_TEST_UNLOCK (use with data A5)
  22          #define WTR     0x52 //W_TEST_REGISTER
  23          #define RTR     0x53 //R_TEST_REGISTER
  24          #define CC      0x80 //CHANNEL_CONFIG
  25          #define SAV     0xC0 //START_ADC_CONV
  26          #define HFREQ    1     // 0=433MHz, 1=868/915MHz    19/08/2004 set 915mhz
  27          #define POWER    3     // 0=min power...3 = max power
  28          
  29          #define TurnBY()        TRX_CE = 0;TXEN = 0
  30          
  31          
  32          sbit LEDG  =P0^6;
  33          sbit LEDR  =P0^5;
  34          
  35                  
  36          int8u Nrf9e5Config[10] = {      
  37                                          0x28,                   //频道设置
  38                                          
  39                                          0x0e,                   //自动重发关,发送节电模式关,输出功率10dB,915MHZ
  40                                          
  41                                          0x44,                   //收发地址都为4字节
  42                                          
  43                                          0x0a,                   //接收数据长度,10字节
  44                                          
  45                                          0x0a,                   //发送数据长度,10字节
  46                                          
  47                                          0xe7,
  48                                          0xe7,
  49                                          0xe7,
  50                                          0xe7,                   //地址
  51                                                                  
  52                                          0xdf                    //CRC开,16位校验,16M晶振,外部时钟使能500KHZ输出
  53                                          };
  54          
  55          
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 2   

  56          int8u Rxbuf[37];
  57          
  58          
  59          int8u timer[2];
  60          int8u T0LREL, T0HREL;
  61          
  62          
  63          
  64          /*****************************************************************************************
  65          //函数名:void delay(int16u s)
  66          //输入:时间
  67          //输出:无
  68          //功能描述:普通廷时
  69          /*****************************************************************************************/
  70          void delay(int16u s)
  71          {
  72   1              int16u i;
  73   1              for(i=0; i<s; i++);
  74   1              for(i=0; i<s; i++);
  75   1      }
  76          
  77          /*****************************************************************************************
  78          //函数名:int8u SpiReadWrite(int8u b)
  79          //输入:发送的数据
  80          //输出:收到的数据
  81          //功能描述:SPI发送接收一个字节
  82          /*****************************************************************************************/
  83          int8u SpiReadWrite(int8u b)
  84          {
  85   1              EXIF &= ~0x20;                              // Clear SPI interrupt
  86   1              SPI_DATA = b;                               // Move byte to send to SPI data register
  87   1              while((EXIF & 0x20) == 0x00);                // Wait until SPI hs finished transmitting
  88   1              return SPI_DATA;
  89   1      }
  90          
  91          
  92          
  93          /*****************************************************************************************
  94          //函数名:InitTimer(void)
  95          //输入:无
  96          //输出:无
  97          //功能描述:定时器0初始化
  98          /*****************************************************************************************/
  99          void InitTimer(void)
 100          {
 101   1              timer[0] = timer[1] = 0;
 102   1      
 103   1              TR0 = 0;
 104   1              TMOD &= ~0x03;
 105   1              TMOD |= 0x01;                               // mode 1
 106   1              CKCON |= 0x00;                              // T0M = 1 (/4 timer clock)
 107   1      
 108   1              T0LREL = 0x60;                              // 1KHz tick...
 109   1              T0HREL = 0xF0;                              // ... = 65536-16e6/(4*1e3) = F060h 
 110   1              TF0 = 0;                                    // Clear any pending Timer0 interrupts
 111   1              TR0 = 1;                                    // Start Timer0
 112   1              ET0 = 1;                                    // Enable Timer0 interrupt
 113   1      }
 114          
 115                  
 116          
 117          
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 3   

 118          /*****************************************************************************************
 119          //函数名:ResetTimer(int8u n)
 120          //输入:要复位的计时器
 121          //输出:无
 122          //功能描述:复位计时器
 123          /*****************************************************************************************/
 124          void ResetTimer(int8u n)
 125          {
 126   1              ET0 = 0;                                    // Disable Timer0 interrupt
 127   1              timer[n & 0x01] = 0;                        // Clear timer[n]
 128   1              ET0 = 1;                                    // Enable Timer0 interrupt
 129   1      }
 130          
 131          
 132          /*****************************************************************************************
 133          //函数名:int16u GetTimer(int8u n)
 134          //输入:要读的计时器
 135          //输出:读出值
 136          //功能描述:读计时器
 137          /*****************************************************************************************/
 138          int16u GetTimer(int8u n)
 139          {
 140   1              int16u tmp;
 141   1              ET0 = 0;                                    // Disable Timer0 interrupt
 142   1              tmp = timer[n];                             // Clear timer[n]
 143   1              ET0 = 1;                                    // Enable Timer0 interrupt
 144   1              return tmp;
 145   1      }
 146                  
 147          
 148          
 149          /*****************************************************************************************
 150          //函数名:void InitCpu(void)
 151          //输入:无
 152          //输出:无
 153          //功能描述:Cpu初始化
 154          /*****************************************************************************************/             
 155          void InitCpu(void)
 156          {
 157   1              int8u cklf;
 158   1      
 159   1              SPICLK = 0;                         // Max SPI clock
 160   1              SPI_CTRL = 0x02;                    // Connect internal SPI controller to Radio
 161   1      
 162   1              // Switch to 16MHz clock:
 163   1              RACSN = 0;
 164   1              SpiReadWrite(RRC | 0x09);
 165   1              cklf = SpiReadWrite(0) | 0x04;
 166   1              RACSN = 1;
 167   1              RACSN = 0;
 168   1              SpiReadWrite(WRC | 0x09);
 169   1              SpiReadWrite(cklf); 
 170   1              RACSN = 1;
 171   1        
 172   1              P0_DIR=P0_DIR&0x1F;        //led p0.6  p0.5 P0.7 output  
 173   1              LEDR=0;
 174   1              LEDG=0;
 175   1              P0_DIR |= 0x18;             // P0.4 /3 is input
 176   1              P0_DIR &= 0xf6;                 
 177   1         
 178   1              InitTimer();
 179   1              EA = 1;
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 4   

 180   1      }
 181          
 182          /*****************************************************************************************
 183          //函数名:void Init9E5(void)
 184          //输入:无
 185          //输出:无
 186          //功能描述:Nrf9e5初始化,这里我们配置成32位地址。
 187          /*****************************************************************************************/
 188          void Init9E5(void)
 189          {       
 190   1              int8u i;
 191   1              
 192   1              TRX_CE=0;
 193   1              TXEN=0;                         //配置模式
 194   1              
 195   1              RACSN = 0;
 196   1              SpiReadWrite(WRC);
 197   1              for(i=0; i<10; i++)
 198   1              {
 199   2                      SpiReadWrite(Nrf9e5Config[i]); 
 200   2              }
 201   1      
 202   1              RACSN = 1;
 203   1      }
 204          
 205          
 206          /*****************************************************************************************
 207          //函数名:int8u Recepacket(void)
 208          //输入:接收数据缓冲区
 209          //输出:成功返回1,否则返回0
 210          //功能描述:接收数据存在缓冲区内
 211          /*****************************************************************************************/
 212          int8u Recepacket(void)
 213          {
 214   1              int8u i;
 215   1              TXEN = 0;
 216   1              TRX_CE = 1;
 217   1              ResetTimer(1);
 218   1              while(DR == 0)
 219   1              {
 220   2                      if(GetTimer(1) > 300)
 221   2                      {
 222   3                              TRX_CE = 0;
 223   3                              return 0;
 224   3                      }
 225   2                      
 226   2              }
 227   1              TRX_CE = 0;
 228   1              
 229   1              RACSN = 0;
 230   1              SpiReadWrite(RRP);
 231   1              i = 0;
 232   1      
 233   1              for(i=0; i<4; i++)
 234   1              {
 235   2                      Rxbuf[i] = SpiReadWrite(0);
 236   2              }
 237   1              while(DR)
 238   1              {
 239   2                      SpiReadWrite(0);
 240   2              }
 241   1              RACSN = 1;
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 5   

 242   1              return 1;
 243   1              
 244   1      }
 245          
 246          
 247          
 248          
 249          /******************************************************************************************
 250          *******************************************************************************************
 251          ************************************中断服务程序*********************************************
 252          *******************************************************************************************
 253          ******************************************************************************************/
 254          void Timer0ISR (void) interrupt 1
 255          {
 256   1              EA = 0;
 257   1              TH0 = T0HREL;                               // Reload Timer0 high byte
 258   1              TL0 = T0LREL;                               // Reload Timer0 low byte
 259   1              timer[0]++;                                 // Increment timer[0]
 260   1              timer[1]++; 
 261   1              EA =1;
 262   1      }
 263          
 264          
 265          
 266          
 267          /******************************************************************************************
 268          *******************************************************************************************
 269          ******************************************主程序********************************************
 270          *******************************************************************************************
 271          ******************************************************************************************/
 272          main()
 273          {
 274   1      
 275   1              int8u temp;
 276   1              InitCpu();
 277   1              delay(5000);
 278   1              
 279   1              Init9E5();
 280   1              
 281   1              LEDR = 1;
 282   1              LEDG = 1;
 283   1              
 284   1      
 285   1              while(1)
 286   1              {
 287   2                      temp = Recepacket();
 288   2                      if(temp == 1)
 289   2                      {
 290   3                              LEDR = 0;
 291   3                              LEDG = 0;
 292   3                              delay(20000);
 293   3                              LEDR = 1;
 294   3                              LEDG = 1;
 295   3                      }
 296   2              }
 297   1      
 298   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    313    ----
   CONSTANT SIZE    =   ----    ----
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:57:28 PAGE 6   

   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     51    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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