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

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

Добавлено: Вс дек 16, 2012 20:49:42
Alexeyslav
Регистры X,Y,Z 16-битные. Большинство операций с использованием этих регистровых пар имеют возможность автоинкремента. Проблем быть не должно при последовательной обработке данных.

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

Добавлено: Вс дек 16, 2012 21:02:36
BOB51
Для обработки массивов в ОЗУ используются регистры базового адреса Zh:Zl, Yh:Yl, Xh:Xl.
Как и каким образом их модифицировать - на вкус программиста.
Можно также использовать индекс -указателем и указатель стека ... но ... ежли на данный момент запрещены прерывания и ограничено использование подпрограмм.

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

Добавлено: Вт дек 18, 2012 17:20:04
casus
Я хочу скопировать массив в ОЗУ
первая цифра массива - колво байт для копирования
в lbuf должно быть количество скопированных байт в озу, в X адрес 0-го байта
правильно ли я делаю?

у меня симулятор выдает странное предупреждение:
[PC = $0086, Time = 16.86 ms, {PER}]: USART: Parity selection bits combination UPM1=0, UPM0=1, reserved
на строчке st y+, r17

в X адрес выставляется 0x00C0
хотя озу 0x0200-
что не так?

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

.def lbuf = r24
.dseg
RAM:   .byte 256

..........

	clr lbuf
	ldi yh,high(ram*2)					
	ldi yl,low(ram*2)
	mov xl,yl							
	mov xh,yh

	ldi zh,High(Array*2)	
	ldi zl,Low(Array*2)
	lpm r16, Z+
initcps:
	cp r16,lbuf
	breq initcpe
	lpm r17,Z+
	st Y+, r17
	inc lbuf
	rjmp initcps
initcpe:
ret

Array:
.db 9,0x10,0x24,0x15,0x11,0x2F,0x98,0xC7,0x03,0xA5

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

Добавлено: Вт дек 18, 2012 17:52:35
Gudd-Head
симулятор выдает странное предупреждение
Ничего странного - вы залезли в область РВВ.
casus писал(а):в X адрес выставляется 0x00C0
хотя озу 0x0200
Так выставите вручную, если не можете нормально через определения.

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

   ldi yh,high(ram*2)               
   ldi yl,low(ram*2)
Зачем на 2 умножать? В ОЗУ побайтная адресация.

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

Добавлено: Вт дек 18, 2012 18:11:05
casus
В ручную все работает, но как мне компилятор заставить это делать?

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

Добавлено: Вт дек 18, 2012 18:21:06
BOB51
Если
"Array:
.db 9,0x10,0x24,0x15,0x11,0x2F,0x98,0xC7,0x03,0xA5"
то первым байтом массива будет не 0х09 а 0х10 ! (см. описание директивы .DB )

тестовый фрагмент лучше проработать автономно (без совместного с использованием USART участка)

у ram (если не используется внешний кристалл ) адресация без сдвига влево (прямой адрес в указателе) в отличии от ПЗУ программ - там требуется такое смещение... да и размещение того " ram " неведомо - ведь существуют также предопределенные имена и в подключаемом *def.ini файле...
самый удобный вариант:
.dseg
.org SRAM_START
и далее чего надобно (только если под конкретный МК с применением *def.ini)

" mov xl,yl
mov xh,yh " = movw xl,yl
:tea:

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

Добавлено: Вт дек 18, 2012 18:33:49
Gudd-Head
хотя озу 0x0200
Не могли бы вы пояснить что вы имели в виду (откуда эти числа)?
BOB51 писал(а):то первым байтом массива будет не 0х09 а 0х10 ! (см. описание директивы .DB )
Тогда уж не 0х10, а 0х0А это во-первых, а во-вторых, уважаемый, вы, кажется, путаете .DB c .BYTE :)))

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

Добавлено: Вт дек 18, 2012 18:44:33
BOB51
У топикстартера стояло 0x10 :)
чего касательно .DB - так сие есть истина... :cry: зато там же существует вторая директива "пословной" упаковки - .DW 8)

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

Добавлено: Вт дек 18, 2012 18:47:07
Gudd-Head
У ТС стояло 9 (число элементов массива), а затем и сам массив, первый член которого - 0х10 :)

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

Добавлено: Вт дек 18, 2012 18:56:58
BOB51
Вот и получится в ПЗУ в ячейке с именем Array
0x0910, а не ожидаемое 0x1009 8)
Да и вобщем .DB "ещё та" директивка :wink:

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

Добавлено: Вт дек 18, 2012 19:04:05
Gudd-Head
BOB51 писал(а):0x0910, а не ожидаемое 0x1009 8)
Не могу ничего сказать - надо гонять, а сейчас лень. В любом случае, у ТС проблемы с другим указателем :)

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

Добавлено: Вт дек 18, 2012 19:08:32
BOB51
Для работы с рисунками анимации частенько с массивами сталкиваться приходится, чего только не нацарапаеш :beer:

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

