Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей...

 
Опции темы
Непрочитано 25.11.2007, 01:56  
retas
Прописка
 
Регистрация: 02.05.2006
Сообщений: 171
Сказал спасибо: 97
Сказали Спасибо 43 раз(а) в 20 сообщении(ях)
retas на пути к лучшему
По умолчанию ...взять и поделить (двухбайтное число).

Может кто подскажет как поделить двухбайтное число - былоб однобайтное,дёрнул бы на разряд на право и все дела,а как дёрнуть двухбайтное (никаких запятых,на asm).
Спасибо.
Реклама:
retas вне форума  
Непрочитано 25.11.2007, 02:27  
vdlab
Гражданин KAZUS.RU
 
Аватар для vdlab
 
Регистрация: 17.07.2006
Адрес: PV.DP.UA
Сообщений: 620
Сказал спасибо: 3
Сказали Спасибо 60 раз(а) в 48 сообщении(ях)
vdlab на пути к лучшему
По умолчанию

Телепаты в отпуске, поэтому хоть бы указал какой контроллер, на сколько делить...
Я так понимаю нужно делить на 2? Нет ничего проще - сдвигаешь вправо старший байт, потом младший, две команды(ну это для ПИКов, для АВР и других точно не знаю, но все примерно также должно быть).
__________________
Если ты читаешь это - значит тебе нечем заняться...
vdlab вне форума  
Непрочитано 25.11.2007, 02:56  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: ...взять и поделить (двухбайтное число).

Сообщение от retas
былоб однобайтное,дёрнул бы на разряд на право и все дела,а как дёрнуть двухбайтное (никаких запятых,на asm).
Если сдвигами, значит степень двойки. Так и тут та же история, только нужно позаботиться, чтобы бит 0 старшего байта попал в бит 7 младшего, вот и вся недолга. Обычно, в асме для этого используют инструкции сдвига через флаг переноса - выдвигаемый бит попадает в CarryFlag, а в следующей инструкции - вдвигаемый бит берется из CarryFlag'а. Перед всей операцией сдвига нужно очистить флаг переноса, а-то, он попадет в 15-й бит результата.
Сообщение от vdlab
Нет ничего проще - сдвигаешь вправо старший байт, потом младший
А вот так делать не следует - результат будет ошибочным (даже для пиков). Кстати, если результат неважен, то неверно и то утверждение, что "Нет ничего проще" - тогда уж проще вообще ничего не делать - результат будет столь же неверным.
tempora вне форума  
Непрочитано 25.11.2007, 09:36  
nokazus
Вид на жительство
 
Регистрация: 05.09.2006
Сообщений: 360
Сказал спасибо: 0
Сказали Спасибо 3 раз(а) в 3 сообщении(ях)
nokazus на пути к лучшему
По умолчанию

Арифметика для AVR. Взята из аппноутов.
Удачи

Прикрепленный файл: 8217750.rar
nokazus вне форума  
Непрочитано 25.11.2007, 10:38  
NemoCut32
Гражданин KAZUS.RU
 
Регистрация: 16.12.2004
Сообщений: 587
Сказал спасибо: 13
Сказали Спасибо 23 раз(а) в 9 сообщении(ях)
NemoCut32 на пути к лучшему
По умолчанию Re: ...взять и поделить (двухбайтное число).

Сообщение от tempora
Сообщение от vdlab
Нет ничего проще - сдвигаешь вправо старший байт, потом младший
А вот так делать не следует - результат будет ошибочным (даже для пиков). Кстати, если результат неважен, то неверно и то утверждение, что "Нет ничего проще" - тогда уж проще вообще ничего не делать - результат будет столь же неверным.
Вопрос. Почему деление на 2 нельзя заменять сдвигом на 1 вправо? Я везде так пользуюсь для сокращения времени работы и кода. Операция сдвига выполняется существенно быстрее чем операция деления. Можно поподробней. Сдвиг ес-но не циклический.
NemoCut32 вне форума  
Непрочитано 25.11.2007, 11:44  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию

простите, никакой ошибки. Сдвигается первым именно старший байт - сдвигом, учитывающим перенос -заем
Код:
95:                unsigned int q=0x4181;
   0BD    3081     MOVLW 0x81
   0BE    1283     BCF 0x3, 0x5
   0BF    1303     BCF 0x3, 0x6
   0C0    00A4     MOVWF 0x24
   0C1    3041     MOVLW 0x41
   0C2    00A5     MOVWF 0x25
96:                q ›› =1; 
   0C3    1003     BCF 0x3, 0 // чистим бит переноса 
   0C4    0CA5     RRF 0x25, F //сдвигаем старший
   0C5    0CA4     RRF 0x24, F//сдвигаем младший, учитывая бит переноса от старшего, который попадает в D7 младшего
urry вне форума  
Непрочитано 25.11.2007, 12:14  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
nml на пути к лучшему
По умолчанию

Сообщение от urry
Т.е. сначала сдвигаем младший, затем старший - и бит заема-переполнения старшего байта идет в д7 младшего.
Все было верно раньше сказано. Первым сдвигается вправо старший! При этом используется команда арифметического сдвига. После выполнения этой команды мл. бит старшего остается в С разряде. Второй выполняется комнада циклического через С сдвига младшего - она задвигает С в ст. разряд

Для АВРок это выглядит так:
Код:
asr Rhi
ror Rlo
PS меня уже опередили
nml вне форума  
Непрочитано 25.11.2007, 12:19  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию Re: ...взять и поделить (двухбайтное число).

Сообщение от NemoCut32
Вопрос. Почему деление на 2 нельзя заменять сдвигом на 1 вправо?
А почему этот вопрос адресуется мне? Я как раз давал последовательность действий со сдвигом вправо, а не с делением, которого, кстати, в ассемблере чаще всего и нетути.

Сообщение от urry
... здесь имелась в виду ошибка - ...
Бит заема старшего байта после сдвига должен уйти в старший битт младшего. Т.е. сначала сдвигаем младший, затем старший - и бит заема-переполнения старшего байта идет в д7 младшего.
Дружище, ты сам себя запутал! В воскресенье утром, впрочем, это даже хорошо!
Если сдвигать (вправо, не так ли?) сначала младший, то его нулевой бит попадет в CF, а со следующей инструкцией - в старший бит старшего байта (там же тоже будет сдвиг вправо, не так ли?).
Я говорил совсем о другой ошибке... Даже если ограничиваться пиками младших и средних моделей (про старшие ничего не знаю), где всего один способ сдвигать - через CF, то всё равно описанная последовательность действий содержит мину случайного действия - человек забыл предусмотреть очистку флага переноса перед началом сдвигов... а процессор совсем не так догадлив, как нам того хотелось бы - если после предыдущих операций флаг будет установлен, проц, вопреки нашим планам, таки-засунет его, нимало не мохая, в старший бит результата! И будет потом человек, поверивший vdlab'у, дооолго дебажить свой кристалл, чтобы обнаружить эту трудноуловимую и неповторяющуюся ситуацию. Как говорится - дьявол кроется в мелочах! Меньше бита в этом алгоритме ничего нет, но разделив, скажем, 256 на 2, будет несколько непонятно получать иногда 128, а иногда - 32896. 8O


Добавлено: Ого, оказывется все в сборе!
tempora вне форума  
Непрочитано 25.11.2007, 12:35  
tempora
Почётный гражданин KAZUS.RU
 
Регистрация: 10.01.2007
Сообщений: 3,412
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
tempora на пути к лучшему
По умолчанию

Сообщение от nml
Для АВРок это выглядит так:
Код:
asr Rhi
ror Rlo
Во-во, именно! Сдвиги-то бывают раазные!
tempora вне форума  
Непрочитано 25.11.2007, 13:09  
urry
Почётный гражданин KAZUS.RU
 
Аватар для urry
 
Регистрация: 06.02.2007
Сообщений: 1,340
Сказал спасибо: 3
Сказали Спасибо 106 раз(а) в 66 сообщении(ях)
urry на пути к лучшему
По умолчанию Re: ...взять и поделить (двухбайтное число).

Сообщение от tempora
.
Сообщение от vdlab
Нет ничего проще - сдвигаешь вправо старший байт, потом младший
А вот так делать не следует - результат будет ошибочным (даже для пиков).
urry вне форума  
 

Закладки
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Число витков трансформатора для развязки звуковых частот Laksus Аудиотехника 6 07.07.2009 15:49
Proteus, где взять? pirat_os Proteus, KiCAD и другие ECAD 12 25.02.2008 09:04
*.h файлы, где взять Faworit Микроконтроллеры, АЦП, память и т.д 10 31.03.2007 23:38
Proteus, где взять? pirat_os Proteus, KiCAD и другие ECAD 0 23.02.2007 22:07
Proteus, где взять? pirat_os Proteus, KiCAD и другие ECAD 0 23.02.2007 22:06


Часовой пояс GMT +4, время: 08:41.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot