在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > RF1100SE單片機(jī)C8051F310程序

            RF1100SE單片機(jī)C8051F310程序

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

            void sysclk(void) //內(nèi)部晶振
            {
            OSCICL=0xb3; // 0xb3
            OSCICN=0xc2; //二分頻
            CLKSEL=0x00;
            }

            本文引用地址:http://www.biyoush.com/article/201611/324042.htm


            //延時(shí)子函數(shù)10us
            void delay(uint i)
            {
            while(i--);
            }


            uchar SPI_RW(uchar byte) //用SPI讀寫一字節(jié)的數(shù)據(jù)
            {
            uchar rbyte;
            SPI0DAT=byte;
            while(!SPIF);
            rbyte=SPI0DAT;
            SPIF=0;
            return rbyte;
            }

            void SPI_WR_Strobe(uchar strobe) //寫入濾波命令
            {
            CSN_LOW;
            while (MISO);
            SPI_RW(strobe);
            while(MISO);
            CSN_HIGH;
            }


            void POWER_UP_RESET_CC1100(void) //上電復(fù)位
            {
            CSN = 1;
            delay(10);
            CSN = 0;
            delay(10);
            CSN = 1;
            delay(500);
            SPI_WR_Strobe(SRES); //復(fù)位CC1100
            }

            uchar SPI_RW_Reg(uchar reg,uchar value) //向寄存器寫一字節(jié)的數(shù)據(jù),同時(shí)返回狀態(tài)字
            {
            uchar status;
            CSN_LOW;
            while(MISO);
            SPI0DAT=reg;
            while(!SPIF);
            status=SPI0DAT;
            SPIF=0;
            SPI0DAT=value;
            while(!SPIF);
            SPIF=0;
            CSN_HIGH;
            return(status);
            }


            uchar SPI_Read_Reg(uchar reg) //從寄存器讀出一字節(jié)的數(shù)據(jù)
            {
            uchar byte;
            CSN_LOW;
            while (MISO);
            SPI0DAT=reg|READ_SINGLE ;
            while(!SPIF);
            SPIF=0;
            SPI0DAT=0x00;
            while(!SPIF);
            byte=SPI0DAT;
            SPIF=0;
            CSN_HIGH;
            return byte;
            }


            uchar SPI_Read_Buf(uchar reg,uchar *pBuf,uchar bytes) //從reg讀出bytes字節(jié)的數(shù)據(jù)
            {
            uchar status,byte_ctr;
            CSN_LOW;
            while (MISO);
            status=SPI_RW(reg|READ_BURST);
            for(byte_ctr=0;byte_ctr pBuf[byte_ctr]=SPI_RW(0);
            CSN_HIGH;
            return status;
            }


            uchar SPI_RW_Buf(uchar reg,uchar *pBuf,uchar bytes) //向reg寫入bytes字節(jié)的數(shù)據(jù)
            {
            uchar status,byte_ctr;
            CSN_LOW;
            while (MISO);
            status=SPI_RW(reg|WRITE_BURST);
            for(byte_ctr=0;byte_ctr SPI_RW(pBuf[byte_ctr]);
            CSN_HIGH;
            return status;
            }

            //接收函數(shù),接收返回1表示有數(shù)據(jù)收到
            uchar RF1100CE_RxPacket(uchar *rx_buf,uchar *length)
            {
            ucharstatus[2];
            uchar packetLength;
            uchar i=(*length)*4; // 具體多少要根據(jù)datarate和length來決定

            SPI_WR_Strobe(SRX); //進(jìn)入接收模式指令
            delay(10);

            while (GDO0)
            {
            delay(10);
            --i;
            if(i<1)
            return 0;
            }

            if(SPI_Read_Reg(RXBYTES+READ_BURST) & BYTES_IN_RXFIFO) //如果接的字節(jié)數(shù)不為0
            {
            packetLength = SPI_Read_Reg(RX_FIFO);//讀出第一個(gè)字節(jié),此字節(jié)為該幀數(shù)據(jù)長度
            if (packetLength <= *length) //如果所要的有效數(shù)據(jù)長度小于等于接收到的數(shù)據(jù)包的長度
            {
            SPI_Read_Buf(RX_FIFO, rx_buf, packetLength); //讀出所有接收到的數(shù)據(jù)
            *length = packetLength; //把接收數(shù)據(jù)長度的修改為當(dāng)前數(shù)據(jù)的長度

            SPI_Read_Buf(RX_FIFO, status, 2); //讀出CRC校驗(yàn)位
            SPI_WR_Strobe(SFRX); //清洗接收緩沖區(qū)
            return (status[1] & CRC_OK); //如果校驗(yàn)成功返回接收成功
            }
            else
            {
            *length = packetLength;
            SPI_WR_Strobe(SFRX); //清洗接收緩沖區(qū)
            return 0;
            }
            }
            else
            return 0;
            }

            //發(fā)送函數(shù)
            void RF1100CE_TxPacket(uchar *tx_buf,uchar size)
            {
            SPI_RW_Reg(TX_FIFO, size);
            SPI_RW_Buf(TX_FIFO, tx_buf, size); //寫入要發(fā)送的數(shù)據(jù)


            SPI_WR_Strobe(STX); //進(jìn)入發(fā)送模式發(fā)送數(shù)據(jù)

            while (!GDO0);
            while (GDO0);

            SPI_WR_Strobe(SFTX); //清除發(fā)送緩沖寄存器
            SPI_WR_Strobe(SIDLE);//進(jìn)入休眠模式
            }

            void RF1100CE_Config(void) //RF1100CE的配置函數(shù)
            {
            CSN_HIGH;//SPI復(fù)位

            SPI_RW_Reg(FSCTRL1, 0x08);//頻率合成器控制
            SPI_RW_Reg(FSCTRL0, 0x00);
            SPI_RW_Reg(FREQ2, 0x10);//頻率控制詞匯
            SPI_RW_Reg(FREQ1, 0xa7);
            SPI_RW_Reg(FREQ0, 0x62);
            SPI_RW_Reg(MDMCFG4, 0x5b);//調(diào)制器配置
            SPI_RW_Reg(MDMCFG3, 0xf8);
            SPI_RW_Reg(MDMCFG2, 0x03);
            SPI_RW_Reg(MDMCFG1, 0x22);
            SPI_RW_Reg(MDMCFG0, 0xf8);

            SPI_RW_Reg(CHANNR, 0x00);//信道數(shù)
            SPI_RW_Reg(DEVIATN, 0x47);
            SPI_RW_Reg(FREND1, 0xb6);
            SPI_RW_Reg(FREND0, 0x10);
            SPI_RW_Reg(MCSM0, 0x18);
            SPI_RW_Reg(FOCCFG, 0x1d);
            SPI_RW_Reg(BSCFG, 0x1c);
            SPI_RW_Reg(AGCTRL2, 0xc7);
            SPI_RW_Reg(AGCTRL1, 0x00);
            SPI_RW_Reg(AGCTRL0, 0xb2);

            SPI_RW_Reg(FSCAL3, 0xea);//頻率合成器校準(zhǔn)
            SPI_RW_Reg(FSCAL2, 0x2a);
            SPI_RW_Reg(FSCAL1, 0x00);
            SPI_RW_Reg(FSCAL0, 0x11);
            SPI_RW_Reg(FSTEST, 0x59);//產(chǎn)品測(cè)試
            SPI_RW_Reg(TEST2, 0x81);//不同的測(cè)試設(shè)置
            SPI_RW_Reg(TEST1, 0x35);
            SPI_RW_Reg(TEST0, 0x09);
            SPI_RW_Reg(IOCFG2, 0x0b);
            SPI_RW_Reg(IOCFG0, 0x06);//GDO輸出腳配置

            SPI_RW_Reg(PKTCTRL1, 0x04);//數(shù)據(jù)包自動(dòng)控制,無地址檢測(cè),包含兩個(gè)狀態(tài)字節(jié)
            SPI_RW_Reg(PKTCTRL0, 0x05);//開啟CC2400支持,采用可變長度數(shù)據(jù)包
            SPI_RW_Reg(ADDR, 0x00);//設(shè)置地址
            SPI_RW_Reg(PKTLEN, 0x10);//有效允許最大數(shù)據(jù)包長度16個(gè)字節(jié)

            SPI_WR_Strobe(SFRX);
            SPI_WR_Strobe(SFTX);
            SPI_WR_Strobe(SIDLE);

            }


            void SPI(void) //SPI初始化
            {
            SPI0CFG=0x40; //時(shí)鐘極性為低,即剛開始時(shí)鐘要為低電平
            SPI0CN=0x01; //0000 0001最后一位是SPI使能位 SPI工作在三線主方式
            SPI0CKR=0x2f; //SPI時(shí)鐘頻率設(shè)置為150kHz 0x6f 0x2f
            }

            void Interrupt_int(void) //中斷設(shè)定
            {
            IE=0x40; //允許SPI中斷請(qǐng)求
            IP=0x00; //SPI為低優(yōu)先級(jí)
            }

            void pio(void) // 端口配置
            {
            P0MDIN=0xff; //禁止模擬輸入,0為模擬,1為數(shù)字
            P0MDOUT=0xff; //0為開漏,1為推挽(ff)
            P0SKIP=0x00;

            P1MDIN=0xff;
            P1MDOUT=0xff; //低四位用于138


            P2MDIN=0xff; //禁止模擬輸入,0為模擬,1為數(shù)字
            P2MDOUT=0xff; //0為開漏,1為推挽(ff)

            P3MDIN=0xff;
            P3MDOUT=0xff; //低四位用于138

            XBR0=0x02;
            XBR1=0x40;

            }


            上一頁 1 2 下一頁

            關(guān)鍵詞: RF1100SE單片機(jī)C8051F31

            評(píng)論


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

            關(guān)閉