Страница 248 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 09:37:49
СКАЗОЧНИК
akl писал(а):При чём тут R0?
Ну потому что у меня в справочнике написано, если использовать просто команду LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0...
Вот и подумал, по логике вещей, эта команда может работать с этим регистром, а если ей указать куда грузить, то она автоматом потом из этого регистра перекидывает туда, куда надо...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 09:40:13
Gudd-Head
СКАЗОЧНИК писал(а):Слева направо, а дальше вторая строка с лева на право и т.д.?
да
СКАЗОЧНИК писал(а):Является ли это все одним массивом?
Это непрерывный набор байт. Можно обозвать хоть командами.
СКАЗОЧНИК писал(а):Т.е. их можно использовать с помощью команды загрузки из программной памяти с пост-инкрементом (LPM)?
С ними можно делать что угодно, загрузив с помощью любой команды LPM.
СКАЗОЧНИК писал(а):Команда эта (LPM) с пост-инкрементом загружает также очередное значение в R0, кроме того регистра, куда мне надо.
Читайте Евстифеева.
эта команда может работать с этим регистром, а если ей указать куда грузить, то она автоматом потом из этого регистра перекидывает туда, куда надо...
Она автоматом СРАЗУ загружает куда указано.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 12:15:09
Kavka
СКАЗОЧНИК писал(а):LPM без параметров, то она загрузит значение по адресу в ZH, ZL в регистр R0...
Так оно и есть. А в остальном логика другая маленько

У этой команды есть три варианта записи (чисто по синтаксису).
1) LPM
2) LPM Rd, Z
3) LPM Rd, Z+
Первый и второй варианты без инкремента Z, последний с инкрементом.
Соответственно первый вариант записи эквивалентен второму варианту с R0 в качестве регистра.
Пересылка данных происходит сразу в указанный регистр, прочие регистры не затрагиваются (кроме автоинкремента Z).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 12:20:51
СКАЗОЧНИК
Спасибо. Я уже в отладчике их все отследил.

Все победил. Использовал с пост-инкрементом, он прибавляет единичку к регистровой паре Z.
Огранизовал заполнение из одного массива в другой массив. В одном адреса построчно, в другом адреса по столбцам. Вот и морочил голову. Но добился, чего хотел.
Если кому интересно, то это все для ЖКИ 1602 вот здесь:
http://radiokot.ru/forum/viewtopic.php? ... 2#p2250682
Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того:
команда "Привет, Радиокот!"
Чтобы не забивать каждую букву ее кодами... Или это только на Си можно? не верю, а мозги не хотят выдумать алгоритм.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 21:23:33
Flash.#13
zero648 писал(а):Установите режим FastPWM, а не NORMAL
Спасибо,
Fast PWM завелся нормально. Теперь минус два прерывания, и оптимизация кода))
СКАЗОЧНИК писал(а):...Или это только на Си можно?
"Си" в конечном счете в машинный код все транслирует, с оптимизацией, и кучей надстроек, но все в тот же ассемблер)) Да и сам ЖК 1602 работает не с буквами, а с их кодами...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт янв 22, 2015 22:44:33
Jack_A
СКАЗОЧНИК писал(а):
Вот кто бы подсказал, как на ассемблере реализовать вывод на этот дисплей строки? Ну, типа того:
команда "Привет, Радиокот!"
Такой команды, естественно, в ассемблере нет и быть не может ( в Си, кстати, тоже ), иначе ассемблер должен был бы знать интерфейсы всех существующих в мире дисплеев и, телепатируя автора, подключать подпрограмму нужного ему
Если речь о том, чтобы не набирать по-кодово выводимую строку, то это можно - для латиницы, цифр и символов.
Код: Выделить всё
000057 7453
000058 7261
000059 2074
00005a 5f31 .db "Start 1_"
Предвижу возражение : в Си есть функция ( не команда ) printf - вывод строки символов на системное устройство вывода. Это на ПК. С Си на МК я не работал, поэтому не представляю, если в компиляторе реализована такая функция -- то что она понимает под "системным устройством вывода" ? По идее, такая задача решается подключением нужной библиотеки.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 03:21:55
СКАЗОЧНИК
Jack_A писал(а):в Си есть функция
Да, про это я имел ввиду. Типа функции, подпрограммы. )))
А вот про приведенный кусочек кода не совсем понятно. Можно поподробнее. А то я уже почти все реализовал, что хотел, осталось токма это.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 10:36:17
Jack_A
А тут кода одна строка : .db "Start 1_" . Получив ее, компилятор раскручивает
ее в последовательность байт:
Но это не годится для кириллицы, тем более что для нее коды дисплея не совпадают с
ASCII .
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:22:46
СКАЗОЧНИК
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:24:53
Gudd-Head
Компилятор вместо слова вставляет побайтно АСКИИ-коды соотв. букв.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:26:11
СКАЗОЧНИК
Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?
Неужели все так просто?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:31:10
Gudd-Head
Угу. Можно же, в конце концов, погонять в студии.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:32:00
СКАЗОЧНИК

До меня не доходила сама суть, ЧТО гонять. ))) Теперь понял. Благодарю!
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 11:59:51
Jack_A
СКАЗОЧНИК писал(а):Т.е. если я задам массив и напишу в нем буквами, у меня скомпилируется в коды символов?
Да. Для латиницы, цифр и знаков препинания. Когда мне нужно было загонять большие массивы кириллических текстов, я поручал эту работу специально обученной программе. Есть что-то подобное в сети, но мне лень было искать, свою накропал.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт янв 23, 2015 12:04:29
СКАЗОЧНИК
А мне особенно кирилица и не нравится в отображении на таких дисплеях... Кривая какая-то. Поэтому, ее можно и кодами, кому надо.
З.Ы. Сделал! Все прекрасно пашет. Как же это просто оказалось! ))) Теперь моя библиотека для ЖКИ обзавелась выводом сразу строки. Причем так выгоднее писать на дисплее, чем отдельно по букве выводить.

Благодарю.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб янв 24, 2015 11:37:11
neoneon
Подскажите пжлст, можно ли значение 16-разрядного таймера\счетчика считывать побайтно?
т.е.
Код: Выделить всё
mov temp1L, TCNT1L ; Запись младшего байта
mov temp1H, TCNT1H ; запись старшего байта
AVR studio матюгается на эти строки, "invalid register"
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб янв 24, 2015 13:19:01
akl
Чтение 16-назрядных регистров периферии.
IN XL,TCNT1L
IN XH,TCNT1H
Позор на мою седую. Исправил.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб янв 24, 2015 14:06:09
СКАЗОЧНИК
Елки. Хреново, что в ассемблере нет команды "пропустить, если при сравнении регистра с константой получилось равно"...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб янв 24, 2015 14:13:48
neoneon
akl писал(а):IN XL,TCNT1L
IN XH,TCNT1H
Исправил.
Разве LDI было неверно?
IN - ввод из порта I/O, регистр счетчика можно назвать портом? О_о
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс янв 25, 2015 04:53:47
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