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

Обсуждаем контроллеры компании Atmel.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Спасибо! Уже откопал сам. )))
Однако, все равно, Вам очень признателен. :beer:
Станислав
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

ЕПРСТ. Очередной вопрос.
Вот есть у меня 4 байта в ОЗУ, каждый обозван каким-то словом.
Если я пытаюсь на них наложить маску (обрезать по маске), то мне хрен с маслом говорит... Только регистры можно так резать.
Что делать?

Все. нашел. С ОЗУ нихрена нельзя сделать, кроме как загрузить или считать... :cry:
Станислав
Аватара пользователя
zero648
Вымогатель припоя
Сообщения: 650
Зарегистрирован: Пн июн 18, 2012 12:01:04
Откуда: Челябинская область, Копейск

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

Сообщение zero648 »

С помощью команды LDS загружаете байт из памяти в регистр, обрезаете регистр по маске и выгружаете его обратно в память командой STS:

LDS r16,ram1
andi r16,mask
STS ram1,r16
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Да, в том-то и дело, что хотел освободить рабочих регистров... И сделать попроще... А тут как всегда, через... и тактов больше и времени. :facepalm: еще и регистры опять заняты.
Станислав
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

error: Relative branch out of reach

Вот такую штуку выдала Студия. Теперь вопрос: "На сколько может команда BREQ и ей подобные скакать?"

З.Ы. Тупо не могу найти информацию или не внимательно смотрю...
Станислав
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

СКАЗОЧНИК писал(а):Тупо не могу найти информацию
странно, в AVRASM.CHM, входящем в комплект Avrstudio 4.1x для каждой подобной команды написано
This instruction branches relatively to PC in either direction (PC - 63 ≤ destination ≤ PC + 64).

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

Мой уютный бложик... заходите!
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Спасибо, добрый человек! :beer:

З.Ы. Может еще тупость спрошу. Вот есть переменная, т.е. какое-то число в двоичном виде. МК ТИНИ2313, у которого нету деления и умножения, кроме как сдвиг влево/вправо.
Можно ли как-то по быстрому раскидать это число на сотни, десятки и единицы?
Станислав
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

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

; Переделанная под себя программа преобразования от UMUP
; http://electronix.ru/forum/index.php?s=&showtopic=10934&view=findpost&p=324208
; изменил по предложению avreal!!!
; формат старший-младший!!!

   LDS   R17,$70      ; HEX IN

   CLR   R30      ; BCD OUT 1'000,100
   CLR   R31      ; BCD OUT 10,1

   LDI   R28,8
bin8_bcd3:
   subi r31,-0x33   ;add 0x33
   sbrs r31, 3   ;if carry to bit 3
   subi r31, 3   ;subtract 3
   sbrs r31, 7   ;if carry to bit 7
   subi r31, 0x30   ;subtract 0x30

   subi r30,-0x33      ; \n" /*add 0x33*/
   sbrs r30, 3         ; \n" /*if carry to bit 3,*/
   subi r30, 3         ; \n" /*subtract 3*/
   sbrs r30, 7         ; \n" /*if carry to bit 7,*/
   subi r30, 0x30      ; \n" /*subtract 0x30*/

   LSL R17      ;shift input*/

   rol r31
   rol r30      ; \n" /*shift out buffer*/

   dec R28      ;\n"
   brne bin8_bcd3   ;repeat for all bits*/

   MOV   R29,R30   ; сотни в R29
   MOV   R30,R31   ; десятки и единицы в R30
   SWAP   R30   ; десятки в мл. тетраду
   ANDI   R30,$0F   ; выделить десятки
   ANDI   R31,$0F   ; выделить единицы

   RET
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Еще вопросик...
Не работает вот такая штука:

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

; -------- Проверка выхода за приделы занчения ----------      

      cpi ZUUM, 125       ; Сравниваем с наибольшим
      brsh NORM         ; Если больше, то уходим на исправление
      rjmp TT
      NORM: ldi ZUUM, 125   ; Исправляем и уходим дальше
      rjmp TT

      cpi ZUUM, -55      ; Сравниваем с наименьшим
      brlo NORMM         ; Если мньше, то уходим на исправление
      rjmp TT            
      NORMM: ldi ZUUM, -55

         
; -------- Конец проверки ----------

   TT:


Если закомментировать нижнее сравнение (-55), то все работает для верхнего придела, иначе вообще не хочет работать.
Переменная ZUUM меняется кнопками простой Инкремент и Декремент. Если ушла ниже НУЛЯ, то начинает считать числа в дополнительном коде, что меня устраивает, только как сделать, чтобы не могла считать ниже чем -55?
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

Если ушла ниже НУЛЯ
применяется команда neg и все как для положительного
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Не совсем понял...
Надо перевести из дополнительного кода? Или просто инвертировать переменную и сравнить ее с.... чем? :oops: :dont_know:

З.Ы. Еще ошибку у себя увидел... Он до сравнения с отрицательным вообще никогда не дойдет... :))) :))) :))) Наисправлялся. :facepalm:
Вот так, вроде надо:

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

cpi ZUUM, 125       ; Сравниваем с наибольшим
      brsh NORM         ; Если больше или равно, то уходим на исправление
      cpi ZUUM, -55      ; Иначе, Сравниваем с наименьшим
      brlo NORMM         ; Если мньше, то уходим на исправление
      rjmp TT            ; Иначе выходим вообще

      NORM: ldi ZUUM, 125   ; Исправляем и уходим
      rjmp TT
      NORMM: ldi ZUUM, -55
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

neg делает из отрицательного числа - положительное. Что проще сравнить -1 или 1
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Все равно не понимаю... Если ушел ниже нуля, то пошли дополнительные коды, где старший разряд - знак числа (единица - минус). А чтобы перевести его в обычное число надо вычесть единицу, а затем уже инвертировать... А если я его просто инвертирую, то получится какое-то другое число?

З.Ы. Блин, сглючил программатор, залочил МК... :kill: :facepalm: Теперь все разбирать. :cry:

З.З.Ы. Пересобрал. Сделал негатив, потом в двоичном написал, один фиг не хочет работать. :kill:
Станислав
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Команда CPI осуществляет знаковое сравнение, а команда BRLO осуществляет беззнаковое ветвление.
BRLO – Branch if Lower (Unsigned)

Кстати, команда BRSH тоже беззнаковая!!!
СКАЗОЧНИК писал(а):чтобы перевести его в обычное число надо вычесть единицу, а затем уже инвертировать...
Нет, надо проинвертировать и затем +1.

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

   cpi ZUUM, 125       ; Сравниваем с наибольшим
      brge NORM         ; Если больше или равно, то уходим на исправление
;      brsh NORM         ; Если больше или равно, то уходим на исправление
      cpi ZUUM, -55      ; Иначе, Сравниваем с наименьшим
      brlt NORMM         ; Если мньше, то уходим на исправление
;      brlo NORMM         ; Если мньше, то уходим на исправление
      rjmp TT            ; Иначе выходим вообще
NORM: ldi ZUUM, 125   ; Исправляем и уходим
      rjmp TT
NORMM: ldi ZUUM, -55
   RJMP   PC-1
TT:
   RJMP   TT

Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

Если хочется иметь регулятор с отработкой и в 0 и в + и в - (DS18b20 к примеру) то для уменьшения мозготрепки можно контроль данных на больше/меньше делать с предварительно смещенной цифровой осью. Взять за условный 0 значение -55 а весь диапазон считать как 55+125=180 условных единиц уровня. Замер и обработка индикации выполняется в обычном режиме, а регулятор в приведенных к условным единичкам значениях.
8)
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Проще пользоваться имеющимися командами работы со знаковыми числами.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

akl писал(а):BRLO осуществляет беззнаковое ветвление.

Елки палки... Тупизна моя зашкаливает :oops:
akl писал(а):проинвертировать и затем +1.

Это вроде же как перевести число в дополнительный код??? А если обратно, то и последовательность должна быть обратная? По крайней мере, у меня именно так работает.

З.Ы. Сейчас буду пробовать новые операторы. ))) Спасибо.

З.З.Ы. Точно РАБОТАЕТ! :music: А я два дня голову ломал... :facepalm:
Еще раз спасибо всем кто откликнулся! :beer:
Станислав
Аватара пользователя
ILYAUL
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср мар 28, 2012 21:45:24
Откуда: ВО

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

Сообщение ILYAUL »

akl писал(а):Проще пользоваться имеющимися командами работы со знаковыми числами.


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

sbrc temp,MSB_BIT
neg temp
cpi temp,...
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

akl писал(а):
СКАЗОЧНИК писал(а):чтобы перевести его в обычное число надо вычесть единицу, а затем уже инвертировать...

Нет, надо проинвертировать и затем +1.


Однохренственно.
Аватара пользователя
BOB51
Друг Кота
Сообщения: 15545
Зарегистрирован: Вт мар 16, 2010 22:02:27
Откуда: ДОНЕЦК

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

Сообщение BOB51 »

akl писал(а):Проще пользоваться имеющимися командами работы со знаковыми числами.

В основном таки возможно и да...
но регулируемый диапазон выбирает пользователь...
К примеру:
+1/-1 (средняя около нуля ходит)
или термостатируем в режиме нагреватель/холодильник объект на +37,
а температура в помещении от +20 до +35 (без кондиционера).
:roll:
Ответить

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