📄 调试51+nrf905无线模块,可以保证稳定的收发,正在完善中。。 (ourdev_cn 我们的电子开发社区).htm
字号:
<BR>#define BYTE_BIT7 0x80
<BR>//----------------------------------------------------------------------------------------------------------------
<BR><BR>//----------------------------------------------------------------------------------------------------------------
<BR>bdata unsigned char DATA_BUF;
<BR>#define DATA7 ((DATA_BUF&BYTE_BIT7) != 0)
<BR>#define DATA0 ((DATA_BUF&BYTE_BIT0) != 0)
<BR>sbit flag =DATA_BUF^7;
<BR>sbit flag1 =DATA_BUF^0;
<BR>//---------------------------------------------------发送数据缓冲区-------------------------------------------------
<BR>#define TxRxBuf_Len 4
<BR>unsigned char TxRxBuf[TxRxBuf_Len]= <BR>{
<BR>0x29,0x30,0x31,0x32, <BR>};
<BR><BR>//---------------------------------------------------配置口定义---------------------------------------------------
<BR>sbit TXEN=P1^0;
<BR>sbit TRX_CE=P3^2;
<BR>sbit PWR=P1^1;
<BR>sbit MISO=P1^6;
<BR>sbit MOSI=P1^5;
<BR>sbit SCK=P1^7;
<BR>sbit CSN=P1^3;
<BR>//---------------------------------------------------NRF905状态IO----------------------------------------------------
<BR>sbit AM=P1^4;
<BR>sbit DR=P3^3;
<BR>sbit CD=P1^2;
<BR>//-------------------------------------------------------nrf905控制指令-------------------------------------------
<BR>#define WC 0x00
<BR>#define RC 0x10
<BR>#define WTP 0x20
<BR>#define RTP 0x21
<BR>#define WTA 0x22
<BR>#define RTA 0x23
<BR>#define RRP 0x24
<BR><BR>void keyscan();
<BR>//------------------------------------------------NRF905寄存器配置------------------------------------------------
<BR>unsigned char idata RFConf[11]= <BR>{
<BR> 0x00, //配置命令//
<BR> 0x4c, //CH_NO,配置频段在423MHZ
<BR> 0x0c, //输出功率为10db,不重发,节电为正常模式
<BR> 0x44, //地址宽度设置,为4字节
<BR> 0x04,0x04, //接收发送有效数据长度为32字节
<BR> 0xCC,0xCC,0xCC,0xCC, //接收地址
<BR> 0x58, //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
<BR>}; <BR>bit lcdbit;
<BR>code TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
<BR>//------------------------------------------------延时------------------------------------------------------------
<BR>static void Delay(uchar n) <BR>{
<BR> uint i;
<BR> while(n--)
<BR> for(i=0;i<80;i++)
<BR> keyscan(); <BR>}
<BR>//-------------------------------------------------SPI写函数----------------------------------------------------------
<BR>void SpiWrite(unsigned char send) <BR>{
<BR> unsigned char i;
<BR> DATA_BUF=send;
<BR> for (i=0;i<8;i++)
<BR> {
<BR> if (DATA7) //总是发送最高位
<BR> {
<BR> MOSI=1;
<BR> }
<BR> else
<BR> {
<BR> MOSI=0;
<BR> }
<BR> SCK=1;
<BR> DATA_BUF=DATA_BUF<<1;
<BR> SCK=0;
<BR> } <BR>}
<BR>//------------------------------------------------------初始化nRF905---------------------------------------------
<BR>void nRF905Init(void) <BR>{
<BR> CSN=1; // Spi disable
<BR> SCK=0; // Spi clock line init low
<BR> DR=0; // Init DR for input
<BR> AM=0; // Init AM for input
<BR> CD=0; // Init CD for input
<BR> PWR=1; // nRF905 power on
<BR> TRX_CE=0; // Set nRF905 in standby mode
<BR> TXEN=0; // set radio in Rx mode
<BR>}
<BR>//-----------------------------------------------------初始化寄存器-----------------------------------------------
<BR>void Config905(void) <BR>{
<BR> uchar i;
<BR> CSN=0; // Spi enable for write a spi command
<BR> //SpiWrite(WC); // Write config command写放配置命令
<BR> for (i=0;i<11;i++) // Write configration words 写放配置字
<BR> {
<BR> SpiWrite(RFConf[i]);
<BR> }
<BR> CSN=1; // Disable Spi
<BR>}
<BR>//-----------------------------------------------------发送数据打包---------------------------------------------------
<BR>void TxPacket(uchar *TxRxBuf) <BR>{
<BR> uchar i;
<BR> //Config905();
<BR> CSN=0;
<BR> SpiWrite(WTP); // Write payload command
<BR> for (i=0;i<4;i++)
<BR> {
<BR> SpiWrite(TxRxBuf[i]); // Write 32 bytes Tx data
<BR> }// Spi enable for write a spi command
<BR> CSN=1;
<BR> Delay(1); // Spi disable
<BR> CSN=0; // Spi enable for write a spi command
<BR> SpiWrite(WTA); // Write address command
<BR> for (i=0;i<4;i++) // Write 4 bytes address
<BR> {
<BR> SpiWrite(TxAddress[i]);
<BR> }
<BR> CSN=1; // Spi disable
<BR> TRX_CE=1; // Set TRX_CE high,start Tx data transmission
<BR> Delay(1); // while (DR!=1);
<BR> TRX_CE=0; // Set TRX_CE low
<BR>}
<BR>//----------------------------------------------------------设置发送状态---------------------------------------------
<BR>void SetTxMode(void) <BR>{
<BR> TRX_CE=0;
<BR> TXEN=1;
<BR> Delay(1); // delay for mode change(>=650us)
<BR>}
<BR>//-----------------------------------------------------------------------------------------------------------------
<BR><BR>void delay50ms() <BR>{
<BR> uchar i,j;
<BR> for(i=5;i>0;i--)
<BR> for(j=200;j>0;j--)
<BR> keyscan();
<BR>}
<BR>//------------用于按键销抖--------------------------------------------------------------------------------------
<BR>void delay10ms() <BR>{
<BR> uchar i,j;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -