Страница 358 из 400
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн мар 30, 2020 23:11:04
Jurkin
[uquote="shonty",url="/forum/viewtopic.php?p=3820786#p3820786"]Закончил новые шрифты (переменной ширины).[/uquote]
Эт случайно не для ST7735 ? И как бы взглянуть на Вашу реализацию, ну конечно если это не комерческий проектик.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 08, 2020 06:32:33
shonty
Jurkin писал(а):Эт случайно не для ST7735 ? И как бы взглянуть на Вашу реализацию, ну конечно если это не комерческий проектик.
Проект не комерческий, просто база для последующих проектов, для вывода названий радиостанций в частности. Это для ILI9341, но подойдёт и для ST7735, хотя шрифт для последнего слишком крупный, всего 7-8 символов в строку уберётся.
Презентация исходника пока не планируется, но готов ответить на любые вопросы по теме, и куски кода также могу выложить.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 09, 2020 07:51:18
Deoptim
Есть
softuart.c для aattiny13, ttinyX5 и прочих.
Порты задаются в
softuart.h.
Что необходимо?
Необходимо использовать RESET пин(БЕЗ отключения через фьюзы) как вход для UART_RX.
Т.е. этот RESET пин(БЕЗ отключения через фьюзы) можно использовать как аналоговый ADC0 и с определенным порогом напряжения (не ниже срабатывания RESET) определять пин как 1 или 0.
Может ли кто-то помочь как-то написать asm код для softuart_rx где в случае использования PB5(он же RESET он же ADC0)?
Или вообще, пожалуйста покажите на примере asm код для чтения ADC0 значения?
Может я что-то упускаю, и при чтении adc значения должна быть задержка - и из-за скорости это вообще не будет работать?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Чт апр 09, 2020 08:16:50
BOB51
Считаем время обработки трех последовательных преобразований АЦП, остальные интервалы по обработке одного бита приемника.
Ежли скорость устраивает - пробуем сотворить.
Только воть... Использование вывода сброса под чего иного без отключения функционала фузами...
Это весьма маловероятно.
В принципе для начала не помешает угробить пару кристаллов для проверки такого предположения...

