Цитата(Dog Pawlowa @ Dec 21 2007, 16:17)

А почему Вы решили, что RTC способен принять это значение года одной переменной?
Потому что, у DS1338 год пишется переменной в диапазоне 0...99.
Код
void rtc_set_time(unsigned char second, unsigned char minute, unsigned char hour,
unsigned char day, unsigned char date, unsigned char month, unsigned int year)
{
i2c_start(RTC_ADDR|W); // write slave address + write
i2c_write(0x00); // write register address, 1st clock register
//Установить системное время :
i2c_write(dec2bcd(second));
i2c_write(dec2bcd(minute));
i2c_write(dec2bcd(hour));
// Установить системную дату :
i2c_write(dec2bcd(day));
i2c_write(dec2bcd(date));
i2c_write(dec2bcd(month));
i2c_write(dec2bcd(year));
// Настроить выход на генерацию 32768Гц :
i2c_write(0x13); // enable sqwe, 32768Hz output, clear OSF bit
i2c_stop();
}
Весь код показывать не буду. Слишком большой. Суть проблемы в следующем: в результате действия программы загрузил в lcd_buf строку"2007". Сделал sscanf_P в переменную YR. Вывел на терминал значение YR. Показывает 2007. Дальше загрузил в lcd_buf строку"12". Сделал sscanf_P в переменную MN. Вывел на терминал значение MN. Показывает 12. И т.д. со следующими переменными. Когда инициализировал таким образом последнюю переменную MIN, вызываю ф-цию rtc_set_time(). В результате - в часах - одни "0" . Кроме года. Если перед вызовом rtc_set_time() присвоить этим переменным значения непосредственно вот так: yr=2007, mn=12, dt=23, dy=6, ..., то эти значения запишутся в RTC.
Добавлено
Только что проверил значения переменных непосредственно перед вызовом ф-ции rtc_set_time(). Значения переменных, кроме года равны 0 ! Где-то херятся переменные. Провел простой эксперимент: Редактирую переменные в такой последовательности: YR,MN,DT,DY,HR,MIN ; на терминал вывожу значение переменной + предыдущее значение отредактированной переменной. Выяснилось, что при редактировании DT обнуляется MN и т.д. И в этом вся проблема. Но тогда вопрос в следующем. Почему простая замена функций sscanf_P на StrToInt сохраняет значения переменных? Виновата sscanf_P?
Прикладываю файл. Если кто-нибудь в нем разберется

Функция выводит статические надписи в разные строки и значения переменных с координаты х=49. Редактирование значения текущего символа, который выделен мигающим курсором , осуществляется с клавиатуры 4х4. UP, DOWN смещение курсора в пределах строки. Число с цифровой клавиатуры заменяет текущее знакоместо и переносит курсор на следующее. ENTER - сохранение отредактированной переменной. При чем когда сохраняем последнюю отредактированную переменную, то вызывается ф-ция rtc_set_time. Хочется услышать ваше мнение. Громоздко получилось или это нормально?