Обсуждаем контроллеры компании Atmel.
Ответить

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

Пн июн 01, 2020 21:35:54

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

:) Интересная точка зрения. :)

Опять меня преследуют разочарования. В моем протеусе не оказалось WH1602 с контроллером 44780.
Есть только какая то LM016L ,после получасовых поисков в библиотеке,но у нее 14 выводов а не 16. И нет входа С .Хотелось состыковать и поизвращаться с изменениями в коде.
Это не одно и то же? И как подключить LM016L ? Или подскажите,где импортировать модель WH1602 ?

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

Вт июн 02, 2020 10:26:08

LM016L и 1602 - это одно и то же.
нет выводов подсветки.
остальное всё есть.

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

Вт июн 02, 2020 12:04:05

Вообще-то ассемблер начинают изучать не с протеуса...
Максимум штатный симулятор IDE и/или примитив-макет.
А уже по мере усложнения задач сам придеш к пониманию "куда копать".
8)

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

Пт июн 05, 2020 14:42:02

Не получается ничего. Буковки на виртуальном дисплее не бегают. При запуске симуляции. Экран зажигается,а буковок нет. :cry:
Доглядел виртуальным осциллоскопом,что генерации нет на кварце. Может в этом причина...
Жаль,файл проекта не могу прилепить.
Вложения
HD44780.c
(3.36 KiB) Скачиваний: 159
lcd_mega8_circuit_small.gif
(13.48 KiB) Скачиваний: 171

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

Пт июн 05, 2020 16:49:23

Что у вас под обозначением "A1", на пине reset, между резистром и кондером? Перемычка?

Выкинте её. Там кнопка должна быть.

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

Пт июн 05, 2020 18:11:11

А хрен его знает. схема не моя,взятая с какого то сайта.Впрочем как и исходник. У меня там ничего нет.
Я понимаю,что при соединении reset с землей, контроллер будет делать сброс. А так,с R и C будет однократный при подаче питания.

Добавлено after 35 minutes 40 seconds:
Прилепил кнопку. При нажатии на нее,сигналы с порта D становятся неопределенными. И это понятно.
А больше ничего.

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

Сб июн 06, 2020 22:10:25

главный колбасист, а что ты тут с исходником на Си делаешь в теме про ассемблер?
если еще тут будешь продолжать, дам бан за оффтоп.

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

Сб июн 06, 2020 23:17:31

Я больше не буду.

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

Пт июн 26, 2020 23:46:49

сигналы с порта D становятся неопределенными. И это понятно.
А больше ничего.

Ну понятное дело, что контроллеру нечего исполнять. Ты ему прошивку указал?
И да, на выводдах кварца в модели НИЧЕГО не будет - этот аспект не симулируется в виду его ненужности. Тактирование там виртуальное, и не просто так а частотой указанной в свойствах модели. Даже если биты конфигурации стоят иначе - модель на многие из них плевала с высокой колокольни в виду ненужности и бесперспективности в целях отладки программного кода, но полная симуляция всех аспектов просто впустую потратит ценный ресурс. Есть ещё ряд особенностей с которыми столкнётесь при работе с моделями/симуляторами... например UART-ы на протеусе не работают на скоростях выше 38400 бод. Если задать к примеру 115200 то реальный выход всеравно будет 38400 и не больше. Какое-то ограничение чтобы не использовали в коммерческих целях.

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

Сб июн 27, 2020 06:27:55

Ну понятное дело, что контроллеру нечего исполнять. Ты ему прошивку указал?

разумеется.
Нас выгнали в тему по протеусу.
https://radiokot.ru/forum/viewtopic.php ... start=5040

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

Сб июн 27, 2020 21:49:52

Может кто-нибудь прояснить ситуацию с ".undef"?
Конечно я могу и регистрами всё переписать, но просто уже интересно стало...

Ситуация такая:
Код:
PODPROGRAMMA:
   .def BAR_track      =   R16
   .def BAR_height      =   R17
   .def POS_mark_line   =   R18
   .def BAR_width      =   R19
   .def BAR_count      =   R20

...........................................................................
...........................................................................
........... код подпрограммы ..................................
...........................................................................
rcall LABEL1
...........................................................................
...........................................................................
...........................................................................

   .undef BAR_track
   .undef BAR_height   
   .undef POS_mark_line   
   .undef BAR_width      
   .undef BAR_count
ret

LABEL1:
................................................................
................................................................
dec POS_mark_line
................................................................
................................................................
dec BAR_height
................................................................
................................................................
dec BAR_track
................................................................
................................................................
ret



По логике, я ставлю .undef-ы на выходе из основной подпрограммы, в которой они и были определены.
Но компилятор выдаёт: error: Invalid register

Если переношу их в конец подпрограммы под LABEL1, то принимает. Но тогда где же логика?

Первый раз столкнулся с таким. Где их правильно расположить?

PS.
Всё, понял. Их можно и ешё ниже расположить. Не зависимо в теле процедуры или нет. Но как-то странно это.

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

Вс июн 28, 2020 10:20:42

