ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 июля
13104 Топик полностью
ASDFS, USB-гуру (05.08.2004 15:05, просмотров: 130) ответил :((((( на Это один человек за рабочий день?
Какого кода? Обычно он размазан по проекту типа обычно приемник в прерывании, обработчик протокола где-нить в основном цикле, плюс кучка ушей специфичных для проца, задачи, протокола. Вот примерчик собсно приемника из старого проекта - с адресацией, байтстаффингом, контролем пакетов и т.п.
//void UART_RX(void)
{

	_i = RCREG;

	if (_i == UART_Address) {

		UART_State = 1;
		UART_CRC = UART_Address;
		UART_ptr = 0;

	} else if (_i == 0x7D) {

		UART_State = 0;

	} else {

		if (UART_ptr >= Max_RX_String_Length) {
			UART_State = 0;
		}

		switch (UART_State) {
		default:
			UART_State = 0;
		case 0:
			break;

		case 1:
			switch (_i) {
			case 0x7F:
				UART_State = 2;
				break;

			case 0x7E:
				UART_State = 0;
				UART_ptr--;
#ifdef __UART_CRC__
				UART_CRC -= RX_Buffer[UART_ptr];
				if (RX_Buffer[UART_ptr] == UART_CRC)
#endif
				{

#include "..\network.thr\protocol.c"

				}
				break;

			default:
				RX_Buffer[UART_ptr++] = _i;
				UART_CRC += _i;
				break;
			}
			break;

		case 2:
			UART_State = 1;
			switch (_i) {
			case 0x00:
				RX_Buffer[UART_ptr++] = 0x7F;
				UART_CRC += 0x7F;
				break;
			case 0x01:
				RX_Buffer[UART_ptr++] = 0x7E;
				UART_CRC += 0x7E;
				break;
			case 0x02:
				RX_Buffer[UART_ptr++] = 0x7D;
				UART_CRC += 0x7D;
				break;
			case 0x03:
				RX_Buffer[UART_ptr++] = 0x7C;
				UART_CRC += 0x7C;
				break;
			case 0x04:
				RX_Buffer[UART_ptr++] = 0x7B;
				UART_CRC += 0x7B;
				break;
			case 0x05:
				RX_Buffer[UART_ptr++] = 0x7A;
				UART_CRC += 0x7A;
				break;
			case 0x06:
				RX_Buffer[UART_ptr++] = 0x79;
				UART_CRC += 0x79;
				break;
			case 0x07:
				RX_Buffer[UART_ptr++] = 0x78;
				UART_CRC += 0x78;
				break;
			default:
				UART_State = 0;
				break;
			}
			break;
		}
	}
}