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

 
 
 
Reply to this topicStart new topic
> Вычитание целых чисел, от меньшего отнимаем большее
Saturan
сообщение Apr 9 2014, 09:31
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 17-01-07
Пользователь №: 24 515



Есть кусок кода определение длительности импульса с помощью 16бит счетчика
CODE
unsigned int x, y,z;
unsigned int time;
ISR (TIMER1_CAPT_vect)
{ z=ICR1;
if(bit_is_set(PIND, PD4))
{
x = z;
TCCR1B &= ~(1<<ICES1);
}
else
{
y = z;
TCCR1B |= (1<<ICES1);
time = (x-y);/
}

корректно ли вычислять длительность простым вычитанием из начального значения счетчика конечного ?
ведь может получится что y>x , а так же может быть X до переполнения а Y после переполнения .
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Apr 9 2014, 10:11
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Saturan @ Apr 9 2014, 11:31) *
корректно ли вычислять длительность простым вычитанием из начального значения счетчика конечного ?
Да, корректно. Только из конечного надо вычитать начальное. Допустим у вас начальное y = 0xffff, конечное x = 1. Тогда time = x - y = 1 - 0xFFFF = 1 - (-1) = 1+1 = 2.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Saturan
сообщение Apr 9 2014, 11:10
Сообщение #3





Группа: Новичок
Сообщений: 3
Регистрация: 17-01-07
Пользователь №: 24 515



да точно , конечное минус начальное, исправил код

Цитата(Saturan @ Apr 9 2014, 12:31) *
Есть кусок кода определение длительности импульса с помощью 16бит счетчика
CODE
unsigned int x, y,z;
unsigned int time;
ISR (TIMER1_CAPT_vect)
{ z=ICR1;
if(bit_is_set(PIND, PD4))
{
x = z;
TCCR1B &= ~(1<<ICES1);
}
else
{
y = z;
TCCR1B |= (1<<ICES1);
time = (y-x);/
}

корректно ли вычислять длительность простым вычитанием из начального значения счетчика конечного ?
ведь может получится что y>x , а так же может быть X до переполнения а Y после переполнения .



Спасибо большое !
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 03:32
Рейтинг@Mail.ru


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