Добавлено: Ср янв 09, 2013 13:54:18
teist
пытаюсь оформить таблицу прерываний tiny2313a через .org ,а avr studio
ругается, говорит error: Overlap in .cseg: addr=0xd conflicts with 0xc:0xe
пока не добавил прерывание по Timer1_compB все было нормально.
Подскажите пжлст где ошибка. Вот этот кусок
;--------------- Òàáëèöà ïðåðûâàíèé -----------------------
.org 0x000
rjmp reset
.org 0x4
rjmp Timer1_compA
reti
.org 0xC
rjmp Timer1_compB
reti
.org 0xD
rjmp Timer0_compA
reti
.org 0x15

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

Добавлено: Ср янв 09, 2013 13:58:15
Gudd-Head
teist писал(а):Подскажите пжлст где ошибка.

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

.org 0xC
 rjmp Timer1_compB 
reti 
.org 0xD
Вы в 1 ячейку 2 команды пытаетесь запихнуть.

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

Добавлено: Ср янв 09, 2013 20:15:44
Alexeyslav
Не в одну а в соседние, вектор прерывания(у вас) занимает две ячейки, а вы пытаетесь во вторую ячейку предыдущего прерывания запихнуть следующее.

Вообще, лучше всего кусок с прерываниями скопировать из даташита и неиспользуемые заменить на RETI или NOP чтобы не поломать адресацию.
Кстати в таблице векторов после RJMP не надо ставить RETI - это надо делать в теле обработчика прерывания. После команды RJMP ничто и никогда не будет и не может быть выполнено! (не считая других переходов).

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

Добавлено: Ср янв 09, 2013 20:54:16
BOB51
Ничего выдумывать не надо -
открой диск, на котором размещена студио (в примере С и используется AvrAssembler2) :
C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes
там найди *def.inc файл соответствующкго мк, а в нем описание всех векторов прерываний.
:beer:

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

Добавлено: Ср янв 09, 2013 23:06:29
teist
BOB51 писал(а): там найди *def.inc файл соответствующкго мк, а в нем описание всех векторов прерываний.
:beer:
Я так и сделал но как раз против этого прерывания там пробел в комментах, может
это студия такая? :roll:
Собсно если сделать таблицу без .org то все проходит, и если не брать прерывание
T1_compB тоже все нормально с .org Cтудию я старую с инета взял 4.19 730

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

Добавлено: Ср янв 09, 2013 23:27:00
Alexeyslav
.ORG 0 Только один в начале таблицы прерываний. На каждый вектор - одна команда перехода или RETI если не используется. Что еще нужно?

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

Добавлено: Ср янв 09, 2013 23:30:55
teist
мк у меня tn2313а , а прерывание T1 compA дает секундные импульсы для часов.
Прерыванием T1_compB хочу сделать мигающую точку на часах, и разобраться с
.org тоже хочется. Сначала было так
;--------------- Òàáëèöà ïðåðûâàíèé -----------------------
.org 0x000
rjmp reset ;ñáðîñ
.org 0x4
rjmp Timer1_compA ;ñîâïàäåíèå Ò1 êàíàë À èñòî÷íèê ñåêóíä
.org 0xD
rjmp Timer0_compA ;ñîâïàäåíèå êàíàë À Ò0 äèíàìè÷åñêàÿ èíäèêàöèÿ
все работает, добавляю еще прерывание , точку сделать задумал
;--------------- Òàáëèöà ïðåðûâàíèé -----------------------
.org 0x000
rjmp reset ;ñáðîñ
.org 0x4
rjmp Timer1_compA ;ñîâïàäåíèå Ò1 êàíàë À èñòî÷íèê ñåêóíä

.org 0xC
rjmp Timer1_compB ;ìèãàþùàÿ (.) íà òàáëî ÷àñîâ
.org 0xD
rjmp Timer0_compA ;ñîâïàäåíèå êàíàë À Ò0 äèíàìè÷åñêàÿ èíäèêàöèÿ
и не работает. А то что я там reti добавлял ... это потом пытался запустить
и еще вопрос : в студии у меня нормальные комменты а тут крякозябры какие то?

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

Добавлено: Чт янв 10, 2013 06:20:25
BOB51
Путал-путал... Мняа...
С моего глаза как-то так:
teist_miau.txt
(4.31 КБ) 233 скачивания
Да и не забывать про соответствующие настройки таймера и режимов сравнения...
8)
P.S. Советую для написания исходников обзавестись бесплатным редактором DPAD дабы избавиться от "кракозябр" и необходимости всегда открывать студио!
... :shock: ... а авторский сайт с редактором пропал ... :dont_know: ...
Ладушки, ежли будет интересно, скину свою копию инсталятора DPAD и русифицированную справку по работе с ассемблером на e-mail ... :beer: