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

Обсуждаем контроллеры компании Atmel.
FUZZY_
Потрогал лапой паяльник
Сообщения: 390
Зарегистрирован: Чт сен 24, 2009 17:22:51
Откуда: UK

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

Сообщение FUZZY_ »

Вопрос снят ошибка в железе
Реклама
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

Сообщение dr.doc »

Вопрос следующий. Начал изучать Атмел контроллеры (вроде даже успешно). Написал несколько пробных программ, проверил их работу на макетке и вот - Микроконтроллер ATtiny2313 выводит на индикатор 1602 (по заданию) следующее: сначала 5 цифр адреса от 00032 (0x20) до 00255 (0xFF) следом пробел, а затем символ зашитый в индикатор. Так вот сразу после прошивки все работает очень четко, а стоит передернуть питание - вместо цифр х.з. что. Вывожу на светодиоды значение единиц - выводит то, что показывает индикатор. Вдобавок ко всему - адрес отображаемого знака инкрементируется, а "числа" порой просто "тикают" (инкремент - декремент). Подпрограмма преобразования BIN - BCD в Атмел студио 6 и протеусе работает на ура. Алгоритм преобразования переписал из PIC (у Корабельникова расписан хорошо). Регистры РОН перед преобразованием сохраняю в ОЗУ а потом восстанавливаю. Участок кода преобразования BIN-BCD привожу. Заранее благодарю
Вложения
Полный код.asm
(12.2 КБ) 531 скачивание
BIN-BCD.asm
(3.92 КБ) 370 скачиваний
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
SmarTrunk
Друг Кота
Сообщения: 6014
Зарегистрирован: Чт ноя 26, 2009 11:16:50
Откуда: Москва

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

Сообщение SmarTrunk »

Может, что-то с цепью сброса? При программировании вывод RESET используется и управляется программатором, а дальше уже МК сам... Или добавить конденсаторов по питанию, керамических и электролитических.
Аватара пользователя
dr.doc
Это не хвост, это антенна
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

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

Сообщение dr.doc »

Нет, тут дело именно в косвенной адресации. Я заменил группы команд ST X,Rd на ячейку ОЗУ и все стало работать как надо.
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
akkinak
Встал на лапы
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

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

Сообщение akkinak »

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

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

.....Step_40.asm(17): error: syntax error, unexpected REGISTER, expecting SYMBOL or FUNCTION or REGDEF

номер строки и исходный файл прилагаю. никак не пойму где там ошибка?
Вложения
Step_40.asm
(7.48 КБ) 527 скачиваний
2013-03-21_2210233.png
(8.51 КБ) 398 скачиваний
Реклама
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

ггг... потому что компилятор не ожидал такого подвоха, что ты попытаешься переопределить символ X который он использует как виртуальный регистр в командах с относительной адресацией. Не делай так больше.

Вот он и пишет что "unexpected REGISTER, expecting SYMBOL" = "неожиданный РЕГИСТР, ожидается символ(в смысле неделимое понятие) или функция"
Реклама
Аватара пользователя
akkinak
Встал на лапы
Сообщения: 107
Зарегистрирован: Чт июл 17, 2008 16:21:32

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

Сообщение akkinak »

понятно, а какие еще символы зарезервированы за компилятором тиа "Х"?
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Это несложно проверить. Букв в алфавите всего лишь 26, и некоторые из них ты уже опробовал.

Можно сразу сказать что X,Y,Z уже заняты.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

если пользоваться avrasm2 то для подобных ситуаций имеется директива undef
:tea:
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Ей по силам отменить определение части команд? или например отменить R16 чтобы использовать его в качестве имени другой переменной или в качестве метки?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15556
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение 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 собственным именем нужно предварительно отменить заранее заданное (речь не идет о специменах зарезервированных для компилятора) - просто по другому присвоить любое произвольное имя (даже правильное) для этих регистров не удастся.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

вижу только XL и XH но не X.
X, Y, Z являются неотъемлемыми частями некоторых команд!!! и рассматриваются компилятором наравне с регистрами.

Если переопределить Z, как можно будет использовать команду LPM R16, Z+ или LD R16, Z
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение 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 байт в одной строке — очень длинно и нечитабельно получается.
Есть ли какое-то решение проблемы?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение 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
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

ibiza11 писал(а):есть решение

Ты ж ёбт :shock:
Правда, придётся немного похимичить с комментами :)))

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

numbers: .DB 0b00111110, 0b01010001, 0b01001001, 0b01000101, 0b00111110,/*0*/\
             0b00000000, 0b01000010, 0b01111111, 0b01000000, 0b00000000,/*1*/\
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

комментарий можно и после бэкслеша поставить
Ставим плюсы: )
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Не-не-не, Дэвид Блейн
backslash (\) as the last character of a line

Студия ругается, бэкслэш должен быть реально последним в строке.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

:) век живи - век учись!) не знал :)
Ставим плюсы: )
Аватара пользователя
Мikа
Потрогал лапой паяльник
Сообщения: 343
Зарегистрирован: Пн апр 01, 2013 15:13:40
Откуда: Москва

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

Сообщение М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


Взято здесь
Почему я здесь и задаю тупые вопросы?
Потому что хочу научиться.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

Так надо. Младший байт прибавляется без учёта переноса (add), старший (после младшего!) — с учётом переноса (adc).
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Ответить

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