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

📄 rtcds1302.lst

📁 使用AT89S52单片机
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.00  RTCDS1302                                                              10/06/2008 18:53:09 PAGE 1   


C51 COMPILER V7.00, COMPILATION OF MODULE RTCDS1302
OBJECT MODULE PLACED IN G:\MFRC500\实时时钟\RTCDS1302.OBJ
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE G:\MFRC500\实时时钟\RTCDS1302.C DB SB OE

stmt level    source

   1          /*****************************************************
   2                 DS1302电子钟 C 程序
   3          *******************************************************
   4          
   5           DS1302 接线图
   6          
   7                   Vcc2  CLK I/O  /RST
   8          
   9                      |   |   |   |
  10                     -------------------
  11                    | 8   7   6   5  |
  12                    |   DS1302       |
  13                    |                |
  14                    | 1   2   3   4  |
  15                     -------------------
  16                      |   |   |   |
  17                   VCC1           GND
  18          
  19          1 脚接+5V    2,3脚32768HZ晶振  4脚接地  5脚接S51的P12 6脚接S51的P13 7接S51的P14
  20          8脚接后备电源,可以接老计算机主板上的3.6V电池,也可以通过二级管隔离接一个大容量电解电容
  21          电压在2.5V以上即可维持
  22          //******************************************************/
  23          
  24          #include <REG52.H>
  25          #define uchar unsigned char
  26          #define uint unsigned int
  27          
  28          //DS1302引脚连接定义
  29          sbit    T_CLK=P1^2;
  30          sbit    T_IO =P1^3;
  31          sbit    T_RST=P1^4;
  32          
  33          //sbit  ACC0=ACC^0;           //1bit数据存储位
  34          sbit    ACC7=ACC^7;
  35          
  36          uchar   starts_time[7]={30,19,21,4,10,6,8};      //初始化设置:秒,分,时,日,月,星期,年
  37          uchar   Second,Minute,Hour,Day,Month,Week,Year;  //时间变量
  38          
  39          void    RTCInputByte(uchar bData);              /* 输入 1Byte */
  40          uchar   RTCOutputByte(void);            /* 输出 1Byte */
  41          void    Write1302(uchar ucAddr, uchar ucDa);    /* 向DS1302写入一个字节 */
  42          uchar   Read1302(uchar ucAddr);         /* 从DS1302读出一个字节 */
  43          void    SetTime(uchar *pClock);         /* 设置时间 */
  44          void    GetTime(void);              /* 读取时间 */
  45          
  46          /*主函数*/
  47          void main()
  48          {
  49   1              SetTime(starts_time);
  50   1              while(1)
  51   1              {
  52   2              GetTime();
  53   2              }
  54   1      }
  55          /************************************************/
C51 COMPILER V7.00  RTCDS1302                                                              10/06/2008 18:53:09 PAGE 2   

  56          
  57          
  58          //********DS1302读写程序***************//
  59          /********************************************************************
  60          函 数 名:RTCInputByte()
  61          功    能:实时时钟写入一字节
  62          说    明:往DS1302写入1Byte数据 (内部函数)
  63          入口参数:bData: 写入的数据
  64          返 回 值:无
  65          设    计:zhanghongjian        日    期:2008-10-04
  66          修    改:                     日    期:
  67          ***********************************************************************/
  68          void RTCInputByte(uchar bData)
  69          {
  70   1          uchar h;
  71   1          //ACC = bData;
  72   1          for(h=8; h>0; h--)
  73   1          {
  74   2              //T_IO = ACC0;           /*相当于汇编中的 RRC */
  75   2              T_IO = (bit)(bData&0x01);
  76   2              T_CLK = 1;
  77   2              T_CLK = 0;
  78   2              //ACC = ACC >> 1;
  79   2              bData = bData >> 1;
  80   2          }
  81   1      }
  82          /********************************************************************
  83          函 数 名:RTCOutputByte()
  84          功    能:实时时钟读取一字节
  85          说    明:从DS1302读取1Byte数据 (内部函数)
  86          入口参数:无
  87          返 回 值:ACC: 输出的数据
  88          设    计:zhanghongjian        日    期:2008-10-04
  89          修    改:                     日    期:
  90          ***********************************************************************/
  91          uchar RTCOutputByte(void)
  92          {
  93   1          uchar h;
  94   1          //uchar temp;
  95   1          for(h=8; h>0; h--)
  96   1          {
  97   2              ACC = ACC >>1;         /*相当于汇编中的 RRC */
  98   2              //temp = temp >> 1;
  99   2              ACC7 = T_IO;
 100   2              //temp =
 101   2              T_CLK = 1;
 102   2              T_CLK = 0;
 103   2          }
 104   1          return(ACC);
 105   1      }
 106          /********************************************************************
 107          函 数 名:Write1302()
 108          功    能:往DS1302写入数据
 109          说    明:先写地址,后写命令/数据 (内部函数)
 110          调    用:RTCInputByte() , RTCOutputByte()
 111          入口参数:ucAddr: DS1302地址, ucData: 要写的数据
 112          返 回 值:无
 113          设    计:zhanghongjian        日    期:2008-10-04
 114          修    改:                     日    期:
 115          ***********************************************************************/
 116          void Write1302(uchar ucAddr, uchar ucDa)
 117          {
C51 COMPILER V7.00  RTCDS1302                                                              10/06/2008 18:53:09 PAGE 3   

 118   1          T_RST = 0;
 119   1          T_CLK = 0;
 120   1          T_RST = 1;
 121   1          RTCInputByte(ucAddr);       /* 地址,命令 */
 122   1          RTCInputByte(ucDa);       /* 写1Byte数据*/
 123   1          T_CLK = 1;
 124   1          T_RST = 0;
 125   1      }
 126          /********************************************************************
 127          函 数 名:Read1302()
 128          功    能:读取DS1302某地址的数据
 129          说    明:先写地址,后读命令/数据 (内部函数)
 130          调    用:RTCInputByte() , RTCOutputByte()
 131          入口参数:ucAddr: DS1302地址
 132          返 回 值:ucData: 读取的数据
 133          设    计:zhanghongjian        日    期:2008-10-04
 134          修    改:                     日    期:
 135          ***********************************************************************/
 136          uchar Read1302(uchar ucAddr)
 137          {
 138   1          uchar ucData;
 139   1          uchar temp1,temp2;
 140   1          T_RST = 0;
 141   1          T_CLK = 0;
 142   1          T_RST = 1;
 143   1          RTCInputByte(ucAddr);             /* 地址,命令 */
 144   1          ucData = RTCOutputByte();         /* 读1Byte数据 */
 145   1          T_CLK = 1;
 146   1          T_RST = 0;
 147   1      
 148   1          temp1 = ucData/16;
 149   1          temp2 = ucData%16;
 150   1          ucData = temp1*10 + temp2;          /* BCD转成16进制 */
 151   1      
 152   1          return(ucData);
 153   1      }
 154          
 155          /********************************************************************
 156          函 数 名:SetTime()
 157          功    能:设置初始时间
 158          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 159          调    用:Write1302()
 160          入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 161                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 162          返 回 值:无
 163          设    计:zhanghongjian        日    期:2008-10-04
 164          修    改:                     日    期:
 165          ***********************************************************************/

⌨️ 快捷键说明

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