QUOTE (dimka76 @ Feb 14 2012, 07:25)

Говорит не хватает скобки и мусор в конце строки.
А как же еще ассемблеру реагировать на сишный тернарный оператор "? :" ?
Максимум, что тут можно посоветовать - переписать ваш #define во что-то чисто арифметическое, например,
CODE
#define LSB(byte) ((byte) & -(byte)) // isolate rightmost '1'
#define BIT_WEIGHT(byte,pos) ((((byte) >> (pos)) & 1) * (pos))
#define CTZ(byte) (BIT_WEIGHT(byte, 1) + BIT_WEIGHT(byte, 2) + ... + BIT_WEIGHT(byte, 7))
#define FirstReceiverPin CTZ(LSB(ReceiverPin))
Возможно LSB и BIT_WEIGHT не самые удачные названия для этого макроса, но ничего в голову не приходит.
Хотя... Если вам FirstReceiverPin нужен только в контексте (1 << FirstReceiverPin), то можно упростить задачу:
CODE
#define RX_PIN_MASK ((ReceiverPin) & -(ReceiverPin))
ldi r16, RX_PIN_MASK