Судя по тому, что автор темы поместил точку с запятой в конец части строк с define, он знает толк в маршрутах по граблям. Мы ещё не видели текста, где define используются.
Автору: посмотрите как подобные вещи делаются в правильных проектах:
Код
#define DISPLAY_BUS_DATA_SET(v) do { \
LCD_DATA_PORT = \
(LCD_DATA_PORT & ~ LCD_DATAS_BITS) | \
(((v) << LCD_DATAS_BIT_LOW) & LCD_DATAS_BITS); \
} while (0)
Код
#define LCD_STROBE_PORT_S(v) do { TARGET_PORT_S(7, v); } while (0)
#define LCD_STROBE_PORT_C(v) do { TARGET_PORT_C(7, v); } while (0)