Нужен оптимальный алгоритм RTC

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

МитяРа писал(а):
Мастер Ломастер писал(а):у меня есть предположение, что в вашем алгоритме присутствуют все-таки JNB, JB или DJNZ (в применении к 51-ому семейству)
Не присутствуют.. :))
Вся суть в том, что в программе, какой-бы она не была, присутствует всего одна команда перехода - LJMP, которая закольцовывает основной цикл..
А всё остальное делается арифметикой и логикой..
арифметикой - это понятно. задаю конкретно вопрос: как вы реализуете ЛОГИКУ "если": если что-то больше чего-то, то сделать ЭТО, а в противном случае ДРУГОЕ. вопрос: как без условных переходов вы реализуете это?!

P.S. в качестве примера не надо кода часов делать, сделайте только вот этот кусочек: увеличить счетчик секунд и, если он переполнился, то увеличить счетчик минут, а если не переполнился, то выйти.
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Мастер Ломастер писал(а):вопрос: как без условных переходов вы реализуете это?!
Мя-же написал - маской..
Арифметические операции влияют на выходной результат напрямую../путём вычисления по некой формуле/,
а логические операции могут влиять на результат если напрямую, то на какие-то биты выхода, а если косвенно, то через маску..

Щас как-раз пишу, на таком алгоритме обработку энкодера с возможностью задания граничных диапазонов..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Мастер Ломастер писал(а):а если не переполнился, то выйти.
В том-то и дело, что не "выйти", а обработать минуты без их инкремента..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

МитяРа писал(а):Мя-же написал - маской..
пожалуйста, приведите конкретный код для запрошенного мною примерчика...
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

Мастер Ломастер писал(а):приведите конкретный код для запрошенного мною примерчика...
Подожди немного, сосредоточится надо и набрать пример с комментариями..
Мя-же ещё параллельно работу-работаю.. :))
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Реклама
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

МитяРа писал(а):
Мастер Ломастер писал(а):приведите конкретный код для запрошенного мною примерчика...
Подожди немного, сосредоточится надо и набрать пример с комментариями..
Мя-же ещё параллельно работу-работаю.. :))
я смогу разобраться в десятке команд и без комментариев :))) жду с нетерпением
битва с дураками проиграна, победители торжествуют. слава победителям!
Реклама
Аватара пользователя
O-LED
Мудрый кот
Сообщения: 1800
Зарегистрирован: Вт окт 05, 2010 01:08:57
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение O-LED »

почитал вас, и навеяло...... счетчик секунд.

Код: Выделить всё

x++;
sec=x%60;
x=sec;
KIT
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

O-LED писал(а):почитал вас, и навеяло...... счетчик секунд.

Код: Выделить всё

x++;
sec=x%60;
x=sec;
навевайте дальше - где проверка переполнения счетчика секунд и соответственное изменение счетчика минут?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Нужен оптимальный алгоритм RTC

Сообщение ChipKiller »

Мастер Ломастер писал(а):..у меня есть предположение, что в вашем алгоритме присутствуют все-таки JNB, JB или DJNZ (в применении к 51-ому семейству)
... про JMP @A+DPTR забыли :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

ChipKiller писал(а):
Мастер Ломастер писал(а):..у меня есть предположение, что в вашем алгоритме присутствуют все-таки JNB, JB или DJNZ (в применении к 51-ому семейству)
... про JMP @A+DPTR забыли :)
ну дык я и не ставил себе задачу расписать все команды переходов в этом семействе :) достаточно наличия хотя бы одной из возможных команд перехода, как алгоритм становится не линейным...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ChipKiller
Сверлит текстолит когтями
Сообщения: 1163
Зарегистрирован: Ср янв 05, 2011 16:25:15

Re: Нужен оптимальный алгоритм RTC

Сообщение ChipKiller »

Мастер Ломастер писал(а):вопрос: как без условных переходов вы реализуете это?!
... я про то, что JMP @A+DPTR не является командой условного перехода, но воспользоваться ей для замены команд условного перехода вполне можно ... :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

а я про то, что тут шла речь об алгоритме БЕЗ ПЕРЕХОДОВ, т.е. строго последовательном, прямым, как лом, алгоритме.

P.S. мне знакомы варианты, когда команды push-ret используются для организации хитровычисляемых переходов :)))
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Да можно, я хоть сейчас напишу, но он не оптимален будет. Возможно в АВРовской системе команд сложнее, или наоборот...
Ждём Митяру :)
phanis
Вымогатель припоя
Сообщения: 513
Зарегистрирован: Сб фев 19, 2011 18:04:08
Откуда: Татарстан, пос. Актюбинский
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение phanis »

Может что вроде этого имел ввиду МитяРа, если конечно попробовать упростить выражение

Код: Выделить всё

sec=(sec+((sec-60)>>7))*((sec-60)>>7);
должно что то похожее получится...
Даже наверное так

Код: Выделить всё

sec=(sec+1)*((sec-59)>>7);
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Нужен оптимальный алгоритм RTC

Сообщение Мастер Ломастер »

phanis писал(а):Может что вроде этого имел ввиду МитяРа
ploop писал(а):Да можно, я хоть сейчас напишу
к чему столько слов? НАПИШИТЕ! пока что я вижу всякие способы для изменения БЕЗ КОНТРОЛЯ 1 ПЕРЕМЕННОЙ, а где изменение ВТОРОЙ ПОСЛЕ ПЕРЕПОЛНЕНИЯ первой?!
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):Ждём
Ёрш-твою-мышь, пушистый.. ты ещё скажи, что мя те всю работу застопорил.. :))
Мастер Ломастер писал(а):жду с нетерпением
Мя конечно написал на скорую лапу и не причёсывал, но думаю, что сам принцип будет и так понятен:

