เวลาของ RTC DS1307 ไม่ตรงต้องทำยังไงค่ะ

Started by zombies, February 03, 2017, 02:07:49 AM

Previous topic - Next topic

zombies

อันนี้เป็นโค้ด DS1307 ไม่รู้เขียนผิดในส่วนไหน เวลามันไม่ตรงกับเวลาปัจจุบันค่ะ


void   DS1307Int()
{
   send_ds1307(0x07,0x91);
   read_sec();
   read_min();
   read_hour();
   read_date();
   read_mount();
   read_year();
}

void   send_ds1307(int ad,int data)
{
   
   i2c_start();
   i2c_write(0xD0);
   i2c_write(ad);
   i2c_write(data);
   i2c_stop();

}

int    read_ds1307(int ad)
{
   int   x;
   
   i2c_start();
   i2c_write(0xD0);
   i2c_write(ad);
   i2c_start();
   i2c_write(0xD1);
   x=i2c_read(0);
   i2c_stop();
   return(x);
}

void   read_sec()
{
   int   x;
      x=read_ds1307(0x00);
      DS_SEC=(x/0x10)*10;
      DS_SEC+=(x%0x10);
     
}

void   read_min()
{
   int   x;
      x=read_ds1307(0x01);
      DS_MIN=(x/0x10)*10;
      DS_MIN+=(x%0x10);
     
}
void   read_hour()
{
   int   x;
      x=read_ds1307(0x02);
      DS_HOUR=(x/0x10)*10;
      DS_HOUR+=(x%0x10);
}
void   read_day()
{
   int   x;
      x=read_ds1307(0x03);
      DS_DAY=x;
}
void   read_date()
{
   int   x;
      x=read_ds1307(0x04);
      DS_DATE=(x/0x10)*10;
      DS_DATE+=(x%0x10);
}
void   read_mount()
{
   int   x;
      x=read_ds1307(0x05);
      DS_MOUNT=(x/0x10)*10;
      DS_MOUNT+=(x%0x10);
}
void   read_year()
{
   int   x;
      x=read_ds1307(0x06);
      DS_YEAR=(x/0x10)*10;
      DS_YEAR+=(x%0x10);//+2000;
      TH_YEAR=DS_YEAR+2543;
}
void   Ds1307_read()
{
   read_day();
   read_sec();
   read_min();
   read_hour();
   read_date();
   read_mount();
   read_year();
}

void   save_day(int x)
{
   send_ds1307(0x03,x);
}
void   save_date(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x04,y);
}
void   save_mount(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x05,y);
}
void   save_year(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x06,y);
}
void   save_sec(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x00,y);
}

void   save_min(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x01,y);
}
void   save_hour(int x)
{
   int y;
   
   y=((x/10)<<4);
   y|=x%10;
   send_ds1307(0x02,y);
}

void  set_time_ds(int   hh,int mm,int ss)
{
   save_hour(hh);
   save_min(mm);
   save_sec(ss);
}
void  set_date_ds(int   dd,int mm,int yy)
{
   save_date(dd);
   save_mount(mm);
   save_year(yy);
}

//31  // 1 3 5 7 8 10 12
//30 // 4 6 9 11

JENG

ตั้งใหม่ซิคับ ใช้สอง function นี้ เพื่อเขียนเวลาปัจจุบันให้ RTC


void  set_time_ds(int   hh,int mm,int ss)
{
   save_hour(hh);
   save_min(mm);
   save_sec(ss);
}
void  set_date_ds(int   dd,int mm,int yy)
{
   save_date(dd);
   save_mount(mm);
   save_year(yy);
}
สามารถติดตาม electoday ได้ที่

Facebook
www.facebook.com/groups/coopmicro

Google+
https://plus.google.com/communities/103482067769375459277

☺☺☺ความรู้ และความฉลาด ไม่ใช่สิ่งเดียวกัน จะมีประโยชน์อะไร ถ้าฉลาดแต่อยู่ในกะลา☺☺☺

CruzDoyle

แจ๋วเลยครับ ถามความรู้เพิ่มเติมครับ ถ้าเป็นเวลาประเทศอื่นทำยังไงหรอครับ


mcusysdev

Quote from: CruzDoyle on June 05, 2018, 12:01:15 PM
แจ๋วเลยครับ ถามความรู้เพิ่มเติมครับ ถ้าเป็นเวลาประเทศอื่นทำยังไงหรอครับ

บวก UTC time เข้าไปครับ