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