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

📄 ds1302.lst

📁 实时时钟ds1302的c语言程序。开发环境为vw。
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   DS1302                                                                08/15/2007 10:09:59 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN D:\VW\WORK\DS1302\DS1302.OBJ
COMPILER INVOKED BY: d:\keil\C51\BIN\C51.EXE D:\VW\WORK\DS1302\DS1302.C DB SB OE

line level    source

   1          #include  <reg52.h>
   2          
   3          
   4          
   5          #define  uchar     unsigned char
   6          #define  uint      unsigned int
   7          #define  byte      unsigned char
   8          #define  word      unsigned int
   9          
  10          extern void   Set1302(uchar *);          /* 设置时间 */
  11          extern void   Get1302(uchar curtime[]);  /* 读取1302当前时间 */
  12          extern void   Bcd2asc(uchar,uchar *);
  13          
  14          
  15          
  16          sbit     T_CLK      = P2^7;   /*实时时钟时钟线引脚 */
  17          sbit     T_IO       = P1^4;   /*实时时钟数据线引脚 */
  18          sbit     T_RST      = P1^7;   /*实时时钟复位线引脚 */
  19          
  20          sbit  ACC0 = ACC^0;
  21          sbit  ACC7 = ACC^7;
  22          
  23          
  24          void   RTInputByte(uchar);       /* 输入 1Byte */
  25          uchar  RTOutputByte(void);       /* 输出?1Byte */
  26          void   W1302(uchar, uchar);
  27          uchar  R1302(uchar);
  28          void   Set1302(uchar *);         /* 设置时间 */
  29          void   Bcd2asc(uchar,uchar *);
  30          void   Get1302(uchar curtime[]); /* 读取1302当前时间 */
  31          
  32          //主函数,简单的测试一下芯片及程序的工作情况
  33          //该函数设定一个时间初值time_init,然后不断的从ds1302中读取当前的时间值
  34          void main()
  35          {
  36   1              uchar time_init[7]= {0x00,0x20,0x0a,0x18,0x09,0x03,0x07};
  37   1              uchar time[7]     = {0x00,0x00,0x00,0x00,0x00,0x00,0x00};
  38   1              Set1302(time_init);
  39   1              while(1)
  40   1              {
  41   2                      Get1302(time);
  42   2              }
  43   1      }
  44          
  45          /********************************************************************
  46          函 数 名:RTInputByte()
  47          功    能:实时时钟写入一字节
  48          说    明:往DS1302写入1Byte数据 (内部函数)
  49          入口参数:d 写入的数据
  50          返 回 值:无
  51          设    计:zhaojunjie           日    期:2002-03-19
  52          修    改:                     日    期:
  53          ***********************************************************************/
  54          void RTInputByte(uchar d)
  55          {
C51 COMPILER V7.50   DS1302                                                                08/15/2007 10:09:59 PAGE 2   

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

 118          {
 119   1          uchar ucData;
 120   1          T_RST = 0;
 121   1          T_CLK = 0;
 122   1          T_RST = 1;
 123   1          RTInputByte(ucAddr);             /* 地址,命令 */
 124   1          ucData = RTOutputByte();         /* 读1Byte数据 */
 125   1          T_CLK = 1;
 126   1          T_RST = 0;
 127   1          return(ucData);
 128   1      }
 129          /********************************************************************
 130          函 数 名:BurstW1302T()
 131          功    能:往DS1302写入时钟数据(多字节方式)
 132          说    明:先写地址,后写命令/数据
 133          调    用:RTInputByte()
 134          入口参数:pWClock: 时钟数据地址 格式为: 秒 分 时 日 月 星期 年 控制
 135                                      8Byte (BCD码)1B 1B 1B 1B 1B  1B  1B 1B
 136          返 回 值:无
 137          设    计:zhaojunjie           日    期:2002-03-19
 138          修    改:                     日    期:
 139          ***********************************************************************/
 140          void BurstW1302T(uchar *pWClock)
 141          {
 142   1          uchar i;
 143   1          W1302(0x8e,0x00);         /* 控制命令,WP=0,写操作?*/
 144   1          T_RST = 0;
 145   1          T_CLK = 0;
 146   1          T_RST = 1;
 147   1          RTInputByte(0xbe);        /* 0xbe:时钟多字节写命令 */
 148   1          for (i = 8; i>0; i--)     /*8Byte = 7Byte 时钟数据 + 1Byte 控制*/
 149   1          {
 150   2              RTInputByte(*pWClock); /* 写1Byte数据*/
 151   2              pWClock++;
 152   2          }
 153   1          T_CLK = 1;
 154   1          T_RST = 0;
 155   1      }
 156          /********************************************************************
 157          函 数 名:BurstR1302T()
 158          功    能:读取DS1302时钟数据
 159          说    明:先写地址/命令,后读数据(时钟多字节方式)
 160          调    用:RTInputByte() , RTOutputByte()
 161          入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 162                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 163          返 回 值:无
 164          设    计:zhaojunjie           日    期:2002-03-19
 165          修    改:                     日    期:
 166          ***********************************************************************/
 167          void BurstR1302T(uchar *pRClock)
 168          {
 169   1          uchar i;
 170   1          T_RST = 0;
 171   1          T_CLK = 0;
 172   1          T_RST = 1;

⌨️ 快捷键说明

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