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

Обсуждаем контроллеры компании Atmel.
Ответить
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

КР1816ВЕ31 - знакомая вещь
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ARV писал(а):на форуме с определенной периодичностью появляются камрады, желающие из прерывания выходить не в прерванную точку, а в другую, или входить в подпрограмму, а выходить из нее при помощи jmp совсем в другое место... и ни разу я никому не советовал так делать, хотя совершенно четко осознаю реальность реализации этого. не представляю, какая польза может перевесить извращенность такого подхода?
Здесь не в пользе дело, а дело в способности или неспособности программера, представить правильную структуру работы программы.
Т.е. просто напросто он пока еще не дорос до правильного решения, но уже хочет это как то делать...

Хотя... раньше, когда у процессоров совсем не было аппаратных способностей, они работали на пару мегагерцах, и еще нужно было программно обрабатывать графический буфер и звук, такое встречалось сплошь и рядом...
Но думается что те времена прошли... так что сегодня это либо не нужно, либо как я уже сказал - неправильное представление о реализации программы...
Реклама
Друг Кота
Аватара пользователя
Сообщения: 15793
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Вообще-то ветка по вопросам применения ассемблера.
8)
Не спорю насчет возможностей СИ... НО...
Уважаемые Котаны, давайте без излишних отступлений.
:wink:
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

BOB51 писал(а):Вообще-то ветка по вопросам применения ассемблера.
8)
Не спорю насчет возможностей СИ... НО...
Уважаемые Котаны, давайте без излишних отступлений.
:wink:
Речь зашла о методах программирования. Или по вашему ассемблер к программированию не имеет отношения?
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Замотался на работе совсем... Туплю.

Можно ли так писать? А то мозг совсем не соображает.

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

sbis SCLpin, SCL
rjmp PC-1 
Станислав
Реклама
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение Demiurg »

Можно, но учитывайте, что некоторые команды занимают два слова. Поэтому, вместо rjmp +- PCx лучше применить метки. Это гарантированно избавит от ошибок. Согласен, метки добавляются, а куда деваться...
Контактная информация:
Реклама
Идёт направо - песнь заводит, Налево - сказку говорит.
Аватара пользователя
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Чет припоминаю такое.
А где поподробнее про два слова? И как на это не нарваться?
Станислав
Это не хвост, это антенна
Сообщения: 1495
Зарегистрирован: Ср июн 25, 2008 15:19:44

Сообщение 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
Откуда: Иркутск

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

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

Сообщение dgrett »

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

Сообщение Demiurg »

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

Сообщение dgrett »

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

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

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

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

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

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

Сообщение dgrett »

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

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

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

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

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

Вот так:

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

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

Сообщение Demiurg »

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

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

Сообщение Z_h_e »

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

Сообщение Kavka »

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

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

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