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

📄 ds1302.lst

📁 多功能电子数字钟的设计 带语音报时功能 比赛做的
💻 LST
字号:
C51 COMPILER V7.50   DS1302                                                                06/05/2008 21:18:58 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 CH\ds1302.c BROWSE DEBUG OBJECTEXTEND PRINT(.\ds1302.lst) OBJECT(ds1302.obj
                    -)

line level    source

   1          /*********************************************************************
   2          
   3          模块名称:dS1302.c
   4          功    能:实时时钟模块           时钟芯片型号:dS1302 
   5          说    明:
   6          *********************************************************************/
   7          #include"includes.h"
   8          //unsigned char ucCurtime[7];   /*读取当前7字节
   9          /**************函数声明***********************/
  10          
  11          static void InputByte1302(unsigned char d);
  12          static unsigned char OutputByte1302(void);
  13          static void W1302(unsigned char ucAddr, unsigned char ucda);
  14          static unsigned char R1302(unsigned char ucAddr); 
  15          /******************************************************************** 
  16          
  17          函 数 名:ds1302_init()
  18          功    能:DS1302初始化
  19          说    明:DS1302初始化函数
  20          入口参数:无 
  21          返 回 值:无  
  22          ***********************************************************************/
  23          extern void ds1302_init()                         
  24             {
  25   1          T_CLK=0;                  /*拉低时钟信号*/
  26   1          T_RST=0;                  /*复位DS1302*/
  27   1          T_RST=1;                  /*使能DS1302*/
  28   1          InputByte1302(0x8e);        /*发控制命令*/
  29   1          InputByte1302(0);           /*允许写DS1302*/
  30   1          T_RST=0;                  /*复位*/
  31   1         }
  32          /******************************************************************** 
  33          
  34          函 数 名:InputByte1302()
  35          功    能:实时时钟写入一字节
  36          说    明:往dS1302写入1Byte数据 (内部函数)
  37          入口参数:d 写入的数据 
  38          返 回 值:无  
  39          ***********************************************************************/
  40          void InputByte1302(unsigned char d) 
  41          { 
  42   1          unsigned char i;
  43   1          ACC = d;
  44   1          for(i=8; i>0; i--)
  45   1          {
  46   2              T_IO = ACC0;           /*相当于汇编中的 RRC */
  47   2              T_CLK = 1;
  48   2              T_CLK = 0;
  49   2              ACC = ACC >> 1; 
  50   2          } 
  51   1      }
  52          /******************************************************************** 
  53          
  54          函 数 名:OutputByte1302()
C51 COMPILER V7.50   DS1302                                                                06/05/2008 21:18:58 PAGE 2   

  55          功    能:实时时钟读取一字节
  56          说    明:从dS1302读取1Byte数据 (内部函数)
  57          入口参数:无  
  58          返 回 值:ACC
  59          ***********************************************************************/
  60          unsigned char OutputByte1302(void) 
  61          { 
  62   1          unsigned char i;
  63   1          for(i=8; i>0; i--)
  64   1          {
  65   2              ACC = ACC >>1;         /*相当于汇编中的 RRC */
  66   2              ACC7 = T_IO;
  67   2              T_CLK = 1;
  68   2              T_CLK = 0;
  69   2          } 
  70   1          return(ACC); 
  71   1      }
  72           /******************************************************************** 
  73          
  74          函 数 名:W1302()
  75          功    能:往dS1302某地址写入数据
  76          说    明:先写地址,后写命令/数据 (内部函数)
  77          调    用:InputByte1302() , OutputByte1302()
  78          入口参数:ucAddr: dS1302地址, ucdata: 要写的数据
  79          返 回 值:无
  80          ***********************************************************************/
  81          void W1302(unsigned char ucAddr, unsigned char ucda)
  82          {
  83   1          T_RST = 0;
  84   1          T_CLK = 0;
  85   1          T_RST = 1;
  86   1          InputByte1302(ucAddr);       /* 地址,命令 */
  87   1          InputByte1302(ucda);       /* 写1Byte数据*/
  88   1          T_CLK = 1;
  89   1          T_RST = 0;
  90   1      } 
  91          /******************************************************************** 
  92          
  93          函 数 名:R1302()
  94          功    能:读取dS1302某地址的数据
  95          说    明:先写地址,后读命令/数据 (内部函数)
  96          调    用:InputByte1302() , OutputByte1302()
  97          入口参数:ucAddr: dS1302地址
  98          返 回 值:ucdata :读取的数据
  99          ***********************************************************************/
 100          unsigned char READ1302(unsigned char ucAddr)
 101          {
 102   1          unsigned char ucdata;
 103   1          T_RST = 0;
 104   1          T_CLK = 0;
 105   1          T_RST = 1;
 106   1          InputByte1302(ucAddr);             /* 地址,命令 */
 107   1          ucdata = OutputByte1302();         /* 读1Byte数据 */
 108   1          T_CLK = 1;
 109   1          T_RST = 0;
 110   1          return(ucdata);
 111   1      }
 112          /******************************************************************** 
 113          
 114          函 数 名:BurstWRITE1302TIME()
 115          功    能:往dS1302写入时钟数据(多字节方式)
 116          说    明:先写地址,后写命令/数据
C51 COMPILER V7.50   DS1302                                                                06/05/2008 21:18:58 PAGE 3   

 117          调    用:InputByte1302() 
 118          入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 119                                      8Byte (BCd码)1B 1B 1B 1B 1B  1B  1B 1B
 120          返 回 值:无
 121          ***********************************************************************/
 122          extern void BurstWRITE1302TIME(unsigned char *pWClock)
 123          {
 124   1          unsigned char i;
 125   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
 126   1          T_RST = 0;
 127   1          T_CLK = 0;
 128   1          T_RST = 1;
 129   1          InputByte1302(0xbe);        /* 0xbe:时钟多字节写命令 */
 130   1          for (i = 8; i>0; i--)     /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
 131   1          {
 132   2              InputByte1302(*pWClock); /* 写1Byte数据*/
 133   2              pWClock++;
 134   2          }
 135   1          T_CLK = 1;
 136   1          T_RST = 0;
 137   1      }
 138          /******************************************************************** 
 139          
 140          函 数 名:BurstREAD1302TIME()
 141          功    能:读取dS1302时钟数据
 142          说    明:先写地址/命令,后读数据(时钟多字节方式)
 143          调    用:InputByte1302() , OutputByte1302()
 144          入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 145                                         7Byte (BCd码)1B 1B 1B 1B 1B  1B  1B
 146          返 回 值:无
 147          ***********************************************************************/
 148          extern void BurstREAD1302TIME(unsigned char *pRClock)
 149          {
 150   1          unsigned char i;
 151   1          T_RST = 0;
 152   1          T_CLK = 0;
 153   1          T_RST = 1;
 154   1          InputByte1302(0xbf);             /* 0xbf:时钟多字节读命令 */
 155   1          for (i=8; i>0; i--) 
 156   1          {
 157   2             *pRClock = OutputByte1302();   /* 读1Byte数据 */
 158   2             pRClock++;
 159   2          }
 160   1          T_CLK = 1;
 161   1          T_RST = 0;
 162   1      } 
 163          /******************************************************************** 
 164          
 165          函 数 名:BurstWRITE1302REG()
 166          功    能:往dS1302寄存器数写入数据(多字节方式)
 167          说    明:先写地址,后写数据(寄存器多字节方式)
 168          调    用:InputByte1302()
 169          入口参数:pWReg: 寄存器数据地址
 170          返 回 值:无
 171          ***********************************************************************/
 172          extern void BurstWRITE1302REG(unsigned char *pWReg)
 173          {
 174   1          unsigned char i;
 175   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作*/
 176   1          T_RST = 0;
 177   1          T_CLK = 0;
 178   1          T_RST = 1;
C51 COMPILER V7.50   DS1302                                                                06/05/2008 21:18:58 PAGE 4   

 179   1          InputByte1302(0xfe);         /* 0xfe:寄存器多字节写命令 */
 180   1          for (i=31; i>0; i--)       /* 31Byte 寄存器数据 */
 181   1          {
 182   2              InputByte1302(*pWReg);    /* 写1Byte数据*/
 183   2              pWReg++;
 184   2          }
 185   1          T_CLK = 1;
 186   1          T_RST = 0;
 187   1      }
 188          /******************************************************************** 
 189          
 190          函 数 名:BurstRRITE1302REG()
 191          功    能:读取dS1302寄存器数据
 192          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 193          调    用:InputByte1302() , OutputByte1302()
 194          入口参数:pRReg: 寄存器数据地址
 195          返 回 值:无
 196          ***********************************************************************/
 197          extern void BurstR1302REG(unsigned char *pRReg)
 198          {
 199   1          unsigned char i;
 200   1          T_RST = 0;
 201   1          T_CLK = 0;
 202   1          T_RST = 1;
 203   1          InputByte1302(0xff);            /* 0xff:寄存器多字节读命令 */
 204   1          for (i=31; i>0; i--)          /*31Byte 寄存器数据 */
 205   1          {
 206   2              *pRReg = OutputByte1302();  /* 读1Byte数据 */
 207   2              pRReg++;
 208   2          }
 209   1          T_CLK = 1;
 210   1          T_RST = 0;
 211   1      }
 212          /******************************************************************** 
 213          
 214          函 数 名:Set1302()
 215          功    能:设置初始时间
 216          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 217          调    用:W1302()
 218          入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 219                                         7Byte (BCd码)1B 1B 1B 1B 1B  1B  1B
 220          返 回 值:无
 221          ***********************************************************************/
 222          extern void Set1302(unsigned char *pClock) 
 223          {
 224   1          unsigned char i;
 225   1          unsigned char ucAddr = 0x80; 
 226   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作*/
 227   1          for(i =7; i>0; i--)
 228   1          { 
 229   2              W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 230   2              pClock++;
 231   2              ucAddr+=2;
 232   2          }
 233   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护*/
 234   1      }
 235          /******************************************************************** 
 236          
 237          函 数 名:Get1302()
 238          功    能:读取dS1302当前时间
 239          说    明:
 240          调    用:R1302() 
C51 COMPILER V7.50   DS1302                                                                06/05/2008 21:18:58 PAGE 5   

 241          入口参数:ucCurtime: 保存当前时间地址。当前时间格式为: 秒 分 时 日 月 星期 年 
 242                                                  7Byte (BCd码)   1B 1B 1B 1B 1B  1B  1B
 243          返 回 值:无
 244          ***********************************************************************/
 245          extern void Get1302(unsigned char ucCurtime[]) 
 246          {
 247   1          unsigned char i;
 248   1          unsigned char ucAddr = 0x81;
 249   1          for (i=0; i<7; i++)
 250   1          {
 251   2              ucCurtime[i] = READ1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 252   2              ucAddr += 2;
 253   2          }
 254   1      }
 255          


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