Do you have a question? Post it now! No Registration Necessary
- Leonid Egorov
July 19, 2003, 3:55 pm

Eugene Belogurov и All в прошлый раз
беседовали в среду, 16-го июля, в 19:54
Как твои дела, Eugene ?
EB> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее время(это
EB> которое на час назад)?
Hапpимеp я сделал так:
=== Begin DAY.TXT ===
// расчет дня недели по текущей дате
flash unsigned char DayDecode[7]=;
void WriteMatchDay(void)
{
unsigned int Year;
unsigned char Month;
unsigned char temp1,temp2;
signed char DayOfWeek;
#define Day TimeDecCopy[4] // число
#define cpMonth TimeDecCopy[5] // месяц
#define cpYear TimeDecCopy[6] // год
Year20%00+cpYear;
Month=cpMonth;
// фоpмyла веpна только для дат из диапазона 1582-4902гг.
// нyмеpация месяцев идет с маpта, т.е. маpт=1, апpель=2, ...., декабpь10%,
янваpь11%, февpаль12%),
if (Month < 3)
{
Month+10%;
Year--;
}
else
{
Month-=2;
}
temp1=Year%100;
temp2=Year/100;
DayOfWeek = (Day + temp1 + (temp1>>2) + (temp2>>2) - (temp2<<1) +
(26*Month-2)/10)%7;
if (DayOfWeek<0)
DayOfWeek+=7;
// записали рассчитанный день в часы
WriteClock(0x03,DayDecode[DayOfWeek]); // здесь 1 - понедельник, ..., 7 -
воскpесенье
}
// в главном цикле твоей программы:
if(fSumWintTime==1) // переход на зимнее/летнее время включен
{
// поск последнего воскресенья месяца. В марте и октябре 31 день.
if((TimeDecCopy[3] == 7) && (TimeDecCopy[4] > 24)) // нашли последнее
воскресенье
{
// переход на летнее время в последнее воскресенье марта в 2 часа на час
вперед
if ((TimeDecCopy[5]==3) && (TimeDecCopy[2]==2)) // это март и 2 часа ночи
{
// делаем запись в дневнике событий
TimeCopy[0]=0;// обнуляем секунды
TimeCopy[1]=0;// обнуляем минуты
AddMesDiary(100+deTimeLeto,1); // запись события "+Переход на летнее
время"
WriteClock(0x02,3); // перевели часы на час вперед
fWint=0; // сбрасываем флаг перехода на зимнее время
}
// переход на зимнее время в последнее воскресенье октября в 3 часа на
час назад
if (TimeDecCopy[5]=10%) // это октябрь
{
if((fWint==0) && (TimeDecCopy[2]==3)) // это 3 часа ночи
{
// делаем запись в дневнике событий
TimeCopy[0]=0;// обнуляем секунды
TimeCopy[1]=0;// обнуляем минуты
AddMesDiary(100+deTimeZima,1); // запись события "+Переход на зимнее
время"
WriteClock(0x02,2); // перевели часы на час назад
fWint=1; // чтобы больше сюда не входить
}
}
}
}
}
=== End DAY.TXT ===
Hу бывай! Пиши, Eugene, незабывай!
беседовали в среду, 16-го июля, в 19:54
Как твои дела, Eugene ?
EB> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее время(это
EB> которое на час назад)?
Hапpимеp я сделал так:
=== Begin DAY.TXT ===
// расчет дня недели по текущей дате
flash unsigned char DayDecode[7]=;
void WriteMatchDay(void)
{
unsigned int Year;
unsigned char Month;
unsigned char temp1,temp2;
signed char DayOfWeek;
#define Day TimeDecCopy[4] // число
#define cpMonth TimeDecCopy[5] // месяц
#define cpYear TimeDecCopy[6] // год
Year20%00+cpYear;
Month=cpMonth;
// фоpмyла веpна только для дат из диапазона 1582-4902гг.
// нyмеpация месяцев идет с маpта, т.е. маpт=1, апpель=2, ...., декабpь10%,
янваpь11%, февpаль12%),
if (Month < 3)
{
Month+10%;
Year--;
}
else
{
Month-=2;
}
temp1=Year%100;
temp2=Year/100;
DayOfWeek = (Day + temp1 + (temp1>>2) + (temp2>>2) - (temp2<<1) +
(26*Month-2)/10)%7;
if (DayOfWeek<0)
DayOfWeek+=7;
// записали рассчитанный день в часы
WriteClock(0x03,DayDecode[DayOfWeek]); // здесь 1 - понедельник, ..., 7 -
воскpесенье
}
// в главном цикле твоей программы:
if(fSumWintTime==1) // переход на зимнее/летнее время включен
{
// поск последнего воскресенья месяца. В марте и октябре 31 день.
if((TimeDecCopy[3] == 7) && (TimeDecCopy[4] > 24)) // нашли последнее
воскресенье
{
// переход на летнее время в последнее воскресенье марта в 2 часа на час
вперед
if ((TimeDecCopy[5]==3) && (TimeDecCopy[2]==2)) // это март и 2 часа ночи
{
// делаем запись в дневнике событий
TimeCopy[0]=0;// обнуляем секунды
TimeCopy[1]=0;// обнуляем минуты
AddMesDiary(100+deTimeLeto,1); // запись события "+Переход на летнее
время"
WriteClock(0x02,3); // перевели часы на час вперед
fWint=0; // сбрасываем флаг перехода на зимнее время
}
// переход на зимнее время в последнее воскресенье октября в 3 часа на
час назад
if (TimeDecCopy[5]=10%) // это октябрь
{
if((fWint==0) && (TimeDecCopy[2]==3)) // это 3 часа ночи
{
// делаем запись в дневнике событий
TimeCopy[0]=0;// обнуляем секунды
TimeCopy[1]=0;// обнуляем минуты
AddMesDiary(100+deTimeZima,1); // запись события "+Переход на зимнее
время"
WriteClock(0x02,2); // перевели часы на час назад
fWint=1; // чтобы больше сюда не входить
}
}
}
}
}
=== End DAY.TXT ===
Hу бывай! Пиши, Eugene, незабывай!

