Обсуждаем контроллеры компании Atmel.
Ответить

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

Пт окт 27, 2017 08:50:34

Всем спасибо буду пробовать.

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

Вс окт 29, 2017 10:02:47

Всем добрый день подскажите пожалуйста
в описании модуля 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?

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

Вс окт 29, 2017 10:57:50

Компилятор вообще переводит весь исходник в двоичный код :)) Зачем такая мудреная запись - не знаю, то же самое было бы
Код:
ldi   r16,0xFF
ldi   r17,0xFF
Это просто забивание r17, r16 единичками. Видимо, признак ПРИНЯТО С ОШИБКОЙ.

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

Вс окт 29, 2017 19:03:34

Забивается на выход невалидное значение, чтобы приложение потом у себя поняло что произошла ошибка, а не какие-то данные были приняты. Иначе в старшем байте старший бит(а в идеале все с 1-го по 7-й) точно должен быть равен нулю.

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

Сб ноя 04, 2017 06:23:34

а как понять запись
HIGH(-1)
L0W(-1)

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

Сб ноя 04, 2017 06:49:23

Куда то определить, занести -1=0xFFFF.
Тоже самое, но для 4 байт -1=FFFF FFFF
BYTE4(-1)
BYTE3(-1)
BYTE2(-1)
BYTE1(-1)

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

Сб ноя 04, 2017 10:06:04

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

BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.

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

Сб ноя 04, 2017 12:18:30

LOW Младшая часть слова.
BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.

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 KiB) Скачиваний: 812

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

Сб ноя 04, 2017 12:24:12

И? Вам трудно было сразу написать, как положено, чтобы потом не было вопросов?
Или вы по асму что-то новое хотели мне сказать?

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

Сб ноя 04, 2017 14:49:25

Вы залезли с фигнёй типа "байты по старшинству", потому и написал...

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

Сб ноя 04, 2017 14:51:56

Вы залезли фигнёй типа "байты по старшинству", потому и написал...

??? BYTE1 - младший, BYTE2 - следующий. Что непонятно?

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

Вт дек 26, 2017 05:46:16

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

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

LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?

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

Вт дек 26, 2017 06:26:21

леМурр писал(а):LPM Rd, Z
какой диапазон для Rd? 0...31 или 16...31?

0-31. То есть, можно даже в регистры ZL, ZH. Естественно, как указатель после этого использовать нельзя, нужно заново записать адрес.

леМурр писал(а):LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?

Эта команда для регистровой пары. То есть, если младший ZL перешел через 0xFF, ZH автоматом инкрементируется.

На заметку: описание команд AVR.

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

Вт дек 26, 2017 19:00:12

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 когда-то читал в сети
ругань, один японец не обнаружил инкремнта
в старшем, предположил что сильно разогнал
проц., короче, мутная история...

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

Вт дек 26, 2017 22:03:15

А ещё сделал для себя такую шпаргалку :
ATMEL - все инструкции.pdf
(173.5 KiB) Скачиваний: 341

Лист А4: распечатать на двух сторонах, заламинировать и пользоваться. Если зрение хорошее, можно попробовать уменьшить до А5, но ИМХО не стоит.

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

Ср дек 27, 2017 07:22:08

Небольшое уточнение. LPM не у всех МК работает со всеми регистрами. Не помню точно, то ли у старых МК, то ли еще и у тинек. В этом случае так:
lpm // Загрузка данных в регистр r0.
Уточняйте в даташите на конкретный МК.

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

Ср дек 27, 2017 08:46:50

Alexeyslav писал(а):...распечатать на двух сторонах, заламинировать...

Кому-как, а я ставлю "лайк". Тем более, что и сам давно затеял подобное,
правда, для каждой AVR-ки индивидуальный набор команд, чтобы хоть в
различиях не путаться по ходу, одна беда, каждый файлик до чистового
варианта так и не доведён :dont_know: сядешь-бывало писать, и вся эта красота
вмиг откладывается "на потом" :tea:

Demiurg писал(а):...LPM не у всех МК работает...

Полностью согласен, имея LPM, вовсе не обязательно пользовать LPM Rd, Z
хотя с последней в паре идёт LPM Rd, Z+ которая облегчает автоматически
"намайнить" кучу констант, и вообще... имея толстенный ROM, я бы и сам
натолкал его всякими таблицами, графикой :) плюс музон (опционально)

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

Ср дек 27, 2017 09:40:37

LPM у всех работает, это SPM нет у тинек.

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

Вообще у контроллера нет отдельной команды LPM - это всего лишь алиас на команду LPM R0, X. Точно так же как нет и команды CLR Rx, на самом деле это команда XOR Rx, Rx.

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

Ср дек 27, 2017 09:53:02

Вообще-то последняя редакция системы команд 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:

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

Ср дек 27, 2017 10:35:34

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