while ( !(UCSRA&0x40) && (i‹10000) )
Очень странная конструкция. Все равно i оптимизатор выкинет, да и зачем задержка?
Вообще зачем ждать конца передачи непонятно, тем более это просто "эхо".
И UCSRA&0x40 лучше делать как (UCSRA&(1‹‹TXC)) это куда удобнее проверять. Вы так делаете с таймером, почему же UART не повезло?
Попробуйте не останавливать таймер:
Код:
|
if( isCharAvailable() == 1 ) Если получен чар с ПК
{
data=receiveChar();
sendChar(data); //отправляем на комп, для проверки
OCR0A=data; Записываем новое значение для ШИм
}
}
return 0;
} |
Зачем проверять включены ли прерывания, если у Вас нет обработчиков?
Отправка байта может быть примерно такой:
Код:
|
void sendChar(char data)
{
while(!(UCSRA & (1‹‹UDRE)){};
UDR = data;
} |