Страница 248 из 400

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

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

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 завелся нормально. Теперь минус два прерывания, и оптимизация кода)) :beer:
СКАЗОЧНИК писал(а):...Или это только на Си можно?
"Си" в конечном счете в машинный код все транслирует, с оптимизацией, и кучей надстроек, но все в тот же ассемблер)) Да и сам ЖК 1602 работает не с буквами, а с их кодами... :shock:

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 писал(а):в Си есть функция
Да, про это я имел ввиду. Типа функции, подпрограммы. )))
А вот про приведенный кусочек кода не совсем понятно. Можно поподробнее. А то я уже почти все реализовал, что хотел, осталось токма это. :dont_know:

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

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

Но это не годится для кириллицы, тем более что для нее коды дисплея не совпадают с
ASCII .

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

Добавлено: Пт янв 23, 2015 11:22:46
СКАЗОЧНИК
:oops: Нифига не понял... похоже, я чайник... :facepalm: :roll:

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
СКАЗОЧНИК
А мне особенно кирилица и не нравится в отображении на таких дисплеях... Кривая какая-то. Поэтому, ее можно и кодами, кому надо. :)))

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

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