音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊 首頁 | 行業(yè)黑名單 | 幫助
維庫電子市場網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

nrf401實(shí)驗(yàn)c51程序

作者:hotpower 欄目:通信技術(shù)
NRF401實(shí)驗(yàn)c51程序
/*----------------------------------------------------------------------
NRF401實(shí)驗(yàn)程序
雁塔菜農(nóng)HotPower@126.com
-----------------------------------------------------------------------*/
#include <AT89X52.h>
#include <stdio.h>
#include <absacc.h>
#include <intrins.h>
#include <NRF401.h>
#include <hotins.h>

#define T0_8mS -8000
#define T1_8mS -8000
#define T2_1_25mS -576 //-1250*0.9216=1.25MS


/*----------------------------------------------------------------------
        系統(tǒng)函數(shù)
-----------------------------------------------------------------------*/
void MainInit(void);//系統(tǒng)初始化
void ClrWdt(void);//喂狗
void nRFInit(void);
void SystemInit(void);//系統(tǒng)初始化
void SystemSetup(void);//系統(tǒng)設(shè)置
void SystemIoInit(void);//系統(tǒng)接口初始化
void UserSetup(void);//用戶運(yùn)行環(huán)境設(shè)置
void TimeInit(void);
unsigned CHAR crc8r(unsigned CHAR crcbyte);
unsigned int crc16r(unsigned int crcword, unsigned int crc);
unsigned int GetTXBuffWord(unsigned CHAR ledpos);
void SetTXBuffWord(unsigned CHAR ledpos, unsigned int val);
unsigned int GetRXBuffWord(unsigned CHAR ledpos);
void SetRXBuffWord(unsigned CHAR ledpos, unsigned int val);


SystemData SystemBuffers;//申請系統(tǒng)數(shù)據(jù)結(jié)構(gòu)

SioData SioBuffers;

/*-----------------------------------------
         主程序初始化
-------------------------------------------*/
void MainInit(void)//系統(tǒng)初始化
{
  SystemIoInit();//系統(tǒng)接口初始化
  ClrWdt();//清除看門狗計(jì)數(shù)器
  if (SystemBuffers.RamTest != 0x55aa) {//內(nèi)存測試
SystemInit();//系統(tǒng)上電初始化
  }
  SystemSetup();//系統(tǒng)運(yùn)行環(huán)境設(shè)置
  UserSetup();//用戶運(yùn)行環(huán)境設(shè)置
}

void SystemInit(void)//系統(tǒng)初始化
{
  SystemBuffers.RamTest = 0x55aa;//內(nèi)存初始化
}

void SystemSetup(void)//系統(tǒng)設(shè)置
{
  AUXR = 0x01;//關(guān)閉EMI
  nRFInit();
  TimeInit();
  IP = 0x10;//中斷優(yōu)先級EX1>ET2>ET0>EX0>ES
  IE = 0xb4;//開中斷EA,ET2,ET1,EX1,ET0
}

void UserSetup(void)//用戶運(yùn)行環(huán)境設(shè)置
{
}

void SystemIoInit(void)
{
  IE = 0x00;//關(guān)閉中斷
  P0 = 0xff;//P0口初始化
  P1 = 0xff;//P1口初始化
  P2 = 0xff;//P2口初始化
  P3 = 0xff;//P3口初始化
}

void TimeInit()
{
  TMOD = 0x21;//定時(shí)器0,1為方式1(十六位定時(shí)器)
  TCON = 0x55;//啟動(dòng)定時(shí)器TR1EQUTR0EQU1,IT1EQUIT0EQU1
/*----------------------------------
      定時(shí)器0定時(shí)參數(shù)設(shè)置
----------------------------------*/
  TL0 = 0;
  TH0 = 0;
  TR0 = 1;//啟動(dòng)定時(shí)器0
/*----------------------------------
      定時(shí)器0定時(shí)參數(shù)設(shè)置
----------------------------------*/
  TL1 = SIO_BPS;
  TH1 = SIO_BPS;
  PCON = 0x00;
  TR1 = 1;//啟動(dòng)定時(shí)器1
/*----------------------------------
      定時(shí)器2定時(shí)參數(shù)設(shè)置
----------------------------------*/
  TIMEER2 = T2_1_25mS;
  RCAP    = T2_1_25mS;
  TR2     = 1;//啟動(dòng)定時(shí)器2
}

