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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Привет, Коты, такое дело :) Понадобилось мне в байте добавлять и убавлять единицы. Это типа бйт статуса светодиодной шкалы, которая подсвечивается динамически.
Смысл такой:
Исходный байт 0b00000000
Жмём +, получаем 0b00000001
Жмём +, получаем 0b00000011
Жмём +, получаем 0b00000111
Жмём +, получаем 0b00001111
Жмём +, получаем 0b00011111
Жмём -, получаем 0b00001111
и т.п. Я сделал так:

+ это:

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

lsl RL ; Двигаем всё влево
inc RL; Заполняем появившийся младший ноль единицей


- это:

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

lsr RL ; Просто сдвиг вправо


Всё работает, вопрос в том, делают ли это как-то более изящно? :)
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Реклама
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

Изящно можно на кнопки нажимать когда программу пишешь. :))
А вообще, нормально.

Если не забыл (неохота лезть в спецификацию), то можно ещё

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

sec
rol RL


А если перевернуть (единички с другой стороны пускать), то можно asr/lsl использовать.
Ну чуть короче. Изящнее ли? Не знаю. :)
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение Мikа »

Изображение

Как при моём прошлом вопросе, в целом я понял, что будет, но в деталях - не уверен :D Я такие вопросы щас задаю, потому что я уже что-то научился делать сам, придумываю различные решения в зависимости от поставленных задач, но при этом боюсь начать "быдлокодить" :) Спасибо!
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

СпойлерИзображение
Вложения
shifts.png
(1.7 КБ) 637 скачиваний
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Реклама
Эиком - электронные компоненты и радиодетали
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

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

Сообщение nirq »

Сферические кони благородны на бумаге.
А в реальной жизни плата будет разводиться "как удобнее программисту" или?

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

ldi ZH, high(Level_Table * 2)
ldi ZL, low(Levet_Table * 2)

lds Temp1, Level
add ZL, Temp1
brcc pc + 2
inc ZH

lpm Temp1, Z
out PORT, Temp1
, и это только если удалось развести все выходы в пределах одного и того же порта.
А при попытке переразвести новую версию платы придётся переписывать ещё и программу.

Площадь платы стоит денег.
Дополнительная площадь усугубляет массогабаритные проблемы.
Уменьшение ширины дорожек и/или зазоров между ними усугубляет технологические проблемы, то есть опять стоит денег (как минимум).
Лишний код - просто "другое" состояние тех же самых ячеек памяти.
Лишние микросекунды - а мы куда-то настолько сильно спешим?
Реклама
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

А в реальной жизни плата будет разводиться "как удобнее программисту" или?

Это если программист и разводчик - одно лицо. ;)
Реклама
nirq
Опытный кот
Сообщения: 758
Зарегистрирован: Вс фев 10, 2013 15:26:00

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

Сообщение nirq »

Вот и посоветуйся с своим разводчиком. Только момент для беседы выбирай аккуратнее, чтоб у разводчика хорошее настроение было.
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

Со своими мозгами посоветуйся! А то ты с ними не дружишь! :evil:
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Команды сдвига для этого алгоритма - довольно очевидны, но... в таком варианте есть проблемы. если что пойдет не так, то двигаться будет не столбик, а "жидкость с пузырьками", применение чувствительно к содержимому сдвигаемого столбика. Гораздо технологичней, воссоздавать столбик каждый раз когда это нужно при помощи подпрограммы - на входе число = высоте столбика, на выходе в регистре отрисованный столбик. Но и этот вариант обладает недостатком - применить можно только к жестко заданному порядку бит, а на реальных контроллерах один порт может быть разбросан по всем сторонам корпуса, и лови-разводи эти выводы в строгом порядке! Посему... проще, когда алгоритм подпрограммы строит столбик "побитно" - тупо, быстро но много памяти отъедает на тупой алгоритм. Поэтому, применяют более простое решение - столбик задается в виде таблицы, и извлекается из нее заранее прорисованное состояние столбика по индексу - и быстро, и гарантировано и памяти немного потребляет. При необходимости вывода столбика побитно раскинутого на 2-3 порта можно просто расширить таблицу.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

