Ассемблер (ASM) для AVR в вопросах и ответах
-
hammer2000
- Родился
- Сообщения: 12
- Зарегистрирован: Сб ноя 26, 2011 15:13:05
- Откуда: комсомольск-на-амуре
Re: Ассемблер (ASM) для AVR в вопросах и ответах
спасибо большое за внимание. Просто, как то поскромничал, думал поменьше написать, чтоб места не занимать в посте. Но в данном случае понял- не получится:)
К тому же вопрос не совсем по ассемблеру наверно, а больше по протеусу.
Начало проблемы: решил в протеусе собрать схемку http://www.ua4nx.qrz.ru/lcd.htm.
Началось все с того, что при симуляции нарисованной схемы по программе http://www.ua4nx.qrz.ru/fail/LCD.zip
сначала ошибка в логе.(рис1). Это касалось строчки .def z =r19; Ограничение времени приема 40 битов.
Переменной Z я в программе не нашел, и я ее забил ";" после чего лог протеуса был без ошибок, но почему-то вывод 8 контроллера находился в 3-ем состоянии и соответственно индикация не работала. Решил может глюк какой в модели конкретного контроллера решил попробовать на другом контроллере(другой модели).
Включил AT90S2313 на той же программе, только изменил .DEVICE. При этой симуляции тоже индикации нет и появляется лог (рис.2)
Сделал вывод, что в данном случае проблема в стеке и попытался добавить туда строчки:
.def temp =r24 регистр 24 вроде нигде не используется в программе.
ldi temp, Ramend ;
out spl,temp
При попытке симуляции появляется лог (рис.3)
Кстати to GP1:заменил spl на sp - пропала ошибка "неопределенный символ" напротив этой строчки. Лог стал (рис.4) и кстати как подключить *.inc файл? потому что слабо представляю где его искать:(
напоследок попробовал с Attiny2313 той же программой (без строчек про стек, но .DEVICE поправил) индикация появилась, но кривоватая и судя по описаниям на контроллеры - там придется программку доработать(разные биты в регистрах таймера и прерывания разные....
К тому же вопрос не совсем по ассемблеру наверно, а больше по протеусу.
Начало проблемы: решил в протеусе собрать схемку http://www.ua4nx.qrz.ru/lcd.htm.
Началось все с того, что при симуляции нарисованной схемы по программе http://www.ua4nx.qrz.ru/fail/LCD.zip
сначала ошибка в логе.(рис1). Это касалось строчки .def z =r19; Ограничение времени приема 40 битов.
Переменной Z я в программе не нашел, и я ее забил ";" после чего лог протеуса был без ошибок, но почему-то вывод 8 контроллера находился в 3-ем состоянии и соответственно индикация не работала. Решил может глюк какой в модели конкретного контроллера решил попробовать на другом контроллере(другой модели).
Включил AT90S2313 на той же программе, только изменил .DEVICE. При этой симуляции тоже индикации нет и появляется лог (рис.2)
Сделал вывод, что в данном случае проблема в стеке и попытался добавить туда строчки:
.def temp =r24 регистр 24 вроде нигде не используется в программе.
ldi temp, Ramend ;
out spl,temp
При попытке симуляции появляется лог (рис.3)
Кстати to GP1:заменил spl на sp - пропала ошибка "неопределенный символ" напротив этой строчки. Лог стал (рис.4) и кстати как подключить *.inc файл? потому что слабо представляю где его искать:(
напоследок попробовал с Attiny2313 той же программой (без строчек про стек, но .DEVICE поправил) индикация появилась, но кривоватая и судя по описаниям на контроллеры - там придется программку доработать(разные биты в регистрах таймера и прерывания разные....
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это касалось строчки .def z =r19; Ограничение времени приема 40 битов.
Ошибка потому, что идентификаторами X, Y и Z обозначают последние 6 регистров, образующие регистровые пары XH:XL, YH:YL и ZH:ZL. Так же к ним можно обращаться как R27:R26, R29:R28 и R31:R30 соответственно. Ну или по отдельности.
Поэтому на попытку еще раз задефайнить Z он заругался.
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
hammer2000 писал(а):...кстати как подключить *.inc файл? потому что слабо представляю где его искать:(
...
файлы описания идут в комплекте с AVRStudio пути к ним прописаны в системе, так что необходимо в нужном месте исходника вставить строку:
.include <имя def-файла>
именуются эти файлы примерно так:
m48def.inc
tn13def.inc и т.п.
описание камня вставляют в самом начале исходника, обычно сразу после директивы
.device
шпрота не юзаю из-за его глючности

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Я, например, использую gavrasm, там не надо inc'и таскать, просто пишешь .device ATmega48 - и вперёд.
-
hammer2000
- Родился
- Сообщения: 12
- Зарегистрирован: Сб ноя 26, 2011 15:13:05
- Откуда: комсомольск-на-амуре
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Попробовал gavrasm. tavrasm вообще под win не нашел....грустно как-то стало:( от разнообразия или бардака...как назвать:) мало того что контроллеры все разные по прерываниям, флагам и т.д. Так еще и компиляторы отличаются...те файлы, которые во встроенном в протеус компиляторе avrasm вопросов не вызывали, gavrasm забраковал(исходник и файл с ошибками в приложении)
wavrasm кстати не ругается на .def z =r19 (про эту запись в исходнике в прошлом посте упоминал). Выходит, что делая программу, нужно вместе с программой еще указывать чем прошивку компилировали:(а если пргу не проверить на реальной железке, то не факт что работать будет....
AVRstudio пробовал, но там схемы нет, только порты регистры и все такое. VMLAB тоже пробовал. Но протеус интереснее, тем что наглядно можно работу всей схемы проследить....
Насчет SP вместо SPL - понятно. А что вместо Ramend? 0xDF указать? вроде там по описанию конец ОЗУ для AT90s2313
wavrasm кстати не ругается на .def z =r19 (про эту запись в исходнике в прошлом посте упоминал). Выходит, что делая программу, нужно вместе с программой еще указывать чем прошивку компилировали:(а если пргу не проверить на реальной железке, то не факт что работать будет....
AVRstudio пробовал, но там схемы нет, только порты регистры и все такое. VMLAB тоже пробовал. Но протеус интереснее, тем что наглядно можно работу всей схемы проследить....
Насчет SP вместо SPL - понятно. А что вместо Ramend? 0xDF указать? вроде там по описанию конец ОЗУ для AT90s2313
- Вложения
-
- lcd.zip
- (2.86 КБ) 152 скачивания
- GP1
- Поставщик валерьянки для Кота
- Сообщения: 2401
- Зарегистрирован: Пт май 23, 2008 19:32:22
- Откуда: Россия, Волгоград
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
как по мне, так ничего лучше чем Студия для АВРок нет, в любом случае окончательная отладка происходит в железе, ни один симулятор не дает 100% результатов работоспособности устройства.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
hammer2000 ассемблер, по сути, стандартизирован, и код можно перекомпилить практически без переделок. За исключением мелких нюансов, типа указания контроллера inc-файлами, напрямую, или по другому.
Касаемо вашей проблемы с gavrasm, смотрите внимательней на ошибку:
SREG - это имя статусного регистра, а вы пытаетесь обозвать так еще R5.
Как по вашему будет выглядеть код: IN R5, SREG? Будет IN SREG, SREG. Теперь попробуйте на месте компилятора разобраться, что куда...
Ничего. Если правильно указали контроллер, вместо этой константы будет конец ОЗУ.
Касаемо вашей проблемы с gavrasm, смотрите внимательней на ошибку:
Код: Выделить всё
Name (SREG) already in use for a constant or variableSREG - это имя статусного регистра, а вы пытаетесь обозвать так еще R5.
Как по вашему будет выглядеть код: IN R5, SREG? Будет IN SREG, SREG. Теперь попробуйте на месте компилятора разобраться, что куда...
А что вместо Ramend
Ничего. Если правильно указали контроллер, вместо этой константы будет конец ОЗУ.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Посмотрел бегло ваш код. Не знаю, кто/как/где это писал, но во-первых все идентификаторы портов ввода-вывода заданы числовыми значениями (по сути допускается такое, но мозг взорвётся), во-вторых код корявый (достаточно взглянуть на подпрограмму decod).
Такое ощущение, что Сишный (или другого ЯВУ) вывод компилятора переписали под ассемблер.
Такое ощущение, что Сишный (или другого ЯВУ) вывод компилятора переписали под ассемблер.
-
hammer2000
- Родился
- Сообщения: 12
- Зарегистрирован: Сб ноя 26, 2011 15:13:05
- Откуда: комсомольск-на-амуре
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да я видел ошибки:( Самое интересное, программа-то не моя....а скаченная по ссылке (смотри мой пост от 29.11.11) и вроде как должна быть рабочей.... там не одна статья у человека написана. в общем "не верь глазам своим"
А вместо ramend не хочет ни avrasm, ни в vmlab конец ОЗУ подставлять:(
поставлю еще студию:)поэкспериментируем....
To ploop: Я хоть и начинающий, но тоже показалось странным, что порты ввода-вывода заданы адресными значениями... не наглядно как-то:(
в общем попробуем вместе с самообучением творчески переработать программку;)
А вместо ramend не хочет ни avrasm, ни в vmlab конец ОЗУ подставлять:(
поставлю еще студию:)поэкспериментируем....
To ploop: Я хоть и начинающий, но тоже показалось странным, что порты ввода-вывода заданы адресными значениями... не наглядно как-то:(
в общем попробуем вместе с самообучением творчески переработать программку;)
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Согласен с ploop'ом насчет переделки Сишного кода в асмовский, очень даже смахивает. Сказать-то что хотел: простая замена 1200 на 2313 не канает, у первого стек железный. Да и еще наверняка есть разница, лень смотреть.
Docendo discimus
-
hammer2000
- Родился
- Сообщения: 12
- Зарегистрирован: Сб ноя 26, 2011 15:13:05
- Откуда: комсомольск-на-амуре
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Подскажите исходя из приложенного скрина, я правильно понимаю, что в программе для at90s2313 вместо "Ramend" я могу написать 0xdf ? Если нет, то какой адрес тогда должен быть?
- Вложения
-
- 1.jpg
- (91.93 КБ) 310 скачиваний
- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
hammer2000 писал(а):в программе для at90s2313 вместо "Ramend" я могу написать 0xdf ?
Да.
А вообще, не мучайтесь с цифрами, вот файл со всеми определениями для at90s2313. Подключите его как GP1 написал.
- Вложения
-
- 2313def.zip
- (3.62 КБ) 168 скачиваний
Последний раз редактировалось Engineer_Keen Ср ноя 30, 2011 09:21:38, всего редактировалось 1 раз.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
вместо "Ramend" я могу написать 0xdf
Да, можно.
Вообще, суть в том, что если пытаться использовать чужой ассемблеровский код в своей программе, то нужно на 100% знать, как он работает, т.е. уметь легко написать его самому, смысл брать чужой сводится только к экономии времени. Разумеется, если программа сложнее мигания светодиодом.
Это не Си, где цепанул библиотеку, а что там внутри - плевать. Регистры, прерывания, тайминги, всё должно быть под контролем. Зато он даёт большие преимущества в скорости и объёме кода. Слышал, на 2313 реализовывали такие вещи, где модные ардуины зашивались...
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
У кого-нибудь есть пример кода реализации Линейно Рекуррентного Регистра (ЛРР) для АВР? Я в небольшом ступоре: вместо последовательности максимальной длины 2^N-1 = 255 у меня получается... 217!
Ладно бы 127, а тут вообще какое-то странное число.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Линейно Рекуррентного Регистра
о_О
Гуглить пришлось, чтоб узнать, хоть что это такое. Наткнулся на подробное описание, может пригодится... http://dxdy.ru/topic9474.html
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ploop писал(а):Гуглить пришлось, чтоб узнать, хоть что это такое.
Ну, тогда можно было и не отвечать. Естессно, я обгуглил всё что можно. В теории всё красиво, а на практике...
Идея была реализовать простой и компактный генератор псевдослучайной последовательности. Последовательность получилась, но она короткая и не охватывает все 255 значений
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- pyzhman
- Друг Кота
- Сообщения: 7016
- Зарегистрирован: Вс июл 12, 2009 19:15:29
- Откуда: Ижевск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Дык ведь этож генератор псвевдослучайных битов, но никак не чисел. Теорию подучить-с.
Docendo discimus
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Gudd-Head, может проще аппаратный задействовать? В виде АЦП например...
Хотя алгоритм пригодился бы, если сделаешь, надеюсь, поделишься?
Хотя алгоритм пригодился бы, если сделаешь, надеюсь, поделишься?

- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
pyzh_man писал(а):Дык ведь этож генератор псвевдослучайных битов, но никак не чисел. Теорию подучить-с.
Ну дык, раз у меня последовательность байтов в регистре длины 217, то и последовательность битов на конце этого регитсра никак не может быть длинее. Не?
ploop писал(а):может проще аппаратный задействовать? В виде АЦП например...
Хотя алгоритм пригодился бы, если сделаешь, надеюсь, поделишься?
Не, не проще)
Алгоритм элементарный, 8 строчек кода... правда, работает на 85%
Естессно поделюсь, я это для статейки задумал.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
