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

📄 cc1100.c

📁 STC89C51单片机与cc1100组合构建的短距离无线通信
💻 C
📖 第 1 页 / 共 2 页
字号:
          { 
           if (i > 10) break;                        //限时等待 
           delay_nms(2);                             // 
           i++;                                      // 
          } 
         delay_nms(1); 
         Spi_Write_Strobe(CC_SFTX);                  //清缓冲区 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收 
 } 

/*********************************************************/ 
/*函数名字:Spi_Read_Packet                              */ 
/*输入参数:接收缓冲区首址,最大长度                      */  
/*输出参数:校验标志                                     */ 
/*功能描述:数据存入缓冲区                               */  
/*                              */   
/*********************************************************/  
unsigned char Spi_Read_Packet(unsigned char *Rx_buffer,unsigned char length) 
 { 
         unsigned char status[2]; 
         unsigned char size = 0; 
          
         delay_nms(1); 
         size = Spi_Read_Byte(CC_RXFIFO);            //数据长度 
          
		// Send_char(size);

         if (size < length) 
          { 
           Spi_Read_Burst(CC_RXFIFO,Rx_buffer,size); //接收数据 
           Spi_Read_Burst(CC_RXFIFO,status,2);       //校验数据 
          } 
         Spi_Write_Strobe(CC_SFRX);                  //清缓冲区   
         return (status[1] & CRC_OK);                //校验标志  
 } 
    
/*********************************************************/ 
/*函数名字:WriteRfSettings                              */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:模块寄存器配置                               */  
/*                               */   
/*********************************************************/  
void WriteRfSettings(void) 
 { 
     Spi_Write_Byte (CC_IOCFG2,IOCFG2);          // 
     Spi_Write_Byte (CC_IOCFG0,IOCFG0);          // 
     Spi_Write_Byte (CC_FIFOTHR,FIFOTHR);        //  
     Spi_Write_Byte (CC_PKTLEN,PKTLEN);          // 
     Spi_Write_Byte (CC_PKTCTRL1,PKTCTRL1);      // 
     Spi_Write_Byte (CC_PKTCTRL0,PKTCTRL0);      // 
     Spi_Write_Byte (CC_ADDR,ADDR);              // 
     Spi_Write_Byte (CC_CHANNR,CHANNR);          // 
     Spi_Write_Byte (CC_FSCTRL1,FSCTRL1);        // 
     Spi_Write_Byte (CC_FSCTRL0,FSCTRL0);        // 
     Spi_Write_Byte (CC_FREQ2,FREQ2);            // 
     Spi_Write_Byte (CC_FREQ1,FREQ1);            // 
     Spi_Write_Byte (CC_FREQ0,FREQ0);            // 
     Spi_Write_Byte (CC_MDMCFG4,MDMCFG4);        // 
     Spi_Write_Byte (CC_MDMCFG3,MDMCFG3);        // 
     Spi_Write_Byte (CC_MDMCFG2,MDMCFG2);        // 
     Spi_Write_Byte (CC_MDMCFG1,MDMCFG1);        // 
     Spi_Write_Byte (CC_MDMCFG0,MDMCFG0);        // 
     Spi_Write_Byte (CC_DEVIATN,DEVIATN);        // 
     Spi_Write_Byte (CC_MCSM0,MCSM0);            // 
     Spi_Write_Byte (CC_FOCCFG,FOCCFG);          // 
     Spi_Write_Byte (CC_BSCFG,BSCFG);            // 
     Spi_Write_Byte (CC_AGCCTRL2,AGCCTRL2);      // 
     Spi_Write_Byte (CC_AGCCTRL1,AGCCTRL1);      // 
     Spi_Write_Byte (CC_AGCCTRL0,AGCCTRL0);      // 
     Spi_Write_Byte (CC_FREND1,FREND1);          // 
     Spi_Write_Byte (CC_FREND0,FREND0);          // 
     Spi_Write_Byte (CC_FSCAL3,FSCAL3);          // 
     Spi_Write_Byte (CC_FSCAL2,FSCAL2);          // 
     Spi_Write_Byte (CC_FSCAL1,FSCAL1);          // 
     Spi_Write_Byte (CC_FSCAL0,FSCAL0);          // 
     Spi_Write_Byte (CC_FSTEST,FSTEST);          // 
     Spi_Write_Byte (CC_TEST2,TEST2);            // 
     Spi_Write_Byte (CC_TEST1,TEST1);            // 
     Spi_Write_Byte (CC_TEST0,TEST0);            // 
 }  
  
/*********************************************************/ 
/*函数名字:RX_ACK                                       */ 
/*输入参数:无                                           */  
/*输出参数:应答标志                                     */ 
/*功能描述:等待从机应答,返回应答标志                    */  
/*                               */   
/*********************************************************/ 
unsigned char RX_ACK(void) 
 { 
     unsigned char *buffer = Rx_data; 
         unsigned int size,i=0;  
       
         size = sizeof(Rx_data);                     //最大长度 
         while (i <10000)                            //限时应答 
          { 
           delay_ns(15); 
           i++; 
           if (GDO0_H)                               //等待应答                 
            { 
                 if (Spi_Read_Packet(Rx_data,size))      //应答出现   
                  { 
                   if (!(buffer[0] ^= buffer[1]))        // 
                    { 
                 if ((buffer[2] == (~(buffer[3]))))  // 
                      { 
                       return 1;                         //成功应答 
                          }       
                        } 
                  } 

				  Led_Light(); 
            } 
          }   
         return 0;                                   //没有应答  
 } 
  
