Easyelectronics.ru

Электроника для всех
Текущее время: 23 сен 2019, 23:26

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 3 ] 
Автор Сообщение
 Заголовок сообщения: Логическая операция над 16-ричным числом.
СообщениеДобавлено: 19 янв 2015, 18:57 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 фев 2012, 13:44
Сообщения: 102
Здравствуйте. Есть код, который выполняет какие то логические приеобразования над значениями таймера счетчика.
Не могу понять, что он в итоге делает и для чего это нужно.
То что он вычитает, логически двигает и.т.д. я по командам понимаю. Не могу уловить саму суть преобразования.


Код:
 
IN r22,TCNT1L
IN r21,TCNT1H
CLC
SUBI R22,$FF
SBCI R21,$FF
SBCI R20,$FB;   В R20 записан 0   
RCALL SDVIG
RCALL SDVIG
RCALL SDVIG

      ****

SDVIG: LSR R22
          LSR R21
          BRCC SD1
          SBR R22,$80
SD1:    LSR R20
          BRCC SD2
          SBR R21,$80
SD2:    RET


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логическая операция над 16-ричным числом.
СообщениеДобавлено: 19 янв 2015, 19:43 
Старожил

Зарегистрирован: 19 мар 2013, 19:37
Сообщения: 2619
Откуда: Санкт-Петербург
Мог где-то ошибиться, но вроде так:

Пусть n = R20:R21:R22 (24-разрядная переменная)
n -= $FBFFFF // или n += 0x40001
3 раза SDVIG

где SDVIG:
n = n >> 1 (сдвиг вправо)

Итого
n = (n+0x40001)/8

P.S.: SDVIG сделан безобразно, человеком, не знающим про команду ROR. Компилятор C точно сгенерил бы лучший код.

UPD: ещё чуток подумал... если переписать формулу как
n = (n+1)/8 + 0x40000/8
или
n = (n+1)/8 + 0x8000
- видим, что R20 вообще нахрен не нужен, а суть кода - увеличить число на 1, сдвинуть на 3 бита вправо и установить старший бит:
n = (n+1)>>3 | 0x8000


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Логическая операция над 16-ричным числом.
СообщениеДобавлено: 01 фев 2015, 16:23 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 28 фев 2012, 13:44
Сообщения: 102
aamonster, большое спасибо=) Думал может есть какое то научное название этому, на вроде "преобразование в то то".


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB