新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > A7105(2.4G)與STC89C52單片機無線收發(fā)程序(接收程序)

        A7105(2.4G)與STC89C52單片機無線收發(fā)程序(接收程序)

        作者: 時間:2016-11-27 來源:網(wǎng)絡 收藏

        //設置為接收模式
        void A7105_Entry_RX(void)
        {
        A7105_Write_Command(CMD_RX);
        }
        //設置為發(fā)射模式
        void A7105_Entry_TX(void)
        {
        A7105_Write_Command(CMD_TX);
        }
        //復位A7105
        void A7105_Reset_Chip(void)
        {
        A7105_Write_Register(MODE_REG,0x00);
        }

        void A7105_Reset_RX_FIFO(void)
        {
        A7105_Write_Command(CMD_RX_FIFO_RESET);
        }

        void A7105_Reset_TX_FIFO(void)
        {
        A7105_Write_Command(CMD_TX_FIFO_RESET);
        }
        //寫寄存器
        void Write_Register(uchar bits,uchar value)
        {
        uchar i;
        for(i=0;i{
        if(value&0x80)
        SDIO=1;
        else
        SDIO=0;
        SCK=1;

        SCK=0;
        value<<=0x01;
        }
        }
        //讀寄存器
        uchar Read_Register(void)
        {
        uchar i,temp=0;
        SDIO=1;
        for(i=0;i<8;i++)
        {
        if(SDIO)
        temp=(temp<<1)|0x01;
        else
        temp<<=0x01;
        SCK=1;
        SCK=0;
        }
        return temp;
        }
        //A7105寫指令
        void A7105_Write_Command(uchar cmd)
        {
        SCS=0;
        Write_Register(0x04,cmd);
        SCS=1;
        }
        //A7105寫數(shù)據(jù)
        void A7105_Write_Register(uchar addr,uchar value)
        {
        SCS=0;
        addr|=0x00;
        Write_Register(0x08,addr);
        Write_Register(0x08,value);
        SCS=1;
        }
        //A7105讀數(shù)據(jù)
        uchar A7105_Read_Register(uchar addr)
        {
        uchar temp=0;
        SCS=0;
        addr|=0x40;
        Write_Register(0x08,addr);
        temp=Read_Register();
        SCS=1;
        return temp;
        }
        //A7105寫ID
        void A7105_Write_ID(void)
        {
        SCS=0;
        Write_Register(0x08,ID_DATA_REG);

        Write_Register(0x08,ID_CODE0);
        Write_Register(0x08,ID_CODE1);
        Write_Register(0x08,ID_CODE2);
        Write_Register(0x08,ID_CODE3);
        SCS=1;

        A7105_Read_ID(Read_ID);
        }
        //A7105讀ID
        void A7105_Read_ID(uchar *read_prt)
        {
        SCS=0;
        Write_Register(0x08,(ID_DATA_REG|0x40));
        SDIO=1;
        *read_prt++=Read_Register();
        *read_prt++=Read_Register();
        *read_prt++=Read_Register();
        *read_prt++=Read_Register();
        SCS=1;
        }

        //A7105從FIFO讀取數(shù)據(jù)
        void A7105_Read_DATA_From_FIFO(void)
        {
        uchar i,temp=0;
        SCS=0;
        Write_Register(0x08,FIFO_DATA_REG|0x40);
        for(i=0;iRX_DATA_Buffer[i]=Read_Register();
        SCS=1;
        }

        //A7105校準
        void A7105_Calibration(void)
        {
        uchar temp;
        uchar fb,fbcf;
        A7105_Entry_Stdy();//校準必須在待機模式下進行
        A7105_Write_Register(CALIBRATION_REG,0x01);
        do
        {
        temp=A7105_Read_Register(CALIBRATION_REG);
        temp&=0x01;
        }while(temp);
        temp=A7105_Read_Register(IF_CALIBRATION1_REG);
        fb=temp&0x0f;
        fbcf=(temp>>4)&0x01;
        if(fbcf==1)
        {
        LED=0;
        }
        A7105_Write_Register(VCO_CURRENT_CAL_REG,0x13);
        A7105_Write_Register(VCO_SINGLE_BAND_CAL1_REG,0x09);

        }
        //配置A7105
        void A7105_Config_Chip(void)
        {
        uchar i;

        //0x00 mode register, for reset
        //0x05 fifo data register
        //0x06 id code register
        //0x23 IF calibration II, only read
        //0x32 filter test register

        for(i=0x01;i<=0x04;i++)
        A7105_Write_Register(i,A7105_Default_Par[i]);
        for(i=0x07;i<=0x22;i++)
        A7105_Write_Register(i,A7105_Default_Par[i]);
        for(i=0x24;i<=0x31;i++)
        A7105_Write_Register(i,A7105_Default_Par[i]);
        }
        //主函數(shù)
        void main(void)
        {
        uchar i;
        P0=0xff;
        P1=0xff;
        P2=0xff;
        P3=0xff;

        Init_A7105();
        delay_ms(500);
        A7105_Entry_Stdy();
        while(1)
        {

        A7105_Setup_Channel(100-1);//接收頻率必須減1否則對不上碼

        A7105_Setup_Wpll();
        A7105_Entry_RX();
        delay_us(150);
        while(GPIO1);
        //P0=A7105_Read_Register(0x03);
        A7105_Read_DATA_From_FIFO();
        for(i=0;i<64;i++)
        {
        P0=RX_DATA_Buffer[i];
        delay_ms(300);
        }
        A7105_Entry_Stdy();
        }
        }


        上一頁 1 2 下一頁

        評論


        技術專區(qū)

        關閉
        主站蜘蛛池模板: 乌鲁木齐县| 甘德县| 潢川县| 丰城市| 渭南市| 瑞金市| 茌平县| 阳泉市| 太康县| 百色市| 霍林郭勒市| 彭泽县| 中牟县| 鹰潭市| 宾阳县| 景德镇市| 全南县| 鄂托克旗| 汾西县| 斗六市| 河北省| 渝北区| 上饶市| 宁城县| 抚顺县| 昌图县| 清镇市| 西城区| 叙永县| 阿合奇县| 开封市| 简阳市| 温州市| 美姑县| 澳门| 宣武区| 安丘市| 通渭县| 林甸县| 绵阳市| 黄冈市|