Однако, все равно, Вам очень признателен.
Ассемблер (ASM) для AVR в вопросах и ответах
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо! Уже откопал сам. )))
Однако, все равно, Вам очень признателен.
Однако, все равно, Вам очень признателен.
Станислав
- Реклама
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
ЕПРСТ. Очередной вопрос.
Вот есть у меня 4 байта в ОЗУ, каждый обозван каким-то словом.
Если я пытаюсь на них наложить маску (обрезать по маске), то мне хрен с маслом говорит... Только регистры можно так резать.
Что делать?
Все. нашел. С ОЗУ нихрена нельзя сделать, кроме как загрузить или считать...
Вот есть у меня 4 байта в ОЗУ, каждый обозван каким-то словом.
Если я пытаюсь на них наложить маску (обрезать по маске), то мне хрен с маслом говорит... Только регистры можно так резать.
Что делать?
Все. нашел. С ОЗУ нихрена нельзя сделать, кроме как загрузить или считать...
Станислав
- zero648
- Вымогатель припоя
- Сообщения: 650
- Зарегистрирован: Пн июн 18, 2012 12:01:04
- Откуда: Челябинская область, Копейск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
С помощью команды LDS загружаете байт из памяти в регистр, обрезаете регистр по маске и выгружаете его обратно в память командой STS:
LDS r16,ram1
andi r16,mask
STS ram1,r16
LDS r16,ram1
andi r16,mask
STS ram1,r16
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Да, в том-то и дело, что хотел освободить рабочих регистров... И сделать попроще... А тут как всегда, через... и тактов больше и времени.
еще и регистры опять заняты.
Станислав
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
error: Relative branch out of reach
Вот такую штуку выдала Студия. Теперь вопрос: "На сколько может команда BREQ и ей подобные скакать?"
З.Ы. Тупо не могу найти информацию или не внимательно смотрю...
Вот такую штуку выдала Студия. Теперь вопрос: "На сколько может команда BREQ и ей подобные скакать?"
З.Ы. Тупо не могу найти информацию или не внимательно смотрю...
Станислав
- Реклама
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18647
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Ассемблер (ASM) для AVR в вопросах и ответах
странно, в AVRASM.CHM, входящем в комплект Avrstudio 4.1x для каждой подобной команды написаноСКАЗОЧНИК писал(а):Тупо не могу найти информацию
т.е. прыгает он не далее 64 однословных команд.This instruction branches relatively to PC in either direction (PC - 63 ≤ destination ≤ PC + 64).
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Спасибо, добрый человек! 
З.Ы. Может еще тупость спрошу. Вот есть переменная, т.е. какое-то число в двоичном виде. МК ТИНИ2313, у которого нету деления и умножения, кроме как сдвиг влево/вправо.
Можно ли как-то по быстрому раскидать это число на сотни, десятки и единицы?
З.Ы. Может еще тупость спрошу. Вот есть переменная, т.е. какое-то число в двоичном виде. МК ТИНИ2313, у которого нету деления и умножения, кроме как сдвиг влево/вправо.
Можно ли как-то по быстрому раскидать это число на сотни, десятки и единицы?
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Код: Выделить всё
; Переделанная под себя программа преобразования от 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 в вопросах и ответах
Еще вопросик...
Не работает вот такая штука:
Если закомментировать нижнее сравнение (-55), то все работает для верхнего придела, иначе вообще не хочет работать.
Переменная ZUUM меняется кнопками простой Инкремент и Декремент. Если ушла ниже НУЛЯ, то начинает считать числа в дополнительном коде, что меня устраивает, только как сделать, чтобы не могла считать ниже чем -55?
Не работает вот такая штука:
Код: Выделить всё
; -------- Проверка выхода за приделы занчения ---------------
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:Переменная ZUUM меняется кнопками простой Инкремент и Декремент. Если ушла ниже НУЛЯ, то начинает считать числа в дополнительном коде, что меня устраивает, только как сделать, чтобы не могла считать ниже чем -55?
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
применяется команда neg и все как для положительногоЕсли ушла ниже НУЛЯ
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Не совсем понял...
Надо перевести из дополнительного кода? Или просто инвертировать переменную и сравнить ее с.... чем?

З.Ы. Еще ошибку у себя увидел... Он до сравнения с отрицательным вообще никогда не дойдет...
Наисправлялся.
Вот так, вроде надо:
Надо перевести из дополнительного кода? Или просто инвертировать переменную и сравнить ее с.... чем?
З.Ы. Еще ошибку у себя увидел... Он до сравнения с отрицательным вообще никогда не дойдет...
Вот так, вроде надо:
Код: Выделить всё
cpi ZUUM, 125 ; Сравниваем с наибольшим
brsh NORM ; Если больше или равно, то уходим на исправление
cpi ZUUM, -55 ; Иначе, Сравниваем с наименьшим
brlo NORMM ; Если мньше, то уходим на исправление
rjmp TT ; Иначе выходим вообще
NORM: ldi ZUUM, 125 ; Исправляем и уходим
rjmp TT
NORMM: ldi ZUUM, -55Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
neg делает из отрицательного числа - положительное. Что проще сравнить -1 или 1
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Все равно не понимаю... Если ушел ниже нуля, то пошли дополнительные коды, где старший разряд - знак числа (единица - минус). А чтобы перевести его в обычное число надо вычесть единицу, а затем уже инвертировать... А если я его просто инвертирую, то получится какое-то другое число?
З.Ы. Блин, сглючил программатор, залочил МК...
Теперь все разбирать. 
З.З.Ы. Пересобрал. Сделал негатив, потом в двоичном написал, один фиг не хочет работать.
З.Ы. Блин, сглючил программатор, залочил МК...
З.З.Ы. Пересобрал. Сделал негатив, потом в двоичном написал, один фиг не хочет работать.
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Команда CPI осуществляет знаковое сравнение, а команда BRLO осуществляет беззнаковое ветвление.
Кстати, команда BRSH тоже беззнаковая!!!BRLO – Branch if Lower (Unsigned)
Нет, надо проинвертировать и затем +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
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Если хочется иметь регулятор с отработкой и в 0 и в + и в - (DS18b20 к примеру) то для уменьшения мозготрепки можно контроль данных на больше/меньше делать с предварительно смещенной цифровой осью. Взять за условный 0 значение -55 а весь диапазон считать как 55+125=180 условных единиц уровня. Замер и обработка индикации выполняется в обычном режиме, а регулятор в приведенных к условным единичкам значениях.

Re: Ассемблер (ASM) для AVR в вопросах и ответах
Проще пользоваться имеющимися командами работы со знаковыми числами.
- СКАЗОЧНИК
- Идёт направо - песнь заводит, Налево - сказку говорит.
- Сообщения: 5000
- Зарегистрирован: Чт апр 21, 2011 17:55:50
- Откуда: Иркутск
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Елки палки... Тупизна моя зашкаливаетakl писал(а):BRLO осуществляет беззнаковое ветвление.
Это вроде же как перевести число в дополнительный код??? А если обратно, то и последовательность должна быть обратная? По крайней мере, у меня именно так работает.akl писал(а):проинвертировать и затем +1.
З.Ы. Сейчас буду пробовать новые операторы. ))) Спасибо.
З.З.Ы. Точно РАБОТАЕТ!
Еще раз спасибо всем кто откликнулся!
Станислав
Re: Ассемблер (ASM) для AVR в вопросах и ответах
akl писал(а):Проще пользоваться имеющимися командами работы со знаковыми числами.
Код: Выделить всё
sbrc temp,MSB_BIT
neg temp
cpi temp,...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
Однохренственно.akl писал(а):Нет, надо проинвертировать и затем +1.СКАЗОЧНИК писал(а):чтобы перевести его в обычное число надо вычесть единицу, а затем уже инвертировать...
Re: Ассемблер (ASM) для AVR в вопросах и ответах
В основном таки возможно и да...akl писал(а):Проще пользоваться имеющимися командами работы со знаковыми числами.
но регулируемый диапазон выбирает пользователь...
К примеру:
+1/-1 (средняя около нуля ходит)
или термостатируем в режиме нагреватель/холодильник объект на +37,
а температура в помещении от +20 до +35 (без кондиционера).


