nrf905收发程序.docx
- 文档编号:18030131
- 上传时间:2023-08-07
- 格式:DOCX
- 页数:18
- 大小:17.21KB
nrf905收发程序.docx
《nrf905收发程序.docx》由会员分享,可在线阅读,更多相关《nrf905收发程序.docx(18页珍藏版)》请在冰点文库上搜索。
nrf905收发程序
nrf905收发程序
程序经过调试,编译时的警告没问题,是有些定义了的函数没有使用
//发射
#include
#include
#include
#defineuintunsignedint#defineucharunsignedchar#defineBYTE_BIT00x01#defineBYTE_BIT10x02#defineBYTE_BIT20x04#defineBYTE_BIT30x08#defineBYTE_BIT40x10#defineBYTE_BIT50x20#defineBYTE_BIT60x40#defineBYTE_BIT70x80////////////SPI指令
#defineWC0x00
#defineRC0x10
#defineWTP0x20
#defineRTP0x21
#defineWTA0x22
#defineRTA0x23
24#defineRRP0x
bdataunsignedcharDATA_BUF;
#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
sbitflag=DATA_BUF^7;sbitflag1=DATA_BUF^0;#defineTxRxBuf_Len4unsignedcharTxRxBuf[TxRxBuf_Len]=
{
0x29,0x30,0x31,0x32,};
//配置口定义//
sbitTXEN=P1^3;
sbitTRX_CE=P1^0;sbitPWR=P1^2;
sbitMISO=P0^3;
sbitMOSI=P1^1;
sbitSCK=P1^4;
sbitCSN=P3^2;
/////////////////////////////////////////////////////
sbitAM=P0^2;
sbitDR=P0^1;
sbitCD=P0^0;
///////////////////////////////////////////////////////
/////////////////////////////////////////////////////////sbitKEY0=P3^6;
//sbitKEY1=P3^7;
ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9
段码
//sbitled1=P2^1;
//sbitled0=P2^0;
//sbitled2=P2^2;
//sbitled3=P2^3;
//RF寄存器配置//
unsignedcharidataRFConf[11]=
{
0x00,//配置命令//
0x4c,//CH_NO,配置频段在423MHZ
0x0c,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
//接收发送有效数据长度为32字节0x04,0x04,
0xCC,0xCC,0xCC,0xCC,//接收地址
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,
16M晶振
};
bitlcdbit;
codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};///////////延时/////////////////
staticvoidDelay(ucharn)
{
uinti;
while(n--)
for(i=0;i<80;i++);
}
///////////////
/*unsignedcharSpiRead(void)
{
unsignedchari;
for(i=0;i<8;i++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
if(MISO)//读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
SCK=0;
}
returnDATA_BUF;
}*/
voidSpiWrite(unsignedcharsend){
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7)//总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
////////////////初始化nRF905///////////////////voidnRF905Init(void)
{
CSN=1;//Spidisable
SCK=0;//SpiclocklineinitlowDR=0;//InitDRforinput
AM=0;//InitAMforinput
CD=0;//InitCDforinput
PWR=1;//nRF905poweron
TRX_CE=0;//SetnRF905instandbymode
TXEN=0;//setradioinRxmode}
////////初始化寄存器
voidConfig905(void)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
//SpiWrite(WC);//Writeconfigcommand写放配置命令for(i=0;i<11;i++)//Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
//DisableSpiCSN=1;
}
/////////////初始化
voidInituart(void)
{
TMOD=0x20;//timer1workingmode1
TL1=0xfd;//f7=9600for16mhzFosc,and...TH1=0xfd;//...fd=19200for11.0592mhzFosc
SCON=0xd8;//uartmode3,ren==1
PCON=0x80;//smod=1
TR1=1;//starttimer1
}
/////////////发送数据
voidTxPacket(uchar*TxRxBuf)
{
uchari;
//Config905();
CSN=0;
SpiWrite(WTP);//Writepayloadcommand
for(i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]);//Write32bytesTxdata
}//Spienableforwriteaspicommand
CSN=1;
Delay
(1);//Spidisable
CSN=0;//SpienableforwriteaspicommandSpiWrite(WTA);//Writeaddresscommandfor(i=0;i<4;i++)//Write4bytesaddress
{
SpiWrite(TxAddress[i]);
}
CSN=1;//Spidisable
TRX_CE=1;//SetTRX_CEhigh,startTxdatatransmission
Delay
(1);//while(DR!
=1);
TRX_CE=0;//SetTRX_CElow
}
////////////////////////////////////////////////////voidSetTxMode(void)
{
TRX_CE=0;
TXEN=1;
Delay
(1);//delayformodechange(>=650us)
}
unsignedcharCheckCD(void)//Pin->检查是否已存在同频率载波
{
if(CD==1)
{
return1;
}
else
{
return0;
}
}
/*voidTX(void)
{
SetTxMode();//SetnRF905inTxmode
TxPacket();//SenddatabynRF905
CheckCD();//返回CD的当前电平
//SetRF_PA_PWR(unsignedchari);//设置发射功率
}*/
voidmain(void)
{
//Inituart();
uchari;
nRF905Init();
Config905();
while
(1)
{
TxRxBuf[0]=0x29;
TxRxBuf[1]=0x30;
TxRxBuf[2]=0x31;
TxRxBuf[3]=0x32;
for(i=0;i<2;i++){
SetTxMode();//SetnRF905inTxmode
TxPacket(TxRxBuf);//SenddatabynRF905
}
//Delay(250);
}
}
//接收
#include
#include
#include
#defineuintunsignedint//0~255
#defineucharunsignedchar/////////////////
#defineBYTE_BIT00x01#defineBYTE_BIT10x02#defineBYTE_BIT20x04#defineBYTE_BIT30x08#defineBYTE_BIT40x10#defineBYTE_BIT50x20#defineBYTE_BIT60x40
#defineBYTE_BIT70x80////////////////
#defineWC0x00
#defineRC0x10
#defineWTP0x20
#defineRTP0x21
#defineWTA0x22
#defineRTA0x23
#defineRRP0x24
bdataunsignedcharDATA_BUF;#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
sbitflag=DATA_BUF^7;sbitflag1=DATA_BUF^0;#defineTxRxBuf_Len4unsignedcharTxRxBuffer[TxRxBuf_Len];
chartemp[4];
uintcount=1;
sbitTXEN=P1^3;
sbitTRX_CE=P1^0;
sbitPWR=P1^2;
sbitMISO=P0^3;
sbitMOSI=P1^1;
sbitSCK=P1^4;
sbitCSN=P3^2;
/////////////////////////////////////////////////////
sbitAM=P0^2;
sbitDR=P0^1;
sbitCD=P0^0;
///////////////////////////////////////////////////////
///////////////////////////////////////////////sbitled0=P1^0;
//sbitled1=P1^2;
//sbitled2=P1^4;
/////////////////////////////////////////////////////ucharseg[10]={0xC0,0xCF,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90};//0~~9
段码
//ucharseg1[10]={0x02,0xf2,0x24,0x0c,0x98,0x48,0x40,0x1e,0x00,0x08};//0~~9
段码
//RF寄存器配置//
unsignedcharidataRFConf[11]=
{
0x00,//配置命令//
0x4c,0x0c,0x44,0x04,0x04,0xcc,0xcc,0xcc,0xcc,0x58,//CRC充
许,8位CRC校验,外部时钟信号不使能,16M晶振};
bitlcdbit;
///////////80us延时/////////////////voidDelay(ucharn)
{
uintk;
while(n--)
for(k=0;k<8;k++);
}
voiddelay1(uinti)
{
for(;i>0;i--);
}
///////////////
unsignedcharSpiRead(void)
{
dcharj;unsigne
for(j=0;j<8;j++)
{
DATA_BUF=DATA_BUF<<1;
SCK=1;
if(MISO)//读取最高位,保存至最末尾,通过左移位完成整个字节
{
DATA_BUF|=BYTE_BIT0;
}
else
{
DATA_BUF&=~BYTE_BIT0;
}
SCK=0;
}
returnDATA_BUF;
}
voidSpiWrite(unsignedcharsend){
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7)//总是发送最高位
{
MOSI=1;
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
////////////////初始化nRF905///////////////////voidnRF905Init(void)
{
CSN=1;//Spidisable
SCK=0;//SpiclocklineinitlowDR=0;//InitDRforinput
AM=0;//InitAMforinput
CD=0;//InitCDforinput
PWR=1;//nRF905poweron
TRX_CE=0;//SetnRF905instandbymode
TXEN=0;//setradioinRxmode}
////////初始化寄存器
voidConfig905(void)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
//SpiWrite(WC);//Writeconfigcommand写放配置命令
for(i=0;i<11;i++)//Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1;//DisableSpi}
voidSetRxMode(void)
{
TXEN=0;
TRX_CE=1;
Delay
(1);//delayformodechange(>=650us)
}
unsignedcharCheckDR(void)//检查是否有新数据传入DataReady
{
if(DR=1&&TRX_CE==1&&TXEN==0)
{
//Delay(50);
return1;
}
else
{
return0;
}
}
//读数据voidRxPacket(void)
{
uchari;
Delay
(1);
//TRX_CE=0;//SetnRF905instandbymode
Delay(100);
TRX_CE=0;
CSN=0;//Spienableforwriteaspicommand
Delay
(1);
SpiWrite(RRP);
//Delay(10000);
//Delay(10000);//Readpayloadcommand
for(i=0;i<4;i++)
{//Delay(10000);
//Delay(10000);
//Delay(10000);
//Delay(10000);
TxRxBuffer[i]=SpiRead();//Readdataandsavetobuffer
//Delay(10000);
//Delay(10000);
//Delay(10000);
}
CSN=1;
Delay(10);
//Delay(10);TRX_CE=1;}
////////////////
voidRX(void)
{
SetRxMode();//SetnRF905inRxmode
//Delay(10000);while(CheckDR()==0);
//Delay(10000);Delay(10);
RxPacket();
//Delay(10000);//RecivedatabynRF905
Delay(10);
}
voidStartUART(void){//波特率4800
SCON=0x50;
TMOD=0x20;
TH1=0xFA;
TL1=0xFA;
PCON=0x00;
TR1=1;
}
voidR_S_Byte(ucharR_Byte){
SBUF=R_Byte;while(TI==0);//查询法
TI=0;
}
voidtime0sym()
{
TH0=0xE2;//重载计数初始值
TL0=0x00;
TR0=1;
ET0=1;
EA=1;
TF0=0;//清中断
}
voidtime0_int()interrupt1
{
if(TF0==1)//10ms中断{
TF0=0;//清中断
TH0=0xE2;//重载计数初始值
TL0=0x00;
count=count+1;
if(count==100)//1s
{
count=0;//每1秒清count,重新开始等待1秒
}
}
}
voidmain(void)
{
//chari;
StartUART();
time0sym();
nRF905Init();
Config905();
while
(1)
{
RX();
Delay(10);
CSN=0;
if(TxRxBuffer[0])
{
if(TxRxBuffer[0]==0x29)
{
//R_S_Byte(TxRxBuffer[0]);
//led0=0;led1=1;led2=0;
delay1(50);
//led0=1;led1=1;led2=1;led3=1;
}
if(TxRxBuffer[0]==0x30)
{
//P0=0x00;
//R_S_Byte(TxRxBuffer[0]);
//led0=1;led1=0;led2=1;
delay1(50);
//led0=1;led1=1;led2=1;led3=1;}
}
}
CSN=1;
Delay
(1);}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- nrf905 收发 程序