?? nrf2401.lst
字號:
C51 COMPILER V8.08 NRF2401 11/13/2008 00:17:47 PAGE 1
C51 COMPILER V8.08, COMPILATION OF MODULE NRF2401
OBJECT MODULE PLACED IN nRF2401.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE nRF2401.c BROWSE DEBUG OBJECTEXTEND
line level source
1 //====================================================================================
2 //文 件 名: nRF2401.c
3 //功能描述: nRF2401的驅(qū)動程序
4 //維護記錄: 2008年10月25
5 //====================================================================================
6
7 #include <string.h>
8 #include <AT89X52.h>
9 #include <intrins.h>
10 #include "nRF2401.H"
11
12 sbit LED1 = P1^4;
13 sbit LED2 = P1^5;
14 sbit PWR = P0^0;
15 sbit CE = P0^1;
16 sbit CS = P0^2;
17 sbit DR1 = P0^3;
18 sbit CLK1 = P0^4;
19 sbit DATA = P0^5;
20 sbit cs_test = P0^6;
21
22
23 const unsigned char InitData[15] = // nRF2401 控制字 15 Byte
24 {
25 0x00, // 通道二接收數(shù)據(jù)寬度(bit)
26 (26<<3), // 通道一接收數(shù)據(jù)寬度(bit)
27 0x00, // 通道二地址(A24)
28 0x00, // 通道二地址(A23)
29 0x00, // 通道二地址(A22)
30 0x00, // 通道二地址(A21)
31 0x01, // 通道二地址(A20)
32 0x00, // 通道一地址(A14)
33 0x00, // 通道一地址(A13)
34 0x00, // 通道一地址(A12)
35 0x01, // 通道一地址(A11)
36 0xFF, // 通道一地址(A10)
37 0x83, // b7~b2:接收地址寬度,和發(fā)送端一致,不超過40bit;
38 // b1~b0:CRC模式選擇(01-8bit;11-16bit;00/10-no)
39 0x6f, // b15:接收通道選擇(0-通道1;1-通道1和2)
40 // b14:收發(fā)模式(0-Direct模式,1-ShockBurst模式)
41 // b13:波特率選擇(0-250Kbps;1-1Mbps)
42 // b12~b10:晶振選擇(000-4M;001-8M;010-12M;011-16M)
43 // b9~b8:發(fā)射功率(11-0db)
44 0x65 // b7~b1:發(fā)射頻率配置
45 // b0:收發(fā)控制(0-發(fā)送;1-接收)
46 };
47 unsigned char AddrBuffer[5]; // 地址寄存器
48 unsigned char AddrByteCnt; // 地址Byte數(shù)
49
50 /******************************************************************************
51 void nRF2401_ON(); // nRF2401A上電
52 void nRF2401_OFF(); // nRF2401A掉電
53 void nRF2401_Initial(); // nRF2401A初始化
54 void nRF2401_WriteCommand(); // nRF2401A寫命令字
55 void nRF2401_WriteByte(unsigned char uiData); // 向nRF2401A寫入一個Byte
C51 COMPILER V8.08 NRF2401 11/13/2008 00:17:47 PAGE 2
56 void nRF2401_WriteWord(unsigned int uiData); // 向nRF2401A寫入一個Word
57 void nRF2401_Mode(unsigned char uiMode); // 切換nRF2401A收/發(fā)模式
58 void nRF2401_SendByte(unsigned char TxData);
59 // 將字節(jié)數(shù)據(jù)寫入nRF2401A
60 void nRF2401_SendWord(unsigned int TxData);
61 // 將字?jǐn)?shù)據(jù)寫入nRF2401A
62 void nRF2401_SendBuffer_Byte(unsigned char TxData[],unsigned char DataByte);
63 // 將數(shù)組數(shù)據(jù)寫入nRF2401A
64 void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);
65 // 將數(shù)組數(shù)據(jù)寫入nRF2401A
66 unsigned int nRF2401_RxStatus(); // 判斷nRF2401A是否有數(shù)據(jù)接收
67 void nRF2401_ReceiveByte(unsigned char RxData[]);// 以Byte格式從nRF2401A讀數(shù)據(jù)
68 void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式從nRF2401A讀數(shù)據(jù)
69 void nRF2401_SetAddress(unsigned char Address[],unsigned char AddrByte);
70 // 設(shè)置目標(biāo)nRF2401A的地址
71 void Delay_Us(unsigned int TimeCnt); // 延時(uS)
72
73 void nRF2401_Str(unsigned char *arr);
74 *******************************************************************************/
75 //=============================================================
76 // 語法格式: void nRF2401_Initial(void)
77 // 實現(xiàn)功能: nRF 初始化
78 // 參數(shù): 無
79 // 返回值: 無
80 //=============================================================
81 void nRF2401_Initial(void)
82 {
83 1
84 1 PWR=0;
85 1 CE=0;
86 1 CS=0;
87 1 DR1=1;
88 1 CLK1=0;
89 1 DATA=1;
90 1 cs_test=1;
91 1 nRF2401_ON();
92 1 Delay_Us(3000);
93 1 nRF2401_WriteCommand(); // 向nRF2401A寫命令字
94 1 Delay_Us(300);
95 1 }
96
97 //=============================================================
98 // 語法格式: void nRF2401_ON(void)
99 // 實現(xiàn)功能: nRF 上電
100 // 參數(shù): 無
101 // 返回值: 無
102 //=============================================================
103 void nRF2401_ON(void)
104 {
105 1
106 1 PWR=1;
107 1
108 1
109 1
110 1 }
111
112 //=============================================================
113 // 語法格式: void nRF2401_OFF(void)
114 // 實現(xiàn)功能: nRF 掉電
115 // 參數(shù): 無
116 // 返回值: 無
117 //=============================================================
C51 COMPILER V8.08 NRF2401 11/13/2008 00:17:47 PAGE 3
118 void nRF2401_OFF(void)
119 {
120 1
121 1 PWR=0;
122 1 }
123
124 //=============================================================
125 // 語法格式: void nRF2401_WriteCommand(void)
126 // 實現(xiàn)功能: nRF 寫命令字
127 // 參數(shù): 無
128 // 返回值: 無
129 //=============================================================
130 void nRF2401_WriteCommand(void)
131 {
132 1 unsigned int i;
133 1
134 1 CE=0;
135 1 CS=1;
136 1
137 1 Delay_Us(5);
138 1 for(i=0; i<15; i++)
139 1 {
140 2 nRF2401_WriteByte(InitData[i]);
141 2 }
142 1
143 1 CS=0;
144 1 CE=1;
145 1 }
146
147 //=============================================================
148 // 語法格式: void nRF2401_Mode(unsigned int uiMode)
149 // 實現(xiàn)功能: 設(shè)置nRF2401A的工作方式
150 // 參數(shù): uiMode:0--接收;1--發(fā)送
151 // 返回值: 無
152 //=============================================================
153 void nRF2401_Mode(unsigned char uiMode)
154 {
155 1
156 1 CE=0;
157 1 CS=1;
158 1
159 1 if(uiMode == 0)
160 1 nRF2401_WriteByte(InitData[14] | 0x01); // 接收
161 1 else
162 1 nRF2401_WriteByte(InitData[14] & 0xFE); // 發(fā)送
163 1
164 1 CS=0;
165 1 CE=1;
166 1 }
167
168 //=============================================================
169 // 語法格式: void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
170 // 實現(xiàn)功能: 設(shè)置目標(biāo)nRF2401A的地址
171 // 參數(shù): unsigned int *Address:地址數(shù)組
172 // unsigned int AddrByte:數(shù)組的長度
173 // 返回值: 無
174 //=============================================================
175 void nRF2401_SetAddress(unsigned char *Address,unsigned char AddrByte)
176 {
177 1 unsigned int i;
178 1 for(i=0; i<AddrByte; i++)
179 1 {
C51 COMPILER V8.08 NRF2401 11/13/2008 00:17:47 PAGE 4
180 2 AddrBuffer[i] = Address[i];
181 2 }
182 1 AddrByteCnt = AddrByte;
183 1 }
184
185 //=============================================================
186 // 語法格式: void nRF2401_WriteByte(unsigned int uiData)
187 // 實現(xiàn)功能: 向nRF2401A寫入一個字節(jié)數(shù)據(jù)
188 // 參數(shù): unsigned int uiData: 待寫入數(shù)據(jù)
189 // 返回值: 無
190 //=============================================================
191 void nRF2401_WriteByte(unsigned char uiData)
192 {
193 1 unsigned int i;
194 1 cs_test=0;
195 1 for(i=0; i<8; i++)
196 1 {
197 2
198 2 CLK1=0;
199 2 if(uiData&0x80)
200 2
201 2 DATA=1;
202 2 else
203 2 DATA=0;
204 2
205 2 CLK1=1;
206 2 _nop_();
207 2 _nop_();
208 2
209 2 _nop_();
210 2 _nop_();
211 2 _nop_();
212 2 _nop_();
214 2 _nop_();
215 2 _nop_();
216 2
217 2 CLK1=0;
218 2 uiData = uiData<<1;
219 2 }
220 1 cs_test=1;
221 1 }
222
223 //=============================================================
224 // 語法格式: void nRF2401_WriteWord(unsigned int uiData)
225 // 實現(xiàn)功能: 向nRF2401A寫入一個字?jǐn)?shù)據(jù)
226 // 參數(shù): unsigned int uiData: 待寫入數(shù)據(jù)
227 // 返回值: 無
228 //=============================================================
229 void nRF2401_WriteWord(unsigned int uiData)
230 {
231 1 unsigned int i;
232 1 for(i=0; i<16; i++)
233 1 {
234 2
235 2 CLK1=0;
236 2 if(uiData&0x8000)
237 2
238 2 DATA=1;
239 2 else
240 2
241 2 DATA=0;
C51 COMPILER V8.08 NRF2401 11/13/2008 00:17:47 PAGE 5
242 2
243 2 CLK1=1;
244 2
245 2 _nop_();
246 2 _nop_();
247 2
248 2 _nop_();
249 2 _nop_();
250 2 _nop_();
251 2 _nop_();
252 2
253 2 _nop_();
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -