Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Среднее значение 4х 8-битных регистров ?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
GeorgyBey
Приношу извинения если вопрос наивный, но для меня это хооби ...
8ми разрядный AVR, есть значения в 4х регистрах. Где их сложить, чтоб поделить на 4 и получить среднее значение.
В ассемблере.
kovigor
Цитата(GeorgyBey @ Dec 18 2015, 14:55) *
Где их сложить, чтоб поделить на 4 и получить среднее значение.

Сложить с помощью команд ADD и ADC и поместить результат в любые два регистра (конечно, не в те регистры, содержимое которых вы складываете). А потом поделить результат на 4, сдвинув его на два разряда вправо. Или я вопроса не понял ?

Вот пример из Атмеловской документации:

Код
; Example: Add R1:R0 to R3:R2
add r2,r0; Add low byte
adc r3,r1; Add with carry high byte
GeorgyBey
Спасибо! Т.е. никаких понятий "слово", как связанных двух регистрах, просто имеем "в уме" что сумма хранится в двух не связанных, независимых регистрах? Ну или СМЕЖНЫХ регистрах? А если слагаемое является однобайтным, то к нему искусственно цепляем нулевой старший байт.. так?
Александр1
Цитата(GeorgyBey @ Dec 18 2015, 16:45) *
...что сумма хранится в двух не связанных, независимых регистрах? Ну или СМЕЖНЫХ регистрах?

А если слагаемое является однобайтным, то к нему искусственно цепляем нулевой старший байт.. так?

Да
Да
При делении на 2 использовать команды ROR и LSR. С первой командой старшие байты, со второй - младшие. И так 2 раза (для деления на 4).
GeorgyBey
Спасибо еще раз! Я, правда, сделал "вручную" через "Т" - взял 0бит старшего (BST rX,0) сдвинул младший (LSR) и вставил в него 7й бит (BLD). Потом повторил с 1,битом старшего. Надеюсь это было "законно" sm.gif
zombi
Цитата(GeorgyBey @ Dec 18 2015, 20:01) *
Спасибо еще раз! Я, правда, сделал "вручную" через "Т" - взял 0бит старшего (BST rX,0) сдвинул младший (LSR) и вставил в него 7й бит (BLD). Потом повторил с 1,битом старшего. Надеюсь это было "законно" sm.gif

Абсолютно законно.
Только на одну команду больше.
BST,LSR,BLD vs LSR,ROR
kovigor
Цитата(GeorgyBey @ Dec 18 2015, 19:01) *
Спасибо еще раз! Я, правда, сделал "вручную" через "Т" - взял 0бит старшего (BST rX,0) сдвинул младший (LSR) и вставил в него 7й бит (BLD). Потом повторил с 1,битом старшего. Надеюсь это было "законно" sm.gif

Си не думаете выучить ?
GeorgyBey
Я когда-то и Паскаль учил-применял, потом ТурбоПаскалем баловался... Так что с основами алгоритмического и объектно-ориентированного программирования знаком. Под С нет задач. Пока все эти "регистры" и скачущая по ним информация в голове укладывается, я ее "вижу", вполне хватает асемблера...
PS
А вот по ходу дела - как народ решает проблему БОЛЬШИХ временных промежутков? Так, чтоб проснуться раз в полчаса-час, проконтролировать ситуацию и опять в сон.. Только второе устройство для побудок? Не циклы же гонять...
Alex11
Так таймер Вам в помощь. И далее по прерываниям от него еще один-два байта счетчика дополнительного. Просыпаетесь по таймеру, инкрементируете счетчик, сравниваете с требуемым пределом и либо дальше спать, либо работать.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.