第一范文网 - 专业文章范例文档资料分享平台

STC12单片机SPI多对一nrf24l01程序

来源:用户分享 时间:2025/7/5 2:00:20 本文由loading 分享 下载这篇文档手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xxxxxxx或QQ:xxxxxx 处理(尽可能给您提供完整文档),感谢您的支持与谅解。

}

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);

搜索更多关于: STC12单片机SPI多对一nrf24l01程序 的文档
STC12单片机SPI多对一nrf24l01程序.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
本文链接:https://www.diyifanwen.net/c70rx56ebrj4mu7525egk_5.html(转载请注明文章来源)
热门推荐
Copyright © 2012-2023 第一范文网 版权所有 免责声明 | 联系我们
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:xxxxxx 邮箱:xxxxxx@qq.com
渝ICP备2023013149号
Top