|
|||||||||||
| 技術(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)程序 雁塔菜農(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 于 2006/3/1 8:42:00 發(fā)布:
呵呵,hotpower又給我送來了免費(fèi)大餐…… 埋頭享用…… |
|
| 3樓: | >>參與討論 |
| 作者: hotpower 于 2006/3/1 23:09:00 發(fā)布:
哈哈,這是我不玩的東西了,改成NRF905了 |
|
| 4樓: | >>參與討論 |
| 作者: likee 于 2006/3/1 23:11:00 發(fā)布:
什么用的? |
|
| 5樓: | >>參與討論 |
| 作者: computer00 于 2006/3/2 0:32:00 發(fā)布:
401實(shí)在是太忽悠了……903也是。 玩過一陣,直叫人忽悠…………距離只到60m左右,郁悶。 |
|
| 6樓: | >>參與討論 |
| 作者: yewuyi 于 2006/3/2 8:26:00 發(fā)布:
哈哈,我就喜歡揀別人扔掉的“垃圾” 呵呵,我是“收破爛”的專業(yè)戶…… |
|
| 7樓: | >>參與討論 |
| 作者: chunyang 于 2006/3/2 10:17:00 發(fā)布:
距離只到60m左右 那是EMC設(shè)計(jì)或匹配設(shè)計(jì)不過關(guān)啊。 |
|
| 8樓: | >>參與討論 |
| 作者: computer00 于 2006/3/2 11:19:00 發(fā)布:
呵呵……匹配不是設(shè)計(jì)出來的,而是調(diào)出來的~~~~~~ |
|
| 9樓: | >>參與討論 |
| 作者: yfyao 于 2006/3/2 11:29:00 發(fā)布:
nRF的芯片靠近人體信號很差 |
|
| 10樓: | >>參與討論 |
| 作者: bcaiyo 于 2006/3/3 16:01:00 發(fā)布:
有時(shí)間也玩一下 |
|
| 11樓: | >>參與討論 |
| 作者: xukuan 于 2006/3/15 17:42:00 發(fā)布:
nRF9E5用過嗎 |
|
| 12樓: | >>參與討論 |
| 作者: 12分 于 2006/3/15 17:59:00 發(fā)布:
夠大方,有時(shí)間一定測試一下. |
|
| 13樓: | >>參與討論 |
| 作者: superseed 于 2006/3/31 12:57:00 發(fā)布:
頂一下,哪天用到了,我一定會(huì)看的。 |
|
| 14樓: | >>參與討論 |
| 作者: coke 于 2006/4/1 11:59:00 發(fā)布:
NRF401的距離有60m? 我們原來用CC2500做雙向音頻傳輸. 不加PA只能做到6-7m. |
|
| 15樓: | >>參與討論 |
| 作者: chunyang 于 2006/4/2 10:41:00 發(fā)布:
顯然是電路設(shè)計(jì)的問題 |
|
| 16樓: | >>參與討論 |
| 作者: hotpower 于 2006/5/21 4:25:00 發(fā)布:
NRF905 無線芯片NRF905的51控制程序 |
|
| 17樓: | >>參與討論 |
| 作者: hotpower 于 2006/5/21 4:26:00 發(fā)布:
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 于 2006/5/22 16:25:00 發(fā)布:
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 于 2006/5/23 8:45:00 發(fā)布:
hotpower大蝦,就沒發(fā)現(xiàn)你沒有做過的... 牛就一個(gè)字! |
|
| 20樓: | >>參與討論 |
| 作者: alan__lgh 于 2006/9/22 10:07:00 發(fā)布:
偶然看見這個(gè),頂一下 |
|
| 21樓: | >>參與討論 |
| 作者: setfreeice 于 2010/3/5 21:10:23 發(fā)布:
太感謝了 ,正需要。。。。找了好久了...... |
|
|
|
| 免費(fèi)注冊為維庫電子開發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入 |
Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號 |