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

📄 cc1100.lst

📁 STC89C51单片机与cc1100组合构建的短距离无线通信
💻 LST
📖 第 1 页 / 共 3 页
字号:
 204          /*功能描述:单字节读取寄存器                             */  
 205          /*                               */ 
 206          /*********************************************************/  
 207          unsigned char Spi_Read_Byte(unsigned char addr) 
 208           { 
 209   1           unsigned char value;             
 210   1                       
 211   1           CSN_L;                                      //片选使能     
 212   1           while (MISO_H);                             //等待响应  
 213   1           SpiTxRx_Byte((addr|Read_Byte));             //送出地址  
 214   1           value = SpiTxRx_Byte(0);                    //读寄存器 
 215   1           CSN_H;                                      //结束使能                           
 216   1                
 217   1           return value;                               //返回数据 
 218   1       } 
 219          
 220          /**********************************************************/ 
 221          /*函数名字:Spi_Write_Byte                                */ 
 222          /*输入参数:寄存器地址,配置                              */  
 223          /*输出参数:无                                            */ 
 224          /*功能描述:单字节写入寄存器                              */  
 225          /*                                */ 
 226          /**********************************************************/  
 227          void Spi_Write_Byte(unsigned char addr,unsigned char value) 
 228           { 
 229   1           CSN_L;                                      //片选使能 
 230   1           while (MISO_H);                             //等待响应  
 231   1           SpiTxRx_Byte(addr);                         //送出地址 
 232   1           SpiTxRx_Byte(value);                        //写入配置 
 233   1           CSN_H;                                      //结束使能                          
 234   1       } 
 235            
 236          /**********************************************************/ 
 237          /*函数名字:Spi_Read_Burst                                */ 
 238          /*输入参数:寄存器地址,接收缓冲区首址,接收字节数        */  
 239          /*输出参数:结果存储在缓冲区地址                          */ 
 240          /*功能描述:连续读取寄存器数据                            */  
 241          /*                               */ 
