Страница 134 из 400

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 14:39:39
ploop
Можно и так. В а вообще делается так:
SUBI XL,-1
SBCI XH, -1
BRNE ...
В tiny2313 и в tiny13 команды ADIW и SBIW работают
Да, в 2313 точно есть.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 14:53:06
GP1
ploop писал(а):Можно и так. В а вообще делается так:
SUBI XL,-1
SBCI XH, -1
BRNE ...
Прошу пардону, но

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

SBCI XH, -1
при СY вычтет сразу "2", соббсно перенос и 1

зы я чёйто не понял про "-1"

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 14:54:56
ploop
Упс... SBC конечно, без "I". Я просто для этих целей держу нулевой регистр.
зы я чёйто не понял про "-1"
Просто в этом году ничего не писал на ассемблере. Это сложение :)

SUBI XL,1
SBCI XH,0

или

SBC XH,null (где null - регистр с нулём)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:01:36
GP1
во, а то я уже подумал что по старости отстал от жизни и надо минус ставить

дополню, ну чисто из-за занудства :)))
я бы ещё эти два оператора между cli...sei поместил, так на всякий случай, вдруг прерывание, вдруг sreg забыл про пуш-попить :)))

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:22:24
shads
GP1 писал(а):во, а то я уже подумал что по старости отстал от жизни и надо минус ставить
:)))
GP1 писал(а):я бы ещё эти два оператора между cli...sei поместил, так на всякий случай, вдруг прерывание, вдруг sreg забыл про пуш-попить :)))
Да уж лучше один раз sreg про пуш-попить, чем каждый раз cli-sei ставить :)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:26:05
GP1
shads писал(а):Да уж лучше один раз sreg про пуш-попить
Согласен, но в каждом обработчике :wink:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:32:42
ploop
Про атомарность операций - отдельная тема, и, похоже, только ассемблерщики про неё помнят. Кстати, как там в Си с этим дело обстоит? Компилятор за это отвечает?

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:47:22
pyzhman
Зуб дает. Дажеть свой стек данных под это дело отводит.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 15:55:06
ploop
А, ну тады хорошо :)

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 16:20:30
BOB51
... мня...
а про "вложенные" счетчики народ похоже забыл Сивсем... :cry:
time:
ldi cnth,40
time1:
ldi cntl,250
time2:
dec cntl
brne time2
dec cnth
brne time1
где cntl и cnth любые из r16-r31
возможно константы досчета подбирать прийдется, если это задержка по времени
:beer:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 17:28:14
pyzhman
Раз уж пошла такая песня, то начинаем с nop'ов и заканчиваем таймерами(железными).

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 19:08:14
ILYAUL
BOB51 писал(а):... мня...
а про "вложенные" счетчики народ похоже забыл Сивсем... :cry:
:beer:
А зачем они , если всегда найдётся свободный таймер, только проц зря занимает. Ну на крайний случай , можно и прерывания посчитать

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 20:17:06
koksi
Добрый вечер! Помогите реализовать игральный кубик, с выводом на 7-сегментный индикатор, числа от 1 до 6. При этом что бы одна кнопка останавливала число, а вторая каждые 3-5 сек выводило новое. Вообще как лучше это сделать, просто я начинающий(как неделю) и во всем запутался) Подскажите) (или хотя бы кинуть исходник(пример) как надо делать). Заранее Благодарю! Нарушение п.2.5 Правил Форума. Код оформляйте как вложение
Gudd-Head

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 20:26:28
GP1
ILYAUL писал(а): если всегда найдётся свободный таймер...
а у меня, как правило, их не вытает, хоть убейся :kill:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 21:42:35
pyzhman
Боже ж ты мой! Это же мой генератор ПСЧ! Правда кто-то похерил комментарий перед тобой:

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

;
;X(i+1)= ( A*X(i) + B) mod 65536
;
;A= 77 (A mod 4= 1)
;B= 1 нечетное
;
;
и обозвал TIMER. Милое мое детище! Вэлком бэк! :cry:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Чт май 24, 2012 21:50:26
Alexeyslav
А что именно не работает? Я бы добавил инициализацию ГСЧ при первом включении по длительности удержания кнопки включения(запустить таймер по подаче питания, и считать его значение при отпускании кнопки). Иначе, будет довольно прогнозируемый "кубик".

А вообще, зачем этот ГСЧ - просто прокручивай таймер на максимальной скорости и считывай его в момент отпускания кнопки, потом остаток от деления на 6 вывести на индикатор.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 25, 2012 00:11:26
MS24
shads писал(а):Вернее я делал так:

LDI XL,low(10000)
LDI XH,high(10000)
Y: ........ ; здесь делаем то что нужно в цикле
DEC XL
BRNE Y
DEC XH
BRNE Y

кстати любые можно регистры использовать, не только самые верхние.
Спасибо большое за помощь! вот только один момент, допустим в h и L регистра число 10 000.
В бинарном виде это 10011100010000.
Мы пишем в L 00010000, в H 100111, получается так?
декрементируем оба регистра и получаем в L 00001111, в h 100110.
А это никак не 9999, т.е получается что мы не единицу вычли!

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 25, 2012 00:29:58
Alexeyslav
А зачем декрементировать ОБА регистра?
BRNE Y после первого декремента вернет нас сразу на начало цикла, и только когда в результате декремента получится НОЛЬ, BRNE не выполнится и произойдет декремент старшего регистра.

Немного корявая логика работы, декремент второго регистра должен происходить при возникновении переноса(переход с 00 на FF) а не нуля иначе декремент старшего регистра произойдет преждевременно на одну итерацию, и цикл скорей всего не досчитается 255 итераций.

Вот досчитали до состояния L=1 H=1, в результате декремента L становится равным нулю, BRNE не выполняется и тут же происходит декремент H = 0, слеующий BRNE так же не выполняется и цикл заканчивается, хотя он должен еще отработать 255 итераций.

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 25, 2012 06:26:27
BOB51
если уж так хочется дергать регистровую пару, так тягайте любую, кроме индексных (z,y,x) и r0-r1 - эти должны оставаться резервом для использования по назначению :roll:

Re: Ассемблер (ASM) для AVR в вопросах и ответах

Добавлено: Пт май 25, 2012 08:19:50
shads
BOB51 писал(а):если уж так хочется дергать регистровую пару, так тягайте любую, кроме индексных (z,y,x) и r0-r1 - эти должны оставаться резервом для использования по назначению :roll:
R0 - вроде знаю - чтение из флэш..... а R1 - какое назначение? (или они вместе как регистровая пара имеют какоето назначение?)