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

📄 1302.lst

📁 采用C语言编程
💻 LST
字号:
C51 COMPILER V7.06   1302                                                                  07/31/2008 22:35:06 PAGE 1   


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

stmt level    source

   1          #define uchar unsigned char
   2          #define uint   unsigned int
   3          #include "def.h"
   4          #include <reg52.h>
   5          #include <stdio.h>
   6          #include <math.h>
   7          #include <intrins.h>
   8          #include <public.h>
   9          
  10          void Write_Ds1302_byte(unsigned char temp); 
  11          void Write_Ds1302( unsigned char address,unsigned char dat );
  12          unsigned char Read_Ds1302 ( unsigned char address );
  13          
  14          void Read_RTC(void);//read RTC 
  15          void Set_RTC(void);//set RTC 
  16          
  17          /***************************************************************************************/
  18          
  19          sbit SCL2=P1^3;         //SCL2定义为P1口的第3位脚,连接DS1302SCL和ADC0831SCL脚
  20          sbit SDA2=P1^4;         //SDA2定义为P1口的第4位脚,连接DS1302SCL和ADC0831SDA脚
  21          //sbit CS2=P1^6;                //CS2定义为P1口的第4位脚,连接ADC0831CS脚
  22          sbit RST = P1^5;   // DS1302片选脚
  23          
  24          
  25          
  26          /*********************************************************************/
  27          
  28          void Write_Ds1302_Byte(unsigned  char temp) 
  29          {
  30   1       unsigned char i;
  31   1       for (i=0;i<8;i++)      //循环8次 写入数据
  32   1        { 
  33   2         SCL2=0;
  34   2           SDA2=temp&0x01;            //每次传输低字节 
  35   2           temp>>=1;                  //右移一位
  36   2           SCL2=1;
  37   2         }
  38   1      }   
  39          
  40          /****************************************************************************/
  41          void Write_Ds1302( unsigned char address,unsigned char dat )     
  42          {
  43   1              RST=0;
  44   1              _nop_();
  45   1              SCL2=0;
  46   1              _nop_();
  47   1              RST=1;  
  48   1              _nop_();   //启动
  49   1              Write_Ds1302_Byte(address);     //发送地址
  50   1              Write_Ds1302_Byte(dat);         //发送数据
  51   1              RST=0;                  //恢复
  52   1      }
  53          /****************************************************************************/
  54          unsigned char Read_Ds1302 ( unsigned char address )
  55          {
C51 COMPILER V7.06   1302                                                                  07/31/2008 22:35:06 PAGE 2   

  56   1              unsigned char i,temp=0x00;
  57   1              RST=0;
  58   1              _nop_();
  59   1              SCL2=0;
  60   1              _nop_();
  61   1              RST=1;
  62   1              _nop_();
  63   1              Write_Ds1302_Byte(address);
  64   1              for (i=0;i<8;i++)               //循环8次 读取数据
  65   1              {               
  66   2                      if(SDA2)
  67   2                      temp|=0x80;                     //每次传输低字节
  68   2                      SCL2=0;
  69   2                      temp>>=1;                       //右移一位
  70   2                      SCL2=1;
  71   2              } 
  72   1              RST=0;
  73   1              _nop_();                //以下为DS1302复位的稳定时间
  74   1              RST=0;
  75   1              SCL2=0;
  76   1              _nop_();
  77   1              SCL2=1;
  78   1              _nop_();
  79   1              SDA2=0;
  80   1              _nop_();
  81   1              SDA2=1;
  82   1              _nop_();
  83   1              return (temp);                  //返回
  84   1      }
  85          /****************************************************************************/
  86          void Read_RTC(void)             //读取 日历
  87          {
  88   1       unsigned char i,*p;
  89   1       p=read_rtc_address;    //地址传递
  90   1       for(i=0;i<7;i++)               //分7次读取 年月日时分秒星期
  91   1       {
  92   2       l_tmpdate[i]=Read_Ds1302(*p);
  93   2      //  l_tmpdate[i]=i;
  94   2        p++;
  95   2       }
  96   1      }
  97          /***********************************************************************/
  98          void Set_RTC(void)              //设定 日历
  99          {
 100   1              unsigned char i,*p,tmp;
 101   1              for(i=0;i<7;i++){
 102   2                      tmp=l_tmpdate[i]/10;
 103   2                      l_tmpdate[i]=l_tmpdate[i]%10;
 104   2                      l_tmpdate[i]=l_tmpdate[i]+tmp*16;
 105   2              }
 106   1              Write_Ds1302(0x8E,0X00);
 107   1              
 108   1              p=write_rtc_address;    //传地址        
 109   1              for(i=0;i<7;i++)                //7次写入 年月日时分秒星期
 110   1              {
 111   2                        Write_Ds1302(*p,l_tmpdate[i]);
 112   2                       p++;  
 113   2               }
 114   1               Write_Ds1302(0x8E,0x80);
 115   1      }
 116          
 117          /*********************************************************************/
C51 COMPILER V7.06   1302                                                                  07/31/2008 22:35:06 PAGE 3   

 118          
 119          
 120          
 121          
 122          //1302读出16进制数的转化程序
 123          void chang()
 124          {
 125   1              l_tmpdate1[0]=(l_tmpdate[6]/16) + 0x30;
 126   1              l_tmpdate1[1]=(l_tmpdate[6]&0x0f) + 0x30;
 127   1              l_tmpdate1[2]='/';
 128   1              l_tmpdate1[3]=(l_tmpdate[4]/16)+0x30;
 129   1              l_tmpdate1[4]=(l_tmpdate[4]&0x0f) +0x30;
 130   1              l_tmpdate1[5]='/';
 131   1      
 132   1              l_tmpdate1[6]=(l_tmpdate[3]/16)+0x30;
 133   1              l_tmpdate1[7]=(l_tmpdate[3]&0x0f)+ 0x30;
 134   1      
 135   1              l_tmpdate1[8]=((l_tmpdate[2]/16)& 0x03)+0x30;                   
 136   1              l_tmpdate1[9]=(l_tmpdate[2]&0x0f) + 0x30;
 137   1              l_tmpdate1[10]=':';                                             
 138   1              l_tmpdate1[11]=(l_tmpdate[1]/16)+0x30;
 139   1              l_tmpdate1[12]=(l_tmpdate[1]&0x0f) +0x30;
 140   1              l_tmpdate1[13]=':';
 141   1              l_tmpdate1[14]=((l_tmpdate[0]/16) & 0x07)+0x30;
 142   1              l_tmpdate1[15]=(l_tmpdate[0]&0x0f) +0x30;
 143   1      
 144   1              
 145   1      }


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