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

📄 main.lst

📁 RFID模块发射接收的C源代码
💻 LST
📖 第 1 页 / 共 2 页
字号:
 155          void RX_Mode(void)
 156          {
 157   1              RFCE=0;
 158   1              SPI_RW_Reg(WRITE_REG + CONFIG, 0x0f);           // 上电, CRC为2 bytes,接收模式,允许RX_DR产生中断
 159   1              RFCE = 1;                                                                       // 启动接收模式
 160   1      }
 161          /**************************************************
 162          功能:设置为发射模式
 163          **************************************************/
 164          void TX_Mode(void)
 165          {
 166   1              SPI_RW_Reg(WRITE_REG + CONFIG, 0x0e);                           // 上电, CRC为2 bytes,接收模式,允许RX_DR产生中断
 167   1              SPI_Write_Buf(WR_TX_PLOAD, id_buf, TX_PLOAD_WIDTH); // 写数据到FIFO
 168   1              RFCE=1;                                                                                         // 启动发射
 169   1              delay(10);                                                                                      // 发射脉冲
 170   1              RFCE=0;                                                                                         
 171   1      }
 172          /**************************************************
 173          功能:RF初始化
 174          **************************************************/
 175          void rf_init(void)
 176          {
 177   1              RFCE = 0;                                               // RF发射模式关闭,因为前面的串口设置为接收模式了
 178   1              RFCKEN = 1;                                             // 启动RF时钟,16M
 179   1              RF = 1;                                                 // 允许RF中断,
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 11:13:53 PAGE 4   

 180   1              delay(1000);    
 181   1              SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH);           // 设置发射地址长度
 182   1              SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, TX_ADDRESS, TX_ADR_WIDTH);        // 设置接收地址长度
 183   1              SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);                            // 启动自动应答功能
 184   1              SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01);                        // PIPE0接收数据
 185   1              SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a);                       // 自动重传10次
 186   1              SPI_RW_Reg(WRITE_REG + RF_CH, 40);                              // RF频率2440MHz
 187   1              SPI_RW_Reg(WRITE_REG + RF_SETUP, 0x0f);                         // 发射功率0dBm, 传输速率2Mbps,
 188   1              SPI_RW_Reg(WRITE_REG + RX_PW_P0, TX_PLOAD_WIDTH);       // PIPE0 接收数据包长度
 189   1      }
 190          /**************************************************
 191          功能:RF中断服务程序
 192          **************************************************/
 193          void RF_IRQ(void) interrupt INTERRUPT_RFIRQ
 194          {
 195   1              sta=SPI_Read(STATUS);                                                           // 读出状态值
 196   1      
 197   1              if(RX_DR)                                                                       
 198   1              {
 199   2                      SPI_Read_Buf(RD_RX_PLOAD,rx_buf,TX_PLOAD_WIDTH);// 读出FIFO的数据
 200   2                      SPI_RW_Reg(FLUSH_RX,0);                                                 // 清除RX的FIFO
 201   2              }
 202   1      
 203   1              SPI_RW_Reg(WRITE_REG+STATUS,0x70);                                      // 清除所有中断标志 
 204   1      }
 205          /**************************************************
 206          功能:串口初始化子程序
 207          说明:波特率19.2K,使用内部波特率发生器
 208          **************************************************/
 209          void uart_init(void)
 210          {
 211   1          ES0 = 0;                                                    // 关UART0中断
 212   1          REN0 = 1;                                                   // 允许接收
 213   1          SM0 = 0;                                                    // 串口模式1,8bit可变波特率
 214   1          SM1 = 1;                   
 215   1          PCON |= 0x80;                                               // SMOD = 1 ,PCON=1001000
 216   1          ADCON |= 0x80;                                              // 选择内部波特率发生器,ADCON=10000000;
 217   1      
 218   1          S0RELL = 0xe6;                                              // 波特率19.2K(十进制998=十六进制0x03e6)
 219   1          S0RELH = 0x03;
 220   1          TI0 = 0;                                                                    // 清发送完成标志
 221   1              S0BUF=0x99;                                                                     // 送初值
 222   1      }
 223          /**************************************************
 224          功能:向串口发送1 byte数据
 225          **************************************************/
 226          void uart_putchar(uint8_t x)
 227          {
 228   1          
 229   1          while (!TI0);                                                               // 等待发送完成
 230   1              TI0=0;                                                                          // 清发送完成标志 
 231   1              S0BUF=x;                                                                        // 发送数据     
 232   1      }
 233          /**************************************************
 234          功能:I/O口初始化
 235          **************************************************/
 236          void io_init(void)
 237          {
 238   1              P0DIR = p0dir;                                                          // 设定I/O口输入输出,p0dir=11110000
 239   1              P1DIR = p1dir;                                              //p1dir=11111111
 240   1      
 241   1              LED1=LED2=LED3=0;                                                       // 灯全亮
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 11:13:53 PAGE 5   

 242   1              delay(1000);                                //延时0.7485s
 243   1              LED1=LED2=LED3=1;                                                       // 灯全灭                  
 244   1      }  
 245          /**************************************************
 246          功能:主程序
 247          **************************************************/
 248          void main(void)
 249          {
 250   1              unsigned char tmp=0;
 251   1              io_init();                                                                      // I/O口初始化
 252   1              uart_init();                                    // 串口初始化 
 253   1              rf_init();                                                                      // RF初始化                            
 254   1              EA=1;                                       // 允许中断
 255   1              RX_Mode();                                                                      //进入接收模式
 256   1      
 257   1              while(1)
 258   1              {
 259   2      
 260   2      
 261   2                      if(RX_DR)                                                               // 数据已收到
 262   2                      {
 263   3                              sta=0;
 264   3      
 265   3                              delay(100000);
 266   3      
 267   3                              uart_putchar(rx_buf[0]);                        // 显示所有ID值
 268   3      
 269   3                              uart_putchar(rx_buf[1]);
 270   3                              uart_putchar(rx_buf[2]);
 271   3                              uart_putchar(rx_buf[3]);
 272   3                              uart_putchar(rx_buf[4]);
 273   3                              uart_putchar(rx_buf[5]);
 274   3                              uart_putchar(rx_buf[6]);
 275   3                              delay(1000);
 276   3      
 277   3      
 278   3                              RX_DR=0;
 279   3      
 280   3                      rf_init();                                                                      // RF初始化                            
 281   3                      EA=1; 
 282   3                      TX_Mode();                       // 发射数据
 283   3                          while (!(TX_DS|MAX_RT));                            // 等待发射结束
 284   3                              LED2=0;
 285   3                              delay(100000);
 286   3                              LED2=1;
 287   3      
 288   3                          delay(100);
 289   3                              rf_init();                                                                      // RF初始化                            
 290   3                              EA=1;                                       // 允许中断
 291   3                          RX_Mode();
 292   3                              while(!RX_DR);
 293   3      
 294   3                      }                                        
 295   2              }       
 296   1      }                                       
 297                                                               
 298                                                  
 299          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    559    ----
C51 COMPILER V9.00   MAIN                                                                  08/21/2012 11:13:53 PAGE 6   

   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     47      11
   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 + -