C51 COMPILER V7.50   CC1100                                                                05/01/2009 21:14:21 PAGE 5   

 242          /**********************************************************/  
 243          void Spi_Read_Burst (unsigned char addr,unsigned char *buffer,unsigned char count)  
 244           { 
 245   1           unsigned char i; 
 246   1                
 247   1           CSN_L;                                      //片选使能 
 248   1           while (MISO_H);                             //等待响应  
 249   1               SpiTxRx_Byte((addr|Read_Burst));            //连续读取 
 250   1                
 251   1           for (i = 0; i < count; i++)                 // 
 252   1                { 
 253   2             buffer[i] = SpiTxRx_Byte(0);              //存储数据 
 254   2            } 
 255   1           CSN_H;                                      //结束使能                           
 256   1       }  
 257            
 258          /**********************************************************/ 
 259          /*函数名字:Spi_Write_Burst                               */ 
 260          /*输入参数:寄存器地址,发射缓冲区首址,发送字节数        */  
 261          /*输出参数:无                                            */ 
 262          /*功能描述:连续写入寄存器数据                            */  
 263          /*                               */ 
 264          /**********************************************************/  
 265          void Spi_Write_Burst(unsigned char addr,unsigned char *buffer,unsigned char count)  
 266          { 
 267   1           unsigned char i; 
 268   1               
 269   1           CSN_L;                                      //片选使能 
 270   1           while (MISO_H);                             //等待响应 
 271   1           SpiTxRx_Byte((addr|Write_Burst));           //连续写入 
 272   1                
 273   1           for (i = 0; i < count; i++)                 // 
 274   1                 { 
 275   2             SpiTxRx_Byte(buffer[i]);                  //送出数据 
 276   2            } 
 277   1           CSN_H;                                      //结束使能                            
 278   1       } 
 279             
 280          /*********************************************************/ 
 281          /*函数名字:Spi_Write_Packet                             */ 
 282          /*输入参数:发送缓冲区首址,数组长度                      */  
 283          /*输出参数:无                                           */ 
 284          /*功能描述:发送缓冲区数据                               */  
 285          /*                              */   
 286          /*********************************************************/  
 287          void Spi_Write_Packet(unsigned char *Tx_buffer,unsigned char size)  
 288           {    
 289   1           unsigned char i; 
 290   1                 
 291   1               Spi_Write_Byte(CC_TXFIFO,size);             //先送长度 
 292   1               Spi_Write_Burst(CC_TXFIFO,Tx_buffer,size);  //发送数据 
 293   1               Spi_Write_Strobe(CC_STX);                   //发送模式 
 294   1                
 295   1               i = 0; 
 296   1               while (GDO0_L)                              //等待送出 
 297   1                { 
 298   2                 if (i > 10) break;                        //限时等待 
 299   2                 delay_nms(2);                             // 
 300   2                 i++;                                      // 
 301   2                } 
 302   1               i = 0;  
 303   1               while (GDO0_H)                              //送出完毕 
C51 COMPILER V7.50   CC1100                                                                05/01/2009 21:14:21 PAGE 6   

 304   1                { 
 305   2                 if (i > 10) break;                        //限时等待 
 306   2                 delay_nms(2);                             // 
 307   2                 i++;                                      // 
 308   2                } 
 309   1               delay_nms(1); 
 310   1               Spi_Write_Strobe(CC_SFTX);                  //清缓冲区 
 311   1               Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
 312   1               Spi_Write_Strobe(CC_SRX);                   //进入接收 
 313   1       } 
 314          
 315          /*********************************************************/ 
 316          /*函数名字:Spi_Read_Packet                              */ 
 317          /*输入参数:接收缓冲区首址,最大长度                      */  
 318          /*输出参数:校验标志                                     */ 
 319          /*功能描述:数据存入缓冲区                               */  
 320          /*                              */   
 321          /*********************************************************/  
 322          unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length) 
 323           { 
 324   1               unsigned char status[2]; 
 325   1               unsigned char size = 0; 
 326   1                
 327   1               delay_nms(1); 
 328   1               size = Spi_Read_Byte(CC_RXFIFO);            //数据长度 
 329   1                
 330   1                      // Send_char(size);
 331   1      
 332   1               if (size < length) 
 333   1                { 
 334   2                 Spi_Read_Burst(CC_RXFIFO,Rx_buffer,size); //接收数据 
 335   2                 Spi_Read_Burst(CC_RXFIFO,status,2);       //校验数据 
 336   2                } 
 337   1               Spi_Write_Strobe(CC_SFRX);                  //清缓冲区   
 338   1               return (status[1] & CRC_OK);                //校验标志  
 339   1       } 
 340              
 341          /*********************************************************/ 
 342          /*函数名字:WriteRfSettings                              */ 
 343          /*输入参数:无                                           */  
 344          /*输出参数:无                                           */ 
 345          /*功能描述:模块寄存器配置                               */  
 346          /*                               */   
 347          /*********************************************************/  
 348          void WriteRfSettings(void) 
 349           { 
 350   1           Spi_Write_Byte (CC_IOCFG2,IOCFG2);          // 
 351   1           Spi_Write_Byte (CC_IOCFG0,IOCFG0);          // 
 352   1           Spi_Write_Byte (CC_FIFOTHR,FIFOTHR);        //  
 353   1           Spi_Write_Byte (CC_PKTLEN,PKTLEN);          // 
 354   1           Spi_Write_Byte (CC_PKTCTRL1,PKTCTRL1);      // 
 355   1           Spi_Write_Byte (CC_PKTCTRL0,PKTCTRL0);      // 
 356   1           Spi_Write_Byte (CC_ADDR,ADDR);              // 
 357   1           Spi_Write_Byte (CC_CHANNR,CHANNR);          // 
 358   1           Spi_Write_Byte (CC_FSCTRL1,FSCTRL1);        // 
 359   1           Spi_Write_Byte (CC_FSCTRL0,FSCTRL0);        // 
 360   1           Spi_Write_Byte (CC_FREQ2,FREQ2);            // 
 361   1           Spi_Write_Byte (CC_FREQ1,FREQ1);            // 
 362   1           Spi_Write_Byte (CC_FREQ0,FREQ0);            // 
 363   1           Spi_Write_Byte (CC_MDMCFG4,MDMCFG4);        // 
 364   1           Spi_Write_Byte (CC_MDMCFG3,MDMCFG3);        // 
 365   1           Spi_Write_Byte (CC_MDMCFG2,MDMCFG2);        // 
C51 COMPILER V7.50   CC1100                                                                05/01/2009 21:14:21 PAGE 7   

 366   1           Spi_Write_Byte (CC_MDMCFG1,MDMCFG1);        // 
 367   1           Spi_Write_Byte (CC_MDMCFG0,MDMCFG0);        // 
 368   1           Spi_Write_Byte (CC_DEVIATN,DEVIATN);        // 
 369   1           Spi_Write_Byte (CC_MCSM0,MCSM0);            // 
 370   1           Spi_Write_Byte (CC_FOCCFG,FOCCFG);          // 
 371   1           Spi_Write_Byte (CC_BSCFG,BSCFG);            // 
 372   1           Spi_Write_Byte (CC_AGCCTRL2,AGCCTRL2);      // 
 373   1           Spi_Write_Byte (CC_AGCCTRL1,AGCCTRL1);      // 
 374   1           Spi_Write_Byte (CC_AGCCTRL0,AGCCTRL0);      // 
 375   1           Spi_Write_Byte (CC_FREND1,FREND1);          // 
 376   1           Spi_Write_Byte (CC_FREND0,FREND0);          // 
 377   1           Spi_Write_Byte (CC_FSCAL3,FSCAL3);          // 
 378   1           Spi_Write_Byte (CC_FSCAL2,FSCAL2);          // 
 379   1           Spi_Write_Byte (CC_FSCAL1,FSCAL1);          // 
 380   1           Spi_Write_Byte (CC_FSCAL0,FSCAL0);          // 
 381   1           Spi_Write_Byte (CC_FSTEST,FSTEST);          // 
 382   1           Spi_Write_Byte (CC_TEST2,TEST2);            // 
 383   1           Spi_Write_Byte (CC_TEST1,TEST1);            // 
 384   1           Spi_Write_Byte (CC_TEST0,TEST0);            // 
 385   1       }  
 386            
 387          /*********************************************************/ 
 388          /*函数名字:RX_ACK                                       */ 
 389          /*输入参数:无                                           */  
 390          /*输出参数:应答标志                                     */ 
 391          /*功能描述:等待从机应答,返回应答标志                    */  
 392          /*                               */   
 393          /*********************************************************/ 
 394          unsigned char RX_ACK(void) 
 395           { 
 396   1           unsigned char *buffer = Rx_data; 
 397   1               unsigned int size,i=0;  
 398   1             
 399   1               size = sizeof(Rx_data);                     //最大长度 
 400   1               while (i <10000)                            //限时应答 
 401   1                { 
 402   2                 delay_ns(15); 
 403   2                 i++; 
 404   2                 if (GDO0_H)                               //等待应答                 
 405   2                  { 
 406   3                       if (Spi_Read_Packet(Rx_data,size))      //应答出现   
 407   3                        { 
 408   4                         if (!(buffer[0] ^= buffer[1]))        // 
 409   4                          { 
 410   5                       if ((buffer[2] == (~(buffer[3]))))  // 
 411   5                            { 
 412   6                             return 1;                         //成功应答 
 413   6                                }       
 414   5                              } 
 415   4                        } 

⌨️ 快捷键说明

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