Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: В чем подвох?
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Sirko
Не работает элементарный кусочек кода:
unsigned int boud = (14745600 / (16 * 2400)) - 1;

Если не использовать выражение, то все получается замечательно.

Такой вариант - функционирует.
unsigned int boud = 383;//(14745600 / (16 * 2400)) - 1;

И так тоже годится.
unsigned int boud = 16 * 2400;
boud = 14745600 / boud;
--boud;

Компилирую в AVRStudio 4.14 Build 589
(без оптимизации)
чип - mega8515
SysRq
Приведите все нужные константы к unsigned long. UL.
Sirko
Спасибо большое.

Так и есть.
prottoss
Цитата(Sirko @ Oct 19 2008, 08:06) *
Не работает элементарный кусочек кода:
unsigned int boud = (14745600 / (16 * 2400)) - 1;

Точнее вот такая формула, естественно с учетом сказанных выше рекомендации по приведению типов:

#define USART_BAUD_RATE_CONST(br) ((((CPU_CLOCK) / 16) + ((br) / 2 - 1)) / (br) - 1)
demiurg_spb
А мне кажется, что так нагляднее и точнее:
Код
#define BPS2UBRR(BITRATE)        ( (unsigned short)((F_CPU) / (16.0f * (BITRATE)) - 1 + 0.5f) )

Вдруг CPU_CLOCK не будет кратно 16:) Это вряд-ли, но всё же...
А так всегда гарантирован верный результат округления до целого положительного.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.