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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
strengerst
Вымогатель припоя
Сообщения: 516
Зарегистрирован: Пт янв 18, 2013 15:11:02

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

Сообщение strengerst »

Всем спасибо буду пробовать.
Реклама
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

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

Сообщение sibiryak69 »

Всем добрый день подскажите пожалуйста
в описании модуля USART tiny2313 есть такой пример приема кадра длинной 9 бит

USART_Receive:.
; Ожидаем пока данные будут получены
sbis UCSRA, RXC
rjmp USART_Receive
; Получаем статус и 9-й бит данных, а затем остальные данные
in г18. UCSRA
in r17, UCSRB
in r16, UDR
; Если ошибка, возвращаем -1
andi r18, (1«FE) | (1«D0R)| (1«UPE)
breq USART_ReceiveNoError
ldi r17, HIGH(-1)
ldi г16, L0W(-1)
USART_ReceiveNoError:
Выделяем 9-й бит и возвращаем полученные данные
Isг г17
andi г17, 0x01
ret

в данном примере не понятны две строки

ldi r17, HIGH(-1)
ldi г16, L0W(-1)

а точнее возвращаемые значения -1

HIGH(-1)
L0W(-1)

то есть как компилятор переведет -1 в двоичный код?

и для чего -1 записывается в регистры r17, r16?
Реклама
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Компилятор вообще переводит весь исходник в двоичный код :)) Зачем такая мудреная запись - не знаю, то же самое было бы

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

ldi   r16,0xFF
ldi   r17,0xFF
Это просто забивание r17, r16 единичками. Видимо, признак ПРИНЯТО С ОШИБКОЙ.
Изображение
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Забивается на выход невалидное значение, чтобы приложение потом у себя поняло что произошла ошибка, а не какие-то данные были приняты. Иначе в старшем байте старший бит(а в идеале все с 1-го по 7-й) точно должен быть равен нулю.
Реклама
Эиком - электронные компоненты и радиодетали
sibiryak69
Первый раз сказал Мяу!
Сообщения: 24
Зарегистрирован: Вс июн 19, 2016 06:31:18

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

Сообщение sibiryak69 »

а как понять запись
HIGH(-1)
L0W(-1)
Реклама
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Куда то определить, занести -1=0xFFFF.
Тоже самое, но для 4 байт -1=FFFF FFFF
BYTE4(-1)
BYTE3(-1)
BYTE2(-1)
BYTE1(-1)
Реклама
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

LOW Младшая часть слова.
HIGH Старшая часть слова.
16 бит.

BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

[uquote="Demiurg",url="/forum/viewtopic.php?p=3223910#p3223910"]LOW Младшая часть слова.
BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.[/uquote]
BYTE4 -старший
BYTE3
BYTE2(HIGH)
BYTE1(LOW) -младший

.EQU BT4_1=-123456789 ;F8A4 32EB
.ORG 0
LDI R20,BYTE4(BT4_1)
LDI R21,BYTE3(BT4_1)
LDI R22,BYTE2(BT4_1)
LDI R23,BYTE1(BT4_1)
Изображение
Вложения
byte4_1.png
(6.45 КБ) 862 скачивания
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

И? Вам трудно было сразу написать, как положено, чтобы потом не было вопросов?
Или вы по асму что-то новое хотели мне сказать?
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Вы залезли с фигнёй типа "байты по старшинству", потому и написал...
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

[uquote="akl",url="/forum/viewtopic.php?p=3224085#p3224085"]Вы залезли фигнёй типа "байты по старшинству", потому и написал...[/uquote]
??? BYTE1 - младший, BYTE2 - следующий. Что непонятно?
Аватара пользователя
леМурр
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт дек 07, 2017 04:44:22

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

Сообщение леМурр »

два вопроса, простой и сложный, начну с обоих :write:

LPM Rd, Z
какой диапазон для Rd? 0...31 или 16...31?

LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?
..всего две 6Ф1П, включенные последовательно,
высушат обое ваших сапог даже в автомобиле..
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

леМурр писал(а): LPM Rd, Z
какой диапазон для Rd? 0...31 или 16...31?
0-31. То есть, можно даже в регистры ZL, ZH. Естественно, как указатель после этого использовать нельзя, нужно заново записать адрес.
леМурр писал(а): LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?
Эта команда для регистровой пары. То есть, если младший ZL перешел через 0xFF, ZH автоматом инкрементируется.

