无线模块程序.docx
- 文档编号:14916205
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:19
- 大小:19.47KB
无线模块程序.docx
《无线模块程序.docx》由会员分享,可在线阅读,更多相关《无线模块程序.docx(19页珍藏版)》请在冰点文库上搜索。
无线模块程序
#include
#include
#include
#include
//--------------------
#defineuintunsignedint
#defineucharunsignedchar
//-------------------------------------------------------------
#defineBYTE_BIT00x01
#defineBYTE_BIT10x02
#defineBYTE_BIT20x04
#defineBYTE_BIT30x08
#defineBYTE_BIT40x10
#defineBYTE_BIT50x20
#defineBYTE_BIT60x40
#defineBYTE_BIT70x80
//---------------------------------
bdataunsignedcharDATA_BUF;
#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
//-----------发送数据缓冲区----------------------------
#defineTxRxBuf_Len4
unsignedcharTxRxBuf[TxRxBuf_Len]={0,0,0,0,};//把数据放在数组中发出去
//---------------NRF905控制IO-------------------------------
sbitTXEN=P0^2;//发送接收选择
sbitTRX_CE=P2^4;//发送接收使能
sbitPWR=P0^3;//设为1,nrf905才能工作
//----------------------------NRF905spi数据交换端口-------------------------------
sbitMISO=P2^6;//nrf905spi输出
sbitMOSI=P0^6;//nrf905spi输入
sbitSCK=P2^7;//spi时钟
sbitCSN=P0^7;//spi使能
//----------------------------------------nrf905状态端口---------------------------------------------------------
sbitAM=P2^5;//匹配地址
sbitDR=P0^5;//接收、发送完成标志
sbitCD=P0^4;//载波检测
//--------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#defineWC0x00
#defineRC0x10
#defineWTP0x20
#defineRTP0x21
#defineWTA0x22
#defineRTA0x23
#defineRRP0x24
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsignedcharidataRFConf[11]=
{
0x00,//配置命令//
0x4c,//CH_NO,配置频段在430MHZ
0x0c,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
0x04,0x04,//接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC,//接收地址
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};//地址
//------------------------------------------------延时------------------------------------------------------------
staticvoidDelay(ucharn)
{
uinti;
while(n--)
for(i=0;i<80;i++);
}
//------------------------------SPI读函数-------------------------------------
unsignedcharSpiRead(void)
{
unsignedcharj;
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;
}
//---------------------------SPI写函数----------------------------------------
voidSpiWrite(unsignedcharsend)
{
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7)//总是发送最高位
{
MOSI=1;//nrf905读入数据
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
//----------------------初始化nRF905-----------------------------
voidnRF905Init(void)
{
CSN=1;//Spidisable
SCK=0;//Spiclocklineinitlow
DR=0;//InitDRforinput
AM=0;//InitAMforinput
CD=0;//InitCDforinput
PWR=1;//nRF905poweron
TRX_CE=0;//SetnRF905instandbymode待机模式
TXEN=0;//setradioinRxmode
}
//--------------------------------------初始化寄存器-----------------------------------------------
voidConfig905(void)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
for(i=0;i<11;i++)//Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1;//DisableSpi
}
//-----------------------------发送数据打包---------------------------------
voidTxPacket(uchar*TxRxBuf)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
SpiWrite(WTP);//向寄存器中写入发送有效数据的命令
for(i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]);//Write32bytesTxdata把数组中的数据写进去
}
CSN=1;//Spidisable
Delay
(1);
CSN=0;//Spienableforwriteaspicommand
SpiWrite(WTA);//Writeaddresscommand
for(i=0;i<4;i++)//Write4bytesaddress把地址写进去
{
SpiWrite(TxAddress[i]);
}
CSN=1;//Spidisablespi不能使用
TRX_CE=1;//SetTRX_CEhigh,startTxdatatransmission开始发送
//Delay
(1);//等待一会或者用下面的方式
while(DR!
=0);
TRX_CE=0;//SetTRX_CElow
}
//--------------------------------------设置发送状态---------------------------
voidSetTxMode(void)
{
TRX_CE=0;//不能立即发射,说以TRX_CE为零
TXEN=1;
Delay
(1);//delayformodechange(>=650us)
}
//----------------------------------设置发送状态---------------------------------------------------
voidSetRxMode(void)
{
TXEN=0;
TRX_CE=1;
Delay
(1);//delayformodechange(>=650us)
}
//-------------------------判断数据接收状态---------------------------------
unsignedcharCheckDR(void)//检查是否有新数据传入DataReady
{
if(DR=1&&TRX_CE==1&&TXEN==0)//DR发生变化,变为1且为接收模式才返回1
{
return1;
}
else
{
return0;
}
}
//------------读NRF905接收数据----------------------------
voidRxPacket(void)
{
uchari;
Delay(100);
TRX_CE=0;//SetnRF905instandbymode设定为待机模式
CSN=0;//SpienableforwriteaspicommandCSN为低,使用spi总线
Delay
(1);
SpiWrite(RRP);
for(i=0;i<4;i++)
{
TxRxBuf[i]=SpiRead();//Readdataandsavetobuffer把接收到的数据保存到数组中
}
CSN=1;//CSN为高,不使用spi总线
Delay(10);
TRX_CE=1;//改为发射模式
}
//----------------------------数据接收-----------------------------
voidRX(void)
{
SetRxMode();//SetnRF905inRxmode设定为接收模式
while(CheckDR()==0);//检测是否收到数据,否则一直在此循环
Delay(10);
RxPacket();//接收数据
}
//--------------------接收主函数-----------------------------------------------
voidmain(void)
{
charnum=0;
nRF905Init();
Config905();
/*while
(1)//接收
{
RX();//一直处于接收状态
if(TxRxBuf[0]==0)P1=0x55;//实时把接收到的数据表现出来
if(TxRxBuf[0]==1)P1=0xfd;
if(TxRxBuf[0]==2)P1=0xfb;
if(TxRxBuf[0]==3)P1=0xaa;
}*/
while
(1)//发射
{
Delay(200);
TxRxBuf[0]=num;
num++;
if(num==4)
num=0;
SetTxMode();//SetnRF905inTxmode设为发射模式
TxPacket(TxRxBuf);//SenddatabynRF905发射数据
}
}
//接收:
余龙发射有问题
//发射:
朱立
#include
#include
#include
#include
//--------------------
#defineuintunsignedint
#defineucharunsignedchar
//-------------------------------------------------------------
#defineBYTE_BIT00x01
#defineBYTE_BIT10x02
#defineBYTE_BIT20x04
#defineBYTE_BIT30x08
#defineBYTE_BIT40x10
#defineBYTE_BIT50x20
#defineBYTE_BIT60x40
#defineBYTE_BIT70x80
//---------------------------------
bdataunsignedcharDATA_BUF;
#defineDATA7((DATA_BUF&BYTE_BIT7)!
=0)
#defineDATA0((DATA_BUF&BYTE_BIT0)!
=0)
//-----------发送数据缓冲区----------------------------
#defineTxRxBuf_Len4
unsignedcharTxRxBuf[TxRxBuf_Len]={0,0,0,0,};//把数据放在数组中发出去
//---------------NRF905控制IO-------------------------------
sbitTXEN=P0^2;//发送接收选择
sbitTRX_CE=P2^4;//发送接收使能
sbitPWR=P0^3;//设为1,nrf905才能工作
//----------------------------NRF905spi数据交换端口-------------------------------
sbitMISO=P2^6;//nrf905spi输出
sbitMOSI=P0^6;//nrf905spi输入
sbitSCK=P2^7;//spi时钟
sbitCSN=P0^7;//spi使能
//----------------------------------------nrf905状态端口---------------------------------------------------------
sbitAM=P2^5;//匹配地址
sbitDR=P0^5;//接收、发送完成标志
sbitCD=P0^4;//载波检测
//--------------------------------------------------------------------------------------------------------------
//-------------------------------------------------------nrf905控制指令-------------------------------------------
#defineWC0x00
#defineRC0x10
#defineWTP0x20
#defineRTP0x21
#defineWTA0x22
#defineRTA0x23
#defineRRP0x24
//------------------------------------------------NRF905寄存器配置------------------------------------------------
unsignedcharidataRFConf[11]=
{
0x00,//配置命令//
0x4c,//CH_NO,配置频段在430MHZ
0x0c,//输出功率为10db,不重发,节电为正常模式
0x44,//地址宽度设置,为4字节
0x04,0x04,//接收发送有效数据长度为32字节
0xCC,0xCC,0xCC,0xCC,//接收地址
0x58,//CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
};
codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};//地址
//------------------------------------------------延时------------------------------------------------------------
staticvoidDelay(ucharn)
{
uinti;
while(n--)
for(i=0;i<80;i++);
}
//------------------------------SPI读函数-------------------------------------
unsignedcharSpiRead(void)
{
unsignedcharj;
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;
}
//---------------------------SPI写函数----------------------------------------
voidSpiWrite(unsignedcharsend)
{
unsignedchari;
DATA_BUF=send;
for(i=0;i<8;i++)
{
if(DATA7)//总是发送最高位
{
MOSI=1;//nrf905读入数据
}
else
{
MOSI=0;
}
SCK=1;
DATA_BUF=DATA_BUF<<1;
SCK=0;
}
}
//----------------------初始化nRF905-----------------------------
voidnRF905Init(void)
{
CSN=1;//Spidisable
SCK=0;//Spiclocklineinitlow
DR=0;//InitDRforinput
AM=0;//InitAMforinput
CD=0;//InitCDforinput
PWR=1;//nRF905poweron
TRX_CE=0;//SetnRF905instandbymode待机模式
TXEN=0;//setradioinRxmode
}
//--------------------------------------初始化寄存器-----------------------------------------------
voidConfig905(void)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
for(i=0;i<11;i++)//Writeconfigrationwords写放配置字
{
SpiWrite(RFConf[i]);
}
CSN=1;//DisableSpi
}
//-----------------------------发送数据打包---------------------------------
voidTxPacket(uchar*TxRxBuf)
{
uchari;
CSN=0;//Spienableforwriteaspicommand
SpiWrite(WTP);//向寄存器中写入发送有效数据的命令
for(i=0;i<4;i++)
{
SpiWrite(TxRxBuf[i]);//Write32bytesTxdata把数组中的数据写进去
}
CSN=1;//Spidisable
Delay
(1);
CSN=0;//Spienableforwriteaspicommand
SpiWrite(WTA);/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 无线 模块 程序