📄 nrf2401.lst
字号:
C51 COMPILER V8.08 NRF2401 11/13/2008 00:14:55 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的驱动程序
4 //维护记录: 2008年10月26
5 //====================================================================================
6
7 #include <string.h>
8 #include <AT89X52.h>
9 #include <intrins.h>
10 #include "nRF2401.H"
11
12
13 sbit PWR = P0^0;
14 sbit CE = P0^1;
15 sbit CS = P0^2;
16 sbit DR1 = P0^3;
17 sbit CLK1 = P0^4;
18 sbit DATA = P0^5;
19 sbit cs_test = P0^6;
20
21
22 const unsigned char InitData[15] = // nRF2401 控制字 15 Byte
23 {
24 0x08, // 通道二接收数据宽度(bit)
25 0x08, // 通道一接收数据宽度(bit)
26 0x00, // 通道二地址(A24)
27 0x00, // 通道二地址(A23)
28 0x00, // 通道二地址(A22)
29 0x00, // 通道二地址(A21)
30 0x01, // 通道二地址(A20)
31 0x00, // 通道一地址(A14)
32 0x00, // 通道一地址(A13)
33 0x00, // 通道一地址(A12)
34 0x00, // 通道一地址(A11)
35 0x01, // 通道一地址(A10)
36 0x83, // b7~b2:接收地址宽度,和发送端一致,不超过40bit;
37 // b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)
38 0x6f, // b15:接收通道选择(0-通道1;1-通道1和2)
39 // b14:收发模式(0-Direct模式,1-ShockBurst模式)
40 // b13:波特率选择(0-250Kbps;1-1Mbps)
41 // b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)
42 // b9~b8:发射功率(11-0db)
43 0x65 // b7~b1:发射频率配置
44 // b0:收发控制(0-发送;1-接收)
45
46 };
47 unsigned char AddrBuffer[5]; // 地址寄存器
48 unsigned char AddrByteCnt; // 地址Byte数
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:14:55 PAGE 2
56 void nRF2401_WriteWord(unsigned int uiData); // 向nRF2401A写入一个Word
57 void nRF2401_Mode(unsigned char uiMode); // 切换nRF2401A收/发模式
58 void nRF2401_SendByte(unsigned char TxData);
59 // 将字节数据写入nRF2401A
60 void nRF2401_SendWord(unsigned int TxData);
61 // 将字数据写入nRF2401A
62 void nRF2401_SendBuffer_Byte(unsigned char TxData[],unsigned char DataByte);
63 // 将数组数据写入nRF2401A
64 void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);
65 // 将数组数据写入nRF2401A
66 unsigned int nRF2401_RxStatus(); // 判断nRF2401A是否有数据接收
67 void nRF2401_ReceiveByte(unsigned char RxData[]);// 以Byte格式从nRF2401A读数据
68 void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式从nRF2401A读数据
69 void nRF2401_SetAddress(unsigned char Address[],unsigned char AddrByte);
70 // 设置目标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 // 实现功能: nRF 初始化
78 // 参数: 无
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=0;
88 1 CLK1=0;
89 1 DATA=0;
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 // 实现功能: nRF 上电
100 // 参数: 无
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 // 实现功能: nRF 掉电
115 // 参数: 无
116 // 返回值: 无
117 //=============================================================
C51 COMPILER V8.08 NRF2401 11/13/2008 00:14:55 PAGE 3
118 void nRF2401_OFF(void)
119 {
120 1
121 1 PWR=0;
122 1 }
123
124 //=============================================================
125 // 语法格式: void nRF2401_WriteCommand(void)
126 // 实现功能: nRF 写命令字
127 // 参数: 无
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 // 实现功能: 设置nRF2401A的工作方式
150 // 参数: uiMode:0--接收;1--发送
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); // 发送
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 // 实现功能: 设置目标nRF2401A的地址
171 // 参数: unsigned int *Address:地址数组
172 // unsigned int AddrByte:数组的长度
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:14:55 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 // 实现功能: 向nRF2401A写入一个字节数据
188 // 参数: unsigned int uiData: 待写入数据
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
206 2 CLK1=1;
207 2 _nop_();
208 2 _nop_();
209 2
210 2 _nop_();
211 2 _nop_();
212 2 _nop_();
213 2 _nop_();
214 2
215 2 _nop_();
216 2 _nop_();
217 2
218 2 CLK1=0;
219 2 uiData = uiData<<1;
220 2 }
221 1 cs_test=1;
222 1 }
223
224 //=============================================================
225 // 语法格式: void nRF2401_WriteWord(unsigned int uiData)
226 // 实现功能: 向nRF2401A写入一个字数据
227 // 参数: unsigned int uiData: 待写入数据
228 // 返回值: 无
229 //=============================================================
230 void nRF2401_WriteWord(unsigned int uiData)
231 {
232 1 unsigned int i;
233 1 for(i=0; i<16; i++)
234 1 {
235 2
236 2 CLK1=0;
237 2 if(uiData&0x8000)
238 2
239 2 DATA=1;
240 2 else
241 2
C51 COMPILER V8.08 NRF2401 11/13/2008 00:14:55 PAGE 5
242 2 DATA=0;
243 2
244 2 CLK1=1;
245 2
246 2 _nop_();
247 2 _nop_();
248 2
249 2 _nop_();
250 2 _nop_();
251 2 _nop_();
252 2 _nop_();
253 2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -