nrf905收发程序.docx

上传人:b****0 文档编号:18030131 上传时间:2023-08-07 格式:DOCX 页数:18 大小:17.21KB
下载 相关 举报
nrf905收发程序.docx_第1页
第1页 / 共18页
nrf905收发程序.docx_第2页
第2页 / 共18页
nrf905收发程序.docx_第3页
第3页 / 共18页
nrf905收发程序.docx_第4页
第4页 / 共18页
nrf905收发程序.docx_第5页
第5页 / 共18页
nrf905收发程序.docx_第6页
第6页 / 共18页
nrf905收发程序.docx_第7页
第7页 / 共18页
nrf905收发程序.docx_第8页
第8页 / 共18页
nrf905收发程序.docx_第9页
第9页 / 共18页
nrf905收发程序.docx_第10页
第10页 / 共18页
nrf905收发程序.docx_第11页
第11页 / 共18页
nrf905收发程序.docx_第12页
第12页 / 共18页
nrf905收发程序.docx_第13页
第13页 / 共18页
nrf905收发程序.docx_第14页
第14页 / 共18页
nrf905收发程序.docx_第15页
第15页 / 共18页
nrf905收发程序.docx_第16页
第16页 / 共18页
nrf905收发程序.docx_第17页
第17页 / 共18页
nrf905收发程序.docx_第18页
第18页 / 共18页
亲,该文档总共18页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

nrf905收发程序.docx

《nrf905收发程序.docx》由会员分享,可在线阅读,更多相关《nrf905收发程序.docx(18页珍藏版)》请在冰点文库上搜索。

nrf905收发程序.docx

nrf905收发程序

nrf905收发程序

程序经过调试,编译时的警告没问题,是有些定义了的函数没有使用

//发射

#include

#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

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

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 物理

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2