ds1302.lst

来自「3、LCD12864不能显示或不能清楚显示: 1)重新按住复位键和KEY A 2」· LST 代码 · 共 215 行

LST
215
字号
C51 COMPILER V7.06   DS1302                                                                11/18/2006 09:36:16 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: E:\Program Files\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*****************************************************************/ 
   2          /*                                                               */                                       
             -                         
   3          /*名称:                  ds1302读写程序                         */                                       
             -                                                                                                                        
             -            
   4          /*功能:           读写DS1302,通过串口返回给电脑                */                                       
             -             
   5          /*难度等级:                   中                                */                                       
             -                              
   6          /* 作者:                  zengrenliang                          */
   7          /* 版权:           http://www.51kaifa.com                       */
   8          /*编写日期:        2006.05.21                                   */                                       
             -                                                                                                                        
             -                                              
   9          /*****************************************************************/
  10          
  11          #include<reg52.h>
  12          #define uchar  unsigned char
  13          
  14          /***********************************延时函数*******************************/
  15          
  16          void delay(unsigned int i)
  17          {
  18   1        unsigned int j;
  19   1       for(j=0;j<i;j++);
  20   1       }
  21          /*********************************************************************/
  22          /*                                                                   */
  23          /* 实时时钟模块 时钟芯片型号:DS1302                                 */ 
  24          /*                                                                   */
  25          /*********************************************************************/
  26          sbit T_CLK = P1^1; /*实时时钟时钟线引脚 */
  27          sbit T_IO = P1^2;  /*实时时钟数据线引脚 */
  28          sbit lck = P3^5;   
  29          sbit ACC0 = ACC^0;
  30          sbit ACC7 = ACC^7;
  31          
  32          
  33          /*********************************************************************/ 
  34          /*                                                                   */
  35          /* 名称: v_RTInputByte                                               */
  36          /* 说明:                                                             */
  37          /* 功能: 往DS1302写入1Byte数据                                       */
  38          /* 调用:                                                             */
  39          /* 输入: ucDa 写入的数据                                             */ 
  40          /* 返回值: 无                                                        */
  41          /*********************************************************************/
  42          void v_RTInputByte(uchar ucDa) 
  43          { 
  44   1      uchar i;
  45   1      ACC = ucDa;
  46   1      for(i=8; i>0; i--)
  47   1      {
  48   2      T_IO = ACC0; /*相当于汇编中的 RRC */
C51 COMPILER V7.06   DS1302                                                                11/18/2006 09:36:16 PAGE 2   

  49   2      T_CLK = 1;
  50   2      T_CLK = 0;
  51   2      ACC = ACC >> 1; 
  52   2      } 
  53   1      }
  54          /*********************************************************************/ 
  55          /*                                                                   */
  56          /* 名称: uchar uc_RTOutputByte                                       */
  57          /* 说明:                                                             */
  58          /* 功能: 从DS1302读取1Byte数据                                       */
  59          /* 调用:                                                             */
  60          /* 输入:                                                             */
  61          /* 返回值: ACC                                                       */
  62          /*********************************************************************/
  63          uchar uc_RTOutputByte(void) 
  64          { 
  65   1      uchar i;
  66   1      for(i=8; i>0; i--)
  67   1      {
  68   2      ACC = ACC >>1; /*相当于汇编中的 RRC */
  69   2      ACC7 = T_IO;
  70   2      T_CLK = 1;
  71   2      T_CLK = 0;
  72   2      } 
  73   1      return(ACC); 
  74   1      }
  75          /*********************************************************************/ 
  76          /*                                                                   */
  77          /* 名称: v_W1302                                                     */
  78          /* 说明: 先写地址,后写命令/数据                                     */
  79          /* 功能: 往DS1302写入数据                                            */
  80          /* 调用: v_RTInputByte()                                             */
  81          /* 输入: ucAddr: DS1302地址, ucDa: 要写的数据                        */
  82          /* 返回值: 无                                                        */
  83          /*********************************************************************/
  84          void v_W1302(uchar ucAddr, uchar ucDa)
  85          {
  86   1      lck = 0;
  87   1      P1 = 0x00;
  88   1      lck = 1;
  89   1      
  90   1      T_CLK = 0;
  91   1      
  92   1      lck = 0;
  93   1      P1 = 0x10;
  94   1      lck = 1;
  95   1      v_RTInputByte(ucAddr); /* 地址,命令 */
  96   1      v_RTInputByte(ucDa); /* 写1Byte数据*/
  97   1      T_CLK = 1;
  98   1      lck = 0;
  99   1      P1 = 0x00;
 100   1      lck = 1;
 101   1      } 
 102          /*********************************************************************/ 
 103          /*                                                                   */
 104          /* 名称: uc_R1302                                                    */
 105          /* 说明: 先写地址,后读命令/数据                                     */
 106          /* 功能: 读取DS1302某地址的数据                                      */
 107          /* 调用: v_RTInputByte() , uc_RTOutputByte()                         */
 108          /* 输入: ucAddr: DS1302地址                                          */
 109          /* 返回值: ucDa :读取的数据                                          */
 110          /*********************************************************************/
C51 COMPILER V7.06   DS1302                                                                11/18/2006 09:36:16 PAGE 3   

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

 173   2      ucCurtime[i] = uc_R1302(ucAddr);/*格式为: 秒 分 时 日 月 星期 年 */
 174   2      ucAddr += 2;
 175   2      delay(100);
 176   2      }
 177   1      }
 178          /**************************************结束**************************************/  


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    197    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       6
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?