Например TDA7294

Форум РадиоКот • Просмотр темы - AVR ассемблер. Объясните способ записи
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Вт апр 16, 2024 15:59:57

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 16 ] 
Автор Сообщение
Не в сети
 Заголовок сообщения: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 09:18:55 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
вот часто встречаю вот такое, например.
Код:
LDI   R16,(1<<ACBG)|(1<<ACIE)|(1<<ACIS1)|(1<<ACIS0)

Не могу понять принцип такой записи, объясните пожалуйста что тут что значит.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 09:36:41 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
<< - сдвиг влево
| - побитное или

(1<<2) | (1<<0) |(1<<4)
0b00000100 | 0b00000001 | 0x00010000
0b00010101

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

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 09:38:26 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
Это очень просто: загрузить в R16 константу, в которой единица будет в тех битах, номер которых справа от << .
Например, если ACBG = бит 0, ACIE = бит 2, то запись LDI R16,(1<<ACBG)|(1<<ACIE) будет то же, что и LDI R16, (1 + 4) , т.к. 1<<0 = 1, 1<<2 = 4.

_________________
Изображение


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:03:22 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Для меня - не банальный. Например, откуда в регистре R16 взялись биты, с именами битов управляющего регистра компаратора. Я вот это догнать не могу.
Я смог понять, если бы LDI R16, (1<<7)|(1<<6)|(1<<5)... и так далее
И зачем такие усложнения, если можно просто LDI R16, 0x00000000b?

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:09:29 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Голимый писал(а):
И зачем такие усложнения, если можно просто LDI R16, 0x00000000b?
Можно сразу в машинном коде писать :). Такие "усложнения" нужны для читабельности кода. Советую не пренебрегать этим. Эти, казалось бы длинные записи, на самом деле экономят Ваше время при отладке. На комментариях советую тоже не экономить, их может быть больше чем сам код.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:11:32 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 3
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Голимый писал(а):
откуда в регистре R16 взялись биты, с именами битов управляющего регистра компаратора.
ниоткуда они там не взялись: имена битов использовались для вычисления нужного значения, которое потом было помещено в R16. имена - это ведь просто названия. вы можете называть что угодно как угодно, ничего в мире от этого не изменится. но когда вы собираетесь изменять содержимое регистра управления компаратором, вам лучше знать, что те или иные биты соответствуют правильным битам в этом регистре. и дя этого лучше применять правильные их названия.

именно для легкости понимания следует использовать имена битов, а не безымянные константы 0b0101010101 - как узнать, установлен в этом числе бит ADEN или нет? вы помните его "место"? а когда написано (1<<ADEN) - это однозначно скажет, что бит будет стоять на нужном месте.

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:20:16 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 3
Медали: 1
Получил миской по аватаре (1)
Голимый писал(а):
...именами битов управляющего регистра компаратора. ...
Имена битов определены в специальных файлах. В зависимости от среды программирования их надо включать проект самому или среда сама их включит при выборе камня. Вот кусок из файла io8a.h

Код:
#define ACSR    _SFR_IO8(0x08)
#define ACIS0   0
#define ACIS1   1
#define ACIC    2
#define ACIE    3
#define ACI     4
#define ACO     5
#define ACBG    6
#define ACD     7


Добавлено after 4 minutes 5 seconds:
Ну для ассма обычно вот такие включения

Файл m8Adef.inc
Код:
; ***** BIT DEFINITIONS **************************************************

; ***** ANALOG_COMPARATOR ************
; SFIOR - Special Function IO Register
.equ   ACME   = 3   ; Analog Comparator Multiplexer Enable

; ACSR - Analog Comparator Control And Status Register
.equ   ACIS0   = 0   ; Analog Comparator Interrupt Mode Select bit 0
.equ   ACIS1   = 1   ; Analog Comparator Interrupt Mode Select bit 1
.equ   ACIC   = 2   ; Analog Comparator Input Capture Enable
.equ   ACIE   = 3   ; Analog Comparator Interrupt Enable
.equ   ACI   = 4   ; Analog Comparator Interrupt Flag
.equ   ACO   = 5   ; Analog Compare Output
.equ   ACBG   = 6   ; Analog Comparator Bandgap Select
.equ   ACD   = 7   ; Analog Comparator Disable


; ***** SPI **************************
; SPDR - SPI Data Register
.equ   SPDR0   = 0   ; SPI Data Register bit 0


Можно догадаться что в обоих примерах файлы для атмеги8

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:38:17 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Действительно, неплохо получилось:
Код:
      ldi      temp, (1<<DDD6)|(1<<DDD7)
      out      DDRD, temp
      ldi      temp, (1<<DDB0)
      out      DDRB, temp

Спасибо, помогли!

Каменты к к коду не пишу, т.к могу писать либо код, либо каменты. И вообще пишу для себя.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:40:09 
Собутыльник Кота
Аватар пользователя

