Пн авг 28, 2017 17:41:46
Пн авг 28, 2017 19:15:21
Пн авг 28, 2017 19:45:12
ldi r16, (1<<USIWMO)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
ldi r16, (1<<4) |(1<<3) |(1<<1) |(1<<0)
ldi r16, 0b00010000 |0b00001000 |0b00000010 |0b00000001
ldi r16, 0b00011011
Пн авг 28, 2017 21:01:13
ассемблер состоит из двух частей: мнемокодов команд и операций ассемблера (терминология моя). мнемокод - это символьный аналог команды ALU, например, mov, ldi или rol. разумеется, последний мнемокод означает "сдвиг влево", т.к. вроде бы является аналогом оператора Си <<, и это на самом деле так. но есть еще операция языка ассемблера <<, которая означает ровно то же самое, но выполняется ассемблером на этапе компиляции. то есть не ALU микроконтроллера делает этот сдвиг, а сам ассемблер все двигает, подставляя в команду уже готовый результат этих сдвигов.sibiryak69 писал(а):на сколько я знаю в ассемблере AVR нет таких операторов "<<" и "|" там они пишутся по другому и компилятор эти начертания по логике не должен понять (или я не прав??)
Вт авг 29, 2017 07:21:37
Вт авг 29, 2017 07:33:21
Да, что-то я там совсем странное написал... хотя бы исправленная версия нормально?WiseLord писал(а):Ну.. на побитовое И он тоже не особо был похож
ARV уже ответил, но продублирую. Сборка программы состоит из 2-х этапов: препроцессирование и компиляция (вообще-то есть еще линковка, но родной AVR ассемблер этого напрямую не умеет). На первом этапе препроцессор анализирует текст программы, не глядя на синтаксис целевого языка и обрабатывая только свои конструкции. Например, подставляет макросы прямо в текст программы, заменяет .def и .equ на соответствующие значения, подставляет вместо .include содержимое файла, и так далее. Примерно таким образом:sibiryak69 писал(а):на сколько я знаю в ассемблере AVR нет таких операторов "<<" и "|" там они пишутся по другому и компилятор эти начертания по логике не должен понять (или я не прав??)
.def temp=r16
.macro outi
ldi temp, @1
out @0, temp
.endm
outi PORTB, 1
ldi temp, (1<<2)
out PORTB,temp
ldi r16,0b00000100;основание системы счисления я оставил наиболее наглядным, компилятору-то без разницы
out 0x18, r16
Чт авг 31, 2017 16:15:30
ldi r16, (1<<USIWMO)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
ldi r16, (1<<4) |(1<<3) |(1<<1) |(1<<0)
ldi r16, 0b00010000 |0b00001000 |0b00000010 |0b00000001
ldi r16, 0b00011011
ассемблер состоит из двух частей: мнемокодов команд и операций ассемблера (терминология моя). мнемокод - это символьный аналог команды ALU, например, mov, ldi или rol. разумеется, последний мнемокод означает "сдвиг влево", т.к. вроде бы является аналогом оператора Си <<, и это на самом деле так. но есть еще операция языка ассемблера <<, которая означает ровно то же самое, но выполняется ассемблером на этапе компиляции. то есть не ALU микроконтроллера делает этот сдвиг, а сам ассемблер все двигает, подставляя в команду уже готовый результат этих сдвигов.sibiryak69 писал(а):на сколько я знаю в ассемблере AVR нет таких операторов "<<" и "|" там они пишутся по другому и компилятор эти начертания по логике не должен понять (или я не прав??)
Чт авг 31, 2017 17:45:09
теперь видели. еще и >> есть тоже. читайте документацию на avrassembler2sibiryak69 писал(а):но я такой команды "дерективы" как << в AVR не видел
Чт авг 31, 2017 20:18:13
Пт сен 01, 2017 07:04:03
ldi r16, (1<<USIWMO)|(1<<USICS1)|(1<<USICLK)|(1<<USITC)
ldi r16, 0b00011011
Судя по коду, Вы реализовывали деление любого числа на любое число, поэтому получилось что-то довольно громоздкое.Jetetex писал(а):Возникла у меня недавно необходимость деления целых чисел
Пт сен 01, 2017 18:11:23
Сб сен 02, 2017 07:39:46
Вс сен 03, 2017 15:57:29
Вс сен 03, 2017 16:00:54
Вс сен 03, 2017 20:42:58
ldi temp, (1<<OCIE1A)
out TIMSK, temp
ldi r16, 16
out 0x39, r16
Пн сен 11, 2017 13:59:12
Пн сен 11, 2017 16:03:53
Пн сен 11, 2017 16:08:26
Вт сен 12, 2017 08:31:00