| 
 
| 我是用开发板上的例程,但是却不知道怎么看出来有没有成功,请问大神们怎么改进 
 #include <msp430x14x.h>
 //==============================================================================
 #define  uchar   unsigned char
 #define  uint    unsigned int
 #define  uclong  unsigned long
 //==================TXEN,TRX_CE,PWR_0 为收发模式控制端口======================
 #define  TXEN_0     P6OUT &=~BIT0          //输出0
 #define  TXEN_1     P6OUT |= BIT0          //输出1
 //==============================================================================
 #define  TRX_CE_0   P6OUT &=~BIT1
 #define  TRX_CE_1   P6OUT |= BIT1
 //==============================================================================
 #define  PWR_0      P6OUT &=~BIT2
 #define  PWR_1      P6OUT |= BIT2
 //===================================主入从出===================================
 #define  MISO_0     P5OUT &=~BIT2
 #define  MISO_1     P5OUT |= BIT2
 //==================================主出从入====================================
 #define  MOSI_0     P5OUT &=~BIT1
 #define  MOSI_1     P5OUT |= BIT1
 //===================================SPI时钟端口================================
 #define  SCK_0      P5OUT &=~BIT3
 #define  SCK_1      P5OUT |= BIT3
 //===================================SPI使能端口=================================
 #define  CSN_0      P5OUT &=~BIT0
 #define  CSN_1      P5OUT |= BIT0
 //==================================以下为状态端口==============================
 //===========================AM  地址匹配=======================================
 #define  AM_0       P6OUT &=~BIT4
 #define  AM_1       P6OUT |= BIT4
 //=================================DR 数据接收状态==============================
 #define  DR_0       P6OUT &=~BIT3
 #define  DR_1       P6OUT |= BIT3
 //=====================================CD 载波侦听状态==========================
 #define  CD_0       P6OUT &=~BIT5
 #define  CD_1       P6OUT |= BIT5
 //==============================================================================
 #define  LED1_0     P2OUT &=~BIT1          //输出0
 #define  LED1_1     P2OUT |= BIT1          //输出1
 #define  LED2_0     P2OUT &=~BIT2          //输出0
 #define  LED2_1     P2OUT |= BIT2          //输出1
 //===========================NRF905:SPI指令=====================================
 #define WC                0x00
 #define RC                0x10
 #define WTP                0x20
 #define RTP                0x21
 #define WTA                0x22
 #define RTA                0x23
 #define RRP                0x24
 //==========================32字节发送数据收发缓冲区============================
 #define TxRxBuf_Len 32
 unsigned char TxRxBuf[TxRxBuf_Len]=
 { 0x01,0x02,0x03,0x4,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15,0x16,
 0x17,0x18,0x19,0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x30,0x31,0x32,
 };
 char TxAddress[4]={0xcc,0xcc,0xcc,0xcc};
 char DATA_BUF;
 //==========================NRF905:10寄存器配置================================
 unsigned char  RFConf[11]=
 {
 WC,                                //SPI写操作命令
 0x4c,                             //CH_NO,配置频段在430MHZ
 0x0C,                             //输出功率为10db,不重发,节电为正常模式
 0x44,                             //地址宽度设置,为4字节
 0x20,0x20,                        //接收发送有效数据长度为32字节
 0xCC,0xCC,0xCC,0xCC,              //接收地址
 0x58,                              //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振
 };
 /*****************************************************************************
 系统初始化
 ******************************************************************************/
 void InitSys()
 {
 unsigned int iq0;
 _DINT();
 BCSCTL1 &=~XT2OFF;
 do
 {
 IFG1 &= ~OFIFG;                                                        // 清除振荡器失效标志
 for (iq0 = 0xFF; iq0 > 0; iq0--);        // 延时,等待XT2起振
 }
 while ((IFG1 & OFIFG) != 0);                // 判断XT2是否起振
 BCSCTL2 =SELM1+SELS;                      //MCLK,SMCLK时钟为XT2
 //???USART0
 }
 //===========================初始化nRF905=======================================
 void nRF905_IO_set(void)
 {
 P6DIR |= 0x07; P6DIR &= 0x8F;   P6SEL&=0x84;
 P2DIR |= 0xFF; P2DIR &= 0xFF;   P2SEL&=0xFF;
 P5DIR |= 0xC0; P5DIR |= 0xFB;   P5SEL&=0xF0;
 CSN_1;                                            // Spi         disable
 SCK_0;                                          // Spi clock line init low
 PWR_1;                                         // nRF905 power on
 TRX_CE_0;                                // Set nRF905 in standby mode
 TXEN_0;                                        // set radio in Rx mode
 }
 //==============================================================================
 void LED_IO_set(void)
 {
 //  P6DIR |= BIT2;P6OUT |= BIT2;              //关闭电平转换
 }
 //==========================延时================================================
 void Delay(uchar n)
 {
 uint i;
 while(n--)
 for(i=0;i<80;i++);
 }
 //=========================NRF905 SPI读函数(IO模拟SPI时序)==================
 unsigned char SpiRead(void)
 {
 unsigned char i;
 for (i=0;i<8;i++)
 {
 DATA_BUF=DATA_BUF<<1;
 SCK_1;
 if ((P5IN&0x04))        //读取最高位,保存至最末尾,通过左移位完成整个字节
 {
 DATA_BUF|=0x01;
 }
 else
 {
 DATA_BUF&=~(0x01);
 }
 SCK_0;
 }
 return DATA_BUF;
 }
 //=========================NRF905 SPI读写函数(IO模拟SPI时序)==================
 void SpiWrite(unsigned char send)
 {
 unsigned char i;
 DATA_BUF=send;
 for (i=0;i<8;i++)
 {
 if (((DATA_BUF&0x80) != 0))        //总是发送最高位
 {
 MOSI_1;
 }
 else
 {
 MOSI_0;
 }
 SCK_1;
 DATA_BUF=DATA_BUF<<1;
 SCK_0;
 }
 }
 
 //==================================初始化NRF905================================
 void Config905(void)
 {
 uchar i;
 CSN_0;                                                // Spi enable for write a spi command
 for (i=0;i<11;i++)        // Write configration words  写放配置字
 {
 SpiWrite(RFConf[i]);
 }
 CSN_1;                                        //关闭SPI
 }
 //=========================NRF905装载地址+数据打包+数据发送=====================
 void TxPacket(void)
 {
 uchar i;
 CSN_0;
 SpiWrite(WTP);                                // 待发数据装载命令
 for (i=0;i<32;i++)
 {
 SpiWrite(TxRxBuf[i]);
 }
 CSN_1;                                  // 关闭SPI
 Delay(1);
 CSN_0;                                        // 打开SPI
 SpiWrite(WTA);                                // 写入地址要和接收方地址一样
 for (i=0;i<4;i++)                        // 4字节地址
 {
 SpiWrite(TxAddress[i]);
 }
 CSN_1;                                        //关闭SPI
 TRX_CE_1;                                        // Set TRX_CE high,start Tx data transmission
 Delay(10);                                        // while (DR!=1);
 TRX_CE_0;                                        // Set TRX_CE low
 }
 //==================================发送模式初始化-=============================
 void SetTxMode(void)
 {
 TRX_CE_0;
 TXEN_1;
 Delay(1);                                         // Delay for mode change(>=650us)
 }
 //==================================数据发送===================================
 void TX(void)
 {
 SetTxMode();
 TxPacket();
 }
 //==================================主函数=====================================
 void main(void)
 {
 
 WDTCTL = WDTPW + WDTHOLD; //禁止看门狗
 InitSys();
 nRF905_IO_set();
 LED_IO_set();
 Config905();
 LED1_1 ; LED2_1 ;
 while(1)
 {
 TX();
 P2OUT=P6OUT;
 Delay(200); Delay(200); Delay(200);LED1_0 ;
 Delay(200); Delay(200); Delay(200); Delay(200); Delay(200); LED1_1;
 }
 }
 
 | 
 |