/*引入文件************************************************/ #include #include #include "CC1100.h" /*接口定义************************************************/ #define Led1 0 //输出指示 #define led1_Off PORTB &= ~(1< 500) break; //限时等待 delay_nms(1); // i++; // } i = 0; while (GDO0_H) //送出完毕 { if (i > 500) break; //限时等待 delay_nms(1); // i++; // } delay_nms(1); Spi_Write_Strobe(CC_SFTX); //清缓冲区 Spi_Write_Strobe(CC_SIDLE); //进入空闲 Spi_Write_Strobe(CC_SRX); //进入接收 RTEn_H; //功率关 } /*********************************************************/ /*函数名字:Spi_Read_Packet */ /*输入参数:接收缓冲区首址,最大长度 */ /*输出参数:校验标志 */ /*功能描述:数据存入缓冲区 */ /*建造日期;2008年03月30日 */ /*********************************************************/ 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); //数据长度 if (size < length) { Spi_Read_Burst(CC_RXFIFO,Rx_buffer,size); //接收数据 Spi_Read_Burst(CC_RXFIFO,status,2); //校验数据 Rf_Data_length=size; //数据包长度 } Spi_Write_Strobe(CC_SFRX); //清缓冲区 return (status[1]&CRC_OK); //校验标志 } /*********************************************************/ /*函数名字:WriteRfSettings */ /*输入参数:无 */ /*输出参数:无 */ /*功能描述:模块寄存器配置 */ /*建造日期;2008年03月30日 */ /*********************************************************/ 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); // } /*********************************************************/ /*函数名字:Tx_cc1100 */ /*输入参数:无 */ /*输出参数:无 */ /*功能描述:发送数据,应答失败从发 */ /*建造日期;2008年03月30日 */ /*********************************************************/ void Tx_cc1100(void) { unsigned char PA,i; unsigned char ACK,Tx_Size; INT0_disable(); //关GDO0 中断 Spi_Write_Strobe(CC_SIDLE); //进入空闲 Tx_Size = U_Data_length; //数组长度 PA = 0x10; //最大功率 Spi_Write_Byte (CC_FREND0,PA); //功率配置 Spi_Write_Packet(Tx_data,Tx_Size); //开始发送 GIFR|=0x40; //清中断标志 INT0_enable(); //开中断 } /*********************************************************/ /*函数名字:Rx_cc1100 */ /*输入参数:无 */ /*输出参数:无 */ /*功能描述:接收数据,成功发送应答 */ /*建造日期;2008年03月30日 */ /*********************************************************/ void Rx_cc1100(void) { unsigned char i, size; size = sizeof(Rx_data); //最大长度 if (Spi_Read_Packet(Rx_data,size)) //接收数据 { Spi_Read_Packet(Rx_data,size); led1_Off; for(i=0;i2) //检测到结束位,防止空字符串 { U_newdata='Y'; U_Data_length=RxCounter; Rf_step=0; break; } } } /*********************************************************/ /*函数名字:nain */ /*输入参数:无 */ /*输出参数:无 */ /*功能描述:主程序 */ /*建造日期;2008年03月30日 */ /*********************************************************/ void main(void) { unsigned char i; PORT_Init(); //脚位定义 Init_cc1100(); //模块设置 UartInit(); //串口初始化 INT0_Init(); //中断设置 // RTEn_H; // led1_On; //接收 SEI(); // watchdog_init(); // while(1) //循环程序 // { // if(U_newdata=='Y') // { // WDR(); //看门狗计数清零 // U_newdata='N'; // led1_Off; // for(i=0;i