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

📄 ds1302.lst.svn-base

📁 单片机驱动32X64点阵资料
💻 SVN-BASE
字号:
C51 COMPILER V8.08   DS1302                                                                01/12/2012 22:02:46 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\Program Files\keil_51\C51\BIN\C51.EXE DS1302.C BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "NEW_8051.H"
   2          #include <intrins.h>
   3          #include"task.h"
   4          #include"sbit.h"
   5          
   6          uchar starts_time[7]={0x00,0x10,0x22,0x20,0x05,0x04,0x10};       //初始化后设置
   7          
   8          uchar Sec;
   9          uchar Cent;
  10          uchar Hour;
  11          uchar Year;
  12          uchar Day;
  13          uchar Week;
  14          uchar Month;
  15          uchar AddTime=0;
  16          uchar UpdateMode=0;
  17          /******************************************************************/
  18          
  19          //根据选择调整相应项目
  20          void Set(uchar sel,uchar sel_1) 
  21          {
  22   1        uchar address;
  23   1        char max,min,time;
  24   1       
  25   1        if(sel==11)  {address=0xc2; max=22;min=1;}    //自动转换时间时最大为20秒。
  26   1        if(sel==10)  {address=0xc0; max=1;min=0; }     //显示自动转换或手动转换。为零自动,为1手动。
  27   1        if(sel==9) {address=0xc6; max=20;min=0;}
  28   1        if(sel==8) {address=0xc4; max=1;min=0;}      //UpdateMode
  29   1        if(sel==7)  {address=0x80; max=59;min=0;}     //秒
  30   1        if(sel==6)  {address=0x82; max=59;min=0;}    //分钟
  31   1        if(sel==5)  {address=0x84; max=23;min=0;}    //小时
  32   1        if(sel==4)  {address=0x8a; max=7; min=1;}    //星期
  33   1        if(sel==3)  {address=0x86; max=31;min=1;}    //日
  34   1        if(sel==2)  {address=0x88; max=12;min=1;}    //月
  35   1        if(sel==1)  {address=0x8c; max=99;min=0;}    //年
  36   1        
  37   1        
  38   1        time=R1302(address+1)/16*10+R1302(address+1)%16;         //变成BCD码
  39   1        if (sel_1==0) time++;  else time--;
  40   1        if(time>max) time=min;   
  41   1        if(time<min) time=max;
  42   1                 
  43   1        W1302(0x8e,0x00);
  44   1        W1302(address,time/10*16+time%10);             
  45   1        W1302(0x8e,0x80);  
  46   1      }
  47          
  48          /**************************延时***********************/
  49          
  50          void DelayMs(void)
  51           {
  52   1        uchar TempCyc;
  53   1        for(TempCyc=50;TempCyc>1;TempCyc--)
  54   1           {;}
  55   1       }
C51 COMPILER V8.08   DS1302                                                                01/12/2012 22:02:46 PAGE 2   

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

 118          功    能:读取DS1302某地址的数据
 119          说    明:先写地址,后读命令/数据 (内部函数)
 120          调    用:RTInputByte() , RTOutputByte()
 121          入口参数:ucAddr: DS1302地址
 122          返 回 值:ucData :读取的数据
 123          ***********************************************************************/
 124          uchar R1302(uchar ucAddr)
 125          {
 126   1          uchar ucData;
 127   1          T_RST = 0;
 128   1          T_CLK = 0;
 129   1          T_RST = 1;
 130   1          RTInputByte(ucAddr);             /* 地址,命令 */
 131   1          ucData = RTOutputByte();         /* 读1Byte数据 */
 132   1          T_CLK = 1;
 133   1          T_RST = 0;
 134   1          return(ucData);
 135   1      }
 136          
 137          /******************************************************************** 
 138          函 数 名:Set1302()
 139          功    能:设置初始时间
 140          说    明:先写地址,后读命令/数据(寄存器多字节方式)
 141          调    用:W1302()
 142          入口参数:pClock: 设置时钟数据地址 格式为: 秒 分 时 日 月 星期 年
 143                                         7Byte (BCD码)1B 1B 1B 1B 1B  1B  1B
 144          返 回 值:无
 145          ***********************************************************************/
 146          void Set1302(uchar *pClock) 
 147          {
 148   1          uchar h;
 149   1          uchar ucAddr = 0x80; 
 150   1          W1302(0x8e,0x00);           /* 控制命令,WP=0,写操作?*/
 151   1          for(h =7; h>0; h--)
 152   1          { 
 153   2              W1302(ucAddr,*pClock);  /* 秒 分 时 日 月 星期 年 */ 
 154   2              pClock++;
 155   2              ucAddr +=2;
 156   2          }
 157   1              W1302(0xc0,0x01);
 158   1              W1302(0XC2,0X03);                       //初始自动转换显示时间为3秒。
 159   1          W1302(0x8e,0x80);           /* 控制命令,WP=1,写保护?*/
 160   1      
 161   1      }
 162          /******************读取DS1302中的时间****************/
 163          void du1302()
 164          {
 165   1            Sec=R1302(0x81);   //对取 秒 分 时 日 月 星期 年
 166   1                Cent=R1302(0x83);
 167   1                Hour=R1302(0x85);
 168   1                Day=R1302(0x87);
 169   1                Month=R1302(0x89);
 170   1                Week=R1302(0x8b);
 171   1                Year=R1302(0x8d);                             
 172   1                b=R1302(0xc1);
 173   1            a=R1302(0xc3);
 174   1                //a=a/16*10+a%16;
 175   1                UpdateMode=R1302(0xc5);
 176   1                AddTime=R1302(0xc7);
 177   1               // AddTime=AddTime/16*10+AddTime%16;
 178   1      }

C51 COMPILER V8.08   DS1302                                                                01/12/2012 22:02:46 PAGE 4   


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    458    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     16       6
   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 + -