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

📄 main.lst

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

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

 118   1              T0LREL = 0x60;                              // 1KHz tick...
 119   1              T0HREL = 0xF0;                              // ... = 65536-16e6/(4*1e3) = F060h
 120   1          
 121   1              TF0 = 0;                                    // Clear any pending Timer0 interrupts
 122   1              TR0 = 1;                                    // Start Timer0
 123   1              ET0 = 1;                                    // Enable Timer0 interrupt
 124   1      }
 125          
 126                  
 127          
 128          /*****************************************************************************************
 129          //函数名:ResetTimer(INT8U n)
 130          //输入:要复位的计时器
 131          //输出:无
 132          //功能描述:复位计时器
 133          /*****************************************************************************************
 134          void ResetTimer(INT8U n)
 135          {
 136                  ET0 = 0;                                    // Disable Timer0 interrupt
 137                  timer[n & 0x01] = 0;                        // Clear timer[n]
 138                  ET0 = 1;                                    // Enable Timer0 interrupt
 139          }
 140          
 141          
 142          
 143          /*****************************************************************************************
 144          //函数名:INT16U GetTimer(INT8U n)
 145          //输入:要读的计时器
 146          //输出:读出值
 147          //功能描述:读计时器
 148          /*****************************************************************************************
 149          INT16U GetTimer(INT8U n)
 150          {
 151                  INT16U tmp;
 152                  ET0 = 0;                                    // Disable Timer0 interrupt
 153                  tmp = timer[n];                             // read timer[n]
 154                  ET0 = 1;                                    // Enable Timer0 interrupt
 155                  return tmp;
 156          }
 157          */
 158          
 159          
 160                  
 161          /*****************************************************************************************
 162          //函数名:void InitCpu(void)
 163          //输入:无
 164          //输出:无
 165          //功能描述:Cpu初始化
 166          /*****************************************************************************************/             
 167          void InitCpu(void)
 168          {
 169   1              INT8U cklf;
 170   1      
 171   1              SPICLK = 0;                         // Max SPI clock
 172   1              SPI_CTRL = 0x02;                    // Connect internal SPI controller to Radio
 173   1      
 174   1              // Switch to 16MHz clock:
 175   1              RACSN = 0;
 176   1              SpiReadWrite(RRC | 0x09);
 177   1              cklf = SpiReadWrite(0) | 0x04;
 178   1              RACSN = 1;
 179   1              RACSN = 0;
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:59:44 PAGE 4   

 180   1              SpiReadWrite(WRC | 0x09);
 181   1              SpiReadWrite(cklf); 
 182   1              RACSN = 1;
 183   1        
 184   1              P0_DIR=P0_DIR&0x1F;        //led p0.6  p0.5 P0.7 output  
 185   1              LEDR=0;
 186   1              LEDG=0;
 187   1              P0_DIR |= 0x18;             // P0.4 /3 is input
 188   1         
 189   1              InitTimer();
 190   1              EA = 1;
 191   1      }
 192          
 193          /*****************************************************************************************
 194          //函数名:void Init9E5(void)
 195          //输入:无
 196          //输出:无
 197          //功能描述:Nrf9e5初始化,这里我们配置成32位地址。
 198          /*****************************************************************************************/
 199          void Init9E5(void)
 200          {       
 201   1              INT8U i;
 202   1              
 203   1              TRX_CE=0;
 204   1              TXEN=0;                         //配置模式
 205   1              
 206   1              RACSN = 0;
 207   1              SpiReadWrite(WRC);
 208   1              for(i=0; i<10; i++)
 209   1              {
 210   2                      SpiReadWrite(Nrf9e5Config[i]); 
 211   2              }
 212   1      
 213   1              RACSN = 1;
 214   1      }
 215          
 216          /*****************************************************************************************
 217          //函数名:void TransmitBytes(INT8U *pBuf)
 218          //输入:发送的数据
 219          //输出:无
 220          //功能描述:发送发送缓冲区的数据
 221          /*****************************************************************************************/
 222          void TransmitBytes(INT8U *pBuf)
 223          {
 224   1              INT8U i;
 225   1                                              
 226   1              RACSN = 0;
 227   1              SpiReadWrite(WTP);
 228   1              i = 3;
 229   1              while(pBuf[i] != '\0')
 230   1              {
 231   2                      SpiReadWrite(pBuf[i]);
 232   2                      i++;
 233   2              }
 234   1              RACSN = 1;
 235   1              
 236   1              TXEN = 1;
 237   1              TRX_CE = 1;
 238   1              Delay100us(1);
 239   1              TRX_CE = 0;
 240   1      }
 241          
C51 COMPILER V7.08   MAIN                                                                  11/11/2005 16:59:44 PAGE 5   

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


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    294    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     23       3
   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 + -