View Single Post
Old 23-09-2009, 11:52 PM   #37
Mr.Bi
Đệ tử 7 túi
 
Tham gia ngày: Jul 2007
Nơi Cư Ngụ: Đà Nẵng
Bài gửi: 188
:
Cái này trên mạng đầy , do mấy u k chịu tìm hiểu và thử nghiệm code
Code:
void start(void)
{ SCL=0;SDA=1;SCL=1;SCL=1;
  SDA=0;SCL=0;}
void stop(void)
{ SCL=0;SDA=0;SCL=1;SDA=1;}
bit write_data(unsigned char chr)
{ unsigned char temp,ack;
  for(temp=0;temp<8;temp++)
    { SDA = (chr& 0x80) ? 1:0;
      SCL=1;
      SCL=0;
      chr=chr<<1;
    };
  SDA=1;SCL=1;ack=SDA;
  SCL=0;
  return(ack);
}
unsigned char convertBCD(unsigned char _data)
{ unsigned char temp;
  temp=(_data/10<<4)|(_data%10&0x0F);
  return temp;
}
unsigned char read_data(void)
{ unsigned char temp1,temp2=0;
  for(temp1=0;temp1<8;temp1++)
    { SCL=1;
      temp2=temp2<<1;
      temp2=temp2|((unsigned char)(SDA));
      SCL=0;
    };
  return(temp2);
}
void write_RTC(unsigned char address, unsigned char _data)
{ bit status;
  start();
  write_data(0xD0);
  write_data(address);
  write_data(_data);
  stop();
  start();
  status=write_data(0xD0);
  while(status)	 //status = 1 (NACK)
       { start();
        status=write_data(0xd0);
       };
}
unsigned char read_RTC(unsigned char address)
{ unsigned char k;
  start();
  write_data(0xD0);
  write_data(address);
  start();
  write_data(0xD1);
  k=read_data();
  stop();
  return ((k>>4)*10+(k&0x0F));
}
void init_RTC()
{ write_RTC(0x07,0x10); 
  write_RTC(0x00,0x00); //0s
  write_RTC(0x01,0x47); // phut	: 47
  write_RTC(0x02,0x13);	// h : 13
  write_RTC(0x04,0x26);	// ngay : 26
  write_RTC(0x05,0x06);	// thang : 6
  write_RTC(0x06,0x09);	// nam : 2009
}
Đọc bài hướng dẫn chi tiết http://svdanang.com/@pbk/showthread.php?t=29583
Mr.Bi vẫn chưa có mặt trong diễn đàn   Trả Lời Với Trích Dẫn