Цитата(AndryG @ Feb 27 2015, 00:13)

#define MB_TIMER_PRESCALER 64
...
// не растет кокос

#define MB_OCR_T25 (F_CPU / MB_TIMER_PRESCALER * (11 / MB_BAUD_RATE + 0.00075))
...
Компилятор считает не то, что хочется. Результат выходит буд-то "11 / MB_BAUD_RATE" вообще нет.
Компилятор поступает совершенно правильно, полагая, что выражения "11 / MB_BAUD_RATE" вообще нет, поскольку в целых числах
11 / 64 = 0
А если хотите, чтобы результат получился дробным, то пишите так:
11.0 / MB_BAUD_RATE
Но с дробью
F_CPU / MB_TIMER_PRESCALER
у вас та же история - дробную часть вы теряете.
Цитата(AndryG @ Feb 27 2015, 00:13)

// тут я вроде как разобрался как на форуме советовали: сперва умножать побольше и потом делить поменьше
#define MB_OCR_T25 (F_CPU / MB_TIMER_PRESCALER * 11 * 25 /10 / MB_BAUD_RATE)
Ну, так и делайте, как вам советовали на форуме, а то, что вы написали, этому совету противоречит, т.к там уже вторая операция - деление.
Но если последовать тому совету буквально, то у вас возникнет переполнение произведения в разрядной сетке целого.
Поэтому было бы лучше определить F_CPU как long, чтобы произведение не было урезанным.
Тогда оно будет выглядеть так:
#define F_CPU 8000000L
#define MB_OCR_T25 (F_CPU * 11 * 25 / 10 / MB_BAUD_RATE / MB_TIMER_PRESCALER)
Или еще (uint8_t) туда добавить, чтобы компилятор warning не выдавал:
#define MB_OCR_T25 ((uint8_t)(F_CPU * 11 * 25 / 10 / MB_BAUD_RATE / MB_TIMER_PRESCALER))