На заметку: описание команд AVR.
Аватара пользователя
леМурр
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт дек 07, 2017 04:44:22

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

Сообщение леМурр »

Demiurg писал(а):На заметку: описание команд AVR.
Ух ты, спасибо за линк
<< 8-bit AVR Instruction Set >>
выпуск 1997/05/02 (в редакции 2005/11/02-oborgan)


Спокойненько пользовался прежним мануалом
AVR Enhanced RISC Microcontrollers Data Book: 5.
<< 8-bit AVR Instruction Set >>
выпуск 1996/08/28 (в редакции 1996/10/03-Atmel)

получается, там кой-чего пропущено, в мелочах...

А насчет WORD-а ZH:ZL когда-то читал в сети
ругань, один японец не обнаружил инкремнта
в старшем, предположил что сильно разогнал
проц., короче, мутная история...
..всего две 6Ф1П, включенные последовательно,
высушат обое ваших сапог даже в автомобиле..
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

А ещё сделал для себя такую шпаргалку :
ATMEL - все инструкции.pdf
(173.5 КБ) 481 скачивание
Лист А4: распечатать на двух сторонах, заламинировать и пользоваться. Если зрение хорошее, можно попробовать уменьшить до А5, но ИМХО не стоит.
Demiurg
Это не хвост, это антенна
Сообщения: 1480
Зарегистрирован: Ср июн 25, 2008 15:19:44
Контактная информация:

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

Сообщение Demiurg »

Небольшое уточнение. LPM не у всех МК работает со всеми регистрами. Не помню точно, то ли у старых МК, то ли еще и у тинек. В этом случае так:
lpm // Загрузка данных в регистр r0.
Уточняйте в даташите на конкретный МК.
Аватара пользователя
леМурр
Первый раз сказал Мяу!
Сообщения: 20
Зарегистрирован: Чт дек 07, 2017 04:44:22

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

Сообщение леМурр »

Alexeyslav писал(а):...распечатать на двух сторонах, заламинировать...
Кому-как, а я ставлю "лайк". Тем более, что и сам давно затеял подобное,
правда, для каждой AVR-ки индивидуальный набор команд, чтобы хоть в
различиях не путаться по ходу, одна беда, каждый файлик до чистового
варианта так и не доведён :dont_know: сядешь-бывало писать, и вся эта красота
вмиг откладывается "на потом" :tea:
Demiurg писал(а):...LPM не у всех МК работает...
Полностью согласен, имея LPM, вовсе не обязательно пользовать LPM Rd, Z
хотя с последней в паре идёт LPM Rd, Z+ которая облегчает автоматически
"намайнить" кучу констант, и вообще... имея толстенный ROM, я бы и сам
натолкал его всякими таблицами, графикой :) плюс музон (опционально)
..всего две 6Ф1П, включенные последовательно,
высушат обое ваших сапог даже в автомобиле..
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

LPM у всех работает, это SPM нет у тинек.
для каждой AVR-ки индивидуальный набор команд
Вообще у них минимальные отличия чтобы зря тратить бумагу, проще индивидуальные особенности отметить как исключения.
Например как отсутствующая команда SPM у семейства TINY, наличие "длинных" переходов только у контроллеров с большим объёмом флеша, команды MUL*. И только для старших контроллеров типа XMEGA и 32-х битных уже пожалуй надо отдельный листок.

Вообще у контроллера нет отдельной команды LPM - это всего лишь алиас на команду LPM R0, X. Точно так же как нет и команды CLR Rx, на самом деле это команда XOR Rx, Rx.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15561
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Вообще-то последняя редакция системы команд Atmel-0856-AVR-Instruction-Set-Manual от 11.2016 года (или версия Atmel-0856L-AVR-Instruction-Set-Manual вот по этой ссыли http://ww1.microchip.com/downloads/en/d ... manual.pdf).
8)
Тиньки РААЗНЫЕ бывают... (насчет "нет SPM")
Та же attiny13A, к примеру (см. 8126E–AVR–07/10 стр.161)
:wink:
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Добавлю. Не забыть запрограммировать FUSE-бит SELFPRGEN при применении команды SPM. И почитать соответствующий раздел DS.
Ответить

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