Да и зачем софт уарту ДВА вывода?
Он же все равно или на приеме или на передаче - одновременно делать и прием и передачу не сумеет.
Тогда и вопросы с мозготрепом отпадут...

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Ср апр 15, 2020 14:35:19
Starichok51
убрал я этот весь базар о переменных на тему "есть ли жизнь на Марсе?".
если этот базар начнется опять, буду удалять без предупреждений.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 24, 2020 15:55:54
Леонид_М
Доброго времени,
возник такой вопрос: есть подпрограмма, в которой команду cbi нужно при разных запусках
выполнять то как cbi PORTC,0, то как cbi PORTC,1, чтобы не плодить кучу подпрограмм - можно ли как-то
это сделать путем передачи параметра?
пробовал с set - читал, что вроде как может изменять значение, но на практике получается ,что set не меняет значение в процессе работы программы...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 24, 2020 16:40:22
shonty
Не знаю, правильно ли я Вас понял, но предполагаю, что при разных условиях нужно выполнять разные действия. Я использую "регистр флагов" в таких случаях. Проверяю соответствующий бит, и произвожу соответствующие действия. Можно также бит "T" в SREG использовать для установки/проверки условия.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пт апр 24, 2020 18:00:33
VladislavS
[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832596#p3832596"]можно ли как-то это сделать путем передачи параметра?[/uquote]Можно. Передать параметр в подпрограмму и в зависимости от его значения вызвать разную команду согласно алгоритму.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 04:35:17
BOB51
[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832596#p3832596"]Доброго времени,
возник такой вопрос: есть подпрограмма, в которой команду cbi нужно при разных запусках
выполнять то как cbi PORTC,0, то как cbi PORTC,1, чтобы не плодить кучу подпрограмм - можно ли как-то
это сделать путем передачи параметра?
пробовал с set - читал, что вроде как может изменять значение, но на практике получается ,что set не меняет значение в процессе работы программы...[/uquote]
Зависит от задачи.
Если динамически изменяемое условие, которое анализируется кодом программы - тогда механизм флагов.
Если это подпрограмма, которая в зависимости от фрагмента, в который вставляется, меняет свою "начинку" (в принципе тот же макрос) можно применить условное ассемблирование.
Однако скорее всего выбрано не лучшее(не оптимальное) решение алгоритма задачи.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 07:42:50
Леонид_М
shonty, VladislavS, сейчас пока так и сделал, но хотел бы по другому, чтобы этот параметр подставлялся в нужную команду.
BOB51, условное ассемблирование - это то, что выбирается при компиляции и не меняктся?
вот пример того, что я хотел:
.set port_v=$0
rcall pppp
.set port_v=$1
rcall pppp
.......
pppp:
......
cbi PORTC,port_v
......
ret
это работает не совсем как надо, при компиляции port_v принимает значение 1 - и с ним отрабатывает все обращения у подпрограмме,
а не принимает значение сначала 0, потом 1.
как сделать, чтобы подставлялись разные значения?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 09:07:27
Starichok51
макрос это должен быть, а не подпрограмма.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 09:17:12
BOB51
Опишите полностью словами, чего хотите сделать...
Тогда можно чего подсказать.
Условная компиляция - это использование возможностей препроцессора и именованных меток/констант
для указания компилятору чего в случае необходимости обрабатывать, а чего пропустить в одном и том же текстовом фрагменте.
Для АВРок (avrasm2) это применение директив
#define
#ifdef
#ifndef
#if and #elif
#else
#endif

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 10:39:30
Леонид_М
[uquote="Starichok51",url="/forum/viewtopic.php?p=3832885#p3832885"]макрос это должен быть, а не подпрограмма.[/uquote]
ясно, спасибо, направление понял, буду изучать макросы...
Добавлено after 1 hour 21 minute 24 seconds:
BOB51 - "для указания компилятору чего в случае необходимости обрабатывать" - т.е. это определяется при компиляции... и больше не меняется... не пойдет... если я правильно понял...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 11:34:13
shonty
Подозреваю, что вы пытаетесь работать с "
port_v", как с сущностью, про которую говорить в этой теме нельзя, иначе пост удалят

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 12:02:42
Леонид_М
сущностью, про которую говорить в этой теме нельзя - это как в сказке )
запрет - религиозный или практический?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 12:30:17
shonty
[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832959#p3832959"]запрет - религиозный или практический?[/uquote]
Скорее мировоззренческий, а по тому как исписали много, но к единому так и не пришли
Могу ошибаться, но возможно у вас есть опыт работы с языками высокого уровня, и вы пытаетесь этот опыт спроецировать в ассемблер.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Сб апр 25, 2020 12:37:36
Леонид_М
[uquote="shonty",url="/forum/viewtopic.php?p=3832970#p3832970"]у вас есть опыт работы с языками высокого уровня, и вы пытаетесь этот опыт спроецировать в ассемблер.[/uquote]
да, именно так... я ассемблером почти не занимался... но знаком с языками высокого уровня,
а все возможности и ограничения ассемблера пока не знаю, ничего не нашел по своему вопросу,
кроме команды set, но и она не совсем то... может это и не возможно сделать на ассемблере.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Вс апр 26, 2020 23:22:19
Starichok51
shonty, человеку нужно создать макрос, работающий с любым битом порта, и к упомянутой тобой "сущности" это не имеет никакого отношения.
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 27, 2020 00:21:45
Леонид_М
с макросом заработало, спасибо, но макрос вставляется несколько раз в код (сколько обращений)
и тем самым увеличивает объем подпрограммы по сравнению с подпрограммами - я правильно понял?
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Добавлено: Пн апр 27, 2020 07:01:57
shonty
Сайт подвис, потому не ответил сразу. Если ещё актуально, то возможно подойдёт такой вариант:
Можно устанавливать биты в порт командой out - чтение регистра в порт. Но перед этим (возможно) понадобится прочитать порт в регистр (команда in), а потом логическими операциями поправить биты. Это для того, чтобы остальные биты в порту не нарушить, если весь порт задействован.
Приведённый вами пример перепишется типа так:
; установить на PC0 низкий:
in R8, PORTC
ldi R16, 0b111111_1_0
and R8, R16
rcall pppp
; установить на PC1 низкий:
in R8, PORTC
ldi R16, 0b111111_0_1
and R8, R16
rcall pppp
; инвертировать уровни на PC0 и PC1 одновременно:
in R8, PORTC
ldi R16, 0b000000_1_1
eor R8, R16
rcall pppp
pppp:
......
out PORTC, R8
......
ret
В данном примере подпрограмма "pppp" позволяет менять любые биты в PORTC, причём не только сбрасывать, но и устанавливать.
Операторы in, out, and, eor, or работают с регистрами 0...31, что в вашем случае позволит отвести под это отдельный регистр (например R8).
А вот andi и ori работают только с R16...R31, но сокращают запись.
; установить на PC0 низкий:
in R16, PORTC
andi R16, 0b111111_1_0
rcall pppp2
pppp2:
......
out PORTC, R16
......
ret
Нижнее подчёркивание в коде можно не убирать. Так нагляднее, и компилятор принимает.
Опять же, если ситуация позволяет не париться с другими битами порта или 2-7 биты настроены на вход с подтяжкой, то можно просто:
ldi R16, 0b111111_1_0
и на вывод.
Как то так...