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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Jetetex
Встал на лапы
Сообщения: 117
Зарегистрирован: Ср окт 15, 2014 12:45:46
Откуда: Анапа

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

Сообщение Jetetex »

кто знает как узнать обьем данных, которые будут загружены в МК из HEX файла, сгенерированого TavrAsm.
Если я чего-то не знаю, это не говорит о моем невежестве, а только о том, что раньше этот вопрос лежал вне сферы моих интересов.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Как вариант, загрузить в программатор
СпойлерИзображение
Вложения
hex.PNG
(28.31 КБ) 1029 скачиваний
Аватара пользователя
Z_h_e
Собутыльник Кота
Сообщения: 2708
Зарегистрирован: Сб май 14, 2011 21:16:04
Откуда: г. Чайковский

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

Сообщение Z_h_e »

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

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

Сообщение akl »

Вопрос решен. Удалил.
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

Возможности макропрограммирования avrasm2 позволяют делать интересные вещи, вот пример рекурсии в макросах:

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

.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 в вопросах и ответах

Сообщение dmitriy131313 »

Здравствуйте, Друзья! Помогите пожалуйста. Никак не могу понять код умножения из атмеловской аппноы 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
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Лучше чем в самом AVR200 вряд ли кто напишет.
AVR200_MULT.txt
(728 байт) 139 скачиваний
dmitriy131313
Родился
Сообщения: 10
Зарегистрирован: Сб июл 11, 2015 09:22:54

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

Сообщение dmitriy131313 »

akl писал(а):Лучше чем в самом вряд ли кто напишет.


Тут конечно не поспоришь. Заново изобретать велосипед нет смысла. Но всё же с кодом разобраться хочется. В аппноте подробно расписан алгоритм, но отсутствует разъяснение логики действий. Хотелось бы увидеть хотя бы формулу по котой ведётся расчёт. Если кто знает, был бы благодарен за помощь!
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Возьмите два числа в двоичном виде и умножьте их столбиком - как в школе, только в двоичной системе. Вот именно это в коде и реализуется.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

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

.macro   outi
   ldi   r16,@1
   out   @0,r16
.endm


что такое @1 и @0 ?
Tell Me The Truth
Пока_без_кота
Потрогал лапой паяльник
Сообщения: 359
Зарегистрирован: Чт авг 08, 2013 01:06:54

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

Сообщение Пока_без_кота »

Параметры макроса. Первый (@0), и второй (@1).
Dim-k12
Родился
Сообщения: 4
Зарегистрирован: Чт окт 22, 2009 17:41:38

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

Сообщение Dim-k12 »

Привет форумчанам!
Пока только курю форумы и даташиты, поэтому нужно мнение тех, кто в теме.
Имеется давний проект https://www.drive2.ru/b/1561303/
Вот накарябал код, но надо идти дальше
Вопрос как реализовать контроль переменного напряжения поступающего на вывод МК?
Как прерывание по изменению состояния вывода или измерять ацп?
Нужно начать процесс регулирования только после того, как генератор раскрутится, т.е с обмотки статора начнет поступать напряжение.
Вложения
525ab3cs-960.jpg
(70.23 КБ) 305 скачиваний
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

какая разница между этими формами записи ?

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

out   _SFR_IO_ADDR(USICR), r24

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

out   USICR, r24
Tell Me The Truth
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Смотри исходник с дефайном (область объявления констант/имен) в том проекте.
:wink:
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

не увидел я там ничего такого
можете изясниться яснее ?
Tell Me The Truth
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

_SFR_IO_ADDR это макрос

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

 #define __SFR_OFFSET 0x20
 #define _SFR_IO_ADDR(sfr) ((sfr) - __SFR_OFFSET)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

ок, спасибо :)
ну а почему тогда производится вычитание смиещения ?
http://images.slideplayer.com/16/526396 ... ide_29.jpg
насколько я понимаю то сначала идут GPR а далее SFR
и как по мне то для правильного указания действительного адреса следовало бы записать SFR+0x20
Tell Me The Truth
dimmer
Первый раз сказал Мяу!
Сообщения: 31
Зарегистрирован: Сб сен 17, 2016 18:56:30

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

Сообщение dimmer »

Для компилятора avrasm (avrasm2) использование данного макроса не имеет смысла, так как в аппнотовских файлах (.inc) адреса регистров уже скорректированы для использования в инструкциях in/out либо lds/sts. Этот макрос в avrasm и не применяется. Возможно в каких-то других средах программирования что-то как-то происходит иначе. Я знаю только avrasm, пока не было необходимости в чём то другом.
О, вспомнил: в GCC это используется, смотрите в его документации.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15549
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

dimmer писал(а):Для компилятора avrasm (avrasm2) использование данного макроса не имеет смысла, так как в аппнотовских файлах (.inc) адреса регистров уже скорректированы для использования в инструкциях in/out либо lds/sts. Этот макрос в avrasm и не применяется. Возможно в каких-то других средах программирования что-то как-то происходит иначе. Я знаю только avrasm, пока не было необходимости в чём то другом.
О, вспомнил: в GCC это используется, смотрите в его документации.

:shock:
Ой-ой!
Где ж это в инк-файлах "адреса скорректированы"?
Там только встречается комент " ; MEMORY MAPPED" - типа "адресуется исключительно как память".
8)
Стандартно приводится ряд адресации для команд in/out (если все регистры вписываются в область 0х01 -0х3F),
а для работы с РСФ в диапазоне адресов 0х01 -0х3F как с ОЗУ (ld/st lds/sts) используется "имя регистра+0x20".
Плюс особое внимание кристаллам с расширенной областью РСФ, где надо внимательно
в даташит глядеть (что в любом случае не лишним будет) в раздел "register summary".
Ибо "что сывше 0х3F (0х5F как ОЗУ)" доступно исключительно как ОЗУ
и уже не требует пресловутого "+0x20".
:)
очепятку исправил
:wink:
Аватара пользователя
neoneon
Встал на лапы
Сообщения: 115
Зарегистрирован: Ср окт 22, 2014 07:39:26
Откуда: Омск

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

Сообщение neoneon »

Доброго времени суток :) Небольшая загвоздка с таймером1 в меге8 :) Значит, установил режим СТС, разрешил прерывания таймера по совпадению с OCR1A, загрузил числа в OCR1A. По прерыванию инвертируем состояние портаB. В avrstudio4 работает нормально, в протеусе и железе - почему-то частота инвертирования порта не зависит от OCR1AH, т.е. все происходит только по младшему регистру. :dont_know:

Спойлер

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

;разрешим сон 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
Полный чайник.
Ответить

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