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

📄 ds1302.lst

📁 用于测试步进电机
💻 LST
字号:
C51 COMPILER V7.00  DS1302                                                                 09/14/2006 16:35:49 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE DS1302.c OPTIMIZE(9,SIZE) BROWSE ORDER DEBUG OBJECTEXTEND

stmt level    source

   1          /***************************************************
   2          *   文件名:DS1302.C
   3          ***************************************************/
   4          #include "REG51STC.H"
   5          #include "CMD16887.H"
   6          #include "externxy.h"
   7          #include<intrins.h>
   8          /*********************************************************************
   9          
  10          公司名称:
  11          模块名称:DS1302.c
  12          功    能:实时时钟模块           时钟芯片型号:DS1302 
  13          说    明:
  14          程序设计:jiangmaozhou        
  15          设计时间:2006.04.02        
  16          版 本 号: 20060402
  17          *********************************************************************/
  18          sbit  ACC0 = ACC^0;
  19          sbit  ACC7 = ACC^7;
  20          /******************************************************************** 
  21          
  22          函 数 名:RTInputByte()
  23          功    能:实时时钟写入一字节
  24          说    明:往DS1302写入1Byte数据 (内部函数)
  25          入口参数:d 写入的数据 
  26          返 回 值:无  
  27          设    计:jiangmaozhou         日    期:2006-03-19
  28          修    改:                     日    期: 
  29          ***********************************************************************/
  30          void RTInputByte(uchar d) 
  31          { 
  32   1          uchar i;
  33   1          ACC = d;
  34   1          for(i=8; i>0; i--)
  35   1          {
  36   2              T_IO = ACC0;_nop_();           //相当于汇编中的 RRC 
  37   2              T_CLK = 1;_nop_(); 
  38   2              T_CLK = 0;
  39   2              ACC = ACC >> 1; 
  40   2          } 
  41   1      }
  42          /******************************************************************** 
  43          
  44          函 数 名:RTOutputByte()
  45          功    能:实时时钟读取一字节
  46          说    明:从DS1302读取1Byte数据 (内部函数)
  47          入口参数:无  
  48          返 回 值:ACC
  49          设    计:jiangmaozhou           日    期:2002-03-19
  50          修    改:                     日    期: 
  51          ***********************************************************************/
  52          uchar RTOutputByte(void) 
  53          { 
  54   1          uchar i;
  55   1          for(i=8; i>0; i--)
C51 COMPILER V7.00  DS1302                                                                 09/14/2006 16:35:49 PAGE 2   

  56   1          {
  57   2              ACC = ACC >>1;         //相当于汇编中的 RRC 
  58   2              ACC7 = T_IO;_nop_(); 
  59   2              T_CLK = 1;_nop_(); 
  60   2              T_CLK = 0;
  61   2          } 
  62   1          return(ACC); 
  63   1      }
  64          /******************************************************************** 
  65          
  66          函 数 名:W1302()
  67          功    能:往DS1302写入数据
  68          说    明:先写地址,后写命令/数据 (内部函数)
  69          调    用:RTInputByte() , RTOutputByte()
  70          入口参数:ucAddr: DS1302地址, ucData: 要写的数据
  71          返 回 值:无
  72          设    计:jiangmaozhou           日    期:2002-03-19
  73          修    改:                     日    期: 
  74          ***********************************************************************/
  75          void W1302(uchar ucAddr, uchar ucDa)
  76          {
  77   1          T_RST = 0;_nop_(); 
  78   1          T_CLK = 0;_nop_(); 
  79   1          T_RST = 1;
  80   1          RTInputByte(ucAddr);       /* 地址,命令 */
  81   1          RTInputByte(ucDa);       /* 写1Byte数据*/
  82   1          T_CLK = 1;_nop_(); 
  83   1          T_RST = 0;
  84   1      } 
  85          /******************************************************************** 
  86          
  87          函 数 名:R1302()
  88          功    能:读取DS1302某地址的数据
  89          说    明:先写地址,后读命令/数据 (内部函数)
  90          调    用:RTInputByte() , RTOutputByte()
  91          入口参数:ucAddr: DS1302地址
  92          返 回 值:ucData :读取的数据
  93          设    计:jiangmaozhou           日    期:2002-03-19
  94          修    改:                     日    期: 
  95          ***********************************************************************/
  96          uchar R1302(uchar ucAddr)
  97          {
  98   1          uchar ucData;
  99   1          T_RST = 0;_nop_(); 
 100   1          T_CLK = 0;_nop_(); 
 101   1          T_RST = 1;
 102   1          RTInputByte(ucAddr);             /* 地址,命令 */
 103   1          ucData = RTOutputByte();         /* 读1Byte数据 */
 104   1          T_CLK = 1;;
 105   1          T_RST = 0;
 106   1          return(ucData);
 107   1      }
 108          /******************************************************************** 
 109          
 110          函 数 名:BurstW1302T()
 111          功    能:往DS1302写入时钟数据(多字节方式)
 112          说    明:先写地址,后写命令/数据
 113          调    用:RTInputByte() 
 114          入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 115                                      8Byte (BCD码)1B 1B 1B 1B 1B  1B  1B 1B
 116          返 回 值:无
 117          设    计:jiangmaozhou           日    期:2002-03-19
C51 COMPILER V7.00  DS1302                                                                 09/14/2006 16:35:49 PAGE 3   

 118          修    改:                     日    期: 
 119          ***********************************************************************/
 120          /*void BurstW1302T(uchar *pWClock)
 121          {
 122              uchar i;
 123              W1302(0x8e,0x00);         //控制命令,WP=0,写操作?
 124              T_RST = 0;
 125              T_CLK = 0;
 126              T_RST = 1;
 127              RTInputByte(0xbe);        // 0xbe:时钟多字节写命令 
 128              for (i = 8; i>0; i--)     //8Byte = 7Byte 时钟数据 + 1Byte 控制
 129              {
 130                  RTInputByte(*pWClock); // 写1Byte数据
 131                  pWClock++;
 132              }
 133              T_CLK = 1;
 134              T_RST = 0;
 135          } 
 136          /******************************************************************** 
 137          
 138          函 数 名:BurstR1302T()
 139          功    能:读取DS1302时钟数据
 140          说    明:先写地址/命令,后读数据(时钟多字节方式)
 141          调    用:RTInputByte() , RTOutputByte()
 142          入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 143                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 144          返 回 值:无
 145          设    计:jiangmaozhou           日    期:2002-03-19
 146          修    改:                     日    期: 
 147          ***********************************************************************/
 148          /*void BurstR1302T(uchar *pRClock)
 149          {
 150              uchar i;
 151              T_RST = 0;
 152              T_CLK = 0;
 153              T_RST = 1;
 154              RTInputByte(0xbf);             // 0xbf:时钟多字节读命令 
 155              for (i=8; i>0; i--) 
 156              {
 157                 *pRClock = RTOutputByte();   // 读1Byte数据 
 158                 pRClock++;
 159              }
 160              T_CLK = 1;
 161              T_RST = 0;
 162          }
 163          /******************************************************************** 
 164          
 165          函 数 名:BurstW1302R()
 166          功    能:往DS1302寄存器数写入数据(多字节方式)
 167          说    明:先写地址,后写数据(寄存器多字节方式)
 168          调    用:RTInputByte()
 169          入口参数:pWReg: 寄存器数据地址
 170          返 回 值:无
 171          设    计:jiangmaozhou           日    期:2002-03-19
 172          修    改:                     日    期: 
 173          ***********************************************************************/
 174          /*void BurstW1302R(uchar *pWReg)
 175          {
 176              uchar i;
 177              W1302(0x8e,0x00);         // 控制命令,WP=0,写操作
 178              T_RST = 0;
 179              T_CLK = 0;
C51 COMPILER V7.00  DS1302                                                                 09/14/2006 16:35:49 PAGE 4   

 180              T_RST = 1;
 181              RTInputByte(0xfe);         // 0xbe:时钟多字节写命令 
 182              for (i=31; i>0; i--)       // 31Byte 寄存器数据 
 183              {
 184                  RTInputByte(*pWReg);    // 写1Byte数据
 185                  pWReg++;
 186              }
 187              T_CLK = 1;
 188              T_RST = 0;
 189          } 
 190          /******************************************************************** 
 191          
 192          函 数 名:BurstR1302R()
 193          功    能:读取DS1302寄存器数据
 194          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 195          调    用:RTInputByte() , RTOutputByte()
 196          入口参数:pRReg: 寄存器数据地址
 197          返 回 值:无
 198          设    计:jiangmaozhou           日    期:2002-03-19
 199          修    改:                     日    期: 
 200          ***********************************************************************/
 201          /*void BurstR1302R(uchar *pRReg)
 202          {
 203              uchar i;
 204              T_RST = 0;
 205              T_CLK = 0;
 206              T_RST = 1;
 207              RTInputByte(0xff);            // 0xff:时钟多字节读命令 
 208              for (i=31; i>0; i--)          //31Byte 寄存器数据 
 209              {
 210                  *pRReg = RTOutputByte();  // 读1Byte数据
 211                  pRReg++;
 212              }
 213              T_CLK = 1;
 214              T_RST = 0;
 215          }/*
 216          /******************************************************************** 
 217          
 218          函 数 名:Set1302()
 219          功    能:设置初始时间
 220          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 221          调    用:W1302()
 222          入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 223                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 224          返 回 值:无
 225          设    计:jiangmaozhou           日    期:2002-03-19
 226          修    改:                     日    期: 
 227          ***********************************************************************/
 228          void Set1302() 
 229          {
 230   1          uchar i;
 231   1          uchar ucAddr = 0x80; 
 232   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 233   1          for(i =7; i>0; i--)
 234   1          { 
 235   2              W1302(ucAddr,ucCurtime[7-i]);  /* 秒 分 时 日 月 星期 年 */ 
 236   2              //pClock++;
 237   2              ucAddr +=2;
 238   2          }
 239   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 240   1      }
 241          /******************************************************************** 
C51 COMPILER V7.00  DS1302                                                                 09/14/2006 16:35:49 PAGE 5   

 242          
 243          函 数 名:Get1302()
 244          功    能:读取DS1302当前时间
 245          说    明:
 246          调    用:R1302() 
 247          入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 248                                                  7Byte (BCD码)   1B 1B 1B 1B 1B  1B  1B
 249          返 回 值:无
 250          设    计:jiangmaozhou           日    期:2002-03-19
 251          修    改:                     日    期: 
 252          ***********************************************************************/
 253          void Get1302() 
 254          {
 255   1          uchar i;
 256   1          uchar ucAddr = 0x81;
 257   1          for (i=0; i<7; i++)
 258   1          {
 259   2              ucCurtime[i] = R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 260   2              ucAddr += 2;
 261   2          }
 262   1      }
 263          /*//////////////////////////////////////////////////////////////////////*/
 264           


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    163    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   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 + -