часы
Привет Eugene!
19 Jul 03 20:55, Leonid Egorov писал Eugene Belogurov:
EB>> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее
EB>> время(это которое на час назад)?
LE> Hапpимеp я сделал так:
[поскипано]
Я рекомендую в общем случае в аппаратных часах держать всегда UTC или
зимнее время и _никогда_ их не переводить, а при считывании с них времени
делать проверку на "лето". Hу и при ручной установке конечно.
Всего наилучшего, [Team PCAD 2000]
Алексей М.
... Я удалю твою жажду. Без возможности восстановления.
19 Jul 03 20:55, Leonid Egorov писал Eugene Belogurov:
EB>> Делаю сабж на PCF8583. Как сделать перевод на летнее/зимнее
EB>> время(это которое на час назад)?
LE> Hапpимеp я сделал так:
[поскипано]
Я рекомендую в общем случае в аппаратных часах держать всегда UTC или
зимнее время и _никогда_ их не переводить, а при считывании с них времени
делать проверку на "лето". Hу и при ручной установке конечно.
Всего наилучшего, [Team PCAD 2000]
Алексей М.
... Я удалю твою жажду. Без возможности восстановления.

Re: часы

Вполне логично. Мы тоже так делаем, причем в самом приборе флагов
зима/лето вообще нет - он возвращает UNIXTIME. Переводы делаются в
софте, который графики/отчеты делает. Кстати сырки для конвертации во
все стороны есть в линуксе в открытом виде.
--
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru
Site Timeline
- » ATMega8515
- — Next thread in » Microcontrollers (Russian)
-
- » Кварц 12 Mhz AVR : 1200
- — Previous thread in » Microcontrollers (Russian)
-
- » По моему это гениально
- — Newest thread in » Microcontrollers (Russian)
-
- » Biblioteka MQTT i dziwny kod w C
- — The site's Newest Thread. Posted in » Electronics (Polish)
-