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

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

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

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

akl писал(а):При чём тут R0?

Ну потому что у меня в справочнике написано, если использовать просто команду LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0... :dont_know:
Вот и подумал, по логике вещей, эта команда может работать с этим регистром, а если ей указать куда грузить, то она автоматом потом из этого регистра перекидывает туда, куда надо... :)
Станислав
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

СКАЗОЧНИК писал(а):Слева направо, а дальше вторая строка с лева на право и т.д.?
да
СКАЗОЧНИК писал(а):Является ли это все одним массивом?
Это непрерывный набор байт. Можно обозвать хоть командами.
СКАЗОЧНИК писал(а):Т.е. их можно использовать с помощью команды загрузки из программной памяти с пост-инкрементом (LPM)?
С ними можно делать что угодно, загрузив с помощью любой команды LPM.
СКАЗОЧНИК писал(а):Команда эта (LPM) с пост-инкрементом загружает также очередное значение в R0, кроме того регистра, куда мне надо.
Читайте Евстифеева.
эта команда может работать с этим регистром, а если ей указать куда грузить, то она автоматом потом из этого регистра перекидывает туда, куда надо...
Она автоматом СРАЗУ загружает куда указано.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

СКАЗОЧНИК писал(а):LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0...
Так оно и есть. А в остальном логика другая маленько :)
У этой команды есть три варианта записи (чисто по синтаксису).
1) LPM
2) LPM Rd, Z
3) LPM Rd, Z+
Первый и второй варианты без инкремента Z, последний с инкрементом.
Соответственно первый вариант записи эквивалентен второму варианту с R0 в качестве регистра.
Пересылка данных происходит сразу в указанный регистр, прочие регистры не затрагиваются (кроме автоинкремента Z).
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Спасибо. Я уже в отладчике их все отследил. :) Все победил. Использовал с пост-инкрементом, он прибавляет единичку к регистровой паре Z.
Огранизовал заполнение из одного массива в другой массив. В одном адреса построчно, в другом адреса по столбцам. Вот и морочил голову. Но добился, чего хотел.
Если кому интересно, то это все для ЖКИ 1602 вот здесь:
http://radiokot.ru/forum/viewtopic.php?p=2250682#p2250682

Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того:
команда "Привет, Радиокот!"
Чтобы не забивать каждую букву ее кодами... Или это только на Си можно? не верю, а мозги не хотят выдумать алгоритм.
Станислав
Аватара пользователя
Flash.#13
Держит паяльник хвостом
Сообщения: 965
Зарегистрирован: Сб апр 12, 2014 23:46:03
Откуда: Киев

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

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

zero648 писал(а):Установите режим FastPWM, а не NORMAL

Спасибо, Fast PWM завелся нормально. Теперь минус два прерывания, и оптимизация кода)) :beer:

СКАЗОЧНИК писал(а):...Или это только на Си можно?

"Си" в конечном счете в машинный код все транслирует, с оптимизацией, и кучей надстроек, но все в тот же ассемблер)) Да и сам ЖК 1602 работает не с буквами, а с их кодами... :shock:
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

СКАЗОЧНИК писал(а):Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того:
команда "Привет, Радиокот!"

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

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

000057 7453
000058 7261
000059 2074
00005a 5f31        .db   "Start 1_"


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

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

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

Jack_A писал(а):в Си есть функция

Да, про это я имел ввиду. Типа функции, подпрограммы. )))
А вот про приведенный кусочек кода не совсем понятно. Можно поподробнее. А то я уже почти все реализовал, что хотел, осталось токма это. :dont_know:
Станислав
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

А тут кода одна строка : .db "Start 1_" . Получив ее, компилятор раскручивает
ее в последовательность байт:
Изображение

Но это не годится для кириллицы, тем более что для нее коды дисплея не совпадают с
ASCII .
Вложения
Start.JPG
(5.87 КБ) 828 скачиваний
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

:oops: Нифига не понял... похоже, я чайник... :facepalm: :roll:
Станислав
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

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

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

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

Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?
Неужели все так просто?
Станислав
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Угу. Можно же, в конце концов, погонять в студии.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

:))) До меня не доходила сама суть, ЧТО гонять. ))) Теперь понял. Благодарю!
Станислав
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

СКАЗОЧНИК писал(а):Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?

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

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

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

А мне особенно кирилица и не нравится в отображении на таких дисплеях... Кривая какая-то. Поэтому, ее можно и кодами, кому надо. :)))

З.Ы. Сделал! Все прекрасно пашет. Как же это просто оказалось! ))) Теперь моя библиотека для ЖКИ обзавелась выводом сразу строки. Причем так выгоднее писать на дисплее, чем отдельно по букве выводить.
:beer: Благодарю.
Станислав
Аватара пользователя
neoneon
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср окт 22, 2014 07:39:26
Откуда: Омск

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

Сообщение neoneon »

Подскажите пжлст, можно ли значение 16-разрядного таймера\счетчика считывать побайтно?
т.е.

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

mov temp1L, TCNT1L      ; Запись младшего байта
mov temp1H, TCNT1H      ; запись старшего байта

AVR studio матюгается на эти строки, "invalid register"
Полный чайник.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Чтение 16-назрядных регистров периферии.
IN XL,TCNT1L
IN XH,TCNT1H

Позор на мою седую. Исправил.
Последний раз редактировалось akl Сб янв 24, 2015 14:22:05, всего редактировалось 2 раза.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Елки. Хреново, что в ассемблере нет команды "пропустить, если при сравнении регистра с константой получилось равно"...
Станислав
Аватара пользователя
neoneon
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср окт 22, 2014 07:39:26
Откуда: Омск

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

Сообщение neoneon »

akl писал(а):IN XL,TCNT1L
IN XH,TCNT1H

Исправил.

Разве LDI было неверно?
IN - ввод из порта I/O, регистр счетчика можно назвать портом? О_о
Полный чайник.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Командой LDI загружается адрес порта. А вот для обмена значениями по этим 16-разрядным портам периферии и придумали аппаратные регистры TEMP. Правда, общение стало немного сложнее. Запись значения в такие порты (OUT или STS с соответствующим смещением на +$20) должна быть в формате старший-младший, чтение значения наоборот - младший-старший (IN или LDS с соответствующим смещением на +$20).
Спойлер

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

   LDI   XH,TCNT1H+$20
   LDI   XL,TCNT1L+$20

   LD   R1,X+
   LD   R0,X
   IN   R11,TCNT1L
   IN   R10,TCNT1H

   ST   X,R1
   ST   -X,R0
   OUT   TCNT1H,R11
   OUT   TCNT1L,R10

   LDS   R1,TCNT1L+$20
   LDS   R0,TCNT1H+$20
   IN   R11,TCNT1L
   IN   R10,TCNT1H

   STS   TCNT1H+$20,R1
   STS   TCNT1L+$20,R0
   OUT   TCNT1H,R11
   OUT   TCNT1L,R10
Ответить

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