Код: Выделить всё

$MOD51
$NOLIST
$LIST
$TITLE(RTC)
$PAGEWIDTH(132)		
$NOPAGING
;
seconds	data	30h	; регистр хранения текущего значения секунд
minuts	data	31h	; регистр хранения текущего значения минут.
hours	data	32h	; регистр хранения текущего значения часов.
;
;----------------------------------------------------------------------
; Подпрограмма обработки RTC по методу "Объёмного перехода".
;----------------------------------------------------------------------
		org	0h
		;
		;
;-----------------------------------------------------------------------
;
RTC:		clr	c		; сбрасываем битовый аккумулятор.
		;
		mov	a,seconds	; читаем текущее значение секунд.
		inc	a		; прибавляем к нему единицу.
		mov	b,a		; сохраним пока промежуточный результат секунд.
		xrl	a,#60		; сравниваем его с максимальным+1.
		addc	a,#0FFh		; если равен - получаем признак, в виде CY=1.
		mov	f0,c		; сохраним пока признак необходимости инкремента минут.
		clr	a		; вычисление маски для байта секунд.
		cpl	c		;
		addc	a,#0FFh		;
		anl	a,b		; вычисляем новое значение секунд.
		mov	seconds,a	; сохраняем новое значение секунд.
		;
		mov	c,f0		; получаем бит-флаг команды инкремента минут.
		cpl	c
		clr	a		; преобразуем бит-флаг в байтовый формат.
		rlc	a		;
		addc	a,minuts	; получаем новое значение минут.
		mov	b,a		; сохраним пока промежуточный результат минут.
		xrl	a,#60		; сравниваем его с максимальным+1.
		addc	a,#0FFh		; если равен - получаем признак, в виде CY=1.
		mov	f0,c		; сохраним пока признак необходимости инкремента часов.
		clr	a		; вычисление маски для байта минут.
		cpl	c		;
		addc	a,#0FFh		;
		anl	a,b		; вычисляем новое значение минут.
		mov	minuts,a	; сохраняем новое значение минут.
		;
		mov	c,f0		; получаем бит-флаг команды инкремента часов.
		cpl	c
		clr	a		; преобразуем бит-флаг в байтовый формат.
		rlc	a		;
		addc	a,hours		; получаем новое значение часов.
		mov	b,a		; сохраним пока промежуточный результат часов.
		xrl	a,#24		; сравниваем его с максимальным+1.
		add	a,#0FFh		; если равен - получаем признак, в виде CY=1.
		mov	f0,c		; сохраним пока признак необходимости инкремента суток.
		clr	a		; вычисление маски для байта часов.
		cpl	c		;
		addc	a,#0FFh		;
		anl	a,b		; получаем новое значение часов.
		mov	hours,a		; сохраняем новое значение часов.
		ret
;-----------------------------------------------------------------------
		;
		end
:facepalm:
Мастер Ломастер, мож в симулятор "запихать" и проверить.. но мя те скажу - оно работает.. :))

P.S. Если будет интересно ещё про алгоритмы "Объёмного перехода", как мя их называю, могу отдельную тему сделать, там и помяукаем..
Что-б пушистому ploop-у тему про RTC не раздувать..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

к чему столько слов? НАПИШИТЕ!
Вот, тупо в лоб. Говорю - не оптимально будет

Код: Выделить всё

clr r17                    ; r17 <- 0
lds r16,clk_ss             ; грузим секунды
cpi r16,60                 ; сравниваем
rol r17                    ; r17 <- C
bst r17,0                  ; T <- C
ror r17                    ; Восстановим С 
adc r16,null               ; Если не перевалило - r16 увеличится на 1
bld r17,0                  ; r17 <- T
neg r17                    ; r17 = 0-r17
and r16,r17                ; Маску на r16
sts r16                    ; Пишем его

clr r17                    ; r17 <- 0
lds r16,clk_ss             ; грузим минуты 
....
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):Говорю - не оптимально будет
Тут дело не в оптимальности, а в принципе реализации алгоритма с проверками и ветвлениями, с помощью чисто линейного алгоритма..

P.S. Если кто заинтересуется, мяукните - отдельную тему создам..
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Re: Нужен оптимальный алгоритм RTC

Сообщение ploop »

Подожди с новой темой, пока давай в этой. При том конкретная задача есть, пусть и чисто спортивная :)
Смотрю твой код...
Аватара пользователя
МитяРа
Модератор
Сообщения: 11492
Зарегистрирован: Чт дек 11, 2008 14:52:26
Откуда: град Нижний

Re: Нужен оптимальный алгоритм RTC

Сообщение МитяРа »

ploop писал(а):При том конкретная задача есть, пусть и чисто спортивная
Жалко мя AVR-овский АСМ не знаю, а то-бы смяучил-бы что.. :oops:

Вот Мастер Ломастер - многостаночник, он и тот и этот знает..
ploop писал(а):Смотрю твой код...
Написал на скорую лапу.. наверняка его можно подсократить...
[img]http://radiokot.ru/forum/download/file.php?id=93376[/img][i][color=#000080][size=85]Между людьми возникает напряжение, если у них разный потенциал...[/size][/color][/i]
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»