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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ibiza11 писал(а):

Код: Выделить всё

clr tmp
sbr tmp,7

clr tmp
sbr tmp,(1<<7)

в каком из этих случаев ДЕЙСТВИТЕЛЬНО УСТАНОВИТСЯ 7ой БИТ?

В обоих случаях. Компилятор сам всё преобразует.
ibiza11 писал(а):PS я из-за этоих команд словил нефиговый баг, при этом девайс чуть не сгорел.

Если их коды совершенно идентичны кодам andi и ori, то почему Вы не ловили баги с ними(andi и ori)? Ведь форма записи в бинарник та же. А следовательно, МК не различит, что в листинге написали, будь то cbr или или andi. Скорее всего Ваш компилятор криво откомпилировал. CBR может принять и несколько аргументов, например CBR r16, (1<<3)|(1<<5)|(1<<7) А вместо аргументов туда засунется восьмибитное число с единицами в указанных битах. Даже если вставить один аргумент.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

DX168B, причина ошибок большинства в другом. Ну смотрите:
sbi PORTB,7 установит 7 бит в PORTB. Аналог:
in temp, PORTB
ori temp, 0b10000000
out PORTB,temp

Естественно, первая запись короче и понятней. Но, поступая аналогично с РОН, только используя sbr, получаем вот что:
sbr temp,7
Аналог:
ori temp,0b00000111 (число 7 в двоичном представлении)
Тем самым мы зафигачим в единицы три младших бита, вместо седьмого.

Ток что sbr tmp,(1<<7) прокатит (т.к. создаст корректную маску), а вот sbr tmp,7 - сведёт с ума не разобравшегося.
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Ну не знаю. Пользоваться надо последними обновлениями на среду разработки.
У меня катит даже такое:

Код: Выделить всё

sbr r16, 7|5|1

И получаю 0xA2
А с CBI и SBI не катит.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

А с CBI и SBI не катит.

Само собой, у мних аргумент должен быть не больше 7
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Ладно, всё это мелочи. Я всё равно ими не пользовался, но раз они тупят, то и не буду их применять. Собственно тупизм там не с МК, а с компилятором. У кого-то оно проблем не вызовет, а кто-то будет мучаться. У меня (проверил только что) компилятор всё разбирает правильно.
Я в принципе больше со сложением\вычитанием работаю.

Код: Выделить всё

ldi r16, 0b11111111
sub r16, 0b00001001 ;Вычтем из r16 это число
; В r16 останется 0b11110110
add r16, 0b00001001 ;Теперь добавим это же число
; В r16 получится 0b11111111

Никогда не подводило. :)
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

DX168B писал(а):Ну не знаю. Пользоваться надо последними обновлениями на среду разработки.
У меня катит даже такое:

Код: Выделить всё

sbr r16, 7|5|1

И получаю 0xA2
А с CBI и SBI не катит.
:shock: вы в какой среде разработки работаете?
DX168B писал(а):Никогда не подводило.
А вы заранее знаете какой бит у вас установлен, а какой нет?
Если вы вашим способом попытаетесь выставить бит, который и так уже выставлен (например в каком нибудь цикле), то получите прекраснейший баг, который никогда
не поймаете, исходя из "Никогда не подводило". Аналогично со сбросом уже сброшенных бит.
Слышал много про быдлокодеров, но блин такое! Зачем придумывать велосипед, если есть специальная команда сброса/установки бита в регистре РОН.
Set Bit in Register=SBR
Clear Bit in Register=CBR
исправлено :[
Последний раз редактировалось ibiza11 Чт янв 27, 2011 12:41:34, всего редактировалось 2 раза.
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

В этой:
AVR Studio писал(а):AVR Studio 4.18.700
GUI Version 4, 18, 0, 685
AVR Simulator 1, 0, 2, 1
ATtiny2313 220

Operating System
Major 5
Minor 1
PlatformID 2
Build 2600
Service Pack 3

*самореклама*:

VDMAvrGUI
AvrPluginAvrAsmObject 1, 0, 0, 48
AvrPluginavrgccplugin 1, 0, 0, 11
Stk500Dll 1, 0, 1, 15


Ещё WinAVR установлена.
Проблем нет никаких. :) Может у меня она криво встала. :dont_know:
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

AVR Studio - Help - Assembler help - CBR
AVR Studio - Help - Assembler help - SBR
посмотрите и почитайте что там написано. не удивлюсь, что там написано то же самое что и у меня. У меня студия 4.16 SP3
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ibiza11 писал(а):А вы заранее знаете какой бит у вас установлен, а какой нет?

Да, только в случае если знаю. И в основном с одним битом только.
ibiza11 писал(а):Слышал много про быдлокодеров, но блин такое! Зачем придумывать велосипед, если есть специальная команда сброса/установки бита в регистре РОН.
Set Bit in Register=SBI
Clear Bit in Register=CBI

Вы меня паццтол загоняете. :)))
SBI - Set Bit in I\O register
CBI - Clear Bit in I\O register
Разницу чувствуете между РОН и регистрами ввода\вывода?
Изображение
Вложения
SCREEN.PNG
(27.16 КБ) 2300 скачиваний
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

Сообщение Gudd-Head »

ibiza11 писал(а):Слышал много про быдлокодеров, но блин такое! Зачем придумывать велосипед, если есть специальная команда сброса/установки бита в регистре РОН.
Set Bit in Register=SBR
Clear Bit in Register=CBR

