<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

          RF1100SE單片機C8051F310程序

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

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

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


          //延時子函數(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) //上電復位
          {
          CSN = 1;
          delay(10);
          CSN = 0;
          delay(10);
          CSN = 1;
          delay(500);
          SPI_WR_Strobe(SRES); //復位CC1100
          }

          uchar SPI_RW_Reg(uchar reg,uchar value) //向寄存器寫一字節(jié)的數(shù)據(jù),同時返回狀態(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); //進入接收模式指令
          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);//讀出第一個字節(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ù)長度的修改為當前數(shù)據(jù)的長度

          SPI_Read_Buf(RX_FIFO, status, 2); //讀出CRC校驗位
          SPI_WR_Strobe(SFRX); //清洗接收緩沖區(qū)
          return (status[1] & CRC_OK); //如果校驗成功返回接收成功
          }
          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); //進入發(fā)送模式發(fā)送數(shù)據(jù)

          while (!GDO0);
          while (GDO0);

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

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

          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);//頻率合成器校準
          SPI_RW_Reg(FSCAL2, 0x2a);
          SPI_RW_Reg(FSCAL1, 0x00);
          SPI_RW_Reg(FSCAL0, 0x11);
          SPI_RW_Reg(FSTEST, 0x59);//產(chǎn)品測試
          SPI_RW_Reg(TEST2, 0x81);//不同的測試設置
          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ù)包自動控制,無地址檢測,包含兩個狀態(tài)字節(jié)
          SPI_RW_Reg(PKTCTRL0, 0x05);//開啟CC2400支持,采用可變長度數(shù)據(jù)包
          SPI_RW_Reg(ADDR, 0x00);//設置地址
          SPI_RW_Reg(PKTLEN, 0x10);//有效允許最大數(shù)據(jù)包長度16個字節(jié)

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

          }


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

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

          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單片機C8051F31

          評論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();