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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
Jurkin
Вымогатель припоя
Сообщения: 515
Зарегистрирован: Вт янв 01, 2013 15:51:19
Откуда: Vilnius

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

Сообщение Jurkin »

[uquote="shonty",url="/forum/viewtopic.php?p=3820786#p3820786"]Закончил новые шрифты (переменной ширины).[/uquote]

Эт случайно не для ST7735 ? И как бы взглянуть на Вашу реализацию, ну конечно если это не комерческий проектик.
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Jurkin писал(а):Эт случайно не для ST7735 ? И как бы взглянуть на Вашу реализацию, ну конечно если это не комерческий проектик.
Проект не комерческий, просто база для последующих проектов, для вывода названий радиостанций в частности. Это для ILI9341, но подойдёт и для ST7735, хотя шрифт для последнего слишком крупный, всего 7-8 символов в строку уберётся.

Презентация исходника пока не планируется, но готов ответить на любые вопросы по теме, и куски кода также могу выложить.
Реклама
Deoptim
Грызет канифоль
Сообщения: 286
Зарегистрирован: Пт дек 30, 2016 18:05:50
Откуда: Украина.

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

Сообщение Deoptim »

Есть softuart.c для aattiny13, ttinyX5 и прочих.
Порты задаются в softuart.h.

Что необходимо?
Необходимо использовать RESET пин(БЕЗ отключения через фьюзы) как вход для UART_RX.
Т.е. этот RESET пин(БЕЗ отключения через фьюзы) можно использовать как аналоговый ADC0 и с определенным порогом напряжения (не ниже срабатывания RESET) определять пин как 1 или 0.

Может ли кто-то помочь как-то написать asm код для softuart_rx где в случае использования PB5(он же RESET он же ADC0)?
Или вообще, пожалуйста покажите на примере asm код для чтения ADC0 значения?
Может я что-то упускаю, и при чтении adc значения должна быть задержка - и из-за скорости это вообще не будет работать?
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Считаем время обработки трех последовательных преобразований АЦП, остальные интервалы по обработке одного бита приемника.
Ежли скорость устраивает - пробуем сотворить.
Только воть... Использование вывода сброса под чего иного без отключения функционала фузами...
Это весьма маловероятно.
В принципе для начала не помешает угробить пару кристаллов для проверки такого предположения...
8)
Да и зачем софт уарту ДВА вывода?
Он же все равно или на приеме или на передаче - одновременно делать и прием и передачу не сумеет.
Тогда и вопросы с мозготрепом отпадут...
:dont_know:
Последний раз редактировалось BOB51 Чт апр 09, 2020 10:48:13, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Starichok51
Модератор
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

убрал я этот весь базар о переменных на тему "есть ли жизнь на Марсе?".
если этот базар начнется опять, буду удалять без предупреждений.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Реклама
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

Доброго времени,
возник такой вопрос: есть подпрограмма, в которой команду cbi нужно при разных запусках
выполнять то как cbi PORTC,0, то как cbi PORTC,1, чтобы не плодить кучу подпрограмм - можно ли как-то
это сделать путем передачи параметра?

пробовал с set - читал, что вроде как может изменять значение, но на практике получается ,что set не меняет значение в процессе работы программы...
Реклама
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Не знаю, правильно ли я Вас понял, но предполагаю, что при разных условиях нужно выполнять разные действия. Я использую "регистр флагов" в таких случаях. Проверяю соответствующий бит, и произвожу соответствующие действия. Можно также бит "T" в SREG использовать для установки/проверки условия.
Аватара пользователя
VladislavS
Собутыльник Кота
Сообщения: 2562
Зарегистрирован: Вт май 01, 2018 19:44:47

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

Сообщение VladislavS »