А не проще ли тогда сделать по-битный вывод "правильного" байта по разбросанным по портам битам? А то ещё и маску в таблицу надо запихивать и обрабатывать её как при формировании сдвига, так и при выводе в порты. Что будет не очень компактно, IMHO, в сравнении с простым распихиванием битов. Так как записью целого байта в порт у AVR нет возможности какие-то биты установить/сбросить, а остальные не затрагивать (инвертировать можно, но не на всех МК). Да, к тому же, и обработка маски сведётся к распихиванию битов в цикле (по одному циклу на порт). Тут уж надо выбирать исходя из потребностей - некая универсальность или компактность.
Остаётся, конечно, вариант read-modify-write, но применимость этого метода сильно зависит от задачи и прочих условий реализации.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Если побитный вывод делать, это же кучка условий, проверяемых последовательно... не очень красиво.
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

Всем привет. Если кто богат, более или менее, быстрым кодом деления чисел 32бит на 16бит на асме поделитесь, что-то никаких мыслей умных в голову не приходит, а простым вычитанием не айс.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

А в апнотах нету?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Есть - AVR200 Multiply and Divide Routines, кажется даже на gaw перевод был...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Engineer_Keen писал(а):Есть - AVR200 Multiply and Divide Routines

Оно максимум на 16 бит :)))
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ИС-пытатель
Вымогатель припоя
Сообщения: 577
Зарегистрирован: Ср июн 19, 2013 08:10:48
Откуда: Москва, СПб, Липецк, Рязань

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

Сообщение ИС-пытатель »

столбик реализуйте
Аватара пользователя
КотЭ Мужчина
Открыл глаза
Сообщения: 64
Зарегистрирован: Ср июн 20, 2012 10:49:46
Откуда: Україна, Черкаська область
Контактная информация:

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

Сообщение КотЭ Мужчина »

Я прицепил к PortB 5 (он же SCK) светодиод, и без резика пустил его на землю. То чота плохо читался и записывался камень. Посадил через резистор - во, стало лучше.
Betelgeuse
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

КотЭ Мужчина писал(а):Я прицепил к PortB 5 (он же SCK) светодиод, и без резика пустил его на землю

Так нельзя, без ограничения тока светодиод быстро сдохнет, ну а другие следствия вы сами наблюдали...
Неправильно собранная из неисправных деталей схема нуждается в отладке и сразу не работает... (С)
Аватара пользователя
Flash.#13
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

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

Сообщение Flash.#13 »

Здравствуйте! Нужна помощь с АЦП на атмега8. Согласно инструкции заполнил состояние регистров ADCSRA и ADMUX, дело пошло:

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

.org 14            ;вектор прер. АЦП
rjmp adc_complete   ;подпрограмма АЦП
...
ldi R16, 0b01000000   ;AD_Converter ADMUX byte
out ADMUX, R16
ldi R16, 0b10001011   ;AD_Converter ADCSRA byte, 125kHz
out ADCSRA, R16         
sei          ;вкл. прерывания в ЦП
...
rcall delay2s
sbi ADCSRA,6   ;старт одиночного замера АЦП
...
adc_complete:
in R28, ADCL


...перевожу состояние стартового бита в "1", идет замер, и срабатывает прерывание по АЦП"счет окончен"(014), все нормально, вывожу данные на ЖК, но после первой порции от АЦП более данных не поступает. Цикл идет, АЦП делает переход по прерыванию, но "вместимое" регистров АЦП не изменяется сколько не кручу резистор(( АЦП дает новые данные, только если, откл. и вкл. питание, и они корректно меняются с положением резистора, а в цикле не хочет, пользовался этой инструкцией

Прилепил счетчик на adc_complete, он считает а вместимое меньшего регистра ADCL не меняется. Переключил в непрерывный замер АЦП(ADFR=1), счетчик замеров бежит, а ADCL все равно не меняется... Я уже не знаю чего делать... :cry:
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

When ADCL is read, the ADC Data Register is not updated until ADCH is read. Consequently,
if the result is left adjusted and no more than 8-bit precision is required, it is
sufficient to read ADCH. Otherwise, ADCL must be read first, then ADCH.

Прочтите ADCH после ADCL.
Docendo discimus
Ответить

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