Карма: 29
Рейтинг сообщений: 645
Зарегистрирован: Сб май 14, 2011 21:16:04
Сообщений: 2690
Откуда: г. Чайковский
Рейтинг сообщения: 4
Медали: 1
Получил миской по аватаре (1)
Комменты как раз для себя и пишут.

_________________
Изображение
Добро всегда побеждает зло. Поэтому кто победил - тот и добрый.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Ср май 10, 2017 10:49:42 
Встал на лапы

Карма: 2
Рейтинг сообщений: 4
Зарегистрирован: Пн дек 08, 2014 19:45:24
Сообщений: 117
Откуда: Воронеж
Рейтинг сообщения: 0
Не 8-ая мега. Atmega328P. Есть китайская ардуинка с умершим загрузчиком, который хз как восстановить. Потер ее, решил так попользовать.

_________________
Трудное детство, стальные игрушки.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Пт май 12, 2017 09:18:55 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
ARV писал(а):
а когда написано (1<<ADEN) - это однозначно скажет, что бит будет стоять на нужном месте.

Возможно, я уже писал об этом где-то...
Пришлось мне читать прогу, написанную одной дамой (МК у нее первый, по принципу "ну не боги же горшки обжигают" :)) )
Вот так она записывала 11 в R16 :
Код:
   CLR   R16
   ORI   R16,1
   ORI   R16,2
   ORI   R16,8

Тут уж, как говорил Д.Быков, "Дальше думать он не смог" .

_________________
Изображение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Пт май 12, 2017 22:11:41 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
если еще дать константам имена, например, так
Код:
.equ BITS 8 ;имелось в виду количество бит в байте
.equ BASE 2 ;имелось в виду основание двоичной системы
.equ TRUE 1 ;единственная осмысленная константа
clr r16
;какой-то код
ori r16, TRUE
;какой-то код
ori r16, BASE
;какой-то код
ori r16, BITS
то получится неплохой пример обфускации...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Пт май 12, 2017 23:11:42 
Потрогал лапой паяльник

Карма: 1
Рейтинг сообщений: 13
Зарегистрирован: Чт авг 08, 2013 01:06:54
Сообщений: 359
Рейтинг сообщения: 0
А ведь она могла бы и выставить все биты присвоением 0хFF, а затем обнулять ненужные. Получилось бы еще 2 команды сверху :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Пт май 12, 2017 23:37:05 
Открыл глаза
Аватар пользователя

Карма: 4
Рейтинг сообщений: 9
Зарегистрирован: Ср май 10, 2017 22:41:29
Сообщений: 62
Откуда: Планета Земля
Рейтинг сообщения: 0
Я может чего то не догоняю в асме, но разве невозможно записать в регистр число одной командой?
Код:
LDI R16, 0x11

Я понимаю, удобно применять побитовую маску там где это нужно, но зачем это делать когда нужно ввести просто числовую переменную?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Сб май 13, 2017 08:03:30 
Это не хвост, это антенна
Аватар пользователя

Карма: 8
Рейтинг сообщений: 193
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1441
Рейтинг сообщения: 0
А ведь она могла бы и выставить все биты присвоением 0хFF, а затем обнулять ненужные. Получилось бы еще 2 команды сверху :)))
а можно было и не обнулять!
Код:
ori r16,1
ori r16,2
andi r16,252
ori r16,8
andi r16,240
andi r16,224
andi r16,192
andi r16,128

Цитата:
Я может чего то не догоняю в асме, но разве невозможно записать в регистр число одной командой?
В том-то и дело :) Только 11 в десятичной системе а не в шестнадцатеричной: ldi r16,11


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: AVR ассемблер. Объясните способ записи
СообщениеДобавлено: Сб май 13, 2017 09:47:46 
Друг Кота
Аватар пользователя

Карма: 62
Рейтинг сообщений: 840
Зарегистрирован: Вт апр 24, 2007 07:45:40
Сообщений: 5592
Откуда: Minsk
Рейтинг сообщения: 0
FitoKot писал(а):
Я может чего то не догоняю в асме, но разве невозможно записать в регистр число одной командой?

Так я ж объясяю: это писала ДЕВИЦА, в первый раз увидевшая МК. :( Я у нее тоже это спросил, она ничего не ответила,
Спойлерно потом подругам говорила: "Я его боюсь" ( я у них тогда нач. сектора был ) .
А знаете ли вы, что разработан комп. не на мат. логике, а на женской: там вместо традиционных И, ИЛИ, НЕ оператоы: "НИ ДА, НИ НЕТ" , "МОЖЕТ БЫТЬ...", " НЕТ, НЕТ, НЕТ, ДАЖЕ И НЕ ПРОСИ!" :)

Просю пардону у ТС что увел обсуждение малость в сторону. Но ведь вопрос прояснили ?

_________________
Изображение


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 16 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 24


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y