Ассемблер (ASM) для AVR в вопросах и ответах
- Zwanzig
- Нашел транзистор. Понюхал.
- Сообщения: 190
- Зарегистрирован: Вт янв 26, 2010 21:49:41
- Откуда: モスクワ
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Serhio, такой команды в AVRASM вообще нет. Скорее всего, sbi 0x27, 3. Очевидно адресация прямая.
- Реклама
<!-- Yandex.RTB R-A-62247-3 -->
<div id="yandex_rtb_R-A-62247-3"></div>
<script type="text/javascript">
(function(w, d, n, s, t) {
w[n] = w[n] || [];
w[n].push(function() {
Ya.Context.AdvManager.render({
blockId: "R-A-62247-3",
renderTo: "yandex_rtb_R-A-62247-3",
async: true
});
});
t = d.getElementsByTagName("script")[0];
s = d.createElement("script");
s.type = "text/javascript";
s.src = "//an.yandex.ru/system/context.js";
s.async = true;
t.parentNode.insertBefore(s, t);
})(this, this.document, "yandexContextAsyncCallbacks");
</script>
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Serhio писал(а):Подскажите пожалуйста: SETB P1.3; (P1)=27H; (PC)=127H
Команда производит запись 1 в бит. Какая используется адресация для операнда-источника и операнда-приемника? и что чему будет равно?
Непосредственная(прямая). Это команда для 51 семейства.
C0FFEE=12648430
- Реклама
гостевая2
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вот столкнулся с одной проблемой.
Есть код для управления дисплеем, но суть не в этом. В этом коде я использую C-шные команды препроцессора для определения всяких параметров. И вот проблема.
Например есть объявление:
#define size_x 12
Задача: Записать это число в символьном виде в flash, т. е. после развёртывания в коде должна получиться такая конструкция:
.db "12",0
Как сделать?
.db "size_x",0 не катит.
Была идея создать макрос вида
#define _s(a) #a
а затем
.db _s(size_x),0
но не тут-то было - макрос _s() не обрабатывает препроцессором параметр a перед закавычинием, т.е. в результате после развёртывания получается вс ё тот же
.db "size_x",0
Есть код для управления дисплеем, но суть не в этом. В этом коде я использую C-шные команды препроцессора для определения всяких параметров. И вот проблема.
Например есть объявление:
#define size_x 12
Задача: Записать это число в символьном виде в flash, т. е. после развёртывания в коде должна получиться такая конструкция:
.db "12",0
Как сделать?
.db "size_x",0 не катит.
Была идея создать макрос вида
#define _s(a) #a
а затем
.db _s(size_x),0
но не тут-то было - макрос _s() не обрабатывает препроцессором параметр a перед закавычинием, т.е. в результате после развёртывания получается вс ё тот же
.db "size_x",0
- coredumped
- Опытный кот
- Сообщения: 838
- Зарегистрирован: Вт апр 12, 2011 18:38:19
- Откуда: с Земли
Re: Ассемблер (ASM) для AVR в вопросах и ответах
IfoR писал(а):#define size_x 12
Задача: Записать это число в символьном виде в flash, т. е. после развёртывания в коде должна получиться такая конструкция:
.db "12",0
Как сделать?
Например, так
.db size_x/10+0x30, size_x%10+0x30, 0
Ку?
Все будет только лучше, в крайнем случае - хуже.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Это постоянно то там, то сям пробегает. Нужна двойная проброска.
В результате первого разворачивания из _s(size_x) будет получено __s(12), а уже оно даст нужную строку.
Код: Выделить всё
#define size_x 12
#define __s(a) #a
#define _s(a) __s(a)
.db _s(size_x),0В результате первого разворачивания из _s(size_x) будет получено __s(12), а уже оно даст нужную строку.
Лень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Реклама
гостеваая 3
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
coredumped, ну, ф-фпринципе то можно с учётом текущих обстоятельств...
avreal, спасибо! Не догадался.
avreal, спасибо! Не догадался.
- IfoR
- Поставщик валерьянки для Кота
- Сообщения: 2029
- Зарегистрирован: Сб ноя 15, 2008 10:09:56
- Откуда: г. Тула
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ньда, только сейчас проверил: двойная проброска не помогает. Получается тоже самое. 
В общем пока сделал как coredumped сказал с дополнительными костылями.
В общем пока сделал как coredumped сказал с дополнительными костылями.
- avreal
- Опытный кот
- Сообщения: 842
- Зарегистрирован: Чт дек 31, 2009 19:27:45
- Откуда: Бровари, Україна
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Ну что тут сказать... Значит, в используемом Вами ассемблере С-шный препроцессор поддержан формально. Как бы и обрабатывает макросы, но по упрощённой технологии.
avr-gcc -Wa,-alm=tst.lst -c tst.S
cat tst.lst
Код: Выделить всё
#define STR_(a) #a
#define STR(a) STR_(a)
#define size_x 12
.text
.asciz STR(size_x)
.asciz STR_(size_x)
.endcat tst.lst
Код: Выделить всё
GAS LISTING /tmp/ccaOIlQd.s page 1
1 # 1 "tst.S"
1
0
0
2 #define STR_(a) #a
3 #define STR(a) STR_(a)
4
5 #define size_x 12
6
7 .text
8 0000 3132 00 .asciz STR(size_x)
9 0003 7369 7A65 .asciz STR_(size_x)
9 5F78 00
10
11 .endЛень в виде мании величия: «ты гений, зачем стараться?». В виде комплекса: «всё равно не выйдет, зачем упираться?». Как логика: «если достаточно, зачем знать и уметь больше?». Цель одна: остановить. Не любит тепло работающих мышц и шум работающего мозга.
- Switch
- Открыл глаза
- Сообщения: 48
- Зарегистрирован: Пн фев 07, 2011 00:42:25
- Откуда: Из затерянного мира.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Есть вопрос.
Имеем число в одном регистре.
Как можно на ассемблере разделить единицы, десятки и сотни этого числа по трём разным регистрам? МК - MEGA8.
Число целое, со знаком (signed).
Имеем число в одном регистре.
Как можно на ассемблере разделить единицы, десятки и сотни этого числа по трём разным регистрам? МК - MEGA8.
Число целое, со знаком (signed).
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Делить на 10, остатки забирать. Следующий вопрос будет - где взять деление. А нигде, написать
И воспользоваться поиском по форуму, неоднократно обсуждалось (емнип, даже в этой теме)
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Switch писал(а):Имеем число в одном регистре.
Как можно на ассемблере разделить единицы, десятки и сотни этого числа по трём разным регистрам? МК - MEGA8.
Число целое, со знаком (signed).
Искать апнот про BCD арифметику. Но там вроде без знака.
ploop писал(а):Делить на 10, остатки забирать. Следующий вопрос будет - где взять деление. А нигде, написать
Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика
Ну да. Когда сам столкнулся с этой проблемой, искать не стал, просто взял и написал
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ploop писал(а):Вычитать сначала сотни, потом десятки, потом единицы, включив при этом три счётчика
Ну да. Когда сам столкнулся с этой проблемой, искать не стал, просто взял и написал
Советы все хорошие, но не совсем по делу.
Во-первых, у человека signed. Значит первым делом надо расщепить на знак и абс. величину. И знак где-то хранить.
Во-вторых : Gudd-Head, зачем три счетчика ? Когда вычли сотни и десятки, остаток уже содержит единицы.
Если бы я был преподом, у меня ответивший по билету для получения "отл." прямо за столом должен был бы написать эту подпрограммку секунд за 40. Хорошо, что я не препод
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Jack_A писал(а): Во-вторых : Gudd-Head, зачем три счетчика ? Когда вычли сотни и десятки, остаток уже содержит единицы.
... должен был бы написать эту подпрограммку секунд за 40.
Дык, я тоже ответ писал секунд 40, потому и не стал особо мозги напрягать
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если бы я был преподом, у меня ответивший по билету для получения "отл." прямо за столом должен был бы написать эту подпрограммку секунд за 40.
Если бы вы так же хорошо преподавали, как спрашивали - нет проблем. А то сейчас преподаватели пошли, как бы помягче сказать, тоже не айс...
- Switch
- Открыл глаза
- Сообщения: 48
- Зарегистрирован: Пн фев 07, 2011 00:42:25
- Откуда: Из затерянного мира.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Мдаа.... Холивар устроили, но не помогли.
На счёт деления - спрашивать не буду, так как гугл знает ответ на этот вопрос а вот запрос на разложение числа он не понимает.
Вообще, у меня этот вопрос возник при написании программы для термодатчика DS18B20
Вообще мне надо всего 2 числа достать из двух регистров (t LSB и t MSB) и оформить их так, чтобы можно было направить их в дешифраторы 4>10. А знак нужно отобразить отдельно. Десятые и сотые доли мне ненужны. Датчик настроен на минимальную точность.
Обмен 1Wire организовал, а вот это - даже в голову не приходит ничего.
ЗЫ:
И причём тут преподы? Я самоучка по электронике и МК и делаю для себя.
Никаких дипломных работ.
На счёт деления - спрашивать не буду, так как гугл знает ответ на этот вопрос а вот запрос на разложение числа он не понимает.
Вообще, у меня этот вопрос возник при написании программы для термодатчика DS18B20
Вообще мне надо всего 2 числа достать из двух регистров (t LSB и t MSB) и оформить их так, чтобы можно было направить их в дешифраторы 4>10. А знак нужно отобразить отдельно. Десятые и сотые доли мне ненужны. Датчик настроен на минимальную точность.
Обмен 1Wire организовал, а вот это - даже в голову не приходит ничего.
ЗЫ:
И причём тут преподы? Я самоучка по электронике и МК и делаю для себя.
Никаких дипломных работ.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Switch писал(а):Вообще, у меня этот вопрос возник при написании программы для термодатчика DS18B20.
Ё-моё, так бы сразу и сказали. А то "число со знаком"...
Берёте 7 бит с датчика (2^6 ... 2^0), включаете счётчкик и начинаете вычитать по 10. Как только результат станет отрицательным, прибавляете 10. В счётчике получаете десятки, в результате - единицы.
Switch писал(а):Мдаа.... Холивар устроили, но не помогли.
См. вложение, если настолько тяжело усваивается информация.
- Вложения
-
- BCD Conversion.asm
- (12.29 КБ) 208 скачиваний
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Switch
- Открыл глаза
- Сообщения: 48
- Зарегистрирован: Пн фев 07, 2011 00:42:25
- Откуда: Из затерянного мира.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо.
Отпишусь, что понял из этого.
Отпишусь, что понял из этого.- Engineer_Keen
- Друг Кота
- Сообщения: 3868
- Зарегистрирован: Пт янв 29, 2010 10:27:40
- Откуда: Москва
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Нашел еще тему, правда без знака, да и опоздал немного 
- Switch
- Открыл глаза
- Сообщения: 48
- Зарегистрирован: Пн фев 07, 2011 00:42:25
- Откуда: Из затерянного мира.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Вдогонку помогла мне ещё и статья ARV. Теперь понятнее стало. Попробую доделать свою программу. Если будут конкретные вопросы, обращусь.
