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

📄 ds1302.lst

📁 51实例大全
💻 LST
字号:
C51 COMPILER V7.06   DS1302                                                                06/16/2010 00:46:43 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN .\obj\DS1302.obj
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND PRINT(.\obj\DS1302.lst) OBJECT(.\obj\DS1
                    -302.obj)

stmt level    source

   1          
   2          #include "ds1302.h"
   3          
   4          unsigned char time_buf1[8] = {20,9,3,13,18,51,00,6};//空年月日时分秒周
   5          unsigned char time_buf[8] ;                         //空年月日时分秒周
   6          /*------------------------------------------------
   7                     向DS1302写入一字节数据
   8          ------------------------------------------------*/
   9          void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
  10          {
  11   1      
  12   1              unsigned char i;
  13   1              RST_SET;        
  14   1              
  15   1              //写入目标地址:addr
  16   1              addr = addr & 0xFE;     //最低位置零
  17   1              for (i = 0; i < 8; i ++) 
  18   1                  { 
  19   2                      if (addr & 0x01) 
  20   2                          {
  21   3                              IO_SET;
  22   3                              }
  23   2                      else 
  24   2                          {
  25   3                              IO_CLR;
  26   3                              }
  27   2                      SCK_SET;
  28   2                      SCK_CLR;
  29   2                      addr = addr >> 1;
  30   2                      }
  31   1              
  32   1              //写入数据:d
  33   1              for (i = 0; i < 8; i ++) 
  34   1                 {
  35   2                      if (d & 0x01) 
  36   2                          {
  37   3                              IO_SET;
  38   3                              }
  39   2                      else 
  40   2                          {
  41   3                              IO_CLR;
  42   3                              }
  43   2                      SCK_SET;
  44   2                      SCK_CLR;
  45   2                      d = d >> 1;
  46   2                      }
  47   1              RST_CLR;                                        //停止DS1302总线
  48   1      }
  49          /*------------------------------------------------
  50                     从DS1302读出一字节数据
  51          ------------------------------------------------*/
  52          
  53          unsigned char Ds1302_Read_Byte(unsigned char addr) 
  54          {
C51 COMPILER V7.06   DS1302                                                                06/16/2010 00:46:43 PAGE 2   

  55   1      
  56   1              unsigned char i;
  57   1              unsigned char temp;
  58   1              RST_SET;        
  59   1      
  60   1              //写入目标地址:addr
  61   1              addr = addr | 0x01;//最低位置高
  62   1              for (i = 0; i < 8; i ++) 
  63   1                  {
  64   2                   
  65   2                      if (addr & 0x01) 
  66   2                         {
  67   3                              IO_SET;
  68   3                              }
  69   2                      else 
  70   2                          {
  71   3                              IO_CLR;
  72   3                              }
  73   2                      SCK_SET;
  74   2                      SCK_CLR;
  75   2                      addr = addr >> 1;
  76   2                      }
  77   1              
  78   1              //输出数据:temp
  79   1              for (i = 0; i < 8; i ++) 
  80   1                  {
  81   2                      temp = temp >> 1;
  82   2                      if (IO_R) 
  83   2                         {
  84   3                              temp |= 0x80;
  85   3                              }
  86   2                      else 
  87   2                         {
  88   3                              temp &= 0x7F;
  89   3                              }
  90   2                      SCK_SET;
  91   2                      SCK_CLR;
  92   2                      }
  93   1              
  94   1              RST_CLR;        //停止DS1302总线
  95   1              return temp;
  96   1      }
  97          
  98          /*------------------------------------------------
  99                     向DS1302写入时钟数据
 100          ------------------------------------------------*/
 101          void Ds1302_Write_Time(void) 
 102          {
 103   1           
 104   1          unsigned char i,tmp;
 105   1              for(i=0;i<8;i++)
 106   1                  {                  //BCD处理
 107   2                      tmp=time_buf1[i]/10;
 108   2                      time_buf[i]=time_buf1[i]%10;
 109   2                      time_buf[i]=time_buf[i]+tmp*16;
 110   2                  }
 111   1              Ds1302_Write_Byte(ds1302_control_add,0x00);                     //关闭写保护 
 112   1              Ds1302_Write_Byte(ds1302_sec_add,0x80);                         //暂停 
 113   1              //Ds1302_Write_Byte(ds1302_charger_add,0xa9);                   //涓流充电 
 114   1              Ds1302_Write_Byte(ds1302_year_add,time_buf[1]);         //年 
 115   1              Ds1302_Write_Byte(ds1302_month_add,time_buf[2]);        //月 
 116   1              Ds1302_Write_Byte(ds1302_date_add,time_buf[3]);         //日 
C51 COMPILER V7.06   DS1302                                                                06/16/2010 00:46:43 PAGE 3   

 117   1              Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);          //周 
 118   1              Ds1302_Write_Byte(ds1302_hr_add,time_buf[4]);           //时 
 119   1              Ds1302_Write_Byte(ds1302_min_add,time_buf[5]);          //分
 120   1              Ds1302_Write_Byte(ds1302_sec_add,time_buf[6]);          //秒
 121   1              Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);          //周 
 122   1              Ds1302_Write_Byte(ds1302_control_add,0x80);                     //打开写保护 
 123   1      }
 124          
 125          /*------------------------------------------------
 126                     从DS1302读出时钟数据
 127          ------------------------------------------------*/
 128          void Ds1302_Read_Time(void)  
 129          { 
 130   1                  unsigned char i,tmp;
 131   1              time_buf[1]=Ds1302_Read_Byte(ds1302_year_add);          //年 
 132   1              time_buf[2]=Ds1302_Read_Byte(ds1302_month_add);         //月 
 133   1              time_buf[3]=Ds1302_Read_Byte(ds1302_date_add);          //日 
 134   1              time_buf[4]=Ds1302_Read_Byte(ds1302_hr_add);            //时 
 135   1              time_buf[5]=Ds1302_Read_Byte(ds1302_min_add);           //分 
 136   1              time_buf[6]=(Ds1302_Read_Byte(ds1302_sec_add))&0x7F;//秒 
 137   1              time_buf[7]=Ds1302_Read_Byte(ds1302_day_add);           //周 
 138   1      
 139   1      
 140   1              for(i=0;i<8;i++)
 141   1                 {           //BCD处理
 142   2                      tmp=time_buf[i]/16;
 143   2                      time_buf1[i]=time_buf[i]%16;
 144   2                      time_buf1[i]=time_buf1[i]+tmp*10;
 145   2                 }
 146   1      }
 147          
 148          /*------------------------------------------------
 149                          DS1302初始化
 150          ------------------------------------------------*/
 151          void Ds1302_Init(void)
 152          {
 153   1              
 154   1              RST_CLR;                        //RST脚置低
 155   1              SCK_CLR;                        //SCK脚置低
 156   1          Ds1302_Write_Byte(ds1302_sec_add,0x00);                              
 157   1      }


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