Ассемблер (ASM) для AVR в вопросах и ответах
- strengerst
- Вымогатель припоя
- Сообщения: 516
- Зарегистрирован: Пт янв 18, 2013 15:11:02
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем спасибо буду пробовать.
- Реклама
-
sibiryak69
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вс июн 19, 2016 06:31:18
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Всем добрый день подскажите пожалуйста
в описании модуля 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?
в описании модуля 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 в вопросах и ответах
Компилятор вообще переводит весь исходник в двоичный код
Зачем такая мудреная запись - не знаю, то же самое было бы
Это просто забивание r17, r16 единичками. Видимо, признак ПРИНЯТО С ОШИБКОЙ.
Код: Выделить всё
ldi r16,0xFF
ldi r17,0xFF-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Забивается на выход невалидное значение, чтобы приложение потом у себя поняло что произошла ошибка, а не какие-то данные были приняты. Иначе в старшем байте старший бит(а в идеале все с 1-го по 7-й) точно должен быть равен нулю.
-
sibiryak69
- Первый раз сказал Мяу!
- Сообщения: 24
- Зарегистрирован: Вс июн 19, 2016 06:31:18
Re: Ассемблер (ASM) для AVR в вопросах и ответах
а как понять запись
HIGH(-1)
L0W(-1)
HIGH(-1)
L0W(-1)
- Реклама
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Куда то определить, занести -1=0xFFFF.
Тоже самое, но для 4 байт -1=FFFF FFFF
BYTE4(-1)
BYTE3(-1)
BYTE2(-1)
BYTE1(-1)
Тоже самое, но для 4 байт -1=FFFF FFFF
BYTE4(-1)
BYTE3(-1)
BYTE2(-1)
BYTE1(-1)
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
LOW Младшая часть слова.
HIGH Старшая часть слова.
16 бит.
BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.
HIGH Старшая часть слова.
16 бит.
BYTE1
BYTE2
BYTE3
BYTE4
Соответственно байты по старшинству 32-битное число.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[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)

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 в вопросах и ответах
И? Вам трудно было сразу написать, как положено, чтобы потом не было вопросов?
Или вы по асму что-то новое хотели мне сказать?
Или вы по асму что-то новое хотели мне сказать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вы залезли с фигнёй типа "байты по старшинству", потому и написал...
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
[uquote="akl",url="/forum/viewtopic.php?p=3224085#p3224085"]Вы залезли фигнёй типа "байты по старшинству", потому и написал...[/uquote]
??? BYTE1 - младший, BYTE2 - следующий. Что непонятно?
??? BYTE1 - младший, BYTE2 - следующий. Что непонятно?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
два вопроса, простой и сложный, начну с обоих
LPM Rd, Z
какой диапазон для Rd? 0...31 или 16...31?
LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?
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 в вопросах и ответах
0-31. То есть, можно даже в регистры ZL, ZH. Естественно, как указатель после этого использовать нельзя, нужно заново записать адрес.леМурр писал(а): LPM Rd, Z
какой диапазон для Rd? 0...31 или 16...31?
Эта команда для регистровой пары. То есть, если младший ZL перешел через 0xFF, ZH автоматом инкрементируется.леМурр писал(а): LPM Rd, Z+
будет ли инкрементить Z(high) c переполнением Z(low)?
На заметку: описание команд AVR.
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 в вопросах и ответах
А ещё сделал для себя такую шпаргалку :
Лист А4: распечатать на двух сторонах, заламинировать и пользоваться. Если зрение хорошее, можно попробовать уменьшить до А5, но ИМХО не стоит.
-
Demiurg
- Это не хвост, это антенна
- Сообщения: 1480
- Зарегистрирован: Ср июн 25, 2008 15:19:44
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Небольшое уточнение. LPM не у всех МК работает со всеми регистрами. Не помню точно, то ли у старых МК, то ли еще и у тинек. В этом случае так:
lpm // Загрузка данных в регистр r0.
Уточняйте в даташите на конкретный МК.
lpm // Загрузка данных в регистр r0.
Уточняйте в даташите на конкретный МК.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Кому-как, а я ставлю "лайк". Тем более, что и сам давно затеял подобное,Alexeyslav писал(а):...распечатать на двух сторонах, заламинировать...
правда, для каждой AVR-ки индивидуальный набор команд, чтобы хоть в
различиях не путаться по ходу, одна беда, каждый файлик до чистового
варианта так и не доведён
вмиг откладывается "на потом"
Полностью согласен, имея LPM, вовсе не обязательно пользовать LPM Rd, ZDemiurg писал(а):...LPM не у всех МК работает...
хотя с последней в паре идёт LPM Rd, Z+ которая облегчает автоматически
"намайнить" кучу констант, и вообще... имея толстенный ROM, я бы и сам
натолкал его всякими таблицами, графикой
..всего две 6Ф1П, включенные последовательно,
высушат обое ваших сапог даже в автомобиле..
высушат обое ваших сапог даже в автомобиле..
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
LPM у всех работает, это SPM нет у тинек.
Например как отсутствующая команда SPM у семейства TINY, наличие "длинных" переходов только у контроллеров с большим объёмом флеша, команды MUL*. И только для старших контроллеров типа XMEGA и 32-х битных уже пожалуй надо отдельный листок.
Вообще у контроллера нет отдельной команды LPM - это всего лишь алиас на команду LPM R0, X. Точно так же как нет и команды CLR Rx, на самом деле это команда XOR Rx, Rx.
Вообще у них минимальные отличия чтобы зря тратить бумагу, проще индивидуальные особенности отметить как исключения.для каждой AVR-ки индивидуальный набор команд
Например как отсутствующая команда SPM у семейства TINY, наличие "длинных" переходов только у контроллеров с большим объёмом флеша, команды MUL*. И только для старших контроллеров типа XMEGA и 32-х битных уже пожалуй надо отдельный листок.
Вообще у контроллера нет отдельной команды LPM - это всего лишь алиас на команду LPM R0, X. Точно так же как нет и команды CLR Rx, на самом деле это команда XOR Rx, Rx.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вообще-то последняя редакция системы команд Atmel-0856-AVR-Instruction-Set-Manual от 11.2016 года (или версия Atmel-0856L-AVR-Instruction-Set-Manual вот по этой ссыли http://ww1.microchip.com/downloads/en/d ... manual.pdf).

Тиньки РААЗНЫЕ бывают... (насчет "нет SPM")
Та же attiny13A, к примеру (см. 8126E–AVR–07/10 стр.161)

Тиньки РААЗНЫЕ бывают... (насчет "нет SPM")
Та же attiny13A, к примеру (см. 8126E–AVR–07/10 стр.161)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлю. Не забыть запрограммировать FUSE-бит SELFPRGEN при применении команды SPM. И почитать соответствующий раздел DS.



