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

📄 ds1302.lst

📁 ds1302和ds18b20驱动程序.完全是可以用的程序.
💻 LST
字号:
C51 COMPILER V6.23a  DS1302                                                                01/09/2008 20:10:32 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE DS1302
OBJECT MODULE PLACED IN DS1302.OBJ
COMPILER INVOKED BY: D:\Program Files\Keil\C51\BIN\C51.EXE DS1302.c BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1          /*DS1302驱动程序 **********************************************/
   2          /*版本  V1.1     **********************************************/
   3          /*2007-11-15      **********************************************/
   4          /*吾人           **********************************************/
   5          /*DS1302控制寄存器*******************************************/
   6          /*寄存器名--写--读--取值范围  --[7-----6--5---4--3--2--1--0]*/
   7          /*秒      --80--81---00-59    --[CH----{10SEC }--{--SEC-- }]*/
   8          /*分钟   --82--83---00-59    --[0 ----{10MIN }--{--MIN-- }]*/  
   9          /*小时    --84--85---0-12/23  --[12/24-0-10AP-HR-{ --HR-- }]*/ 
  10          /*日期    --86--87---1-28/29/30-[0 ----0-{10DAT}-{-DATAE- }]*/ 
  11          /*月份    --88--89---01-12    --[0-----0--0--10M-{-MONTH- }]*/ 
  12          /*周日    --8A--8B---01-07    --[0-----0--0---0--0-{-DAY- }]*/ 
  13          /*年份    --8C--8D---00-99    --[{  -10YEAR-   }-{-YEAR-  }]*/ 
  14          /************************************************************/
  15          
  16          #include        <reg52.h>
  17          #include        <intrins.h>
  18          #ifndef uchar
  19          #define uchar unsigned char
  20          #endif
  21          #ifndef uint
  22          #define uint  unsigned int
  23          #endif
  24          #define ds1302_set0(x) x=0
  25          #define ds1302_set1(x) x=1
  26          sbit ds1302_rst=P3^7;
  27          sbit ds1302_sclk=P3^5;
  28          sbit ds1302_io=P3^6;
  29          void  ds1302_initial();
  30          void  ds1302_senddata(uchar dsend);
  31          uchar  ds1302_receivedata(void);
  32          /*******************寄存器********************/
  33          char Ds1302Reg[7]={0};   //ds1302内部日期寄存器 (00-06)
  34          char Date[14]={0};
  35          /*********************************************/
  36          void ds1302_senddata(uchar dsend)
  37          { 
  38   1       uchar i;
  39   1       for(i=0;i<8;i++)
  40   1       {    
  41   2        ds1302_io=(bit)(dsend&0x01);
  42   2        ds1302_set1(ds1302_sclk);
  43   2        dsend=dsend>>1; 
  44   2        ds1302_set0(ds1302_sclk);    
  45   2       }
  46   1      }
  47          uchar ds1302_receivedata(void)
  48          {
  49   1       uchar i,dat=0;
  50   1       for(i=0;i<7;i++)
  51   1       {
  52   2        if(ds1302_io) dat=dat|0x80;
  53   2        else   dat=dat&0x7f;
  54   2        ds1302_set1(ds1302_sclk);
  55   2        dat=dat>>1;  
C51 COMPILER V6.23a  DS1302                                                                01/09/2008 20:10:32 PAGE 2   

  56   2        ds1302_set0(ds1302_sclk); 
  57   2       }
  58   1        if(ds1302_io) dat=dat|0x80;
  59   1        else   dat=dat&0x7f;
  60   1       return dat;
  61   1      }
  62          
  63          void Ds1302Write(char data1,char data2)
  64          {
  65   1       ds1302_set1(ds1302_rst);
  66   1       ds1302_senddata(data1);
  67   1       ds1302_senddata(data2);
  68   1       ds1302_set0(ds1302_rst);
  69   1      }
  70          char Ds1302Read(char Addr)
  71          {
  72   1       char DataReturn;
  73   1       ds1302_set1(ds1302_rst);
  74   1       ds1302_senddata(Addr);
  75   1       DataReturn=ds1302_receivedata();
  76   1       ds1302_set0(ds1302_rst);
  77   1       return DataReturn;
  78   1      }
  79          void Ds1302ReadAll()
  80          {
  81   1       char i;
  82   1       for(i=0;i<7;i++)
  83   1       {
  84   2        Ds1302Reg[i]=Ds1302Read(0x81|((i<<1)&0xfe));
  85   2       }
  86   1      }
  87          void Ds1302DataConver()
  88          {
  89   1       char Counter=0; 
  90   1       Ds1302ReadAll();
  91   1       //秒 分 时
  92   1       Date[5]=Ds1302Reg[0]%0x10;
  93   1       Date[4]=((Ds1302Reg[0]>>4)&0x07);
  94   1       Date[3]=Ds1302Reg[1]%0x10;
  95   1       Date[2]=(Ds1302Reg[1]>>4);
  96   1       Date[1]=Ds1302Reg[2]%0x10;
  97   1       Date[0]=((Ds1302Reg[2]>>4)&0x01);
  98   1       //日 月
  99   1       Date[9]=Ds1302Reg[3]%0x10;
 100   1       Date[8]=((Ds1302Reg[3]>>4)&0x03);
 101   1       Date[7]=Ds1302Reg[4]%0x10;
 102   1       Date[6]=((Ds1302Reg[4]>>4)&0x01);
 103   1       //星期
 104   1       Date[10]=Ds1302Reg[5];
 105   1       //年 基数 2000
 106   1       Date[11]=Ds1302Reg[6]%0x10;
 107   1       Date[12]=((Ds1302Reg[6]>>4)&0x0f);
 108   1       for(Counter=0;Counter<13;Counter++)
 109   1       Date[Counter]+='0';
 110   1      }
 111          
 112          void ds1302_initial()
 113          {
 114   1       ds1302_set0(ds1302_sclk);
 115   1       ds1302_set0(ds1302_rst);
 116   1       ds1302_set0(ds1302_io);
 117   1       Ds1302Write(0x8e,0x00);
C51 COMPILER V6.23a  DS1302                                                                01/09/2008 20:10:32 PAGE 3   

 118   1       Ds1302Write(0x80,0x01);
 119   1       Ds1302Write(0x82,0x00);
 120   1       Ds1302Write(0x84,0x00);
 121   1       Ds1302Write(0x86,0x00);
 122   1       Ds1302Write(0x90,0xa9);
 123   1      }
 124          /*DS1302驱动结束******************************************/
 125          
 126          /*先前版本存在一个小问题 说声抱歉了 这个已经在实际中通过*/


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