发布时间 : 星期六 文章STC12单片机SPI多对一nrf24l01程序更新完毕开始阅读b3f459a3f90f76c661371a74
}
uchar status,uchar_ctr; CSN = 0; status = SPI_ReadWriteByte(reg);
for(uchar_ctr=0;uchar_ctr return(status); /*******************************接*****收*****模*****式*****代*****码 *************************************/ /******************************************************************************************************/ /*函数:unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) /*功能:数据读取后放如rx_buf接收缓冲区中 /******************************************************************************************************/ unsigned char nRF24L01_RxPacket(unsigned char* rx_buf) { // unsigned char revale=0; sta=SPI_Read_Reg(STATUS); // 读取状态寄存其来判断数据接收状况 SPI_RW_Reg(WRITE_REG+STATUS,sta); //接收到数据后RX_DR,TX_DS,MAX_PT都置高为1,通过写 1来清楚中断标志 if(RX_DR) // 判断是否接收到数据 { SPI_Read_Buf(RD_RX_PLOAD,rx_buf,RX_PLOAD_WIDTH);// read receive payload from RX_FIFO buffer return 0; } /****************************************************************************************************/ /*函数:void RX_Mode(void) /*功能:数据接收配置 /****************************************************************************************************/ void RX_Mode(void) { SPI_RW_Reg(FLUSH_RX,0xFF);//清除接受FIFO return 1; } //读取数据完成标志 CE=0; // SPI_RW_Reg(FLUSH_RX,0x00);//清除接受FIFO //SPI_Write_Buf(WRITE_REG + TX_ADDR, TX_ADDRESS, TX_ADR_WIDTH); // Writes TX_Address to nRF24L01 SPI_Write_Buf(WRITE_REG + RX_ADDR_P0, RX_ADDRESS, RX_ADR_WIDTH); // RX_Addr0 same as TX_Adr for Auto.Ack SPI_RW_Reg(WRITE_REG + EN_AA, 0x01);//使能自动应答 Enable Auto.Ack:Pipe0 SPI_RW_Reg(WRITE_REG + EN_RXADDR, 0x01); //连接通道0和地址 Enable Pipe0 //SPI_RW_Reg(WRITE_REG + SETUP_RETR, 0x1a); // 500us + 86us, 10 retrans...1a SPI_RW_Reg(WRITE_REG + RF_CH, 40);//通信频率0~125 设置通信的频率 Select RF channel 40 SPI_RW_Reg(WRITE_REG + RX_PW_P0, RX_PLOAD_WIDTH); //设置接收数据长度,本次设置为2字节 SPI_RW_Reg(WRITE_REG + RF_SETUP,0X07); //0x07 TX_PWR:0dBm, Datarate:1Mbps, LNA:HCURR // 设置TX发射参数,0db增益,2Mbps,低噪声增益开启 } //************************************ 串 口 初 始 化 ********************************************************* void StartUART( void ) { //波特率9600 } TMOD=0x20;//设置定模式2 TH1=0xFD; TL1=0xFD; SM1=1; //设置串口SCON,为方式1 SM0=0; REN=1; //串行允许 TR1=1; //启动定时器 EA=1; //中断 ES=1; //打开串口 PC 端 SPI_RW_Reg(WRITE_REG + CONFIG, 0x0F);//配置基本工作模式的参数 CE=1; delay_ms(130); //************************************通过串口将接收到数据发送给************************************** void R_S_Byte(uint R_Byte) { } /************************************ 主 函 ES=0; while(TI==0); TI=0; ES=1; SBUF=R_Byte; 数 ************************************************************/ uchar NRF24L01_Check(void) { } void main() { //接收 模式代码 if(nRF24L01_RxPacket(Rx_Buf)) { while(1) { RX_Mode(); //接受模式 Delay(10);//防止编译警告 } delay_ms(500); R_S_Byte(0x11); uint i=0; CE=0; CSN=1; led=0; Init_SPI(); StartUART(); //串口初始 while(NRF24L01_Check())//检测不到24L01 { delay_ms(500); uchar buf[5]={0XA5,0XA5,0XA5,0XA5,0XA5}; uchar i; SPI_Write_Buf(WRITE_REG+TX_ADDR,buf,5);//写入5个字节的地址. SPI_Read_Buf(TX_ADDR,buf,5); //读出写入的地址 for(i=0;i<5;i++) if(buf[i]!=0XA5) break; if(i!=5) return 1;//检测24L01错误 return 0; //检测到24L01 for(i=0;i } } { //发送接收到的数据到电脑 R_S_Byte(Rx_Buf[i]); } } Delay(10);