Цитата(DenisIV @ Dec 26 2008, 00:27)

Попробуйте разделить все три процедуры на строчки и поймёте где трабл.
Разделил. Ругается на оба знака присваивания:
Цитата
../main.c:139: error: expected expression before '=' token
../main.c:144: error: expected expression before '=' token
Цитата(DenisIV @ Dec 26 2008, 00:27)

Кстати, посмотрите, byte может у вас определено ранее #defin'ом как unsigned char? Может просто имя переменной поменять?
Не-а, не в этом дело...
Цитата(DenisIV @ Dec 26 2008, 00:27)

Ксати, глотнул пива, идея пришла: А не прокатит ли такая конструкция:
Код
...
(Я даже себе в библию программиста запишу lol.gif )
Такая нет. Зато прокатит эта, записывайте...
Код
void transmit_byte(unsigned char const *byte, unsigned char direct){
unsigned char mask;
for (mask=(direct)? 1:0x80;mask;delay_us(x),mask=(direct)? mask<<1:mask>>1)
PORTW=(*byte&mask)? PORTW|(1<<BIT):PORTW&~(1<<BIT);
}
Тока нас застрелить могут за такую конструкцию...

Цитата(Сергей Борщ @ Dec 26 2008, 01:40)

Вопроса не понял...
Про С++ в смысле
Цитата(Сергей Борщ @ Dec 26 2008, 01:40)

Код
...
(byte & bitmask)? PORTD | (1<<BIT): PORTD & ~(1<<BIT);
...
Правильно, так без знаков присваивания компилится (первый раз у Вас они были), только не работает, надо:
Код
PORTD=(byte & bitmask)? PORTD | (1<<BIT): PORTD & ~(1<<BIT);
Любой, заслуживающий внимания, опыт приобретается себе в убыток...