Для обхода ограничений .def/.undef используем первичную привязку к "временным регистрам общего пользования"
к примеру:
Код:
; область полного функционала
 .def tmp0 = r16 ; рабочий регистр (полный функционал)
 .def tmp1 = r17 ; рабочий регистр (полный функционал)
 .def tmp = r18 ;(полный функционал)
 .def tmp = r19 ;(полный функционал)
 .def tmp = r20 ;(полный функционал)
 .def tmp = r21 ;(полный функционал)
 .def tmp = r22 ;(полный функционал)
 .def tmp = r23 ;(полный функционал)

а в прикладных программах применяем директивку #define
Код:
; proc_a
#define cnt0 tmp0
#define mod_a tmp1

Код:
;proc_b
#define my_buf tmp0
#define mod_5 tmp1
#define cntl tmp2
#define cnth tmp3

однако следует учитывать, что компилятор в таком случае не отслеживает "взаимоналожение" регистров
8)

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

Вс июн 28, 2020 10:38:59

Надо только вспомнить что препроцессор(а директивы в его ведении) не знает ничего о программе и в часности о том как она работает - он работает с ТЕКСТОМ программы, для него это не более чем символы. Теперь стало яснее почему твой финт не сработал?

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

Вс июн 28, 2020 11:01:48

Alexeyslav писал(а):Теперь стало яснее почему твой финт не сработал?

Как бы да.
В том то и дело, что вразрез логике.
По логике: зашёл - объявил, ну и отменил объявление перед выходом.

А тут по тексту значит...

Ладно, приспособимся...

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

Вс июн 28, 2020 11:44:29

Просто реализация такой функциональности потребовала бы плотного взаимодействия с компилятором. Это был бы уже не препроцессор, и пришлось бы цепляться за КАЖДЫЙ выпущенный компилятор и его особенности, кроме того в каждом компиляторе надо было бы предусмотреть связи с каждым выпущенным препрроцессором - а работа это столь бесполезна сколь масштабна. Кто это будет делать и зачем, верней за какие деньги. Как представишь сколько это костылей породит, так и поймёшь почему оно такое какое есть сейчас. Если бы была только одна пара компилятор-препроцессор, это было бы пол беды. Ну а в каких-то языках так и сделано, там где нет разнообразия компиляторов.

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

Ср авг 19, 2020 10:23:18

Всем здравствуйте. Никак не доходит такая вещь : надо, чтобы регистр при каждом проходе увеличивался на 1, до, скажем, 240. По достижении этого значения начинаем отнимать от регистра до, пусть, 80. Достигнув 80 снова увеличиваем до 240 и тд. Суммирую или отнимаю с другим регистром, в который гружу то 01 то FF. Задействовал и флаг Т , то проскакиваю границы , то топчусь у границы. Подмогните пж с алгоритмом.

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

Ср авг 19, 2020 10:36:26

Как вариант
Код:
START:
   LDI   R22,80
   LDI   R21,1
GO_240:
   RCALL   PROHOD
   ADD   R22,R21
   CPI   R22,240
   BRLO   GO_240
   LDI   R21,-1
GO_80:
   RCALL   PROHOD
   ADD   R22,R21
   CPI   R22,80
   BRSH   GO_80
   RJMP   START

PROHOD:
   RETI

Вариант с одним регистром
Код:
START:
   LDI   R22,80
GO_240:
   RCALL   PROHOD
   INC   R22
   CPI   R22,240
   BRLO   GO_240
GO_80:
   RCALL   PROHOD
   DEC   R22
   CPI   R22,80
   BRSH   GO_80
   RJMP   START

PROHOD:
   RETI
Последний раз редактировалось akl Ср авг 19, 2020 10:59:16, всего редактировалось 1 раз.

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

Ср авг 19, 2020 10:38:46

Сам алгоритм может быть простой
Код:
// До цикла:
d = 1;
// В цикле:
if (reg >= 240) {
    d = -1;
}
if (reg <= 80) {
    d = 1;
}
reg += d;

Только на ассемблер сами переводите :)

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

Ср авг 19, 2020 11:07:52

я бы делал так:
(r2<>0) skip
r2=0x01 (либо r2=1 делать в инициализации)
(r1<240) skip
r2=0xff
(r1>80) skip
r2=0x01
r1+r2

(результат в r1. на асм думаю переведёшь)
и обязательно убедиться что r1 и r2 не портятся другим кодом между итерациями (или нужно сохранять и восстанавливать их значения)
а как сам ты делаешь? :dont_know:

Добавлено after 18 minutes 30 seconds:
akl, мне не очень понятен Ваш код...
например: вызывается PROHOD (заметь - именно вызов, а не ГоТо) а за меткой сразу RETI... куда он вернётся?

Добавлено after 1 minute 36 seconds:
и, наверно этот кусок кода должен вызываться извне, а не сам вызывать...

Добавлено after 1 minute 23 seconds:
хотя... если посмотреть под тем углом, что возврат - это и есть вызов... то, даже норм будет :beer:

Добавлено after 1 minute 41 second:
получается направление движения хранится не в регистре, а в векторе возврата

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

Ср авг 19, 2020 11:07:56

akl, Ваш код ещё не пробовал, WiseLord и Ivanoff, так я пробовал, топчусь у границы. Ведь когда меняем знак и идём в обратную сторону, то опять попадаем на условие и Тут же знак меняется. Вот и топчусь у границы. Пардон, у меня срочный вызов, сейчас проверить не могу.
Ответить