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

📄 ds1305c3.lst

📁 单片机C语言教程
💻 LST
字号:
C51 COMPILER V8.02   DS1305C3                                                              08/10/2007 21:13:37 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE DS1305C3
OBJECT MODULE PLACED IN ds1305C3.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE ds1305C3.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          /*******************************************************************/
   2          /* 这是用C51高级语言编写的DS1305时钟和RAM读写程序-没有调用汇编语言,*/
   3          /* 文件名 DS1305C3.C                                                */
   4          /* 功能:本程序主要是读DS1305的日历时钟值(共7个字节)、置DS1305    */
   5          /*       的日历时钟值、读DS1305的RAM区特定单元(共96个字节)的内    */
   6          /*       容和写DS1305的RAM区特定单元。本程序中对DS1305 RAM区的读    */
   7          /*       写均为16个字节。                                           */
   8          /********************************************************************/
   9          #include <stdio.h>
  10          #include <reg52.h>
  11          #define uchar unsigned char
  12          
  13          void    reset_3w(void);
  14          void    wbyte_3w(uchar w_byte);
  15          uchar   rbyte_3w(void);
  16          void    Initialize();
  17          void    TimeWrite();
  18          void    BurstReadTime();
  19          void    BurstRamRead(void);
  20          void    BurstRamWrite(void);
  21          void    writebyte1305();
  22          void    readbyte1305();
  23          
  24          sbit    CE        = P1^2;
  25          sbit    SCLK      = P1^1;
  26          sbit    SDI_IO    = P1^0;
  27          sbit    INT0b     = P3^2;       /* INT0b脚与单片机的P3.2连接*/
  28          uchar mid1[16];
  29          uchar CPOL = 0;
  30          
  31          void reset_3w()               // DS1305复位
  32          {
  33   1              SCLK  = 0;
  34   1              CE    = 0;
  35   1              CE    = 1;
  36   1      }
  37          void wbyte_3w(uchar w_byte)     /*把w_byte中的数据从高位开始送入ds1305 */
  38          {
  39   1          uchar i;
  40   1              for(i = 0; i < 8; ++i)
  41   1              {
  42   2                 SDI_IO = 0;
  43   2                 if(w_byte & 0x01)
  44   2                 {
  45   3                   SDI_IO = 1;
  46   3                 }
  47   2                 SCLK = 0;
  48   2                 SCLK = 1;
  49   2                 w_byte >>= 1;
  50   2              }
  51   1      }
  52          uchar rbyte_3w()                  /*对DS1305进行读操作程序 */
  53          {
  54   1          uchar i, R_Byte, TmpByte;
  55   1          R_Byte = 0x00;
C51 COMPILER V8.02   DS1305C3                                                              08/10/2007 21:13:37 PAGE 2   

  56   1              SDI_IO = 1;
  57   1              for(i = 0; i < 8; ++i)
  58   1              {
  59   2                      SCLK = 1;
  60   2                      SCLK = 0;
  61   2                      TmpByte = (uchar)SDI_IO;
  62   2                      TmpByte <<= 7;
  63   2                      R_Byte >>= 1;
  64   2                      R_Byte |= TmpByte;
  65   2              }
  66   1              return R_Byte;
  67   1      }
  68          void readbyte1305()     /* 从DS1305中指定单元读出一个字节 */
  69          {
  70   1              uchar Add;
  71   1              uchar Data;
  72   1              Add=0x06;          /* 指定待读出单元的地址 */
  73   1                  reset_3w();
  74   1                  wbyte_3w(Add);
  75   1              Data=rbyte_3w();   /* 读出的结果放在Data中 */
  76   1                  reset_3w();
  77   1      }
  78          void writebyte1305()    /* 向DS1305中指定单元写入一个字节 */
  79          {
  80   1              uchar Add, Data;
  81   1              Add= 0x06;          /* 指定待写入单元的地址 */
  82   1              Data= 0x07;         /* 指定待写入的内容     */
  83   1              /* User enters read address. Must convert to write address. */
  84   1                  Add |= 0x80;
  85   1                  reset_3w();
  86   1                  wbyte_3w(Add);
  87   1                  wbyte_3w(Data);
  88   1                  reset_3w();
  89   1      }
  90          void TimeWrite()        /*  日历时钟值写入 */
  91          {
  92   1          uchar       yr, mn, dt, dy, hr, min, sec;
  93   1              reset_3w();       //清时钟写保护位。在写时钟之前,必须清时钟写保护位,否则写不进去。
  94   1              wbyte_3w(0x8F);
  95   1              wbyte_3w(0);
  96   1              reset_3w();
  97   1              yr=06;       /* 置待写入的年、月、日、时、分和秒的压缩的BCD码值 */
  98   1          mn=0x11;
  99   1          dt=0x26;
 100   1          dy=7;
 101   1          hr=9;
 102   1          hr = hr & 0x3f;
 103   1          min=9;
 104   1          sec=9;
 105   1              reset_3w();
 106   1              wbyte_3w(0x80); 
 107   1              wbyte_3w(sec);
 108   1              wbyte_3w(min);
 109   1              wbyte_3w(hr);
 110   1              wbyte_3w(dy);
 111   1              wbyte_3w(dt);
 112   1              wbyte_3w(mn);
 113   1              wbyte_3w(yr);
 114   1              reset_3w();
 115   1      }
 116          void BurstReadTime()     /*  突发模式时钟读 */
 117          {
C51 COMPILER V8.02   DS1305C3                                                              08/10/2007 21:13:37 PAGE 3   

 118   1          uchar Sec, Min, Hrs, Day, Dte, Mon, Yr;
 119   1              reset_3w();
 120   1              wbyte_3w(0x00);
 121   1              Sec = rbyte_3w();
 122   1              Min = rbyte_3w();
 123   1              Hrs = rbyte_3w();
 124   1              Day = rbyte_3w();
 125   1              Dte = rbyte_3w();
 126   1              Mon = rbyte_3w();
 127   1              Yr  = rbyte_3w();
 128   1              reset_3w();
 129   1      }
 130          void BurstRamRead()     /*  突发模式RAM读 */
 131          {
 132   1            uchar i;
 133   1            reset_3w();
 134   1            wbyte_3w(0x20);
 135   1            for (i = 0; i < 16; ++i)
 136   1             {
 137   2               mid1[i]=rbyte_3w() ; //数组mid1[i]中放读出内容
 138   2             }
 139   1            reset_3w();
 140   1      }
 141          void BurstRamWrite()    /*  突发模式RAM写 */
 142          {
 143   1          uchar i, dat;
 144   1          dat=0x55;              //  dat中放待写入内容
 145   1              reset_3w();
 146   1              wbyte_3w(0xA0);
 147   1              for (i = 0; i < 16; ++i)
 148   1              {
 149   2                wbyte_3w(dat);
 150   2              }
 151   1              reset_3w();
 152   1      }
 153          void    Initialize()    /*  DS1305初始化 */
 154          {
 155   1              reset_3w();
 156   1              wbyte_3w(0x8f); 
 157   1              wbyte_3w(0x05);   /* 往控制寄存器写0x05*/
 158   1              reset_3w();
 159   1          wbyte_3w(0x90);     
 160   1              wbyte_3w(0x01);   /* 往状态制寄存器写0x01*/
 161   1          reset_3w();
 162   1              wbyte_3w(0x91); 
 163   1              wbyte_3w(0xa5);   /* 往涓流充电寄存器写0xa5*/
 164   1              reset_3w();
 165   1      }
 166                        
 167          void    main()    //主程序
 168          {
 169   1              while (1)
 170   1              {
 171   2      
 172   2                  //  writebyte1305();
 173   2              //  readbyte1305();
 174   2              Initialize();      /* 调DS1305初始化 */
 175   2                      TimeWrite();       /* 调日历时钟值写入*/
 176   2                      BurstReadTime();   /*  突发模式时钟读 */
 177   2                      BurstRamWrite();   /*  突发模式RAM写  */ 
 178   2                      BurstRamRead();    /*  突发模式RAM读  */
 179   2       }
C51 COMPILER V8.02   DS1305C3                                                              08/10/2007 21:13:37 PAGE 4   

 180   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    334    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     17      10
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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