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

📄 020.lst

📁 时钟芯片DS1302的设置、读取和测试程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.09   020                                                                   09/03/2008 11:18:50 PAGE 1   


C51 COMPILER V7.09, COMPILATION OF MODULE 020
OBJECT MODULE PLACED IN 020.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE 020.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /****************************************************************
   2          
   3           模块名称:DS1302.c
   4           功    能:实时时钟模块           
   5           时钟芯片型号:DS1302 
   6           说    明:
   7          *********************************************************************/
   8          #include <reg52.h>
   9          #define uchar unsigned char        //宏定义
  10          #define uint unsigned int 
  11          
  12          sbit     T_CLK      = P3^4;   /*实时时钟时钟线引脚 */
  13          sbit     T_IO       = P3^5;   /*实时时钟数据线引脚 */
  14          sbit     T_RST      = P3^3;   /*实时时钟复位线引脚 */
  15          
  16          sbit  ACC0 = ACC^0;
  17          sbit  ACC7 = ACC^7;
  18          unsigned char code table[]=
  19          {0xdf,0x86,0xbb,0xaf,0xe6,0xed,0xfd,0x87,  
  20          0xff,0xef,0xf7,0xfc,0xd9,0xbe,0xf9,0xf1};
  21          uchar ledaddr[]={0x20,0x10,0x08,0x04,0x02,0x01};
  22          
  23          //函数声明
  24          void   delay_ms(uint x);                         //延时
  25          void   RTInputByte(uchar);       /* 输入 1Byte */
  26          uchar  RTOutputByte(void);       /* 输出1Byte */
  27          void   W1302(uchar, uchar);              //往DS1302写入数据
  28          uchar  R1302(uchar);                     //读取DS1302某地址的数据
  29          void   Set1302(uchar *);         /* 设置时间 */
  30          void   Bcd2asc(uchar,uchar *);
  31          void   Get1302(); /* 读取1302当前时间 */
  32          
  33          //uchar time1[7];
  34          uchar ucCurtime[7];
  35          
  36          /******************************************************************** 
  37          
  38           函 数 名:delay1()
  39           功    能:延时子程序
  40           说    明:通过调整x的值可以改变延时长短
  41           入口参数:x
  42           返 回 值:无  
  43          ***********************************************************************/
  44          void delay_ms(uint x)
  45             {
  46   1         uchar tw;
  47   1         while (x-->0)
  48   1                      {
  49   2                      for (tw=0;tw<125;tw++){;}
  50   2                      }
  51   1         }
  52          
  53          
  54          /******************************************************************** 
  55          
C51 COMPILER V7.09   020                                                                   09/03/2008 11:18:50 PAGE 2   

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

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

⌨️ 快捷键说明

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