STC12单片机SPI多对一nrf24l01程序 联系客服

发布时间 : 星期六 文章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);