📄 rf24e1.lst
字号:
140 1 return SPI_DATA;
141 1 }
142 //================================================================
143 //函数功能:将无线子系统设置为接收模式
144 //on the spec.page26:
145 //If nFRF2401 subsystem is to be configured for 2 channel RX in ShockBuust
146 //a total of 120 bits must be shifted in during the first configuration after VDD is
147 //applied.Once the wanted protocol,modus and RF channed are set ,only one bit(RXEN) is
148 //shifted in to switch between RX and TX.So this function can do that like it.
149 //On the spec.page28
150 //After VDD is turned on shockburst configureation is done once and remains set whilst VDD is
151 //present.during operation only the first byte for frequecy channel and Rx/Tx switch need
152 //to be changed!
153 //We can be so lasy!!
154 //filename:SetRxMode()
155 //input:none
156 //output:none
157 //================================================================
158 static void SetRxMode(void)
159 {
160 1 CE = 0;
161 1 CS = 1;
162 1 Delay100us(0);
163 1 SpiReadWrite(rconf.buf[14]);
164 1 CS = 0;
165 1 }
166 //================================================================
167 //函数功能:将无线子系统设置为发射模式
168 //filename:SetRxMode()
169 //input:none
170 //output:none
171 //================================================================
172
173 static void SetTxMode(void)
174 {
175 1 CE = 0;
176 1 CS = 1;
177 1 Delay100us(0);
C51 COMPILER V8.02 RF24E1 10/05/2006 09:38:17 PAGE 4
178 1 SpiReadWrite(tconf.buf[14]);
179 1 CS = 0;
180 1 }
181 //================================================================
182 //函数功能:将无线子系统初始化
183 //filename:SetRxMode()
184 //input:none
185 //output:none
186 //================================================================
187 void fRfInit(void){
188 1 uchar b;
189 1 PWR_UP = 1; // Turn on Radio
190 1 Delay100us(30); // Wait > 3ms
191 1 SPICLK = 0; // Max SPI clock (XTAL/8)
192 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
193 1 CS = 1; // RF SPI CS = 1,进行配置
194 1 Delay100us(0);
195 1 for(b=0;b<rconf.n;b++) //初始化位接收状态
196 1 {
197 2 SpiReadWrite(rconf.buf[b]);
198 2 }
199 1 CS = 0; //退出配置状态
200 1 Delay100us(0);
201 1 CE = 1; //启动接收
202 1 }
203
204 //================================================================
205 //函数功能:发射一数据包(8个字节的采样值)
206 //filename:TransmitPacket()
207 //input:
208 //output:none
209 //2006-8-17:修改内容:先校正后再发送,
210 // 修改前:逐个校正逐个发送
211 //2006-8-18:加形参,为零校正发射,为1不校正,因为这时上位机控制(在系统校正)
212 //2006-8-31:去掉形参,不考虑在系统校正,没事做
213 //2006-9-05:增加无线发送缓冲区(rFtxBuf[]),以免采样缓冲区被这个函数修改(问题很严重)
214 //2006-9-26:校正不要在无线发送函数里执行,因为每次都要发送2次才成功,节约时间
215 //================================================================
216
217 void TransmitPacket(void)
218 {
219 1 unsigned char i;
220 1 /*
221 1 for(i=0;i<4;i++)
222 1 rFtxBuf[i]=Calibration(i);
223 1 */
224 1 CE = 1;
225 1 Delay100us(0);
226 1 for(i=0;i<ADDR_COUNT;i++)
227 1 SpiReadWrite(tconf.buf[ADDR_INDEX+i]); //写目标地址
228 1
229 1 for(i=0;i<4;i++)
230 1 {
231 2 SpiReadWrite((unsigned char)(rFtxBuf[i]>>8));//写数据(8字节)
232 2 SpiReadWrite((unsigned char)(rFtxBuf[i]&0xff));
233 2 }
234 1 CE = 0;
235 1 Delay100us(3); // Wait ~300us
236 1 }
237 /*****************************************************************************************
238 //函数名:RxCmd()
239 //输入:none
C51 COMPILER V8.02 RF24E1 10/05/2006 09:38:17 PAGE 5
240 //输出:输出接收到的一个字节
241 //功能描述:接收主站命令
242 /*****************************************************************************************/
243 unsigned char RxCmd(void)
244 {
245 1 unsigned char b;
246 1 /* CE = 1;
247 1 while(DR1 == 0);
248 1 while(DR1)
249 1 {*/
250 1 b = SpiReadWrite(0);
251 1 return b;
252 1 //CE = 0;
253 1
254 1 }
255 /*****************************************************************************************
256 //函数名:SendC()
257 //输入:发送的数据
258 //输出:无
259 //功能描述:串口发送
260 /*****************************************************************************************/
261 void SendCh(unsigned char c)
262 {
263 1 EA=0;
264 1 TI=0;
265 1 SBUF = c;
266 1 while(!TI);
267 1 TI=0;
268 1 EA=1;
269 1
270 1 }
271
272 /*****************************************************************************************
273 //函数名:void InitADC(void)
274 //输入:无
275 //输出:无
276 //功能描述:Nrf24E1ADC初始化
277 /*****************************************************************************************/
278 void InitADC()
279 {
280 1 ADCCON = 0x20; // NPD=1,内部参考电压20 ->30 test!!!!!!11
281 1 ADCSTATIC &= 0x1c;
282 1 #if adc12bits
283 1 ADCSTATIC |= 0x03; // 12位ADC
284 1 #else
ADCSTATIC |=0x02; //10bits
#endif
287 1 }
288 /*****************************************************************************************
289 //函数名
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -