Вот как! На всякий случай
Повторю.
Цитата
Всё, разобрался.
Оказывается эта, извиняюсь за выражение, "тупая скотина" в лице препроцессора или компилятора не вычисляет значение CLOCK, а просто тупо подставляет строку в нужное место.
Например, вышеприведённое выражение принимает вид:
volatile unsigned long a = 480 * QUARTZ / CLOCKS
а потом уже компилятор пыжится посчитать:
volatile unsigned long a = 480 * 10000000 / 1000000
Естественно, после умножения идёт переполнение за 32 бита, и делению подлежат уже жалкие останки гигантской цифры...
Пришлось поставить скобки, теперь вроде всё нормально:
#define QUARTZ 10000000UL //Crystal quartz frequency
#define CLOCKS (QUARTZ/1000000) //tacts in microsecond
#define Wait(mksec) __delay_cycles(mksec*CLOCKS)
Wait(480);
На первый взгляд, какого чёрта делают скобки в таком простом выражении?
Ну вот откуда знаешь поначалу такие неявные мелочи?
Спасибо
zltigo Искал по слову макрос, по __delay_cycles не догадался

.