Цитата(ILYAUL @ Aug 15 2012, 23:41)

Т.е выделенное , выдается всегда при вкл питания, о чём скромно умалчивает DS. Прога настроена на отлавливание
R и
0D он есть хоть его и не видно. Так не хочется запускать таймер .... или крутить тупую задержку. Чего бы ещё придумать?

Что-нибудь типа такого:
Код
#define SENSOR_MAX_BYTE_QTY 12
struct TSonarData {
unsigned char RxState;
volatile unsigned char RxCounter;
volatile unsigned char Received;
unsigned char RxBuffer[SENSOR_MAX_BYTE_QTY];
} SonarData;
void RxCompleteInterrupt()
{
unsigned char new_byte=UDR;
switch (SonarData.RxState) {
case 0:
if (new_byte=='R' && Received==0) {
SonarData.RxState++;
SonarData.RxCounter=0;
}
break;
case 1:
if (new_byte>='0' && new_byte<='9') {
SonarData.RxBuffer[SonarData.RxCounter]=new_byte;
if (++SonarData.RxCounter>=SENSOR_MAX_BYTE_QTY)
SonarData.RxState=0;
}
else {
if (new_byte==0x0D) {
SonarData.Received=1;
}
SonarData.RxState=0;
}
break;
}
}
Цитата(ILYAUL @ Aug 15 2012, 23:41)

Так не хочется запускать таймер ....
P.S. Дополнительно по приёму первого символа строки ® можно бы запустить таймер на N миллисекунд, в прерывании которого сбросить приём, если байты почемуто перестали приходить.