реклама на сайте
подробности

 
 
> Обработка 19 разрядного числа.
Nosaer
сообщение Dec 2 2015, 04:52
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 6-02-15
Пользователь №: 84 967



Здравствуйте. Возможно глупый вопрос, но я окончательно запутался с арифметикой 16 и 8 битных значений.
16 разрядный таймер контроллера считает внешнии импульсы.
Периодически он переполняется, количество переполнений я считаю в отдельную переменную. (К сожалению все таймеры в контроллере задействованы, поэтому из двух 16 разрядных, сделать один 32 разрядный не получится.)
Итого, с учетом всех переполнений, у меня максимально может получится 19 разрядное число.
Которое мне нужно поделить на 8, то есть сдвинуть на 3 разряда вправо, чтобы оно стало 16 разрядным.
и затем вычесть из получившегося значения 0x07FF.

На ассемблере эту задумку я осуществить могу, с помощью команд LSR, SUBI, SBCI и оперируя тремя регистрами.
А на С не получается. Городить вставки ассемблера в код на С не хочу. Пользуюсь AVR Studio.

Надеюсь на вашу помощь, или хотя бы на ссылку на литературу где могу прочитать про это.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Nosaer
сообщение Dec 2 2015, 06:37
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 85
Регистрация: 6-02-15
Пользователь №: 84 967



Благодаря вашему ответу понял как лучше реализовать и что моя ошибка была в типе данных, решил использовать unsigned long
Спасибо=)


Сообщение отредактировал Nosaer - Dec 2 2015, 06:48
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Dec 2 2015, 07:25
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Nosaer @ Dec 2 2015, 09:37) *
Вот я получил после всех своих операций 16 разрядное число, как мне его можно разделить по разрядно на старший и младший байт?


Код
uint16_t x;
byte lo = x&0xff, hi = x>>8;

// или

union {
  uint16_t x;
  byte part[2];
};
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 10:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01342 секунд с 7
ELECTRONIX ©2004-2016