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

Обсуждаем контроллеры компании Atmel.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

call, jmp, lds, sts - занимают по 2 слова. Открываете даташит, смотрите список всех команд. Там указано, за сколько тактов и сколько занимает каждая команда.

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

ldi r16, 55
out PORTD, r16

Label:
in r16, PINC
sts VAL, r16

sbic PINA,0
rjmp PC-3

rjmp Label // В этом случае никаких ошибок не будет.

В этому случае будет ошибка, так как sts занимает 2 слова. Потому нужно применять метки, даже если ты их ненавидишь. Просто в корне исключает ошибки.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Да, вроде как не ненавижу. Просто думал покороче записать. )))
Ладно. Спасибо. ) :beer: С организацией памяти и словами у меня все время проблемы... тяжко воспринимается. :)
Станислав
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Вот где-то видел про использование меток в макросах. Это возможно в принципе или это бред? Пока в макросах использую PC, к счастью не нарвался на двухсловные инструкции. Буду иметь ввиду.
Я всё-всё узнAю и стану профессором.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

Метки спокойно можно использовать. И они будут уникальны для каждого макроса, хотя название одно и то же. Другое дело, если вы используете метки на подпрограммы вне макроса.
Последний раз редактировалось Demiurg Сб июн 04, 2016 18:03:30, всего редактировалось 1 раз.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Во как! Спасибо, не знал, теперь легче жить будет :beer:
Я всё-всё узнAю и стану профессором.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Очередной тупой вопрос.

Есть переменная, у которой старший полубайт нули, а младший полубайт имеет некое значение.
Теперь надо вывести эту переменную в порт, но так, чтобы старший полубайт в порту остался не тронутый, а младший изменился в соответствии с младшим этой переменной.
Как это правильно сделать?
Станислав
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

Сообщение dr.doc »

Переменная в r17
in r16,Portx
andi r16,0xF0
ori r16,r17
out Portx,r16
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
dgrett
Вымогатель припоя
Сообщения: 615
Зарегистрирован: Вс дек 28, 2014 21:54:05

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

Сообщение dgrett »

Компилер,наверно, матюкнётся на ori
Я всё-всё узнAю и стану профессором.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

Сообщение dr.doc »

Инерция, эйфория...
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Ага. Спасибо. :beer:

Вот так:

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

in temp1,PIND
andi temp1,0xF0
or temp1,temp
out PORTD,temp1   
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

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

in temp1,PIND
andi temp1,0xF0
andi temp, 0x0F
or temp1,temp
out PORTD,temp1
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Demiurg писал(а):andi temp, 0x0F
СКАЗОЧНИК писал(а):Есть переменная, у которой старший полубайт нули, а младший полубайт имеет некое значение.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

СКАЗОЧНИК, а порт весь на вывод настроен? Или есть пины на вход? Не собьётся ли "подтяжка" в PORTx на старшей половине? Это надо бы учесть, если имеет смысл.
Прерывания задействованы в программе? В прерывании могут быть изменены биты старшего полубайта в порту? Это я к тому, что может в начале запретить прерывания, а в конце разрешить.
Это вам должно быть видней, в зависимости от программы.

:tea:
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

И прерывания есть и порт вход/выход настроен. Как и сказали. :)
Однако, в старшем полубайте входы и на них кнопки (подтяжки), которые в прерывании опрашиваются.
А вторая младшая половина настроена на выход, которая тоже меняется в том же прерывании...

Почему я и хотел, чтобы старшая половина была без изменений, когда младшая перезаписывается. :roll:
Станислав
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Тогда in temp1,PIND не стоит использовать, используйте in temp1,PORTD. А то будете включать выключать подтяжку в зависимости от нажатия кнопок.
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Блин. Точно! :facepalm: :? :shock:
Как это я сам недопетрил?!

Спасибо.
:beer:
Станислав
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

Z_h_e писал(а):Тогда in temp1,PIND не стоит использовать, используйте in temp1,PORTD. А то будете включать выключать подтяжку в зависимости от нажатия кнопок.

И я сразу не обратил внимание. Устал, тупо скопировал, добавил и отправил.
На самом деле не так уж и ошибочно. PINx - физическое состояние порта. PORTx - что выводится в порт. За счет PINx можно следить за КЗ портов на питание.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

Сообщение dr.doc »

А если используется АЦП на этом порту? Иногда подтяжку лучше включить отдельно, перед опросом кнопок.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

Если есть свободный регистр и старшая половина порта неизменна, то код можно сократить на одну команду.

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

//Переменная в r17
//R16 в старшем полубайте старший полубайт порта

andi r16,0xF0
or r16,r17
out PortD,r16
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Как вариант

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

.def   R_KEY=R2
.def   R_OUT=R1

ISR_Y:
; В R_OUT предварительно подготовленные данные x
   OUT   PORTB,R_OUT   ; R_OUT=0b1111xxxx
   IN   R_KEY,PINB   ; приём данных с кнопок
;*****
;*****
;*****
   RETI
Ответить

Вернуться в «AVR»