📄 gt.lst
字号:
463
464 /********************************************************************
465 函 数 名:RTInputByte()
466 功 能:实时时钟写入一字节
467 说 明:往DS1302写入1Byte数据
468 入口参数:ucData 写入的数据
469 返 回 值:无
470 ***********************************************************************/
471 void RTInputByte(uchar ucData)
472 {
473 1 uchar i;
474 1 ACC = ucData;
475 1 for(i=8; i>0; i--)
476 1 {
C51 COMPILER V7.50 GT 10/28/2005 21:31:12 PAGE 9
477 2 T_IO = ACC0; /*相当于汇编中的 RRC */
478 2 T_CLK = 1;
479 2 T_CLK = 0;
480 2 ACC = ACC >> 1;
481 2 }
482 1 }
483 /********************************************************************
484 函 数 名:RTOutputByte()
485 功 能:实时时钟读取一字节
486 说 明:从DS1302读取1Byte数据
487 入口参数:无
488 返 回 值:Acc
489 ***********************************************************************/
490 uchar RTOutputByte(void)
491 {
492 1 uchar i;
493 1 for(i=8; i>0; i--)
494 1 {
495 2 ACC = ACC >>1; /*相当于汇编中的 RRC */
496 2 ACC7 = T_IO;
497 2 T_CLK = 1;
498 2 T_CLK = 0;
499 2 }
500 1 return(ACC);
501 1 }
502 /********************************************************************
503 函 数 名:W1302()
504 功 能:往DS1302写入数据
505 说 明:先写地址,后写命令/数据
506 调 用:RTInputByte() , RTOutputByte()
507 入口参数:ucAddr: DS1302地址, ucData: 要写的数据
508 返 回 值:无
509 ***********************************************************************/
510 void W1302(uchar ucAddr, uchar ucData)
511 {
512 1 T_CLK = 0;
513 1 T_RST = 0;
514 1 T_RST = 1;
515 1 RTInputByte(ucAddr); /* 地址,命令 */
516 1 RTInputByte(ucData); /* 写1Byte数据*/
517 1 T_RST = 0;
518 1 T_CLK = 1;
519 1
520 1 }
521 /********************************************************************
522 函 数 名:R1302()
523 功 能:读取DS1302某地址的数据
524 说 明:先写地址,后读命令/数据
525 调 用:RTInputByte() , RTOutputByte()
526 入口参数:ucAddr: DS1302地址
527 返 回 值:ucData :读取的数据
528 ***********************************************************************/
529 uchar R1302(uchar ucAddr)
530 {
531 1 uchar ucData;
532 1 T_CLK = 0;
533 1 T_RST = 0;
534 1 T_RST = 1;
535 1 RTInputByte(ucAddr); /* 地址,命令 */
536 1 ucData = RTOutputByte(); /* 读1Byte数据 */
537 1 T_RST = 0;
538 1 T_CLK = 1;
C51 COMPILER V7.50 GT 10/28/2005 21:31:12 PAGE 10
539 1
540 1 return(ucData);
541 1 }
542 /********************************************************************
543 函 数 名:BurstW1302T()
544 功 能:往DS1302写入时钟数据(多字节方式)
545 说 明:先写地址,后写命令/数据
546 调 用:RTInputByte()
547 入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
548 8Byte (BCD码)1B 1B 1B 1B 1B 1B 1B 1B
549 返 回 值:无
550 ***********************************************************************/
551 void BurstW1302T(uchar *pWClock)
552 {
553 1 uchar i;
554 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
555 1 T_CLK = 0;
556 1 T_RST = 0;
557 1 T_RST = 1;
558 1 RTInputByte(0xbe); /* 0xbe:时钟多字节写命令 */
559 1 for (i = 8; i>0; i--) /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
560 1 {
561 2 RTInputByte(*pWClock); /* 写1Byte数据*/
562 2 pWClock++;
563 2 }
564 1 T_RST = 0;
565 1 T_CLK = 1;
566 1 }
567 /********************************************************************
568 函 数 名:BurstR1302T()
569 功 能:读取DS1302时钟数据
570 说 明:先写地址/命令,后读数据(时钟多字节方式)
571 调 用:RTInputByte() , RTOutputByte()
572 入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
573 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
574 返 回 值:无
575 ***********************************************************************/
576 void BurstR1302T(uchar *pRClock)
577 {
578 1 uchar i;
579 1 T_CLK = 0;
580 1 T_RST = 0;
581 1 T_RST = 1;
582 1 RTInputByte(0xbf); /* 0xbf:时钟多字节读命令 */
583 1 for (i=8; i>0; i--)
584 1 {
585 2 *pRClock = RTOutputByte(); /* 读1Byte数据 */
586 2 pRClock++;
587 2 }
588 1 T_RST = 0;
589 1 T_CLK = 1;
590 1 }
591 /********************************************************************
592 函 数 名:BurstW1302R()
593 功 能:往DS1302寄存器数写入数据(多字节方式)
594 说 明:先写地址,后写数据(寄存器多字节方式)
595 调 用:RTInputByte()
596 入口参数:pWReg: 寄存器数据地址
597 返 回 值:无
598 ***********************************************************************/
599 void BurstW1302R(uchar *pWReg)
600 {
C51 COMPILER V7.50 GT 10/28/2005 21:31:12 PAGE 11
601 1 uchar i;
602 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作*/
603 1 T_CLK = 0;
604 1 T_RST = 0;
605 1 T_RST = 1;
606 1 RTInputByte(0xfe); /* 0xbe:时钟多字节写命令 */
607 1 for (i=31; i>0; i--) /* 31Byte 寄存器数据 */
608 1 {
609 2 RTInputByte(*pWReg); /* 写1Byte数据*/
610 2 pWReg++;
611 2 }
612 1 T_RST = 0;
613 1 T_CLK = 1;
614 1 }
615 /********************************************************************
616 函 数 名:BurstR1302R()
617 功 能:读取DS1302寄存器数据
618 说 明:先写地址,后读命令/数据(寄存器多字节方式)
619 调 用:RTInputByte() , RTOutputByte()
620 入口参数:pRReg: 寄存器数据地址
621 返 回 值:无
622 ***********************************************************************/
623 void BurstR1302R(uchar *pRReg)
624 {
625 1 uchar i;
626 1 T_CLK = 0;
627 1 T_RST = 0;
628 1 T_RST = 1;
629 1 RTInputByte(0xff); /* 0xff:时钟多字节读命令 */
630 1 for (i=31; i>0; i--) /*31Byte 寄存器数据 */
631 1 {
632 2 *pRReg = RTOutputByte(); /* 读1Byte数据 */
633 2 pRReg++;
634 2 }
635 1 T_RST = 0;
636 1 T_CLK = 1;
637 1 }
638 /********************************************************************
639 函 数 名:Set1302()
640 功 能:设置初始时间
641 说 明:先写地址,后读命令/数据(寄存器多字节方式)
642 调 用:W1302()
643 入口参数:pClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
644 7Byte (BCD码)1B 1B 1B 1B 1B 1B 1B
645 返 回 值:无
646 ***********************************************************************/
647 void Set1302(uchar *pClock)
648 {
649 1 uchar i;
650 1 uchar ucAddr = 0x80;
651 1 W1302(0x8e,0x00); /* 控制命令,WP=0,写操作?*/
652 1 for(i =7; i>0; i--)
653 1 {
654 2 W1302(ucAddr,*pClock); /* 秒 分 时 日 月 星期 年 */
655 2 pClock++;
656 2 ucAddr +=2;
657 2 }
658 1 W1302(0x8e,0x80); /* 控制命令,WP=1,写保护?*/
659 1 }
660 /********************************************************************
661 函 数 名:Get1302()
662 功 能:读取DS1302当前时间
C51 COMPILER V7.50 GT 10/28/2005 21:31:12 PAGE 12
663 说 明:
664 调 用:R1302()
665 入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年
666 7Byte (BCD码) 1B 1B 1B 1B 1B 1B 1B
667 返 回 值:无
668 ***********************************************************************/
669 void Get1302(uchar ucCurtime[])
670 {
671 1 uchar i;
672 1 uchar ucAddr = 0x81;
673 1 for (i=0; i<7; i++)
674 1 {
675 2 ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
676 2 ucAddr += 2;
677 2 }
678 1 }
679
680 unsigned char BCD2ASC(unsigned char BCD4)
681 {
682 1 if (BCD4<10)
683 1 { return(BCD4+'0');}
684 1 else
685 1 { return(BCD4+'A'-10);}
686 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 1053 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 82 28
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 13 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -