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

Обсуждаем контроллеры компании Atmel.
Ответить
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ILYAUL писал(а):

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

Sbr Flags,1<<MSB|1<<LSB|1<<3
Плиз. А сдвиги Вам считать не надо , компил сам разберётся
Я имел ввиду, в моем варианте, несколько бит за раз не получится..... Если пользоваться макросами:

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

BITSET Flags,MSB
BITRES Flags,MSB
Реклама
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

SBR - Set Bit in Register
CBR - Clear Bit in Register

ИМХО не сложно запомнить...

Можно продолжить:
SBRS - Skip if Bit in Register Set
SBRC - Skip if Bit in Register Clear
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

shads писал(а):Я имел ввиду, в моем варианте, несколько бит за раз не получится..... Если пользоваться макросами:

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

BITSET Flags,MSB
BITRES Flags,MSB
Во , точно . уберите их нафинг. Столько места сразу спасёте во flash
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ploop писал(а):SBR - Set Bit in Register
CBR - Clear Bit in Register

ИМХО не сложно запомнить...
Да это то понятно, я имел ввиду эти: стрелочки, скобочки, палочки.....

Хотя для винды когда на С пишу, они меня не напрягают..... Странно :)
Реклама
Эиком - электронные компоненты и радиодетали
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

shads писал(а):Да это то понятно, я имел ввиду эти: стрелочки, скобочки, палочки.....
Есть такое понятие в ASМ - Операторы вот читайте
Вложения
Asm_AVR_rus.pdf
(930.92 КБ) 12872 скачивания
Реклама
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ILYAUL писал(а):Есть такое понятие в ASМ - Операторы вот читайте
Прикольная справка, с примерчиками, надо будет подтянуться.....
Реклама
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

Предупреждение получили, а правила опять нарушаем?
ploop

Плиз
Вложения
Система команд AVR RISC8.pdf
(687.46 КБ) 316 скачиваний
Опытный кот
Аватара пользователя
Сообщения: 882
Зарегистрирован: Ср фев 22, 2012 01:25:21

Сообщение shads »

ILYAUL писал(а):Система команд AVR RISC8.pdf
Интересно, а что было до 165 страницы?

Какие здесь модераторы внимательные, прям муха не проскочит.....
Предупреждение получили, а правила опять нарушаем?
Что называется в раж входим.....
Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

shads писал(а):интересно, а что было до 165 страницы?

Что называется в раж входим.....
Не знаю , так достался.
Чувствую забанят нас сегодня :)))

Просто чаще надо нажимать эту кнопку: Изображение
Тогда не забанят. А так да, скоро кто-то нарвётся.
ploop
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

Держит паяльник хвостом
Аватара пользователя
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

Сообщение ILYAUL »

BOB51 писал(а):а просто дать ссылки:
Сегодня ссылки есть завтра их может и не быть. К тому же они могут и устареть.Т.ч. предпочитаю хранить доки у себя . И что бы давать ссылки на английские источники , надо быть всё таки увереным в том , что тот кому их дают , хоть чуть -чуть разумеет на сём языке. А тот так , как мертвому припарка.
Кстати последнюю версию можно найти www.atmel.com
Друг Кота
Аватара пользователя
Сообщения: 15615
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

Сообщение BOB51 »

for ILYAUL
Заниматься электроникой без знаний английского (хотя-бы со словарем) просто нереально, тем более, что попасть на сей сайт можно только с помощью компьютера, что уже подразумевает знание иностранных языков :tea:
Относительно ссылок:
если Вы их смотрели, то первая на самое последнее описание системы команд указывает, а вторая не первоисточник Вашего "Asm_AVR_rus.pdf" :wink:
При всей моей нелюбви к платному авторскому праву на публикуемое в интернет изданиях, по возможности, первоисточник надо всё-же указывать - из уважения к автору и к тем, кто первым его публикацию доступной сделал!
Другое дело - пересылка лично кому-то за пределами общественного доступа - на этом форуме для таких целей есть "ЛС" , да и e-mail никто пока еще не запрещал :beer:
А вот давать ссылку на сайт "взагали" для поиска конкретного datasheet или другого материала - не очень то и корректно - у новой редакции атмел весьма хитроумный способ построения, если первый раз посетить или не знать особенностей "где чего искать", то очень просто и не найти... 8)
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

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

Сообщение BOB51 »

