nRF24L01程序:
#ifndef__NRF24L01_H__
#define__NRF24L01_H__
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
//NRF24L01寄存器操作命令
#defineREAD_REG0x00//读配置寄存器,低5位为寄存器地址
#defineWRITE_REG0x20//写配置寄存器,低5位为寄存器地址
#defineRD_RX_PLOAD0x61//读RX有效数据,1~32字节
#defineWR_TX_PLOAD0xA0//写TX有效数据,1~32字节
#defineFLUSH_TX0xE1//清除TXFIFO寄存器.发射模式下用
#defineFLUSH_RX0xE2//清除RXFIFO寄存器.接收模式下用
#defineREUSE_TX_PL0xE3//重新使用上一包数据,CE为高,数据包被不断发送.
#defineNOP0xFF//空操作,可以用来读状态寄存器
//SPI(NRF24L01)寄存器地址
#defineCONFIG0x00//配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能;
//bit4:中断MAX_RT(达到最大重发次数中断)使能;bit5:中断TX_DS使能;bit6:中断RX_DR使能
#defineEN_AA0x01//使能自动应答功能bit0~5,对应通道0~5
#defineEN_RXADDR0x02//接收地址允许,bit0~5,对应通道0~5
#defineSETUP_AW0x03//设置地址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字节;
#defineSETUP_RETR0x04//建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时250*x+86us
#defineRF_CH0x05//RF通道,bit6:0,工作通道频率;
#defineRF_SETUP0x06//RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,发射功率;bit0:低噪声放大器增益
#defineSTATUS0x07//状态寄存器;bit0:TXFIFO满标志;bit3:1,接收数据通道号(最大:6);bit4,达到最多次重发
//bit5:数据发送完成中断;bit6:接收数据中断;
#defineMAX_TX0x10//达到最大发送次数中断
#defineTX_OK0x20//TX发送完成中断
#defineRX_OK0x40//接收到数据中断
#defineOBSERVE_TX0x08//发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,重发计数器
#defineCD0x09//载波检测寄存器,bit0,载波检测;
#defineRX_ADDR_P00x0A//数据通道0接收地址,最大长度5个字节,低字节在前
#defineRX_ADDR_P10x0B//数据通道1接收地址,最大长度5个字节,低字节在前
#defineRX_ADDR_P20x0C//数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P30x0D//数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P40x0E//数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P50x0F//数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineTX_ADDR0x10//发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等
#defineRX_PW_P00x11//接收数据通道0有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P10x12//接收数据通道1有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P20x13//接收数据通道2有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P30x14//接收数据通道3有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P40x15//接收数据通道4有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P50x16//接收数据通道5有效数据宽度(1~32字节),设置为0则非法
#defineFIFO_STATUS0x17//FIFO状态寄存器;bit0,RXFIFO寄存器空标志;bit1,RXFIFO满标志;bit2,3,保留
//bit4,TXFIFO空标志;bit5,TXFIFO满标志;bit6,1,循环发送上一数据包.0,不循环;
//24L01发送接收数据宽度定义
#defineTX_ADR_WIDTH5//5字节的地址宽度
#defineRX_ADR_WIDTH5//5字节的地址宽度
#defineTX_PLOAD_WIDTH32//20字节的用户数据宽度
#defineRX_PLOAD_WIDTH32//20字节的用户数据宽度
//硬件端口定义(模拟SPI)
sbitCE=P1^5;//SPI片选
sbitSCK=P1^4;//同步时钟
sbitMISO=P1^3;//主进从出
sbitIRQ=P1^2;//中断
sbitMOSI=P1^1;//主出从进
sbitCSN=P1^0;//芯片使能
//本地子函数声明
voidinit_io(void);//io口初始化
voidRX_Mode(void);//接收模式
voidTX_Mode(void);//发送模式
ucharNRF24L01_TxPacket(uchar*txbuf);//发送一次数据
ucharNRF24L01_RxPacket(uchar*rxbuf);//接送一次数据
#endif
#include"nrf24l01.h"
ucharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//定义一个静态发送地址
ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//
/**************************************************
函数:init_io()
描述:初始化IO
/**************************************************/
voidinit_io(void)
{
CE=0;//待机
CSN=1;//SPI禁止
SCK=0;//SPI时钟置低
IRQ=1;//中断复位
}
/**************************************************
函数:SPI_RW()
描述;根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
读出一字节
/**************************************************/
ucharSPI_RW(ucharbyte)
{
uchari;
for(i=0;i<8;i++)//循环8次
{
MOSI=(byte&0x80);//byte最高位输出到MOSI
byte<<=1;//低一位移位到最高位
SCK=1;//拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
byte|=MISO;//读MISO到byte最低位
SCK=0;//SCK置低
}
return(byte);//返回读出的一字节
}
/**************************************************
函数:SPI_Write_Reg()
描述:写数据value到reg寄存器
/**************************************************/
ucharSPI_Write_Reg(ucharreg,ucharvalue)
{
ucharstatus;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
SPI_RW(value);//然后写数据到该寄存器
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************
函数:SPI_Read_Reg()
描述:从reg寄存器读一字节
/**************************************************/
ucharSPI_Read_Reg(ucharreg)
{
ucharreg_val;
CSN=0;//CSN置低,开始传输数据
SPI_RW(reg);//选择寄存器
reg_val=SPI_RW(0);//然后从该寄存器读数据
CSN=1;//CSN拉高,结束数据传输
return(reg_val);//返回寄存器数据
}
/**************************************************
函数:SPI_Read_Buf()
描述:从reg寄存器读出bytes个字节,通常用来读取接收通道
数据或接收/发送地址
/**************************************************/
ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes)
{
ucharstatus,i;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
for(i=0;i<bytes;i++)
pBuf[i]=SPI_RW(0);//逐个字节从nRF24L01读出
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************/
/**************************************************
函数:SPI_Write_Buf()
描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
射通道数据或接收/发送地址
/**************************************************/
ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)
{
ucharstatus,i;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
for(i=0;i<bytes;i++)
SPI_RW(pBuf[i]);//逐个字节写入nRF24L01
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************
函数:RX_Mode()
描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
/**************************************************/
voidRX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//接收设备接收通道0使用和发送设备相同的发送地址
SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答
SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0
SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40
SPI_Write_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//接收通道0选择和发送通道相同有效数据宽度
SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益
SPI_Write_Reg(WRITE_REG+CONFIG,0x0f);//CRC使能,16位CRC校验,上电,接收模式
CE=1;//拉高CE启动接收设备
}
/**************************************************
函数:TX_Mode()
描述:这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),
130us后启动发射,数据发送结束后,发送模块自动转入接收
模式等待应答信号。
/**************************************************/
voidTX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写入发送地址
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答
SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0
SPI_Write_Reg(WRITE_REG+SETUP_RETR,0x0a);//自动重发延时等待250us+86us,自动重发10次
SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40
SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益
SPI_Write_Reg(WRITE_REG+CONFIG,0x0e);//CRC使能,16位CRC校验,上电
CE=1;
}
//启动NRF24L01发送一次数据
//txbuf:待发送数据首地址
//返回值:发送完成状况
ucharNRF24L01_TxPacket(uchar*txbuf)
{
ucharsta;
CE=0;
SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TXBUF32个字节
CE=1;//启动发送
while(IRQ!=0);//等待发送完成
sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值
SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志
if(sta&MAX_TX)//达到最大重发次数
{
SPI_Write_Reg(FLUSH_TX,0xff);//清除TXFIFO寄存器
returnMAX_TX;
}
if(sta&TX_OK)//发送完成
{
returnTX_OK;
}
return0xff;//其他原因发送失败
}
//NRF24L01JIE接收送一次数据
//txbuf:接收数据首地址
//返回值:0,接收完成;其他,错误代码
ucharNRF24L01_RxPacket(uchar*rxbuf)
{
ucharsta;
sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值
SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志
if(sta&RX_OK)//接收到数据
{
SPI_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
SPI_Write_Reg(FLUSH_RX,0xff);//清除RXFIFO寄存器
return0;
}
return1;//没收到任何数据
}
nRF24L01程序:
#ifndef__NRF24L01_H__
#define__NRF24L01_H__
#include<reg52.h>
#defineucharunsignedchar
#defineuintunsignedint
//NRF24L01寄存器操作命令
#defineREAD_REG0x00//读配置寄存器,低5位为寄存器地址
#defineWRITE_REG0x20//写配置寄存器,低5位为寄存器地址
#defineRD_RX_PLOAD0x61//读RX有效数据,1~32字节
#defineWR_TX_PLOAD0xA0//写TX有效数据,1~32字节
#defineFLUSH_TX0xE1//清除TXFIFO寄存器.发射模式下用
#defineFLUSH_RX0xE2//清除RXFIFO寄存器.接收模式下用
#defineREUSE_TX_PL0xE3//重新使用上一包数据,CE为高,数据包被不断发送.
#defineNOP0xFF//空操作,可以用来读状态寄存器
//SPI(NRF24L01)寄存器地址
#defineCONFIG0x00//配置寄存器地址;bit0:1接收模式,0发射模式;bit1:电选择;bit2:CRC模式;bit3:CRC使能;
//bit4:中断MAX_RT(达到最大重发次数中断)使能;bit5:中断TX_DS使能;bit6:中断RX_DR使能
#defineEN_AA0x01//使能自动应答功能bit0~5,对应通道0~5
#defineEN_RXADDR0x02//接收地址允许,bit0~5,对应通道0~5
#defineSETUP_AW0x03//设置地址宽度(所有数据通道):bit1,0:00,3字节;01,4字节;02,5字节;
#defineSETUP_RETR0x04//建立自动重发;bit3:0,自动重发计数器;bit7:4,自动重发延时250*x+86us
#defineRF_CH0x05//RF通道,bit6:0,工作通道频率;
#defineRF_SETUP0x06//RF寄存器;bit3:传输速率(0:1Mbps,1:2Mbps);bit2:1,发射功率;bit0:低噪声放大器增益
#defineSTATUS0x07//状态寄存器;bit0:TXFIFO满标志;bit3:1,接收数据通道号(最大:6);bit4,达到最多次重发
//bit5:数据发送完成中断;bit6:接收数据中断;
#defineMAX_TX0x10//达到最大发送次数中断
#defineTX_OK0x20//TX发送完成中断
#defineRX_OK0x40//接收到数据中断
#defineOBSERVE_TX0x08//发送检测寄存器,bit7:4,数据包丢失计数器;bit3:0,重发计数器
#defineCD0x09//载波检测寄存器,bit0,载波检测;
#defineRX_ADDR_P00x0A//数据通道0接收地址,最大长度5个字节,低字节在前
#defineRX_ADDR_P10x0B//数据通道1接收地址,最大长度5个字节,低字节在前
#defineRX_ADDR_P20x0C//数据通道2接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P30x0D//数据通道3接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P40x0E//数据通道4接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineRX_ADDR_P50x0F//数据通道5接收地址,最低字节可设置,高字节,必须同RX_ADDR_P1[39:8]相等;
#defineTX_ADDR0x10//发送地址(低字节在前),ShockBurstTM模式下,RX_ADDR_P0与此地址相等
#defineRX_PW_P00x11//接收数据通道0有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P10x12//接收数据通道1有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P20x13//接收数据通道2有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P30x14//接收数据通道3有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P40x15//接收数据通道4有效数据宽度(1~32字节),设置为0则非法
#defineRX_PW_P50x16//接收数据通道5有效数据宽度(1~32字节),设置为0则非法
#defineFIFO_STATUS0x17//FIFO状态寄存器;bit0,RXFIFO寄存器空标志;bit1,RXFIFO满标志;bit2,3,保留
//bit4,TXFIFO空标志;bit5,TXFIFO满标志;bit6,1,循环发送上一数据包.0,不循环;
//24L01发送接收数据宽度定义
#defineTX_ADR_WIDTH5//5字节的地址宽度
#defineRX_ADR_WIDTH5//5字节的地址宽度
#defineTX_PLOAD_WIDTH32//20字节的用户数据宽度
#defineRX_PLOAD_WIDTH32//20字节的用户数据宽度
//硬件端口定义(模拟SPI)
sbitCE=P1^5;//SPI片选
sbitSCK=P1^4;//同步时钟
sbitMISO=P1^3;//主进从出
sbitIRQ=P1^2;//中断
sbitMOSI=P1^1;//主出从进
sbitCSN=P1^0;//芯片使能
//本地子函数声明
voidinit_io(void);//io口初始化
voidRX_Mode(void);//接收模式
voidTX_Mode(void);//发送模式
ucharNRF24L01_TxPacket(uchar*txbuf);//发送一次数据
ucharNRF24L01_RxPacket(uchar*rxbuf);//接送一次数据
#endif
#include"nrf24l01.h"
ucharcodeTX_ADDRESS[TX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//定义一个静态发送地址
ucharcodeRX_ADDRESS[RX_ADR_WIDTH]={0x34,0x43,0x10,0x10,0x01};//
/**************************************************
函数:init_io()
描述:初始化IO
/**************************************************/
voidinit_io(void)
{
CE=0;//待机
CSN=1;//SPI禁止
SCK=0;//SPI时钟置低
IRQ=1;//中断复位
}
/**************************************************
函数:SPI_RW()
描述;根据SPI协议,写一字节数据到nRF24L01,同时从nRF24L01
读出一字节
/**************************************************/
ucharSPI_RW(ucharbyte)
{
uchari;
for(i=0;i<8;i++)//循环8次
{
MOSI=(byte&0x80);//byte最高位输出到MOSI
byte<<=1;//低一位移位到最高位
SCK=1;//拉高SCK,nRF24L01从MOSI读入1位数据,同时从MISO输出1位数据
byte|=MISO;//读MISO到byte最低位
SCK=0;//SCK置低
}
return(byte);//返回读出的一字节
}
/**************************************************
函数:SPI_Write_Reg()
描述:写数据value到reg寄存器
/**************************************************/
ucharSPI_Write_Reg(ucharreg,ucharvalue)
{
ucharstatus;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
SPI_RW(value);//然后写数据到该寄存器
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************
函数:SPI_Read_Reg()
描述:从reg寄存器读一字节
/**************************************************/
ucharSPI_Read_Reg(ucharreg)
{
ucharreg_val;
CSN=0;//CSN置低,开始传输数据
SPI_RW(reg);//选择寄存器
reg_val=SPI_RW(0);//然后从该寄存器读数据
CSN=1;//CSN拉高,结束数据传输
return(reg_val);//返回寄存器数据
}
/**************************************************
函数:SPI_Read_Buf()
描述:从reg寄存器读出bytes个字节,通常用来读取接收通道
数据或接收/发送地址
/**************************************************/
ucharSPI_Read_Buf(ucharreg,uchar*pBuf,ucharbytes)
{
ucharstatus,i;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
for(i=0;i<bytes;i++)
pBuf[i]=SPI_RW(0);//逐个字节从nRF24L01读出
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************/
/**************************************************
函数:SPI_Write_Buf()
描述:把pBuf缓存中的数据写入到nRF24L01,通常用来写入发
射通道数据或接收/发送地址
/**************************************************/
ucharSPI_Write_Buf(ucharreg,uchar*pBuf,ucharbytes)
{
ucharstatus,i;
CSN=0;//CSN置低,开始传输数据
status=SPI_RW(reg);//选择寄存器,同时返回状态字
for(i=0;i<bytes;i++)
SPI_RW(pBuf[i]);//逐个字节写入nRF24L01
CSN=1;//CSN拉高,结束数据传输
return(status);//返回状态寄存器
}
/**************************************************
函数:RX_Mode()
描述:这个函数设置nRF24L01为接收模式,等待接收发送设备的数据包
/**************************************************/
voidRX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,RX_ADDRESS,RX_ADR_WIDTH);//接收设备接收通道0使用和发送设备相同的发送地址
SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答
SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0
SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40
SPI_Write_Reg(WRITE_REG+RX_PW_P0,TX_PLOAD_WIDTH);//接收通道0选择和发送通道相同有效数据宽度
SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益
SPI_Write_Reg(WRITE_REG+CONFIG,0x0f);//CRC使能,16位CRC校验,上电,接收模式
CE=1;//拉高CE启动接收设备
}
/**************************************************
函数:TX_Mode()
描述:这个函数设置nRF24L01为发送模式,(CE=1持续至少10us),
130us后启动发射,数据发送结束后,发送模块自动转入接收
模式等待应答信号。
/**************************************************/
voidTX_Mode(void)
{
CE=0;
SPI_Write_Buf(WRITE_REG+TX_ADDR,TX_ADDRESS,TX_ADR_WIDTH);//写入发送地址
SPI_Write_Buf(WRITE_REG+RX_ADDR_P0,TX_ADDRESS,TX_ADR_WIDTH);//为了应答接收设备,接收通道0地址和发送地址相同
SPI_Write_Reg(WRITE_REG+EN_AA,0x01);//使能接收通道0自动应答
SPI_Write_Reg(WRITE_REG+EN_RXADDR,0x01);//使能接收通道0
SPI_Write_Reg(WRITE_REG+SETUP_RETR,0x0a);//自动重发延时等待250us+86us,自动重发10次
SPI_Write_Reg(WRITE_REG+RF_CH,40);//选择射频通道0x40
SPI_Write_Reg(WRITE_REG+RF_SETUP,0x0f);//数据传输率2Mbps,发射功率0dBm,低噪声放大器增益
SPI_Write_Reg(WRITE_REG+CONFIG,0x0e);//CRC使能,16位CRC校验,上电
CE=1;
}
//启动NRF24L01发送一次数据
//txbuf:待发送数据首地址
//返回值:发送完成状况
ucharNRF24L01_TxPacket(uchar*txbuf)
{
ucharsta;
CE=0;
SPI_Write_Buf(WR_TX_PLOAD,txbuf,TX_PLOAD_WIDTH);//写数据到TXBUF32个字节
CE=1;//启动发送
while(IRQ!=0);//等待发送完成
sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值
SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志
if(sta&MAX_TX)//达到最大重发次数
{
SPI_Write_Reg(FLUSH_TX,0xff);//清除TXFIFO寄存器
returnMAX_TX;
}
if(sta&TX_OK)//发送完成
{
returnTX_OK;
}
return0xff;//其他原因发送失败
}
//NRF24L01JIE接收送一次数据
//txbuf:接收数据首地址
//返回值:0,接收完成;其他,错误代码
ucharNRF24L01_RxPacket(uchar*rxbuf)
{
ucharsta;
sta=SPI_Read_Reg(STATUS);//读取状态寄存器的值
SPI_Write_Reg(WRITE_REG+STATUS,sta);//清除TX_DS或MAX_RT中断标志
if(sta&RX_OK)//接收到数据
{
SPI_Read_Buf(RD_RX_PLOAD,rxbuf,RX_PLOAD_WIDTH);//读取数据
SPI_Write_Reg(FLUSH_RX,0xff);//清除RXFIFO寄存器
return0;
}
return1;//没收到任何数据
}