在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,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首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > C8051F的nRF24L01 PTR6000無(wú)線收發(fā)

            C8051F的nRF24L01 PTR6000無(wú)線收發(fā)

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

            void nRF24L01_Config() //nRF24L01的配置函數(shù)
            {
            CE_LOW;//芯片使能

            CSN_HIGH;//SPI復(fù)位

            SPI_RW_Reg(WRITE_REG+CONFIG,0X0F); //使能發(fā)送模式
            SPI_Read(CONFIG);
            SPI_RW_Reg(WRITE_REG+EN_AA,0X01);//數(shù)據(jù)通道0自動(dòng)應(yīng)答
            SPI_Read(EN_AA);
            SPI_RW_Reg(WRITE_REG+EN_RXADDR,0X01); //通道0允許
            SPI_RW_Reg(WRITE_REG+SETUP_AW,0X02); //設(shè)置地址寬度為4字節(jié)
            SPI_RW_Reg(WRITE_REG+SETUP_RETR,0X1A);//建立自動(dòng)重發(fā),500+86us,10次重發(fā)
            SPI_RW_Reg(WRITE_REG+RF_CH,0x02);//設(shè)置工作通道頻率
            SPI_RW_Reg(WRITE_REG+RF_SETUP,0X07);//設(shè)置工作通道傳輸速率為1Mbps,發(fā)射功率為0dBm
            SPI_RW_Reg(WRITE_REG+RX_PW_P0,RX_PLOAD_WIDTH); //設(shè)置通道0有效數(shù)據(jù)寬度RX_PLOAD_WIDTH

            }


            void SPI(void) //SPI初始化
            {
            SPI0CFG=0x40;
            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;

            //P0=0xff;
            }

            void sysclk(void);
            void pio(void);
            void SPI(void);
            void Interrupt_int(void);
            void delay(uint i);
            void dat_int(void);

            void main(void) //主程序
            {
            PCA0MD &= ~0x40;// 關(guān)閉看門狗
            pio();
            sysclk();
            SPI(); //SPI0DAT是SPI的數(shù)據(jù)寄存器
            Interrupt_int();
            EA=0;
            dat_int();
            nRF24L01_Config(); // nRF24L01的配置函數(shù)


            while(1)
            {
            //nRF24L01_RxPacket(rx_buf);

            nRF24L01_TxPacket(shuzu); //發(fā)送函數(shù)

            sta=SPI_Read(READ_REG+STATUS); //發(fā)送程序復(fù)位
            if(sta&0x20)
            {
            c=1;
            SPI_RW_Reg(WRITE_REG+STATUS,sta);

            CSN_LOW; //清除發(fā)送寄存器的值
            SPI_RW(FLUSH_TX);
            CSN_HIGH;
            }

            delay(10000);
            break;
            }

            while(1)
            {nRF24L01_RxPacket(rx_buf);
            P1=rx_buf[3];
            delay(10000);
            }
            }


            與發(fā)送部分差不多

            ****************接收部分*******************

            #include
            #include
            #include
            #include
            #include

            #define uint unsigned int
            #define uchar unsigned char
            //nRF24L01的數(shù)據(jù)寬度,地址寬度,以及數(shù)據(jù)定義
            #define TX_ADR_WIDTH 4 //地址數(shù)據(jù)
            #define RX_PLOAD_WIDTH 4 //接收的有效數(shù)據(jù)寬度
            #define TX_PLOAD_WIDTH 4 //發(fā)送的有效數(shù)據(jù)寬度
            #define BUSY SPI0CFG&0x80

            uchar TX_ADDRESS[]={0xe7,0xe7,0xe7,0xe7}; //傳送接收端地址
            uchar tx_buf[4]={0x99,0x99,0x88,0x88}; //要發(fā)送的有效數(shù)據(jù)
            uchar rx_buf[4]={0x00,0x00,0x00,0x00}; //接收的數(shù)據(jù)緩存
            uchar a,b,i;
            ucharsta;

            //引腳定義2274
            #define CSN_HIGH CSN=1
            #define CSN_LOW CSN=0
            #define CE_HIGH CE=1
            #define CE_LOW CE=0

            sbit CE=P0^5;
            sbit CSN=P0^6;
            sbit IRQ=P0^4;
            sbit c=P0^7;

            //24L01寄存器地址
            #define CONFIG 0X00//配置寄存器地址
            #define EN_AA 0X01//自動(dòng)應(yīng)答寄存器地址
            #define EN_RXADDR 0X02//接收地址使能
            #define SETUP_AW 0X03//設(shè)置地址寬度
            #define SETUP_RETR 0X04//建立自動(dòng)重發(fā)
            #define RF_CH 0X05//射頻通道
            #define RF_SETUP 0X06//射頻寄存器
            #define STATUS 0X07//狀態(tài)寄存器
            #define OBSERVE_TX 0X08//發(fā)送檢測(cè)寄存器
            #define CD 0X09//載波檢測(cè)
            #define RX_ADDR_P0 0X0A//數(shù)據(jù)通道0接收地址
            #define RX_ADDR_P1 0X0B
            #define RX_ADDR_P2 0X0C
            #define RX_ADDR_P3 0X0D
            #define RX_ADDR_P4 0X0E
            #define RX_ADDR_P5 0X0F
            #define TX_ADDR 0X10//發(fā)送地址寄存器地址
            #define RX_PW_P0 0X11//接收地址通道0有效數(shù)據(jù)寬度
            #define RX_PW_P1 0X12
            #define RX_PW_P2 0X13
            #define RX_PW_P3 0X14
            #define RX_PW_P4 0X15
            #define RX_PW_P5 0X16
            #define FIFO_STATUS 0X17//FIFO狀態(tài)寄存器
            //SPI命令字
            #define READ_REG 0X00//讀寄存器命令
            #define WRITE_REG 0X20//寫寄存器命令
            #define RD_RX_PLOAD 0X61//讀有效數(shù)據(jù)命令
            #define WR_TX_PLOAD 0XA0//寫有效數(shù)據(jù)命令
            #define FLUSH_TX 0XE1//清除TX_FIFO應(yīng)用于發(fā)射模式
            #define FLUSH_RX 0XE2//清除RX_FIFO應(yīng)用于接收模式
            #define REUSE_TX_PL 0XE3//重新使用上一包有效數(shù)據(jù)
            #define NOP 0XFF//空操作指令

            void dat_int(void)
            {
            CSN_HIGH;
            CE_LOW;
            a=0;
            c=0;
            }


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

            //延時(shí)子函數(shù)us
            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;
            delay(15);
            return rbyte;
            }


            uchar SPI_RW_Reg(uchar reg,uchar value) //向寄存器寫一字節(jié)的數(shù)據(jù),同時(shí)返回狀態(tài)字
            {
            uchar status;
            CSN_LOW;

            SPI0DAT=reg;
            while(!SPIF);
            delay(20);
            status=SPI0DAT;
            SPIF=0;
            SPI0DAT=value;
            while(!SPIF);
            SPIF=0;

            CSN_HIGH;
            return(status);
            }


            uchar SPI_Read(uchar reg) //從寄存器讀出一字節(jié)的數(shù)據(jù)
            {
            uchar byte;
            CSN_LOW;

            SPI0DAT=reg;
            while(!SPIF);
            delay(20);
            SPI0DAT=0x00;
            SPIF=0;
            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;

            status=SPI_RW(reg);
            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;

            status=SPI_RW(reg);
            for(byte_ctr=0;byte_ctr SPI_RW(*pBuf++);

            CSN_HIGH;
            return(status);
            }



            評(píng)論


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

            關(guān)閉