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

📄 ds1302.lst

📁 nokia5110智能电子钟的设计ds1302+ds18b20+stc12c5a60s2
💻 LST
字号:
C51 COMPILER V9.00   DS1302                                                                07/01/2013 12:13:29 PAGE 1   


C51 COMPILER V9.00, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN ..\output\ds1302.obj
COMPILER INVOKED BY: D:\Keil\C51\BIN\C51.EXE ..\c_file\ds1302.c BROWSE INCDIR(..\c_file;..\h_file;..\output;..\project) 
                    -DEBUG OBJECTEXTEND PRINT(.\ds1302.lst) OBJECT(..\output\ds1302.obj)

line level    source

   1          /**************************************************************************************
   2          *                                               子程序:底层程序                                                                          *                                               
   3          *                                                   功能:时间日期数据处理;                                                              *
   4          *                                                                                                                                                         *
   5          *                                                                                                                                                                         *
   6          ***************************************************************************************/
   7          # include <intrins.h>
   8          # include "macroandconst.h"
   9          # include "stc12c5a60s2.h"
  10          # include "nokia5110.h"
  11          
  12          
  13          sbit SCK = P0^2;        //DS1302时钟;   
  14          sbit SDA = P0^1;        //DS1302数据;   
  15          sbit RST = P0^0;// DS1302复位;
  16          
  17          uchar l_tmpDate[]={0,0,0,1,1,1,13};//秒分时日月周年08-05-15 12:00:00
  18          uchar l_tmpdisplay[13];
  19          
  20          
  21          
  22          code uchar Write_rtc_address[7]={0x80,0x82,0x84,0x86,0x88,0x8a,0x8c}; //秒分时日月周年 最低位读写位
  23          
  24          code uchar Read_RTC_address[7]={0x81,0x83,0x85,0x87,0x89,0x8b,0x8d};  
  25          
  26          /******************************************************************/
  27          /*                   写一个字节                                   */
  28          /******************************************************************/
  29          void Write_Ds1302_Byte(unsigned  char temp) 
  30          {
  31   1       unsigned char i;
  32   1       for (i=0;i<8;i++)      //循环8次 写入数据
  33   1        { 
  34   2         SCK=0;
  35   2           SDA=temp&0x01;     //每次传输低字节 
  36   2           temp>>=1;                  //右移一位
  37   2           SCK=1;
  38   2         }
  39   1      }   
  40          /******************************************************************/
  41          /*                  写入DS1302                                    */
  42          /******************************************************************/
  43          void Write_Ds1302( unsigned char address,unsigned char dat )     
  44          {
  45   1              RST=0;
  46   1              _nop_();
  47   1              SCK=0;
  48   1              _nop_();
  49   1              RST=1;  
  50   1              _nop_();                    //启动
  51   1              Write_Ds1302_Byte(address);     //发送地址
  52   1              Write_Ds1302_Byte(dat);         //发送数据
  53   1              RST=0;                              //恢复
  54   1      }
C51 COMPILER V9.00   DS1302                                                                07/01/2013 12:13:29 PAGE 2   

  55          /******************************************************************/
  56          /*                   读出DS1302数据                               */
  57          /******************************************************************/
  58          unsigned char Read_Ds1302 ( uchar address )
  59          {
  60   1      
  61   1              unsigned char i,temp=0x00;
  62   1      
  63   1              RST=0;
  64   1              _nop_();
  65   1              _nop_();
  66   1              SCK=0;
  67   1              _nop_();
  68   1              _nop_();
  69   1              RST=1;
  70   1              _nop_();
  71   1              _nop_();
  72   1              Write_Ds1302_Byte(address);
  73   1      
  74   1              for (i=0;i<8;i++)               //循环8次 读取数据
  75   1              {               
  76   2                      if(SDA)
  77   2                      {
  78   3                      temp|=0x80;
  79   3                      }                       //每次传输低字节
  80   2                      temp>>=1;                       //右移一位
  81   2                      SCK=1;
  82   2                 _nop_();
  83   2                 _nop_();
  84   2                      SCK=0;
  85   2      
  86   2              } 
  87   1              RST=0;
  88   1              _nop_();                        //以下为DS1302复位的稳定时间
  89   1              _nop_();
  90   1              RST=0;
  91   1              SCK=0;
  92   1              _nop_();
  93   1              _nop_();
  94   1              _nop_();
  95   1              _nop_();
  96   1              SCK=1;
  97   1              _nop_();
  98   1              _nop_();
  99   1              SDA=0;
 100   1              _nop_();
 101   1              _nop_();
 102   1              SDA=1;
 103   1              _nop_();
 104   1              _nop_();
 105   1              return (temp);                  //返回
 106   1      }
 107          /******************************************************************/
 108          /*                   读时钟数据                                   */
 109          /******************************************************************/
 110          void Read_RTC(void)             //读取 日历
 111          {
 112   1       unsigned char i,*p;
 113   1       p=Read_RTC_address;        //地址传递
 114   1       for(i=0;i<7;i++)                   //分7次读取 秒分时日月周年
 115   1       {
 116   2        l_tmpDate[i]=Read_Ds1302(*p);
C51 COMPILER V9.00   DS1302                                                                07/01/2013 12:13:29 PAGE 3   

 117   2        p++;
 118   2       }
 119   1      
 120   1      
 121   1      
 122   1      }
 123          /******************************************************************/
 124          /*                  设定时钟数据                                  */
 125          /******************************************************************/
 126          void Set_RTC(void)                  //设定 日历
 127          {
 128   1              uchar i,*p,tmp;
 129   1              for(i=0;i<7;i++)
 130   1               {                                               //BCD处理
 131   2                       tmp=l_tmpDate[i]/10;
 132   2                      l_tmpDate[i]=l_tmpDate[i]%10;
 133   2                      l_tmpDate[i]=l_tmpDate[i]+tmp*16;
 134   2      
 135   2                      }  
 136   1              Write_Ds1302(0x8E,0X00); //关闭写保护;
 137   1              
 138   1              p=Write_rtc_address;    //传地址        
 139   1              for(i=0;i<7;i++)                //7次写入 秒分时日月周年
 140   1              {
 141   2                        Write_Ds1302(*p,l_tmpDate[i]);
 142   2                        p++;  
 143   2              }
 144   1               Write_Ds1302(0x8E,0x80); //打开写保护; 
 145   1      }
 146          
 147          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    220    ----
   CONSTANT SIZE    =     14    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     20    ----
   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 + -