⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gt.lst

📁 这是GPS全球卫星定位系统授时的下位机部分
💻 LST
📖 第 1 页 / 共 3 页
字号:
 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 + -