- Вложения
-
- Велокомп.zip
- (706 байт) 153 скачивания
запись-чтение в/из DS 1307
- Сообщения: 171
- Зарегистрирован: Вс июн 17, 2012 16:32:42
Здравствуйте. Ну в принципе читать/записывать переменные типа unsiged char и unsigned int в DS 1307 я могу,как бы в этом ничего сложного нету.но тут возникла надобность в отправке и приёме переменной типа unsigned long int(4 байтовой). почему-то читаются-записываются только 0й и 1й байты.2й и 3й байты читаться-записываться упорно не хотят. Подскажите пожалста,мож я чё не так сделал? Эта фигня нужна в изобретаемом мною велокомпьютере для того чтоб контроллер(мега 16) записывал-читал в/из DS 1307 данные пробега в метрах.. Код прилагается... Спасибо. Да,вспомнил!! Создаётся сиё чудо в среде CV AVR на Си..
- Реклама
Вы как минимум читаете неправильно
Код: Выделить всё
probeg_m = 0;
for( i=0x0С; i>=0x0A; i-- )
{
probeg_m <<= 8;
probeg_m |= rtc_read( i );
};- Сообщения: 171
- Зарегистрирован: Вс июн 17, 2012 16:32:42
Приблизительно ясно.. Значит записывать надо в обратном порядке?:
for(i=0x0A; i>=0x0C; i++;)
{ rtc_write(i,probeg_m>>8);}
for(i=0x0A; i>=0x0C; i++;)
{ rtc_write(i,probeg_m>>8);}
Код: Выделить всё
for(i=0x0A; i<=0x0C; i++;)
{
rtc_write(i,probeg_m);
probeg_m >>= 8;
}- Сообщения: 171
- Зарегистрирован: Вс июн 17, 2012 16:32:42
Странно,но с циклом for читается 0.. Т.е. видимо данные не записываются..
- Реклама
Ну разверните циклы, посмотрите что у вас происходит.
Подключитесь отладчиком, в крайнем случае симулятором, чтобы глянуть как байты меняются.
Для простоты замените rtc_read, rtc_write на свои отладочные ф-ции с доступом к массиву ОЗУ чтобы исключить RTC. Это позволит быстрее понять где ошибка в вашей программе.
Подключитесь отладчиком, в крайнем случае симулятором, чтобы глянуть как байты меняются.
Для простоты замените rtc_read, rtc_write на свои отладочные ф-ции с доступом к массиву ОЗУ чтобы исключить RTC. Это позволит быстрее понять где ошибка в вашей программе.
- Сообщения: 171
- Зарегистрирован: Вс июн 17, 2012 16:32:42
Короче сделал по-другому:unsigned long int перед записью разделил на 2 unsigned int; А после чтения 2 unsigned int совместил в unsigned long int. Делал всё через операции сдвига с присваиванием.Вроде получилось... Ну по крайней мере в Протеусе(другими средствами отладки не владею).. Спасибо за помощь!!! 