[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832596#p3832596"]можно ли как-то это сделать путем передачи параметра?[/uquote]Можно. Передать параметр в подпрограмму и в зависимости от его значения вызвать разную команду согласно алгоритму.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832596#p3832596"]Доброго времени,
возник такой вопрос: есть подпрограмма, в которой команду cbi нужно при разных запусках
выполнять то как cbi PORTC,0, то как cbi PORTC,1, чтобы не плодить кучу подпрограмм - можно ли как-то
это сделать путем передачи параметра?

пробовал с set - читал, что вроде как может изменять значение, но на практике получается ,что set не меняет значение в процессе работы программы...[/uquote]

Зависит от задачи.
Если динамически изменяемое условие, которое анализируется кодом программы - тогда механизм флагов.
Если это подпрограмма, которая в зависимости от фрагмента, в который вставляется, меняет свою "начинку" (в принципе тот же макрос) можно применить условное ассемблирование.
Однако скорее всего выбрано не лучшее(не оптимальное) решение алгоритма задачи.
8)
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

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.
как сделать, чтобы подставлялись разные значения?
Аватара пользователя
Starichok51
Модератор
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

макрос это должен быть, а не подпрограмма.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15585
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Опишите полностью словами, чего хотите сделать...
Тогда можно чего подсказать.
:roll:
Условная компиляция - это использование возможностей препроцессора и именованных меток/констант
для указания компилятору чего в случае необходимости обрабатывать, а чего пропустить в одном и том же текстовом фрагменте.
Для АВРок (avrasm2) это применение директив
#define
#ifdef
#ifndef
#if and #elif
#else
#endif
8)
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

[uquote="Starichok51",url="/forum/viewtopic.php?p=3832885#p3832885"]макрос это должен быть, а не подпрограмма.[/uquote]

ясно, спасибо, направление понял, буду изучать макросы...

Добавлено after 1 hour 21 minute 24 seconds:
BOB51 - "для указания компилятору чего в случае необходимости обрабатывать" - т.е. это определяется при компиляции... и больше не меняется... не пойдет... если я правильно понял...
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

Подозреваю, что вы пытаетесь работать с "port_v", как с сущностью, про которую говорить в этой теме нельзя, иначе пост удалят :)
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

сущностью, про которую говорить в этой теме нельзя - это как в сказке )

запрет - религиозный или практический?
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение shonty »

[uquote="Леонид_М",url="/forum/viewtopic.php?p=3832959#p3832959"]запрет - религиозный или практический?[/uquote]
Скорее мировоззренческий, а по тому как исписали много, но к единому так и не пришли :)

Могу ошибаться, но возможно у вас есть опыт работы с языками высокого уровня, и вы пытаетесь этот опыт спроецировать в ассемблер.
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

[uquote="shonty",url="/forum/viewtopic.php?p=3832970#p3832970"]у вас есть опыт работы с языками высокого уровня, и вы пытаетесь этот опыт спроецировать в ассемблер.[/uquote]

да, именно так... я ассемблером почти не занимался... но знаком с языками высокого уровня,
а все возможности и ограничения ассемблера пока не знаю, ничего не нашел по своему вопросу,
кроме команды set, но и она не совсем то... может это и не возможно сделать на ассемблере.
Аватара пользователя
Starichok51
Модератор
Сообщения: 19055
Зарегистрирован: Сб авг 14, 2010 15:05:51
Откуда: г. Озерск, Челябинская обл.

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

Сообщение Starichok51 »

shonty, человеку нужно создать макрос, работающий с любым битом порта, и к упомянутой тобой "сущности" это не имеет никакого отношения.
Мудрость приходит вместе с импотенцией...
Когда на русском форуме переходят на Вы, в реальной жизни начинают бить морду.
Леонид_М
Грызет канифоль
Сообщения: 257
Зарегистрирован: Пн окт 03, 2016 10:06:09

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

Сообщение Леонид_М »

с макросом заработало, спасибо, но макрос вставляется несколько раз в код (сколько обращений)
и тем самым увеличивает объем подпрограммы по сравнению с подпрограммами - я правильно понял?
Аватара пользователя
shonty
Мучитель микросхем
Сообщения: 473
Зарегистрирован: Ср янв 11, 2012 18:20:26

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

Сообщение 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
и на вывод.

Как то так...
Ответить

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