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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Seriyvolk
Друг Кота
Сообщения: 4961
Зарегистрирован: Сб май 05, 2012 20:19:55
Откуда: Минск

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

Сообщение Seriyvolk »

Engineer_Keen писал(а):Смотря какие
Ну вот и здорово! Что и желал узнать! :beer:
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Реклама
Аватара пользователя
rnd.gen
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт май 27, 2011 10:46:45

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

Сообщение rnd.gen »

Дорогие "Коты". Поделитесь пожалуйста тем, кто как формирует задержки в асме при подключении lcd (wh0802a). А то без этого не хочет запускаться индикатор. И как правильно их рассчитывать?
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

на асме задержки делают тупыми циклами:

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

          DELAY:DEC R16 ;(1 такт * количество проходов)
          BRNE DELAY      ;(2 такта по количеству проходов-1 + еще один такт)
          RET                   ;(4 такта)
вызов:

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

          LDI R16,100 (100 - задержка в условных единицах (количество проходов цикла)
          RCALL DELAY
Если задержка нужна длиннее, вставляют вложенные циклы.
Величина задержки считается по количеству тактов (1 такт = 1/Fclk).
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Или через прерывания по времени, тиками.
Docendo discimus
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
rnd.gen
Первый раз сказал Мяу!
Сообщения: 21
Зарегистрирован: Пт май 27, 2011 10:46:45

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

Сообщение rnd.gen »

Вот, надыбал еще инфу если кому интересно:
http://cxem.net/mc/mc89.php
И таймеры как-то жалко использовать, так как они будут для другой цели включены :(.
Наверное придется подключать к ноге вывод RW и читать бит готовности BF что опять таки не удобно :(.
Реклама
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Верно, таймерами через прерывания очень удобно, особенно если нужно много различных программных таймеров и задержек с кратными интервалами. Но это немного сложнее для новичков, нужно настраивать таймер, писать процедуру прерывания и как-то организовывать задание интервалов (если задержка одна, то просто настройкой OCR, а если много, то это кучка счетчиков и флагов состояния в памяти).

По ссылке тоже таймер используется, но тупо как счетчик, без прерываний, так конечно тоже можно, но не интересно...
Реклама
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Почему с таймерами ,таймер один на все задержки - FREE TIMER
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

Ну я и имел ввиду один, просто выразился более общей фразой...
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

любой код операции занимает 4 бита ?
Tell Me The Truth
Аватара пользователя
pyzhman
Друг Кота
Сообщения: 7016
Зарегистрирован: Вс июл 12, 2009 19:15:29
Откуда: Ижевск
Контактная информация:

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

Сообщение pyzhman »

Docendo discimus
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

спасибо...., но мне не понятно почему код операции имеет разную длину ?
с чем это связано ?
допустим, если мы имеем в системе команд AVR всего 64 разные операции....., то для их кодирования нам понадобится всего 6 бит
Tell Me The Truth
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

И десять останется для параметров? А этого хватит?
Для разных операций нужны разные параметры. Сами посудите: для копирования регистров (MOV) нужно 2 адреса по 5 бит, остается 6 бит на сам код, а для загрузки константы (LDI) нужно 4 бита (верхние R16-R31) и 8 бит константы - для кода остается 4 бита, и т.д.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Engineer_Keen, насколько я в курсе то инструкция может заниматьне не только одно но и два слова
и если наши 64 операции ми кодируем 6 битами то в случае нехватки мы можем использовать 2 слова
или я в чем-то заблуждаюсь ?
Tell Me The Truth
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

FreshMan писал(а):мы можем использовать 2 слова
Можем конечно, например CALL/JMP, но вот в чем беда 2х словные команды занимают больше памяти и считываются в 2 раза дольше. Не знаю как это кратко объяснить, может чем-то поможет эта статья... Смысл в том, чтобы максимум команд, которые используются чаще всего закодировать минимумом бит (в данном случае 16-ю или 32-я). Так вот, если для решения того, будет ли команды 16 или 32 разрядная, использовать 1 бит, то для всех возможных сочетаний команд и операторов остается 15 бит, 32768, вроде много, но если посмотреть все коды операций AVR станет понятно что это предел, сюда не поместились даже так необходимые на первый взгляд операции с константой для младших регистров. Но зато они все выполняются за 1 такт (не считая умножения и переходов) и занимают одно слово, а для редко используемых CALL/JMP не жалко и 2 слов.
Для одной только LDI R15,XX пришлось бы задействовать 256 кодов, если пихать ее в однословные команды.
Можно было запихнуть в 2-словные команды не 2 а 4 команды, но большого толку от этого не было бы, а увеличение таких команд в 2 раза 1) уменьшает адресное пространство CALL/JMP в 2 раза 1) делает эти команды в 2 раза медленнее и длиннее. Вы готовы ради универсальности команд заплатить быстродействием в 2 раза?
Чтобы определить сколько команд должно быть 2х словными достаточно статистически посчитать количество используемых команд в программах и построить дерево кодирования Хаффмана, предполагаю что пути до команд CALL/JMP были самые длинные, а остальные гораздо короче, поэтому их оставили 2-словными.
Ну и не стоит забывать тот факт, что в младших AVR-ках 2-словных команд вообще нет!

FreshMan, вы лезите в глубокие дебри процессорной архитектуры, я понимаю что это интересно, но чтобы ответить приходится писать посты на пол-страницы. Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
Аватара пользователя
coredumped
Опытный кот
Сообщения: 838
Зарегистрирован: Вт апр 12, 2011 18:38:19
Откуда: с Земли

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

Сообщение coredumped »

Engineer_Keen писал(а):Если так интересно, лучше найдите какой-нибудь ресурс по устройству микропроцессорных систем.
Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не куда :)
Все будет только лучше, в крайнем случае - хуже.
Аватара пользователя
Kavka
Мудрый кот
Сообщения: 1810
Зарегистрирован: Чт июн 10, 2010 08:55:35
Откуда: Сибирские Афины

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

