تنظیم تاریخ در ds1307 تنها اگر تاریخ تنظیم نشده باشد

همانطور که می دانید در Codevision با استفاده از دو دستور می توان تاریخ و ساعت را مقدار دهی کرد:

 rtc_set_date(21, 3, 31, 4);

این دستور، ساعت را با چهارشنبه چهارمین روز هفته تقویم میلادی، 31 ام ماه سوم سال 2021 مقدار دهی اولیه می کند. ولی مشکل اینجاست که با هر بار ریست شدن میکرو کنترلر، این دستور اجرا می شود و ساعت مجددا به همان تاریخ قبلی مقدار دهی اولیه می شود در حالی که با توجه به وجود باتری بک آپ، تاریخی که از قبل تنظیم شده به روز شده و همچنان وجود دارد، پس نیازی به تنظیم مجدد تاریخ نیست. سوالی که به وجود می آید این است که چگونه چک کنیم آیا تاریخ از قبل تنظیم شده ای در تراشه ds1307 وجود دارد یا نه.

در صورتی که ساعت مقدار دهی اولیه نشده باشد و بخواهید مقدار آن را بخوانید مقدار 0:0:80 را دریافت خواهید کرد. پس یکی از راه حل ها این است ساعت را از ساعت RTC بخوانیم، اگر پس از خواندن ساعت RTC، مقادیر hour و minu همچنان صفر بود، این به این معنا است که تاریخ و ساعت مقدار دهی اوولیه نشده است و می توان ان را مقدار دهی اولیه کرد. کد زیر این مطلب را به خوبی نشان می دهد:

 

البته باز هم این روش کاملا درست نیست چون ممکن است ساعت مقدار دهی اولیه شده باشد و واقعا در آن لحظه ساعت 0 و دقیقه نیز 0 باشد. بهتر است شرط را کمی تغییر دهید تا حالت های دیگر را شامل نشود.