📄 nrf2401.lst
字号:
C51 COMPILER V8.17 NRF2401 02/02/2009 22:23:53 PAGE 1
C51 COMPILER V8.17, COMPILATION OF MODULE NRF2401
OBJECT MODULE PLACED IN nRF2401.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE nRF2401.c OPTIMIZE(7,SPEED) BROWSE DEBUG OBJECTEXTEND
line level source
1 //====================================================================================
2 //文 件 名: nRF2401.c
3 //功能描述: nRF2401的驱动程序
4 //维护记录: 2006年10月20
5 //====================================================================================
6
7 #include "C8051F330.h"
8
9 sbit PWR = P1^0;
10 sbit CE = P1^1;
11 sbit CS = P1^2;
12 sbit DR1 = P1^3;
13 sbit CLK1 = P1^4;
14 sbit DATA = P1^5;
15
16 code unsigned int InitData[15] = // nRF2401 控制字 15 Byte
17 {
18 // 0x01,
19 // 0x01,
20 // 0x01,
21 0x08, // 通道二接收数据宽度(bit)
22 0x08, // 通道一接收数据宽度(bit)
23 0x00, // 通道二地址(A24)
24 0x00, // 通道二地址(A23)
25 0x00, // 通道二地址(A22)
26 0x00, // 通道二地址(A21)
27 0x01, // 通道二地址(A20)
28 0x00, // 通道一地址(A14)
29 0x00, // 通道一地址(A13)
30 0x00, // 通道一地址(A12)
31 0x00, // 通道一地址(A11)
32 0x01, // 通道一地址(A10)
33 0xA3, // b7~b2:接收地址宽度,和发送端一致,不超过40bit;
34 // b1~b0:CRC模式选择(01-8bit;11-16bit;00/10-no)
35 0x4f, // b15:接收通道选择(0-通道1;1-通道1和2)
36 // b14:收发模式(0-Direct模式,1-ShockBurst模式)
37 // b13:波特率选择(0-250Kbps;1-1Mbps)
38 // b12~b10:晶振选择(000-4M;001-8M;010-12M;011-16M)
39 // b9~b8:发射功率(11-0db)
40 0x05 // b7~b1:发射频率配置
41 // b0:收发控制(0-发送;1-接收)
42 };
43 unsigned int idata AddrBuffer[5]; // 地址寄存器
44 unsigned int AddrByteCnt; // 地址Byte数
45
46 unsigned int idata AddrBuffer[5]; // 地址寄存器
47 unsigned int AddrByteCnt; // 地址Byte数
48
49 void nRF2401_ON(); // nRF2401A上电
50 void nRF2401_OFF(); // nRF2401A掉电
51 void nRF2401_Initial(); // nRF2401A初始化
52 void nRF2401_WriteCommand(); // nRF2401A写命令字
53 void nRF2401_WriteByte(unsigned int uiData); // 向nRF2401A写入一个Byte
54 void nRF2401_WriteWord(unsigned int uiData); // 向nRF2401A写入一个Word
55 void nRF2401_Mode(unsigned int uiMode); // 切换nRF2401A收/发模式
C51 COMPILER V8.17 NRF2401 02/02/2009 22:23:53 PAGE 2
56 void nRF2401_SendByte(unsigned int TxData);
57 // 将字节数据写入nRF2401A
58 void nRF2401_SendWord(unsigned int TxData);
59 // 将字数据写入nRF2401A
60 void nRF2401_SendBuffer_Byte(unsigned int TxData[],unsigned int DataByte);
61 // 将数组数据写入nRF2401A
62 void nRF2401_SendBuffer_Word(unsigned int TxData[],unsigned int DataWord);
63 // 将数组数据写入nRF2401A
64 unsigned int nRF2401_RxStatus(); // 判断nRF2401A是否有数据接收
65 void nRF2401_ReceiveByte(unsigned int RxData[]);// 以Byte格式从nRF2401A读数据
66 void nRF2401_ReceiveWord(unsigned int RxData[]);// 以Word格式从nRF2401A读数据
67 void nRF2401_SetAddress(unsigned int Address[],unsigned int AddrByte);
68 // 设置目标nRF2401A的地址
69 void Delay_Us(unsigned int TimeCnt); // 延时(uS)
70
71 //=============================================================
72 // 语法格式: void nRF2401_Initial(void)
73 // 实现功能: nRF 初始化
74 // 参数: 无
75 // 返回值: 无
76 //=============================================================
77 void nRF2401_Initial(void)
78 {
79 1 /* *P_SystemClock = 0x98; // 设置系统时钟为49MHz
80 1 *P_IOB_Attrib |= (CS+DATA+PWR+CLK1+CE+DR1);
81 1 *P_IOB_Dir |= (CS+DATA+PWR+CLK1+CE);
82 1 *P_IOB_Dir&=~DR1;
83 1 *P_IOB_Buffer &=~(CS+DATA+CLK1+CE+DR1); // 初始化IO端口 */
84 1
85 1 nRF2401_ON();
86 1 Delay_Us(3000);
87 1 nRF2401_WriteCommand(); // 向nRF2401A写命令字
88 1 Delay_Us(300);
89 1 }
90
91 //=============================================================
92 // 语法格式: void nRF2401_ON(void)
93 // 实现功能: nRF 上电
94 // 参数: 无
95 // 返回值: 无
96 //=============================================================
97 void nRF2401_ON(void)
98 {
99 1 /**P_IOB_Buffer |= PWR;*/
100 1 PWR = 1;
101 1 Delay_Us(1);
102 1 }
103
104 //=============================================================
105 // 语法格式: void nRF2401_OFF(void)
106 // 实现功能: nRF 掉电
107 // 参数: 无
108 // 返回值: 无
109 //=============================================================
110 void nRF2401_OFF(void)
111 {
112 1 PWR = 0; //*P_IOB_Buffer &= ~PWR;
113 1 Delay_Us(1);
114 1 }
115
116 //=============================================================
117 // 语法格式: void nRF2401_WriteCommand(void)
C51 COMPILER V8.17 NRF2401 02/02/2009 22:23:53 PAGE 3
118 // 实现功能: nRF 写命令字
119 // 参数: 无
120 // 返回值: 无
121 //=============================================================
122 void nRF2401_WriteCommand(void)
123 {
124 1 unsigned int i;
125 1 CE= 0; //*P_IOB_Buffer &= ~CE;
126 1 CS = 1; //*P_IOB_Buffer |= CS;
127 1 Delay_Us(1);
128 1 Delay_Us(1);
129 1 for(i=0; i<15; i++)
130 1 {
131 2 nRF2401_WriteByte(InitData[i]);
132 2 }
133 1 Delay_Us(1);
134 1 CS = 0; //*P_IOB_Buffer &= ~CS;
135 1 CE = 1; //*P_IOB_Buffer |= CE;
136 1 }
137
138 //=============================================================
139 // 语法格式: void nRF2401_Mode(unsigned int uiMode)
140 // 实现功能: 设置nRF2401A的工作方式
141 // 参数: uiMode:0--接收;1--发送
142 // 返回值: 无
143 //=============================================================
144 void nRF2401_Mode(unsigned int uiMode)
145 {
146 1 CE = 0; //*P_IOB_Buffer &= ~CE;
147 1 CS = 1; //*P_IOB_Buffer |= CS;
148 1 Delay_Us(1);
149 1 if(uiMode == 0)
150 1 nRF2401_WriteByte(InitData[14] | 0x01); // 接收
151 1 else
152 1 nRF2401_WriteByte(InitData[14] & 0xFE); // 发送
153 1 Delay_Us(1);
154 1 CS = 0; //*P_IOB_Buffer &= ~CS;
155 1 CE = 1; //*P_IOB_Buffer |= CE;
156 1 }
157
158 //=============================================================
159 // 语法格式: void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
160 // 实现功能: 设置目标nRF2401A的地址
161 // 参数: unsigned int *Address:地址数组
162 // unsigned int AddrByte:数组的长度
163 // 返回值: 无
164 //=============================================================
165 void nRF2401_SetAddress(unsigned int *Address,unsigned int AddrByte)
166 {
167 1 unsigned int i;
168 1 for(i=0; i<AddrByte; i++)
169 1 {
170 2 AddrBuffer[i] = Address[i];
171 2 }
172 1 AddrByteCnt = AddrByte;
173 1 }
174
175 //=============================================================
176 // 语法格式: void nRF2401_WriteByte(unsigned int uiData)
177 // 实现功能: 向nRF2401A写入一个字节数据
178 // 参数: unsigned int uiData: 待写入数据
179 // 返回值: 无
C51 COMPILER V8.17 NRF2401 02/02/2009 22:23:53 PAGE 4
180 //=============================================================
181 void nRF2401_WriteByte(unsigned int uiData)
182 {
183 1 unsigned int i;
184 1 for(i=0; i<8; i++)
185 1 {
186 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
187 2 if(uiData&0x80)
188 2 DATA = 1; //*P_IOB_Buffer |= DATA;
189 2 else
190 2 DATA = 0; //*P_IOB_Buffer &= ~DATA;
191 2 Delay_Us(1);
192 2 CLK1 = 1; //*P_IOB_Buffer |= CLK1;
193 2 Delay_Us(1);
194 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
195 2 uiData = uiData<<1;
196 2 }
197 1 }
198
199 //=============================================================
200 // 语法格式: void nRF2401_WriteWord(unsigned int uiData)
201 // 实现功能: 向nRF2401A写入一个字数据
202 // 参数: unsigned int uiData: 待写入数据
203 // 返回值: 无
204 //=============================================================
205 void nRF2401_WriteWord(unsigned int uiData)
206 {
207 1 unsigned int i;
208 1 for(i=0; i<16; i++)
209 1 {
210 2 CLK1 = 0; //*P_IOB_Buffer &= ~CLK1;
211 2 if(uiData&0x8000)
212 2 DATA = 1; //*P_IOB_Buffer |= DATA;
213 2 else
214 2 DATA = 0; //*P_IOB_Buffer &= ~DATA;
215 2 Delay_Us(1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -