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

📄 1302.lst

📁 单片机与时钟芯片ds1302接口程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   1302                                                                  07/27/2007 22:38:52 PAGE 1   


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

line level    source

   1          /*********************************************************************
   2          
   3           公司名称:
   4           模块名称:DS1302.c
   5           功    能:实时时钟模块           时钟芯片型号:DS1302 
   6           说    明:
   7           程序设计:zhaojunjie        
   8           设计时间:2002.03.02        
   9           版 本 号: 20020302
  10          *********************************************************************/
  11          //#include <jyh.h>
  12          #include <intrins.h>
  13          #include "me.h"
  14          #define uchar unsigned char
  15          unsigned int XMS;
  16          //sbit     T_CLK      = P2^7;   /*实时时钟时钟线引脚 */
  17          //sbit     T_IO       = P1^4;   /*实时时钟数据线引脚 */
  18          //sbit     T_RST      = P1^5;   /*实时时钟复位线引脚 */
  19          sbit     T_CLK      = P1^2;   /*实时时钟时钟线引脚 */
  20          sbit     T_IO       = P1^3;   /*实时时钟数据线引脚 */
  21          sbit     T_RST      = P3^4;   /*实时时钟复位线引脚 */
  22          
  23          sbit  ACC0 = ACC^0;
  24          sbit  ACC7 = ACC^7;
  25          
  26          //此处定义数码管各段位置
  27          #define a   0x01                //D7
  28          #define b   0x02                //D6
  29          #define c       0x04            //D4
  30          #define d   0x08                //D3
  31          #define e   0x10                //D2
  32          #define f         0x20          //D0
  33          #define g               0x40            //D1
  34          #define dot 0x80                //D5
  35          //////////////////////////////
  36          
  37          //        ~(a+b+c+d+e+f),    // 共阳极
  38          //        (a+b+c+d+e+f),    // 共阴极
  39          //定义特殊符号
  40          //数码管显示时用的编码
  41          unsigned char code seg[] = 
  42          {
  43                  ~(a+b+c+d+e+f),        // 0
  44                  ~(b+c),                // 1
  45                  ~(a+b+d+e+g),          // 2
  46                  ~(a+b+c+d+g),          // 3
  47                  ~(b+c+f+g),            // 4
  48                  ~(a+c+d+f+g),          // 5
  49                  ~(a+c+d+e+f+g),        // 6
  50                  ~(a+b+c),                                               // 7
  51                  ~(a+b+c+d+e+f+g),      // 8
  52                  ~(a+b+c+d+f+g),        // 9
  53                  ~(a+b+c+e+f+g),        //A
  54                  ~(c+d+e+f+g),          //b
  55                  ~(a+d+e+f),            //C
C51 COMPILER V7.50   1302                                                                  07/27/2007 22:38:52 PAGE 2   

  56                  ~(b+c+d+e+g),          //d
  57                  ~(a+d+e+f+g),          //E
  58                  ~(a+e+f+g)             //F
  59          };
  60          char dispbuf[]={0,1,2,3,4,5};
  61          char low[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf};
  62          unsigned char stacode=0; //进入设置位数状态
  63          void   RTInputByte(uchar);       /* 输入 1Byte */
  64          uchar  RTOutputByte(void);       /* 输出?1Byte */
  65          void   W1302(uchar, uchar);
  66          uchar  R1302(uchar);
  67          void   Set1302(uchar *);         /* 设置时间 */
  68          void   Bcd2asc(uchar,uchar *);
  69          void   Get1302(uchar curtime[]); /* 读取1302当前时间 */
  70          
  71          /******************************************************************** 
  72          
  73           函 数 名:RTInputByte()
  74           功    能:实时时钟写入一字节
  75           说    明:往DS1302写入1Byte数据 (内部函数)
  76           入口参数:d 写入的数据 
  77           返 回 值:无  
  78           设    计:zhaojunjie           日    期:2002-03-19
  79           修    改:                     日    期: 
  80          ***********************************************************************/
  81          void RTInputByte(uchar dat) 
  82          { 
  83   1          uchar i;
  84   1          ACC = dat;
  85   1          for(i=8; i>0; i--)
  86   1          {
  87   2              T_IO = ACC0;           /*相当于汇编中的 RRC */
  88   2              T_CLK = 1;
  89   2              T_CLK = 0;
  90   2              ACC = ACC >> 1; 
  91   2          } 
  92   1      }
  93          /******************************************************************** 
  94          
  95           函 数 名:RTOutputByte()
  96           功    能:实时时钟读取一字节
  97           说    明:从DS1302读取1Byte数据 (内部函数)
  98           入口参数:无  
  99           返 回 值:ACC
 100           设    计:zhaojunjie           日    期:2002-03-19
 101           修    改:                     日    期: 
 102          ***********************************************************************/
 103          uchar RTOutputByte(void) 
 104          { 
 105   1          uchar i;
 106   1          for(i=8; i>0; i--)
 107   1          {
 108   2              ACC = ACC >>1;         /*相当于汇编中的 RRC */
 109   2              ACC7 = T_IO;
 110   2              T_CLK = 1;
 111   2              T_CLK = 0;
 112   2          } 
 113   1          return(ACC); 
 114   1      }
 115          /******************************************************************** 
 116          
 117           函 数 名:W1302()
C51 COMPILER V7.50   1302                                                                  07/27/2007 22:38:52 PAGE 3   

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

 180   1          {
 181   2              RTInputByte(*pWClock); /* 写1Byte数据*/
 182   2              pWClock++;
 183   2          }
 184   1          T_CLK = 1;
 185   1          T_RST = 0;
 186   1      } 
 187          /******************************************************************** 
 188          
 189           函 数 名:BurstR1302T()
 190           功    能:读取DS1302时钟数据
 191           说    明:先写地址/命令,后读数据(时钟多字节方式)
 192           调    用:RTInputByte() , RTOutputByte()
 193           入口参数:pRClock: 读取时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 194                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 195           返 回 值:无
 196           设    计:zhaojunjie           日    期:2002-03-19
 197           修    改:                     日    期: 
 198          ***********************************************************************/
 199          void BurstR1302T(uchar *pRClock)
 200          {
 201   1          uchar i;
 202   1          char j;
 203   1          T_RST = 0;
 204   1          T_CLK = 0;
 205   1          T_RST = 1;
 206   1          RTInputByte(0xbf);             /* 0xbf:时钟多字节读命令 */
 207   1          for (i=8; i>0; i--) 
 208   1          {
 209   2             j = RTOutputByte();   /* 读1Byte数据 */
 210   2                                      if (j>=0)
 211   2             *pRClock =j;   /* 读1Byte数据 */
 212   2             pRClock++;
 213   2          }
 214   1          T_CLK = 1;
 215   1          T_RST = 0;
 216   1      }
 217          /******************************************************************** 

⌨️ 快捷键说明

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