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

📄 ds1302.lst

📁 51单片机项目集
💻 LST
字号:
C51 COMPILER V8.02   DS1302                                                                11/03/2010 22:45:22 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1302.c BROWSE DEBUG OBJECTEXTEND TABS(3)

line level    source

   1          
   2          #include <reg52.h>
   3          //#include "ds1302.h"
   4          
   5          #define uchar unsigned char
   6          #define uint  unsigned int
   7          
   8          #define SECOND 0x80     //秒
   9          #define MINUTE 0x82     //分鍾
  10          #define HOUR   0x84     //小時
  11          #define DAY    0x86     //天
  12          #define MONTH  0x88     //月
  13          #define WEEK   0x8a     //星期
  14          #define YEAR   0x8c     //年
  15          
  16          sbit DS1302_RST=P3^0;
  17          sbit DS1302_SCLK=P3^1;
  18          sbit DS1302_IO=P3^2;
  19             
  20          typedef struct systime
  21          {
  22             uchar    cYear;
  23             uchar cMon;
  24             uchar cDay;
  25             uchar cHour;
  26             uchar cMin;
  27             uchar cSec;
  28             uchar cWeek;
  29          }SYSTIME;
  30                 
  31          void DS1302_Write(uchar D)
  32          {
  33   1         uchar i; 
  34   1         for(i=0;i<8;i++)
  35   1         {  
  36   2            DS1302_IO=D&0x01;
  37   2            DS1302_SCLK=1;
  38   2            DS1302_SCLK=0;
  39   2            D=D>>1;           
  40   2         }  
  41   1      }
  42          
  43          uchar DS1302_Read()
  44          {
  45   1         uchar TempDat=0,i;
  46   1         for(i=0;i<8;i++)
  47   1         {  
  48   2            TempDat>>=1;   
  49   2            if(DS1302_IO) TempDat=TempDat|0x80;
  50   2            DS1302_SCLK=1;
  51   2            DS1302_SCLK=0;
  52   2            
  53   2         }  
  54   1          return TempDat;
  55   1      }
C51 COMPILER V8.02   DS1302                                                                11/03/2010 22:45:22 PAGE 2   

  56          
  57          void WDS1302(uchar ucAddr, uchar ucDat)   
  58          {
  59   1          DS1302_RST = 0;
  60   1          DS1302_SCLK = 0;
  61   1          DS1302_RST = 1;
  62   1          DS1302_Write(ucAddr);        // 地址,命令 
  63   1          DS1302_Write(ucDat);         // 写1Byte数据
  64   1          DS1302_SCLK = 1;
  65   1          DS1302_RST = 0;
  66   1      } 
  67          
  68          uchar RDS1302(uchar ucAddr)
  69          {
  70   1          uchar ucDat;
  71   1          DS1302_RST = 0;
  72   1          DS1302_SCLK = 0;
  73   1          DS1302_RST = 1;
  74   1          DS1302_Write(ucAddr);        // 地址,命令 
  75   1          ucDat=DS1302_Read();       
  76   1          DS1302_SCLK = 1;
  77   1          DS1302_RST = 0;
  78   1         return ucDat;
  79   1      }
  80          
  81          void SetTime(SYSTIME sys)
  82          {
  83   1      
  84   1          WDS1302(YEAR,sys.cYear); 
  85   1         WDS1302(MONTH,sys.cMon&0x1f);
  86   1         WDS1302(DAY,sys.cDay&0x3f);
  87   1         WDS1302(HOUR,sys.cHour&0xbf);
  88   1         WDS1302(MINUTE,sys.cMin&0x7f);
  89   1         WDS1302(SECOND,sys.cSec&0x7f);   
  90   1         WDS1302(WEEK,sys.cWeek&0x07);
  91   1      
  92   1      }
  93          
  94          void GetTime(SYSTIME *sys)
  95          {
  96   1         uchar uiTempDat;
  97   1         uiTempDat=RDS1302(YEAR|0x01);         
  98   1         (*sys).cYear=(uiTempDat>>4)*10+(uiTempDat&0x0f);
  99   1      
 100   1      // uiTempDat=RDS1302(0x88|0x01);
 101   1      // (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);
 102   1         uiTempDat=RDS1302(0x88|0x01);
 103   1         (*sys).cMon=((uiTempDat&0x1f)>>4)*10+(uiTempDat&0x0f);   
 104   1      
 105   1         uiTempDat=RDS1302(DAY|0x01);
 106   1         (*sys).cDay=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
 107   1      
 108   1         uiTempDat=RDS1302(HOUR|0x01);
 109   1         (*sys).cHour=((uiTempDat&0x3f)>>4)*10+(uiTempDat&0x0f);
 110   1      
 111   1         uiTempDat=RDS1302(MINUTE|0x01);
 112   1         sys->cMin=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
 113   1      
 114   1         uiTempDat=RDS1302(SECOND|0x01);
 115   1         sys->cSec=((uiTempDat&0x7f)>>4)*10+(uiTempDat&0x0f);
 116   1      
 117   1         uiTempDat=RDS1302(MONTH|0x01);
C51 COMPILER V8.02   DS1302                                                                11/03/2010 22:45:22 PAGE 3   

 118   1         (*sys).cMon=uiTempDat&0x17;
 119   1      
 120   1         uiTempDat=RDS1302(WEEK|0x01);
 121   1         sys->cWeek=uiTempDat&0x07;
 122   1      }


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