/*********************************************************/ 
/*函数名字:TX_ACK                                       */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:接收成功发送应答                             */  
/*                               */   
/*********************************************************/ 
void TX_ACK(void) 
 { 
     unsigned char PA; 
          
     // PA = Rx_data[4];                            //获取功率  
		PA=0X17;
   
          
        Spi_Write_Byte (CC_FREND0,PA);              //功率配置 
        Spi_Write_Packet(Tx_data,4);                //发送应答         
 } 
  
/*********************************************************/ 
/*函数名字:Tx_cc1100                                    */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:发送数据,应答失败从发                        */  
/*                              */   
/*********************************************************/  
void Tx_cc1100(void)  
 { 
         unsigned char PA; 
         unsigned char Tx_Size;      
          
         Tx_Size = sizeof(Tx_data);                  //数组长度 
                    
         PA=0X17; //最大功率
       
         Spi_Write_Byte (CC_FREND0,PA);            //功率配置 
         Spi_Write_Packet(Tx_data,Tx_Size);        //开始发送 
            
       
       
         delay_nms(1); 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收 
 } 
  
/*********************************************************/ 
/*函数名字:Rx_cc1100                                    */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:接收数据,成功发送应答                        */  
/*                               */   
/*********************************************************/ 
void Rx_cc1100(void) 
 { 
         unsigned char *buffer = Rx_data;   
         unsigned char i, size; 
                    
         for (i = 0; i < sizeof(Rx_data); i++) 
          { 
           buffer[i] = 0; 
          }                    
                            
         size = sizeof(Rx_data);                     //最大长度 
         
		 if(Spi_Read_Packet(Rx_data,size)) flag=1;
         delay_nms(1); 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收                
 }  
  /*********************************************************/ 
/*函数名字:Init_cc1100                                  */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:初始化模块                                   */  
/*                               */   
/*********************************************************/  
void Init_cc1100(void)  
 { 
         POWER_UP_RESET_CC1100();                    //上电复位 
         WriteRfSettings();                          //写入配置 
         Spi_Write_Burst(CC_PATABLE,PaTabel,8);      //功率配置 
         Spi_Write_Strobe(CC_SIDLE);                 //进入空闲 
         Spi_Write_Strobe(CC_SRX);                   //进入接收 
 } 

unsigned char counter_data;
void  Int_Series(void)
{
 
   SCON=0x50;
   PCON=0x00;
   TMOD=0x20;
   TL1 =0xfd;
   TH1 =0xfd;
   IE  |=0x90;
   TCON|=0x40;

}
//***************************通过一个串口返回PC一个字节********************************************************

//#define SERIAL
#ifdef SERIAL
void Prints(unsigned char * pd)
{
while((*pd)!='\0')
  {
   Send_char(*pd);
   pd++;
  }
}
#endif
//***************************中断处理程序*********************************************************************
void Serial_Int4(void) interrupt 4 //using 3
{
   ES=0;
   if(RI)
   {
     ACC=SBUF;
	 counter_data=ACC;
	 B  =ACC;
   }
   RI=0;
   ES=1;
}
/*********************************************************/ 
/*函数名字:nain                                         */ 
/*输入参数:无                                           */  
/*输出参数:无                                           */ 
/*功能描述:主程序                                       */  
/*                              */   
/*********************************************************/ 

void main(void) 
 {   
         unsigned char i;    
         flag=0;
         PORT_Init();                                //脚位定义 
         Init_cc1100();                              //模块设置 
		 Int_Series();
		 Led_Light();                                //输出指示 
       
     while(1)                                                            //循环程序 
          {  
				           if (KEY1_DOWN)                                 //按键检测 
				            { 
				                 delay_nms(20);                           //防误处理 
				               if (KEY1_DOWN)                              // 
				                  {                                  
				                   LED1_ON;                               //打开指示 
								   delay(6000);
								   EA=0;
				                   Tx_cc1100();                           //发送数据
		 						   EA=1; 
				                   while(KEY1_DOWN);                       //等待弹起 
		                           delay(6000);
						    	   LED1_OFF;
				                  } 
				              } 


				           if (GDO0_H) 
						   { 
						     Rx_cc1100();                  //接收数据
							 if(flag==1)
							 {
							        flag=0;
						             for(i=0;i<10;i++)
									 {
									  
											Send_char(Rx_data[i]);
					                      	delay(500);
					
									 }   
							         	    LED1_ON;                              //打开指示 
									    	delay(6000);
					                     	LED1_OFF;
											delay(6000);
							  }
					    	}
         
	    } 
	   
 } 
/*********************************************************/ 

⌨️ 快捷键说明

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