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

<s id="cmphk"><label id="cmphk"></label></s>
    <span id="cmphk"><var id="cmphk"></var></span>
    <dfn id="cmphk"><var id="cmphk"></var></dfn>
    <menu id="cmphk"><thead id="cmphk"></thead></menu>

    <address id="cmphk"></address>

      <dfn id="cmphk"></dfn>
      
      
      <span id="cmphk"></span>

      <object id="cmphk"><tt id="cmphk"></tt></object>
      1. 新聞中心

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

        NRF24L01接收程序(單片機(jī)是STC89C52)

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

        #include
        typedefunsigned int uint;
        typedefunsigned char uchar;

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

        #define TX_ADDR_WITDH 5//發(fā)送地址寬度設(shè)置為5個(gè)字節(jié)
        #define RX_ADDR_WITDH 5
        #define TX_DATA_WITDH 8
        #define RX_DATA_WITDH 8

        #define R_REGISTER0x00// 讀寄存器
        #define W_REGISTER0x20// 寫(xiě)寄存器
        #define R_RX_PLOAD0x61// 讀RX FIFO有效數(shù)據(jù),1-32字節(jié),當(dāng)讀數(shù)據(jù)完成后,數(shù)據(jù)被清除,應(yīng)用于接收模式
        #define W_TX_PLOAD0xA0// 寫(xiě)TX FIFO有效數(shù)據(jù),1-32字節(jié),寫(xiě)操作從字節(jié)0開(kāi)始,應(yīng)用于發(fā)射模式
        #define FLUSH_TX0xE1// 清除TX FIFO寄存器,應(yīng)用于發(fā)射模式
        #define FLUSH_RX0xE2// 清除RX FIFO寄存器,應(yīng)用于接收模式
        #define REUSE_TX_PL 0xE3// 重新使用上一包有效數(shù)據(jù),當(dāng)CE為高過(guò)程中,數(shù)據(jù)包被不斷的重新發(fā)射
        #define NOP0xFF// 空操作,可以用來(lái)讀狀態(tài)寄存器

        #define CONFIG0x00// 配置寄存器
        #define EN_AA0x01// “自動(dòng)應(yīng)答”功能寄存器
        #define EN_RX_ADDR0x02// 接收通道使能寄存器
        #define SETUP_AW0x03// 地址寬度設(shè)置寄存器
        #define SETUP_RETR0x04// 自動(dòng)重發(fā)設(shè)置寄存器
        #define RF_CH0x05// 射頻通道頻率設(shè)置寄存器
        #define RF_SETUP0x06// 射頻設(shè)置寄存器
        #define STATUS0x07// 狀態(tài)寄存器
        #define OBSERVE_TX0x08// 發(fā)送檢測(cè)寄存器
        #define CD0x09// 載波檢測(cè)寄存器
        #define RX_ADDR_P00x0A// 數(shù)據(jù)通道0接收地址寄存器
        #define RX_ADDR_P10x0B// 數(shù)據(jù)通道1接收地址寄存器
        #define RX_ADDR_P20x0C// 數(shù)據(jù)通道2接收地址寄存器
        #define RX_ADDR_P30x0D// 數(shù)據(jù)通道3接收地址寄存器
        #define RX_ADDR_P40x0E// 數(shù)據(jù)通道4接收地址寄存器
        #define RX_ADDR_P50x0F// 數(shù)據(jù)通道5接收地址寄存器
        #define TX_ADDR0x10// 發(fā)送地址寄存器
        #define RX_PW_P00x11// 數(shù)據(jù)通道0有效數(shù)據(jù)寬度設(shè)置寄存器
        #define RX_PW_P10x12// 數(shù)據(jù)通道1有效數(shù)據(jù)寬度設(shè)置寄存器
        #define RX_PW_P20x13// 數(shù)據(jù)通道2有效數(shù)據(jù)寬度設(shè)置寄存器
        #define RX_PW_P30x14// 數(shù)據(jù)通道3有效數(shù)據(jù)寬度設(shè)置寄存器
        #define RX_PW_P40x15// 數(shù)據(jù)通道4有效數(shù)據(jù)寬度設(shè)置寄存器
        #define RX_PW_P50x16// 數(shù)據(jù)通道5有效數(shù)據(jù)寬度設(shè)置寄存器
        #define FIFO_STATUS 0x17// FIFO狀態(tài)寄存器
        //*********************************************************************************
        ucharsta;// 狀態(tài)變量
        #define RX_DR(sta & 0x40)// 接收成功中斷標(biāo)志
        #define TX_DS(sta & 0x20)// 發(fā)射成功中斷標(biāo)志
        #define MAX_RT (sta & 0x10)// 重發(fā)溢出中斷標(biāo)志

        sbit CE=P1^5;
        sbit IRQ=P1^0;
        sbit CSN=P1^4;
        sbit MOSI=P1^2;
        sbit MISO=P1^1;
        sbit SCK=P1^3;
        sbit LED=P0^0;

        uchar code TX_Addr[]={0x34,0x43,0x10,0x10,0x01};
        uchar code TX_Buffer[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};
        uchar RX_Buffer[RX_DATA_WITDH];

        void _delay_us(uint x)
        {
        uint i,j;
        for (j=0;jfor (i=0;i<12;i++);
        }

        void _delay_ms(uint x)
        {
        uint i,j;
        for (j=0;jfor (i=0;i<120;i++);
        }
        void nRF24L01_Init(void)
        {
        _delay_us(2000);
        CE=0;
        CSN=1;
        SCK=0;
        IRQ=1;
        }

        uchar SPI_RW(uchar byte)
        {
        uchar i;
        for(i=0;i<8;i++)
        {
        if(byte&0x80)
        MOSI=1;
        else
        MOSI=0;
        byte<<=1;
        SCK=1;
        if(MISO)
        byte|=0x01;
        SCK=0;
        }
        return byte;
        }

        uchar SPI_W_Reg(uchar reg,uchar value)
        {
        uchar status;
        CSN=0;
        status=SPI_RW(reg);
        SPI_RW(value);
        CSN=1;
        return status;
        }

        uchar SPI_R_byte(uchar reg)
        {
        uchar status;
        CSN=0;
        SPI_RW(reg);
        status=SPI_RW(0);
        CSN=1;
        return status;
        }

        uchar SPI_R_DBuffer(uchar reg,uchar *Dat_Buffer,uchar Dlen)
        {
        uchar reg_value,i;
        CSN=0;
        reg_value=SPI_RW(reg);
        for(i=0;i{
        Dat_Buffer[i]=SPI_RW(0);
        }
        CSN=1;
        return reg_value;
        }

        uchar SPI_W_DBuffer(uchar reg,uchar *TX_Dat_Buffer,uchar Dlen)
        {
        uchar reg_value,i;
        CSN=0;
        reg_value=SPI_RW(reg);
        for(i=0;i{
        SPI_RW(TX_Dat_Buffer[i]);
        }
        CSN=1;
        return reg_value;
        }

        void nRF24L01_Set_RX_Mode(void)
        {
        CE=0;//待機(jī)
        SPI_W_DBuffer(W_REGISTER+TX_ADDR,TX_Addr,TX_ADDR_WITDH);
        SPI_W_DBuffer(W_REGISTER+RX_ADDR_P0,TX_Addr,TX_ADDR_WITDH);
        SPI_W_Reg(W_REGISTER+EN_AA,0x01);//auot ack
        SPI_W_Reg(W_REGISTER+EN_RX_ADDR,0x01);
        SPI_W_Reg(W_REGISTER+SETUP_RETR,0x0a);
        SPI_W_Reg(W_REGISTER+RX_PW_P0,RX_DATA_WITDH);
        SPI_W_Reg(W_REGISTER+RF_CH,0);
        SPI_W_Reg(W_REGISTER+RF_SETUP,0x07);//0db,lna
        SPI_W_Reg(W_REGISTER+CONFIG,0x0f);

        CE=1;
        _delay_ms(5);
        }

        uchar nRF24L01_RX_Data(void)
        {
        sta=SPI_R_byte(R_REGISTER+STATUS);
        if(RX_DR)
        {
        CE=0;
        SPI_R_DBuffer(R_RX_PLOAD,RX_Buffer,RX_DATA_WITDH);
        SPI_W_Reg(W_REGISTER+STATUS,0xff);
        CSN=0;
        SPI_RW(FLUSH_RX);
        CSN=1;
        return 1;
        }
        else
        return 0;

        }


        void main(void)
        {
        uchar i;
        P0=0xff;
        P1=0xff;
        P2=0xff;
        P3=0xff;
        _delay_us(1000);
        nRF24L01_Init();
        while(1)
        {
        nRF24L01_Set_RX_Mode();
        _delay_ms(100);
        if(nRF24L01_RX_Data())
        {
        LED=0;//如果有數(shù)據(jù)收到燈亮
        }
        else//否則燈熄
        LED=1;
        }
        }



        評(píng)論


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

        關(guān)閉
        ×

        “芯”朋友见面大会
        珠海|11.14|泰克“芯”朋友见面大会珠海站|泰克带您从测试角度看半导体的整条产业链,快来报名抢位吧>>