新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用89C51驅(qū)動(dòng)nRf905收發(fā)C源代碼

        用89C51驅(qū)動(dòng)nRf905收發(fā)C源代碼

        作者: 時(shí)間:2016-12-01 來源:網(wǎng)絡(luò) 收藏

        /*******************************************************************************************/
        //function SpiWrite();
        /*******************************************************************************************/
        void SpiWrite(uchar byte)
        {
        uchar i;
        DATA_BUF=byte; // Put functions parameter into a bdata variable
        for (i=0;i<8;i++) // Setup byte circulation bits
        {

        if (flag) // Put DATA_BUF.7 ondataline
        MOSI=1;
        else
        MOSI=0;
        SCK=1; // Set clock line high
        DATA_BUF=DATA_BUF<<1; // Shift DATA_BUF
        SCK=0; // Set clocklinelow
        }
        }
        /*******************************************************************************************/
        //function SpiRead();
        /*******************************************************************************************/
        uchar SpiRead(void)
        {
        uchar i;
        for (i=0;i<8;i++) // Setup byte circulation bits
        {
        DATA_BUF=DATA_BUF<<1; // Right shift DATA_BUF
        SCK=1; // Set clock line high
        if (MISO)
        flag1=1; // Readdata
        else
        flag1=0;


        SCK=0; // Set clocklinelow
        }
        return DATA_BUF; // Return function parameter
        }
        /*******************************************************************************************/
        //function TxPacket();
        /*******************************************************************************************/
        void TxPacket(void)
        {
        uchar i;
        //Config905();
        CSN=0; // Spi enable for write a spi command
        SpiWrite(WTP); // Write payload command
        for (i=0;i<32;i++)
        {
        SpiWrite(TxBuf[i]); // Write 32 bytes Txdata
        }
        CSN=1; // Spi disable
        Delay(1);
        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(RxTxConf.buf[i+5]);
        }
        CSN=1; // Spi disable
        TRX_CE=1; // Set TRX_CE high,start Txdatatransmission
        Delay(1); // while (DR!=1);
        TRX_CE=0; // Set TRX_CElow
        }
        /*******************************************************************************************/
        //function RxPacket();
        /*******************************************************************************************/
        void RxPacket(void)
        {
        uchar i,xx;
        TRX_CE=0; // Set nRF905 in standby mode
        CSN=0; // Spi enable for write a spi command
        SpiWrite(RRP); // Read payload command
        for (i=0;i<32;i++)
        {
        RxBuf[i]=SpiRead(); // Readdataand save to buffer
        }
        CSN=1; // Disable spi
        while(DR||AM);
        P0= RxBuf[0]; // Buffer[0] outputfromP0 port...
        TRX_CE=1;
        xx=(RxBuf[0]>>4)&0x0f;
        TxData(xx);
        Delay(500); // ...lightled
        P0=0xff; // Close led
        }
        /*******************************************************************************************/
        //function SetTxMode();
        /*******************************************************************************************/
        void SetTxMode(void)
        {
        TX_EN=1;
        TRX_CE=0;
        Delay(1); // delay for mode change(>=650us)
        }
        /*******************************************************************************************/
        //function SetRxMode();
        /*******************************************************************************************/
        void SetRxMode(void)
        {
        TX_EN=0;
        TRX_CE=1;
        Delay(1); // delay for mode change(>=650us)
        }
        /*******************************************************************************************/
        //Functon Scankey();
        /*******************************************************************************************/
        void Scankey()
        {
        uchar Temp,xx;
        P0=0xff;
        Temp=P0&0x0f; // Read key value from port P0
        if (Temp!=0x0f)
        { Delay(10);
        Temp=P0&0x0f; // Read key valuefromport P0
        if (Temp!=0x0f)
        {
        xx=Temp;
        Temp=Temp<<4; // Left shift 4 bits
        TxBuf[0]=Temp; // Turn On the LED
        P0=Temp; // Save to Tx buffer[0]
        SetTxMode(); // Set Tx Mode
        TxPacket(); // Transmit Tx bufferdata
        TxData (xx);
        Delay(500); // Delay for LEDlight
        P0=0xff; // Close LED display
        SetRxMode(); // Set Rx Mode

        while((P0&0x0f)!=0x0f);
        }
        }
        }
        /*******************************************************************************************/
        //Function TxData ();
        /*******************************************************************************************/
        void TxData (uchar x)
        {
        SBUF=x;
        while(TI==0);
        TI=0;

        }
        /*******************************************************************************************/

        上一頁 1 2 下一頁

        關(guān)鍵詞: 89C51nRf905收

        評(píng)論


        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 寿阳县| 阜阳市| 荣成市| 那曲县| 北票市| 永城市| 金昌市| 外汇| 寻乌县| 康马县| 苏州市| 肥城市| 临武县| 清丰县| 山东省| 盘山县| 宁化县| 闵行区| 五台县| 特克斯县| 兴海县| 醴陵市| 德化县| 渭源县| 新泰市| 斗六市| 鹿邑县| 军事| 大余县| 拜城县| 正镶白旗| 广州市| 汉阴县| 永定县| 万源市| 衡水市| 赤峰市| 泰安市| 鄄城县| 谷城县| 安陆市|