Ассемблер (ASM) для AVR в вопросах и ответах
ARV, излучатель - пищалка с корпуса ПК, не динамик, а мелкая круглая. Звучит тихо и не приятно. Не нравится, проще выковырять с будильника.
Немного файлов по зажиганию: ФУОЗ 2.2 + программа правки таблиц 0.987, монтажка
- Реклама
Каждая такая пищалка имеет собственную резонансную частоту , на которой она пищит громко и приятно. Так , что для начала ищите DS на нее
и при любом раскладе с пищалкой - от симметрии или асимметрии ШИМа ее звук не поменяется настолько, чтобы из неприятного стать приятным! речь только о проблеме ШИМа.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Сильно не пинайте, я сегодня не выспался.
Надо в зависимости от диапазона кода АЦП выполнить одну из N (пяти) процедур.
Кроме связки или аналога с использованием brge есть ли более изящное решение? Диапазоны в конечном итоге могут быть разной "ширины".
Надо в зависимости от диапазона кода АЦП выполнить одну из N (пяти) процедур.
Кроме связки
Код: Выделить всё
cpi ADC, 100
brlo command_1;
cpi ADC, 150
brlo command_2;
cpi ADC, 200
brlo command_3;
...[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- Сообщения: 290
- Зарегистрирован: Чт ноя 06, 2014 13:09:06
Gudd-Head, а куда уж "изящней"? Закона для диапазонов нет, значит про вычисление адреса перехода речи не идет.
Можно "делением", но у тебя N маленькая - много не выиграешь.
Типа так:
Можно "делением", но у тебя N маленькая - много не выиграешь.
Типа так:
Спойлер
Код: Выделить всё
; r24 - значение (0..50..100..150..200..255)
cpi r24, 150
brlo less_150
cpi r24, 200
brlo cmd_4
cmd_5:
; обработка [200..255]
...
cmd_4:
; обработка [150..200)
...
less_150:
cpi r24, 100
brlo less_100
cmd_3:
; обработка [100..150)
...
less_100:
cpi r24, 50
brlo cmd_1
cmd_2:
; обработка [50..100)
...
cmd_1:
; обработка [0..50)
...
- Реклама
Gudd-Head, если по времени не критично, то можно да же не париться при таком количестве диапазонов.
viiv уже подсказал. Древовидный поиск/сравнение - классика. Типа B-tree (Б-деревья).
Можно уменьшить количество сравнений в худшем случае.
viiv уже подсказал. Древовидный поиск/сравнение - классика. Типа B-tree (Б-деревья).
Можно уменьшить количество сравнений в худшем случае.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Сомневаюсь насчёт изящности, но может так.
Спойлер
Код: Выделить всё
.equ N5=150
.equ N4=140
.equ N3=130
.equ N2=120
.equ N1=110
.equ N0=00
.CSEG
.ORG $00
START:
LDS XL,$60
CLR ZH
LDI ZL,LOW(COMP_N*2)
COMPARE:
CPI ZL,LOW(COMP_N_END*2)
BRSH COMPARE_OUT
LPM R0,Z+
CP XL,R0
BRLO COMPARE
COMPARE_OUT:
;преобразование адреса для последующей обработки
;..................
;..................
;..................
; IJMP
RJMP START
;*****************************
COMP_N:
.DB N5,N4,N3,N2,N1,N0
COMP_N_END:
;*****************************
.EXIT
Пока оставил обычным перебором вроде работает.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
IMHO, правильно сомневаетесьakl писал(а):Сомневаюсь насчёт изящности, но может так.
Ни по скорости, ни по размеру кода, ни по читаемости кода не лучше. По последней характеристике, так это вообще можно за обфускацию принять.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
"...Сдвинь корону набок, чтоб не висла на ушах."Kavka писал(а):Ни по скорости, ни по размеру кода, ни по читаемости кода не лучше.
Не ссорьтесь. Обилие вариантов - это всегда хорошо. И каждый будет подходить под свою задачу.
Кто-то почитает, выберет и спасибо скажет.
Кто-то почитает, выберет и спасибо скажет.
Прибор, защищённый предохранителем, сгорает первым, защитив предохранитель. Закон Мерфи.
Чёт я перемудрил.
BRGE для знаковых данных, BRLO — для беззнаковых. Так что без ухищрений получится только с BRLO
BRGE для знаковых данных, BRLO — для беззнаковых. Так что без ухищрений получится только с BRLO
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Был бы смайлик, тогда всё было бы на своих местах. Может добавите смайлик?akl писал(а):"...Сдвинь корону набок, чтоб не висла на ушах."
PS: А я и смайликов наставил, и "IMHO" написал... Видать выразительности средств форума недостаточно и надо как-то по другому указывать на не серьёзность утверждений и скромность высказываний.
Когда уже ничего не помогает - прочтите, наконец, инструкцию.
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
Лучший оптимизатор находится у вас между ушей. (Майкл Абраш, программист Quake и QuakeII)
Избыток информации ведёт к оскудению души - Леонтьев А. (сказано в 1965 г.)
- Сообщения: 73
- Зарегистрирован: Сб авг 23, 2014 21:49:24
Всем привет. Вопрос следующий: как записать 16 розрядное число в 2 регистра да так, чтобы его можно было использовать как счетчик секунд, который настраивается кнопками и потом вести отсчет?
любым известным вам способом - совершенно без разницы, как именно.Дима_Медвед писал(а):как записать 16 розрядное число в 2 регистра
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 73
- Зарегистрирован: Сб авг 23, 2014 21:49:24
Смысл не в простой записи, а в возможности отсчета секунд, к примеру 9999сек. Как организовать алгоритм счетчика секунд, который будет их отсчитывать.ARV писал(а):любым известным вам способом - совершенно без разницы, как именно.
вы хотите увидеть ассемблерный листинг, который реализует вашу задумку? или о чем идет речь?
ведь "алгоритм" прост до безобразия:
1. заносим в регистровую пару нужное число
2. настраиваем таймер на прерывания 1 раз в секунду (или чаще)
3. создаем обработчик прерывания, в котором уменьшаем содержимое регистровой пары
4. когда оба регистра этой пары станут равны 0 - делаем, что хотим (время истекло)
что у вас вызывает затруднения?
ведь "алгоритм" прост до безобразия:
1. заносим в регистровую пару нужное число
2. настраиваем таймер на прерывания 1 раз в секунду (или чаще)
3. создаем обработчик прерывания, в котором уменьшаем содержимое регистровой пары
4. когда оба регистра этой пары станут равны 0 - делаем, что хотим (время истекло)
что у вас вызывает затруднения?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
- Сообщения: 73
- Зарегистрирован: Сб авг 23, 2014 21:49:24
Как оформить обработчик прерываний, тоесть как правильно задать алгоритм уменшения регистровой пары.ARV писал(а):что у вас вызывает затруднения?
Дима_Медвед писал(а):к примеру 9999сек
Код: Выделить всё
ldi r30,low(9999)
ldi r31,high(9999)1. декремент младшего регистра.Дима_Медвед писал(а):алгоритм уменшения регистровой пары
2. если появился перенос, то младший регистр обнулить и декремент старшего регистра.
Последний раз редактировалось pyzhman Вт апр 21, 2015 13:39:30, всего редактировалось 1 раз.
Docendo discimus
да какой алгоритм уменьшения регистровой пары может быть?! вычесть из "младшего" регистра 1, если флаг переноса установлен - вычесть 1 из "старшего"?! в ассемблерных командах даже "если" не нужно, ибо есть команды вычитания сразу с учетом переноса...
вы не темните, прямо говорите, что не понятно. или давайте ваш код на рассмотрение и поиск ошибок в нем.
вы не темните, прямо говорите, что не понятно. или давайте ваш код на рассмотрение и поиск ошибок в нем.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!