Позволю себе картинку из Естифеева. Обратите внимание на примеры.
Изображение
CBR аналогично.
Вложения
Безымянный.GIF
(18.73 КБ) 2316 скачиваний
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Ну а почему, в начале написали, что SBI\CBI применимо к РОН и в хелп меня посылают. Я его перелопатил уже вдоль и поперёк. Сначала осуждают команды SBR и CBR а потом говорят, что ими надо пользоваться. Вот как Студия посылает, если применить SBI\CBI к РОН:
Изображение

Аналогично и с записью (1<<2)
Вложения
SCREEN.PNG
(37.86 КБ) 2076 скачиваний
Последний раз редактировалось DX168B Чт янв 27, 2011 12:59:00, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

И еще добавлю про команды SBR и CBR.
Нефиговый баг я получил от того, что писал как предлагаете вы и утверждаете, что все прекрасно работает.
А именно я писал так:

Код: Выделить всё

cbr temp,5
подразумевая при этом сброс бита №5 в регистре temp. На самом деле команда CBR, практически(!) аналогична команде ANDI, поэтому сбрасывался не 5ый бит, а сбрасывались биты под номерами 2 и 0, поскольку 5 = 00000101.
Что конкретно написано в Assembler help из пакета AVRStudio. Каким образом у вас получается нае*ать компилятор, мне в голову не приходит,
поэтому пришла мысль, что вы пытаетесь нае*ать кого-нибудь другого. Я могу ошибаться, но мнение сложилось именно такое, с учетом предоставленных вами
аргументов.

почему я написал практически(!), потому что компилятор, перед тем как заменить команду CBR на команду ANDI, инвертирует второй аргумент команды (нашу константу) и только после этого выполняет побитовое И. Таким образом

Код: Выделить всё

cbr temp,(1<<6)
аналогична записям

Код: Выделить всё

andi temp,~(1<<6)
andi temp,~(0x40)
andi temp,0xDF


я поправил свой пост, спешил и написал про SBI и CBI, но суть вы поняли. Я даже специально выделил заглавные буквы в выражении жирным, а в итоге вместо R поставил I. Признаю ОПЕЧАТАЛСЯ.

Gudd-Head, так о том и речь. А у DX168B команды SBR и CBR в AVRStudio почему-то работают не так как должны)))))
Последний раз редактировалось ibiza11 Чт янв 27, 2011 13:04:49, всего редактировалось 2 раза.
Ставим плюсы: )
Аватара пользователя
ploop
Модератор
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

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

Сообщение ploop »

Ну а почему, в начале написали, что SBI\CBI применимо к РОН и в хелп меня посылают. Я его перелопатил уже вдоль и поперёк. Сначала осуждают команды SBR и CBR а потом говорят, что ими надо пользоваться. Вот как Студия посылает, если применить SBI\CBI к РОН:

Кто сказал? Мы с Gudd-Head этого не говорили. :dont_know:
Я изначально поднял эту тему, надеясь на внятный ответ. Но, не получив такового, пошел разбираться сам, убив вечер, но прояснив всю ситуацию. А дальше уже спорить начал :)
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

:) Вот скрин.
Изображение
Вложения
SCREEN.PNG
(19.2 КБ) 2180 скачиваний
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

:shock: беру все оскорбления обратно.
Изображение
Вложения
test.JPG
Вот мой скрин
(41.27 КБ) 2128 скачиваний
Последний раз редактировалось ibiza11 Чт янв 27, 2011 13:18:47, всего редактировалось 2 раза.
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ploop писал(а):Кто сказал? Мы с Gudd-Head этого не говорили. :dont_know:

Вы нет, на скрине видно. Посты править и я умею, и потом утверждать, что не говорил.
Изображение
Вложения
SG.png
(21.26 КБ) 1966 скачиваний
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

ibiza11 писал(а)::shock: беру все оскорбления обратно.

Ну вот и я не понимаю, что за косякс в моей студии. :dont_know: :shock:
Может где-то в заголовочнике он что-то не так принял? Там ведь тоже есть описания битов.
Ща гляну.
Последний раз редактировалось DX168B Чт янв 27, 2011 13:19:39, всего редактировалось 1 раз.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

DX168B писал(а):
ploop писал(а):Кто сказал? Мы с Gudd-Head этого не говорили. :dont_know:

Вы нет, на скрине видно. Посты править и я умею, и потом утверждать, что не говорил.
Изображение

Здесь то я причем??? Я утверждал, что не говорил? Или пост правил? То что я опечатался, я в следующем посте написал. Ploor ответил за себя и Gudd-Heada
Последний раз редактировалось ibiza11 Чт янв 27, 2011 13:23:14, всего редактировалось 1 раз.
Ставим плюсы: )
Аватара пользователя
DX168B
Друг Кота
Сообщения: 4468
Зарегистрирован: Вс янв 24, 2010 19:19:52
Откуда: Главный Улей России (Moscow)
Контактная информация:

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

Сообщение DX168B »

Выглядит пост ploopа так, как буд-то не только за Good_Headа говорит, но и за Вас. :)
Да всё нормально. :) Кстати, вспомнил. У меня недавно был сбойный сектор на HDD в районе Студии. Возможно это из-за него. Сектор восстановил, но Студию придётся как я понял переустанавливать.
I am DX168B and this is my favourite forum on internet!
Аватара пользователя
ibiza11
Поставщик валерьянки для Кота
Сообщения: 1900
Зарегистрирован: Сб фев 21, 2009 13:11:40
Откуда: Москва

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

Сообщение ibiza11 »

и все же бред, что компилятор воспринимает команды sbr и cbr так, как вы написали. Скрину не очень доверяю, значения регистров можно править самому в любой момент. Я вам не верю. И не понимаю зачем вы доказываете то, что опровержено в Helpe. (вы же его вдоль и поперек изучили ;) )
Ставим плюсы: )
Ответить

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