тогда начинающий спец по МК мой котейко - лапками старается детальки на столе перекладыавть и иногда кнопки на клаве нажимает, да за курсором на мониторе охотится :)))
Родился
Сообщения: 7
Зарегистрирован: Вс май 27, 2012 17:43:37

Сообщение мелкая »

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

randomize:   MOV R30,random1   ;N=X
         MOV R31,random2

         LSL   random1      
         ROL   random2
         LSL   random1     
         ROL   random2

         ADD   R30,random1  
         ADC   R31,random2

         LSL   random1    
         ROL   random2
   
         ADD   R30,random1   
         ADC   R31,random2

         LSL   random1     
         ROL   random2
         LSL   random1      
         ROL   random2
         LSL   random1    
         ROL   random2

         ADD   R30,random1   
         ADC   R31,random2

         ADIW   R30,1   
      
         MOV   random1,R30  
         MOV   random2,R31
         

         ANDI   R31,0xFE  
         CPI   R31,0xC0

         BRCC   randomize
                           
         SWAP  R31
         LSR   R31
         INC   R31           
         MOV   random,R31
Может кто нибудь объяснит как изменить код что бы получить интервал 1)0-6 2)0-9
X(i+1)= ( A*X(i) + B) mod 65536
A= 77 (A mod 4= 1)
B= 1 нечетное
т.е мне надо выставить m=10 a=1 b=3 получится:
0,3,6,9,2,5,8,1,4,7,0
Длина периода 10
Но никак не получается реализовать!
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Если реализовать алгоритм получения остатка от деления - то все получается просто - A mod 10 дает результат 0..9.

Чтобы не заморачиваться, оставляешь от результата младшие 4 бита, и вычитаешь из числа "10 = 0x0A" пока результат не станет меньше или равен 9. Для 4 бит это 0 или 1 раз.
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Вс май 27, 2012 17:43:37

Сообщение мелкая »

А можно сразу на моем примере расписать??? а то очень нужно...... боюсь напутать....
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич

Сообщение Alexeyslav »

Результат куда ложится?

Получаешь результат в виде байта 0..255 (это может быть любой частью регистра сдвига на котором основан ГСЧ), копируешь его в отдельный регистр, например в R16 (любой из R16..R31)

Затем...

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

ANDI R16, 0x0F
loop:
CPI R16, 0x0A      ; - это константа до которой надо ограничить результат.
BRLO no_correct
SUBI R16, 0x0A   ; - это та же самая константа
RJMP loop            ; в данном случае можно обойтись и без этой строчки 
                          ; т.к. вычитание максимум надо выполнить только один раз
                          ; Но если применять другие параметры(константу меньше 
                          ; или ровно 8) - может понадобится
no_correct:
Контактная информация:
Родился
Сообщения: 7
Зарегистрирован: Вс май 27, 2012 17:43:37

Сообщение мелкая »

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

randomize:	MOV R30,random1   ;N=X
			MOV R31,random2

			LSL   random1      ;*2
			ROL   random2
			LSL   random1      ;*4
			ROL   random2

			ADD   R30,random1   ;N=N+X*4
			ADC   R31,random2

			LSL   random1     ;*8
			ROL   random2
   
			ADD   R30,random1   ;N=N+X*8
			ADC   R31,random2

			LSL   random1     ;*16
			ROL   random2
			LSL   random1      ;*32
			ROL   random2
			LSL   random1      ;*64
			ROL   random2

			ADD   R30,random1   ;N=N+X*64  èòîãî N= X*77
			ADC   R31,random2

			ADIW   R30,1   ;N=N + 1

			MOV   random1,R30   ;X=N
			MOV   random2,R31

		;	ANDI   R31,0xE0   ;xxx0 0000
		;	CPI   R31,0xC0

		;	BRCC   randomize
			                  ; 0...5,0 0000
		
			ANDI R31, 0x0F
loop:		        CPI R31, 0x0A     
			BRLO next
			SUBI R31, 0x0A 
			rjmp loop

next:		SWAP  R31
			LSR   R31
		;	INC   R31            ;0000 0,1...6
			MOV   random,R31
Я правильно сделала? числа выводится только 0,5,8(
Держит паяльник хвостом
Сообщения: 933
Зарегистрирован: Ср апр 13, 2011 11:09:20
Откуда: Екатеринбург

Сообщение Alkul »

мелкая писал(а):Может кто нибудь объяснит как изменить код что бы получить интервал 1)0-6 2)0-9
под "интервалом" тут понимается количество итераций?
Ответить

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