Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Вычитание целых чисел
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Saturan
Есть кусок кода определение длительности импульса с помощью 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 после переполнения .
Сергей Борщ
Цитата(Saturan @ Apr 9 2014, 11:31) *
корректно ли вычислять длительность простым вычитанием из начального значения счетчика конечного ?
Да, корректно. Только из конечного надо вычитать начальное. Допустим у вас начальное y = 0xffff, конечное x = 1. Тогда time = x - y = 1 - 0xFFFF = 1 - (-1) = 1+1 = 2.
Saturan
да точно , конечное минус начальное, исправил код

Цитата(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 после переполнения .



Спасибо большое !
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.