📄 tag.lst
字号:
219 1 Delay();
220 1 CLK1=1; // CLK1=1;
221 1 Delay();
222 1 CLK1=0; //CLK1=0;
223 1
224 1 P4=P4&CS0; //CS=0; 4.3 1111 0111; ????¨?DD?ì
225 1 P4=P4|CE1; //CE=1; 4.2 0000 0100 ??¨¨??¤??¨???¨??
226 1 Delay100();
227 1 }
228 void SetRxMode(void)
229 {
230 1 unsigned int i;
231 1 P4=P4&CS0;
232 1 P4=P4&CE0;
233 1 CLK1=0;
234 1 DATA=0;
235 1
236 1 P4=P4|PWR_UP1; //????????????
237 1 for(i=0;i<10;i++)
238 1 Delay100();
239 1
240 1 P4=P4|CS1; //????????????
241 1 Delay100();
C51 COMPILER V8.02 TAG 08/12/2008 00:06:05 PAGE 5
242 1
243 1 CLK1=0;
244 1 DATA =1;
245 1 Delay();
246 1
247 1 CLK1=1; // CLK1=1;
248 1 Delay();
249 1
250 1 CLK1=0;//P4=P4&0XFE; //CLK1=0;
251 1 P4=P4&CS0; //CS=0; 4.3 1111 0111;
252 1 P4=P4|CE1; //CE=1; 4.2 0000 0100 ??¨¨??¤??¨???¨??
253 1 Delay100();
254 1 Delay100();
255 1
256 1 }
257 //进行Manchester编码
258 void Manchester_fun(unsigned char *TxBuf)
259 {
260 1 unsigned char i,k=0;
261 1 for (i=0;i<8;i++)
262 1 {
263 2 if(TxBuf[i]==1)
264 2 {
265 3 Manchesterbuf[k]=1;
266 3 k++;
267 3 Manchesterbuf[k]=0;
268 3 k++;
269 3 }
270 2 else
271 2 {
272 3 Manchesterbuf[k]=0;
273 3 k++;
274 3 Manchesterbuf[k]=1;
275 3 k++;
276 3 }
277 2 }
278 1 }
279 //接收方通道硬件地址
280 unsigned char TxAddress[]={0xcc,0xcc,0xcc,0xcc};
281 //nRF2401数据发送函数
282 void nRF2401_TxPacket(unsigned char TxBuf[])
283 {
284 1 int i;
285 1 unsigned char variable2;
286 1 Manchester_fun(TxBuf);
287 1 P4=P4|PWR_UP1;
288 1 P4=P4&CS0;
289 1 P4=P4&CE0; //进入空闲模式
290 1 CLK1=0;
291 1 DATA=0;
292 1 Delay();
293 1
294 1 P4=P4|CE1; //进入收发模式
295 1 Delay100();
296 1
297 1 for(i=0;i< (ADDR_W/8);i++) //写入接收地址(按字节对齐)
298 1 {
299 2 variable2=TxAddress[i];
300 2 ByteWrite(variable2);
301 2 }
302 1 for(i=0;i<(DATA1_W/8);i++) //写入需要发送的数据(按字节对齐)
303 1 {
C51 COMPILER V8.02 TAG 08/12/2008 00:06:05 PAGE 6
304 2 variable2=Manchesterbuf[i];
305 2 ByteWrite(variable2);
306 2 }
307 1 P4=P4&CE0; //CE置低使发送有效
308 1 Delay100();
309 1 Delay100();
310 1 }
311
312
313
314 unsigned int comparative_fun(unsigned char Readdatabuf[8],unsigned char Txbuf[8])
315 {
316 1 unsigned int i,flag=0;
317 1 for(i=0;i<8;i++)
318 1 {
319 2 if(Readdatabuf[i]>Txbuf[i])
320 2 {
321 3 flag=1; //判断到接收的数据比自己的标签号大
322 3 break;
323 3 }
324 2 if(Readdatabuf[i]<Txbuf[i]) //判断到接收的数据比自己的标签号小
325 2 {
326 3 flag=2;
327 3 break;
328 3 }
329 2 }
330 1 if(flag==1)
331 1 { return 1; } //标签号小于接受的数据返回标志1
332 1 else if (flag==2)
333 1 { return 2; } //标签号大于接受的数据返回标志2
334 1 else if (flag==0)
335 1 { return 0; } //标签号相同返回标志0
336 1
337 1
338 1 }
339
340 void Redadata_fun(unsigned char *Rxbuf,unsigned char *Readdatabuf)
341 {
342 1 unsigned char i=0,k=0;
343 1 for(i=0;i<16;i=i+2)
344 1 {
345 2 if((Rxbuf[i]==1)&&(Rxbuf[i+1]==0))
346 2 {
347 3 Readdatabuf[k]=1; //收到的数据是下降沿,即为数据1;
348 3 }
349 2 else
350 2 {
351 3 Readdatabuf[k]=0; //收到的数据是上降沿,即为数据0;
352 3 }
353 2 k++;
354 2 }
355 1 }
356
357
358 void main(void)
359 {
360 1 unsigned char Txbuf1[8]={1,0,1,0,1,0,1,1,},Rxbuf[16];
361 1 unsigned char Txbuf2[8]={0,0,0,0,0,0,0,0,};
362 1 unsigned char Txbuf3[8]={0,1,1,0,0,1,0,0,};
363 1 unsigned char send_flag=0,recive_flag=0,LED=0X1C;
364 1 unsigned int countbit;
365 1 unsigned int *p=&countbit;
C51 COMPILER V8.02 TAG 08/12/2008 00:06:05 PAGE 7
366 1 unsigned int over_flag=1,comparative_flag;
367 1 unsigned char Readdatabuf[8];
368 1
369 1 unsigned long int i,k;
370 1 WDTCN=0xde; // 禁止看门狗定时器
371 1 WDTCN=0xad;
372 1 SYSCLK_Init(); //初始化CPU;
373 1 UART0_Init(); //配置串口
374 1 Config2401(); //配置nRF2401;
375 1
376 1 P6=P6&LED_ON;
377 1 while(1)
378 1 {
379 2
380 2 while(over_flag==1)
381 2 {
382 3 SetRxMode(); //处于接收模式
383 3 P4=P4|CE1; // 接收使能
384 3 for(i=0;i<250;i++) //延时等待接收数据
385 3 {
386 4 for(k=0;k<50;k++)
387 4 {
388 5 Delay100();
389 5 }
390 4
391 4 }
392 3 while((P4&DR1)!=0) //判断是否接收到数据
393 3 {
394 4 nrf2401_Rxpack(Rxbuf,p); //读取数据;
395 4 Redadata_fun(Rxbuf,Readdatabuf); //把数据转换为没有编码的原始数据
396 4 comparative_flag=comparative_fun(Readdatabuf,Txbuf3); //接收到的数据与自己的数据进行比较
397 4 for(k=0;k<50;k++)
398 4 {
399 5 Delay100();
400 5 }
401 4 if(comparative_flag==1) //再回应范围以内,发送数据
402 4 { i=0;
403 5 while(i<500)
404 5 {
405 6 SetTxMode( );
406 6 i++;
407 6 P4=P4|CE1;
408 6 nRF2401_TxPacket(Txbuf3); //发送数据
409 6 P6=P6|LED;
410 6 LED=LED+2;
411 6 P6=P6&LED;
412 6 for(k=0;k<6;k++)
413 6 {
414 7 Delay100();
415 7 }
416 6 }
417 5 }
418 4 if(comparative_flag==0)
419 4 {
420 5 over_flag=0; //收到确认信息,over_flag=0; 失去活性
421 5 }
422 4 P6=P6|LED_OFF; //0001 1100;¨¨?2??e
423 4 }
424 3 }
425 2
426 2 }
427 1 }
C51 COMPILER V8.02 TAG 08/12/2008 00:06:05 PAGE 8
428
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1245 ----
CONSTANT SIZE = 42 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 21 93
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -