📄 maintest_20050712_6.lst
字号:
318 pReDa++;
319 }
320 T_CLK = 1;
321 T_RST =0;
322 }
323 */
324
325 /********************************************************************
326 *
327 * 名称: v_Set1302
328 * 说明:
329 * 功能: 设置初始时间
330 * 调用: v_W1302()
331 * 输入: pSecDa: 初始时间地址。初始时间格式为: 秒 分 时 日 月 星期 年
332 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
333 * 返回值: 无
334 ***********************************************************************/
335 void v_Set1302(uchar *pSecDa)
336 {
337 1 uchar i;
338 1 uchar ucAddr = 0x80;
339 1 v_W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
340 1 for(i =7;i>0;i--)
341 1 {
342 2 v_W1302(ucAddr,*pSecDa); /* 秒 分 时 日 月 星期 年 */
343 2
344 2 pSecDa++;
345 2 ucAddr +=2;
346 2 }
347 1 v_W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
348 1 }
349
350
351 /********************************************************************
352 *
353 * 名称: v_Get1302
354 * 说明:
355 * 功能: 读取DS1302当前时间
356 * 调用: uc_R1302()
357 * 输入: ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
358 * 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
359 * 返回值: 无
360 ***********************************************************************/
361 void v_Get1302(uchar ucCurtime[])
362 {
363 1 uchar i;
364 1 uchar ucAddr = 0x81;
365 1 for (i=0;i<7;i++)
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 7
366 1 {
367 2 ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
368 2 ucAddr += 2;
369 2 }
370 1 }
371
372 void Uart_Send(unsigned char data1)
373 {
374 1 SBUF = data1;
375 1 while(!TI);
376 1 TI = 0;
377 1 }
378
379 void timer0_int(void) interrupt 1
380 {
381 1 TR0 = 0;
382 1 TH0 = 0xFF;
383 1 TL0 = 0x20;
384 1 TR0 = 1;
385 1
386 1 if(finding == 0) //寻找信号头
387 1 {
388 2 HeadL = HeadL << 1;
389 2 HeadL |= P3_5;
390 2 if((HeadL&0xFFFFF) == 0x6AAAA)
391 2 {
392 3 finding = 1;
393 3 HeadL = 0;
394 3 }
395 2 }
396 1 else //处理信号数据
397 1 {
398 2 data1 = data1 << 1;
399 2 data1 |= P3_5;
400 2 counter ++;
401 2 if( counter == 10 )
402 2 {
403 3 cardid[pointer++] = data1;
404 3 counter = 0;
405 3 data1 = 0;
406 3 }
407 2 if( pointer >= 11 )
408 2 {
409 3 EX0 = 0;
410 3 TR0 = 0;
411 3 finded = 1 ;
412 3 }
413 2
414 2 }
415 1 }
416
417 void int0_int(void) interrupt 0
418 {
419 1 //P1_0 = ~P1_0;
420 1 EX0 = 0;
421 1 //if( !finded )
422 1 {
423 2 TR0 = 0;
424 2 TH0 = 0xFF;
425 2 TL0 = 0xF0; //0xFA is also good.
426 2 TR0 = 1;
427 2 }
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 8
428 1 writetime2( );
429 1 EX0 = 1;
430 1
431 1
432 1
433 1 }
434
435 void UART_int(void) interrupt 4
436 {
437 1 if( RI )
438 1 {
439 2 RI = 0;
440 2 CmdBuff[CmdPointer] = SBUF;
441 2 if( CmdPointer == 0 && CmdBuff[0] == 0x5A )
442 2 CmdPointer ++;
443 2 else if( CmdPointer == 1 && CmdBuff[1] == 0xA5 )
444 2 {
445 3 CmdPointer ++;
446 3 }
447 2 else if( CmdPointer >= 2 )
448 2 {
449 3
450 3 switch( CmdBuff[2] )
451 3 {
452 4 case 0x01:
453 4 if( CmdPointer == 3 )
454 4 {
455 5 RcvCmd = 0x01;
456 5 CmdPointer = 0;
457 5 }
458 4 break;
459 4 case 0x03:
460 4 if( CmdPointer == 9 )
461 4 {
462 5 RcvCmd = 0x01;
463 5 CmdPointer = 0;
464 5 }
465 4 break;
466 4 }
467 3 CmdPointer ++;
468 3 }
469 2
470 2 }
471 1 }
472
473
474 //UART初始化
475 void Uart_Init(void)
476 {
477 1 TMOD=0x20;
478 1 TH1=0XFD;
479 1 TL1=0xFD;
480 1 PCON=0x00;
481 1 SCON=0x50;
482 1 TR1=1;
483 1 }
484
485 void main()
486 {
487 1 unsigned char i=0,j = 0 ;
488 1 int temp = 0 , a = 0;
489 1 unsigned char row = 0;
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 9
490 1 unsigned char col = 0;
491 1
492 1
493 1 Uart_Init();
494 1 //TI = 0;
495 1
496 1 TMOD = 0x21;
497 1 EA = 1;
498 1 ES = 1;
499 1 ET0 = 1;
500 1
501 1 //开定时器0
502 1 TR0 = 0;
503 1 TH0 = 0xFF;
504 1 TL0 = 0xFF;
505 1 TR0 = 1;
506 1 ET0 = 1;
507 1
508 1 //开中断0
509 1 IT0 = 1;
510 1 EX0 = 1;
511 1
512 1 //设置时钟初始时间
513 1 v_Set1302(b);
514 1
515 1 while(1)
516 1 {
517 2 if(finded == 1)
518 2 {
519 3 //EX0 = 0;
520 3 TR0 = 0;
521 3 finding = 0;
522 3 //Uart_Send(0xDD);
523 3 pointer = 0;
524 3 counter = 0;
525 3 col = 0;
526 3 for(i = 0; i < 11; i++)
527 3 {
528 4 a = 0;
529 4 row = 0;
530 4
531 4 for( j = 0 ; j < 5 ; j ++ )
532 4 {
533 5 temp = cardid[i] & 0x300;
534 5 cardid[i] = cardid[i] << 2;
535 5 if( temp == 0x100 )
536 5 {
537 6 a = a << 1;
538 6 a |= 0;
539 6
540 6 }
541 5 else if( temp == 0x200 )
542 5 {
543 6 a = a << 1;
544 6 a |= 0x1;
545 6 if( i != 10 )
546 6 row ++;
547 6 //a = a << 1;
548 6 }
549 5 else
550 5 {
551 6 break;
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 10
552 6 }
553 5 //col |= 1<<j
554 5 writetime2( );
555 5 }
556 4 if( (j < 5) || (row & 0x01) )
557 4 {
558 5 //Uart_Send(row );
559 5 //Uart_Send( cardid[i]);
560 5 break;
561 5 }
562 4
563 4 cardid[i] = (a>>1);
564 4 //Uart_Send(0xFF);
565 4 //Uart_Send(col);
566 4 //Uart_Send( cardid[i]);
567 4 col ^= cardid[i];
568 4 //Uart_Send(col);
569 4 //Uart_Send(cardid[i] & 0xFF );
570 4
571 4 }
572 3 if(( i < 11 )||(col & 0x0F))
573 3 {
574 4 //Uart_Send(col);
575 4 finded = 0;
576 4 TR0 = 1;
577 4 EX0 = 1;
578 4 continue;
579 4 }
580 3 for( i = 0 ; i < 10 ; i ++ )
581 3 {
582 4 Uart_Send(cardid[i] );
583 4 cardid[i] = 0;
584 4 writetime2( );
585 4 }
586 3 finded = 0;
587 3 TR0 = 1;
588 3 EX0 = 1;
589 3
590 3
591 3
592 3 }//if( finded == 1 )
593 2 //else if((showflag > 3)&&(findhead == 0)&&(finding == 0))
594 2 {
595 3 //EX0 = 0;
596 3 //TR0 = 0;
597 3 //show++;
598 3 v_Get1302(b);
599 3 writetime1(&b[0],1);
600 3 //writetime2( );
601 3 showflag = 0;
602 3 //TR0 = 1;
603 3 //EX0 = 1;
604 3 }
605 2 //else
606 2 // showflag ++;
607 2
608 2
609 2 //串口操作
610 2 //*
611 2 if( RcvCmd )
612 2 {
613 3 RcvCmd = 0;
C51 COMPILER V7.06 MAINTEST_20050712_6 07/15/2005 21:33:30 PAGE 11
614 3 switch( CmdBuff[2] )
615 3 {
616 4 case 0x01:
617 4
618 4 break;
619 4 case 0x03:
620 4 //秒 分 时 日 月 星期 年
621 4 v_Set1302(&CmdBuff[3]);
622 4 break;
623 4 }
624 3 }
625 2 //*/
626 2 }//while(1)
627 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1115 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 66 12
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 + -