📄 cc1100.c
字号:
{
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 + -