我现在做CC2500的跳频设计,不过我这个跳频不需要在工作时跳频,只需要在开始的时候搜索到一个合适频段,接下来都在这个频段通信。<br /> 我现在面临的情况是:CC2500的主从端时间上同步的不是很好,主端发送的数据从端有时能收到,有时不能;而且从端在回发数据给主端的时候,主端根本收不到!<br /> 我用的MCU是C8051F330,下面是我的收发端主程序:<br />void main()//发送端程序<br />{<br /> char len;<br /> int i=0;<br /> int k=20;<br /> PCA0MD &= ~0x40;<br /> Init_Device();<br /> SPI0CN |= 0x01; //enable SPI<br /> System_Delay(5000);<br /> SetupCC2500();<br /> System_Delay(512);<br /> len=sizeof(txBuffer_CC2500);<br /> while(1)<br /> {<br /> halSpiWriteReg(CC2500_FREQ2, f[0]);<br /> halSpiWriteReg(CC2500_FREQ1, f[1]);<br /> halSpiWriteReg(CC2500_FREQ0, f[2]);<br /> halSpiStrobe(CC2500_SIDLE);<br /> txBuffer_CC2500[1]=i;<br /> halRfSendPacket(txBuffer_CC2500, sizeof(txBuffer_CC2500));//试发送消息给接收端<br /> if(halRfReceivePacket(rxBuffer_CC2500,len))break;//等到对方的回应,得到回应消息跳出<br /> if((k--)==0)//k从20减到0换一个频段<br /> {<br /> k=20;<br /> i++;<br /> if(i>8)i=0;<br /> }<br /> }<br /> while(1)<br /> {<br /> P13=1;P14=0;//LED显示状态<br /> }<br />}<br /><br />void main()//接收端主程序<br />{<br /> char len;<br /> int i=0,n=0;<br /> int k=180;<br /> PCA0MD &= ~0x40;<br /> Init_Device();<br /> SPI0CN |= 0x01; //enable SPI<br /> System_Delay(5000);<br /> SetupCC2500();<br /> System_Delay(512);<br /> len=sizeof(rxBuffer_CC2500);<br /> while(1)<br /> {<br /> if(halRfReceivePacket(rxBuffer_CC2500,len))//试接收来自对方的信号<br /> {<br /> halSpiWriteReg(CC2500_FREQ2, f[0]);<br /> halSpiWriteReg(CC2500_FREQ1, f[1]);<br /> halSpiWriteReg(CC2500_FREQ0, f[2]);<br /> halSpiStrobe(CC2500_SIDLE); <br /> txBuffer_CC2500[1]=rxBuffer_CC2500[1];//记住频段号<br /> halRfSendPacket(txBuffer_CC2500, sizeof(txBuffer_CC2500));//发送回应消息,告诉对方就在该频段通信<br /> break;//此时已搜索到频段,跳出,以后都工作在此频段<br /> }<br /> if((k--)>0)//k从180减到0换一个频段搜索<br /> {<br /> k=180;<br /> i++;<br /> if(i>8)i=0;<br /> }<br /> }<br /> for(n=0;n<len;n++)<br /> trdata[n]=rxBuffer_CC2500[n]; <br /> Send_String(trdata,len); //串口输出数据<br /> System_Delay(512);<br /> while(1)<br /> {<br /> P13=1;P14=0;//LED显示状态<br /> }//数据稍后再做处理<br />}<br />
|