Кому интересно. Вот мой вариант. Внутри код для обработки погрызен. SETB, CLRB, BIT макросы для установки, сброса и проверки бита в байте message.
#define analyse_it 7 #define first_ten 6 #define start_rec 5 unsigned char message = 0; unsigned char mess_buf[387]; unsigned int index;
void message_process(void) { unsigned char c, lp; int i; c = _getchar(); /*printf(" %X%X ",c>>4,c&0x0F);*/ if (BIT(message,first_ten)) { switch © { case 0x10 : if (BIT(message,start_rec)) mess_buf[index++] = 0x10; break; case 0x03 : SETB(message,analyse_it); CLRB(message,start_rec); //....................................................................... //здесь собственно обработка принятого в буфер
break;
default : if BIT(message,analyse_it) { /*restart receive*/ SETB(message,start_rec); mess_buf[0] = c; index = 1; } } CLRB(message,first_ten); } else if (c == 0x10){ SETB(message,first_ten); } else if (BIT(message,start_rec)){ mess_buf[index++] = c; } }
Сообщение отредактировал Laptop - Dec 18 2005, 17:16
|