Страница 1 из 1
запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 01:07:42
eduardo
Здравствуйте. Ну в принципе читать/записывать переменные типа unsiged char и unsigned int в DS 1307 я могу,как бы в этом ничего сложного нету.но тут возникла надобность в отправке и приёме переменной типа unsigned long int(4 байтовой). почему-то читаются-записываются только 0й и 1й байты.2й и 3й байты читаться-записываться упорно не хотят. Подскажите пожалста,мож я чё не так сделал? Эта фигня нужна в изобретаемом мною велокомпьютере для того чтоб контроллер(мега 16) записывал-читал в/из DS 1307 данные пробега в метрах.. Код прилагается... Спасибо. Да,вспомнил!! Создаётся сиё чудо в среде CV AVR на Си..
Re: запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 09:25:26
uk8amk
Вы как минимум читаете неправильно
Код: Выделить всё
probeg_m = 0;
for( i=0x0С; i>=0x0A; i-- )
{
probeg_m <<= 8;
probeg_m |= rtc_read( i );
};
Re: запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 16:28:33
eduardo
Приблизительно ясно.. Значит записывать надо в обратном порядке?:
for(i=0x0A; i>=0x0C; i++;)
{ rtc_write(i,probeg_m>>8);}
Re: запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 18:42:25
uk8amk
Код: Выделить всё
for(i=0x0A; i<=0x0C; i++;)
{
rtc_write(i,probeg_m);
probeg_m >>= 8;
}
В принципе разложить и склеить длинные числа можно через юнионы и указатели.
Re: запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 20:43:00
eduardo
Странно,но с циклом for читается 0.. Т.е. видимо данные не записываются..
Re: запись-чтение в/из DS 1307
Добавлено: Пн янв 02, 2017 21:33:38
uk8amk
Ну разверните циклы, посмотрите что у вас происходит.
Подключитесь отладчиком, в крайнем случае симулятором, чтобы глянуть как байты меняются.
Для простоты замените rtc_read, rtc_write на свои отладочные ф-ции с доступом к массиву ОЗУ чтобы исключить RTC. Это позволит быстрее понять где ошибка в вашей программе.
Re: запись-чтение в/из DS 1307
Добавлено: Вт янв 03, 2017 00:13:58
eduardo
Короче сделал по-другому:unsigned long int перед записью разделил на 2 unsigned int; А после чтения 2 unsigned int совместил в unsigned long int. Делал всё через операции сдвига с присваиванием.Вроде получилось... Ну по крайней мере в Протеусе(другими средствами отладки не владею).. Спасибо за помощь!!!
