Ассемблер (ASM) для AVR в вопросах и ответах
Re: Ассемблер (ASM) для AVR в вопросах и ответах
кто знает как узнать обьем данных, которые будут загружены в МК из HEX файла, сгенерированого TavrAsm.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Как вариант, загрузить в программатор

Спойлер
- Вложения
-
- hex.PNG
- (28.31 КБ) 1028 скачиваний
- Z_h_e
- Собутыльник Кота
- Сообщения: 2708
- Зарегистрирован: Сб май 14, 2011 21:16:04
- Откуда: г. Чайковский
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl, добрый день. У меня есть к Вам вопрос, но Вы отключили личные сообщения. Можно как-то с Вами связаться?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вопрос решен. Удалил.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Возможности макропрограммирования avrasm2 позволяют делать интересные вещи, вот пример рекурсии в макросах:
А вот ещё пример макроса для инициализации портов ввода/вывода ATmega, ATtiny.
Не получается добавить вложение, вот прямая ссылка [url]www.avr-assm.ru\files\macro2.zip[/url]
Код: Выделить всё
.macro Ft
.if a != 1
.set r = r * a
.set a = a - 1
Ft a
.endif
.endmacro
.macro Factorial
.set a = @0
.set r = 1
Ft a
.endmacro
.cseg
Factorial 7
ldi r16,byte4(r)
ldi r16,byte3(r)
ldi r16,byte2(r)
ldi r16,byte1(r)
А вот ещё пример макроса для инициализации портов ввода/вывода ATmega, ATtiny.
Не получается добавить вложение, вот прямая ссылка [url]www.avr-assm.ru\files\macro2.zip[/url]
-
dmitriy131313
- Родился
- Сообщения: 10
- Зарегистрирован: Сб июл 11, 2015 09:22:54
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Здравствуйте, Друзья! Помогите пожалуйста. Никак не могу понять код умножения из атмеловской аппноы 200. Принцип действия каждой команды понятен, а вот в логику никак не могу въехать. Заранее спасибо!
.def mc8u =r16
.def mp8u =r17
.def m8uL =r17
.def m8uH =r18
.def mcnt8u =r19
mpy8u_c:
clr m8uH
ldi mcnt8u, 8
lsr mp8u
m8u_1:
brcc m8u_2
add m8uH, mc8u
m8u_2:
ror m8uH
ror m8uL
dec mcnt8u
brne m8u_1
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Лучше чем в самом AVR200 вряд ли кто напишет.
-
dmitriy131313
- Родился
- Сообщения: 10
- Зарегистрирован: Сб июл 11, 2015 09:22:54
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):Лучше чем в самом вряд ли кто напишет.
Тут конечно не поспоришь. Заново изобретать велосипед нет смысла. Но всё же с кодом разобраться хочется. В аппноте подробно расписан алгоритм, но отсутствует разъяснение логики действий. Хотелось бы увидеть хотя бы формулу по котой ведётся расчёт. Если кто знает, был бы благодарен за помощь!
- WiseLord
- Друг Кота
- Сообщения: 4905
- Зарегистрирован: Чт апр 11, 2013 11:19:59
- Откуда: Минск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Возьмите два числа в двоичном виде и умножьте их столбиком - как в школе, только в двоичной системе. Вот именно это в коде и реализуется.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Tell Me The Truth
-
Пока_без_кота
- Потрогал лапой паяльник
- Сообщения: 359
- Зарегистрирован: Чт авг 08, 2013 01:06:54
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Параметры макроса. Первый (@0), и второй (@1).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Привет форумчанам!
Пока только курю форумы и даташиты, поэтому нужно мнение тех, кто в теме.
Имеется давний проект https://www.drive2.ru/b/1561303/
Вот накарябал код, но надо идти дальше
Вопрос как реализовать контроль переменного напряжения поступающего на вывод МК?
Как прерывание по изменению состояния вывода или измерять ацп?
Нужно начать процесс регулирования только после того, как генератор раскрутится, т.е с обмотки статора начнет поступать напряжение.
Пока только курю форумы и даташиты, поэтому нужно мнение тех, кто в теме.
Имеется давний проект https://www.drive2.ru/b/1561303/
Вот накарябал код, но надо идти дальше
Вопрос как реализовать контроль переменного напряжения поступающего на вывод МК?
Как прерывание по изменению состояния вывода или измерять ацп?
Нужно начать процесс регулирования только после того, как генератор раскрутится, т.е с обмотки статора начнет поступать напряжение.
- Вложения
-
- 525ab3cs-960.jpg
- (70.23 КБ) 305 скачиваний
Re: Ассемблер (ASM) для AVR в вопросах и ответах
какая разница между этими формами записи ?
Код: Выделить всё
out _SFR_IO_ADDR(USICR), r24Код: Выделить всё
out USICR, r24Tell Me The Truth
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Смотри исходник с дефайном (область объявления констант/имен) в том проекте.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
не увидел я там ничего такого
можете изясниться яснее ?
можете изясниться яснее ?
Tell Me The Truth
Re: Ассемблер (ASM) для AVR в вопросах и ответах
_SFR_IO_ADDR это макрос
Код: Выделить всё
#define __SFR_OFFSET 0x20
#define _SFR_IO_ADDR(sfr) ((sfr) - __SFR_OFFSET)
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ок, спасибо
ну а почему тогда производится вычитание смиещения ?
http://images.slideplayer.com/16/526396 ... ide_29.jpg
насколько я понимаю то сначала идут GPR а далее SFR
и как по мне то для правильного указания действительного адреса следовало бы записать SFR+0x20
ну а почему тогда производится вычитание смиещения ?
http://images.slideplayer.com/16/526396 ... ide_29.jpg
насколько я понимаю то сначала идут GPR а далее SFR
и как по мне то для правильного указания действительного адреса следовало бы записать SFR+0x20
Tell Me The Truth
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Для компилятора avrasm (avrasm2) использование данного макроса не имеет смысла, так как в аппнотовских файлах (.inc) адреса регистров уже скорректированы для использования в инструкциях in/out либо lds/sts. Этот макрос в avrasm и не применяется. Возможно в каких-то других средах программирования что-то как-то происходит иначе. Я знаю только avrasm, пока не было необходимости в чём то другом.
О, вспомнил: в GCC это используется, смотрите в его документации.
О, вспомнил: в GCC это используется, смотрите в его документации.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
dimmer писал(а):Для компилятора avrasm (avrasm2) использование данного макроса не имеет смысла, так как в аппнотовских файлах (.inc) адреса регистров уже скорректированы для использования в инструкциях in/out либо lds/sts. Этот макрос в avrasm и не применяется. Возможно в каких-то других средах программирования что-то как-то происходит иначе. Я знаю только avrasm, пока не было необходимости в чём то другом.
О, вспомнил: в GCC это используется, смотрите в его документации.
Ой-ой!
Где ж это в инк-файлах "адреса скорректированы"?
Там только встречается комент " ; MEMORY MAPPED" - типа "адресуется исключительно как память".
Стандартно приводится ряд адресации для команд in/out (если все регистры вписываются в область 0х01 -0х3F),
а для работы с РСФ в диапазоне адресов 0х01 -0х3F как с ОЗУ (ld/st lds/sts) используется "имя регистра+0x20".
Плюс особое внимание кристаллам с расширенной областью РСФ, где надо внимательно
в даташит глядеть (что в любом случае не лишним будет) в раздел "register summary".
Ибо "что сывше 0х3F (0х5F как ОЗУ)" доступно исключительно как ОЗУ
и уже не требует пресловутого "+0x20".
очепятку исправил
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Доброго времени суток
Небольшая загвоздка с таймером1 в меге8
Значит, установил режим СТС, разрешил прерывания таймера по совпадению с OCR1A, загрузил числа в OCR1A. По прерыванию инвертируем состояние портаB. В avrstudio4 работает нормально, в протеусе и железе - почему-то частота инвертирования порта не зависит от OCR1AH, т.е. все происходит только по младшему регистру.
Спойлер
Код: Выделить всё
;разрешим сон idle mode
in temp, MCUCR
ori temp, 0b10000000
andi temp, 0b10001111
out MCUCR, temp
;таймер
ser temp ; устанавливаем числа, с которыми будет сравниваться таймер
out OCR1AL, temp
out OCR1AH, temp
clr temp
out TCCR1A, temp ; ОС1А отключен
ldi temp, 0b00001001
out TCCR1B, temp ; режим СТС
ldi temp, (1<<OCIE1A)
out TIMSK, temp ; разрешаем прерывания по совпадению
sei
Nope1:
sleep
rjmp nope1
tim1_compa: ; обработка прерывания - ставим в лог. 1 нулевой бит портаB
ldi temp, 0x0F
out ddrb, temp
in temp, portb
com temp
andi temp, 0x0F
out portb, temp
retiПолный чайник.