void nRFInit(void)
{
  nRFCS    = 0;//433.92MHz//1//434.33MHz
  nRFTXEN  = 0;//接收
  nRFPWR   = 1;//上電
  SioBuffers.TXMAXCount = 0;
  SioBuffers.TXCount = 0;
//  SioBuffers.RXCount = 0;
  SCON     = 0x50;          /* SCON: mode 2, 9-bit UART, enable rcvr      */
  SioBuffers.RXCount = 16;
}


/*------------------------------------
         外部INT0中斷服務(wù)程序
------------------------------------*/
void int0proc() interrupt IE0_VECTOR// using 1
{
}

/*------------------------------------
         定時(shí)器T0中斷服務(wù)程序
------------------------------------*/
void t0proc() interrupt TF0_VECTOR// using 1
{
}

/*------------------------------------
         外部INT1中斷服務(wù)程序
------------------------------------*/
void int1proc() interrupt IE1_VECTOR using 1
{
}

/*------------------------------------
         定時(shí)器T1中斷服務(wù)程序
------------------------------------*/
void t1proc() interrupt TF1_VECTOR// using 1
{
}

/*------------------------------------
         串口SIO中斷服務(wù)程序
------------------------------------*/
void sioproc() interrupt SIO_VECTOR// using 1
{
unsigned CHAR i;
unsigned int crc;
  if (RI) {//接收中斷
    RI = 0;
if (!nRFTXEN && SioBuffers.RXCount) {//每次接收20個(gè)數(shù)據(jù)
      i = SBUF;
      SioBuffers.RXCount --;
      SioBuffers.RXBuffers[19 - SioBuffers.RXCount] = i;
   SWITCH(SioBuffers.RXCount) {
     case 19:
         if (i != 0x55) SioBuffers.RXCount = 20;
           break;
  case 18:
         if (i != 0xaa) SioBuffers.RXCount = 20;
           break;
  case 0:
         crc = 0;
      for (i = 1; i <= 8; i ++) {
                 crc = crc16r(GetRXBuffWord(i + i), crc);
      }
               if (crc != GetRXBuffWord(18))
                 SioBuffers.RXCount = 20;
       else {
                 nRFTXEN = 1;//發(fā)送
              for (i = 0; i < 20; i ++) {
             SioBuffers.TXBuffers[i] = SioBuffers.RXBuffers[i];
           }
     SioBuffers.TXMAXCount = TX_MAXCount;
                 SioBuffers.TXCount = TX_Count + 32;
     TI = 1;//接收結(jié)束立即轉(zhuǎn)為發(fā)送
      }
         break;
   }
}
  }
  if (TI) {//發(fā)送中斷
    TI = 0;
    if (nRFTXEN && SioBuffers.TXCount) {
      SioBuffers.TXCount --;
      if (SioBuffers.TXCount > 19) {
     SBUF = 0x00;
//        SBUF = 0xff;
      
2樓: >>參與討論
yewuyi
呵呵,hotpower又給我送來了免費(fèi)大餐……
埋頭享用……

3樓: >>參與討論
hotpower
哈哈,這是我不玩的東西了,改成NRF905
 
4樓: >>參與討論
likee
什么用的?
 
5樓: >>參與討論
computer00
401實(shí)在是太忽悠了……903也是。
玩過一陣,直叫人忽悠…………距離只到60m左右,郁悶。

6樓: >>參與討論
yewuyi
哈哈,我就喜歡揀別人扔掉的“垃圾”
呵呵,我是“收破爛”的專業(yè)戶……

7樓: >>參與討論
chunyang
距離只到60m左右
那是EMC設(shè)計(jì)或匹配設(shè)計(jì)不過關(guān)啊。

8樓: >>參與討論
computer00
呵呵……匹配不是設(shè)計(jì)出來的,而是調(diào)出來的~~~~~~
 
9樓: >>參與討論
yfyao
nRF的芯片靠近人體信號很差
 
10樓: >>參與討論
bcaiyo
有時(shí)間也玩一下
 
11樓: >>參與討論
xukuan
nRF9E5用過嗎
 
12樓: >>參與討論
12分
夠大方,有時(shí)間一定測試一下.
 
13樓: >>參與討論
superseed
頂一下,哪天用到了,我一定會(huì)看的。
 
14樓: >>參與討論
coke
NRF401的距離有60m?
我們原來用CC2500做雙向音頻傳輸. 不加PA只能做到6-7m. 

15樓: >>參與討論
chunyang
顯然是電路設(shè)計(jì)的問題
 
16樓: >>參與討論
hotpower
NRF905
 

無線芯片NRF905的51控制程序

17樓: >>參與討論
hotpower
PTR8000
PTR8000原理 應(yīng)用 專為點(diǎn)對多點(diǎn)無線通信設(shè)計(jì) 內(nèi)置數(shù)據(jù)協(xié)議和CRC檢錯(cuò),無亂碼輸出載-,C-C++,

PTR8000原理 應(yīng)用 專為點(diǎn)對多點(diǎn)無線通信設(shè)計(jì) 內(nèi)置數(shù)據(jù)協(xié)議和crc檢錯(cuò),無亂碼輸出載

18樓: >>參與討論
FXX99
xe1205初始化程序!
NRF401是最簡單的一款了,不過好像也沒多少做的好的模塊.
XE1205性能優(yōu)良,最大發(fā)射功率+15dBm,靈敏度可達(dá)-121dBm@-1.2KBPS,使用簡單!www.coolwaveasia.com!
/***********************************************************
**  文件名:    rf.c                                      **
**
**  射頻芯片XE1205初始化
**
**  Rhett@coolwaveasia.com
***********************************************************/
#define __RF__
#include "..\HEADER\include.h"

/**********************************************************
**  RfModel define
**********************************************************/
    sbit RF_SCK     = P1^2;
    sbit RF_MOSI    = P3^5;         /* MCU -> 1205 */
    sbit RF_MISO    = P1^5;         /* 1205 -> MCU */
    
    sbit RF_NSS_C   = P1^6;
    sbit RF_DATA    = P1^7;
  
/**********************************************************
**  函數(shù):      RF_Initial()    xe1205初始化函數(shù)
**  形參:
**  返回值:    
**  功能:  對xe1205寄存器進(jìn)行初始化設(shè)置
**
**  各寄存器的功能說明參考xe1205 datasheet
**********************************************************/
void RF_Initial()
{
    /* pattern code set */
    RF_RegWrite(0x0D,PTN_CODE_0);
    RF_RegWrite(0x0E,PTN_CODE_1);
    RF_RegWrite(0x0F,PTN_CODE_2);
    RF_RegWrite(0x10,PTN_CODE_3);

    RF_RegWrite(0x03,0x00);
    RF_RegWrite(0x04,0x00);

    /* Rate set */
    RF_RegWrite(0x02,0x7F);/* RATE_1K2_BPS */
    /* POWER set */
    RF_RegWrite(0x07,0xD0);/* POWER_15_DBM */
    /* Dev & Band calc */
    RF_RegWrite(0x00,0x42);
    RF_RegWrite(0x01,0xA0);/* DEV_80K_HZ */
    /* Band set */
    RF_RegWrite(0x08,0x60);/* BAND_200K_HZ */
    /* other parameter */
    RF_RegWrite(0x05,0xF0); /* irq map set */
    RF_RegWrite(0x06,0x00);
    RF_RegWrite(0x09,0x00);
    RF_RegWrite(0x0a,0x1C);/* pattern size set */
    RF_RegWrite(0x0b,0x00);
    RF_RegWrite(0x0c,0x00);

    RF_SetReceiveMode();
}

/**********************************************************
**  函數(shù):      RF_SetSendMode(),RF_SetReceiveMode()
**  形參:      -
**  返回值:    -
**  功能:      Rf模塊工作模式設(shè)置
**********************************************************/
void RF_SetSendMode()
{
    uchar temp_mode;
    temp_mode = RF_RegRead(0x00);
    temp_mode &= 0x3F;
    RF_RegWrite(0x00, temp_mode|0x80);
}

void RF_SetReceiveMode()
{
    uchar temp_mode;
    temp_mode = RF_RegRead(0x00);
    temp_mode &= 0x3F;
    RF_RegWrite(0x00, temp_mode|0x40);
}

/**********************************************************
**  函數(shù):      RF_RegWrite()
**  形參:      Addr,Cmd
**  返回值:    -
**  功能:      寫xe1205寄存器
                MOSI數(shù)據(jù)應(yīng)該在SCK上升沿改變,在SCK下降沿被采樣。
**********************************************************/
void RF_RegWrite(uchar addr, uchar cmd)
{
    uchar i;

    RF_SCK = 0;
    RF_NSS_C = 0;
    
    addr &= 0x1F;
    addr <<= 0x01;
    addr |= 0x01;
    for (i=0; i<8; i++)        /* 寫地址 */
    {
        RF_SCK = 0;
        RF_MOSI = (addr & 0x80);
        RF_SCK = 1;
        addr <<= 0x01;
    }
        
    for (i=0; i<8; i++)        /* 寫指令 */
    {
        RF_SCK = 0;
        RF_MOSI = (cmd & 0x80);
        RF_SCK = 1;
        cmd <<= 0x01;
    }
    
    RF_SCK = 0;
    RF_MOSI = 0;
    RF_NSS_C = 1;
}
/**********************************************************
**    oˉêy£o    RF_RegRead()
**    D?2?£o    addr
**    ·μ???μ£o  VALUE
**    1|?ü£o    ?áXe1205??′??÷£?
                MISOé?êy?Y?úSCKé?éy???aê?óDD§£?ó|???úSCK???μ??2é?ù?£
**********************************************************/
uchar RF_RegRead(uchar addr)
{
    uchar i;
    uchar VALUE;

    RF_MISO = 1;
    RF_MOSI = 1;

    RF_SCK = 0;
    RF_NSS_C = 0;
    
    addr &= 0x1F;
    addr <<= 0x01;
    addr |= 0x41;
    for (i=0; i<8; i++)        //D′μ??·
    {
        RF_SCK = 0;
        RF_MOSI = (addr & 0x80);
        RF_SCK = 1;
        addr <<= 0x01;

    }
    RF_SCK = 0;
    RF_MOSI = 0;
    RF_MOSI = 1;
    for (i=0; i<8; i++)        //?á??′??÷
    {
        RF_SCK = 1;
        VALUE <<= 0x
19樓: >>參與討論
terrence
hotpower大蝦,就沒發(fā)現(xiàn)你沒有做過的...
牛就一個(gè)字!

20樓: >>參與討論
alan__lgh
偶然看見這個(gè),頂一下
 
21樓: >>參與討論
setfreeice

太感謝了 ,正需要。。。。找了好久了......

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
單片機(jī)的信息怎樣使用ADSL上傳啊。
緊急求助—計(jì)算機(jī)鍵盤的位置碼
低頻無線收發(fā)模塊誰有啊.
請教各位朋友,接收1M~30M之間頻段用什么芯片好點(diǎn)?
用過西門子MC35i模塊的再進(jìn)來看看
免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號