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

📄 ds1302.lst

📁 以C8051F020单片机做的多功能计数器
💻 LST
字号:
C51 COMPILER V7.50   DS1302                                                                09/20/2008 15:21:11 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*********************************************************************/   
   2          /*              实时时钟模块   时钟芯片型号:DS1302                                      */   
   3          /*                                                                                                                                       */
   4          /*              外部接口有两个,分别为v_Set1302()和v_Get1302(),                           */
   5          /*              其参数的返回值为10进制数据,而非BCD码,可直接使用                  */
   6          /*                                                  LiuWei  2008-1-15*/
   7          /*********************************************************************/  
   8          
   9          #include "DS1302.h"
  10           
  11          
  12          void rtcDelay(unsigned int num)
  13          {
  14   1              while(num--);
  15   1      }
  16          /********************************************************************     
  17          *   
  18          *   名称:   v_RTInputByte   
  19          *   说明:     
  20          *   功能:   往DS1302写入1Byte数据   
  21          *   调用:   
  22          *   输入:   ucDa   写入的数据     
  23          *   返回值:   无   
  24          ***********************************************************************/   
  25          void   v_RTInputByte(uchar ucDa)     
  26          {     
  27   1              uchar   i,Data;   
  28   1          Data=ucDa;
  29   1              for(i=8;   i>0;   i--)   
  30   1              {   
  31   2                  if(Data&0x01)
  32   2                          T_IO=1;
  33   2                      else
  34   2                          T_IO=0;
  35   2              Data>>=1;
  36   2                      T_CLK   =   1; 
  37   2                  rtcDelay(100);
  38   2                      T_CLK   =   0;
  39   2                      rtcDelay(100);          
  40   2                      
  41   2              }    
  42   1      }   
  43          /********************************************************************     
  44          *   
  45          *   名称:   uchar   uc_RTOutputByte   
  46          *   说明:     
  47          *   功能:   从DS1302读取1Byte数据   
  48          *   调用:     
  49          *   输入:     
  50          *   返回值:   ACC   
  51          ***********************************************************************/   
  52          uchar   uc_RTOutputByte(void)     
  53          {     
  54   1              uchar   i,tem; 
  55   1          tem=0;
C51 COMPILER V7.50   DS1302                                                                09/20/2008 15:21:11 PAGE 2   

  56   1          P2MDOUT=0xfd;
  57   1              T_IO=1;
  58   1              for(i=8;   i>0;   i--)   
  59   1              {   
  60   2              tem>>=1;
  61   2              if(T_IO)
  62   2                 tem|=0X80;
  63   2                      T_CLK   =   1;  
  64   2              rtcDelay(100);  
  65   2                      T_CLK   =   0;
  66   2                      rtcDelay(100);        
  67   2              } 
  68   1          P2MDOUT=0xff;
  69   1              return(tem);     
  70   1      }   
  71          /********************************************************************     
  72          *   
  73          *   名称:   v_W1302   
  74          *   说明:   先写地址,后写命令/数据   
  75          *   功能:   往DS1302写入数据   
  76          *   调用:   v_RTInputByte()     
  77          *   输入:   ucAddr:   DS1302地址,   ucDa:   要写的数据   
  78          *   返回值:   无   
  79          ***********************************************************************/   
  80          void   v_W1302(uchar   ucAddr,   uchar   ucDa)   
  81          {   
  82   1              T_RST   =   0;   
  83   1              T_CLK   =   0; 
  84   1          rtcDelay(50);     
  85   1              T_RST   =   1; 
  86   1         
  87   1              v_RTInputByte(ucAddr);   /*   地址,命令   */   
  88   1              v_RTInputByte(ucDa);   /*   写1Byte数据*/   
  89   1              T_CLK   =   1;   
  90   1              T_RST   =0;   
  91   1      }     
  92          /********************************************************************     
  93          *   
  94          *   名称:   uc_R1302   
  95          *   说明:   先写地址,后读命令/数据   
  96          *   功能:   读取DS1302某地址的数据   
  97          *   调用:   v_RTInputByte()   ,   uc_RTOutputByte()   
  98          *   输入:   ucAddr:   DS1302地址   
  99          *   返回值:   ucDa   :读取的数据   
 100          ***********************************************************************/   
 101          uchar   uc_R1302(uchar   ucAddr)   
 102          {   
 103   1              uchar   ucDa;   
 104   1          P2MDOUT=0xfd;
 105   1              T_RST   =   0;   
 106   1              T_CLK   =   0;
 107   1          rtcDelay(50);    
 108   1              T_RST   =   1;   
 109   1          
 110   1              v_RTInputByte(ucAddr);   /*   地址,命令   */   
 111   1              ucDa   =   uc_RTOutputByte();   /*   读1Byte数据   */   
 112   1              T_CLK   =   1;   
 113   1              T_RST   =0;   
 114   1              return(ucDa);   
 115   1      }   
 116          
 117          /********************************************************************     
C51 COMPILER V7.50   DS1302                                                                09/20/2008 15:21:11 PAGE 3   

 118          *   
 119          *   名称:   v_Set1302   
 120          *   说明:     
 121          *   功能:   设置初始时间   
 122          *   调用:   v_W1302()     
 123          *   输入:   pSecDa:   初始时间地址。初始时间格式为:   秒   分   时   日   月   星期   年     
 124          *   7Byte   (BCD码)   1B   1B   1B   1B   1B   1B   1B   
 125          *   返回值:   无   
 126          ***********************************************************************/   
 127          void   v_Set1302(uchar   *pSecDa)     
 128          {   
 129   1              uchar   i;   
 130   1              uchar   ucAddr   =   0x80;     
 131   1              v_W1302(0x8e,0x00);   /*   控制命令,WP=0,写操作?*/   
 132   1              for(i  =7;i>0;i--)   
 133   1              {     
 134   2                      v_W1302(ucAddr,*pSecDa);   /*   秒   分   时   日   月   星期   年   */   
 135   2          
 136   2                       pSecDa++;   
 137   2                       ucAddr   +=2;   
 138   2              }   
 139   1              v_W1302(0x8e,0x80);   /*   控制命令,WP=1,写保护?*/   
 140   1       }   
 141          /********************************************************************     
 142          *   
 143          *   名称:   v_Get1302   
 144          *   说明:     
 145          *   功能:   读取DS1302当前时间   
 146          *   调用:   uc_R1302()     
 147          *   输入:   ucCurtime:   保存当前时间地址。当前时间格式为:   秒   分   时   日   月   星期   年     
 148          *   7Byte   (BCD码)   1B   1B   1B   1B   1B   1B   1B   
 149          *   返回值:   无   
 150          ***********************************************************************/   
 151          void   v_Get1302(uchar   ucCurtime[])     
 152          {   
 153   1              uchar   m;   
 154   1              uchar   ucAddr   =   0x81;   
 155   1        for   (m=0;m<7;m++)   
 156   1        {   
 157   2        ucCurtime[m]   =   uc_R1302(ucAddr);/*格式为:   秒   分   时   日   月     
 158   2        星期   年   */   
 159   2        ucAddr   +=   2;   
 160   2        }   
 161   1      
 162   1      }     
 163          
 164          
 165          void start1302()
 166          {
 167   1         
 168   1              v_W1302(0x8e,0x00);   /*   控制命令,WP=0,写操作?*/   
 169   1              v_W1302(0x80,0);
 170   1              v_W1302(0x8e,0x80);   /*   控制命令,WP=1,写保护?*/   
 171   1      
 172   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    261    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
C51 COMPILER V7.50   DS1302                                                                09/20/2008 15:21:11 PAGE 4   

   DATA SIZE        =   ----      10
   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 + -