无线发射程序.docx

上传人:b****3 文档编号:4654681 上传时间:2022-12-07 格式:DOCX 页数:7 大小:16.59KB
下载 相关 举报
无线发射程序.docx_第1页
第1页 / 共7页
无线发射程序.docx_第2页
第2页 / 共7页
无线发射程序.docx_第3页
第3页 / 共7页
无线发射程序.docx_第4页
第4页 / 共7页
无线发射程序.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

无线发射程序.docx

《无线发射程序.docx》由会员分享,可在线阅读,更多相关《无线发射程序.docx(7页珍藏版)》请在冰豆网上搜索。

无线发射程序.docx

无线发射程序

无线发射

#include

#include

#include

#include

//----------------------------------------------------------------------------------------------------------------

#defineuintunsignedint

#defineucharunsignedchar

//----------------------------------------------------------------------------------------------------------------

#defineBYTE_BIT0    0x01

#defineBYTE_BIT7    0x80

//----------------------------------------------------------------------------------------------------------------

bdataunsigned  charDATA_BUF;

#defineDATA7    ((DATA_BUF&BYTE_BIT7)!

=0)

#defineDATA0  ((DATA_BUF&BYTE_BIT0)!

=0)

sbit    flag    =DATA_BUF^7;

sbit    flag1    =DATA_BUF^0;

//---------------------------------------------------发送数据缓冲区-------------------------------------------------

#defineTxRxBuf_Len4

unsignedcharTxRxBuf[TxRxBuf_Len]={0x29,0x30,0x31,0x32,};

codeTxAddress[4]={0xcc,0xcc,0xcc,0xcc};

chartf;

//----------------------------------------NRF905工作模式控制端口------------------------------------------------------

sbit    TXEN=P1^4;

sbit    TRX_CE=P3^2;

sbit    PWR=P1^3;

//----------------------------------------LED显示端口---------------------------------------------------

sbit  LED=P3^5;

//----------------------------------------NRF905数据交换端口---------------------------------------------------

sbit    MISO=P1^6;

sbit    MOSI=P1^1;

sbit    SCK=P1^5;

sbit    CSN=P1^0;

//----------------------------------------nrf905状态端口---------------------------------------------------------

sbit    AM=P1^7;

sbit    DR=P3^3;

sbit    CD=P1^2;

//---------------------------------------------------------------------------------------------------------------

sbit    led3=P2^0;

sbit    led2=P2^1;

sbit    led1=P2^2;

sbit    led0=P2^3;

//----------------------------------------按键端口-------------------------------------------------------

sbit    KEY=P3^4;

//----------------------------------------nrf905控制指令-------------------------------------------

#defineWC        0x00

#defineRC        0x10

#defineWTP        0x20

#defineRTP        0x21

#defineWTA        0x22

#defineRTA        0x23

#defineRRP        0x24

//------------------------------------------------NRF905寄存器配置------------------------------------------------

unsignedcharidataRFConf[11]=

{

  0x00,                    //配置命令//

  0x4c,                    //CH_NO,配置频段在430MHZ

  0x0c,                    //输出功率为10db,不重发,节电为正常模式

  0x44,                    //地址宽度设置,为4字节

  0x04,0x04,                //接收发送有效数据长度为4字节

  0xCC,0xCC,0xCC,0xCC,          //接收地址

  0x58,                    //CRC充许,8位CRC校验,外部时钟信号不使能,16M晶振

};

//================================================延时===========================================================

voidnrf905_Delay(intn)

{

    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;

        }

        else

        {

            MOSI=0;

        }

        SCK=1;

        DATA_BUF=DATA_BUF<<1;

        SCK=0;

    }

}

//------------------------------------------------------初始化nRF905---------------------------------------------

voidnRF905Init(void)

{

  CSN=1;                        //Spi    disable

    SCK=0;                        //Spiclocklineinitlow

    DR=1;                        //InitDRforinput

    AM=1;                        //InitAMforinput

    CD=1;                        //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

}

//-----------------------------------------------------发送数据打包---------------------------------------------------

voidTxPacket(uchar*TxRxBuf)

{

    uchari;

    //Config905();

    CSN=0;

    SpiWrite(WTP);                //Writepayloadcommand

    for(i=0;i<4;i++)

    {

        SpiWrite(TxRxBuf[i]);        //Write32bytesTxdata

    }

    CSN=1;

    nrf905_Delay

(1);                        //Spidisable

    CSN=0;                        //Spienableforwriteaspicommand

    SpiWrite(WTA);                //Writeaddresscommand

    for(i=0;i<4;i++)            //写入与对方地址一样的地址

    {

        SpiWrite(TxAddress[i]);

    }

    CSN=1;                        //Spidisable

    TRX_CE=1;                    //SetTRX_CEhigh,startTxdatatransmission

    nrf905_Delay

(1);                    //while(DR!

=1);

    TRX_CE=0;                    //SetTRX_CElow

}

//----------------------------------------------设置发送初始状态---------------------------------------------

voidSetTxMode(void)

{

    TRX_CE=0;

    TXEN=1;

    nrf905_Delay

(1);                    //nrf905_Delayformodechange(>=650us)

}

//-----------------------------------------------设置接收初始化---------------------------------------------------

voidSetRxMode(void)

{

    TXEN=0;

    TRX_CE=1;

    nrf905_Delay

(1);                    //nrf905_Delayformodechange(>=650us)

}

//-------------------------------------------------判断数据接收状态-----------------------------------------------------

unsignedcharCheckDR(void)        //检查是否有新数据传入DataReady

{

    DR=1;    

//通过对端口写1,可以使端口为输入状态,这51的特性。

不熟悉者可以参阅51相关书籍作证(将DR端口设置为输入状态。

    if(DR==1)

    {

        DR=0;

        return1;

    }

    else

    {

        return0;

    }

}

//----------------------------------------------------读NRF905接收数据------------------------------------------------------------

voidRxPacket(void)                        

{

    uchari;

  nrf905_Delay

(1);

//    TRX_CE=0;                    //SetnRF905instandbymode

  nrf905_Delay(100);

  TRX_CE=0;

    CSN=0;                        //Spienableforwriteaspicommand

  nrf905_Delay

(1);

    SpiWrite(RRP);

    for(i=0;i<4;i++)

    {

        TxRxBuf[i]=SpiRead();        //Readdataandsavetobuffer    

    }

    CSN=1;

  nrf905_Delay(10);

    TRX_CE=1;                            

}

//--------------------------------------------------------数据接收------------------------------------------------

void  RX(void)

{

      SetRxMode();    

      //  while(CheckDR()==0);  为了实现双向通信,就不能一直处于接收等待状态,所以注释掉

          nrf905_Delay(10);

            RxPacket();

          if(TxRxBuf[0]==0x29)

          {

                  LED=0;

                nrf905_Delay(300);

                LED=1;

                nrf905_Delay(300);//接收到数据后闪烁

          }

}

//-----------------------------------------------------------------------------------------------------------------

voidmain(void)

{

      nRF905Init();

        Config905();

        LED=1;

      while

(1)

        {

            RX();

          if(KEY==0)

              {    

                  while(KEY==0);

                tf=1;

                TxRxBuf[0]=0x29;

                  }

          

          if(tf==1)

            {

          SetTxMode();

                TxPacket(TxRxBuf);    //发送命令数据

                  LED=0;

                nrf905_Delay(300);

                LED=1;

                nrf905_Delay(300);            //发送后LED闪烁

 

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

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1