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

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

Добавлено: Ср мар 20, 2013 22:49:35
FUZZY_
Вопрос снят ошибка в железе

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

Добавлено: Чт мар 21, 2013 11:43:43
dr.doc
Вопрос следующий. Начал изучать Атмел контроллеры (вроде даже успешно). Написал несколько пробных программ, проверил их работу на макетке и вот - Микроконтроллер ATtiny2313 выводит на индикатор 1602 (по заданию) следующее: сначала 5 цифр адреса от 00032 (0x20) до 00255 (0xFF) следом пробел, а затем символ зашитый в индикатор. Так вот сразу после прошивки все работает очень четко, а стоит передернуть питание - вместо цифр х.з. что. Вывожу на светодиоды значение единиц - выводит то, что показывает индикатор. Вдобавок ко всему - адрес отображаемого знака инкрементируется, а "числа" порой просто "тикают" (инкремент - декремент). Подпрограмма преобразования BIN - BCD в Атмел студио 6 и протеусе работает на ура. Алгоритм преобразования переписал из PIC (у Корабельникова расписан хорошо). Регистры РОН перед преобразованием сохраняю в ОЗУ а потом восстанавливаю. Участок кода преобразования BIN-BCD привожу. Заранее благодарю

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

Добавлено: Чт мар 21, 2013 17:30:54
SmarTrunk
Может, что-то с цепью сброса? При программировании вывод RESET используется и управляется программатором, а дальше уже МК сам... Или добавить конденсаторов по питанию, керамических и электролитических.

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

Добавлено: Чт мар 21, 2013 20:38:06
dr.doc
Нет, тут дело именно в косвенной адресации. Я заменил группы команд ST X,Rd на ячейку ОЗУ и все стало работать как надо.

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

Добавлено: Чт мар 21, 2013 23:32:35
akkinak
Приветствую!
изучаю работу с шаговым двигателем на примере из книги Кравченко А.В. "10 практических устройств на AVR-микроконтроллерах"
открываю проэкт в AVRStudio , собираю, выдает ошибку:

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

.....Step_40.asm(17): error: syntax error, unexpected REGISTER, expecting SYMBOL or FUNCTION or REGDEF
номер строки и исходный файл прилагаю. никак не пойму где там ошибка?

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

Добавлено: Пт мар 22, 2013 00:06:11
Alexeyslav
ггг... потому что компилятор не ожидал такого подвоха, что ты попытаешься переопределить символ X который он использует как виртуальный регистр в командах с относительной адресацией. Не делай так больше.

Вот он и пишет что "unexpected REGISTER, expecting SYMBOL" = "неожиданный РЕГИСТР, ожидается символ(в смысле неделимое понятие) или функция"

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

Добавлено: Пт мар 22, 2013 00:14:52
akkinak
понятно, а какие еще символы зарезервированы за компилятором тиа "Х"?

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

Добавлено: Пт мар 22, 2013 00:34:20
Alexeyslav
Это несложно проверить. Букв в алфавите всего лишь 26, и некоторые из них ты уже опробовал.

Можно сразу сказать что X,Y,Z уже заняты.

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

Добавлено: Пт мар 22, 2013 07:21:45
BOB51
если пользоваться avrasm2 то для подобных ситуаций имеется директива undef
:tea:

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

Добавлено: Пт мар 22, 2013 07:37:52
Alexeyslav
Ей по силам отменить определение части команд? или например отменить R16 чтобы использовать его в качестве имени другой переменной или в качестве метки?

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

Добавлено: Пт мар 22, 2013 07:56:51
BOB51
Переопределение того, что ранее определено директивами def.
А Z,X и Y как раз так и определены в *def.inc файле:
; ***** CPU REGISTER DEFINITIONS *****************************************
.def XH = r27
.def XL = r26
.def YH = r29
.def YL = r28
.def ZH = r31
.def ZL = r30
:beer:
Т.е. если мне хочется обозвать какой-либо из регистров r31-r26 собственным именем нужно предварительно отменить заранее заданное (речь не идет о специменах зарезервированных для компилятора) - просто по другому присвоить любое произвольное имя (даже правильное) для этих регистров не удастся.

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

Добавлено: Пт мар 22, 2013 08:14:06
Alexeyslav
вижу только XL и XH но не X.
X, Y, Z являются неотъемлемыми частями некоторых команд!!! и рассматриваются компилятором наравне с регистрами.

Если переопределить Z, как можно будет использовать команду LPM R16, Z+ или LD R16, Z

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

Добавлено: Пт мар 22, 2013 14:16:20
Gudd-Head
Храню во флэше шрифт, по 5 байт на цифру (букву).
Хотел писать по 5 байт в строке

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

numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110; 0
		   .DB 0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000; 1
Но так из-за двухбайтной адресации занимает 12 байт, а не 10. И идёт не подряд.
А на такое

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

numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,;0 
	          0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000; 1
Студия ругается. Не хочется писать по 10 байт в одной строке — очень длинно и нечитабельно получается.
Есть ли какое-то решение проблемы?

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

Добавлено: Пт мар 22, 2013 14:35:00
ibiza11
прошу прощения. неправильно ответил. есть решение.
Line continuation
Like in C, source lines can be continued by means of having a backslash (\) as the last character of a line. This is particularly useful when defining long preprocessor macros, and for long .db directives.

Example

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

.db 0, 1, "This is a long string", '\n', 0, 2, \
    "Here is another one", '\n', 0, 3, 0

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

Добавлено: Пт мар 22, 2013 14:42:57
Gudd-Head
ibiza11 писал(а):есть решение
Ты ж ёбт :shock:
Правда, придётся немного похимичить с комментами :)))

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

numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,/*0*/\
			    0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000,/*1*/\

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

Добавлено: Пт мар 22, 2013 14:46:53
ibiza11
комментарий можно и после бэкслеша поставить

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

Добавлено: Пт мар 22, 2013 14:50:43
Gudd-Head
Не-не-не, Дэвид Блейн
backslash (\) as the last character of a line
Студия ругается, бэкслэш должен быть реально последним в строке.

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

Добавлено: Пт мар 22, 2013 14:55:16
ibiza11
:) век живи - век учись!) не знал :)

Re: Мелкие вопросы по теории

Добавлено: Чт апр 04, 2013 10:16:35
Мikа
Парни, подскажите, плз, в строчке, выделенной жирным, add - это опечатка, или это так надо?
ldi Temp,0 ;инициализация регистра
;внутренней адресации массива

ReadArray:
ldi ZH,High(MyArray*2) ;загрузка адреса 0-го
ldi ZL,Low(MyArray*2) ;элемента в рег. пару Z

ldi Temp1,0
add ZL,Temp ;прибавление
adc ZH,Temp1 ;внутр. адреса


lpm ;загрузка из ПЗУ

mov Temp1,R0 ;копирование
out PortB,Temp1 ;вывод в порт
inc Temp ;увелич. внутр. адреса
rjmp ReadArray ;в начало цикла

MyArray:
.db 12,16,3,4,10,17,255,37,158,14,13,98
.db 14,85,30,9,145,52,64,49,119,72,209,46
Взято здесь

Re: Мелкие вопросы по теории

Добавлено: Чт апр 04, 2013 10:26:04
Gudd-Head
Так надо. Младший байт прибавляется без учёта переноса (add), старший (после младшего!) — с учётом переноса (adc).