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

📄 ds1302.lst

📁 万年历系统
💻 LST
字号:
C51 COMPILER V7.06   DS1302                                                                05/14/2009 00:04:43 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ds1302.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE ds1302.c COMPACT BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          #include <absacc.h>
   2          #include <intrins.h>
   3          #include <reg51.h>
   4          #include <ds1302.h>
   5          #include "lcd.h"
   6          #define uchar unsigned char
   7          
   8          
   9          
  10          sbit  DS1302_CLK = P2^6;              //实时时钟时钟线引脚 
  11          sbit  DS1302_IO  = P2^5;              //实时时钟数据线引脚 
  12          sbit  DS1302_RST = P2^7;              //实时时钟复位线引脚
  13          
  14          uchar read_1302(void)           //从1302中读取一个字节
  15          {
  16   1              uchar i,data_1302;
  17   1              for(i=0;i<8;i++)
  18   1              {
  19   2                      data_1302>>=1;
  20   2                      if(DS1302_IO)
  21   2                      {
  22   3                              data_1302|=0x80;
  23   3                      }
  24   2                      DS1302_CLK=1;
  25   2                      DS1302_CLK=0;
  26   2              }
  27   1              return (data_1302);
  28   1      }
  29          
  30          void write_1302(uchar data_1302)//向1302中写入一个字节
  31          {
  32   1              uchar i;
  33   1              for(i=0;i<8;i++)
  34   1              {
  35   2                      DS1302_IO=(bit)(data_1302&0x01);
  36   2                      DS1302_CLK=1;
  37   2                      DS1302_CLK=0;
  38   2                      data_1302>>=1;
  39   2              }
  40   1      }
  41          //向1302的某一地址中写入一个字节的数据
  42          
  43          void write_all_1302(uchar addr,uchar data_1302) 
  44          {
  45   1              DS1302_RST = 0;
  46   1              DS1302_CLK = 0;
  47   1              DS1302_RST = 1;
  48   1              write_1302(addr);
  49   1              write_1302(data_1302);
  50   1              DS1302_CLK = 1;
  51   1              DS1302_RST = 0;
  52   1      }
  53          
  54          //从1302的某一地址中读取一个字节的数据
  55          
C51 COMPILER V7.06   DS1302                                                                05/14/2009 00:04:43 PAGE 2   

  56          uchar read_all_1302(uchar addr)
  57          {
  58   1              uchar data_1302;
  59   1              DS1302_RST = 0;
  60   1              DS1302_CLK = 0;
  61   1              DS1302_RST = 1;
  62   1              write_1302(addr|0x01);
  63   1              data_1302 = read_1302();
  64   1              DS1302_CLK = 1;
  65   1              DS1302_RST = 0;
  66   1              return (data_1302);
  67   1      }
  68          
  69          
  70          void DS1302_SetProtect(bit flag)        //是否写保护
  71          {
  72   1              if(flag)
  73   1                      write_all_1302(0x8E,0x80); //禁止写
  74   1              else
  75   1                      write_all_1302(0x8E,0x00); //允许写
  76   1      }
  77          
  78          //停止1302时钟
  79          
  80          void stop_1302(void)
  81          {
  82   1              uchar i;
  83   1              i = read_all_1302(DS1302_SECOND);
  84   1              i |= 0x80;
  85   1              write_all_1302(DS1302_SECOND,i);
  86   1      }
  87          
  88          //启动1302时钟
  89          
  90          void start_1302(void)
  91          {
  92   1              uchar i;
  93   1              i = read_all_1302(DS1302_SECOND);
  94   1              i &= 0x7f;
  95   1              write_all_1302(DS1302_SECOND,i);
  96   1      }
  97          
  98          
  99          //读出1302的时间序列
 100          void read_serial(uchar *j)
 101          {
 102   1              uchar i;
 103   1              DS1302_RST = 0;
 104   1              DS1302_CLK = 0;
 105   1              DS1302_RST = 1;
 106   1              write_1302(0xbf);//0xbf为连续读出的命令代码
 107   1              for(i=0;i<8;i++)
 108   1              {
 109   2                      *(j+i) = read_1302();
 110   2                      nop();
 111   2              }
 112   1              DS1302_CLK = 1;
 113   1              DS1302_RST = 0;
 114   1      }
 115          //写入1302的时间序列
 116          
 117          void write_date_time(uchar *j)
C51 COMPILER V7.06   DS1302                                                                05/14/2009 00:04:43 PAGE 3   

 118          {
 119   1              uchar i;
 120   1              DS1302_RST = 0;
 121   1              DS1302_CLK = 0;
 122   1              DS1302_RST = 1;
 123   1              write_1302(0xbe);//0xbe为连续写入的命令代码
 124   1              for(i=0;i<8;i++)
 125   1              {
 126   2                      write_1302(*(j+i));
 127   2              }
 128   1              DS1302_CLK = 1;
 129   1              DS1302_RST = 0;
 130   1      }
 131          
 132          void init1302()
 133          {
 134   1        DS1302_SetProtect(0);
 135   1       // write_all_1302(0x8c,0x00);
 136   1       // write_all_1302(0x88,0x05);
 137   1       // write_all_1302(0x86,0x25);
 138   1       // write_all_1302(0x8a,0x04);
 139   1       // write_all_1302(0x84,0x00);
 140   1       // write_all_1302(0x82,0x59);
 141   1       // write_all_1302(0x80,0x55);
 142   1        DS1302_SetProtect(1); 
 143   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    257    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----       7
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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