Страница 298 из 400

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

Добавлено: Пн дек 05, 2016 22:19:38
Jetetex
кто знает как узнать обьем данных, которые будут загружены в МК из HEX файла, сгенерированого TavrAsm.

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

Добавлено: Вт дек 06, 2016 04:01:43
akl
Как вариант, загрузить в программатор
СпойлерИзображение

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

Добавлено: Чт дек 15, 2016 12:52:16
Z_h_e
akl, добрый день. У меня есть к Вам вопрос, но Вы отключили личные сообщения. Можно как-то с Вами связаться?

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

Добавлено: Чт дек 15, 2016 13:22:20
akl
Вопрос решен. Удалил.

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

Добавлено: Вт дек 27, 2016 22:05:03
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]

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

Добавлено: Ср дек 28, 2016 00:16:10
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

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

Добавлено: Ср дек 28, 2016 04:39:42
akl
Лучше чем в самом AVR200 вряд ли кто напишет.
AVR200_MULT.txt
(728 байт) 144 скачивания

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

Добавлено: Ср дек 28, 2016 21:08:43
dmitriy131313
akl писал(а):Лучше чем в самом вряд ли кто напишет.
Тут конечно не поспоришь. Заново изобретать велосипед нет смысла. Но всё же с кодом разобраться хочется. В аппноте подробно расписан алгоритм, но отсутствует разъяснение логики действий. Хотелось бы увидеть хотя бы формулу по котой ведётся расчёт. Если кто знает, был бы благодарен за помощь!

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

Добавлено: Ср дек 28, 2016 21:22:11
WiseLord
Возьмите два числа в двоичном виде и умножьте их столбиком - как в школе, только в двоичной системе. Вот именно это в коде и реализуется.

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

Добавлено: Сб янв 14, 2017 12:06:04
FreshMan

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

.macro	outi
	ldi	r16,@1
	out	@0,r16
.endm
что такое @1 и @0 ?

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

Добавлено: Сб янв 14, 2017 14:03:09
Пока_без_кота
Параметры макроса. Первый (@0), и второй (@1).

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

Добавлено: Вс янв 15, 2017 21:44:42
Dim-k12
Привет форумчанам!
Пока только курю форумы и даташиты, поэтому нужно мнение тех, кто в теме.
Имеется давний проект https://www.drive2.ru/b/1561303/
Вот накарябал код, но надо идти дальше
Вопрос как реализовать контроль переменного напряжения поступающего на вывод МК?
Как прерывание по изменению состояния вывода или измерять ацп?
Нужно начать процесс регулирования только после того, как генератор раскрутится, т.е с обмотки статора начнет поступать напряжение.

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

Добавлено: Пт янв 20, 2017 13:45:56
FreshMan
какая разница между этими формами записи ?

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

out	_SFR_IO_ADDR(USICR), r24

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

out	USICR, r24

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

Добавлено: Пт янв 20, 2017 13:50:32
BOB51
Смотри исходник с дефайном (область объявления констант/имен) в том проекте.
:wink:

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

Добавлено: Пт янв 20, 2017 17:04:33
FreshMan
не увидел я там ничего такого
можете изясниться яснее ?

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

Добавлено: Сб янв 21, 2017 11:59:11
dimmer
_SFR_IO_ADDR это макрос

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

 #define __SFR_OFFSET 0x20
 #define _SFR_IO_ADDR(sfr) ((sfr) - __SFR_OFFSET)

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

Добавлено: Сб янв 21, 2017 13:10:32
FreshMan
ок, спасибо :)
ну а почему тогда производится вычитание смиещения ?
http://images.slideplayer.com/16/526396 ... ide_29.jpg
насколько я понимаю то сначала идут GPR а далее SFR
и как по мне то для правильного указания действительного адреса следовало бы записать SFR+0x20

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

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

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

Добавлено: Вс янв 22, 2017 14:52:50
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:

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

Добавлено: Пн фев 13, 2017 09:02:29
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