新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 基于CC1101與STC89C52無線收發程序(發射程序)

        基于CC1101與STC89C52無線收發程序(發射程序)

        作者: 時間:2016-11-27 來源:網絡 收藏
        好像用CC1101的朋友好少,在此也貼上CC1101收發程序吧!這樣會減少大家大量時間去調試。不多說了直接上程序了:

        #include
        #include

        #define IOCFG2 0x00
        #define IOCFG10x01
        #define IOCFG00x02
        #define FIFOTHR0x03//rx和tx FIFO門限
        #define SYNC10x04//同步詞匯,高字節
        #define SYNC00x05//同步詞匯,低字節
        #define PKTLEN0x06//數據包長度
        #define PKTCTRL10x07//數據包自動控制
        #define PKTCTRL00x08//數據包自動控制
        #define ADDR0x09//設備地址
        #define CHANNR0x0a//信道數
        #define FSCTRL10x0b//頻率合成控制器
        #define FSCTRL00x0c//頻率控制詞匯,高字節
        #define FREQ20x0d//頻率控制詞匯,中間字節
        #define FREQ10x0e//頻率控制詞匯,低字節
        #define FREQ00x0f//調置器配置
        #define MDMCFG40x10//調置器配置
        #define MDMCFG30x11//調置器配置
        #define MDMCFG20x12//調置器配置
        #define MDMCFG10x13//調置器配置
        #define MDMCFG00x14//調置器配置
        #define DEVIATN0x15//主通信控制狀態機配置
        #define MCSM20x16//主通信控制狀態機配置
        #define MCSM10x17//主通信控制狀態機配置
        #define MCSM00x18//頻率偏移補償配置
        #define FOCCFG0x19//位同步配置
        #define BSCFG0x1a//AGC控制
        #define AGCCTRL20x1b//AGC控制
        #define AGCCTRL10x1c//AGC控制
        #define AGCCTRL00x1d//高字節時間0暫停
        #define WOREVT10x1e//低字節時間0暫停
        #define WOREVT00x1f//電磁波激活控制
        #define WORCTRL0x20//前末端RX配置
        #define FREND10x21//前末端TX配置
        #define FREND00x22//頻率合成器校準
        #define FSCAL30x23//頻率合成器校準
        #define FSCAL20x24//頻率合成器校準
        #define FSCAL10x25//頻率合成器校準
        #define FSCAL00x26//RC振蕩器配置
        #define RCCTRL10x27//RC振蕩器配置
        #define RCCTRL00x28//頻率合成器校準控制
        #define FSTEST0x29//產品測試
        #define PTEST0x2a//AGC測試
        #define AGCTEST0x2b//不同的測試設置
        #define TEST20x2c//不同的測試設置
        #define TEST10x2d//不同的測試設置
        #define TEST00x2e//

        #define SRES0x30//重啟芯片
        #defineSFSTXON0x31//開啟和校準頻率合成器
        #define SXOFF0x32//關閉晶體振蕩器
        #define SCAL0x33//校準頻率合成器并判斷
        #define SRX0x34//啟用SRX
        #define STX0x35//空閑狀態:啟用STX
        #define SIDLE0x36//離開RX/TX,關斷頻率合成器
        #define SAFC0x37//頻率合成器AFC調節
        #define SWOR0x38//自動RX選舉序列(電磁波激活)
        #define SPWD0x39//當CSN為高時進入功率降低模式
        #define SFRX0x3a//沖洗RX FIFO緩存
        #define SFTX0x3b//沖洗TX FIFO緩存
        #define SWORRST0x3c//重新設置真實時間時鐘
        #define SNOP0x3d//無操作

        #define PARTNUM0x30//CC2550組成部分數目
        #define VERSION0x31//當前版本數
        #define FREQEST0x32//頻率偏移估計
        #define LQI0x33//連接質量的解調器估計
        #define RSSI0x34//接收信號強度指示
        #define MARCSTATE0x35//控制狀態機狀態
        #define WORTIME10x36//WOR計時器高字節
        #define WORTIME00x37//WOR計時器低字節
        #define PKTSTATUS0x38//當前GDOx狀態和數據包狀態
        #define VCO_VC_DAC0x39//PLL校準模塊的當前設定
        #define TXBYTES0x3a//TX FIFO中的下溢和比特數
        #define RXBYTES0x3b//RX FIFO中的下溢和比特數
        #define PATABLE0x3e
        #define TX_FIFO0x3f
        #define RX_FIFO0x3f
        #define data_len8

        本文引用地址:http://www.104case.com/article/201611/322552.htm

        typedefunsigned int uint;
        typedefunsigned char uchar;

        uchar rx_buffer[data_len]={0,0,0,0,0,0,0,0};//rx data
        //uchar RX_data[data_len];
        uchar code tx_buffer[data_len]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};//tx data
        uchar data_length=0;
        uchar code P_Config[]={0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0,0xc0};//功率配置

        sbit CSN=P2^1;
        sbit SCLK=P2^7;
        sbit SI=P2^2;
        sbit SO=P2^0;
        sbit GDO0=P2^6;

        sbit key=P2^5;

        sbit LED=P0^0;
        //sbit LED1=P0^6;

        void CC1101_Init(void);
        void CC1101_RESET(void);
        void POWER_UP_RESET(void);
        uchar SPI_WR_Byte(uchar value);
        void SPI_Write_Byte(uchar addr,uchar value);
        uchar SPI_Read_Byte(uchar addr);
        void SPI_Write_Strobe(uchar strobe);
        void SPI_Write_Burst(uchar addr,uchar *buffer,uchar count);
        void SPI_Read_Burst(uchar addr,uchar *buffer,uchar count);
        void SPI_Write_Packet(uchar *TX_Buffer,uchar size);
        uchar SPI_Read_Packet(uchar *RX_Buffer,uchar length);
        void CC1101_Set_TX(void);
        void CC1101_Set_RX(void);
        void Write_Config(void);

        void delay_ms(uint x)
        {
        uint i;
        while(x--)for(i=0;i<120;i++);
        }

        void delay_us(uint x)
        {
        do {
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        _nop_();
        } while (--x);
        }
        //------------------------------------------------/
        //函數功能:通過SPI寫讀一字節/
        //輸入參數:value/
        //輸出參數:B_value/
        //-----------------------------------------------/
        uchar SPI_WR_Byte(uchar value)
        {
        uchar i,B_value=0;
        SCLK=0;
        for(i=0;i<8;i++)
        {
        if(value&0x80)
        SI=1;
        else
        SI=0;
        value<<=1;
        SCLK=1;
        _nop_();_nop_();
        B_value<<=1;
        if(SO)
        B_value|=0x01;
        SCLK=0;
        _nop_();_nop_();
        }
        return B_value;
        }
        //-------------------------------------------------/
        //函數功能:重置CC1101/
        //輸入參數:無/
        //輸出參數:無/
        //----------------------------------------------/
        void CC1101_RESET(void)
        {
        SPI_Write_Strobe(SIDLE);
        CSN=0;
        while(SO);
        SPI_WR_Byte(SRES);
        while(SO);
        CSN=1;
        }
        //-----------------------------------------------/
        //函數功能:CC1101上電重置/
        //輸入參數:無/
        //輸出參數:無/
        //--------------------------------------------/
        void POWER_UP_RESET(void)
        {

        CSN=1;
        delay_us(1);
        CSN=0;
        delay_us(1);
        CSN=1;
        delay_us(41);
        CC1101_RESET();
        }


        上一頁 1 2 下一頁

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 织金县| 肇东市| 珠海市| 本溪市| 读书| 凭祥市| 浙江省| 镇巴县| 思茅市| 庄浪县| 伽师县| 鸡泽县| 丰城市| 开平市| 珠海市| 增城市| 吴川市| 清丰县| 扎兰屯市| 枣阳市| 屏南县| 崇义县| 齐齐哈尔市| 新昌县| 南漳县| 通榆县| 客服| 东兰县| 石景山区| 甘洛县| 泰宁县| 平遥县| 平乐县| 丹东市| 临泉县| 合水县| 泊头市| 宁海县| 枣阳市| 拉孜县| 长顺县|