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

📄 main.lst

📁 RFID模块发射接收的C源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 172   1              SPI_Write_Buf(WR_TX_PLOAD, id_buf, TX_PLOAD_WIDTH); // 写数据到FIFO
 173   1              RFCE=1;                                                                                         // 启动发射
 174   1              delay(10);                                                                                      // 发射脉冲
 175   1              RFCE=0;                                                                                         
 176   1      }
 177          
 178          /**************************************************
 179          功能:设置为接收模式
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 17:44:01 PAGE 4   

 180          **************************************************/
 181          void RX_Mode(void)
 182          {
 183   1              RFCE=0;
 184   1              SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);           // 上电, CRC为2 bytes,接收模式,允许RX_DR产生中断
 185   1              RFCE = 1;                                                                       // 启动接收模式
 186   1      }
 187          
 188          /**************************************************
 189          功能:RF初始化
 190          **************************************************/
 191          void rf_init(void)
 192          {
 193   1              RFCE = 0;                                               // RF关闭
 194   1              RFCKEN = 1;                                             // 启动RF时钟
 195   1              RF = 1;                                                 // 允许RF中断
 196   1      
 197   1              delay(1000);
 198   1      
 199   1              SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);           // 设置发射地址长度
 200   1              SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);        // 设置接收地址长度
 201   1      
 202   1              SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);                            // 启动自动应答功能
 203   1              SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);                        // PIPE0接收数据
 204   1              SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);                       // 自动重传10次
 205   1              SPI_RW_Reg(WRITE_REG + RF_CH, 40);                              // RF频率2440MHz
 206   1              SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                         // 发射功率0dBm, 传输速率2Mbps,
 207   1              SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);       // PIPE0 接收数据包长度                 
 208   1      }
 209          /**************************************************
 210          功能:RF中断服务程序
 211          **************************************************/
 212          void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
 213          {
 214   1              sta=SPI_Read(STATUS);           // 读出状态值
 215   1              if(RX_DR)                                                                       
 216   1              {
 217   2                      SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// 读出FIFO的数据
 218   2                      SPI_RW_Reg(FLUSH_RX,0);                                                 // 清除RX的FIFO
 219   2              }                                                       
 220   1              SPI_RW_Reg(WRITE_REG+STATUS,0x70);                                      // 清除所有中断标志 
 221   1      }
 222          
 223          /**************************************************
 224          功能:RTC2初始化
 225          **************************************************/
 226          void rtc2_init(void)
 227          {
 228   1              CLKLFCTRL=0x01;                                                                         // 使用RC 32KHz时钟
 229   1              RTC2CMP0=0xff;                                                                          // 定时2秒
 230   1              RTC2CMP1=0xff;
 231   1              RTC2CON=0x06;                                                                           // 比较模式
 232   1              WUIRQ=1;                                                                                        // 允许TICK中断
 233   1      }
 234          /**************************************************
 235          功能:启动RTC2
 236          **************************************************/
 237          void rtc2_on(void)
 238          {
 239   1              RTC2CON |=0x01;                                                                 
 240   1      }
 241          /**************************************************
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 17:44:01 PAGE 5   

 242          功能:关闭RTC2
 243          **************************************************/
 244          void rtc2_off(void)
 245          {                                                                                                               
 246   1              RTC2CON &=~0x01;                                                                        
 247   1      }
 248          /**************************************************
 249          功能:RTC2中断服务程序
 250          **************************************************/
 251          void RTC2_IRQ(void) interrupt INTERRUPT_TICK 
 252          {
 253   1              LED2=!LED2;                                                                                     
 254   1      }
 255          /**************************************************
 256          功能:串口初始化子程序
 257          说明:波特率19.2K,使用内部波特率发生器
 258          **************************************************/
 259          void uart_init(void)
 260          {
 261   1          ES0 = 0;                                                    // 关UART0中断
 262   1          REN0 = 1;                                                   // 允许接收
 263   1          SM0 = 0;                                                    // 串口模式1,8bit可变波特率
 264   1          SM1 = 1;                   
 265   1          PCON |= 0x80;                                               // SMOD = 1 ,PCON=1001000
 266   1          ADCON |= 0x80;                                              // 选择内部波特率发生器,ADCON=10000000;
 267   1      
 268   1          S0RELL = 0xe6;                                              // 波特率19.2K(十进制998=十六进制0x03e6)
 269   1          S0RELH = 0x03;
 270   1          TI0 = 0;                                                                    // 清发送完成标志
 271   1              S0BUF=0x99;                                                                     // 送初值
 272   1      }                                       
 273          /**************************************************
 274          功能:I/O口初始化
 275          **************************************************/
 276          void io_init(void)
 277          {
 278   1              P0DIR = p0dir;                                                          // 设定I/O口输入输出
 279   1              P1DIR = p1dir;                                  
 280   1      
 281   1              LED1=LED2=LED3=0;                                                       // 灯全亮
 282   1              delay(1000);
 283   1              LED1=LED2=LED3=1;                                                       // 灯全灭                  
 284   1      }  
 285          /**************************************************
 286          功能:主程序
 287          **************************************************/
 288          void main(void)
 289          {
 290   1              io_init();                                                                      // I/O口初始化
 291   1              rf_init();                                                                      // RF初始化                            
 292   1              EA=1;                                       // 允许中断  
 293   1              rtc2_init();                                                             // RTC2初始化
 294   1                                                                                                      
 295   1              while(1)
 296   1              {
 297   2                      rtc2_off();                                                             // 关RTC2 
 298   2                      TX_Mode();                                                              // 发射数据
 299   2                      while (!(TX_DS|MAX_RT));                                // 等待发射结束
 300   2                      sta = 0;
 301   2                      PD_Mode();                                                              // 关RF
 302   2                      rtc2_on();                                                              // 开RTC2
 303   2                      PWRDWN = 0x04;                                                  // 进入低功耗模式,等待RTC2唤醒
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 17:44:01 PAGE 6   

 304   2                      delay(10);                                                                      // I/O口初始化
 305   2                  uart_init();                                        // 串口初始化 
 306   2              rf_init();                                                                      // RF初始化                                                                 
 307   2                      RX_Mode();
 308   2                      delay(1000000000);
 309   2                      if(!RX_DR)
 310   2                      {
 311   3                              io_init();                                                                      // I/O口初始化
 312   3                              rf_init();                                                                      // RF初始化                            
 313   3                              EA=1;                                       // 允许中断  
 314   3                              rtc2_init();                                                             // RTC2初始化
 315   3                              rtc2_off();                                                             // 关RTC2 
 316   3                              TX_Mode();                                                              // 发射数据
 317   3                              while (!(TX_DS|MAX_RT));                                // 等待发射结束
 318   3                              sta = 0;
 319   3                              PD_Mode();                                                              // 关RF
 320   3                              rtc2_on();                                                              // 开RTC2
 321   3                              PWRDWN = 0x04;                                                   // 进入低功耗模式,等待RTC2唤醒        
 322   3                                                                                      
 323   3                      }
 324   2                      else
 325   2                      {while(RX_DR);}         
 326   2                      LED2=0;
 327   2                      delay(100000);
 328   2                      LED2=1;
 329   2      
 330   2              }
 331   1      }                                       
 332          
 333          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    583    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47      10
   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 + -