| 
 
| 程序如下: 单片机用的是stc的低电压版的
 SPI用部分用protues仿真了,数据是对的
 用示波器看DR脚,有跳变
 接收部分的程序和这个差不多,用示波器看接收的AM 和CD都没输出
 估计 就是没发出去
 不知道是什么地方不对...
 //nrf905发送程序
 #include <nrf905.h>
 sbit LED1 = P3^0;
 //------------------------------------------------NRF905寄存器配置------------------------------------------------
 unsigned char idata RFConf[11]=
 {
 0x00,                             //配置命令//
 0x4c,                             //CH_NO,配置频段在430MHZ
 0x0c,                             //输出功率为10db,不重发,节电为正常模式
 0x44,                             //地址宽度设置,为4字节
 0x02,0x02,                        //接收发送有效数据长度为32字节
 0xCC,0xCC,0xCC,0xCC,              //接收地址
 0x58,                             //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
 };
 
 code unsigned char TxAddress[4]={0xcc,0xcc,0xcc,0xcc}; //发射地址
 unsigned char TxBuf[4] = {0x01,0x02,0x04,0x08}; //发送的数据
 
 void main(void)
 {
 
 LED1 = 1;
 nRF905Init();   //SPI初始化
 
 Config905();    //SPI配置
 Delay(8);
 
 
 
 while(1)
 {
 
 SetTxMode();    //设置为发送模式
 Delay(8);
 TxPacket(TxBuf,4); //发送数据
 
 
 
 
 
 }
 
 }
 
 static void Delay(unsigned char n)
 {
 unsigned int i;
 while(n--)
 for(i=0;i<80;i++);
 }
 
 //写SPI
 static void SpiWrite(unsigned char send)
 {
 unsigned char i;
 unsigned  char DATA_BUF;
 DATA_BUF=send;
 for (i=0;i<8;i++)
 {
 if (DATA_BUF&0x80) //总是发送最高位
 {
 MOSI=1;
 }
 else
 {
 MOSI=0;
 }
 SCK=1;
 DATA_BUF<<=1;
 SCK=0;
 }
 }
 //NRF905初始化
 void nRF905Init(void)
 {
 CSN=1;      // Spi  disable
 SCK=0;      // Spi clock line init low
 // DR=0;      // Init DR for input
 // AM=1;      // Init AM for input
 // CD=0;      // Init CD for input
 PWR=1;         // nRF905 power on
 TRX_CE=0;     // Set nRF905 in standby mode
 TXEN=1;         // set radio in Tx mode
 }
 //NRF905配置
 void Config905(void)
 {
 unsigned char i;
 CSN=0;      // Spi enable for write a spi command
 for (i=0;i<11;i++)       // Write configration words  写放配置字
 {
 SpiWrite(RFConf[i]);
 }
 CSN=1;     // Disable Spi
 }
 //发送数据包
 void TxPacket(unsigned char *TxRxBuf,unsigned char DataLength)
 {
 unsigned char i;
 
 CSN=0;      // Spi enable for write a spi command
 SpiWrite(WTA);    // Write address command
 for (i=0;i<4;i++)   // Write 4 bytes address
 {
 SpiWrite(TxAddress[i]);
 }
 CSN=1;      // Spi disable
 Delay(8);
 CSN=0;
 SpiWrite(WTP);    // Write payload command
 for (i=0;i<DataLength;i++)
 {
 SpiWrite(TxRxBuf[i]);  // Write TxRxBuf_Len bytes Tx data
 }
 CSN=1;
 Delay(8);      // Spi disable
 TRX_CE=1;     // Set TRX_CE high,start Tx data transmission
 Delay(8);     // while (DR!=1);
 TRX_CE=0;     // Set TRX_CE low
 }
 //设置为发送模式
 void SetTxMode(void)
 {
 TRX_CE=0;
 TXEN=1;
 Delay(8);      // delay for mode change(>=650us)
 }
 | 
 |