描述:
            #include"reg52.h"
#include"intrins.h"
typedef unsigned char uint8;			 
typedef unsigned int uint6;
sbit SDA=P1^1;
sbit SCK=P1^0;
sbit RST=P3^6;
#define ds1302wa 0x80
#define ds1302ra 0x81
uint8 time[7]={2,35,15,2,7,6,16};
void delay(uint6 n)
{
while(n--);
}	       
void write_ds1302_byte(uint8 dat)
 {
    uint8 i;
	  for(i=0;i<8;i++)
	    {
		  SDA=dat & 0x01;
		  SCK=1;
		  SCK=0;
		   dat>>=1;
		}
 }  
uint8 read_ds1302_byte()
 {
    uint8 i,dat=0;
	  for(i=0;i<8;i++)
	    {
		   dat>>=1;
	       if(SDA==1)
		    dat= dat | 0x80;
			SCK=1;
			SCK=0;
		}
	return dat;
 } 
 void reset_ds1302()
 {
   RST=0;
   SCK=0;
   RST=1;
 }
 void clear_ds1302_wp()
 {
   reset_ds1302();
   RST=1;
   write_ds1302_byte(0x8E);
   write_ds1302_byte(0x00);
   SDA=0;
   RST=0;
 }
  void set_ds1302_wp()
 {
   reset_ds1302();
   RST=1;
   write_ds1302_byte(0x8E);
   write_ds1302_byte(0x80);
   SDA=0;
   RST=0;
 }
 void write_ds1302(uint8 a,uint8 dat)
 {
   reset_ds1302();
   RST=1;
   write_ds1302_byte(a);
   write_ds1302_byte(dat);
   SDA=0;
   RST=0;
    
 }  
 uint8 read_ds1302(uint8 a)
 {
   uint8 temp=0;
   reset_ds1302();
   RST=1;
   write_ds1302_byte(a);
   temp=read_ds1302_byte();
   SDA=0;
   RST=0;
   return temp;
 }
 void set_time(uint8 *timedata)
 {
   uint8 i;
   uint8 tmp=0;
   for(i=0;i<7;i++)
     {
	   tmp=timedata[i]/10;
	   timedata[i]=timedata[i]%10;
	   timedata[i]=timedata[i]+tmp*16;
     }
	 clear_ds1302_wp();
	 tmp=ds1302wa;
	 
	 for(i=0;i<7;i++)
	    {
		  write_ds1302(tmp,timedata[i]);
		  tmp+=2;
		}
	 set_ds_1302_wp();
					  
 }
 
 void read_time(uint8 *timedata)
    {
	   uint8 i,tmp;
	   tmp=ds1302ra;
	   for(i=0;i<7;i++)
		 {
		    	   timedata[i]=read_ds1302(tmp);
				   tmp+=2;
		 }
	}
void uart_init(void)
{
  TMOD=0x21;
  SCON=0x50;
  TH1=0xFD;
  TL1=0xFD;
  TR1=1;
}
void uart_send_byte(uint8 dat)
{
  SBUF=dat;
  while(TI==0);
  TI=0;
}
void uart_send_dat(uint8 dat)
{
  uart_send_byte(dat/16+'0');
  uart_send_byte(dat%16+'0');
}
void main()
{
  uart_init();
  set_time(&time);
  while(1)
  {
  read_time(&time);
  uart_send_dat(time[6]);
  uart_send_byte('-');
  uart_send_dat(time[4]);
  uart_send_byte('-');
  uart_send_dat(time[3]);
  uart_send_byte(' ');
  uart_send_dat(time[2]);
  uart_send_byte(':');
  uart_send_dat(time[1]);
  uart_send_byte(':');
  uart_send_dat(time[0]);
  uart_send_byte('\r');
  uart_send_byte('\n');
  delay(10000);
  }
}	         															   