Сообщение Kavka »

FreshMan, если не знакомы, то ознакомьтесь с материалами дающими представление о ключевых идеях CISC и RISC архитектур процессоров. Если знакомы, то перечитайте и подумайте. Надеюсь, что вопросы отпадут сами собой...
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

coredumped писал(а):Вот ядро AVR в исходниках http://opencores.org/project,avr_core Глубже копать уже не куда :)
Данный путь мною указан уже был однажды... :)))
Ну кстати не факт что эти именно то, что находится внутри AVRок, просто идентичная функциональность, ведь способов сделать одно и тоже разными методами множество :)
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Engineer_Keen писал(а):FreshMan, вы лезите в глубокие дебри процессорной архитектуры,
прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросы :oops:
с вашего разрешения задам вопросы по проще
1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная :)
2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI :))
Tell Me The Truth
Аватара пользователя
Engineer_Keen
Друг Кота
Сообщения: 3870
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

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

Сообщение Engineer_Keen »

FreshMan писал(а):прошу прощения что ткнул свой нос куда не следует........, осознаю что моего багажа знаний еще не достаточно дабы поднимать подобные вопросы :oops:
Уж лучше совать нос в контроллер, чем например, в бутылку с водкой :wink:
FreshMan писал(а):1) где бы посмотреть принципиальную схему ядра AVR ? а то в даташитах только структурная :)
Так вам производитель ее и открыл, ага :))) Можете как уже сказано выше залезть на OPENCores, и скачать оттуда проект для ПЛИС, но вам придется немного освоить Quartus (или другую среду для разработки систем на ПЛИС)
FreshMan писал(а):2)разрядность МК определяется разрядностью его шиной данных или АЛУ ?
Вроде обычно эти размерности одинаковые...
FreshMan писал(а):3)почему нету единого стандарта в языке ассемблер ? к примеру, мне приходилось смотреть прогу написанную на асме для контроллера фирмы сименс ......, так там L - это аналог LDI, а Т - это аналог OUT
почему все это дело не стандартизировано......, чтобы LDI был и в Африке LDI :))
Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

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

Сообщение FreshMan »

Engineer_Keen писал(а):Так вам производитель ее и открыл, ага
а че боятся то ? если технология, схема, запатентована то пускай выложат ее на всеобщее обозрение....., пущай народ полюбуется....., а может они боятся того что разузнаю что и атмел не чиста наруку и скопипастила свою схему ? :))
короче выходит что там все шито, крыто :tea:
1) у нас МК 8 разрядный, а длина машинного слова равна 2 байтам......, получается какая то неувязочка....., вы тут постом выше говорили о быстродейсьтвии....., так вот выходит чтоб достичь максимальной быстродействии надо чтобы длина машинного слова соответствовала разрядности МК, тогда за один такт МК будет полностью все переваривать...., у атмела в этом плане маленькое несоответствие......., странно как то :roll:
Engineer_Keen писал(а):Потому мы говорим по русски, а англичане по английски, так получилось исторически, ну и просто особенности ассемблеров такие, что иногда бывает удобнее команду обозвать по своему.
зачем же тогда человечество придумало всевозможные стандарты когда их не придерживаются ?
выходит если я завтра создам контору под названием рога да копыта которая будет штамповвать МК под названием кошачий хвост......., мы напишем свой компилятор....., перековеркаем название команд из асма, но их функцию оставим, то это все-равно будет асм только в ином виде........, зачем тогда стандарты то и что тогда понимать под ассемблером ? :dont_know:
Tell Me The Truth
Ответить

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