📄 24e1_repeater.lst
字号:
206 1 }
207
208 /*****************************************************************************************
209 //函数名:TimerInit()
210 //输入:无
211 //输出:无
212 //功能描述:定时器0初始化
213 /*****************************************************************************************/
214 void TimerInit(void)
215 {
216 1 timer[0] = timer[1] = 0;
217 1
218 1 TR0 = 0;
219 1 TMOD &= ~0x03;
220 1 TMOD |= 0x01; // mode 1
221 1 CKCON |= 0x08; // T0M = 1 (/4 timer clock)
222 1 t0lrel = 0x60; // 1KHz tick...
223 1 t0hrel = 0xF0; // ... = 65536-16e6/(4*1e3) = F060h
224 1 TF0 = 0; // Clear any pending Timer0 interrupts
225 1 TR0 = 1; // Start Timer0
226 1 ET0 = 1; // Enable Timer0 interrupt
227 1 }
228
229 /*****************************************************************************************
230 //函数名:ResetTimer(int8u n)
231 //输入:要复位的计时器
232 //输出:无
233 //功能描述:复位计时器
234 /*****************************************************************************************/
235 void ResetTimer(int8u n)
236 {
237 1 ET0 = 0; // Disable Timer0 interrupt
238 1 timer[n & 0x01] = 0; // Clear timer[n]
239 1 ET0 = 1; // Enable Timer0 interrupt
240 1 }
241 /*****************************************************************************************
C51 COMPILER V7.08 24E1_REPEATER 11/17/2006 16:36:46 PAGE 5
242 //函数名:ReadTimer()
243 //输入:要读的计时器
244 //输出:读出值
245 //功能描述:读计时器
246 /*****************************************************************************************/
247 unsigned ReadTimer(int8u n)
248 {
249 1 unsigned tmp;
250 1 ET0 = 0; // Disable Timer0 interrupt
251 1 tmp = timer[n]; // Clear timer[n]
252 1 ET0 = 1; // Enable Timer0 interrupt
253 1 return tmp;
254 1 }
255
256 /*****************************************************************************************
257 //函数名:SciInit()
258 //输入:无
259 //输出:无
260 //功能描述:串口初始化
261 /*****************************************************************************************/
262 void SciInit(void)
263 {
264 1 TH1 = 0xe6; // 9600@16MHz (when T1M=1 and SMOD=1)
265 1 CKCON |= 0x10; // T1M=1 (/4 timer clock)
266 1 PCON = 0x80; // SMOD=1 (double baud rate)
267 1 SCON = 0x52; // Serial mode1, enable receiver
268 1 TMOD = 0x20; // Timer1 8bit auto reload
269 1 TR1 = 1; // Start timer1
270 1 P0_ALT |= 0x06; // Select alternate functions on pins P0.1 and P0.2
271 1 P0_DIR &= 0x0F; //led p0.4 p0.5 output
272 1 P0_DIR |= 0x48; // P0.3 is input p0.6 input
273 1 ES = 0;
274 1 EA=1;
275 1 }
276
277
278 /*****************************************************************************************
279 //函数名:SetRxMode()
280 //输入:无
281 //输出:无
282 //功能描述:转为接收模式
283 /*****************************************************************************************/
284 void SetRxMode(void)
285 {
286 1 int8u ch;
287 1 CS = 1;
288 1 Delay100us(0);
289 1 ch = FRESELE << 1;
290 1 SpiReadWrite(ch | 0x01);
291 1 CS = 0;
292 1 }
293 /*****************************************************************************************
294 //函数名:SetTxMode()
295 //输入:无
296 //输出:无
297 //功能描述:转为发送模式
298 /*****************************************************************************************/
299 void SetTxMode(void)
300 {
301 1 int8u ch;
302 1 CS = 1;
303 1 Delay100us(0);
C51 COMPILER V7.08 24E1_REPEATER 11/17/2006 16:36:46 PAGE 6
304 1 ch = FRESELE << 1;
305 1 SpiReadWrite(ch);
306 1 CS = 0;
307 1 }
308 /*****************************************************************************************
309 //函数名:SendC()
310 //输入:发送的数据
311 //输出:无
312 //功能描述:串口初始化
313 /*****************************************************************************************/
314 void SendCh(char c)
315 {
316 1 TI = 0;
317 1 SBUF = c;
318 1 while(!TI);
319 1 TI = 0;
320 1 }
321
322 /*****************************************************************************************
323 //函数名:Nrf24E1Init()
324 //输入:无
325 //输出:无
326 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
327 /*****************************************************************************************/
328 void Nrf24E1Init()
329 {
330 1 int8u i;
331 1 SPICLK = 0; // Max SPI clock
332 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
333 1 CE = 0;
334 1 CS = 1; // RF SPI CS = 1
335 1 Delay100us(0);
336 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
337 1 for(i=1;i<15;i++)
338 1 {
339 2 SpiReadWrite(RFConfig[i]);
340 2 }
341 1 CS = 0;
342 1
343 1 Delay100us(30);
344 1 }
345
346
347 /*****************************************************************************************
348 //函数名:Nrf24E1Init()
349 //输入:无
350 //输出:无
351 //功能描述:Nrf24E1Init初始化,这里我们配置成32位地址。
352 /*****************************************************************************************/
353 void Nrf24E1Init2()
354 {
355 1 int8u i;
356 1 SPICLK = 0; // Max SPI clock
357 1 SPI_CTRL = 0x02; // Connect internal SPI controller to Radio
358 1 CE = 0;
359 1 CS = 1; // RF SPI CS = 1
360 1 Delay100us(0);
361 1 SpiReadWrite(0x00); // We are not using the DuoCeiver functionallity
362 1 for(i=1;i<15;i++)
363 1 {
364 2 SpiReadWrite(RFConfig2[i]);
365 2 }
C51 COMPILER V7.08 24E1_REPEATER 11/17/2006 16:36:46 PAGE 7
366 1 CS = 0;
367 1
368 1 Delay100us(30);
369 1 }
370
371 /*****************************************************************************************
372 //函数名:int8u WaitAck(void)
373 //输入:无
374 //输出:返回应答信号
375 //功能描述:等待应答,并返回应答信号
376 /*****************************************************************************************/
377 int8u WaitAck(void)
378 {
379 1 int8u ack;
380 1 SetRxMode();
381 1 CE = 1;
382 1 ResetTimer(0);
383 1 while(DR1 == 0)
384 1 {
385 2 if (ReadTimer(0) > 10) // 3ms time-out/10MS
386 2 {
387 3 CE = 0;
388 3 return 0;
389 3 }
390 2 }
391 1 ack = SpiReadWrite(0);
392 1 while(DR1)
393 1 {
394 2 SpiReadWrite(0);
395 2 }
396 1 CE = 0;
397 1 return ack;
398 1 }
399
400 /*****************************************************************************************
401 //函数名:TransmitPacket(int8u *pBuf)
402 //输入:发送的数据
403 //输出:无
404 //功能描述:发送发送缓冲区的数据
405 /*****************************************************************************************/
406 /*****************************************************************************************
407 //函数名:TransmitPacket(int8u *pBuf)
408 //输入:发送的数据
409 //输出:无
410 //功能描述:发送发送缓冲区的数据
411 /*****************************************************************************************/
412 TransmitPacket(int8u *pBuf,int8u crc)
413 {
414 1 int8u i;
415 1
416 1 SetTxMode();
417 1 CE = 1;
418 1 Delay100us(1);
419 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -